Merge remote-tracking branch 'origin/master' into YaSp 99/9399/2
Cedric Delamarre [Tue, 9 Oct 2012 14:38:33 +0000 (16:38 +0200)]
Conflicts:
scilab/Makefile.am
scilab/Makefile.in
scilab/configure
scilab/configure.ac
scilab/etc/scilab.start
scilab/libs/GetWindowsVersion/GetWindowsVersion.rc
scilab/libs/MALLOC/MALLOC.rc
scilab/libs/doublylinkedlist/doublylinkedlist.rc
scilab/libs/dynamiclibrary/dynamiclibrary.rc
scilab/libs/hashtable/hashtable.rc
scilab/libs/libst/libst.rc
scilab/modules/action_binding/src/c/action_binding.rc
scilab/modules/action_binding/src/java/org/scilab/modules/action_binding/InterpreterManagement.java
scilab/modules/action_binding/src/java/org/scilab/modules/action_binding/InterpreterManagementJNI.java
scilab/modules/action_binding/src/jni/InterpreterManagement_wrap.c
scilab/modules/action_binding/src/jni/Signal.hxx
scilab/modules/action_binding/src/noaction_binding/noaction_binding.rc
scilab/modules/api_scilab/Makefile.am
scilab/modules/api_scilab/Makefile.in
scilab/modules/api_scilab/api_scilab.vcxproj.filters
scilab/modules/api_scilab/includes/api_error.h
scilab/modules/api_scilab/includes/api_string.h
scilab/modules/api_scilab/src/c/api_scilab.rc
scilab/modules/api_scilab/src/cpp/api_double.cpp
scilab/modules/api_scilab/src/cpp/api_string.cpp
scilab/modules/arnoldi/src/c/arnoldi.rc
scilab/modules/boolean/src/c/boolean.rc
scilab/modules/boolean/src/fortran/boolean_f.rc
scilab/modules/cacsd/src/c/cacsd.rc
scilab/modules/cacsd/src/fortran/cacsd_f.rc
scilab/modules/cacsd/src/slicot/slicot_f/slicot_f.rc
scilab/modules/call_scilab/src/c/call_scilab.rc
scilab/modules/commons/src/c/commons.rc
scilab/modules/commons/src/fortran/commons_f.rc
scilab/modules/commons/src/java/org/scilab/modules/commons/CommonFileUtils.java
scilab/modules/commons/src/java/org/scilab/modules/commons/CommonFileUtilsJNI.java
scilab/modules/commons/src/jni/CommonFileUtils_wrap.c
scilab/modules/commons/src/jni/GiwsException.hxx
scilab/modules/completion/src/c/completion.rc
scilab/modules/completion/src/java/org/scilab/modules/completion/Completion.java
scilab/modules/completion/src/java/org/scilab/modules/completion/CompletionJNI.java
scilab/modules/completion/src/jni/Completion_wrap.c
scilab/modules/completion/src/nocompletion/nocompletion.rc
scilab/modules/console/src/c/console.rc
scilab/modules/console/src/java/org/scilab/modules/console/DropFiles.java
scilab/modules/console/src/java/org/scilab/modules/console/DropFilesJNI.java
scilab/modules/console/src/jni/CallScilabBridge.hxx
scilab/modules/console/src/jni/DropFiles_wrap.c
scilab/modules/console/src/noconsole/noconsole.rc
scilab/modules/core/includes/version.h.in
scilab/modules/core/includes/version.h.vc
scilab/modules/core/macros/toolboxes.sci
scilab/modules/core/sci_gateway/c/sci_getscilabmode.c
scilab/modules/core/src/c/callDynamicGateway.c
scilab/modules/core/src/c/callinterf.c
scilab/modules/core/src/c/core.vcxproj
scilab/modules/core/src/c/dynamic_gateways.c
scilab/modules/core/src/c/gw_dynamic_generic.c
scilab/modules/core/src/c/realmain.c
scilab/modules/core/src/c/tmpdir.c
scilab/modules/core/src/c/xscion.c
scilab/modules/data_structures/src/c/data_structures.rc
scilab/modules/data_structures/src/fortran/data_structures_f.rc
scilab/modules/differential_equations/src/c/differential_equations.rc
scilab/modules/differential_equations/src/fortran/differential_equations_f.rc
scilab/modules/double/src/c/double.rc
scilab/modules/double/src/fortran/double_f.rc
scilab/modules/dynamic_link/src/c/dynamic_link.rc
scilab/modules/dynamic_link/src/fortran/dynamic_link_f.rc
scilab/modules/elementary_functions/src/c/elementary_functions.rc
scilab/modules/elementary_functions/src/fortran/eispack/eispack_f.rc
scilab/modules/elementary_functions/src/fortran/elementary_functions_f.rc
scilab/modules/elementary_functions/src/fortran/linpack/linpack_f.rc
scilab/modules/elementary_functions/src/fortran/slatec/slatec_f.rc
scilab/modules/fftw/sci_gateway/c/sci_fftw.c
scilab/modules/fftw/sci_gateway/c/sci_fftw_flags.c
scilab/modules/fftw/src/c/fftw.rc
scilab/modules/fftw/src/nofftw/nofftw.rc
scilab/modules/fileio/sci_gateway/c/sci_mgetl.c
scilab/modules/fileio/sci_gateway/c/sci_mputl.c
scilab/modules/fileio/src/c/fileio.rc
scilab/modules/fileio/src/c/mgetl.c
scilab/modules/functions/src/c/functions.rc
scilab/modules/functions/src/fortran/functions_f.rc
scilab/modules/graphic_export/graphic_export.rc
scilab/modules/graphic_export/graphic_export.vcxproj
scilab/modules/graphic_export/src/jni/Driver.hxx
scilab/modules/graphic_export/src/jni/FileExporter.hxx
scilab/modules/graphic_export/src/jni/JOGLConstant.hxx
scilab/modules/graphic_export/src/nographic_export/nographic_export.rc
scilab/modules/graphic_objects/src/c/graphic_objects.vcxproj.filters
scilab/modules/graphic_objects/src/jni/CallGraphicController.hxx
scilab/modules/graphics/graphic.rc
scilab/modules/graphics/sci_gateway/c/sci_xget.c
scilab/modules/graphics/src/nographics/nographics.rc
scilab/modules/gui/images/icons/aboutscilab.png
scilab/modules/gui/sci_gateway/cpp/sci_displaytree.cpp
scilab/modules/gui/src/c/gui.rc
scilab/modules/gui/src/java/org/scilab/modules/gui/ScilabTermination.java
scilab/modules/gui/src/java/org/scilab/modules/gui/ScilabTerminationJNI.java
scilab/modules/gui/src/jni/CallScilabBridge.hxx
scilab/modules/gui/src/jni/Juigetfile.hxx
scilab/modules/gui/src/jni/Jxclick.hxx
scilab/modules/gui/src/jni/Jxgetmouse.hxx
scilab/modules/gui/src/jni/LookAndFeelManager.hxx
scilab/modules/gui/src/jni/ScilabDisplayTree.hxx
scilab/modules/gui/src/jni/ScilabTermination_wrap.c
scilab/modules/gui/src/jni/SwingView.hxx
scilab/modules/gui/src/jni/UIElementMapper.hxx
scilab/modules/gui/src/nogui/nogui.rc
scilab/modules/hdf5/src/c/hdf5.rc
scilab/modules/helptools/data/pages/homepage-en_US.html
scilab/modules/helptools/data/pages/homepage-fr_FR.html
scilab/modules/helptools/src/c/helptools.rc
scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/ScilabImageConverter.java
scilab/modules/helptools/src/jni/BuildDocObject.hxx
scilab/modules/helptools/src/jni/SciDocMain.hxx
scilab/modules/history_browser/src/c/history_browser.rc
scilab/modules/history_browser/src/jni/CommandHistory.hxx
scilab/modules/history_browser/src/nohistory_browser/nohistory_browser.rc
scilab/modules/history_manager/src/c/history_manager.rc
scilab/modules/integer/src/c/integer.rc
scilab/modules/integer/src/fortran/integer_f.rc
scilab/modules/interpolation/src/c/interpolation.rc
scilab/modules/interpolation/src/fortran/interpolation_f.rc
scilab/modules/intersci/src/lib/intersci.rc
scilab/modules/io/sci_gateway/c/sci_host.c
scilab/modules/io/src/c/io.rc
scilab/modules/io/src/fortran/io_f.rc
scilab/modules/javasci/javasci.rc
scilab/modules/javasci/src/java/org/scilab/modules/javasci/Call_Scilab.java
scilab/modules/javasci/src/java/org/scilab/modules/javasci/Call_ScilabJNI.java
scilab/modules/javasci/src/jni/call_scilab_wrap.c
scilab/modules/jvm/src/c/libjvm.rc
scilab/modules/jvm/src/nojvm/nojvm.rc
scilab/modules/linear_algebra/src/c/linear_algebra.rc
scilab/modules/linear_algebra/src/fortran/linear_algebra_f.rc
scilab/modules/localization/src/java/org/scilab/modules/localization/LocaleToLCID.java
scilab/modules/localization/src/java/org/scilab/modules/localization/LocaleToLCIDJNI.java
scilab/modules/localization/src/java/org/scilab/modules/localization/Messages.java
scilab/modules/localization/src/java/org/scilab/modules/localization/MessagesJNI.java
scilab/modules/localization/src/jni/LocaleToLCID_wrap.c
scilab/modules/localization/src/jni/Messages_wrap.c
scilab/modules/localization/src/localization.rc
scilab/modules/matio/src/c/matio.rc
scilab/modules/matio/src/nomatio/nomatio.rc
scilab/modules/mexlib/src/libmat/libmat.rc
scilab/modules/mexlib/src/libmex/libmex.rc
scilab/modules/mexlib/src/libmx/libmx.rc
scilab/modules/optimization/src/c/optimization.rc
scilab/modules/optimization/src/fortran/optimization_f.rc
scilab/modules/output_stream/src/c/output_stream.rc
scilab/modules/output_stream/src/fortran/output_stream_f.rc
scilab/modules/parallel/src/c/parallel.rc
scilab/modules/parameters/src/c/parameters.rc
scilab/modules/polynomials/src/c/polynomials.rc
scilab/modules/polynomials/src/fortran/polynomials_f.rc
scilab/modules/preferences/src/jni/ScilabPreferences.hxx
scilab/modules/randlib/src/c/randlib.rc
scilab/modules/randlib/src/fortran/randlib_f.rc
scilab/modules/randlib/src/norandlib/norandlib.rc
scilab/modules/renderer/renderer.rc
scilab/modules/renderer/src/jni/CallRenderer.hxx
scilab/modules/renderer/src/jni/XlFontManager.hxx
scilab/modules/renderer/src/norenderer/norenderer.rc
scilab/modules/scicos/src/c/noscicos/noscicos.rc
scilab/modules/scicos/src/c/scicos.rc
scilab/modules/scicos/src/fortran/scicos_f.rc
scilab/modules/scicos/src/scicos_sundials/scicos_sundials.rc
scilab/modules/scicos_blocks/src/c/scicos_blocks.rc
scilab/modules/scicos_blocks/src/fortran/scicos_blocks_f.rc
scilab/modules/scicos_blocks/src/jni/AfficheBlock.hxx
scilab/modules/scinotes/src/c/scinotes.rc
scilab/modules/scinotes/src/java/org/scilab/modules/scinotes/ScilabKeywords.java
scilab/modules/scinotes/src/java/org/scilab/modules/scinotes/ScilabKeywordsJNI.java
scilab/modules/scinotes/src/jni/SciNotes.hxx
scilab/modules/scinotes/src/jni/ScilabKeywords_wrap.c
scilab/modules/signal_processing/src/c/signal_processing.rc
scilab/modules/signal_processing/src/fortran/signal_processing_f.rc
scilab/modules/sound/sci_gateway/c/sci_PlaySound.c
scilab/modules/sound/sci_gateway/c/sci_beep.c
scilab/modules/sound/src/c/sound.rc
scilab/modules/sound/src/nosound/nosound.rc
scilab/modules/sparse/src/c/sparse.rc
scilab/modules/sparse/src/fortran/sparse_f.rc
scilab/modules/special_functions/sci_gateway/c/sci_besseli.c
scilab/modules/special_functions/sci_gateway/c/sci_besselj.c
scilab/modules/special_functions/sci_gateway/c/sci_besselk.c
scilab/modules/special_functions/sci_gateway/c/sci_bessely.c
scilab/modules/special_functions/sci_gateway/c/sci_dlgamma.c
scilab/modules/special_functions/sci_gateway/c/sci_gamma.c
scilab/modules/special_functions/sci_gateway/c/sci_lgamma.c
scilab/modules/special_functions/src/c/special_functions.rc
scilab/modules/special_functions/src/fortran/special_functions_f.rc
scilab/modules/spreadsheet/Makefile.am
scilab/modules/spreadsheet/Makefile.in
scilab/modules/spreadsheet/sci_gateway/c/gw_spreadsheet.c
scilab/modules/spreadsheet/sci_gateway/spreadsheet_gateway.xml
scilab/modules/spreadsheet/spreadsheet.vcxproj
scilab/modules/spreadsheet/src/c/spreadsheet.rc
scilab/modules/spreadsheet/src/nospreadsheet/nospreadsheet.rc
scilab/modules/statistics/src/c/statistics.rc
scilab/modules/statistics/src/dcdflib/dcd_f/dcd_f.rc
scilab/modules/string/sci_gateway/c/sci_grep.c
scilab/modules/string/sci_gateway/c/sci_regexp.c
scilab/modules/string/sci_gateway/c/sci_strindex.c
scilab/modules/string/src/c/pcre_private.c
scilab/modules/string/src/c/pcre_private.h
scilab/modules/string/src/c/string.rc
scilab/modules/string/src/c/string.vcxproj
scilab/modules/string/src/c/string.vcxproj.filters
scilab/modules/string/src/c/strsubst.c
scilab/modules/string/src/fortran/string_f.rc
scilab/modules/symbolic/src/c/symbolic.rc
scilab/modules/symbolic/src/fortran/symbolic_f.rc
scilab/modules/tclsci/src/c/tclsci.rc
scilab/modules/time/sci_gateway/c/sci_sleep.c
scilab/modules/time/src/c/time.rc
scilab/modules/types/src/jni/ScilabVariables.hxx
scilab/modules/types/src/jni/ScilabVariablesRefresh.hxx
scilab/modules/types/src/jni/getScilabVariable_wrap.c
scilab/modules/ui_data/src/java/org/scilab/modules/ui_data/UI_data.java
scilab/modules/ui_data/src/java/org/scilab/modules/ui_data/UI_dataJNI.java
scilab/modules/ui_data/src/jni/BrowseVar.hxx
scilab/modules/ui_data/src/jni/EditVar.hxx
scilab/modules/ui_data/src/jni/FileBrowser.hxx
scilab/modules/ui_data/src/jni/ui_data_wrap.c
scilab/modules/umfpack/src/c/umfpack.rc
scilab/modules/umfpack/src/noumfpack/noumfpack.rc
scilab/modules/windows_tools/src/c/CScilex/CScilex.rc
scilab/modules/windows_tools/src/c/WScilex/WScilex.rc
scilab/modules/windows_tools/src/c/scilab_windows/scilab_windows.rc
scilab/modules/windows_tools/src/c/windows_tools.rc
scilab/modules/windows_tools/src/nowindows_tools/nowindows_tools.rc
scilab/modules/xcos/includes/gw_xcos.h
scilab/modules/xcos/sci_gateway/c/gw_xcos.c
scilab/modules/xcos/src/c/xcos.rc
scilab/modules/xcos/src/jni/Modelica.hxx
scilab/modules/xcos/src/jni/Palette.hxx
scilab/modules/xcos/src/jni/Xcos.hxx
scilab/tools/.gitignore
scilab/tools/innosetup/components.iss

Change-Id: I26e8557c08a0c6752103ea4491cfa005f6da12f3

175 files changed:
1  2 
scilab/.gitignore
scilab/Makefile.am
scilab/Makefile.in
scilab/Scilab.sln
scilab/aclocal.m4
scilab/bin/scilab
scilab/configure
scilab/etc/scilab.start
scilab/modules/api_scilab/Makefile.am
scilab/modules/api_scilab/Makefile.in
scilab/modules/api_scilab/api_scilab.vcxproj
scilab/modules/api_scilab/api_scilab.vcxproj.filters
scilab/modules/api_scilab/includes/api_common.h
scilab/modules/api_scilab/includes/api_double.h
scilab/modules/api_scilab/includes/api_error.h
scilab/modules/api_scilab/includes/api_scilab.h
scilab/modules/api_scilab/includes/api_string.h
scilab/modules/api_scilab/src/cpp/api_common.cpp
scilab/modules/api_scilab/src/cpp/api_double.cpp
scilab/modules/api_scilab/src/cpp/api_handle.cpp
scilab/modules/api_scilab/src/cpp/api_string.cpp
scilab/modules/commons/src/jni/ScilabCommons_wrap.c
scilab/modules/core/includes/callinterf.h
scilab/modules/core/includes/machine.h.in
scilab/modules/core/includes/version.h.in
scilab/modules/core/includes/version.h.vc
scilab/modules/core/macros/toolboxes.sci
scilab/modules/core/src/c/callinterf.c
scilab/modules/core/src/c/core.vcxproj
scilab/modules/core/src/c/core.vcxproj.filters
scilab/modules/core/src/c/dynamic_gateways.c
scilab/modules/core/src/c/gw_dynamic_generic.c
scilab/modules/core/src/c/xscion.c
scilab/modules/fftw/Makefile.am
scilab/modules/fftw/Makefile.in
scilab/modules/fftw/fftw.vcxproj
scilab/modules/fftw/fftw.vcxproj.filters
scilab/modules/fftw/includes/gw_fftw.h
scilab/modules/fftw/sci_gateway/c/gw_fftw.c
scilab/modules/fftw/sci_gateway/c/sci_dct.c
scilab/modules/fftw/sci_gateway/c/sci_disposefftwlibrary.c
scilab/modules/fftw/sci_gateway/c/sci_dst.c
scilab/modules/fftw/sci_gateway/c/sci_fftw.c
scilab/modules/fftw/sci_gateway/c/sci_fftw_flags.c
scilab/modules/fftw/sci_gateway/c/sci_fftw_forget_wisdom.c
scilab/modules/fftw/sci_gateway/c/sci_fftwlibraryisloaded.c
scilab/modules/fftw/sci_gateway/c/sci_get_fftw_wisdom.c
scilab/modules/fftw/sci_gateway/c/sci_loadfftwlibrary.c
scilab/modules/fftw/sci_gateway/c/sci_set_fftw_wisdom.c
scilab/modules/fftw/src/c/sci_data_utilities.c
scilab/modules/fileio/includes/mopen.h
scilab/modules/fileio/src/c/fscanfMat.c
scilab/modules/graphic_export/Makefile.am
scilab/modules/graphic_export/Makefile.in
scilab/modules/graphic_export/graphic_export.vcxproj
scilab/modules/graphic_export/graphic_export.vcxproj.filters
scilab/modules/graphic_export/includes/gw_graphic_export.h
scilab/modules/graphic_export/sci_gateway/c/gw_graphic_export.c
scilab/modules/graphic_export/sci_gateway/c/sci_xs2bmp.c
scilab/modules/graphic_export/sci_gateway/c/sci_xs2eps.c
scilab/modules/graphic_export/sci_gateway/c/sci_xs2gif.c
scilab/modules/graphic_export/sci_gateway/c/sci_xs2jpg.c
scilab/modules/graphic_export/sci_gateway/c/sci_xs2pdf.c
scilab/modules/graphic_export/sci_gateway/c/sci_xs2png.c
scilab/modules/graphic_export/sci_gateway/c/sci_xs2ppm.c
scilab/modules/graphic_export/sci_gateway/c/sci_xs2ps.c
scilab/modules/graphic_export/sci_gateway/c/sci_xs2svg.c
scilab/modules/graphic_export/sci_gateway/c/xs2file.c
scilab/modules/graphic_export/sci_gateway/c/xs2file.h
scilab/modules/graphic_export/sci_gateway/cpp/sci_driver.cpp
scilab/modules/graphic_export/sci_gateway/cpp/sci_xend.cpp
scilab/modules/graphic_export/sci_gateway/cpp/sci_xinit.cpp
scilab/modules/graphic_objects/Makefile.am
scilab/modules/graphic_objects/Makefile.in
scilab/modules/graphic_objects/src/c/graphic_objects.vcxproj
scilab/modules/graphic_objects/src/c/graphic_objects.vcxproj.filters
scilab/modules/graphics/graphics.iss
scilab/modules/graphics/sci_gateway/c/sci_delete.c
scilab/modules/graphics/sci_gateway/c/sci_rotate_axes.c
scilab/modules/graphics/sci_gateway/c/sci_xget.c
scilab/modules/graphics/src/c/InitObjects.c
scilab/modules/graphics/src/c/SetProperty.c
scilab/modules/gui/Makefile.am
scilab/modules/gui/Makefile.in
scilab/modules/gui/sci_gateway/c/sci_toolbar.c
scilab/modules/gui/sci_gateway/c/sci_uicontrol.c
scilab/modules/gui/sci_gateway/c/sci_uimenu.c
scilab/modules/gui/sci_gateway/cpp/sci_displaytree.cpp
scilab/modules/gui/src/cpp/InitUIMenu.cpp
scilab/modules/helptools/Makefile.am
scilab/modules/helptools/Makefile.in
scilab/modules/helptools/data/pages/homepage-en_US.html
scilab/modules/helptools/data/pages/homepage-fr_FR.html
scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/ScilabImageConverter.java
scilab/modules/javasci/src/jni/call_scilab_wrap.c
scilab/modules/optimization/includes/gw_optimization.h
scilab/modules/optimization/sci_gateway/c/sci_qld.c
scilab/modules/optimization/sci_gateway/c/sci_qp_solve.c
scilab/modules/renderer/Makefile.am
scilab/modules/renderer/Makefile.in
scilab/modules/renderer/renderer.iss
scilab/modules/sound/sci_gateway/c/sci_PlaySound.c
scilab/modules/sound/sci_gateway/c/sci_beep.c
scilab/modules/special_functions/includes/gw_special_functions.h
scilab/modules/special_functions/sci_gateway/c/sci_besselh.c
scilab/modules/special_functions/sci_gateway/c/sci_besseli.c
scilab/modules/special_functions/sci_gateway/c/sci_besselj.c
scilab/modules/special_functions/sci_gateway/c/sci_besselk.c
scilab/modules/special_functions/sci_gateway/c/sci_bessely.c
scilab/modules/special_functions/sci_gateway/c/sci_beta.c
scilab/modules/special_functions/sci_gateway/c/sci_dlgamma.c
scilab/modules/special_functions/sci_gateway/c/sci_gamma.c
scilab/modules/special_functions/sci_gateway/c/sci_legendre.c
scilab/modules/special_functions/sci_gateway/c/sci_lgamma.c
scilab/modules/spreadsheet/Makefile.am
scilab/modules/spreadsheet/Makefile.in
scilab/modules/spreadsheet/includes/gw_spreadsheet.h
scilab/modules/spreadsheet/sci_gateway/c/gw_spreadsheet.c
scilab/modules/spreadsheet/sci_gateway/cpp/gw_csv_helpers.cpp
scilab/modules/spreadsheet/sci_gateway/cpp/gw_csv_helpers.h
scilab/modules/spreadsheet/sci_gateway/cpp/gw_csv_tools.h
scilab/modules/spreadsheet/sci_gateway/cpp/sci_csvDefault.cpp
scilab/modules/spreadsheet/sci_gateway/cpp/sci_csvIsnum.cpp
scilab/modules/spreadsheet/sci_gateway/cpp/sci_csvRead.cpp
scilab/modules/spreadsheet/sci_gateway/cpp/sci_csvStringToDouble.cpp
scilab/modules/spreadsheet/sci_gateway/cpp/sci_csvTextScan.cpp
scilab/modules/spreadsheet/sci_gateway/cpp/sci_csvWrite.cpp
scilab/modules/spreadsheet/sci_gateway/spreadsheet_gateway.xml
scilab/modules/spreadsheet/spreadsheet.vcxproj
scilab/modules/spreadsheet/spreadsheet.vcxproj.filters
scilab/modules/spreadsheet/src/cpp/checkCsvWriteFormat.c
scilab/modules/spreadsheet/src/cpp/csvDefault.c
scilab/modules/spreadsheet/src/cpp/csvRead.c
scilab/modules/spreadsheet/src/cpp/csvWrite.c
scilab/modules/spreadsheet/src/cpp/csv_strsubst.cpp
scilab/modules/spreadsheet/src/cpp/getRange.c
scilab/modules/spreadsheet/src/cpp/latintoutf.c
scilab/modules/spreadsheet/src/cpp/stringToComplex.c
scilab/modules/spreadsheet/src/cpp/utftolatin.c
scilab/modules/spreadsheet/src/nospreadsheet/nospreadsheet.vcxproj
scilab/modules/string/includes/pcre_private.h
scilab/modules/string/sci_gateway/cpp/sci_grep.cpp
scilab/modules/string/sci_gateway/cpp/sci_regexp.cpp
scilab/modules/string/sci_gateway/cpp/sci_strindex.cpp
scilab/modules/string/src/c/pcre_private.c
scilab/modules/string/src/c/string.vcxproj
scilab/modules/string/src/c/string.vcxproj.filters
scilab/modules/string/src/c/stringToDouble.c
scilab/modules/string/src/c/strsubst.c
scilab/modules/time/sci_gateway/c/sci_sleep.c
scilab/modules/umfpack/includes/gw_umfpack.h
scilab/modules/umfpack/sci_gateway/c/sci_res_with_prec.c
scilab/modules/umfpack/sci_gateway/c/sci_taucs_chdel.c
scilab/modules/umfpack/sci_gateway/c/sci_taucs_chfact.c
scilab/modules/umfpack/sci_gateway/c/sci_taucs_chget.c
scilab/modules/umfpack/sci_gateway/c/sci_taucs_chinfo.c
scilab/modules/umfpack/sci_gateway/c/sci_taucs_chsolve.c
scilab/modules/umfpack/sci_gateway/c/sci_umf_ludel.c
scilab/modules/umfpack/sci_gateway/c/sci_umf_lufact.c
scilab/modules/umfpack/sci_gateway/c/sci_umf_luget.c
scilab/modules/umfpack/sci_gateway/c/sci_umf_luinfo.c
scilab/modules/umfpack/sci_gateway/c/sci_umf_lusolve.c
scilab/modules/umfpack/sci_gateway/c/sci_umfpack.c
scilab/modules/windows_tools/src/c/scilab_windows/console_main.c
scilab/modules/windows_tools/src/c/scilab_windows/windows_main.c
scilab/modules/xcos/Makefile.am
scilab/modules/xcos/Makefile.in
scilab/modules/xcos/includes/gw_xcos.h
scilab/modules/xcos/sci_gateway/c/gw_xcos.c
scilab/modules/xcos/sci_gateway/cpp/sci_xcosSimulationStarted.cpp
scilab/modules/xcos/src/c/xcos.vcxproj
scilab/modules/xcos/src/c/xcos.vcxproj.filters
scilab/tools/.gitignore
scilab/tools/innosetup/code.iss
scilab/tools/innosetup/components.iss

Simple merge
@@@ -28,7 -28,7 +28,7 @@@ AM_CXXFLAGS = $(SCI_CXXFLAGS
  AM_FFLAGS   = $(SCI_FFLAGS)
  AM_LDFLAGS  = $(SCI_LDFLAGS)
  
- changelogs = CHANGES CHANGES_5.1.X CHANGES_5.2.X CHANGES_5.3.X CHANGES_5.4.X CHANGES_6.0.X
 -changelogs = CHANGES CHANGES_5.1.X CHANGES_5.2.X CHANGES_5.3.X CHANGES_5.4.X  CHANGES_5.5.X
++changelogs = CHANGES CHANGES_5.1.X CHANGES_5.2.X CHANGES_5.3.X CHANGES_5.4.X CHANGES_5.5.X CHANGES_6.0.X
  
  bin_PROGRAMS          = scilab-bin scilab-cli-bin
  
@@@ -657,7 -628,7 +657,7 @@@ AM_CFLAGS = $(SCI_CFLAGS
  AM_CXXFLAGS = $(SCI_CXXFLAGS)
  AM_FFLAGS = $(SCI_FFLAGS)
  AM_LDFLAGS = $(SCI_LDFLAGS)
- changelogs = CHANGES CHANGES_5.1.X CHANGES_5.2.X CHANGES_5.3.X CHANGES_5.4.X CHANGES_6.0.X
 -changelogs = CHANGES CHANGES_5.1.X CHANGES_5.2.X CHANGES_5.3.X CHANGES_5.4.X  CHANGES_5.5.X
++changelogs = CHANGES CHANGES_5.1.X CHANGES_5.2.X CHANGES_5.3.X CHANGES_5.4.X CHANGES_5.5.X CHANGES_6.0.X
  bin_SCRIPTS = bin/scilab bin/scilab-adv-cli bin/scilab-cli \
        $(am__append_1)
  scilab_bin_LDFLAGS = $(AM_LDFLAGS) $(am__append_2)
@@@ -450,64 -441,13 +450,67 @@@ Project("{6989167D-11E4-40FE-8C1A-2192A
        EndProjectSection
  EndProject
  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "api_scilab", "modules\api_scilab\api_scilab.vcxproj", "{43C5BAB1-1DCA-4743-A183-77E0D42FE7D0}"
+       ProjectSection(ProjectDependencies) = postProject
+               {DBC45B0D-6E0A-4107-B284-5A3B0C5BB50D} = {DBC45B0D-6E0A-4107-B284-5A3B0C5BB50D}
+       EndProjectSection
  EndProject
  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdf5", "modules\hdf5\src\c\hdf5.vcxproj", "{A824EA62-AF07-4F43-9036-0E63990556BD}"
 +      ProjectSection(ProjectDependencies) = postProject
 +              {1F4A0344-99ED-461B-BD53-1593788FB34D} = {1F4A0344-99ED-461B-BD53-1593788FB34D}
 +      EndProjectSection
  EndProject
 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "scinotes", "modules\scinotes\src\c\scinotes.vcxproj", "{BAE68B54-2C1A-44D0-A0E9-05156A784E79}"
 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "operations", "modules\operations\operations.vcxproj", "{1BB396F7-CE61-4CFC-9C22-266B2CFB2E74}"
 +      ProjectSection(ProjectDependencies) = postProject
 +              {DBC45B0D-6E0A-4107-B284-5A3B0C5BB50D} = {DBC45B0D-6E0A-4107-B284-5A3B0C5BB50D}
 +              {3A72C3ED-98F7-49C7-B59C-2C6C47FF9390} = {3A72C3ED-98F7-49C7-B59C-2C6C47FF9390}
 +              {3735EFF9-925B-45B1-82CF-762658E69E70} = {3735EFF9-925B-45B1-82CF-762658E69E70}
 +      EndProjectSection
 +EndProject
 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "elem_func_gw", "modules\elementary_functions\sci_gateway\cpp\elem_func_gw\elem_func_gw.vcxproj", "{9881F0CE-A1AC-4744-B709-7C1453A77B95}"
 +      ProjectSection(ProjectDependencies) = postProject
 +              {DBC45B0D-6E0A-4107-B284-5A3B0C5BB50D} = {DBC45B0D-6E0A-4107-B284-5A3B0C5BB50D}
 +              {1F4A0344-99ED-461B-BD53-1593788FB34D} = {1F4A0344-99ED-461B-BD53-1593788FB34D}
 +      EndProjectSection
 +EndProject
 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "functions_manager", "modules\functions_manager\functions_manager.vcxproj", "{8EAC9381-C059-43EA-B5D7-FD5D6997B0BD}"
 +      ProjectSection(ProjectDependencies) = postProject
 +              {9594AC02-20EE-4FBF-95B4-BFA5865ED7CA} = {9594AC02-20EE-4FBF-95B4-BFA5865ED7CA}
 +              {9252A034-7F22-4CB1-A634-4577DA69F2D0} = {9252A034-7F22-4CB1-A634-4577DA69F2D0}
 +      EndProjectSection
 +EndProject
 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "parse", "modules\parse\parse.vcxproj", "{74D43792-DBFC-47F0-ADBC-4D7A20CDADA2}"
 +EndProject
 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "symbol", "modules\symbol\symbol.vcxproj", "{2C60033B-0DBD-4CA4-80D3-176C9BE9CE2F}"
 +EndProject
 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "types", "modules\types\types.vcxproj", "{64E090DA-DCB5-4F4D-93D7-E88DDEC9C2EF}"
 +      ProjectSection(ProjectDependencies) = postProject
 +              {A5911CD7-F8E8-440C-A23E-4843A0636F3A} = {A5911CD7-F8E8-440C-A23E-4843A0636F3A}
 +      EndProjectSection
 +EndProject
 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "system_env", "modules\system_env\system_env.vcxproj", "{7CA60AEF-9AFA-4D06-AF28-613C0AA27640}"
 +      ProjectSection(ProjectDependencies) = postProject
 +              {1F4A0344-99ED-461B-BD53-1593788FB34D} = {1F4A0344-99ED-461B-BD53-1593788FB34D}
 +      EndProjectSection
 +EndProject
 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core_yasp", "modules\core\core_yasp.vcxproj", "{14373D41-991A-412E-8EA7-A832D98047B8}"
 +      ProjectSection(ProjectDependencies) = postProject
 +              {A9A2020D-5541-44F2-B080-DF3C9426C409} = {A9A2020D-5541-44F2-B080-DF3C9426C409}
 +              {9252A034-7F22-4CB1-A634-4577DA69F2D0} = {9252A034-7F22-4CB1-A634-4577DA69F2D0}
 +              {0AEC8745-BB5B-4E66-A59A-7251412C3605} = {0AEC8745-BB5B-4E66-A59A-7251412C3605}
 +      EndProjectSection
 +EndProject
 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boolean_gw", "modules\boolean\src\cpp\boolean_gw.vcxproj", "{09E6CF32-EF2F-4C63-A2B8-B04964768BD6}"
 +EndProject
 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core_gw", "modules\core\src\cpp\core_gw.vcxproj", "{3E933EB6-D427-4828-9B30-B6B9987491F6}"
 +      ProjectSection(ProjectDependencies) = postProject
 +              {1F4A0344-99ED-461B-BD53-1593788FB34D} = {1F4A0344-99ED-461B-BD53-1593788FB34D}
 +      EndProjectSection
 +EndProject
 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "io_gw", "modules\io\src\cpp\io_gw.vcxproj", "{719EC179-3AD3-4C6B-BBD8-B44C96B1A204}"
 +      ProjectSection(ProjectDependencies) = postProject
 +              {9252A034-7F22-4CB1-A634-4577DA69F2D0} = {9252A034-7F22-4CB1-A634-4577DA69F2D0}
 +              {C2EDD447-BB60-41A1-973B-8213FCA9ECD4} = {C2EDD447-BB60-41A1-973B-8213FCA9ECD4}
 +      EndProjectSection
  EndProject
  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xcos", "modules\xcos\src\c\xcos.vcxproj", "{494FA8C9-6C85-4175-BE4C-9A113C7A3278}"
  EndProject
Simple merge
Simple merge
@@@ -1,7 -1,7 +1,7 @@@
  #! /bin/sh
  # From configure.ac Revision.
  # Guess values for system-dependent variables and create Makefiles.
- # Generated by GNU Autoconf 2.68 for Scilab 6.
 -# Generated by GNU Autoconf 2.69 for Scilab 5.
++# Generated by GNU Autoconf 2.69 for Scilab 6.
  #
  # Report bugs to <http://bugzilla.scilab.org/>.
  #
  test -n "$ac_init_help" && exit $ac_status
  if $ac_init_version; then
    cat <<\_ACEOF
 -Scilab configure 5
 +Scilab configure 6
- generated by GNU Autoconf 2.68
+ generated by GNU Autoconf 2.69
  
- Copyright (C) 2010 Free Software Foundation, Inc.
+ Copyright (C) 2012 Free Software Foundation, Inc.
  This configure script is free software; the Free Software Foundation
  gives unlimited permission to copy, distribute and modify it.
  _ACEOF
@@@ -2796,8 -2704,8 +2819,8 @@@ cat >config.log <<_ACEO
  This file contains any messages produced by compilers while
  running configure, to aid debugging if configure makes a mistake.
  
 -It was created by Scilab $as_me 5, which was
 +It was created by Scilab $as_me 6, which was
- generated by GNU Autoconf 2.68.  Invocation command line was
+ generated by GNU Autoconf 2.69.  Invocation command line was
  
    $ $0 $@
  
  
  
  
 +###############################
 +### Regenerate the parser files
 +### Flex & Yacc
 +###############################
 +
 +if test "$enable_build_parser" = yes; then
 +
 +   for ac_prog in flex lex
 +do
 +  # Extract the first word of "$ac_prog", so it can be a program name with args.
 +set dummy $ac_prog; ac_word=$2
 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 +$as_echo_n "checking for $ac_word... " >&6; }
 +if ${ac_cv_prog_LEX+:} false; then :
 +  $as_echo_n "(cached) " >&6
 +else
 +  if test -n "$LEX"; then
 +  ac_cv_prog_LEX="$LEX" # Let the user override the test.
 +else
 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 +for as_dir in $PATH
 +do
 +  IFS=$as_save_IFS
 +  test -z "$as_dir" && as_dir=.
 +    for ac_exec_ext in '' $ac_executable_extensions; do
-   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 +    ac_cv_prog_LEX="$ac_prog"
 +    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
 +    break 2
 +  fi
 +done
 +  done
 +IFS=$as_save_IFS
 +
 +fi
 +fi
 +LEX=$ac_cv_prog_LEX
 +if test -n "$LEX"; then
 +  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5
 +$as_echo "$LEX" >&6; }
 +else
 +  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 +$as_echo "no" >&6; }
 +fi
 +
 +
 +  test -n "$LEX" && break
 +done
 +test -n "$LEX" || LEX=":"
 +
 +if test "x$LEX" != "x:"; then
 +  cat >conftest.l <<_ACEOF
 +%%
 +a { ECHO; }
 +b { REJECT; }
 +c { yymore (); }
 +d { yyless (1); }
- e { yyless (input () != 0); }
++e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument.  */
++    yyless ((input () != 0)); }
 +f { unput (yytext[0]); }
 +. { BEGIN INITIAL; }
 +%%
 +#ifdef YYTEXT_POINTER
 +extern char *yytext;
 +#endif
 +int
 +main (void)
 +{
 +  return ! yylex () + ! yywrap ();
 +}
 +_ACEOF
 +{ { ac_try="$LEX conftest.l"
 +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 "$LEX conftest.l") 2>&5
 +  ac_status=$?
 +  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
 +  test $ac_status = 0; }
 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5
 +$as_echo_n "checking lex output file root... " >&6; }
 +if ${ac_cv_prog_lex_root+:} false; then :
 +  $as_echo_n "(cached) " >&6
 +else
 +
 +if test -f lex.yy.c; then
 +  ac_cv_prog_lex_root=lex.yy
 +elif test -f lexyy.c; then
 +  ac_cv_prog_lex_root=lexyy
 +else
 +  as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5
 +fi
 +fi
 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5
 +$as_echo "$ac_cv_prog_lex_root" >&6; }
 +LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
 +
 +if test -z "${LEXLIB+set}"; then
 +  { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5
 +$as_echo_n "checking lex library... " >&6; }
 +if ${ac_cv_lib_lex+:} false; then :
 +  $as_echo_n "(cached) " >&6
 +else
 +
 +    ac_save_LIBS=$LIBS
 +    ac_cv_lib_lex='none needed'
 +    for ac_lib in '' -lfl -ll; do
 +      LIBS="$ac_lib $ac_save_LIBS"
 +      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 +/* end confdefs.h.  */
 +`cat $LEX_OUTPUT_ROOT.c`
 +_ACEOF
 +if ac_fn_c_try_link "$LINENO"; then :
 +  ac_cv_lib_lex=$ac_lib
 +fi
 +rm -f core conftest.err conftest.$ac_objext \
 +    conftest$ac_exeext conftest.$ac_ext
 +      test "$ac_cv_lib_lex" != 'none needed' && break
 +    done
 +    LIBS=$ac_save_LIBS
 +
 +fi
 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5
 +$as_echo "$ac_cv_lib_lex" >&6; }
 +  test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex
 +fi
 +
 +
 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5
 +$as_echo_n "checking whether yytext is a pointer... " >&6; }
 +if ${ac_cv_prog_lex_yytext_pointer+:} false; then :
 +  $as_echo_n "(cached) " >&6
 +else
 +  # POSIX says lex can declare yytext either as a pointer or an array; the
 +# default is implementation-dependent.  Figure out which it is, since
 +# not all implementations provide the %pointer and %array declarations.
 +ac_cv_prog_lex_yytext_pointer=no
 +ac_save_LIBS=$LIBS
 +LIBS="$LEXLIB $ac_save_LIBS"
 +cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 +/* end confdefs.h.  */
 +
 +  #define YYTEXT_POINTER 1
 +`cat $LEX_OUTPUT_ROOT.c`
 +_ACEOF
 +if ac_fn_c_try_link "$LINENO"; then :
 +  ac_cv_prog_lex_yytext_pointer=yes
 +fi
 +rm -f core conftest.err conftest.$ac_objext \
 +    conftest$ac_exeext conftest.$ac_ext
 +LIBS=$ac_save_LIBS
 +
 +fi
 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5
 +$as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; }
 +if test $ac_cv_prog_lex_yytext_pointer = yes; then
 +
 +$as_echo "#define YYTEXT_POINTER 1" >>confdefs.h
 +
 +fi
 +rm -f conftest.l $LEX_OUTPUT_ROOT.c
 +
 +fi
 +   if test -z "$LEX" -o "$LEX" = ":"; then
 +        as_fn_error $? "No implementation of Lex (flex, lex) detected. Please install it (package flex)" "$LINENO" 5
 +   fi
 +
 +   for ac_prog in 'bison -y' byacc
 +do
 +  # Extract the first word of "$ac_prog", so it can be a program name with args.
 +set dummy $ac_prog; ac_word=$2
 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 +$as_echo_n "checking for $ac_word... " >&6; }
 +if ${ac_cv_prog_YACC+:} false; then :
 +  $as_echo_n "(cached) " >&6
 +else
 +  if test -n "$YACC"; then
 +  ac_cv_prog_YACC="$YACC" # Let the user override the test.
 +else
 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 +for as_dir in $PATH
 +do
 +  IFS=$as_save_IFS
 +  test -z "$as_dir" && as_dir=.
 +    for ac_exec_ext in '' $ac_executable_extensions; do
-   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 +    ac_cv_prog_YACC="$ac_prog"
 +    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
 +    break 2
 +  fi
 +done
 +  done
 +IFS=$as_save_IFS
 +
 +fi
 +fi
 +YACC=$ac_cv_prog_YACC
 +if test -n "$YACC"; then
 +  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
 +$as_echo "$YACC" >&6; }
 +else
 +  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 +$as_echo "no" >&6; }
 +fi
 +
 +
 +  test -n "$YACC" && break
 +done
 +test -n "$YACC" || YACC="yacc"
 +
 +   if test -z "$YACC"; then
 +        as_fn_error $? "No implementation of Yacc (bison, yacc) detected. Please install it (package bison)" "$LINENO" 5
 +  fi
 +# Actually, AC_PROG_YACC is lying. It sometimes put yacc into $YACC even it
 +# hasn't been able to find it.
 +#  AC_CHECK_PROG(YACC_PRESENT, $YACC, AC_MSG_ERROR([No implementation of Yacc (bison, yacc) detected. Please install it (package bison)]) )
 +
 +   # Extract the first word of "$YACC", so it can be a program name with args.
 +set dummy $YACC; ac_word=$2
 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 +$as_echo_n "checking for $ac_word... " >&6; }
 +if ${ac_cv_prog_yacc_present+:} false; then :
 +  $as_echo_n "(cached) " >&6
 +else
 +  if test -n "$yacc_present"; then
 +  ac_cv_prog_yacc_present="$yacc_present" # Let the user override the test.
 +else
 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 +for as_dir in $PATH
 +do
 +  IFS=$as_save_IFS
 +  test -z "$as_dir" && as_dir=.
 +    for ac_exec_ext in '' $ac_executable_extensions; do
-   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 +    ac_cv_prog_yacc_present=""yes""
 +    $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
 +
 +  test -z "$ac_cv_prog_yacc_present" && ac_cv_prog_yacc_present=""no""
 +fi
 +fi
 +yacc_present=$ac_cv_prog_yacc_present
 +if test -n "$yacc_present"; then
 +  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $yacc_present" >&5
 +$as_echo "$yacc_present" >&6; }
 +else
 +  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 +$as_echo "no" >&6; }
 +fi
 +
 +
 +   if test "x$yacc_present" != "xyes"; then
 +      as_fn_error $? "No implementation of Yacc (bison, yacc) detected. Please install it (package bison)" "$LINENO" 5
 +   fi
 +
 +fi
 + if test "$enable_build_parser" = yes; then
 +  BUILD_PARSER_TRUE=
 +  BUILD_PARSER_FALSE='#'
 +else
 +  BUILD_PARSER_TRUE='#'
 +  BUILD_PARSER_FALSE=
 +fi
 +
  
  #################
  ## HDF5
@@@ -10974,7 -10596,7 +10996,7 @@@ $as_echo "$ac_java_classpath" >&6; 
  $as_echo_n "checking to see if the java compiler works... " >&6; }
  
      cat << \EOF > conftest.java
- // #line 10977 "configure"
 -// #line 10599 "configure"
++// #line 10999 "configure"
  import java.util.regex.Pattern;
  
  
@@@ -11061,7 -10683,7 +11083,7 @@@ $as_echo_n "checking type of jvm... " >
      if test "x$ac_java_jvm_name" = "x" ; then
  
      cat << \EOF > conftest.java
- // #line 11064 "configure"
 -// #line 10686 "configure"
++// #line 11086 "configure"
  import java.util.regex.Pattern;
  
  import gnu.java.io.EncodingManager;
@@@ -11145,7 -10767,7 +11167,7 @@@ $as_echo_n "checking java API version..
      # The class java.nio.charset.Charset is new to 1.4
  
      cat << \EOF > conftest.java
- // #line 11148 "configure"
 -// #line 10770 "configure"
++// #line 11170 "configure"
  import java.util.regex.Pattern;
  
  import java.nio.charset.Charset;
      # The class java.lang.StringBuilder is new to 1.5
  
      cat << \EOF > conftest.java
- // #line 11213 "configure"
 -// #line 10835 "configure"
++// #line 11235 "configure"
  import java.util.regex.Pattern;
  
  import java.lang.StringBuilder;
      # The class java.util.ArrayDeque is new to 1.6
  
      cat << \EOF > conftest.java
- // #line 11278 "configure"
 -// #line 10900 "configure"
++// #line 11300 "configure"
  import java.util.regex.Pattern;
  
  import java.util.ArrayDeque;
      # The class java.nio.file.Path is new to 1.7
  
      cat << \EOF > conftest.java
- // #line 11343 "configure"
 -// #line 10965 "configure"
++// #line 11365 "configure"
  import java.util.regex.Pattern;
  
  import java.nio.file.Path;
@@@ -12724,7 -12346,7 +12746,7 @@@ $as_echo_n "checking jgraphx... " >&6; 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 12727 "configure"
 -// #line 12349 "configure"
++// #line 12749 "configure"
  import java.util.regex.Pattern;
  
  import com.mxgraph.model.mxCell;
@@@ -12831,7 -12453,7 +12853,7 @@@ $as_echo_n "checking minimal version (1
     if test "x" == "x"; then
  
      cat << \EOF > conftest.java
- // #line 12834 "configure"
 -// #line 12456 "configure"
++// #line 12856 "configure"
  import java.util.regex.Pattern;
  
  import com.mxgraph.view.mxGraph;
     else
  
      cat << \EOF > conftest.java
- // #line 12906 "configure"
 -// #line 12528 "configure"
++// #line 12928 "configure"
  import java.util.regex.Pattern;
  
  import com.mxgraph.view.mxGraph;
@@@ -12997,7 -12619,7 +13019,7 @@@ $as_echo_n "checking scirenderer... " >
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 13000 "configure"
 -// #line 12622 "configure"
++// #line 13022 "configure"
  import java.util.regex.Pattern;
  
  import org.scilab.forge.scirenderer.PackageInfo;
@@@ -13104,7 -12726,7 +13126,7 @@@ $as_echo_n "checking minimal version (0
     if test "x" == "x"; then
  
      cat << \EOF > conftest.java
- // #line 13107 "configure"
 -// #line 12729 "configure"
++// #line 13129 "configure"
  import java.util.regex.Pattern;
  
  import org.scilab.forge.scirenderer.PackageInfo;
     else
  
      cat << \EOF > conftest.java
- // #line 13179 "configure"
 -// #line 12801 "configure"
++// #line 13201 "configure"
  import java.util.regex.Pattern;
  
  import org.scilab.forge.scirenderer.PackageInfo;
@@@ -13267,7 -12889,7 +13289,7 @@@ $as_echo_n "checking flexdock... " >&6
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 13270 "configure"
 -// #line 12892 "configure"
++// #line 13292 "configure"
  import java.util.regex.Pattern;
  
  import org.flexdock.docking.DockingManager;
@@@ -13374,7 -12996,7 +13396,7 @@@ $as_echo_n "checking minimal version (1
     if test "x" == "x"; then
  
      cat << \EOF > conftest.java
- // #line 13377 "configure"
 -// #line 12999 "configure"
++// #line 13399 "configure"
  import java.util.regex.Pattern;
  
  import org.flexdock.util.Utilities;
     else
  
      cat << \EOF > conftest.java
- // #line 13449 "configure"
 -// #line 13071 "configure"
++// #line 13471 "configure"
  import java.util.regex.Pattern;
  
  import org.flexdock.util.Utilities;
@@@ -13537,7 -13159,7 +13559,7 @@@ $as_echo_n "checking looks... " >&6; 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 13540 "configure"
 -// #line 13162 "configure"
++// #line 13562 "configure"
  import java.util.regex.Pattern;
  
  import com.jgoodies.looks.common.MenuItemRenderer;
@@@ -13654,7 -13276,7 +13676,7 @@@ $as_echo_n "checking jgoodies-looks... 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 13657 "configure"
 -// #line 13279 "configure"
++// #line 13679 "configure"
  import java.util.regex.Pattern;
  
  import com.jgoodies.looks.common.MenuItemRenderer;
@@@ -13772,7 -13394,7 +13794,7 @@@ $as_echo_n "checking skinlf... " >&6; 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 13775 "configure"
 -// #line 13397 "configure"
++// #line 13797 "configure"
  import java.util.regex.Pattern;
  
  import com.l2fprod.util.AccessUtils;
@@@ -13889,7 -13511,7 +13911,7 @@@ $as_echo_n "checking jogl2... " >&6; 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 13892 "configure"
 -// #line 13514 "configure"
++// #line 13914 "configure"
  import java.util.regex.Pattern;
  
  import javax.media.opengl.glu.GLUnurbs;
@@@ -14112,7 -13734,7 +14134,7 @@@ $as_echo_n "checking gluegen2-rt... " >
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 14115 "configure"
 -// #line 13737 "configure"
++// #line 14137 "configure"
  import java.util.regex.Pattern;
  
  import jogamp.common.os.MachineDescriptionRuntime;
@@@ -14286,7 -13908,7 +14308,7 @@@ $as_echo_n "checking jhall... " >&6; 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 14289 "configure"
 -// #line 13911 "configure"
++// #line 14311 "configure"
  import java.util.regex.Pattern;
  
  import javax.help.JHelp;
@@@ -14403,7 -14025,7 +14425,7 @@@ $as_echo_n "checking javahelp2... " >&6
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 14406 "configure"
 -// #line 14028 "configure"
++// #line 14428 "configure"
  import java.util.regex.Pattern;
  
  import javax.help.JHelp;
@@@ -14521,7 -14143,7 +14543,7 @@@ $as_echo_n "checking jrosetta-API... " 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 14524 "configure"
 -// #line 14146 "configure"
++// #line 14546 "configure"
  import java.util.regex.Pattern;
  
  import com.artenum.rosetta.interfaces.core.ConsoleConfiguration;
@@@ -14636,7 -14258,7 +14658,7 @@@ $as_echo_n "checking jrosetta-api... " 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 14639 "configure"
 -// #line 14261 "configure"
++// #line 14661 "configure"
  import java.util.regex.Pattern;
  
  import com.artenum.rosetta.interfaces.core.ConsoleConfiguration;
@@@ -14754,7 -14376,7 +14776,7 @@@ $as_echo_n "checking jrosetta-engine..
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 14757 "configure"
 -// #line 14379 "configure"
++// #line 14779 "configure"
  import java.util.regex.Pattern;
  
  import com.artenum.rosetta.core.action.AbstractConsoleAction;
@@@ -14860,7 -14482,7 +14882,7 @@@ $as_echo_n "checking minimal version (1
     if test "x" == "x"; then
  
      cat << \EOF > conftest.java
- // #line 14863 "configure"
 -// #line 14485 "configure"
++// #line 14885 "configure"
  import java.util.regex.Pattern;
  
  import com.artenum.rosetta.util.ConfigurationBuilder;
     else
  
      cat << \EOF > conftest.java
- // #line 14935 "configure"
 -// #line 14557 "configure"
++// #line 14957 "configure"
  import java.util.regex.Pattern;
  
  import com.artenum.rosetta.util.ConfigurationBuilder;
@@@ -15025,7 -14647,7 +15047,7 @@@ $as_echo_n "checking jeuclid-core... " 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 15028 "configure"
 -// #line 14650 "configure"
++// #line 15050 "configure"
  import java.util.regex.Pattern;
  
  import net.sourceforge.jeuclid.LayoutContext;
@@@ -15144,7 -14766,7 +15166,7 @@@ $as_echo_n "checking fop... " >&6; 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 15147 "configure"
 -// #line 14769 "configure"
++// #line 15169 "configure"
  import java.util.regex.Pattern;
  
  import org.apache.fop.pdf.PDFInfo;
@@@ -15261,7 -14883,7 +15283,7 @@@ $as_echo_n "checking batik-all... " >&6
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 15264 "configure"
 -// #line 14886 "configure"
++// #line 15286 "configure"
  import java.util.regex.Pattern;
  
  import org.apache.batik.parser.Parser;
@@@ -15378,7 -15000,7 +15400,7 @@@ $as_echo_n "checking batik... " >&6; 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 15381 "configure"
 -// #line 15003 "configure"
++// #line 15403 "configure"
  import java.util.regex.Pattern;
  
  import org.apache.batik.parser.Parser;
@@@ -15485,7 -15107,7 +15507,7 @@@ $as_echo_n "checking minimal version (1
     if test "x" == "x"; then
  
      cat << \EOF > conftest.java
- // #line 15488 "configure"
 -// #line 15110 "configure"
++// #line 15510 "configure"
  import java.util.regex.Pattern;
  
  import org.apache.batik.Version;
     else
  
      cat << \EOF > conftest.java
- // #line 15560 "configure"
 -// #line 15182 "configure"
++// #line 15582 "configure"
  import java.util.regex.Pattern;
  
  import org.apache.batik.Version;
@@@ -15648,7 -15270,7 +15670,7 @@@ $as_echo_n "checking commons-io... " >&
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 15651 "configure"
 -// #line 15273 "configure"
++// #line 15673 "configure"
  import java.util.regex.Pattern;
  
  import org.apache.commons.io.output.CountingOutputStream;
@@@ -15765,7 -15387,7 +15787,7 @@@ $as_echo_n "checking xmlgraphics-common
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 15768 "configure"
 -// #line 15390 "configure"
++// #line 15790 "configure"
  import java.util.regex.Pattern;
  
  import org.apache.xmlgraphics.util.Service;
@@@ -15882,7 -15504,7 +15904,7 @@@ $as_echo_n "checking avalon-framework..
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 15885 "configure"
 -// #line 15507 "configure"
++// #line 15907 "configure"
  import java.util.regex.Pattern;
  
  import org.apache.avalon.framework.configuration.ConfigurationException;
@@@ -15999,7 -15621,7 +16021,7 @@@ $as_echo_n "checking xml-apis-ext... " 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 16002 "configure"
 -// #line 15624 "configure"
++// #line 16024 "configure"
  import java.util.regex.Pattern;
  
  import org.w3c.dom.svg.SVGDocument;
@@@ -16116,7 -15738,7 +16138,7 @@@ $as_echo_n "checking xml-commons-apis-e
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 16119 "configure"
 -// #line 15741 "configure"
++// #line 16141 "configure"
  import java.util.regex.Pattern;
  
  import org.w3c.dom.svg.SVGDocument;
@@@ -16237,7 -15859,7 +16259,7 @@@ $as_echo_n "checking commons-logging..
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 16240 "configure"
 -// #line 15862 "configure"
++// #line 16262 "configure"
  import java.util.regex.Pattern;
  
  import org.apache.commons.logging.LogFactory;
@@@ -16354,7 -15976,7 +16376,7 @@@ $as_echo_n "checking jlatexmath... " >&
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 16357 "configure"
 -// #line 15979 "configure"
++// #line 16379 "configure"
  import java.util.regex.Pattern;
  
  import org.scilab.forge.jlatexmath.TeXFormula;
@@@ -16461,7 -16083,7 +16483,7 @@@ $as_echo_n "checking minimal version (0
     if test "x" == "x"; then
  
      cat << \EOF > conftest.java
- // #line 16464 "configure"
 -// #line 16086 "configure"
++// #line 16486 "configure"
  import java.util.regex.Pattern;
  
  import org.scilab.forge.jlatexmath.TeXFormula;
     else
  
      cat << \EOF > conftest.java
- // #line 16536 "configure"
 -// #line 16158 "configure"
++// #line 16558 "configure"
  import java.util.regex.Pattern;
  
  import org.scilab.forge.jlatexmath.TeXFormula;
@@@ -16630,7 -16252,7 +16652,7 @@@ $as_echo_n "checking checkstyle... " >&
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 16633 "configure"
 -// #line 16255 "configure"
++// #line 16655 "configure"
  import java.util.regex.Pattern;
  
  import com.puppycrawl.tools.checkstyle.CheckStyleTask;
@@@ -16747,7 -16369,7 +16769,7 @@@ $as_echo_n "checking commons-beanutils.
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 16750 "configure"
 -// #line 16372 "configure"
++// #line 16772 "configure"
  import java.util.regex.Pattern;
  
  import org.apache.commons.beanutils.Converter;
@@@ -16864,7 -16486,7 +16886,7 @@@ $as_echo_n "checking antlr... " >&6; 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 16867 "configure"
 -// #line 16489 "configure"
++// #line 16889 "configure"
  import java.util.regex.Pattern;
  
  import antlr.TokenStreamException;
@@@ -16981,7 -16603,7 +17003,7 @@@ $as_echo_n "checking junit4... " >&6; 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 16984 "configure"
 -// #line 16606 "configure"
++// #line 17006 "configure"
  import java.util.regex.Pattern;
  
  import org.junit.Assert;
@@@ -17098,7 -16720,7 +17120,7 @@@ $as_echo_n "checking cobertura... " >&6
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 17101 "configure"
 -// #line 16723 "configure"
++// #line 17123 "configure"
  import java.util.regex.Pattern;
  
  import net.sourceforge.cobertura.merge.Main;
@@@ -17215,7 -16837,7 +17237,7 @@@ $as_echo_n "checking asm3... " >&6; 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 17218 "configure"
 -// #line 16840 "configure"
++// #line 17240 "configure"
  import java.util.regex.Pattern;
  
  import org.objectweb.asm.Type;
@@@ -17331,7 -16953,7 +17353,7 @@@ $as_echo_n "checking asm... " >&6; 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 17334 "configure"
 -// #line 16956 "configure"
++// #line 17356 "configure"
  import java.util.regex.Pattern;
  
  import org.objectweb.asm.Type;
  
  
  #################
 +## EIGEN
 +#################
 +
 +
 +ac_ext=cpp
 +ac_cpp='$CXXCPP $CPPFLAGS'
 +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
 +if test -z "$CXXCPP"; then
 +  if ${ac_cv_prog_CXXCPP+:} false; then :
 +  $as_echo_n "(cached) " >&6
 +else
 +      # Double quotes because CXXCPP needs to be expanded
 +    for CXXCPP in "$CXX -E" "/lib/cpp"
 +    do
 +      ac_preproc_ok=false
 +for ac_cxx_preproc_warn_flag in '' yes
 +do
 +  # Use a header file that comes with gcc, so configuring glibc
 +  # with a fresh cross-compiler works.
 +  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
 +  # <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 confdefs.h - <<_ACEOF >conftest.$ac_ext
 +/* end confdefs.h.  */
 +#ifdef __STDC__
 +# include <limits.h>
 +#else
 +# include <assert.h>
 +#endif
 +                   Syntax error
 +_ACEOF
 +if ac_fn_cxx_try_cpp "$LINENO"; then :
 +
 +else
 +  # Broken: fails on valid input.
 +continue
 +fi
 +rm -f conftest.err conftest.i conftest.$ac_ext
 +
 +  # OK, works on sane cases.  Now check whether nonexistent headers
 +  # can be detected and how.
 +  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 +/* end confdefs.h.  */
 +#include <ac_nonexistent.h>
 +_ACEOF
 +if ac_fn_cxx_try_cpp "$LINENO"; then :
 +  # Broken: success on invalid input.
 +continue
 +else
 +  # Passes both tests.
 +ac_preproc_ok=:
 +break
 +fi
 +rm -f conftest.err conftest.i conftest.$ac_ext
 +
 +done
 +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 +rm -f conftest.i conftest.err conftest.$ac_ext
 +if $ac_preproc_ok; then :
 +  break
 +fi
 +
 +    done
 +    ac_cv_prog_CXXCPP=$CXXCPP
 +
 +fi
 +  CXXCPP=$ac_cv_prog_CXXCPP
 +else
 +  ac_cv_prog_CXXCPP=$CXXCPP
 +fi
 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
 +$as_echo "$CXXCPP" >&6; }
 +ac_preproc_ok=false
 +for ac_cxx_preproc_warn_flag in '' yes
 +do
 +  # Use a header file that comes with gcc, so configuring glibc
 +  # with a fresh cross-compiler works.
 +  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
 +  # <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 confdefs.h - <<_ACEOF >conftest.$ac_ext
 +/* end confdefs.h.  */
 +#ifdef __STDC__
 +# include <limits.h>
 +#else
 +# include <assert.h>
 +#endif
 +                   Syntax error
 +_ACEOF
 +if ac_fn_cxx_try_cpp "$LINENO"; then :
 +
 +else
 +  # Broken: fails on valid input.
 +continue
 +fi
 +rm -f conftest.err conftest.i conftest.$ac_ext
 +
 +  # OK, works on sane cases.  Now check whether nonexistent headers
 +  # can be detected and how.
 +  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 +/* end confdefs.h.  */
 +#include <ac_nonexistent.h>
 +_ACEOF
 +if ac_fn_cxx_try_cpp "$LINENO"; then :
 +  # Broken: success on invalid input.
 +continue
 +else
 +  # Passes both tests.
 +ac_preproc_ok=:
 +break
 +fi
 +rm -f conftest.err conftest.i conftest.$ac_ext
 +
 +done
 +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 +rm -f conftest.i conftest.err conftest.$ac_ext
 +if $ac_preproc_ok; then :
 +
 +else
 +  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
 +See \`config.log' for more details" "$LINENO" 5; }
 +fi
 +
 +ac_ext=cpp
 +ac_cpp='$CXXCPP $CPPFLAGS'
 +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 +
 +
 +
 +ac_ext=cpp
 +ac_cpp='$CXXCPP $CPPFLAGS'
 +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 +
 +
 +
 +# Check whether --with-eigen_include was given.
 +if test "${with_eigen_include+set}" = set; then :
 +  withval=$with_eigen_include; with_eigen_include=$withval
 +else
 +  with_eigen_include='yes'
 +
 +fi
 +
 +
 +
 +save_CPPFLAGS="$CPPFLAGS"
 +
 +if test "x$with_eigen_include" != "xyes"; then
 +      CPPFLAGS="-I$with_eigen_include"
 +      ac_fn_cxx_check_header_mongrel "$LINENO" "Eigen/Sparse" "ac_cv_header_Eigen_Sparse" "$ac_includes_default"
 +if test "x$ac_cv_header_Eigen_Sparse" = xyes; then :
 +  EIGEN_CPPFLAGS="$CPPFLAGS"
 +else
 +  as_fn_error $? "Cannot find headers (Eigen/Sparse) of the library EIGEN in $with_eigen_include. Please install the dev package (Debian : libeigen3-dev)" "$LINENO" 5
 +
 +fi
 +
 +
 +    PATH_TO_EIGEN=$with_eigen_include
 +else
 +      ac_fn_cxx_check_header_mongrel "$LINENO" "Eigen/Sparse" "ac_cv_header_Eigen_Sparse" "$ac_includes_default"
 +if test "x$ac_cv_header_Eigen_Sparse" = xyes; then :
 +  EIGEN_CPPFLAGS=""
 +else
 +         $as_unset ac_cv_header_Eigen_Sparse
 +                CPPFLAGS="-I/usr/include/eigen3/"
 +                ac_fn_cxx_check_header_mongrel "$LINENO" "Eigen/Sparse" "ac_cv_header_Eigen_Sparse" "$ac_includes_default"
 +if test "x$ac_cv_header_Eigen_Sparse" = xyes; then :
 +  EIGEN_CPPFLAGS=$CPPFLAGS
 +else
 +  as_fn_error $? "Cannot find headers (Eigen/Sparse) of the library eigen. Please install the dev package (Debian : libeigen3-dev)" "$LINENO" 5
 +
 +fi
 +
 +
 +
 +fi
 +
 +
 +    PATH_TO_EIGEN="/usr/include/eigen3/"
 +fi
 +CPPFLAGS="$save_CPPFLAGS"
 +
 +CHK_EIGEN_WORLD=3
 +CHK_EIGEN_MAJOR=1
 +CHK_EIGEN_MINOR=0
 +
 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if Eigen is version $CHK_EIGEN_WORLD.$CHK_EIGEN_MAJOR.$CHK_EIGEN_MINOR or later" >&5
 +$as_echo_n "checking if Eigen is version $CHK_EIGEN_WORLD.$CHK_EIGEN_MAJOR.$CHK_EIGEN_MINOR or later... " >&6; }
 +cat > conftest.$ac_ext <<EOF
- #line 21445 "configure"
++#line 21467 "configure"
 +#include "confdefs.h"
 +
 +#include "$PATH_TO_EIGEN/Eigen/Sparse"
 +#if EIGEN_VERSION_AT_LEAST(3,1,0)
 +EIGEN_VERSION_OK
 +#endif
 +
 +EOF
 +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 +  grep "EIGEN_VERSION_OK" >/dev/null 2>&1; then
 +  rm -rf conftest*
 +  \
 +EIGEN_VERSION_OK=1
 +else
 +  rm -rf conftest*
 +  \
 +EIGEN_VERSION_OK=0
 +fi
 +rm -f conftest*
 +
 +if test $EIGEN_VERSION_OK = 0; then
 +   as_fn_error $? "Version $CHK_EIGEN_WORLD.$CHK_EIGEN_MAJOR.$CHK_EIGEN_MINOR of Eigen expected (at least)" "$LINENO" 5
 +else
 +   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 +$as_echo "yes" >&6; }
 +fi
 +
 +
 +
 +$as_echo "#define WITH_EIGEN /**/" >>confdefs.h
 +
 +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
 +
 +
 +
 +
 +#################
  ## MPI
  #################
  
@@@ -25474,7 -24891,7 +25534,7 @@@ CPPFLAGS="$CPPFLAGS -I$CHK_TCL_INCLUDE_
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if tcl is version $CHK_TCL_MAJOR.$CHK_TCL_MINOR or later" >&5
  $as_echo_n "checking if tcl is version $CHK_TCL_MAJOR.$CHK_TCL_MINOR or later... " >&6; }
  cat > conftest.$ac_ext <<EOF
- #line 25477 "configure"
 -#line 24894 "configure"
++#line 25537 "configure"
  #include "confdefs.h"
  
  #include "$CHK_TCL_INCLUDE_PATH/$CHK_TCL_INC_NAME"
@@@ -25784,7 -25201,7 +25844,7 @@@ CPPFLAGS="$CPPFLAGS $TCL_INC_PATH -I$CH
  $as_echo_n "checking if tk is version $CHK_TK_MAJOR.$CHK_TK_MINOR or later... " >&6; }
  
  cat > conftest.$ac_ext <<EOF
- #line 25787 "configure"
 -#line 25204 "configure"
++#line 25847 "configure"
  #include "confdefs.h"
  
  #include "$CHK_TK_INCLUDE_PATH/$CHK_TK_INC_NAME"
@@@ -26362,7 -25779,7 +26422,7 @@@ $as_echo_n "checking saxon... " >&6; 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 26365 "configure"
 -// #line 25782 "configure"
++// #line 26425 "configure"
  import java.util.regex.Pattern;
  
  import com.icl.saxon.Loader;
@@@ -26479,7 -25896,7 +26539,7 @@@ $as_echo_n "checking jlatexmath-fop... 
              export ac_java_classpath="$jar_resolved:$ac_java_classpath"
  
      cat << \EOF > conftest.java
- // #line 26482 "configure"
 -// #line 25899 "configure"
++// #line 26542 "configure"
  import java.util.regex.Pattern;
  
  import org.scilab.forge.jlatexmath.fop.JLaTeXMathObj;
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
- #line 32802 "configure"
 -#line 32219 "configure"
++#line 32862 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
- #line 32908 "configure"
 -#line 32325 "configure"
++#line 32968 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
@@@ -40080,8 -39473,8 +40129,8 @@@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wr
  # report actual input values of CONFIG_FILES etc. instead of their
  # values after options handling.
  ac_log="
 -This file was extended by Scilab $as_me 5, which was
 +This file was extended by Scilab $as_me 6, which was
- generated by GNU Autoconf 2.68.  Invocation command line was
+ generated by GNU Autoconf 2.69.  Invocation command line was
  
    CONFIG_FILES    = $CONFIG_FILES
    CONFIG_HEADERS  = $CONFIG_HEADERS
  cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
  ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
  ac_cs_version="\\
 -Scilab config.status 5
 +Scilab config.status 6
- configured by $0, generated by GNU Autoconf 2.68,
+ configured by $0, generated by GNU Autoconf 2.69,
    with options \\"\$ac_cs_config\\"
  
- Copyright (C) 2010 Free Software Foundation, Inc.
+ Copyright (C) 2012 Free Software Foundation, Inc.
  This config.status script is free software; the Free Software Foundation
  gives unlimited permission to copy, distribute and modify it."
  
@@@ -31,12 -69,23 +31,11 @@@ clear %modalWarning
  PWD = pwd();
  
  // Startup message  ===================================================
 -if (sciargs()<>"-nb") & ~fromjava() & ~fromc() then
 -  write(%io(2),[" ";gettext("Startup execution:")]);
 -  write(%io(2),gettext("  loading initial environment"));
 -end
 -
 -// loads modules ======================================================
 -modules    = getmodules();
 -
 -// Map 'load' to 'old binary files load' called %_load to be able to load Scilab libraries
 -warning("off");
 -load = %_load;
 -warning("on");
 -
 -for i=1:size(modules,"*")
 -  exec("SCI/modules/" + modules(i) + "/etc/" + modules(i) + ".start", -1);
 +//if (sciargs()<>"-nb") & ~fromjava() & ~fromc() then
 +if sciargs() <> "-nb" then
-     banner();
 +  printf("\n\n%s\n", gettext("Startup execution:"));
 +  printf(gettext("  loading initial environment") + "\n");
  end
 -clear modules i load;
  
  // Create some configuration variables ================================
  home = getenv("HOME", SCI);
@@@ -5,52 -5,32 +5,40 @@@
  
  ### SOURCES ###
  
--
- API_SCILAB_CPP_SOURCES = \
 -API_SCILAB_CXX_SOURCES = src/cpp/api_boolean.cpp \
 -src/cpp/api_boolean_sparse.cpp \
 -src/cpp/api_common.cpp \
 -src/cpp/api_double.cpp \
 -src/cpp/api_int.cpp \
 -src/cpp/api_list.cpp \
 -src/cpp/api_poly.cpp \
 -src/cpp/api_sparse.cpp \
 -src/cpp/api_string.cpp \
 -src/cpp/api_pointer.cpp \
 -src/cpp/api_handle.cpp \
 -src/cpp/api_error.cpp
 -
 -
 -libsciapi_scilab_la_CPPFLAGS=-I$(srcdir)/includes/ \
 --I$(srcdir)/src/cpp/ \
 --I$(top_srcdir)/modules/core/includes/ \
 --I$(top_srcdir)/modules/call_scilab/includes/ \
 --I$(top_srcdir)/libs/MALLOC/includes/ \
 --I$(top_srcdir)/modules/localization/includes/ \
 --I$(top_srcdir)/modules/output_stream/includes/ \
 --I$(top_srcdir)/modules/string/includes/ \
 -$(AM_CPPFLAGS)
++API_SCILAB_CXX_SOURCES = \
 +    src/cpp/api_boolean.cpp \
 +    src/cpp/api_boolean_sparse.cpp \
 +    src/cpp/api_common.cpp \
 +    src/cpp/api_double.cpp \
 +    src/cpp/api_int.cpp \
 +    src/cpp/api_list.cpp \
 +    src/cpp/api_poly.cpp \
 +    src/cpp/api_sparse.cpp \
 +    src/cpp/api_string.cpp \
 +    src/cpp/api_pointer.cpp \
-     src/cpp/api_error.cpp \
-     src/cpp/overload.cpp
++    src/cpp/api_handle.cpp \
++    src/cpp/overload.cpp \
++    src/cpp/api_error.cpp
 +
 +
- libsciapi_scilab_la_CFLAGS= \
-     -I$(srcdir)/includes/ \
-     -I$(srcdir)/src/c/ \
-     -I$(top_srcdir)/modules/core/includes \
-     -I$(top_srcdir)/modules/call_scilab/includes \
-     -I$(top_srcdir)/libs/MALLOC/includes/ \
-     -I$(top_srcdir)/modules/localization/includes \
-     -I$(top_srcdir)/modules/output_stream/includes \
-     -I$(top_srcdir)/modules/string/includes \
-     -I$(top_srcdir)/modules/types/includes \
-     -I$(top_srcdir)/modules/symbol/includes \
-     -I$(top_srcdir)/modules/ast/includes \
-     -I$(top_srcdir)/modules/operations/includes
 +libsciapi_scilab_la_CPPFLAGS= \
 +    -I$(srcdir)/includes/ \
 +    -I$(srcdir)/src/cpp/ \
++    -I$(srcdir)/src/c/ \
 +    -I$(top_srcdir)/modules/core/includes \
 +    -I$(top_srcdir)/modules/call_scilab/includes \
 +    -I$(top_srcdir)/libs/MALLOC/includes/ \
 +    -I$(top_srcdir)/modules/localization/includes \
 +    -I$(top_srcdir)/modules/output_stream/includes \
 +    -I$(top_srcdir)/modules/operations/includes \
 +    -I$(top_srcdir)/modules/types/includes \
 +    -I$(top_srcdir)/modules/symbol/includes \
 +    -I$(top_srcdir)/modules/ast/includes \
 +    -I$(top_srcdir)/modules/elementary_functions/includes \
 +    -I$(top_srcdir)/modules/string/includes \
 +    -I$(top_srcdir)/libs/dynamiclibrary/includes
  
  if MAINTAINER_MODE
  pkglib_LTLIBRARIES = libsciapi_scilab.la
  else
@@@ -58,9 -38,8 +46,9 @@@ noinst_LTLIBRARIES = libsciapi_scilab.l
  endif
  
  
 +libsciapi_scilab_la_LDFLAGS = -version-number $(SCILAB_LIBRARY_VERSION)
  
- libsciapi_scilab_la_SOURCES = $(API_SCILAB_C_SOURCES) $(API_SCILAB_CPP_SOURCES)
+ libsciapi_scilab_la_SOURCES = $(API_SCILAB_C_SOURCES) $(API_SCILAB_CXX_SOURCES)
  
  # For the code check (splint)
  CHECK_SRC= $(libsciapi_scilab_la_SOURCES)
@@@ -146,13 -146,10 +146,14 @@@ am__objects_1 = libsciapi_scilab_la-api
        libsciapi_scilab_la-api_sparse.lo \
        libsciapi_scilab_la-api_string.lo \
        libsciapi_scilab_la-api_pointer.lo \
-       libsciapi_scilab_la-api_error.lo \
-       libsciapi_scilab_la-overload.lo
+       libsciapi_scilab_la-api_handle.lo \
++      libsciapi_scilab_la-overload.lo \
+       libsciapi_scilab_la-api_error.lo
  am_libsciapi_scilab_la_OBJECTS = $(am__objects_1)
  libsciapi_scilab_la_OBJECTS = $(am_libsciapi_scilab_la_OBJECTS)
 +libsciapi_scilab_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
 +      $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
 +      $(CXXFLAGS) $(libsciapi_scilab_la_LDFLAGS) $(LDFLAGS) -o $@
  @MAINTAINER_MODE_FALSE@am_libsciapi_scilab_la_rpath =
  @MAINTAINER_MODE_TRUE@am_libsciapi_scilab_la_rpath = -rpath \
  @MAINTAINER_MODE_TRUE@        $(pkglibdir)
@@@ -440,55 -431,32 +441,43 @@@ target_alias = @target_alias
  top_build_prefix = @top_build_prefix@
  top_builddir = @top_builddir@
  top_srcdir = @top_srcdir@
 -API_SCILAB_CXX_SOURCES = src/cpp/api_boolean.cpp \
 -src/cpp/api_boolean_sparse.cpp \
 -src/cpp/api_common.cpp \
 -src/cpp/api_double.cpp \
 -src/cpp/api_int.cpp \
 -src/cpp/api_list.cpp \
 -src/cpp/api_poly.cpp \
 -src/cpp/api_sparse.cpp \
 -src/cpp/api_string.cpp \
 -src/cpp/api_pointer.cpp \
 -src/cpp/api_handle.cpp \
 -src/cpp/api_error.cpp
 -
 -libsciapi_scilab_la_CPPFLAGS = -I$(srcdir)/includes/ \
 --I$(srcdir)/src/cpp/ \
 --I$(top_srcdir)/modules/core/includes/ \
 --I$(top_srcdir)/modules/call_scilab/includes/ \
 --I$(top_srcdir)/libs/MALLOC/includes/ \
 --I$(top_srcdir)/modules/localization/includes/ \
 --I$(top_srcdir)/modules/output_stream/includes/ \
 --I$(top_srcdir)/modules/string/includes/ \
 -$(AM_CPPFLAGS)
 +yacc_present = @yacc_present@
- API_SCILAB_CPP_SOURCES = \
++API_SCILAB_CXX_SOURCES = \
 +    src/cpp/api_boolean.cpp \
 +    src/cpp/api_boolean_sparse.cpp \
 +    src/cpp/api_common.cpp \
 +    src/cpp/api_double.cpp \
 +    src/cpp/api_int.cpp \
 +    src/cpp/api_list.cpp \
 +    src/cpp/api_poly.cpp \
 +    src/cpp/api_sparse.cpp \
 +    src/cpp/api_string.cpp \
 +    src/cpp/api_pointer.cpp \
-     src/cpp/api_error.cpp \
-     src/cpp/overload.cpp
- libsciapi_scilab_la_CFLAGS = \
-     -I$(srcdir)/includes/ \
-     -I$(srcdir)/src/c/ \
-     -I$(top_srcdir)/modules/core/includes \
-     -I$(top_srcdir)/modules/call_scilab/includes \
-     -I$(top_srcdir)/libs/MALLOC/includes/ \
-     -I$(top_srcdir)/modules/localization/includes \
-     -I$(top_srcdir)/modules/output_stream/includes \
-     -I$(top_srcdir)/modules/string/includes \
-     -I$(top_srcdir)/modules/types/includes \
-     -I$(top_srcdir)/modules/symbol/includes \
-     -I$(top_srcdir)/modules/ast/includes \
-     -I$(top_srcdir)/modules/operations/includes
++    src/cpp/api_handle.cpp \
++    src/cpp/overload.cpp \
++    src/cpp/api_error.cpp
 +
 +libsciapi_scilab_la_CPPFLAGS = \
 +    -I$(srcdir)/includes/ \
 +    -I$(srcdir)/src/cpp/ \
++    -I$(srcdir)/src/c/ \
 +    -I$(top_srcdir)/modules/core/includes \
 +    -I$(top_srcdir)/modules/call_scilab/includes \
 +    -I$(top_srcdir)/libs/MALLOC/includes/ \
 +    -I$(top_srcdir)/modules/localization/includes \
 +    -I$(top_srcdir)/modules/output_stream/includes \
 +    -I$(top_srcdir)/modules/operations/includes \
 +    -I$(top_srcdir)/modules/types/includes \
 +    -I$(top_srcdir)/modules/symbol/includes \
 +    -I$(top_srcdir)/modules/ast/includes \
 +    -I$(top_srcdir)/modules/elementary_functions/includes \
 +    -I$(top_srcdir)/modules/string/includes \
 +    -I$(top_srcdir)/libs/dynamiclibrary/includes
  
  @MAINTAINER_MODE_TRUE@pkglib_LTLIBRARIES = libsciapi_scilab.la
  @MAINTAINER_MODE_FALSE@noinst_LTLIBRARIES = libsciapi_scilab.la
 +libsciapi_scilab_la_LDFLAGS = -version-number $(SCILAB_LIBRARY_VERSION)
- libsciapi_scilab_la_SOURCES = $(API_SCILAB_C_SOURCES) $(API_SCILAB_CPP_SOURCES)
+ libsciapi_scilab_la_SOURCES = $(API_SCILAB_C_SOURCES) $(API_SCILAB_CXX_SOURCES)
  
  # For the code check (splint)
  CHECK_SRC = $(libsciapi_scilab_la_SOURCES)
@@@ -784,20 -753,20 +775,27 @@@ libsciapi_scilab_la-api_pointer.lo: src
  @AMDEP_TRUE@@am__fastdepCXX_FALSE@    DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
  @am__fastdepCXX_FALSE@        $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciapi_scilab_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsciapi_scilab_la-api_pointer.lo `test -f 'src/cpp/api_pointer.cpp' || echo '$(srcdir)/'`src/cpp/api_pointer.cpp
  
- libsciapi_scilab_la-api_error.lo: src/cpp/api_error.cpp
- @am__fastdepCXX_TRUE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciapi_scilab_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsciapi_scilab_la-api_error.lo -MD -MP -MF $(DEPDIR)/libsciapi_scilab_la-api_error.Tpo -c -o libsciapi_scilab_la-api_error.lo `test -f 'src/cpp/api_error.cpp' || echo '$(srcdir)/'`src/cpp/api_error.cpp
- @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libsciapi_scilab_la-api_error.Tpo $(DEPDIR)/libsciapi_scilab_la-api_error.Plo
- @AMDEP_TRUE@@am__fastdepCXX_FALSE@    source='src/cpp/api_error.cpp' object='libsciapi_scilab_la-api_error.lo' libtool=yes @AMDEPBACKSLASH@
+ libsciapi_scilab_la-api_handle.lo: src/cpp/api_handle.cpp
+ @am__fastdepCXX_TRUE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciapi_scilab_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsciapi_scilab_la-api_handle.lo -MD -MP -MF $(DEPDIR)/libsciapi_scilab_la-api_handle.Tpo -c -o libsciapi_scilab_la-api_handle.lo `test -f 'src/cpp/api_handle.cpp' || echo '$(srcdir)/'`src/cpp/api_handle.cpp
+ @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libsciapi_scilab_la-api_handle.Tpo $(DEPDIR)/libsciapi_scilab_la-api_handle.Plo
+ @AMDEP_TRUE@@am__fastdepCXX_FALSE@    source='src/cpp/api_handle.cpp' object='libsciapi_scilab_la-api_handle.lo' libtool=yes @AMDEPBACKSLASH@
  @AMDEP_TRUE@@am__fastdepCXX_FALSE@    DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- @am__fastdepCXX_FALSE@        $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciapi_scilab_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsciapi_scilab_la-api_error.lo `test -f 'src/cpp/api_error.cpp' || echo '$(srcdir)/'`src/cpp/api_error.cpp
+ @am__fastdepCXX_FALSE@        $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciapi_scilab_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsciapi_scilab_la-api_handle.lo `test -f 'src/cpp/api_handle.cpp' || echo '$(srcdir)/'`src/cpp/api_handle.cpp
  
 +libsciapi_scilab_la-overload.lo: src/cpp/overload.cpp
 +@am__fastdepCXX_TRUE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciapi_scilab_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsciapi_scilab_la-overload.lo -MD -MP -MF $(DEPDIR)/libsciapi_scilab_la-overload.Tpo -c -o libsciapi_scilab_la-overload.lo `test -f 'src/cpp/overload.cpp' || echo '$(srcdir)/'`src/cpp/overload.cpp
 +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libsciapi_scilab_la-overload.Tpo $(DEPDIR)/libsciapi_scilab_la-overload.Plo
 +@AMDEP_TRUE@@am__fastdepCXX_FALSE@    source='src/cpp/overload.cpp' object='libsciapi_scilab_la-overload.lo' libtool=yes @AMDEPBACKSLASH@
 +@AMDEP_TRUE@@am__fastdepCXX_FALSE@    DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 +@am__fastdepCXX_FALSE@        $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciapi_scilab_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsciapi_scilab_la-overload.lo `test -f 'src/cpp/overload.cpp' || echo '$(srcdir)/'`src/cpp/overload.cpp
 +
+ libsciapi_scilab_la-api_error.lo: src/cpp/api_error.cpp
+ @am__fastdepCXX_TRUE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciapi_scilab_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsciapi_scilab_la-api_error.lo -MD -MP -MF $(DEPDIR)/libsciapi_scilab_la-api_error.Tpo -c -o libsciapi_scilab_la-api_error.lo `test -f 'src/cpp/api_error.cpp' || echo '$(srcdir)/'`src/cpp/api_error.cpp
+ @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libsciapi_scilab_la-api_error.Tpo $(DEPDIR)/libsciapi_scilab_la-api_error.Plo
+ @AMDEP_TRUE@@am__fastdepCXX_FALSE@    source='src/cpp/api_error.cpp' object='libsciapi_scilab_la-api_error.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCXX_FALSE@    DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCXX_FALSE@        $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciapi_scilab_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsciapi_scilab_la-api_error.lo `test -f 'src/cpp/api_error.cpp' || echo '$(srcdir)/'`src/cpp/api_error.cpp
  mostlyclean-libtool:
        -rm -f *.lo
  
      <ClCompile Include="src\c\DllmainApi_scilab.c">
        <Filter>Source Files</Filter>
      </ClCompile>
 +    <ClCompile Include="src\cpp\overload.cpp">
 +      <Filter>Source Files</Filter>
 +    </ClCompile>
+     <ClCompile Include="src\cpp\api_handle.cpp">
+       <Filter>Source Files</Filter>
+     </ClCompile>
    </ItemGroup>
    <ItemGroup>
      <ClInclude Include="includes\api_boolean.h">
      <ClInclude Include="includes\dynlib_api_scilab.h">
        <Filter>Header Files</Filter>
      </ClInclude>
 +    <ClInclude Include="includes\overload.hxx">
 +      <Filter>Header Files</Filter>
 +    </ClInclude>
 +    <ClInclude Include="src\cpp\api_internal_boolean.h">
 +      <Filter>Header Files</Filter>
 +    </ClInclude>
 +    <ClInclude Include="src\cpp\api_internal_string.h">
 +      <Filter>Header Files</Filter>
 +    </ClInclude>
+     <ClInclude Include="includes\api_handle.h">
+       <Filter>Header Files</Filter>
+     </ClInclude>
+     <ClInclude Include="includes\api_internal_handle.h">
+       <Filter>Header Files</Filter>
+     </ClInclude>
    </ItemGroup>
    <ItemGroup>
      <ResourceCompile Include="src\c\api_scilab.rc">
      <None Include="locales\api_scilab.pot">
        <Filter>localization</Filter>
      </None>
 -    <None Include="Core_f_Import.def">
 -      <Filter>Libraries Dependencies\Imports</Filter>
 -    </None>
    </ItemGroup>
--</Project>
++</Project>
@@@ -22,267 -22,292 +22,330 @@@ extern "C" 
  
  #include "doublecomplex.h"
  
- /*******************************/
- /*   double matrix functions   */
- /*******************************/
- /**
-  * Get double variable data
-  * @param[in] _piAddress variable address
-  * @param[out] _piRows return number of rows
-  * @param[out] _piCols return number of columns
-  * @param[out] _pdblReal return pointer to real data
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- SciErr getMatrixOfDouble(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, double** _pdblReal);
+     /*******************************/
+     /*   double matrix functions   */
+     /*******************************/
+     /**
+      * Get double variable data
+      * @param[in] _piAddress variable address
+      * @param[out] _piRows return number of rows
+      * @param[out] _piCols return number of columns
+      * @param[out] _pdblReal return pointer to real data
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr getMatrixOfDouble(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, double** _pdblReal);
  
- /**
-  * Get complex double variable data
-  * @param[in] _piAddress variable address
-  * @param[out] _piRows return number of rows
-  * @param[out] _piCols return number of columns
-  * @param[out] _pdblReal return pointer to real data
-  * @param[out] _pdblImg return pointer to imaginary data
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- SciErr getComplexMatrixOfDouble(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, double** _pdblReal, double** _pdblImg);
+     /**
+      * Get complex double variable data
+      * @param[in] _piAddress variable address
+      * @param[out] _piRows return number of rows
+      * @param[out] _piCols return number of columns
+      * @param[out] _pdblReal return pointer to real data
+      * @param[out] _pdblImg return pointer to imaginary data
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr getComplexMatrixOfDouble(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, double** _pdblReal, double** _pdblImg);
  
- /**
-  * Get double variable data
-  * @param[in] _piAddress variable address
-  * @param[out] _piRows return number of row 
-  * @param[out] _piCols return number of column
-  * @param[out] _pdblZ return pointer to Z format data ( Real1, Img1, Real2, Img2, ... )
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- SciErr getComplexZMatrixOfDouble(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, doublecomplex** _pdblZ);
+     /**
+      * Get double variable data
+      * @param[in] _piAddress variable address
+      * @param[out] _piRows return number of row
+      * @param[out] _piCols return number of column
+      * @param[out] _pdblZ return pointer to Z format data ( Real1, Img1, Real2, Img2, ... )
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr getComplexZMatrixOfDouble(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, doublecomplex** _pdblZ);
  
- /**
-  * Allocate a double variable
-  * @param[in] _iVar variable number
-  * @param[in] _iRows number of rows
-  * @param[in] _iCols number of columns
-  * @param[out] _pdblReal return pointer to real data
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- SciErr allocMatrixOfDouble(void* _pvCtx, int _iVar, int _iRows, int _iCols, double** _pdblReal);
+     /**
+      * Get double variable data
+      * @param[in] _piAddress variable address
+      * @param[out] _piRows return number of rows
+      * @param[out] _piCols return number of columns
+      * @param[out] _piReal return pointer to real data as integer
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr getMatrixOfDoubleAsInteger(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, int** _piReal);
  
- /**
-  * Allocate a complex double variable
-  * @param[in] _iVar variable number
-  * @param[in] _iRows number of rows
-  * @param[in] _iCols number of columns
-  * @param[out] _pdblReal return pointer to real data
-  * @param[out] _pdblImg return pointer to imaginary data
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- SciErr allocComplexMatrixOfDouble(void* _pvCtx, int _iVar, int _iRows, int _iCols, double** _pdblReal, double** _pdblImg);
+     /**
+      * Get double variable data
+      * @param[in] _piAddress variable address
+      * @param[out] _piRows return number of rows
+      * @param[out] _piCols return number of columns
+      * @param[out] _piReal return pointer to real data as integer
+      * @param[out] _piImg return pointer to imaginary data as integer
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr getComplexMatrixOfDoubleAsInteger(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, int** _piReal, int** _piImg);
  
- /**
-  * Create a double variable
-  * @param[in] _iVar variable number
-  * @param[in] _iRows number of rows
-  * @param[in] _iCols number of columns
-  * @param[in] _pdblReal pointer to real data
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- SciErr createMatrixOfDouble(void* _pvCtx, int _iVar, int _iRows, int _iCols, const double* _pdblReal);
+     /**
+      * Allocate a double variable
+      * @param[in] _iVar variable number
+      * @param[in] _iRows number of rows
+      * @param[in] _iCols number of columns
+      * @param[out] _pdblReal return pointer to real data
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr allocMatrixOfDouble(void* _pvCtx, int _iVar, int _iRows, int _iCols, double** _pdblReal);
  
- /**
-  * Create a complex double variable
-  * @param[in] _iVar variable number
-  * @param[in] _iRows number of rows
-  * @param[in] _iCols number of columns
-  * @param[in] _pdblReal pointer to real data
-  * @param[in] _pdblImg pointer to imaginary data
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- SciErr createComplexMatrixOfDouble(void* _pvCtx, int _iVar, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg);
+     /**
+      * Allocate a complex double variable
+      * @param[in] _iVar variable number
+      * @param[in] _iRows number of rows
+      * @param[in] _iCols number of columns
+      * @param[out] _pdblReal return pointer to real data
+      * @param[out] _pdblImg return pointer to imaginary data
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr allocComplexMatrixOfDouble(void* _pvCtx, int _iVar, int _iRows, int _iCols, double** _pdblReal, double** _pdblImg);
  
- /**
-  * Create a complex double variable
-  * @param[in] _iVar variable number
-  * @param[in] _iRows number of rows
-  * @param[in] _iCols number of columns
-  * @param[in] _pdblData pointer to Z format data ( Real1, Img1, Real2, Img2, ... )
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- SciErr createComplexZMatrixOfDouble(void* _pvCtx, int _iVar, int _iRows, int _iCols, const doublecomplex* _pdblData);
+     /**
+      * Allocate a double variable
+      * @param[in] _iVar variable number
+      * @param[in] _iRows number of rows
+      * @param[in] _iCols number of columns
+      * @param[out] _piReal return pointer to integer real data
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr allocMatrixOfDoubleAsInteger(void* _pvCtx, int _iVar, int _iRows, int _iCols, int** _piReal);
  
- /**
-  * Create a named double variable
-  * @param[in] _pstName variable name
-  * @param[in] _iRows number of rows
-  * @param[in] _iCols number of columns
-  * @param[in] _pdblReal pointer to real data
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- SciErr createNamedMatrixOfDouble(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const double* _pdblReal);
+     /**
+      * Allocate a complex double variable
+      * @param[in] _iVar variable number
+      * @param[in] _iRows number of rows
+      * @param[in] _iCols number of columns
+      * @param[out] _piReal return pointer to integer real data
+      * @param[out] _piImg return pointer to integer imaginary data
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr allocComplexMatrixOfDoubleAsInteger(void* _pvCtx, int _iVar, int _iRows, int _iCols, int** _piReal, int** _piImg);
  
- /**
-  * Create a named complex double variable
-  * @param[in] _pstName variable name
-  * @param[in] _iRows mumber of rows
-  * @param[in] _iCols number of columns
-  * @param[in] _pdblReal pointer to real data
-  * @param[in] _pdblImg pointer to imaginary data
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- SciErr createNamedComplexMatrixOfDouble(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg);
+     /**
+      * Create a double variable
+      * @param[in] _iVar variable number
+      * @param[in] _iRows number of rows
+      * @param[in] _iCols number of columns
+      * @param[in] _pdblReal pointer to real data
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr createMatrixOfDouble(void* _pvCtx, int _iVar, int _iRows, int _iCols, const double* _pdblReal);
  
- /**
-  * Create a named complex double variable
-  * @param[in] _pstName variable name
-  * @param[in] _iRows number of rows
-  * @param[in] _iCols number of columns
-  * @param[in] _pdblData pointer to Z format data ( Real1, Img1, Real2, Img2, ... )
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- SciErr createNamedComplexZMatrixOfDouble(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const doublecomplex* _pdblData);
+     /**
+      * Create a complex double variable
+      * @param[in] _iVar variable number
+      * @param[in] _iRows number of rows
+      * @param[in] _iCols number of columns
+      * @param[in] _pdblReal pointer to real data
+      * @param[in] _pdblImg pointer to imaginary data
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr createComplexMatrixOfDouble(void* _pvCtx, int _iVar, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg);
  
- /**
-  * Get double named variable data
-  * @param[in] _pstName variable name
-  * @param[out] _piRows return number of rows
-  * @param[out] _piCols return number of columns
-  * @param[out] _pdblReal return real data
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- SciErr readNamedMatrixOfDouble(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, double* _pdblReal);
+     /**
+      * Create a double variable
+      * @param[in] _iVar variable number
+      * @param[in] _iRows number of rows
+      * @param[in] _iCols number of columns
+      * @param[in] _piReal pointer to integer real data
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr createMatrixOfDoubleAsInteger(void* _pvCtx, int _iVar, int _iRows, int _iCols, const int* _piReal);
  
- /**
-  * Get double named variable data
-  * @param[in] _pstName variable name
-  * @param[out] _piRows return number of rows
-  * @param[out] _piCols return number of columns
-  * @param[out] _pdblReal return real data
-  * @param[out] _pdblImg return imaginary data
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- SciErr readNamedComplexMatrixOfDouble(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, double* _pdblReal, double* _pdblImg);
+     /**
+      * Create a complex double variable
+      * @param[in] _iVar variable number
+      * @param[in] _iRows number of rows
+      * @param[in] _iCols number of columns
+      * @param[in] _piReal pointer to integer real data
+      * @param[in] _piImg pointer to integer imaginary data
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr createComplexMatrixOfDoubleAsInteger(void* _pvCtx, int _iVar, int _iRows, int _iCols, const int* _piReal, const int* _piImg);
  
- /*shortcut functions*/
+     /**
+      * Create a complex double variable
+      * @param[in] _iVar variable number
+      * @param[in] _iRows number of rows
+      * @param[in] _iCols number of columns
+      * @param[in] _pdblData pointer to Z format data ( Real1, Img1, Real2, Img2, ... )
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr createComplexZMatrixOfDouble(void* _pvCtx, int _iVar, int _iRows, int _iCols, const doublecomplex* _pdblData);
  
+     /**
+      * Create a named double variable
+      * @param[in] _pstName variable name
+      * @param[in] _iRows number of rows
+      * @param[in] _iCols number of columns
+      * @param[in] _pdblReal pointer to real data
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr createNamedMatrixOfDouble(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const double* _pdblReal);
  
- /**
-  * Check if the variable type is double
-  * @param[in] _piAddress variable address
-  * @return 1 for true and 0 for false
-  */
- int isDoubleType(void* _pvCtx, int* _piAddress);
+     /**
+      * Create a named complex double variable
+      * @param[in] _pstName variable name
+      * @param[in] _iRows mumber of rows
+      * @param[in] _iCols number of columns
+      * @param[in] _pdblReal pointer to real data
+      * @param[in] _pdblImg pointer to imaginary data
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr createNamedComplexMatrixOfDouble(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg);
  
- /**
-  * Check if the named variable type is double
-  * @param[in] _pstName variable name
-  * @return 1 for true and 0 for false
-  */
- int isNamedDoubleType(void* _pvCtx, const char* _pstName);
+     /**
+      * Create a named complex double variable
+      * @param[in] _pstName variable name
+      * @param[in] _iRows number of rows
+      * @param[in] _iCols number of columns
+      * @param[in] _pdblData pointer to Z format data ( Real1, Img1, Real2, Img2, ... )
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr createNamedComplexZMatrixOfDouble(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const doublecomplex* _pdblData);
  
- /**
-  * Get scalar double value
-  * @param[in] _piAddress variable address
-  * @param[out] _pdblReal return real value
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- int getScalarDouble(void* _pvCtx, int* _piAddress, double* _pdblReal);
+     /**
+      * Get double named variable data
+      * @param[in] _pstName variable name
+      * @param[out] _piRows return number of rows
+      * @param[out] _piCols return number of columns
+      * @param[out] _pdblReal return real data
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr readNamedMatrixOfDouble(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, double* _pdblReal);
  
- /**
-  * Get scalar complex double value
-  * @param[in] _piAddress variable address
-  * @param[out] _pdblReal return real part
-  * @param[out] _pdblImg return imaginary part
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- int getScalarComplexDouble(void* _pvCtx, int* _piAddress, double* _pdblReal, double* _pdblImg);
+     /**
+      * Get double named variable data
+      * @param[in] _pstName variable name
+      * @param[out] _piRows return number of rows
+      * @param[out] _piCols return number of columns
+      * @param[out] _pdblReal return real data
+      * @param[out] _pdblImg return imaginary data
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     SciErr readNamedComplexMatrixOfDouble(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, double* _pdblReal, double* _pdblImg);
  
- /**
-  * Get scalar double value from a named variable
-  * @param[in] _pstName variable name
-  * @param[out] _pdblReal return real value
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- int getNamedScalarDouble(void* _pvCtx, const char* _pstName, double* _pdblReal);
+     /*shortcut functions*/
  
- /**
-  * Get scalar complex double value from a named variable
-  * @param[in] _pstName variable name
-  * @param[out] _pdblReal return real part
-  * @param[out] _pdblImg return imaginary part
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- int getNamedScalarComplexDouble(void* _pvCtx, const char* _pstName, double* _pdblReal, double* _pdblImg);
  
- /**
-  * Create a scalar double variable
-  * @param[in] _iVar variable number
-  * @param[in] _dblReal real value
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- int createScalarDouble(void* _pvCtx, int _iVar, double _dblReal);
+     /**
+      * Check if the variable type is double
+      * @param[in] _piAddress variable address
+      * @return 1 for true and 0 for false
+      */
+     int isDoubleType(void* _pvCtx, int* _piAddress);
  
- /**
-  * Create a scalar complex double variable
-  * @param[in] _iVar variable number
-  * @param[in] _dblReal real part
-  * @param[in] _dblImg imaginary part
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- int createScalarComplexDouble(void* _pvCtx, int _iVar, double _dblReal, double _dblImg);
+     /**
+      * Check if the named variable type is double
+      * @param[in] _pstName variable name
+      * @return 1 for true and 0 for false
+      */
+     int isNamedDoubleType(void* _pvCtx, const char* _pstName);
  
- /**
-  * Create a named scalar double variable
-  * @param[in] _pstName variable name
-  * @param[in] _dblReal real value
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- int createNamedScalarDouble(void* _pvCtx, const char* _pstName, double _dblReal);
+     /**
+      * Get scalar double value
+      * @param[in] _piAddress variable address
+      * @param[out] _pdblReal return real value
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     int getScalarDouble(void* _pvCtx, int* _piAddress, double* _pdblReal);
  
- /**
-  * Create a named scalar complex double variable
-  * @param[in] _pstName variable name
-  * @param[in] _dblReal real part
-  * @param[in] _dblImg imaginary part
-  * @return if the operation succeeded ( 0 ) or not ( !0 )
-  */
- int createNamedScalarComplexDouble(void* _pvCtx, const char* _pstName, double _dblReal, double _dblImg);
+     /**
+      * Get scalar complex double value
+      * @param[in] _piAddress variable address
+      * @param[out] _pdblReal return real part
+      * @param[out] _pdblImg return imaginary part
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     int getScalarComplexDouble(void* _pvCtx, int* _piAddress, double* _pdblReal, double* _pdblImg);
+     /**
+      * Get scalar double value from a named variable
+      * @param[in] _pstName variable name
+      * @param[out] _pdblReal return real value
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     int getNamedScalarDouble(void* _pvCtx, const char* _pstName, double* _pdblReal);
+     /**
+      * Get scalar complex double value from a named variable
+      * @param[in] _pstName variable name
+      * @param[out] _pdblReal return real part
+      * @param[out] _pdblImg return imaginary part
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     int getNamedScalarComplexDouble(void* _pvCtx, const char* _pstName, double* _pdblReal, double* _pdblImg);
+     /**
+      * Create a scalar double variable
+      * @param[in] _iVar variable number
+      * @param[in] _dblReal real value
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     int createScalarDouble(void* _pvCtx, int _iVar, double _dblReal);
+     /**
+      * Create a scalar complex double variable
+      * @param[in] _iVar variable number
+      * @param[in] _dblReal real part
+      * @param[in] _dblImg imaginary part
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     int createScalarComplexDouble(void* _pvCtx, int _iVar, double _dblReal, double _dblImg);
+     /**
+      * Create a named scalar double variable
+      * @param[in] _pstName variable name
+      * @param[in] _dblReal real value
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     int createNamedScalarDouble(void* _pvCtx, const char* _pstName, double _dblReal);
+     /**
+      * Create a named scalar complex double variable
+      * @param[in] _pstName variable name
+      * @param[in] _dblReal real part
+      * @param[in] _dblImg imaginary part
+      * @return if the operation succeeded ( 0 ) or not ( !0 )
+      */
+     int createNamedScalarComplexDouble(void* _pvCtx, const char* _pstName, double _dblReal, double _dblImg);
  
 +/**
 + * Create scalar double variable from integer value
 + * @param[in] _iVar variable number
 + * @param[in] _iReal real value
 + * @return if the operation successed (0) or not ( !0 )
 + */
 +int createScalarDoubleFromInteger(void* _pvCtx, int _iVar, int _iReal);
 +
 +/**
 + * Create scalar complex double variable from integer value
 + * @param[in] _iVar variable number
 + * @param[in] _iReal real value
 + * @param[in] _iImg imaginary value
 + * @return if the operation successed (0) or not ( !0 )
 + */
 +int createScalarComplexDoubleFromInteger(void* _pvCtx, int _iVar, int _iReal, int _iImg);
 +
 +/**
 + * Create matrix of double variable from integer value
 + * @param[in] _iVar variable number
 + * @param[in] _iRows Number of row
 + * @param[in] _iCols Number of column
 + * @param[in] _piReal real value
 + * @return if the operation successed (0) or not ( !0 )
 + */
 +int createMatrixOfDoubleFromInteger(void* _pvCtx, int _iVar, int _iRows, int _iCols, int* _piReal);
 +
 +/**
 + * Create matrix of complex double variable from integer value
 + * @param[in] _iVar variable number
 + * @param[in] _iRows Number of row
 + * @param[in] _iCols Number of column
 + * @param[in] _piReal real value
 + * @param[in] _piImg imaginary value
 + * @return if the operation successed (0) or not ( !0 )
 + */
 +int createMatrixOfComplexDoubleFromInteger(void* _pvCtx, int _iVar, int _iRows, int _iCols, int* _piReal, int* _piImg);
 +
  #ifdef __cplusplus
  }
  #endif
@@@ -66,10 -65,8 +66,10 @@@ extern "C" 
  #define API_ERROR_CREATE_SCALAR_DOUBLE                      110
  #define API_ERROR_CREATE_NAMED_SCALAR                       111
  #define API_ERROR_GET_NAMED_SCALAR_DOUBLE                   112
 +#define API_ERROR_CREATE_SCALAR_FROM_INTEGER                120
 +#define API_ERROR_CREATE_MATRIX_FROM_INTEGER                121
  
-  /*poly errors 201 - 299*/
+     /*poly errors 201 - 299*/
  #define API_ERROR_GET_POLY_VARNAME                          201
  #define API_ERROR_GET_POLY                                  202
  #define API_ERROR_CREATE_POLY                               203
  extern "C" {
  #endif
  
 -    /*******************************/
 -    /*   string matrix functions   */
 -    /*******************************/
 +#include "dynlib_api_scilab.h"
++
 +/*****************************/
 +/*   string matrix functions   */
 +/*******************************/
  
- /**
-  * Get strings variable data
-  * @param[in] _piAddress variable address
-  * @param[out] _piRows return number of rows
-  * @param[out] _piCols return number of columns
-  * @param[out] _piLength return strings lengths
-  * @param[out] _pstStrings return array of char
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- SciErr getMatrixOfString(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, int* _piLength, char** _pstStrings);
- /**
-  * Get wide strings variable data
-  * @param[in] _piAddress variable address
-  * @param[out] _piRows return number of rows
-  * @param[out] _piCols return number of columns
-  * @param[out] _piwLength return strings length
-  * @param[out] _pwstStrings return array of wide char
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- SciErr getMatrixOfWideString(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, int* _piwLength, wchar_t** _pwstStrings);
- /**
-  * Create strings variable data
-  * @param[in] _iVar variable number
-  * @param[in] _iRows number of rows
-  * @param[in] _iCols number of columns
-  * @param[in] _pstStrings array of strings ( null terminated )
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- SciErr createMatrixOfString(void* _pvCtx, int _iVar, int _iRows, int _iCols, const char* const* _pstStrings);
- /**
- * Create wide strings variable data
- * @param[in] _iVar variable number
- * @param[in] _iRows Number of rows
- * @param[in] _iCols Number of columns
- * @param[in] _pwstStrings array of strings ( null terminated )
- * @return if the operation succeeded (0) or not ( !0 )
- */
- SciErr createMatrixOfWideString(void* _pvCtx, int _iVar, int _iRows, int _iCols, const wchar_t* const* _pwstStrings);
- /**
-  * Create strings variable data
-  * @param[in] _pstName variable name
-  * @param[in] _iRows Number of row
-  * @param[in] _iCols Number of column
-  * @param[in] _pstStrings array of strings ( null terminated )
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- SciErr createNamedMatrixOfString(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const char* const* _pstStrings);
- /**
- * Create wide strings variable data
- * @param[in] _pstName variable name
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pwstStrings array of wide strings ( null terminated )
- * @return if the operation succeeded (0) or not ( !0 )
- */
- SciErr createNamedMatrixOfWideString(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const wchar_t* const* _pwstStrings);
- /**
-  * Get strings variable data
-  * @param[in] _pstName variable name
-  * @param[out] _piRows number of rows
-  * @param[out] _piCols number of columns
-  * @param[out] _piLength return strings lengths
-  * @param[in] _pstStrings array of strings ( null terminated )
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- SciErr readNamedMatrixOfString(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, int* _piLength, char** _pstStrings);
- /**
- * Get wide strings variable data
- * @param[in] _pstName variable name
- * @param[out] _piRows number of rows
- * @param[out] _piCols number of columns
- * @param[out] _piwLength return strings length
- * @param[in] _pstwStrings array of strings ( null terminated )
- * @return if the operation succeeded (0) or not ( !0 )
- */
- SciErr readNamedMatrixOfWideString(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, int* _piwLength, wchar_t** _pwstStrings);
- /*shortcut functions*/
- /**
-  * check if the variable type is string
-  * @param[in] _piAddress variable address
-  * @return 1 for true and 0 for false
-  */
- int isStringType(void* _pvCtx, int* _piAddress);
- /**
-  * check if the variable type is string
-  * @param[in] _pstName variable name
-  * @return 1 for true and 0 for false
-  */
- int isNamedStringType(void* _pvCtx, const char* _pstName);
- /**
-  * Get single string variable data
-  * @param[in] _piAddress variable address
-  * @param[out] _pstData return allocated string pointer ( null terminated )
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- int getAllocatedSingleString(void* _pvCtx, int* _piAddress, char** _pstData);
- /**
-  * Get single wide string variable data
-  * @param[in] _piAddress variable address
-  * @param[out] _pwstData return allocated wide string pointer ( null terminated )
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- int getAllocatedSingleWideString(void* _pvCtx, int* _piAddress, wchar_t** _pwstData);
- /**
-  * Get strings variable data
-  * @param[in] _piAddress variable address
-  * @param[out] _piRows return number of rows
-  * @param[out] _piCols return number of columns
-  * @param[out] _pstData return allocated array of string pointer ( null terminated )
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- int getAllocatedMatrixOfString(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, char*** _pstData);
- /**
-  * Get wide strings variable data
-  * @param[in] _piAddress variable address
-  * @param[out] _piRows return number of rows
-  * @param[out] _piCols return number of columns
-  * @param[out] _pwstData return allocated array of wide string pointer ( null terminated )
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- int getAllocatedMatrixOfWideString(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, wchar_t*** _pwstData);
- /**
-  * Get single named string variable data
-  * @param[in] _pstName variable name
-  * @param[out] _pstData return allocated string pointer ( null terminated )
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- int getAllocatedNamedSingleString(void* _pvCtx, const char* _pstName, char** _pstData);
- /**
-  * Get single named string variable data
-  * @param[in] _pstName variable name
-  * @param[out] _pwstData return allocated string pointer ( null terminated )
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- int getAllocatedNamedSingleWideString(void* _pvCtx, const char* _pstName, wchar_t** _pwstData);
- /**
-  * Get named strings variable data
-  * @param[in] _pstName variable name
-  * @param[out] _piRows number of rows
-  * @param[out] _piCols number of columns
-  * @param[out] _pstData return allocated array of string pointer ( null terminated )
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- int getAllocatedNamedMatrixOfString(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, char*** _pstData);
- /**
-  * Get named wide strings variable data
-  * @param[in] _pstName variable name
-  * @param[out] _piRows number of rows
-  * @param[out] _piCols number of columns
-  * @param[out] _pwstData return allocated array of wide string pointer ( null terminated )
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- int getAllocatedNamedMatrixOfWideString(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, wchar_t*** _pwstData);
- /**
-  * Create single string variable data
-  * @param[in] _iVar variable number
-  * @param[in] _pstStrings string ( null terminated )
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- int createSingleString(void* _pvCtx, int _iVar, const char* _pstStrings);
- /**
-  * Create single wide string variable data
-  * @param[in] _iVar variable number
-  * @param[in] _pwstStrings wide string ( null terminated )
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- int createSingleWideString(void* _pvCtx, int _iVar, const wchar_t* _pwstStrings);
- /**
-  * Create named single string variable data
-  * @param[in] _pstName variable name
-  * @param[in] _pstStrings string ( null terminated )
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- int createNamedSingleString(void* _pvCtx, const char* _pstName, const char* _pstStrings);
- /**
-  * Create named single wide string variable data
-  * @param[in] _pstName variable name
-  * @param[in] _pwstStrings wide string ( null terminated )
-  * @return if the operation succeeded (0) or not ( !0 )
-  */
- int createNamedSingleWideString(void* _pvCtx, const char* _pstName, const wchar_t* _pwstStrings);
- /**
-  * free data allocated by shortcut functions ( named or not )
-  * @param[in] _pstData string data
-  */
- void freeAllocatedSingleString(char* _pstData);
- /**
-  * free data allocated by shortcut functions ( named or not )
-  * @param[in] _pwstData wide string data
-  */
- void freeAllocatedSingleWideString(wchar_t* _pwstData);
- /**
-  * free data allocated by shortcut functions ( named or not )
-  * @param[in] _iRows number of rows
-  * @param[in] _iCols number of columns
-  * @param[in] _pstData matrix of string data
-  */
- void freeAllocatedMatrixOfString(int _iRows, int _iCols, char** _pstData);
- /**
-  * free data allocated by shortcut functions ( named or not )
-  * @param[in] _iRows number of rows
-  * @param[in] _iCols number of columns
-  * @param[in] _pwstData matrix of wide string data
-  */
- void freeAllocatedMatrixOfWideString(int _iRows, int _iCols, wchar_t** _pwstData);
+     /**
+      * Get strings variable data
+      * @param[in] _piAddress variable address
+      * @param[out] _piRows return number of rows
+      * @param[out] _piCols return number of columns
+      * @param[out] _piLength return strings lengths
+      * @param[out] _pstStrings return array of char
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     SciErr getMatrixOfString(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, int* _piLength, char** _pstStrings);
+     /**
+      * Get wide strings variable data
+      * @param[in] _piAddress variable address
+      * @param[out] _piRows return number of rows
+      * @param[out] _piCols return number of columns
+      * @param[out] _piwLength return strings length
+      * @param[out] _pwstStrings return array of wide char
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     SciErr getMatrixOfWideString(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, int* _piwLength, wchar_t** _pwstStrings);
+     /**
+      * Create strings variable data
+      * @param[in] _iVar variable number
+      * @param[in] _iRows number of rows
+      * @param[in] _iCols number of columns
+      * @param[in] _pstStrings array of strings ( null terminated )
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     SciErr createMatrixOfString(void* _pvCtx, int _iVar, int _iRows, int _iCols, const char* const* _pstStrings);
+     /**
+     * Create wide strings variable data
+     * @param[in] _iVar variable number
+     * @param[in] _iRows Number of rows
+     * @param[in] _iCols Number of columns
+     * @param[in] _pwstStrings array of strings ( null terminated )
+     * @return if the operation succeeded (0) or not ( !0 )
+     */
+     SciErr createMatrixOfWideString(void* _pvCtx, int _iVar, int _iRows, int _iCols, const wchar_t* const* _pwstStrings);
+     /**
+      * Create strings variable data
+      * @param[in] _pstName variable name
+      * @param[in] _iRows Number of row
+      * @param[in] _iCols Number of column
+      * @param[in] _pstStrings array of strings ( null terminated )
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     SciErr createNamedMatrixOfString(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const char* const* _pstStrings);
+     /**
+     * Create wide strings variable data
+     * @param[in] _pstName variable name
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pwstStrings array of wide strings ( null terminated )
+     * @return if the operation succeeded (0) or not ( !0 )
+     */
+     SciErr createNamedMatrixOfWideString(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const wchar_t* const* _pwstStrings);
+     /**
+      * Get strings variable data
+      * @param[in] _pstName variable name
+      * @param[out] _piRows number of rows
+      * @param[out] _piCols number of columns
+      * @param[out] _piLength return strings lengths
+      * @param[in] _pstStrings array of strings ( null terminated )
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     SciErr readNamedMatrixOfString(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, int* _piLength, char** _pstStrings);
+     /**
+     * Get wide strings variable data
+     * @param[in] _pstName variable name
+     * @param[out] _piRows number of rows
+     * @param[out] _piCols number of columns
+     * @param[out] _piwLength return strings length
+     * @param[in] _pstwStrings array of strings ( null terminated )
+     * @return if the operation succeeded (0) or not ( !0 )
+     */
+     SciErr readNamedMatrixOfWideString(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, int* _piwLength, wchar_t** _pwstStrings);
+     /*shortcut functions*/
+     /**
+      * check if the variable type is string
+      * @param[in] _piAddress variable address
+      * @return 1 for true and 0 for false
+      */
+     int isStringType(void* _pvCtx, int* _piAddress);
+     /**
+      * check if the variable type is string
+      * @param[in] _pstName variable name
+      * @return 1 for true and 0 for false
+      */
+     int isNamedStringType(void* _pvCtx, const char* _pstName);
+     /**
+      * Get single string variable data
+      * @param[in] _piAddress variable address
+      * @param[out] _pstData return allocated string pointer ( null terminated )
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     int getAllocatedSingleString(void* _pvCtx, int* _piAddress, char** _pstData);
+     /**
+      * Get single wide string variable data
+      * @param[in] _piAddress variable address
+      * @param[out] _pwstData return allocated wide string pointer ( null terminated )
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     int getAllocatedSingleWideString(void* _pvCtx, int* _piAddress, wchar_t** _pwstData);
+     /**
+      * Get strings variable data
+      * @param[in] _piAddress variable address
+      * @param[out] _piRows return number of rows
+      * @param[out] _piCols return number of columns
+      * @param[out] _pstData return allocated array of string pointer ( null terminated )
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     int getAllocatedMatrixOfString(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, char*** _pstData);
+     /**
+      * Get wide strings variable data
+      * @param[in] _piAddress variable address
+      * @param[out] _piRows return number of rows
+      * @param[out] _piCols return number of columns
+      * @param[out] _pwstData return allocated array of wide string pointer ( null terminated )
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     int getAllocatedMatrixOfWideString(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, wchar_t*** _pwstData);
+     /**
+      * Get single named string variable data
+      * @param[in] _pstName variable name
+      * @param[out] _pstData return allocated string pointer ( null terminated )
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     int getAllocatedNamedSingleString(void* _pvCtx, const char* _pstName, char** _pstData);
+     /**
+      * Get single named string variable data
+      * @param[in] _pstName variable name
+      * @param[out] _pwstData return allocated string pointer ( null terminated )
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     int getAllocatedNamedSingleWideString(void* _pvCtx, const char* _pstName, wchar_t** _pwstData);
+     /**
+      * Get named strings variable data
+      * @param[in] _pstName variable name
+      * @param[out] _piRows number of rows
+      * @param[out] _piCols number of columns
+      * @param[out] _pstData return allocated array of string pointer ( null terminated )
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     int getAllocatedNamedMatrixOfString(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, char*** _pstData);
+     /**
+      * Get named wide strings variable data
+      * @param[in] _pstName variable name
+      * @param[out] _piRows number of rows
+      * @param[out] _piCols number of columns
+      * @param[out] _pwstData return allocated array of wide string pointer ( null terminated )
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     int getAllocatedNamedMatrixOfWideString(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, wchar_t*** _pwstData);
+     /**
+      * Create single string variable data
+      * @param[in] _iVar variable number
+      * @param[in] _pstStrings string ( null terminated )
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     int createSingleString(void* _pvCtx, int _iVar, const char* _pstStrings);
+     /**
+      * Create single string variable data
+      * @param[in] _iVar variable number
+      * @param[in] _iLen string length to reserve space in stack
+      * @param[out] pointer on the new single string
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     int allocSingleString(void* _pvCtx, int _iVar, int _iLen, const char** _pstStrings);
+     /**
+      * Create single wide string variable data
+      * @param[in] _iVar variable number
+      * @param[in] _pwstStrings wide string ( null terminated )
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     int createSingleWideString(void* _pvCtx, int _iVar, const wchar_t* _pwstStrings);
+     /**
+      * Create named single string variable data
+      * @param[in] _pstName variable name
+      * @param[in] _pstStrings string ( null terminated )
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     int createNamedSingleString(void* _pvCtx, const char* _pstName, const char* _pstStrings);
+     /**
+      * Create named single wide string variable data
+      * @param[in] _pstName variable name
+      * @param[in] _pwstStrings wide string ( null terminated )
+      * @return if the operation succeeded (0) or not ( !0 )
+      */
+     int createNamedSingleWideString(void* _pvCtx, const char* _pstName, const wchar_t* _pwstStrings);
+     /**
+      * free data allocated by shortcut functions ( named or not )
+      * @param[in] _pstData string data
+      */
+     void freeAllocatedSingleString(char* _pstData);
+     /**
+      * free data allocated by shortcut functions ( named or not )
+      * @param[in] _pwstData wide string data
+      */
+     void freeAllocatedSingleWideString(wchar_t* _pwstData);
+     /**
+      * free data allocated by shortcut functions ( named or not )
+      * @param[in] _iRows number of rows
+      * @param[in] _iCols number of columns
+      * @param[in] _pstData matrix of string data
+      */
+     void freeAllocatedMatrixOfString(int _iRows, int _iCols, char** _pstData);
+     /**
+      * free data allocated by shortcut functions ( named or not )
+      * @param[in] _iRows number of rows
+      * @param[in] _iCols number of columns
+      * @param[in] _pwstData matrix of wide string data
+      */
+     void freeAllocatedMatrixOfWideString(int _iRows, int _iCols, wchar_t** _pwstData);
  
  #ifdef __cplusplus
  }
@@@ -25,11 -17,12 +25,13 @@@ extern "C
  #include "api_internal_common.h"
  #include "api_internal_double.h"
  #include "localization.h"
 +#include "elem_common.h"
++    extern int C2F(entier)(int *n, double *d__, int *s);
++    extern int C2F(icopy)(int *, int *, int *, int *, int *);
 +}
  
 -#include "call_scilab.h"
 -
 +using namespace types;
  
 -extern int C2F(entier)(int *n, double *d__, int *s);
 -extern int C2F(icopy)(int *, int *, int *, int *, int *);
  /*******************************/
  /*   double matrix functions   */
  /*******************************/
@@@ -91,22 -130,14 +139,16 @@@ SciErr getCommonMatrixOfDouble(void* _p
          return sciErr;
      }
  
-     sciErr = getVarDimension(_pvCtx, _piAddress, _piRows, _piCols);
-     if(sciErr.iErr)
+     if (_pdblReal != NULL)
      {
-         addErrorMessage(&sciErr, API_ERROR_GET_DOUBLE, _("%s: Unable to get argument #%d"), _iComplex ? "getComplexMatrixOfDouble" : "getMatrixOfDouble", getRhsFromAddress(_pvCtx, _piAddress));
-         return sciErr;
 -        *_pdblReal    = (double*)(_piAddress + 4);
++        *_pdblReal    = ((InternalType*)_piAddress)->getAs<Double>()->getReal();
      }
 -    if (isVarComplex(_pvCtx, _piAddress) && _pdblImg != NULL)
 +
-     if(_pdblReal != NULL)
-       {
-               *_pdblReal      = ((InternalType*)_piAddress)->getAs<Double>()->getReal();
-       }
++    if (_iComplex && _pdblImg != NULL)
+     {
 -        *_pdblImg     = (double*)(_piAddress + 4) + *_piRows * *_piCols;
++        *_pdblImg             = ((InternalType*)_piAddress)->getAs<Double>()->getImg();
+     }
 +
-       if(_iComplex && _pdblImg != NULL)
-       {
-               *_pdblImg               = ((InternalType*)_piAddress)->getAs<Double>()->getImg();
-       }
      return sciErr;
  }
  
@@@ -145,58 -219,34 +230,60 @@@ SciErr allocComplexMatrixOfDoubleAsInte
      return sciErr;
  }
  
- SciErr allocCommonMatrixOfDouble(void* _pvCtx, int _iVar, int _iComplex, int _iRows, int _iCols, double** _pdblReal, double** _pdblImg)
+ SciErr allocCommonMatrixOfDouble(void* _pvCtx, int _iVar, char _cType, int _iComplex, int _iRows, int _iCols, double** _pdblReal, double** _pdblImg)
  {
-     SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
 -    int iNewPos                       = Top - Rhs + _iVar;
 -    int iAddr                         = *Lstk(iNewPos);
 -    int* piAddr                       = NULL;
  
-     if(_pvCtx == NULL)
 -    int iMemSize = _iRows * _iCols * (_iComplex + 1) + 2;
 -    int iFreeSpace = iadr(*Lstk(Bot)) - (iadr(iAddr));
 -    if (iMemSize > iFreeSpace)
++    if (_pvCtx == NULL)
 +    {
 +        addErrorMessage(&sciErr, API_ERROR_INVALID_POINTER, _("%s: Invalid argument address"), _iComplex ? "allocComplexMatrixOfDouble" : "allocMatrixOfDouble");
 +        return sciErr;
 +    }
 +
 +    GatewayStruct* pStr = (GatewayStruct*)_pvCtx;
 +    typed_list in = *pStr->m_pIn;
 +    InternalType** out = pStr->m_pOut;
 +    int*      piRetCount = pStr->m_piRetCount;
 +    wchar_t* pstName = pStr->m_pstName;
 +
 +    Double* pDbl = NULL;
 +    try
      {
 -        addStackSizeError(&sciErr, ((StrCtx*)_pvCtx)->pstName, iMemSize);
 +        pDbl = new Double(_iRows, _iCols, _iComplex == 1);
 +    }
-     catch(ast::ScilabError se)
++    catch (ast::ScilabError se)
 +    {
 +        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), _iComplex ? "allocComplexMatrixOfDouble" : "allocMatrixOfDouble", se.GetErrorMessage().c_str());
          return sciErr;
      }
  
-     if(pDbl == NULL)
 -    getNewVarAddressFromPosition(_pvCtx, iNewPos, &piAddr);
 -    fillCommonMatrixOfDouble(_pvCtx, piAddr, _iComplex, _iRows, _iCols, _pdblReal, _pdblImg);
++    if (pDbl == NULL)
 +    {
 +        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: No more memory to allocate variable"), _iComplex ? "allocComplexMatrixOfDouble" : "allocMatrixOfDouble");
 +        return sciErr;
 +    }
 +
 +    int rhs = _iVar - *getNbInputArgument(_pvCtx);
 +    out[rhs - 1] = pDbl;
 +    *_pdblReal = pDbl->getReal();
-     if(*_pdblReal == NULL)
++    if (*_pdblReal == NULL)
 +    {
 +        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: No more memory to allocate variable"), _iComplex ? "allocComplexMatrixOfDouble" : "allocexMatrixOfDouble");
 +        return sciErr;
 +    }
  
-     if(_iComplex && _pdblImg != NULL)
 -    int iSCIAddress = sadr(iadr(iAddr) + 4);
 -    if (_cType == 'i')
++    if (_iComplex && _pdblImg != NULL)
      {
 -        iSCIAddress = iadr(iSCIAddress);
 +        *_pdblImg     = pDbl->getImg();
-         if(*_pdblImg == NULL)
++        if (*_pdblImg == NULL)
 +        {
 +            addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: No more memory to allocate variable"), _iComplex ? "allocComplexMatrixOfDouble" : "allocMatrixOfDouble");
 +            return sciErr;
 +        }
      }
  
 -    updateInterSCI(_iVar, _cType, iAddr, iSCIAddress);
 -    updateLstk(iNewPos, sadr(iadr(iAddr) + 4), _iRows * _iCols * (_iComplex + 1));
      return sciErr;
  }
  
@@@ -292,15 -394,99 +431,23 @@@ SciErr createNamedComplexMatrixOfDouble
  
  SciErr createNamedComplexZMatrixOfDouble(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const doublecomplex* _pdblData)
  {
-     SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
 -    int iVarID[nsiz];
 -    int iSaveRhs                      = Rhs;
 -    int iSaveTop                      = Top;
 -    int iSize                                 = _iRows * _iCols;
 -    int *piAddr                               = NULL;
 -    double *pdblReal  = NULL;
 -    double *pdblImg           = NULL;
 -    if (!checkNamedVarFormat(_pvCtx, _pstName))
 -    {
 -        addErrorMessage(&sciErr, API_ERROR_INVALID_NAME, _("%s: Invalid variable name."), "createNamedComplexZMatrixOfDouble");
 -        return sciErr;
 -    }
 -
 -    C2F(str2name)(_pstName, iVarID, (int)strlen(_pstName));
 -    Top = Top + Nbvars + 1;
 -
 -    getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
 -
 -    //write matrix information
 -    fillCommonMatrixOfDouble(_pvCtx, piAddr, 1, _iRows, _iCols, &pdblReal, &pdblImg);
 -
 -    vGetPointerFromDoubleComplex(_pdblData, _iRows * _iCols, pdblReal, pdblImg);
 -
 -    //update "variable index"
 -    updateLstk(Top, *Lstk(Top) + sadr(4), iSize * (2) * 2);
 -
 -    Rhs = 0;
 -    //Add name in stack reference list
 -    createNamedVariable(iVarID);
 -
 -    Top = iSaveTop;
 -    Rhs = iSaveRhs;
 +    // FIXME
      return sciErr;
  }
  
  SciErr createCommonNamedMatrixOfDouble(void* _pvCtx, const char* _pstName, int _iComplex, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg)
  {
-     SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
 -    int iVarID[nsiz];
 -    int iSaveRhs              = Rhs;
 -    int iSaveTop              = Top;
 -    int iSize         = _iRows * _iCols;
 -    int *piAddr               = NULL;
 -    double *pdblReal  = NULL;
 -    double *pdblImg           = NULL;
 -    int iOne          = 1;
 -    if (!checkNamedVarFormat(_pvCtx, _pstName))
 -    {
 -        addErrorMessage(&sciErr, API_ERROR_INVALID_NAME, _("%s: Invalid variable name."), "createCommonNamedMatrixOfDouble");
 -        return sciErr;
 -    }
 -
 -    C2F(str2name)(_pstName, iVarID, (int)strlen(_pstName));
 -    Top = Top + Nbvars + 1;
 -
 -    int iMemSize = _iRows * _iCols * (_iComplex + 1) + 2;
 -    int iFreeSpace = iadr(*Lstk(Bot)) - (iadr(Top));
 -    if (iMemSize > iFreeSpace)
 -    {
 -        addStackSizeError(&sciErr, ((StrCtx*)_pvCtx)->pstName, iMemSize);
 -        return sciErr;
 -    }
 -
 -    getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
 -
 -    //write matrix information
 -    fillCommonMatrixOfDouble(_pvCtx, piAddr, _iComplex, _iRows, _iCols, &pdblReal, &pdblImg);
 -    //copy data in stack
 -    C2F(dcopy)(&iSize, const_cast<double*>(_pdblReal), &iOne, pdblReal, &iOne);
 -
 -    if (_iComplex)
 -    {
 -        C2F(dcopy)(&iSize, const_cast<double*>(_pdblImg), &iOne, pdblImg, &iOne);
 -    }
 -
 -    //update "variable index"
 -    updateLstk(Top, *Lstk(Top) + sadr(4), iSize * (_iComplex + 1) * 2);
 -
 -    Rhs = 0;
 -    //Add name in stack reference list
 -    createNamedVariable(iVarID);
 -
 -    Top = iSaveTop;
 -    Rhs = iSaveRhs;
 +    // FIXME
      return sciErr;
  }
  
@@@ -516,78 -712,3 +673,78 @@@ static int createCommonNamedScalarDoubl
      return 0;
  }
  /*--------------------------------------------------------------------------*/
 +int createScalarDoubleFromInteger(void* _pvCtx, int _iVar, int _iReal)
 +{
 +    return createCommonScalarDoubleFromInteger(_pvCtx, _iVar, 0, _iReal, 0);
 +}
 +/*--------------------------------------------------------------------------*/
 +int createScalarComplexDoubleFromInteger(void* _pvCtx, int _iVar, int _iReal, int _iImg)
 +{
 +    return createCommonScalarDoubleFromInteger(_pvCtx, _iVar, 1, _iReal, _iImg);
 +}
 +/*--------------------------------------------------------------------------*/
 +static int createCommonScalarDoubleFromInteger(void* _pvCtx, int _iVar, int _iComplex, int _iReal, int _iImg)
 +{
 +    SciErr sciErr;
 +    double* pdblReal = NULL;
 +    double* pdblImg     = NULL;
 +
 +
-     sciErr = allocCommonMatrixOfDouble(_pvCtx, _iVar, _iComplex, 1, 1, &pdblReal, &pdblImg);
-     if(sciErr.iErr)
++    sciErr = allocCommonMatrixOfDouble(_pvCtx, _iVar, 'i', _iComplex, 1, 1, &pdblReal, &pdblImg);
++    if (sciErr.iErr)
 +    {
 +        addErrorMessage(&sciErr, API_ERROR_CREATE_SCALAR_FROM_INTEGER, _("%s: Unable to create variable in Scilab memory"), _iComplex ? "createScalarComplexDoubleFromInteger" : "createScalarDoubleFromInteger");
 +        printError(&sciErr, 0);
 +        return sciErr.iErr;
 +    }
 +
 +    pdblReal[0] = (double)_iReal;
 +
-     if(_iComplex)
++    if (_iComplex)
 +    {
 +        pdblImg[0] = (double)_iImg;
 +    }
 +    return 0;
 +}
 +/*--------------------------------------------------------------------------*/
 +int createMatrixOfDoubleFromInteger(void* _pvCtx, int _iVar, int _iRows, int _iCols, int* _piReal)
 +{
 +    return createCommonMatrixDoubleFromInteger(_pvCtx, _iVar, 0, _iRows, _iCols, _piReal, NULL);
 +}
 +/*--------------------------------------------------------------------------*/
 +int createMatrixOfComplexDoubleFromInteger(void* _pvCtx, int _iVar, int _iRows, int _iCols, int* _piReal, int* _piImg)
 +{
 +    return createCommonMatrixDoubleFromInteger(_pvCtx, _iVar, 1, _iRows, _iCols, _piReal, _piImg);
 +}
 +/*--------------------------------------------------------------------------*/
 +static int createCommonMatrixDoubleFromInteger(void* _pvCtx, int _iVar, int _iComplex, int _iRows, int _iCols, int* _piReal, int* _piImg)
 +{
 +    SciErr sciErr;
 +    double* pdblReal = NULL;
 +    double* pdblImg     = NULL;
 +
 +
-     sciErr = allocCommonMatrixOfDouble(_pvCtx, _iVar, _iComplex, _iRows, _iCols, &pdblReal, &pdblImg);
-     if(sciErr.iErr)
++    sciErr = allocCommonMatrixOfDouble(_pvCtx, _iVar, 'i', _iComplex, _iRows, _iCols, &pdblReal, &pdblImg);
++    if (sciErr.iErr)
 +    {
 +        addErrorMessage(&sciErr, API_ERROR_CREATE_MATRIX_FROM_INTEGER, _("%s: Unable to create variable in Scilab memory"), _iComplex ? "createMatrixOfComplexDoubleFromInteger" : "createMatrixOfDoubleFromInteger");
 +        printError(&sciErr, 0);
 +        return sciErr.iErr;
 +    }
 +
-     for(int i = 0 ; i < _iRows * _iCols ; i++)
++    for (int i = 0 ; i < _iRows * _iCols ; i++)
 +    {
 +        pdblReal[i] = (double)_piReal[i];
 +    }
 +
-     if(_iComplex)
++    if (_iComplex)
 +    {
-         for(int i = 0 ; i < _iRows * _iCols ; i++)
++        for (int i = 0 ; i < _iRows * _iCols ; i++)
 +        {
 +            pdblImg[i] = (double)_piImg[i];
 +        }
 +    }
 +    return 0;
 +}
 +/*--------------------------------------------------------------------------*/
 +
index 0000000,5a8171c..3df7f3b
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,183 +1,96 @@@
+ /*
+  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+  * Copyright (C) 2012 - Scilab Enterprises - Antoine ELIAS
+  *
+  * This file must be used under the terms of the CeCILL.
+  * This source file is licensed as described in the file COPYING, which
+  * you should have received as part of this distribution.  The terms
+  * are also available at
+  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+  *
+  * Please note that piece of code will be rewrited for the Scilab 6 family
+  * However, the API (profile of the functions in the header files) will be
+  * still available and supported in Scilab 6.
+  */
++extern "C"
++{
+ #include "api_scilab.h"
+ #include "api_internal_common.h"
+ #include "api_internal_handle.h"
+ #include "localization.h"
+ #include "Scierror.h"
+ #include "call_scilab.h"
 -
 -
++}
+ SciErr getMatrixOfHandle(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, long long** _pllHandle)
+ {
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
 -    int iType = 0;
 -
 -    if (      _piAddress == NULL)
 -    {
 -        addErrorMessage(&sciErr, API_ERROR_INVALID_POINTER, _("%s: Invalid argument address"), "getMatrixOfHandle");
 -        return sciErr;
 -    }
 -
 -    sciErr = getVarType(_pvCtx, _piAddress, &iType);
 -    if (sciErr.iErr || iType != sci_handles)
 -    {
 -        addErrorMessage(&sciErr, API_ERROR_INVALID_TYPE, _("%s: Invalid argument type, %s excepted"), "getMatrixOfHandle", _("handle matrix"));
 -        return sciErr;
 -    }
 -    sciErr = getVarDimension(_pvCtx, _piAddress, _piRows, _piCols);
 -    if (sciErr.iErr)
 -    {
 -        addErrorMessage(&sciErr, API_ERROR_GET_HANDLE, _("%s: Unable to get argument #%d"), "getMatrixOfHandle", getRhsFromAddress(_pvCtx, _piAddress));
 -        return sciErr;
 -    }
++    //FIX ME
 -    if (_pllHandle)
 -    {
 -        *_pllHandle = (long long*)(_piAddress + 4);
 -    }
+     return sciErr;
+ }
+ /*--------------------------------------------------------------------------*/
+ SciErr allocMatrixOfHandle(void* _pvCtx, int _iVar, int _iRows, int _iCols, long long** _pllHandle)
+ {
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
 -    int iNewPos = Top - Rhs + _iVar;
 -    int iAddr = *Lstk(iNewPos);
 -    int* piAddr = NULL;
 -    int iMemSize = _iRows * _iCols + 2;
 -    int iFreeSpace = iadr(*Lstk(Bot)) - (iadr(iAddr));
 -    if (iMemSize > iFreeSpace)
 -    {
 -        addStackSizeError(&sciErr, ((StrCtx*)_pvCtx)->pstName, iMemSize);
 -        return sciErr;
 -    }
++    //FIX ME
 -    getNewVarAddressFromPosition(_pvCtx, iNewPos, &piAddr);
 -    fillMatrixOfHandle(_pvCtx, piAddr, _iRows, _iCols, _pllHandle);
 -
 -    int iSCIAddress = sadr(iadr(iAddr) + 4);
 -    updateInterSCI(_iVar, '$', iAddr, iSCIAddress);
 -    updateLstk(iNewPos, sadr(iadr(iAddr) + 4), _iRows * _iCols);
+     return sciErr;
+ }
+ /*--------------------------------------------------------------------------*/
+ SciErr createMatrixOfHandle(void* _pvCtx, int _iVar, int _iRows, int _iCols, long long* _pllHandle)
+ {
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
 -    long long* pllHandle = NULL;
 -
 -    if (_iRows == 0 && _iCols == 0)
 -    {
 -        double dblReal = 0;
 -        sciErr = createMatrixOfDouble(_pvCtx, _iVar, 0, 0, &dblReal);
 -        if (sciErr.iErr)
 -        {
 -            addErrorMessage(&sciErr, API_ERROR_CREATE_EMPTY_MATRIX, _("%s: Unable to create variable in Scilab memory"), "createEmptyMatrix");
 -        }
 -        return sciErr;
 -    }
 -    sciErr = allocMatrixOfHandle(_pvCtx, _iVar, _iRows, _iCols, &pllHandle);
 -    if (sciErr.iErr)
 -    {
 -        addErrorMessage(&sciErr, API_ERROR_CREATE_HANDLE, _("%s: Unable to create variable in Scilab memory"), "createMatrixOfHandle");
 -        return sciErr;
 -    }
++    //FIX ME
 -    memcpy(pllHandle, _pllHandle, sizeof(long long) * _iRows * _iCols);
+     return sciErr;
+ }
+ /*--------------------------------------------------------------------------*/
+ SciErr fillMatrixOfHandle(void* _pvCtx, int* _piAddress, int _iRows, int _iCols, long long** _pllHandle)
+ {
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
 -    _piAddress[0]     = sci_handles;
 -    _piAddress[1] = Min(_iRows, _iRows * _iCols);
 -    _piAddress[2] = Min(_iCols, _iRows * _iCols);
 -    *_pllHandle = (long long*)(_piAddress + 4);
++    //FIX ME
++
+     return sciErr;
+ }
+ /*--------------------------------------------------------------------------*/
+ int isHandleType(void* _pvCtx, int* _piAddress)
+ {
+     return checkVarType(_pvCtx, _piAddress, sci_handles);
+ }
+ /*--------------------------------------------------------------------------*/
+ int getScalarHandle(void* _pvCtx, int* _piAddress, long long* _pllHandle)
+ {
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
 -    int iRows = 0;
 -    int iCols = 0;
 -
 -    long long* pllHandle = NULL;
 -
 -    sciErr = getMatrixOfHandle(_pvCtx, _piAddress, &iRows, &iCols, &pllHandle);
 -    if (sciErr.iErr)
 -    {
 -        addErrorMessage(&sciErr, API_ERROR_GET_SCALAR_HANDLE, _("%s: Unable to get argument #%d"), "getScalarHandle", getRhsFromAddress(_pvCtx, _piAddress));
 -        printError(&sciErr, 0);
 -        return sciErr.iErr;
 -    }
 -
 -    if (isScalar(_pvCtx, _piAddress) == 0)
 -    {
 -        addErrorMessage(&sciErr, API_ERROR_GET_SCALAR_HANDLE, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), "getScalarHandle", getRhsFromAddress(_pvCtx, _piAddress));
 -        printError(&sciErr, 0);
 -        return sciErr.iErr;
 -    }
 -    if (_pllHandle != NULL)
 -    {
 -        *_pllHandle   = pllHandle[0];
 -    }
++    //FIX ME
+     return 0;
+ }
+ /*--------------------------------------------------------------------------*/
+ int createScalarHandle(void* _pvCtx, int _iVar, long long _llHandle)
+ {
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
 -    long long* pllHandle = NULL;
 -    sciErr = allocMatrixOfHandle(_pvCtx, _iVar, 1, 1, &pllHandle);
 -    if (sciErr.iErr)
 -    {
 -        addErrorMessage(&sciErr, API_ERROR_CREATE_SCALAR_HANDLE, _("%s: Unable to create variable in Scilab memory"), "createScalarHandle");
 -        printError(&sciErr, 0);
 -        return sciErr.iErr;
 -    }
++    //FIX ME
 -    pllHandle[0] = _llHandle;
+     return 0;
+ }
   */
  
  /*--------------------------------------------------------------------------*/
 -#include <string.h>
 +#include "function.hxx"
 +#include "string.hxx"
 +#include "double.hxx"
  
 +extern "C"
 +{
 +#include <string.h>
 +#include <stdlib.h>
 +#include "machine.h"
  #include "charEncoding.h"
+ #include "MALLOC.h"
  #include "api_scilab.h"
 -#include "api_internal_common.h"
  #include "api_internal_string.h"
 +#include "api_internal_common.h"
+ #include "call_scilab.h"
  #include "localization.h"
 -
 -extern "C"
 -{
 -#include "code2str.h"
 +#include "MALLOC.h"
  #include "freeArrayOfString.h"
 -};
 +#include "os_wcsdup.h"
 +}
 +
++//extern "C"
++//{
++//#include "code2str.h"
++//#include "freeArrayOfString.h"
++//};
++
 +using namespace types;
  /*--------------------------------------------------------------------------*/
  
  /*******************************/
  
  SciErr getMatrixOfString(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, int* _piLength, char** _pstStrings)
  {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int *piOffset = NULL;
-       int *piData             = NULL;
-       int iType                       = 0;
-       if(     _piAddress == NULL)
-       {
-               addErrorMessage(&sciErr, API_ERROR_INVALID_POINTER, _("%s: Invalid argument address"), "getMatrixOfString");
-               return sciErr;
-       }
-       sciErr = getVarType(_pvCtx, _piAddress, &iType);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_STRING, _("%s: Unable to get argument #%d"), "getMatrixOfString", getRhsFromAddress(_pvCtx, _piAddress));
-               return sciErr;
-       }
-       if(iType != sci_strings)
-       {
-               addErrorMessage(&sciErr, API_ERROR_INVALID_TYPE, _("%s: Invalid argument type, %s excepted"), "getMatrixOfString", _("string matrix"));
-               return sciErr;
-       }
-       sciErr = getVarDimension(_pvCtx, _piAddress, _piRows, _piCols);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_STRING, _("%s: Unable to get argument #%d"), "getMatrixOfString", getRhsFromAddress(_pvCtx, _piAddress));
-               return sciErr;
-       }
-       if(_piLength == NULL)
-       {
-               return sciErr;
-       }
-       String *pS = ((InternalType*)_piAddress)->getAs<types::String>();
-       //non cummulative length
-       for(int i = 0 ; i < *_piRows * *_piCols ; i++)
-       {
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
+     int *piOffset = NULL;
 -    int *piData               = NULL;
 -    int iType                 = 0;
++    int *piData       = NULL;
++    int iType = 0;
 -    if (      _piAddress == NULL)
++    if (_piAddress == NULL)
+     {
+         addErrorMessage(&sciErr, API_ERROR_INVALID_POINTER, _("%s: Invalid argument address"), "getMatrixOfString");
+         return sciErr;
+     }
+     sciErr = getVarType(_pvCtx, _piAddress, &iType);
+     if (sciErr.iErr)
+     {
+         addErrorMessage(&sciErr, API_ERROR_GET_STRING, _("%s: Unable to get argument #%d"), "getMatrixOfString", getRhsFromAddress(_pvCtx, _piAddress));
+         return sciErr;
+     }
+     if (iType != sci_strings)
+     {
+         addErrorMessage(&sciErr, API_ERROR_INVALID_TYPE, _("%s: Invalid argument type, %s excepted"), "getMatrixOfString", _("string matrix"));
+         return sciErr;
+     }
+     sciErr = getVarDimension(_pvCtx, _piAddress, _piRows, _piCols);
+     if (sciErr.iErr)
+     {
+         addErrorMessage(&sciErr, API_ERROR_GET_STRING, _("%s: Unable to get argument #%d"), "getMatrixOfString", getRhsFromAddress(_pvCtx, _piAddress));
+         return sciErr;
+     }
+     if (_piLength == NULL)
+     {
+         return sciErr;
+     }
 -    piOffset = _piAddress + 4;
++    String *pS = ((InternalType*)_piAddress)->getAs<types::String>();
+     //non cummulative length
+     for (int i = 0 ; i < *_piRows * *_piCols ; i++)
+     {
 -        _piLength[i] = piOffset[i + 1] - piOffset[i];
 +        char* pstTemp = wide_string_to_UTF8(pS->get(i));
-               _piLength[i] = (int)strlen(pstTemp);
++        _piLength[i] = (int)strlen(pstTemp);
 +        FREE(pstTemp);
-       }
+     }
  
-       if(_pstStrings == NULL || *_pstStrings == NULL)
-       {
-               return sciErr;
-       }
+     if (_pstStrings == NULL || *_pstStrings == NULL)
+     {
+         return sciErr;
+     }
  
-     for(int i = 0 ; i < pS->getSize() ; i++)
-       {
-               if(_pstStrings[i] == NULL)
-               {
-                       addErrorMessage(&sciErr, API_ERROR_INVALID_SUBSTRING_POINTER, _("%s: Invalid argument address"), "getMatrixOfString");
-                       return sciErr;
-               }
 -    piData = piOffset + *_piRows * *_piCols + 1;
 -
 -    int sum = 0;
 -    for (int i = 0 ; i < *_piRows * *_piCols ; i++)
++    for (int i = 0 ; i < pS->getSize() ; i++)
+     {
+         if (_pstStrings[i] == NULL)
+         {
+             addErrorMessage(&sciErr, API_ERROR_INVALID_SUBSTRING_POINTER, _("%s: Invalid argument address"), "getMatrixOfString");
+             return sciErr;
+         }
 -        code2str(&_pstStrings[i], piData + sum, _piLength[i]);
 -        sum += _piLength[i];
 -        _pstStrings[i][_piLength[i]] = 0;
 +
 +        char* pstTemp = wide_string_to_UTF8(pS->get(i));
-               strcpy(_pstStrings[i], pstTemp);
++        strcpy(_pstStrings[i], pstTemp);
 +        FREE(pstTemp);
-       }
-       return sciErr;
+     }
+     return sciErr;
  }
  /*--------------------------------------------------------------------------*/
  SciErr createMatrixOfString(void* _pvCtx, int _iVar, int _iRows, int _iCols, const char* const * _pstStrings)
  {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
 -    int iNewPos                       = Top - Rhs + _iVar;
 -    int iAddr                         = *Lstk(iNewPos);
 -    int iTotalLen             = 0;
 -    int *piAddr                       = NULL;
 +
 +    int rhs = _iVar - *getNbInputArgument(_pvCtx);
-       GatewayStruct* pStr = (GatewayStruct*)_pvCtx;
++    GatewayStruct* pStr = (GatewayStruct*)_pvCtx;
 +    InternalType** out = pStr->m_pOut;
  
      //return empty matrix
-     if(_iRows == 0 && _iCols == 0)
+     if (_iRows == 0 && _iCols == 0)
      {
 -        double dblReal = 0;
 -        sciErr = createMatrixOfDouble(_pvCtx, _iVar, 0, 0, &dblReal);
 -        if (sciErr.iErr)
 +        Double *pDbl = new Double(_iRows, _iCols);
-         if(pDbl == NULL)
++        if (pDbl == NULL)
          {
              addErrorMessage(&sciErr, API_ERROR_CREATE_EMPTY_MATRIX, _("%s: Unable to create variable in Scilab memory"), "createEmptyMatrix");
 +            return sciErr;
          }
 -        return sciErr;
 -    }
  
 -    getNewVarAddressFromPosition(_pvCtx, iNewPos, &piAddr);
 +        out[rhs - 1] = pDbl;
++    }
  
 -    sciErr = fillMatrixOfString(_pvCtx, piAddr, _iRows, _iCols, _pstStrings, &iTotalLen);
 -    if (sciErr.iErr)
++    String* pS = new String(_iRows, _iCols);
++    if (pS == NULL)
+     {
 -        addErrorMessage(&sciErr, API_ERROR_CREATE_STRING, _("%s: Unable to create variable in Scilab memory"), "createMatrixOfString");
++        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: No more memory to allocated variable"), "createMatrixOfString");
          return sciErr;
      }
  
-       String* pS = new String(_iRows, _iCols);
-       if(pS == NULL)
-       {
-               addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: No more memory to allocated variable"), "createMatrixOfString");
-               return sciErr;
-       }
-       for(int i = 0 ; i < pS->getSize() ; i++)
-       {
 -    updateInterSCI(_iVar, '$', iAddr, sadr(iadr(iAddr) + 5 + _iRows * _iCols));
 -    updateLstk(iNewPos, sadr(iadr(iAddr) + 5 + _iRows * _iCols + !((_iRows * _iCols) % 2)), (iTotalLen + 1) / (sizeof(double) / sizeof(int)));
++    for (int i = 0 ; i < pS->getSize() ; i++)
++    {
 +        wchar_t* pstTemp = to_wide_string(_pstStrings[i]);
-               pS->set(i, pstTemp);
++        pS->set(i, pstTemp);
 +        FREE(pstTemp);
-       }
++    }
 +
-       out[rhs - 1] = pS;
++    out[rhs - 1] = pS;
 +
-       return sciErr;
+     return sciErr;
  }
  /*--------------------------------------------------------------------------*/
  SciErr fillMatrixOfString(void* _pvCtx, int* _piAddress, int _iRows, int _iCols, const char* const* _pstStrings, int* _piTotalLen)
  {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piOffset = NULL;
-       int* piData             = NULL;
-       int iOffset             = 0;
-       _piAddress[0]   = sci_strings;
-       _piAddress[1] = _iRows;
-       _piAddress[2] = _iCols;
-       _piAddress[3] = 0; //always 0
-       piOffset        = _piAddress + 4;
-       piOffset[0] = 1; //Always 1
-       piData          = piOffset + _iRows * _iCols + 1;
-       if(_pstStrings == NULL)
-       {
-               addErrorMessage(&sciErr, API_ERROR_INVALID_POINTER, _("%s: Invalid argument address"), "fillMatrixOfString");
-               return sciErr;
-       }
-       for(int i = 0 ; i < _iRows * _iCols ; i++)
-       {
-               if(_pstStrings[i] == NULL)
-               {
-                       addErrorMessage(&sciErr, API_ERROR_INVALID_SUBSTRING_POINTER, _("%s: Invalid argument address"), "getMatrixOfString");
-                       return sciErr;
-               }
-               int iLen = (int)strlen(_pstStrings[i]);
-               iOffset += iLen;
-               piData[iOffset] = 0;
-               piOffset[i + 1] = piOffset[i] + iLen;
-       }
-       *_piTotalLen    = piOffset[_iRows * _iCols] - 1;
-       return sciErr;
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
+     int* piOffset = NULL;
 -    int* piData   = NULL;
 -    int iOffset   = 0;
 -    int iTotalSize = 0;
 -    int iMemSize = 0;
 -    int iFreeSpace = iadr(*Lstk(Bot)) - (iadr(*Lstk(Top)));
 -
 -    for (int i = 0; i < _iRows * _iCols; i++)
 -    {
 -        iTotalSize = iTotalSize + (int)strlen(_pstStrings[i]) + 1;
 -    }
 -
 -    iMemSize = iTotalSize + 2;
++    int* piData               = NULL;
++    int iOffset               = 0;
 -    if (iMemSize > iFreeSpace)
 -    {
 -        addStackSizeError(&sciErr, ((StrCtx*)_pvCtx)->pstName, iMemSize);
 -        return sciErr;
 -    }
 -
 -    _piAddress[0] = sci_strings;
++    _piAddress[0]     = sci_strings;
+     _piAddress[1] = _iRows;
+     _piAddress[2] = _iCols;
+     _piAddress[3] = 0; //always 0
 -    piOffset  = _piAddress + 4;
++    piOffset  = _piAddress + 4;
+     piOffset[0] = 1; //Always 1
 -    piData    = piOffset + _iRows * _iCols + 1;
++    piData            = piOffset + _iRows * _iCols + 1;
+     if (_pstStrings == NULL)
+     {
+         addErrorMessage(&sciErr, API_ERROR_INVALID_POINTER, _("%s: Invalid argument address"), "fillMatrixOfString");
+         return sciErr;
+     }
+     for (int i = 0 ; i < _iRows * _iCols ; i++)
+     {
+         if (_pstStrings[i] == NULL)
+         {
+             addErrorMessage(&sciErr, API_ERROR_INVALID_SUBSTRING_POINTER, _("%s: Invalid argument address"), "getMatrixOfString");
+             return sciErr;
+         }
+         int iLen = (int)strlen(_pstStrings[i]);
 -        str2code(piData + iOffset, &_pstStrings[i]);
+         iOffset += iLen;
+         piData[iOffset] = 0;
+         piOffset[i + 1] = piOffset[i] + iLen;
+     }
 -    *_piTotalLen  = piOffset[_iRows * _iCols] - 1;
++    *_piTotalLen      = piOffset[_iRows * _iCols] - 1;
+     return sciErr;
  }
  /*--------------------------------------------------------------------------*/
  SciErr createNamedMatrixOfString(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const char* const* _pstStrings)
  {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
- #if 0
-       int iVarID[nsiz];
-       int iSaveRhs                    = api_Rhs((int*)_pvCtx);
-       int iSaveTop                    = api_Top((int*)_pvCtx);
-       int *piAddr                             = NULL;
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
 -    int iVarID[nsiz];
 -    int iSaveRhs      = Rhs;
 -    int iSaveTop      = Top;
 -    int *piAddr       = NULL;
 -
 -    int iTotalLen     = 0;
 -
 -    //return named empty matrix
 -    if (_iRows == 0 && _iCols == 0)
 -    {
 -        double dblReal = 0;
 -        sciErr = createNamedMatrixOfDouble(_pvCtx, _pstName, 0, 0, &dblReal);
 -        if (sciErr.iErr)
 -        {
 -            addErrorMessage(&sciErr, API_ERROR_CREATE_NAMED_EMPTY_MATRIX, _("%s: Unable to create variable in Scilab memory"), "createNamedEmptyMatrix");
 -        }
 -        return sciErr;
 -    }
 -
 -    if (!checkNamedVarFormat(_pvCtx, _pstName))
 -    {
 -        addErrorMessage(&sciErr, API_ERROR_INVALID_NAME, _("%s: Invalid variable name."), "createNamedMatrixOfString");
 -        return sciErr;
 -    }
 -
 -    C2F(str2name)(_pstName, iVarID, (int)strlen(_pstName));
 -    Top = Top + Nbvars + 1;
 -
 -    getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
 -
 -    //write matrix information
 -    sciErr = fillMatrixOfString(_pvCtx, piAddr, _iRows, _iCols, _pstStrings, &iTotalLen);
 -    if (sciErr.iErr)
 -    {
 -        addErrorMessage(&sciErr, API_ERROR_CREATE_NAMED_STRING, _("%s: Unable to create %s named \"%s\""), "createNamedMatrixOfString", _("matrix of string"), _pstName);
 -        return sciErr;
 -    }
 -
 -    //update "variable index"
 -
 -    updateLstk(Top, sadr(iadr(*Lstk(Top)) + 5 + _iRows * _iCols), iTotalLen);
  
-       int iTotalLen   = 0;
 -    Rhs = 0;
 -    //Add name in stack reference list
 -    createNamedVariable(iVarID);
++    // FIX ME
  
-     //return named empty matrix
-     if(_iRows == 0 && _iCols == 0)
 -    Top = iSaveTop;
 -    Rhs = iSaveRhs;
+     return sciErr;
+ }
+ /*--------------------------------------------------------------------------*/
+ SciErr readNamedMatrixOfString(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, int* _piLength, char** _pstStrings)
+ {
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
+     int* piAddr                               = NULL;
+     sciErr = getVarAddressFromName(_pvCtx, _pstName, &piAddr);
+     if (sciErr.iErr)
      {
-         double dblReal = 0;
-         sciErr = createNamedMatrixOfDouble(_pvCtx, _pstName, 0, 0, &dblReal);
-         if (sciErr.iErr)
-         {
-             addErrorMessage(&sciErr, API_ERROR_CREATE_NAMED_EMPTY_MATRIX, _("%s: Unable to create variable in Scilab memory"), "createNamedEmptyMatrix");
-         }
+         addErrorMessage(&sciErr, API_ERROR_READ_NAMED_STRING, _("%s: Unable to get variable \"%s\""), "readNamedMatrixOfString", _pstName);
          return sciErr;
      }
  
  /*--------------------------------------------------------------------------*/
  SciErr getMatrixOfWideString(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, int* _piwLength, wchar_t** _pwstStrings)
  {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iType                                       = 0;
-       char **pstStrings = NULL;
-       int *piLenStrings = NULL;
-       int strSize = 0;
-       if(     _piAddress == NULL)
-       {
-               addErrorMessage(&sciErr, API_ERROR_INVALID_POINTER, _("%s: Invalid argument address"), "getMatrixOfWideString");
-               return sciErr;
-       }
-       sciErr = getVarType(_pvCtx, _piAddress, &iType);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_WIDE_STRING, _("%s: Unable to get argument #%d"), "getMatrixOfWideString", getRhsFromAddress(_pvCtx, _piAddress));
-               return sciErr;
-       }
-       if(iType != sci_strings)
-       {
-               addErrorMessage(&sciErr, API_ERROR_INVALID_TYPE, _("%s: Invalid argument type, %s excepted"), "getMatrixOfWideString", _("string matrix"));
-               return sciErr;
-       }
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
 -    int iType                                 = 0;
++    int iType = 0;
+     char **pstStrings = NULL;
+     int *piLenStrings = NULL;
+     int strSize = 0;
+     if (      _piAddress == NULL)
+     {
+         addErrorMessage(&sciErr, API_ERROR_INVALID_POINTER, _("%s: Invalid argument address"), "getMatrixOfWideString");
+         return sciErr;
+     }
+     sciErr = getVarType(_pvCtx, _piAddress, &iType);
+     if (sciErr.iErr)
+     {
+         addErrorMessage(&sciErr, API_ERROR_GET_WIDE_STRING, _("%s: Unable to get argument #%d"), "getMatrixOfWideString", getRhsFromAddress(_pvCtx, _piAddress));
+         return sciErr;
+     }
+     if (iType != sci_strings)
+     {
+         addErrorMessage(&sciErr, API_ERROR_INVALID_TYPE, _("%s: Invalid argument type, %s excepted"), "getMatrixOfWideString", _("string matrix"));
+         return sciErr;
+     }
  
      sciErr = getVarDimension(_pvCtx, _piAddress, _piRows, _piCols);
-     if(sciErr.iErr)
+     if (sciErr.iErr)
      {
          addErrorMessage(&sciErr, API_ERROR_GET_WIDE_STRING, _("%s: Unable to get argument #%d"), "getMatrixOfWideString", getRhsFromAddress(_pvCtx, _piAddress));
          return sciErr;
          return sciErr;
      }
  
 -    strSize = (*_piRows * *_piCols);
 -    piLenStrings      = (int*)MALLOC(sizeof(int) * strSize);
 -
 -    // get length UTF size
 -    sciErr = getMatrixOfString(_pvCtx, _piAddress, _piRows, _piCols, piLenStrings, pstStrings);
 -    if (sciErr.iErr)
 +    String *pS = ((InternalType*)_piAddress)->getAs<types::String>();
-     for(int i = 0 ; i < pS->getSize() ; i++)
++    for (int i = 0 ; i < pS->getSize() ; i++)
      {
 -        addErrorMessage(&sciErr, API_ERROR_GET_WIDE_STRING, _("%s: Unable to get argument #%d"), "getMatrixOfWideString", getRhsFromAddress(_pvCtx, _piAddress));
 -        if (piLenStrings)
 -        {
 -            FREE(piLenStrings);
 -            piLenStrings = NULL;
 -        }
 -        return sciErr;
 +        _piwLength[i] = (int)wcslen(pS->get(i));
      }
  
-     if(_pwstStrings == NULL || *_pwstStrings == NULL)
 -    pstStrings = (char**)MALLOC(sizeof(char*) * strSize);
 -
 -    for (int i = 0; i < strSize; i++)
++    if (_pwstStrings == NULL || *_pwstStrings == NULL)
      {
          return sciErr;
      }
  
-     for(int i = 0 ; i < pS->getSize() ; i++)
 -    for (int i = 0; i < (*_piRows * *_piCols); i++)
++    for (int i = 0 ; i < pS->getSize() ; i++)
      {
-         if(_pwstStrings[i] == NULL)
 -        wchar_t* wString = to_wide_string(pstStrings[i]);
 -        if (wString)
 -        {
 -            _piwLength[i] = (int)wcslen(wString);
 -            FREE(wString);
 -            wString = NULL;
 -        }
 -        else
++        if (_pwstStrings[i] == NULL)
          {
 -            _piwLength[i] = 0;
 -            addErrorMessage(&sciErr, API_ERROR_GET_WIDE_STRING, _("%s: Unable to convert to wide string #%d"), "getMatrixOfWideString", getRhsFromAddress(_pvCtx, _piAddress));
 -            if (piLenStrings)
 -            {
 -                FREE(piLenStrings);
 -                piLenStrings = NULL;
 -            }
 -            freeArrayOfString(pstStrings, strSize);
 +            addErrorMessage(&sciErr, API_ERROR_INVALID_SUBSTRING_POINTER, _("%s: Invalid argument address"), "getMatrixOfString");
              return sciErr;
          }
 -    }
 -
 -    if ( (_pwstStrings == NULL) || (*_pwstStrings == NULL) )
 -    {
 -        if (piLenStrings)
 -        {
 -            FREE(piLenStrings);
 -            piLenStrings = NULL;
 -        }
 -        freeArrayOfString(pstStrings, strSize);
 -        return sciErr;
 -    }
 -
 -    for (int i = 0; i < (*_piRows * *_piCols); i++)
 -    {
 -        if (pstStrings[i])
 -        {
 -            wchar_t *wcstring = to_wide_string(pstStrings[i]);
 -            if (wcstring)
 -            {
 -                if (_pwstStrings[i])
 -                {
 -                    wcscpy(_pwstStrings[i], wcstring);
 -                    _piwLength[i] = (int)wcslen(_pwstStrings[i]);
 -                }
 -                else
 -                {
 -                    _pwstStrings[i] = NULL;
 -                    _piwLength[i] = 0;
 -                }
 -                FREE(wcstring);
 -                wcstring = NULL;
 -            }
 -            else
 -            {
 -                // case to_wide_string fails
 -                _pwstStrings[i] = NULL;
 -                _piwLength[i] = 0;
 -                addErrorMessage(&sciErr, API_ERROR_GET_WIDE_STRING, _("%s: Unable to convert to wide string #%d"), "getMatrixOfWideString", getRhsFromAddress(_pvCtx, _piAddress));
 -                if (piLenStrings)
 -                {
 -                    FREE(piLenStrings);
 -                    piLenStrings = NULL;
 -                }
 -                freeArrayOfString(pstStrings, strSize);
 -                return sciErr;
 -            }
 -        }
 -        else
 -        {
 -            // case to_wide_string fails
 -            _pwstStrings[i] = NULL;
 -            _piwLength[i] = 0;
 -        }
 -    }
 -
 -    freeArrayOfString(pstStrings, strSize);
 -    if (piLenStrings)
 -    {
 -        FREE(piLenStrings);
 -        piLenStrings = NULL;
 +        wcscpy( _pwstStrings[i], pS->get(i));
      }
  
      return sciErr;
@@@ -741,18 -923,62 +780,32 @@@ int getAllocatedNamedMatrixOfWideString
  /*--------------------------------------------------------------------------*/
  int createSingleString(void* _pvCtx, int _iVar, const char* _pstStrings)
  {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
+     sciErr = createMatrixOfString(_pvCtx, _iVar, 1, 1,        &_pstStrings);
+     if (sciErr.iErr)
+     {
+         addErrorMessage(&sciErr, API_ERROR_CREATE_SINGLE_STRING, _("%s: Unable to get argument data"), "createSingleString");
+         printError(&sciErr, 0);
+         return sciErr.iErr;
+     }
+     return 0;
+ }
+ int allocSingleString(void* _pvCtx, int _iVar, int _iLen, const char** _pstStrings)
+ {
+     SciErr sciErr;
+     sciErr.iErr = 0;
+     sciErr.iMsgCount = 0;
 -    int iNewPos     = Top - Rhs + _iVar;
 -    int iAddr       = *Lstk(iNewPos);
 -    int iTotalLen   = 0;
 -    int* piAddr     = NULL;
 -    int* piOffset   = NULL;
 -    char* pstString = NULL;
 -
 -    int iFreeSpace = iadr(*Lstk(Bot)) - (iadr(*Lstk(Top)));
 -
 -    if (_iLen + 2 > iFreeSpace)
 -    {
 -        addStackSizeError(&sciErr, ((StrCtx*)_pvCtx)->pstName, _iLen + 2);
 -        return sciErr.iErr;
 -    }
 -
 -    getNewVarAddressFromPosition(_pvCtx, iNewPos, &piAddr);
 -
 -    piAddr[0]   = sci_strings;
 -    piAddr[1]   = 1;
 -    piAddr[2]   = 1;
 -    piAddr[3]   = 0;
 -
 -    piOffset    = piAddr + 4;
 -    piOffset[0] = 1; //Always 1
 -    piOffset[1] = _iLen + 1;
 -    pstString   = (char*)(piOffset + 2); //2 offsets
  
-       sciErr = createMatrixOfString(_pvCtx, _iVar, 1, 1,      &_pstStrings);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_SINGLE_STRING, _("%s: Unable to get argument data"), "createSingleString");
-               printError(&sciErr, 0);
-               return sciErr.iErr;
-       }
 -    // Fill the string with spaces
 -    memset(pstString, ' ', _iLen);
++    // FIX ME
  
-       return 0;
 -    updateInterSCI(_iVar, 'c', iAddr, cadr(iadr(iAddr) + 5 + 1));
 -    updateLstk(iNewPos, sadr(iadr(iAddr) + 5 + 1), (_iLen + 1) / (sizeof(double) / sizeof(int)));
 -    *_pstStrings = pstString;
+     return 0;
  }
  /*--------------------------------------------------------------------------*/
  int createSingleWideString(void* _pvCtx, int _iVar, const wchar_t* _pwstStrings)
  {
  /* Define to 1 if the X Window System is missing or not being used. */
  #undef X_DISPLAY_MISSING
  
 +/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
 +   `char[]'. */
 +#undef YYTEXT_POINTER
 +
+ /* Enable large inode numbers on Mac OS X 10.5.  */
+ #ifndef _DARWIN_USE_64_BIT_INODE
+ # define _DARWIN_USE_64_BIT_INODE 1
+ #endif
  /* Number of bits in a file offset, on hosts where this is settable. */
  #undef _FILE_OFFSET_BITS
  
@@@ -26,9 -25,8 +26,8 @@@ void disp_scilab_version(void)
  /* for compatibility */
  /* Deprecated */
  #define SCI_VERSION SCI_VERSION_STRING
 -#define DEFAULT_SCI_VERSION_MESSAGE "scilab-branch-gw_api"
 +#define DEFAULT_SCI_VERSION_MESSAGE L"scilab-branch-YaSp"
  
  #endif
  /*--------------------------------------------------------------------------*/
  
@@@ -26,9 -25,9 +26,8 @@@ void disp_scilab_version(void)
  /* for compatibility */
  /* Deprecated */
  #define SCI_VERSION SCI_VERSION_STRING
 -#define DEFAULT_SCI_VERSION_MESSAGE "scilab-branch-gw_api"
 -
 +#define DEFAULT_SCI_VERSION_MESSAGE L"scilab-branch-YaSp"
  
  #endif
  /*--------------------------------------------------------------------------*/
  
@@@ -2,76 -2,80 +2,80 @@@
  // Copyright (C) INRIA
  // Copyright (C) DIGITEO - 2009 - Allan CORNET
  // Copyright (C) 2012 - Samuel GOUGEON
--// 
++//
  // This file must be used under the terms of the CeCILL.
  // This source file is licensed as described in the file COPYING, which
  // you should have received as part of this distribution.  The terms
--// are also available at    
++// are also available at
  // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  
  //===========================================================
  function [y] = toolboxes(path)
- // INTERNAL macro should NOT used by users
- // toolboxes loading
- // path is a directory to explore for contribs
- //===========================================================
-   global %toolboxes
-   global %toolboxes_dir
- //===========================================================
-   [lhs,rhs] = argn(0) 
-   y = [];
-   if (rhs == 1) & typeof(path)=="constant" then 
-     // return string to exec
-     y = "exec(""" + %toolboxes_dir + %toolboxes(path) + filesep() + "loader.sce" + """);";
-     return 
-   end
+     // INTERNAL macro should NOT used by users
+     // toolboxes loading
+     // path is a directory to explore for contribs
+     //===========================================================
+     global %toolboxes
+     global %toolboxes_dir
+     //===========================================================
 -    [lhs,rhs] = argn(0) 
++    [lhs,rhs] = argn(0)
+     y = [];
 -    if (rhs == 1) & typeof(path)=="constant" then 
++    if (rhs == 1) & typeof(path)=="constant" then
+         // return string to exec
+         tmp = %toolboxes(path);
+         if part(tmp,1)=="!" then   // ATOMS module => Get the path
+             atomsMod = atomsGetInstalled();
+             tmp = strtok(tmp, ",") // Trims the part of the release numbers
+             Path = atomsMod(find(atomsMod(:,1)==part(tmp, 2:length(tmp))),4);
+         else
+             Path = %toolboxes_dir + tmp;
+         end
 -        y = 'exec(""" + pathconvert(Path) + filesep() + "loader.sce" + """);';
 -        return 
++        y = "exec(""" + %toolboxes_dir + %toolboxes(path) + filesep() + "loader.sce" + """);";
++        return
+     end
  
- // Non ATOMS modules
-   if rhs == 0 then 
-     path = SCI + filesep() + 'contrib';
-   end
-   
-   cur_wd = pwd();
-   chdir(path);
-   files = listfiles('.');
-   contribs = [];
-   for k = 1:size(files,'*') 
-     if isfile(files(k)+'/loader.sce') then 
-       contribs = [contribs ; files(k)];
+     // Non ATOMS modules
 -    if rhs == 0 then 
++    if rhs == 0 then
+         path = SCI + filesep() + 'contrib';
+     end
+     cur_wd = pwd();
+     chdir(path);
+     files = listfiles('.');
+     contribs = [];
 -    for k = 1:size(files,'*') 
 -        if isfile(files(k)+'/loader.sce') then 
++    for k = 1:size(files,'*')
++        if isfile(files(k)+'/loader.sce') then
+             contribs = [contribs ; files(k)];
+         end
      end
  
      // ATOMS modules without autoloading
      installed   = atomsGetInstalled()
--    autoloading = atomsAutoloadList() 
++    autoloading = atomsAutoloadList()
      for i = 1:size(installed,1)
-          if and(installed(i,1)~=autoloading(:,1)) then
-               tmpath = installed(i,4)+filesep()+"loader.sce"
-               if isfile(tmpath) then 
-                    contribs = [contribs ; installed(i,1)+filesep()+installed(i,2)]
-               end
-          end
+         if and(installed(i,1)~=autoloading(:,1)) then
+             tmpath = installed(i,4)+filesep()+"loader.sce"
 -            if isfile(tmpath) then 
++            if isfile(tmpath) then
+                 contribs = [contribs ; "!"+installed(i,1)+","+installed(i,2)]
+                 // "!" => the path must be got from atomsGetInstalled
+             end
+         end
      end
  
-   if (contribs <> []) & (getscilabmode() == 'STD') then 
-     delmenu(gettext("&Toolboxes"));
-     h = uimenu("parent", 0, "label", gettext("&Toolboxes"));
-     for k=1:size(contribs,'*')
-       m = uimenu(h,'label', string(contribs(k)), 'callback','execstr(toolboxes('+string(k)+'))');
 -    if (contribs <> []) & (getscilabmode() == 'STD') then 
++    if (contribs <> []) & (getscilabmode() == 'STD') then
+         delmenu(gettext("&Toolboxes"));
+         h = uimenu("parent", 0, "label", gettext("&Toolboxes"));
+         for k=1:size(contribs,'*')
+             tmp = strsubst(contribs(k),","," ");
+             tmp = strsubst(tmp,"!","");
+             m = uimenu(h,'label', tmp, 'callback','execstr(toolboxes('+msprintf("%d",k)+'))');
+         end
+         unsetmenu(gettext("&Toolboxes"));
      end
-     unsetmenu(gettext("&Toolboxes"));
-   end
-   
-   %toolboxes = contribs;
-   %toolboxes_dir = pathconvert(path);
-   chdir(cur_wd);
-   
- endfunction
- //===========================================================
  
+     %toolboxes = contribs;
+     %toolboxes_dir = pathconvert(path);
+     chdir(cur_wd);
  
+ endfunction
+ //===========================================================
@@@ -95,13 -95,13 +95,13 @@@ static OpTab Interfaces[INTERFACES_MAX
      /* 56  */ {gw_dynamic_spreadsheet},
      /* 57  */ {gw_dynamic_graphic_export},
      /* 58  */ {gw_dynamic_umfpack},
 -    /* 59  */ {gw_dynamic_matio},
 -    /* 60  */ {gw_dynamic_helptools},
 +    /* 59  */ {NULL}, //gw_dynamic_matio
 +    /* 60  */ {NULL}, //gw_dynamic_helptools
      /* 61  */ {gw_call_scilab},
-     /* 62  */ {NULL}, //gw_dynamic_hdf5
 -    /* 62  */ {gw_hdf5},
 -    /* 63  */ {gw_dynamic_scinotes},
++    /* 62  */ {NULL}, //gw_hdf5
 +    /* 63  */ {NULL}, //gw_dynamic_scinotes
      /* 64  */ {gw_dynamic_xcos},
 -    /* 65  */ {gw_dynamic_action_binding},
 +    /* 65  */ {NULL}, //gw_dynamic_action_binding
      /* 66  */ {gw_dynamic_parallel},
      /* 67  */ {gw_dynamic_ui_data},
      /* 68  */ {gw_dynamic_xml},
@@@ -604,4 -604,4 +607,4 @@@ cd .
    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
    <ImportGroup Label="ExtensionTargets">
    </ImportGroup>
--</Project>
++</Project>
@@@ -146,9 -266,35 +146,21 @@@ static char* gatewayname_xcos = NULL
  /*--------------------------------------------------------------------------*/
  int gw_dynamic_xcos(void)
  {
 -    return gw_dynamic_generic(XCOS_MODULE_NAME,
 -                              &dynlibname_xcos,
 -                              &gatewayname_xcos,
 -                              &hXcosLib,
 -                              &ptr_gw_xcos);
 +    return 0;
  }
  /*--------------------------------------------------------------------------*/
+ /* scinotes module */
+ #define SCINOTES_MODULE_NAME "scinotes"
+ static DynLibHandle hSciNotesLib = NULL;
+ static PROC_GATEWAY ptr_gw_scinotes = NULL;
+ static char* dynlibname_scinotes = NULL;
+ static char* gatewayname_scinotes = NULL;
+ /*--------------------------------------------------------------------------*/
+ int gw_dynamic_scinotes(void)
+ {
 -#ifdef _MSC_VER
 -    if (dynlibname_scinotes == NULL)
 -    {
 -        dynlibname_scinotes = buildModuleDynLibraryName(SCINOTES_MODULE_NAME, DYNLIB_NAME_FORMAT_2);
 -    }
 -#endif
 -    return gw_dynamic_generic(SCINOTES_MODULE_NAME,
 -                              &dynlibname_scinotes,
 -                              &gatewayname_scinotes,
 -                              &hSciNotesLib,
 -                              &ptr_gw_scinotes);
++    return 0;
+ }
+ /*--------------------------------------------------------------------------*/
  /* graphic_exports module */
  #define GRAPHIC_EXPORT_MODULE_NAME "graphic_export"
  static DynLibHandle hGraphic_exportLib = NULL;
@@@ -235,6 -451,131 +247,7 @@@ int gw_dynamic_external_objects(void
  /*--------------------------------------------------------------------------*/
  void freeAllDynamicGateways(void)
  {
 -    freeDynamicGateway(&dynlibname_special_functions,
 -                       &gatewayname_special_functions,
 -                       &hSpecial_functionsLib,
 -                       &ptr_gw_special_functions);
 -
 -    freeDynamicGateway(&dynlibname_helptools,
 -                       &gatewayname_helptools,
 -                       &hHelptoolsLib,
 -                       &ptr_gw_helptools);
 -
 -    freeDynamicGateway(&dynlibname_optimization,
 -                       &gatewayname_optimization,
 -                       &hOptimizationLib,
 -                       &ptr_gw_optimization);
 -
 -    freeDynamicGateway(&dynlibname_matio,
 -                       &gatewayname_matio, &hMatioLib,
 -                       &ptr_gw_matio);
 -
 -    freeDynamicGateway(&dynlibname_umfpack,
 -                       &gatewayname_umfpack,
 -                       &hUmfpackLib,
 -                       &ptr_gw_umfpack);
 -
 -    freeDynamicGateway(&dynlibname_spreadsheet,
 -                       &gatewayname_spreadsheet,
 -                       &hSpreadsheetLib,
 -                       &ptr_gw_spreadsheet);
 -
 -    freeDynamicGateway(&dynlibname_sound,
 -                       &gatewayname_sound,
 -                       &hSoundLib,
 -                       &ptr_gw_sound);
 -
 -    freeDynamicGateway(&dynlibname_scicos,
 -                       &gatewayname_scicos,
 -                       &hScicosLib,
 -                       &ptr_gw_scicos);
 -
 -    freeDynamicGateway(&dynlibname_randlib,
 -                       &gatewayname_randlib,
 -                       &hRandlibLib,
 -                       &ptr_gw_randlib);
 -
 -    freeDynamicGateway(&dynlibname_arnoldi,
 -                       &gatewayname_arnoldi,
 -                       &hArnoldiLib,
 -                       &ptr_gw_arnoldi);
 -
 -    freeDynamicGateway(&dynlibname_symbolic,
 -                       &gatewayname_symbolic,
 -                       &hSymbolicLib,
 -                       &ptr_gw_symbolic);
 -
 -    freeDynamicGateway(&dynlibname_interpolation,
 -                       &gatewayname_interpolation,
 -                       &hInterpolationLib,
 -                       &ptr_gw_interpolation);
 -
 -    freeDynamicGateway(&dynlibname_statistics,
 -                       &gatewayname_statistics,
 -                       &hStatisticsLib,
 -                       &ptr_gw_statistics);
 -
 -    freeDynamicGateway(&dynlibname_signal_processing,
 -                       &gatewayname_signal_processing,
 -                       &hSignal_processingLib,
 -                       &ptr_gw_signal_processing);
 -
 -    freeDynamicGateway(&dynlibname_functions,
 -                       &gatewayname_functions,
 -                       &hFunctionsLib,
 -                       &ptr_gw_functions);
 -
 -    freeDynamicGateway(&dynlibname_xcos,
 -                       &gatewayname_xcos,
 -                       &hXcosLib,
 -                       &ptr_gw_xcos);
 -
 -    freeDynamicGateway(&dynlibname_scinotes,
 -                       &gatewayname_scinotes,
 -                       &hSciNotesLib,
 -                       &ptr_gw_scinotes);
 -
 -    freeDynamicGateway(&dynlibname_graphic_export,
 -                       &gatewayname_graphic_export,
 -                       &hGraphic_exportLib,
 -                       &ptr_gw_graphic_export);
 -
 -    freeDynamicGateway(&dynlibname_action_binding,
 -                       &gatewayname_action_binding,
 -                       &hAction_bindingLib,
 -                       &ptr_gw_action_binding);
 -
 -    dynTerminateParallel();
 -
 -    freeDynamicGateway(&dynlibname_ui_data,
 -                       &gatewayname_ui_data,
 -                       &hUi_dataLib,
 -                       &ptr_gw_ui_data);
 -
 -    freeDynamicGateway(&dynlibname_preferences,
 -                       &gatewayname_preferences,
 -                       &hPreferencesLib,
 -                       &ptr_gw_preferences);
 -
 -    freeDynamicGateway(&dynlibname_xml,
 -                       &gatewayname_xml,
 -                       &hXmlLib,
 -                       &ptr_gw_xml);
 -
 -    freeDynamicGateway(&dynlibname_graphic_objects,
 -                       &gatewayname_graphic_objects,
 -                       &hGraphic_objectsLib,
 -                       &ptr_gw_graphic_objects);
 -
 -    freeDynamicGateway(&dynlibname_history_browser,
 -                       &gatewayname_history_browser,
 -                       &hHistory_browserLib,
 -                       &ptr_gw_history_browser);
 -    freeDynamicGateway(&dynlibname_external_objects,
 -                       &gatewayname_external_objects,
 -                       &hExternal_ObjectsLib,
 -                       &ptr_gw_external_objects);
  }
  /*--------------------------------------------------------------------------*/
  
   *
   */
  #include "xscion.h"
 -#include "scilabmode.h"
 +#include "sci_mode.h"
- /*--------------------------------------------------------------------------*/ 
+ /*--------------------------------------------------------------------------*/
  int C2F(xscion) (int *i)
  {
-   if ( getScilabMode() == SCILAB_STD) *i=1;
-   else *i=0;
-   return 0;
+     if (getScilabMode() == SCILAB_STD)
+     {
+         *i = 1;
+     }
+     else
+     {
+         *i = 0;
+     }
+     return 0;
  }
- /*--------------------------------------------------------------------------*/ 
+ /*--------------------------------------------------------------------------*/
  int getINXscilab(void)
  {
-       return getScilabMode() == SCILAB_STD;
+     return getScilabMode() == SCILAB_STD;
  }
- /*--------------------------------------------------------------------------*/ 
+ /*--------------------------------------------------------------------------*/
Simple merge
Simple merge
Simple merge
@@@ -1,11 -1,11 +1,11 @@@
  /*
   * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
   * Copyright (C) 2006 - INRIA - Allan CORNET
-- * 
++ *
   * This file must be used under the terms of the CeCILL.
   * This source file is licensed as described in the file COPYING, which
   * you should have received as part of this distribution.  The terms
-- * are also available at    
++ * are also available at
   * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
   *
   */
  #include "dynlib_fftw.h"
  /*--------------------------------------------------------------------------*/
  FTTW_SCILAB_IMPEXP int gw_fftw(void);
--FTTW_SCILAB_IMPEXP int sci_disposefftwlibrary(char *fname,unsigned long fname_len);
 -FTTW_SCILAB_IMPEXP int sci_fftw(char *fname,unsigned long fname_len);
 -FTTW_SCILAB_IMPEXP int sci_fftw_flags(char *fname,unsigned long fname_len);
 -FTTW_SCILAB_IMPEXP int sci_fftw_forget_wisdom(char *fname,unsigned long fname_len);
 -FTTW_SCILAB_IMPEXP int sci_fftwlibraryisloaded(char *fname,unsigned long fname_len);
 -FTTW_SCILAB_IMPEXP int sci_get_fftw_wisdom(char *fname,unsigned long fname_len);
 -FTTW_SCILAB_IMPEXP int sci_loadfftwlibrary(char *fname,unsigned long fname_len);
 -FTTW_SCILAB_IMPEXP int sci_set_fftw_wisdom(char *fname,unsigned long fname_len);
 -FTTW_SCILAB_IMPEXP int sci_dct(char *fname,unsigned long fname_len);
 -FTTW_SCILAB_IMPEXP int sci_dst(char *fname,unsigned long fname_len);
++FTTW_SCILAB_IMPEXP int sci_disposefftwlibrary(char *fname, void* pvApiCtx);
 +FTTW_SCILAB_IMPEXP int sci_fftw(char *fname, void *pvApiCtx);
- FTTW_SCILAB_IMPEXP int sci_fftw_flags(char *fname,unsigned long fname_len);
- FTTW_SCILAB_IMPEXP int sci_fftw_forget_wisdom(char *fname,unsigned long fname_len);
- FTTW_SCILAB_IMPEXP int sci_fftwlibraryisloaded(char *fname,unsigned long fname_len);
- FTTW_SCILAB_IMPEXP int sci_get_fftw_wisdom(char *fname,unsigned long fname_len);
- FTTW_SCILAB_IMPEXP int sci_loadfftwlibrary(char *fname,unsigned long fname_len);
- FTTW_SCILAB_IMPEXP int sci_set_fftw_wisdom(char *fname,unsigned long fname_len);
++FTTW_SCILAB_IMPEXP int sci_fftw_flags(char *fname, void* pvApiCtx);
++FTTW_SCILAB_IMPEXP int sci_fftw_forget_wisdom(char *fname, void* pvApiCtx);
++FTTW_SCILAB_IMPEXP int sci_fftwlibraryisloaded(char *fname, void* pvApiCtx);
++FTTW_SCILAB_IMPEXP int sci_get_fftw_wisdom(char *fname, void* pvApiCtx);
++FTTW_SCILAB_IMPEXP int sci_loadfftwlibrary(char *fname, void* pvApiCtx);
++FTTW_SCILAB_IMPEXP int sci_set_fftw_wisdom(char *fname, void* pvApiCtx);
++FTTW_SCILAB_IMPEXP int sci_dct(char *fname, void* pvApiCtx);
++FTTW_SCILAB_IMPEXP int sci_dst(char *fname, void* pvApiCtx);
  /*--------------------------------------------------------------------------*/
  #endif /*  __GW_FFTW__ */
  /*--------------------------------------------------------------------------*/
@@@ -29,11 -29,44 +29,13 @@@ static gw_generic_table Tab[] 
  { sci_fftw_flags,"fftw_flags"},
  { sci_get_fftw_wisdom,"get_fftw_wisdom"},
  { sci_set_fftw_wisdom,"set_fftw_wisdom"},
- { sci_fftw_forget_wisdom,"fftw_forget_wisdom"}
+ { sci_fftw_forget_wisdom,"fftw_forget_wisdom"},
+ { sci_dct,"dct"},
+ { sci_dst,"dst"}
  };
 -/*--------------------------------------------------------------------------*/ 
 +/*--------------------------------------------------------------------------*/
  int gw_fftw(void)
 -{  
 -      Rhs = Max(0, Rhs);
 -
 -      if (Fin > 3) /* loadfftwlibrary, disposefftwlibrary, fftwlibraryisloaded not test if dll is loaded*/
 -      {
 -              if (!IsLoadedFFTW())
 -              {
 -                      char *fftwlibNAME = getfftwlibname();
 -
 -                      if (fftwlibNAME)
 -                      {
 -                              Scierror(999,_("FFTW Library %s not found.\n"),fftwlibNAME);
 -                      }
 -                      else
 -                      {
 -                              Scierror(999,_("FFTW Library not found.\n"));
 -                      }
 -                      
 -                      if (fftwlibNAME) {FREE(fftwlibNAME); fftwlibNAME=NULL;}
 -                      
 -                      return 0;
 -              }
 -      }
 -
 -      if(pvApiCtx == NULL)
 -      {
 -              pvApiCtx = (StrCtx*)MALLOC(sizeof(StrCtx));
 -      }
 -
 -      pvApiCtx->pstName = (char*)Tab[Fin-1].name;
 -      callFunctionFromGateway(Tab,SIZE_CURRENT_GENERIC_TABLE(Tab));
 -
 +{
        return 0;
  }
 -/*--------------------------------------------------------------------------*/ 
 +/*--------------------------------------------------------------------------*/
index 0000000,b3eb5c6..5e219d9
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,1101 +1,1197 @@@
+ /*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2012 - INRIA - Serge STEER
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+ /*--------------------------------------------------------------------------*/
 -#include "stack-c.h"
+ #include "fftw_utilities.h"
+ #include "sci_data_utilities.h"
+ #include "callfftw.h"
+ #include "MALLOC.h"
+ #include "gw_fftw.h"
+ #include "api_scilab.h"
+ #include "localization.h"
+ #include "Scierror.h"
+ #include "BOOL.h"
+ #include "sci_data_utilities.h"
+ /*--------------------------------------------------------------------------*/
+ extern void C2F(dscal)(int *n, double *da, double *dx, int *incx); /* blas routine */
+ extern void C2F(dset)(int *n, double *da, double *dx, int *incx); /* blas routine */
+ /*--------------------------------------------------------------------------*/
 -static int sci_dct_gen(void* _pvCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, guru_dim_struct gdim, int iopt);
 -static int sci_dct_2args(void* _pvCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt);
 -static int sci_dct_3args(void* _pvCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt);
 -static int sci_dct_4args(void* _pvCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt);
++static int sci_dct_gen(void* pvApiCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, guru_dim_struct gdim, int iopt);
++static int sci_dct_2args(void* pvApiCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt);
++static int sci_dct_3args(void* pvApiCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt);
++static int sci_dct_4args(void* pvApiCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt);
+ /*--------------------------------------------------------------------------*/
+ extern int WITHMKL;
+ /* fftw function.
+ *
+ * Scilab Calling sequence :
+ *   dct(A )
+ *   dct(A,sign )
+ *   dct(A,sel,sign )
+ *   dct(A,sign,dim,incr )
+ *
+ * Input : A : a scilab double complex or real vector, matrix or hypermatrix
+ *
+ *         sign : a scilab double or integer scalar (-1 or 1): the sign
+ *                  in the exponential component
+ *
+ *         sel : a scilab double or integer vector, the selection of dimensions
+ *         dim : a scilab double or integer vector: the dimensions
+ *                  of the Fast Fourier Transform to perform
+ *
+ *         incr : a scilab double or integer vector: the increments
+ *                  of the Fast Fourier Transform to perform
+ *
+ * Output : a scilab double complex or real array with same shape as A that
+ *          gives the result of the transform.
+ *
+ */
 -int sci_dct(char *fname, unsigned long fname_len)
++int sci_dct(char *fname,  void* pvApiCtx)
+ {
+     SciErr sciErr;
+     int *piAddr = NULL;
+     int rhs = Rhs;
+     int iTypeOne = 0;
+     int iopt = 0;
+     int ndimsA = 0;
+     int *dimsA = NULL;
+     double *Ar = NULL, *Ai = NULL;
+     char *option = NULL;
+     int isn = FFTW_FORWARD;
+     WITHMKL = withMKL();
+     /****************************************
+     * Basic constraints on rhs arguments  *
+     ****************************************/
+     /* check min/max lhs/rhs arguments of scilab function */
+     CheckRhs(1, 4);
+     CheckLhs(1, 1);
+     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
+     if (sciErr.iErr)
+     {
+         printError(&sciErr, 0);
+         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
+         return 0;
+     }
+     sciErr = getVarType(pvApiCtx, piAddr, &iTypeOne);
+     if (sciErr.iErr)
+     {
+         printError(&sciErr, 0);
+         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
+         return 0;
+     }
+     if ((iTypeOne == sci_list) || (iTypeOne == sci_tlist))
+     {
+         OverLoad(1);
+         return 0;
+     }
+     if (iTypeOne == sci_mlist)
+     {
+         /* We allow overload for not hypermatrix type */
+         if (!isHyperMatrixMlist(pvApiCtx, piAddr))
+         {
+             OverLoad(1);
+             return 0;
+         }
+     }
+     /* checking if last argument is a potential option argument (character string) */
+     sciErr = getVarAddressFromPosition(pvApiCtx, Rhs, &piAddr);
+     if (sciErr.iErr)
+     {
+         printError(&sciErr, 0);
+         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, Rhs);
+         return 0;
+     }
+     if (isStringType(pvApiCtx, piAddr))   /*  dct(...,option); */
+     {
+         if (isScalar(pvApiCtx, piAddr))
+         {
+             if (getAllocatedSingleString(pvApiCtx, piAddr, &option) == 0)
+             {
+                 rhs = Rhs - 1;
+             }
+             else
+             {
+                 Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
+                 return 0;
+             }
+         }
+     }
+     /********************  Checking if isn is given  ************************************************/
+     if (rhs == 1)  /*only one rhs argument: forward dct*/
+     {
+         isn = FFTW_FORWARD; /* default value */
+     }
+     else   /*get isn out of second argument*/
+     {
+         sciErr = getScalarIntArg(pvApiCtx, 2, fname, &isn);
+         if (sciErr.iErr)
+         {
+             Scierror(sciErr.iErr, getErrorMessage(sciErr));
+             return 0;
+         }
+         /* check value of second rhs argument */
+         if ((isn !=  FFTW_FORWARD) && (isn !=  FFTW_BACKWARD))
+         {
+             Scierror(53, _("%s: Wrong value for input argument #%d: %d or %d expected.\n"), fname, 2, FFTW_FORWARD, FFTW_BACKWARD);
+             return 0;
+         }
+     }
+     if (option != NULL)
 -      {
 -        if (isn== FFTW_FORWARD)
 -          {
 -            if (strcmp("dct1", option) == 0)  iopt = 1;
 -            else if (strcmp("dct2", option) == 0)  iopt = 2;
 -            else if (strcmp("dct", option) == 0)   iopt = 0;
 -            else if (strcmp("dct4", option) == 0)  iopt = 4;
++    {
++        if (isn == FFTW_FORWARD)
++        {
++            if (strcmp("dct1", option) == 0)
++            {
++                iopt = 1;
++            }
++            else if (strcmp("dct2", option) == 0)
++            {
++                iopt = 2;
++            }
++            else if (strcmp("dct", option) == 0)
++            {
++                iopt = 0;
++            }
++            else if (strcmp("dct4", option) == 0)
++            {
++                iopt = 4;
++            }
+             else
 -              {
++            {
+                 Scierror(999, _("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"), fname, Rhs,
+                          "\"dct\", \"dct1\",\"dct2\",\"dct4\"");
+                 freeAllocatedSingleString(option);
+                 option = NULL;
+                 return 0;
 -              }
 -          }
 -        else {
 -            if (strcmp("dct1", option) == 0)  iopt = 1;
 -            else if (strcmp("dct3", option) == 0)  iopt = 3;
 -            else if (strcmp("idct", option) == 0)  iopt = 0;
 -            else if (strcmp("dct4", option) == 0)  iopt = 4;
++            }
++        }
++        else
++        {
++            if (strcmp("dct1", option) == 0)
++            {
++                iopt = 1;
++            }
++            else if (strcmp("dct3", option) == 0)
++            {
++                iopt = 3;
++            }
++            else if (strcmp("idct", option) == 0)
++            {
++                iopt = 0;
++            }
++            else if (strcmp("dct4", option) == 0)
++            {
++                iopt = 4;
++            }
+             else
 -              {
++            {
+                 Scierror(999, _("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"), fname, Rhs,
+                          "\"idct\", \"dct1\",\"dct3\",\"dct4\"");
+                 freeAllocatedSingleString(option);
+                 option = NULL;
+                 return 0;
 -              }
++            }
+         }
+         freeAllocatedSingleString(option);
+         option = NULL;
+     }
+     /********************  getting the array A      ************************************************/
+     getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
+     if (!getArrayOfDouble(pvApiCtx, piAddr, &ndimsA, &dimsA, &Ar, &Ai))
+     {
+         Scierror(999, _("%s: Wrong type for argument #%d: Array of floating point numbers expected.\n"),
+                  fname, 1);
+         return 0;
+     }
+     /********************  Select proper method     ************************************************/
+     if (rhs < 3)
+     {
+         /* dct(A ,sign)*/
 -      sci_dct_2args(pvApiCtx, fname, ndimsA, dimsA, Ar, Ai, isn, iopt);
++        sci_dct_2args(pvApiCtx, fname, ndimsA, dimsA, Ar, Ai, isn, iopt);
+     }
+     else if (rhs == 3)
+     {
+         /* dct(A ,sign ,sel)*/
+         sci_dct_3args(pvApiCtx, fname, ndimsA, dimsA, Ar, Ai, isn, iopt);
+     }
+     else if (rhs == 4)
+     {
+         /* dct(A ,sign ,dim,incr)*/
+         sci_dct_4args(pvApiCtx, fname, ndimsA, dimsA, Ar, Ai, isn, iopt);
+     }
+     return 0;
+ }
 -int sci_dct_2args(void* _pvCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt)
++int sci_dct_2args(void* pvApiCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt)
+ {
+     /*FFTW specific library variable */
+     guru_dim_struct gdim = {0, NULL, 0, NULL};
+     /* local variable */
+     int ndims = 0; /* number of non singleton dimensions */
+     int first_nonsingleton = -1;
+     int i = 0, j = 0;
+     int prd = 1;
+     /* ignore singleton dimensions */
+     first_nonsingleton = -1;
+     ndims = 0;
+     for (i = 0; i < ndimsA; i++)
+     {
+         if (dimsA[i] > 1)
+         {
+             ndims++;
 -            if (first_nonsingleton < 0) first_nonsingleton = i;
++            if (first_nonsingleton < 0)
++            {
++                first_nonsingleton = i;
++            }
+         }
+     }
+     /* void or scalar input gives void output or scalar*/
+     if (ndims == 0 )
+     {
 -        AssignOutputVariable(_pvCtx, 1) =  1;
 -        ReturnArguments(_pvCtx);
++        AssignOutputVariable(pvApiCtx, 1) =  1;
++        ReturnArguments(pvApiCtx);
+         return 0;
+     }
+     gdim.rank = ndims;
+     if ((gdim.dims = (fftw_iodim *)MALLOC(sizeof(fftw_iodim) * gdim.rank)) == NULL)
+     {
+         Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     j = 0;
+     prd = 1;
+     for (i = (first_nonsingleton); i < ndimsA; i++)
+     {
+         if (dimsA[i] > 1)
+         {
+             gdim.dims[j].n = dimsA[i];
+             gdim.dims[j].is = prd;
+             gdim.dims[j].os = prd;
+             prd *= dimsA[i];
+             j++;
+         }
+     }
+     gdim.howmany_rank = 0;
+     gdim.howmany_dims = NULL;
 -    if (!sci_dct_gen(_pvCtx, fname, ndimsA, dimsA,  Ar,  Ai, isn, gdim,iopt))
++    if (!sci_dct_gen(pvApiCtx, fname, ndimsA, dimsA,  Ar,  Ai, isn, gdim, iopt))
+     {
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     /***********************************
+     * Return results in lhs argument *
+     ***********************************/
 -    ReturnArguments(_pvCtx);
++    ReturnArguments(pvApiCtx);
+     FREE(gdim.dims);
+     FREE(gdim.howmany_dims);
+     return 0;
+ }
 -int  sci_dct_3args(void* _pvCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt)
++int  sci_dct_3args(void* pvApiCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt)
+ {
+     /* API variables */
+     SciErr sciErr;
+     int *piAddr = NULL;
+     int *Sel = NULL;
+     int rank = 0;
+     /*FFTW specific library variable */
+     guru_dim_struct gdim = {0, NULL, 0, NULL};
+     /* local variable */
+     int ndims = 0;
+     int first_nonsingleton = -1;
+     int ih = 0;
+     int pd = 1; /* used to store prod(Dims(1:sel(k-1)))*/
+     int pds = 1; /* used to store prod(Dims(sel(k-1):sel(k)))*/
+     int i = 0, j = 0;
+     /* ignore singleton dimensions */
+     first_nonsingleton = -1;
+     ndims = 0;
+     for (i = 0; i < ndimsA; i++)
+     {
+         if (dimsA[i] > 1)
+         {
+             ndims++;
 -            if (first_nonsingleton < 0) first_nonsingleton = i;
++            if (first_nonsingleton < 0)
++            {
++                first_nonsingleton = i;
++            }
+         }
+     }
+     /* void or scalar input gives void output or scalar*/
+     if (ndims == 0 )
+     {
 -        AssignOutputVariable(_pvCtx, 1) =  1;
 -        ReturnArguments(_pvCtx);
++        AssignOutputVariable(pvApiCtx, 1) =  1;
++        ReturnArguments(pvApiCtx);
+         return 0;
+     }
+     /******************** get and check third argument (sel) ****************************************/
+     getVarAddressFromPosition(pvApiCtx, 3, &piAddr);
+     if (isVarMatrixType(pvApiCtx, piAddr) == 0)
+     {
+         Scierror(999, _("%s: Wrong type for input argument #%d.\n"), fname, 3);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     sciErr = getVectorIntArg(pvApiCtx, 3, fname, &rank, &Sel);
+     if (sciErr.iErr)
+     {
+         Scierror(sciErr.iErr, getErrorMessage(sciErr));
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     /* size of Sel must be less than ndimsA */
+     if (rank <= 0 || rank >= ndimsA)
+     {
+         Scierror(999, _("%s: Wrong size for input argument #%d: Must be between %d and %d.\n"), fname, 3, 1, ndimsA - 1);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     /* check values of Sel[i] */
+     for (i = 0; i < rank; i++)
+     {
+         if (Sel[i] <= 0)
+         {
+             Scierror(999, _("%s: Wrong values for input argument #%d: Positive integers expected.\n"), fname, 3);
+             FREE(gdim.dims);
+             FREE(gdim.howmany_dims);
+             return 0;
+         }
+         if (Sel[i] > ndimsA)
+         {
+             Scierror(999, _("%s: Wrong values for input argument #%d: Elements must be less than %d.\n"), fname, 3, ndimsA);
+             FREE(gdim.dims);
+             FREE(gdim.howmany_dims);
+             return 0;
+         }
+         if (i > 0 && Sel[i] <= Sel[i - 1])
+         {
+             Scierror(999, _("%s: Wrong values for input argument #%d: Elements must be in increasing order.\n"), fname, 3);
+             FREE(gdim.dims);
+             FREE(gdim.howmany_dims);
+             return 0;
+         }
+     }
+     /* Create  gdim struct */
+     gdim.rank = rank;
+     if ((gdim.dims = (fftw_iodim *)MALLOC(sizeof(fftw_iodim) * gdim.rank)) == NULL)
+     {
+         Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     pd = 1; /* used to store prod(Dims(1:sel(k-1)))*/
+     pds = 1; /* used to store prod(Dims(sel(k-1):sel(k)))*/
+     j = 0;
+     for (i = 0; i < ndimsA; i++)
+     {
 -        if (j >= gdim.rank) break;
++        if (j >= gdim.rank)
++        {
++            break;
++        }
+         if (Sel[j] == i + 1)
+         {
+             gdim.dims[j].n = dimsA[i];
+             gdim.dims[j].is = pd;
+             gdim.dims[j].os = pd;
+             j++;
+         }
+         pd *= dimsA[i];
+     }
+     /* Compute howmany_rank based on jumps in the Sel sequence */
+     gdim.howmany_rank = 0;
 -    if ((Sel[0] != 1) && (Sel[0] != ndimsA)) gdim.howmany_rank++;
++    if ((Sel[0] != 1) && (Sel[0] != ndimsA))
++    {
++        gdim.howmany_rank++;
++    }
+     for (i = 1; i <= rank - 1; i++)
 -      {
 -        if (Sel[i] != Sel[i-1] + 1)
 -          {
++    {
++        if (Sel[i] != Sel[i - 1] + 1)
++        {
+             /*check if all dimensions between Sel[i-1]+1 and Sel[i]-1 are
+               equal to one, in this case they can be ignored and there is
+               no jump*/
+             for (j = Sel[i - 1] + 1; j <= Sel[i] - 1; j++)
 -              {
++            {
+                 if (dimsA[j - 1] != 1)
 -                  {
++                {
+                     gdim.howmany_rank++;
+                     break;
 -                  }
 -              }
 -          }
 -      }
++                }
++            }
++        }
++    }
 -    if ((Sel[rank - 1] != ndimsA) || (rank == 1)) gdim.howmany_rank++;
++    if ((Sel[rank - 1] != ndimsA) || (rank == 1))
++    {
++        gdim.howmany_rank++;
++    }
+     /* Fill the howmany_dims struct */
+     if (gdim.howmany_rank > 0)
+     {
+         /* it must be the case */
+         if ((gdim.howmany_dims = (fftw_iodim *)MALLOC(gdim.howmany_rank * sizeof(fftw_iodim))) == NULL)
+         {
+             Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
+             FREE(gdim.dims);
+             FREE(gdim.howmany_dims);
+             return 0;
+         }
+         pd = 1;
 -        for (j = 1; j <= (Sel[0] - 1); j++) pd *= dimsA[j - 1]; /*prod(Dims(1:(sel(1)-1)))*/
++        for (j = 1; j <= (Sel[0] - 1); j++)
++        {
++            pd *= dimsA[j - 1];    /*prod(Dims(1:(sel(1)-1)))*/
++        }
+         ih = 0;
+         if ((Sel[0] != 1) && (Sel[0] != ndimsA))
+         {
+             /* First seleted dimension */
+             gdim.howmany_dims[ih].is = 1;
+             gdim.howmany_dims[ih].os = 1;
+             gdim.howmany_dims[ih].n = pd;
+             ih++;
+         }
+         pd *= dimsA[Sel[0] - 1]; /*prod(Dims(1:sel(1)))*/
 -        for (i = 1; i <= rank -1; i++)
 -          {
++        for (i = 1; i <= rank - 1; i++)
++        {
+             /* intermediate selected dimensions */
+             if (Sel[i] != Sel[i - 1] + 1)
 -              {
++            {
+                 pds = 1;
 -                for (j = (Sel[i - 1] + 1); j <= (Sel[i] - 1); j++) pds *= dimsA[j - 1]; /*prod(Dims(sel(i-1)+1:(sel(i)-1)))*/
++                for (j = (Sel[i - 1] + 1); j <= (Sel[i] - 1); j++)
++                {
++                    pds *= dimsA[j - 1];    /*prod(Dims(sel(i-1)+1:(sel(i)-1)))*/
++                }
+                 /*check again if all dimensions between Sel[i-1]+1 and
+                   Sel[i]-1 are equal to one, in this case they can be
+                   ignored and there is no jump*/
+                 for (j = (Sel[i - 1] + 1); j <= (Sel[i] - 1); j++)
 -                  {
++                {
+                     if (dimsA[j - 1] != 1)
 -                      {
++                    {
+                         gdim.howmany_dims[ih].is = pd;
+                         gdim.howmany_dims[ih].os = pd;
+                         gdim.howmany_dims[ih].n = pds;
+                         ih++;
+                         break;
 -                      }
 -                  }
 -              }
++                    }
++                }
++            }
+             pd *= pds * dimsA[Sel[i] - 1]; /*prod(Dims(1:sel(i)))*/
 -          }
++        }
+         if (Sel[rank - 1] != ndimsA)
+         {
+             /* last selected dimension*/
+             pds = 1;
 -            for (j = (Sel[rank - 1] + 1); j <= ndimsA; j++) pds *= dimsA[j - 1]; /*prod(Dims(sel(i-1)+1:(sel(i)-1)))*/
++            for (j = (Sel[rank - 1] + 1); j <= ndimsA; j++)
++            {
++                pds *= dimsA[j - 1];    /*prod(Dims(sel(i-1)+1:(sel(i)-1)))*/
++            }
+             gdim.howmany_dims[ih].is = pd;
+             gdim.howmany_dims[ih].os = pd;
+             gdim.howmany_dims[ih].n = pds;
+             ih++;
+         }
+         else if (rank == 1)
+         {
+             /* the only selected dimension is the last one */
+             gdim.howmany_dims[ih].is = 1;
+             gdim.howmany_dims[ih].os = 1;
+             gdim.howmany_dims[ih].n = pd / dimsA[Sel[0] - 1];
+             ih++;
+         }
+     }
 -    if (!sci_dct_gen(_pvCtx, fname, ndimsA, dimsA, Ar,  Ai, isn, gdim, iopt))
++    if (!sci_dct_gen(pvApiCtx, fname, ndimsA, dimsA, Ar,  Ai, isn, gdim, iopt))
+     {
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     /***********************************
+     * Return results in lhs argument *
+     ***********************************/
 -    ReturnArguments(_pvCtx);
++    ReturnArguments(pvApiCtx);
+     FREE(gdim.dims);
+     FREE(gdim.howmany_dims);
+     return 0;
+ }
 -int sci_dct_4args(void* _pvCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt)
++int sci_dct_4args(void* pvApiCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt)
+ {
+     /* API variables */
+     SciErr sciErr;
+     int *piAddr = NULL;
+     /* Input  array variables */
+     int *Dim1 = NULL;
+     int ndims = 0;
+     int *Incr = NULL;
+     int nincr = 0;
+     /*FFTW specific library variable */
+     guru_dim_struct gdim = {0, NULL, 0, NULL};
+     /* input/output address for transform variables */
+     /* local variable */
+     int *Dim = NULL, *Sel = NULL;
+     int pd = 1;
+     int pds = 1;
+     int nd = 0;
+     int rank = 0;
+     int i = 0, j = 0, k = 0, lA = 1;
+     for (i = 0; i < ndimsA; i++)
+     {
+         lA *= dimsA[i];
+     }
+     /* void or scalar input gives void output or scalar*/
+     if (lA <= 1 )
+     {
 -        AssignOutputVariable(_pvCtx, 1) =  1;
 -        ReturnArguments(_pvCtx);
++        AssignOutputVariable(pvApiCtx, 1) =  1;
++        ReturnArguments(pvApiCtx);
+         return 0;
+     }
+     /******************** get and check third argument (dim) ****************************************/
+     getVarAddressFromPosition(pvApiCtx, 3, &piAddr);
+     if (isVarMatrixType(pvApiCtx, piAddr) == 0)
+     {
+         Scierror(999, _("%s: Wrong type for input argument #%d.\n"), fname, 3);
+         FREE(Dim1);
+         FREE(Incr);
+         FREE(Dim);
+         FREE(Sel);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     sciErr = getVectorIntArg(pvApiCtx, 3, fname, &ndims, &Dim1);
+     if (sciErr.iErr)
+     {
+         Scierror(sciErr.iErr, getErrorMessage(sciErr));
+         FREE(Dim1);
+         FREE(Incr);
+         FREE(Dim);
+         FREE(Sel);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     /* check values of Dim1[i] */
+     pd = 1;
+     for (i = 0; i < ndims; i++)
+     {
+         if (Dim1[i] <= 1)
+         {
+             Scierror(999, _("%s: Wrong values for input argument #%d: Elements must be greater than %d.\n"), fname, 3, 1);
+             FREE(Dim1);
+             FREE(Incr);
+             FREE(Dim);
+             FREE(Sel);
+             FREE(gdim.dims);
+             FREE(gdim.howmany_dims);
+             return 0;
+         }
+         pd *= Dim1[i];
+     }
+     if ( pd > lA)
+     {
+         Scierror(999, _("%s: Wrong values for input argument #%d: Must be less than %d.\n"), fname, 3, lA);
+         FREE(Dim1);
+         FREE(Incr);
+         FREE(Dim);
+         FREE(Sel);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     if (lA % pd)
+     {
+         Scierror(999, _("%s: Wrong values for input argument #%d: Must be a divisor of %d.\n"), fname, 3, lA);
+         FREE(Dim1);
+         FREE(Incr);
+         FREE(Dim);
+         FREE(Sel);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     /******************** get and check fourth argument (incr) ****************************************/
+     sciErr = getVectorIntArg(pvApiCtx, 4, fname, &nincr, &Incr);
+     if (sciErr.iErr)
+     {
+         Scierror(sciErr.iErr, getErrorMessage(sciErr));
+         FREE(Dim1);
+         FREE(Incr);
+         FREE(Dim);
+         FREE(Sel);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     if (nincr != ndims)
+     {
+         Scierror(999, _("%s: Incompatible input arguments #%d and #%d: Same sizes expected.\n"), fname, 3, 4);
+         FREE(Dim1);
+         FREE(Incr);
+         FREE(Dim);
+         FREE(Sel);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     /* check values of Incr[i] */
+     if (Incr[0] <= 0)
+     {
+         Scierror(999, _("%s: Wrong values for input argument #%d: Positive integers expected.\n"), fname, 4);
+         FREE(Dim1);
+         FREE(Incr);
+         FREE(Dim);
+         FREE(Sel);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     for (i = 0; i < ndims; i++)
+     {
+         if (lA % Incr[i])
+         {
+             Scierror(999, _("%s: Wrong values for input argument #%d: Elements must be divisors of %d.\n"), fname, 3, lA);
+             FREE(Dim1);
+             FREE(Incr);
+             FREE(Dim);
+             FREE(Sel);
+             FREE(gdim.dims);
+             FREE(gdim.howmany_dims);
+             return 0;
+         }
+         if (i > 0 && (Incr[i] <= Incr[i - 1]))
+         {
+             Scierror(999, _("%s: Wrong values for input argument #%d: Elements must be in increasing ""order.\n"), fname, 4);
+             FREE(Dim1);
+             FREE(Incr);
+             FREE(Dim);
+             FREE(Sel);
+             FREE(gdim.dims);
+             FREE(gdim.howmany_dims);
+             return 0;
+         }
+     }
+     if ((Dim = (int *)MALLOC((2 * ndims + 1) * sizeof(int))) == NULL)
+     {
+         Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
+         FREE(Dim1);
+         FREE(Incr);
+         FREE(Dim);
+         FREE(Sel);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     if ((Sel = (int *)MALLOC((ndims) * sizeof(int))) == NULL)
+     {
+         Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
+         FREE(Dim1);
+         FREE(Incr);
+         FREE(Dim);
+         FREE(Sel);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     /*Transform  Dim1 and Incr into Dim and Sel and check validity*/
+     nd = 0;
+     pd = 1;
+     if (Incr[0] != 1)
+     {
+         Dim[nd++] = Incr[0];
+         pd *= Incr[0];
+     }
+     Dim[nd++] = Dim1[0];
+     pd *= Dim1[0];
+     Sel[0] = nd;
+     for (k = 1; k < ndims; k++)
+     {
+         if (Incr[k] % pd != 0)
+         {
+             Scierror(999, _("%s: Incompatible input arguments #%d and #%d.\n"), fname, 3, 4);
+             FREE(Dim1);
+             FREE(Incr);
+             FREE(Dim);
+             FREE(Sel);
+             FREE(gdim.dims);
+             FREE(gdim.howmany_dims);
+             return 0;
+         }
+         if (Incr[k] != pd)
+         {
+             Dim[nd++] = (int)(Incr[k] / pd);
+             pd = Incr[k];
+         }
+         Dim[nd++] = Dim1[k];
+         pd *= Dim1[k];
+         Sel[k] = nd;
+     }
+     if (pd < lA)
+     {
+         if (lA % pd != 0)
+         {
+             Scierror(999, _("%s: Incompatible input arguments #%d and #%d.\n"), fname, 3, 4);
+             FREE(Dim1);
+             FREE(Incr);
+             FREE(Dim);
+             FREE(Sel);
+             FREE(gdim.dims);
+             FREE(gdim.howmany_dims);
+             return 0;
+         }
+         Dim[nd++] = (int)(lA / pd);
+     }
+     rank = ndims;
+     ndims = nd;
+     /* now  same algorithm than sci_dct_3args applies */
+     /* Create  gdim struct */
+     gdim.rank = rank;
+     if ((gdim.dims = (fftw_iodim *)MALLOC(sizeof(fftw_iodim) * gdim.rank)) == NULL)
+     {
+         Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
+         FREE(Dim1);
+         FREE(Incr);
+         FREE(Dim);
+         FREE(Sel);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     pd = 1; /* used to store prod(Dims(1:sel(k-1)))*/
+     pds = 1; /* used to store prod(Dims(sel(k-1):sel(k)))*/
+     j = 0;
+     for (i = 0; i < ndims; i++)
+     {
 -        if (j >= gdim.rank) break;
++        if (j >= gdim.rank)
++        {
++            break;
++        }
+         if (Sel[j] == i + 1)
+         {
+             gdim.dims[j].n = Dim[i];
+             gdim.dims[j].is = pd;
+             gdim.dims[j].os = pd;
+             j++;
+         }
+         pd *= Dim[i];
+     }
+     /* Compute howmany_rank based on jumps in the Sel sequence */
+     gdim.howmany_rank = 0;
 -    if ((Sel[0] != 1) && (Sel[0] != ndims)) gdim.howmany_rank++;
++    if ((Sel[0] != 1) && (Sel[0] != ndims))
++    {
++        gdim.howmany_rank++;
++    }
+     for (i = 1; i <= rank - 1; i++)
 -      {
 -        if (Sel[i] != Sel[i-1] + 1)
 -          {
++    {
++        if (Sel[i] != Sel[i - 1] + 1)
++        {
+             /*check if all dimensions between Sel[i-1]+1 and Sel[i]-1 are
+               equal to one, in this case they can be ignored and there is
+               no jump*/
+             for (j = Sel[i - 1] + 1; j <= Sel[i] - 1; j++)
 -              {
++            {
+                 if (Dim[j - 1] != 1)
 -                  {
++                {
+                     gdim.howmany_rank++;
+                     break;
 -                  }
 -              }
 -          }
 -      }
 -    if ((Sel[rank - 1] != ndims) || (rank == 1)) gdim.howmany_rank++;
++                }
++            }
++        }
++    }
++    if ((Sel[rank - 1] != ndims) || (rank == 1))
++    {
++        gdim.howmany_rank++;
++    }
+     /* Fill the howmany_dims struct */
+     if (gdim.howmany_rank > 0)
+     {
+         /* it must be the case */
+         int ih = 0;
+         if ((gdim.howmany_dims = (fftw_iodim *)MALLOC(gdim.howmany_rank * sizeof(fftw_iodim))) == NULL)
+         {
+             Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
+             FREE(Dim1);
+             FREE(Incr);
+             FREE(Dim);
+             FREE(Sel);
+             FREE(gdim.dims);
+             FREE(gdim.howmany_dims);
+             return 0;
+         }
+         pd = 1;
 -        for (j = 1; j <= (Sel[0] - 1); j++) pd *= Dim[j - 1]; /*prod(Dims(1:(sel(1)-1)))*/
++        for (j = 1; j <= (Sel[0] - 1); j++)
++        {
++            pd *= Dim[j - 1];    /*prod(Dims(1:(sel(1)-1)))*/
++        }
+         ih = 0;
+         if ((Sel[0] != 1) && (Sel[0] != ndims))
+         {
+             /* First seleted dimension */
+             gdim.howmany_dims[ih].is = 1;
+             gdim.howmany_dims[ih].os = 1;
+             gdim.howmany_dims[ih].n = pd;
+             ih++;
+         }
+         pd *= Dim[Sel[0] - 1]; /*prod(Dims(1:sel(1)))*/
 -        for (i = 1; i <= rank -1; i++)
 -          {
++        for (i = 1; i <= rank - 1; i++)
++        {
+             /* intermediate selected dimensions */
+             if (Sel[i] != Sel[i - 1] + 1)
 -              {
++            {
+                 pds = 1;
 -                for (j = (Sel[i - 1] + 1); j <= (Sel[i] - 1); j++) pds *= Dim[j - 1]; /*prod(Dims(sel(i-1)+1:(sel(i)-1)))*/
++                for (j = (Sel[i - 1] + 1); j <= (Sel[i] - 1); j++)
++                {
++                    pds *= Dim[j - 1];    /*prod(Dims(sel(i-1)+1:(sel(i)-1)))*/
++                }
+                 /*check again if all dimensions between Sel[i-1]+1 and
+                   Sel[i]-1 are equal to one, in this case they can be
+                   ignored and there is no jump*/
+                 for (j = (Sel[i - 1] + 1); j <= (Sel[i] - 1); j++)
 -                  {
++                {
+                     if (Dim[j - 1] != 1)
 -                      {
++                    {
+                         gdim.howmany_dims[ih].is = pd;
+                         gdim.howmany_dims[ih].os = pd;
+                         gdim.howmany_dims[ih].n = pds;
+                         ih++;
+                         break;
 -                      }
 -                  }
 -              }
++                    }
++                }
++            }
+             pd *= pds * Dim[Sel[i] - 1]; /*prod(Dims(1:sel(i)))*/
 -          }
++        }
+         if (Sel[rank - 1] != ndims)
+         {
+             /* last selected dimension*/
+             pds = 1;
 -            for (j = (Sel[rank - 1] + 1); j <= ndims; j++) pds *= Dim[j - 1]; /*prod(Dims(sel(i-1)+1:(sel(i)-1)))*/
++            for (j = (Sel[rank - 1] + 1); j <= ndims; j++)
++            {
++                pds *= Dim[j - 1];    /*prod(Dims(sel(i-1)+1:(sel(i)-1)))*/
++            }
+             gdim.howmany_dims[ih].is = pd;
+             gdim.howmany_dims[ih].os = pd;
+             gdim.howmany_dims[ih].n = pds;
+             ih++;
+         }
+         else if (rank == 1) /* the only selected dimension is the last one */
+         {
+             gdim.howmany_dims[ih].is = 1;
+             gdim.howmany_dims[ih].os = 1;
+             gdim.howmany_dims[ih].n = pd / Dim[Sel[0] - 1];
+             ih++;
+         }
+     }
 -    if (!sci_dct_gen(_pvCtx, fname, ndimsA, dimsA, Ar,  Ai, isn, gdim, iopt))
++    if (!sci_dct_gen(pvApiCtx, fname, ndimsA, dimsA, Ar,  Ai, isn, gdim, iopt))
+     {
+         FREE(Dim1);
+         FREE(Incr);
+         FREE(Dim);
+         FREE(Sel);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     /***********************************
+     * Return results in lhs argument *
+     ***********************************/
 -    ReturnArguments(_pvCtx);
++    ReturnArguments(pvApiCtx);
+     FREE(Dim1);
+     FREE(Incr);
+     FREE(Dim);
+     FREE(Sel);
+     FREE(gdim.dims);
+     FREE(gdim.howmany_dims);
+     return 0;
+ }
+ /*--------------------------------------------------------------------------*/
 -int sci_dct_gen(void* _pvCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, guru_dim_struct gdim, int iopt)
++int sci_dct_gen(void* pvApiCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, guru_dim_struct gdim, int iopt)
+ {
+     /* Input  array variables */
+     int  isrealA = (Ai == NULL),  lA = 1;
+     /*for MKL*/
+     /*FFTW specific library variable */
+     enum Plan_Type type;
+     fftw_r2r_kind *kind = NULL;
 -    fftw_plan p=NULL;
++    fftw_plan p = NULL;
+     /* for MKL special cases */
+     int * dims1 = NULL;
+     int * incr1 = NULL;
+     /* local variable */
+     int one = 1;
+     int i = 0;
+     int errflag = 0;
 -    for (i = 0; i < ndimsA; i++) lA *= dimsA[i];
++    for (i = 0; i < ndimsA; i++)
++    {
++        lA *= dimsA[i];
++    }
 -    AssignOutputVariable(_pvCtx, 1) =  1;/* assume inplace transform*/
 -    if (isn==1&iopt==0) {
 -      /* normalization */
 -      if (dct_scale_array(Ar, Ai, gdim,isn) == -1)
++    AssignOutputVariable(pvApiCtx, 1) =  1;/* assume inplace transform*/
++    if (isn == 1 & iopt == 0)
++    {
++        /* normalization */
++        if (dct_scale_array(Ar, Ai, gdim, isn) == -1)
+         {
 -          Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
 -          return 0;
++            Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
++            return 0;
+         }
+     }
+     /* use inplace transform*/
+     type = R2R_PLAN;
 -    if ((kind = (fftw_r2r_kind *)MALLOC(sizeof(fftw_r2r_kind) *gdim.rank)) == NULL)
 -      {
++    if ((kind = (fftw_r2r_kind *)MALLOC(sizeof(fftw_r2r_kind) * gdim.rank)) == NULL)
++    {
+         Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
+         return 0;
 -      }
 -
 -    if (isn==-1)
 -      {
 -      if (iopt==0|iopt==2)
 -        for (i = 0; i < gdim.rank; i++)  kind[i] = FFTW_REDFT10;
 -      else if (iopt==1)
 -         for (i = 0; i < gdim.rank; i++)  kind[i] = FFTW_REDFT00;
 -      else if (iopt==4)
 -         for (i = 0; i < gdim.rank; i++)  kind[i] = FFTW_REDFT11;
 -      }
++    }
++
++    if (isn == -1)
++    {
++        if (iopt == 0 | iopt == 2)
++            for (i = 0; i < gdim.rank; i++)
++            {
++                kind[i] = FFTW_REDFT10;
++            }
++        else if (iopt == 1)
++            for (i = 0; i < gdim.rank; i++)
++            {
++                kind[i] = FFTW_REDFT00;
++            }
++        else if (iopt == 4)
++            for (i = 0; i < gdim.rank; i++)
++            {
++                kind[i] = FFTW_REDFT11;
++            }
++    }
+     else
 -      {
 -      if (iopt==0|iopt==3)
 -        for (i = 0; i < gdim.rank; i++)  kind[i] = FFTW_REDFT01;
 -      else if (iopt==1)
 -         for (i = 0; i < gdim.rank; i++)  kind[i] = FFTW_REDFT00;
 -      else if (iopt==4)
 -         for (i = 0; i < gdim.rank; i++)  kind[i] = FFTW_REDFT11;
 -      }
++    {
++        if (iopt == 0 | iopt == 3)
++            for (i = 0; i < gdim.rank; i++)
++            {
++                kind[i] = FFTW_REDFT01;
++            }
++        else if (iopt == 1)
++            for (i = 0; i < gdim.rank; i++)
++            {
++                kind[i] = FFTW_REDFT00;
++            }
++        else if (iopt == 4)
++            for (i = 0; i < gdim.rank; i++)
++            {
++                kind[i] = FFTW_REDFT11;
++            }
++    }
+     if (!WITHMKL || gdim.howmany_rank <= 1)
 -      {
++    {
+         /* Set Plan */
+         p = GetFFTWPlan(type, &gdim, Ar, NULL, Ar, NULL, getCurrentFftwFlags(), isn , kind, &errflag);
+         if (errflag == 1)
 -          {
++        {
+             Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
+             return 0;
 -          }
++        }
+         else if (errflag == 2)
 -          {
++        {
+             Scierror(999, _("%s: Creation of requested fftw plan failed.\n"), fname);
+             return 0;
 -          }
++        }
+         /* execute FFTW plan */
+         ExecuteFFTWPlan(type, p, Ar, NULL, Ar, NULL);
+         if (!isrealA)
 -          ExecuteFFTWPlan(type, p, Ai, NULL, Ai, NULL);
 -      }
++        {
++            ExecuteFFTWPlan(type, p, Ai, NULL, Ai, NULL);
++        }
++    }
+     else
+     {
+         /*FFTW MKL does not implement yet guru plan with howmany_rank>1             */
+         /*   associated loops described in gdim.howmany_rank and  gdim.howmany_dims */
+         /*   are implemented here by a set of call with howmany_rank==1             */
+         fftw_iodim *howmany_dims = gdim.howmany_dims;
+         int howmany_rank = gdim.howmany_rank;
+         int i1 = 0, i2 = 0;
+         int nloop = 0;
+         int t = 0;
+         gdim.howmany_rank = 0;
+         gdim.howmany_dims = NULL;
+         p = GetFFTWPlan(type, &gdim, Ar, NULL, Ar, NULL, getCurrentFftwFlags(), isn , kind, &errflag);
+         if (errflag == 1)
+         {
+             Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
+             FREE(dims1);
+             FREE(incr1);
+             return 0;
+         }
+         else if (errflag == 2)
+         {
+             Scierror(999, _("%s: Creation of requested fftw plan failed.\n"), fname);
+             FREE(dims1);
+             FREE(incr1);
+             return 0;
+         }
+         /* flatten  nested loops: replace howmany_rank nested loops by a single one*/
+         /* Build temporary arrays used by flatened loop */
+         if ((dims1 = (int *)MALLOC(sizeof(int) * howmany_rank)) == NULL)
+         {
+             Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
+             FREE(dims1);
+             FREE(incr1);
+             return 0;
+         }
+         dims1[0] = howmany_dims[0].n;
 -        for (i = 1; i < howmany_rank; i++) dims1[i] = dims1[i - 1] * howmany_dims[i].n;
++        for (i = 1; i < howmany_rank; i++)
++        {
++            dims1[i] = dims1[i - 1] * howmany_dims[i].n;
++        }
+         nloop = dims1[howmany_rank - 1];
+         if ((incr1 = (int *)MALLOC(sizeof(int) * howmany_rank)) == NULL)
+         {
 -          Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
 -          FREE(dims1);
 -          FREE(incr1);
 -          return 0;
++            Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
++            FREE(dims1);
++            FREE(incr1);
++            return 0;
+         }
+         t = 1;
+         for (i = 0; i < howmany_rank; i++)
+         {
+             t += (howmany_dims[i].n - 1) * howmany_dims[i].is;
+             incr1[i] = t;
+         }
+         /*loop on each "plan" */
+         i = 0; /*index on the first plan entry */
+         for (i1 = 1; i1 <= nloop; i1++)
+         {
+             /* the input and output are assumed to be complex because
+                within MKL real cases are transformed to complex ones in
+                previous steps of sci_dct_gen*/
+             ExecuteFFTWPlan(type, p, &Ar[i], NULL, &Ar[i], NULL);
+             if (!isrealA)
 -              ExecuteFFTWPlan(type, p, &Ai[i], NULL, &Ai[i], NULL);
++            {
++                ExecuteFFTWPlan(type, p, &Ai[i], NULL, &Ai[i], NULL);
++            }
+             i += howmany_dims[0].is;
+             /* check if  a loop ends*/
+             for (i2 = howmany_rank - 2; i2 >= 0; i2--)
+             {
+                 if ((i1 % dims1[i2]) == 0)
+                 {
+                     /*loop on dimension i2 ends, compute jump on the first plan entry index*/
+                     i += howmany_dims[i2 + 1].is - incr1[i2];
+                     break;
+                 }
+             }
+         }
+         /* free temporary arrays */
+         FREE(dims1);
+         FREE(incr1);
+         /* reset initial value of gdim for post treatment*/
+         gdim.howmany_rank = howmany_rank;
+         gdim.howmany_dims = howmany_dims;
+     }
 -    if (isn==-1&iopt==0) {
 -      /* normalization */
++    if (isn == -1 & iopt == 0)
++    {
++        /* normalization */
 -      if (dct_scale_array(Ar, Ai, gdim,isn) == -1)
++        if (dct_scale_array(Ar, Ai, gdim, isn) == -1)
+         {
 -          Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
 -          return 0;
++            Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
++            return 0;
+         }
+     }
+     return 1;
+ }
  
  #include "callfftw.h"
  #include "gw_fftw.h"
- #include "stack-c.h"
+ #include "localization.h"
+ #include "api_scilab.h"
  /*--------------------------------------------------------------------------*/
- int sci_disposefftwlibrary(char *fname,unsigned long fname_len)
 -int sci_disposefftwlibrary(char *fname, unsigned long fname_len)
++int sci_disposefftwlibrary(char *fname, void* pvApiCtx)
  {
-     static int l1,n1;
+     int iErr;
  
-     n1=1;
-     if ( DisposeFFTWLibrary() )
+     if (DisposeFFTWLibrary())
      {
-         CreateVar(Rhs+1,MATRIX_OF_BOOLEAN_DATATYPE, &n1,&n1,&l1);
-         *istk(l1)=(int)(TRUE);
+         iErr = createScalarBoolean(pvApiCtx, nbInputArgument(pvApiCtx) + 1, 1); // true
      }
      else
      {
index 0000000,759cf1b..1949786
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,1104 +1,1201 @@@
+ /*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2012 - INRIA - Serge STEER
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+ /*--------------------------------------------------------------------------*/
 -#include "stack-c.h"
+ #include "fftw_utilities.h"
+ #include "sci_data_utilities.h"
+ #include "callfftw.h"
+ #include "MALLOC.h"
+ #include "gw_fftw.h"
+ #include "api_scilab.h"
+ #include "localization.h"
+ #include "Scierror.h"
+ #include "BOOL.h"
+ #include "sci_data_utilities.h"
+ /*--------------------------------------------------------------------------*/
+ extern void C2F(dscal)(int *n, double *da, double *dx, int *incx); /* blas routine */
+ extern void C2F(dset)(int *n, double *da, double *dx, int *incx); /* blas routine */
+ /*--------------------------------------------------------------------------*/
 -static int sci_dst_gen(void* _pvCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, guru_dim_struct gdim, int iopt);
 -static int sci_dst_2args(void* _pvCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt);
 -static int sci_dst_3args(void* _pvCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt);
 -static int sci_dst_4args(void* _pvCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt);
++static int sci_dst_gen(void* pvApiCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, guru_dim_struct gdim, int iopt);
++static int sci_dst_2args(void* pvApiCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt);
++static int sci_dst_3args(void* pvApiCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt);
++static int sci_dst_4args(void* pvApiCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt);
+ /*--------------------------------------------------------------------------*/
+ extern int WITHMKL;
+ /* fftw function.
+ *
+ * Scilab Calling sequence :
+ *   dst(A )
+ *   dst(A,sign )
+ *   dst(A,sel,sign )
+ *   dst(A,sign,dim,incr )
+ *
+ * Input : A : a scilab double complex or real vector, matrix or hypermatrix
+ *
+ *         sign : a scilab double or integer scalar (-1 or 1): the sign
+ *                  in the exponential component
+ *
+ *         sel : a scilab double or integer vector, the selection of dimensions
+ *         dim : a scilab double or integer vector: the dimensions
+ *                  of the Fast Fourier Transform to perform
+ *
+ *         incr : a scilab double or integer vector: the increments
+ *                  of the Fast Fourier Transform to perform
+ *
+ * Output : a scilab double complex or real array with same shape as A that
+ *          gives the result of the transform.
+ *
+ */
 -int sci_dst(char *fname, unsigned long fname_len)
++int sci_dst(char *fname,  void* pvApiCtx)
+ {
+     SciErr sciErr;
+     int *piAddr = NULL;
+     int rhs = Rhs;
+     int iTypeOne = 0;
+     int iopt = 0;
+     int ndimsA = 0;
+     int *dimsA = NULL;
+     double *Ar = NULL, *Ai = NULL;
+     char *option = NULL;
+     int isn = FFTW_FORWARD;
+     WITHMKL = withMKL();
+     /****************************************
+     * Basic constraints on rhs arguments  *
+     ****************************************/
+     /* check min/max lhs/rhs arguments of scilab function */
+     CheckRhs(1, 4);
+     CheckLhs(1, 1);
+     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
+     if (sciErr.iErr)
+     {
+         printError(&sciErr, 0);
+         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
+         return 0;
+     }
+     sciErr = getVarType(pvApiCtx, piAddr, &iTypeOne);
+     if (sciErr.iErr)
+     {
+         printError(&sciErr, 0);
+         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
+         return 0;
+     }
+     if ((iTypeOne == sci_list) || (iTypeOne == sci_tlist))
+     {
+         OverLoad(1);
+         return 0;
+     }
+     if (iTypeOne == sci_mlist)
+     {
+         /* We allow overload for not hypermatrix type */
+         if (!isHyperMatrixMlist(pvApiCtx, piAddr))
+         {
+             OverLoad(1);
+             return 0;
+         }
+     }
+     sciErr = getVarAddressFromPosition(pvApiCtx, Rhs, &piAddr);
+     if (sciErr.iErr)
+     {
+         printError(&sciErr, 0);
+         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, Rhs);
+         return 0;
+     }
+     if (isStringType(pvApiCtx, piAddr))   /*  dst(...,option); */
+     {
+         if (isScalar(pvApiCtx, piAddr))
+         {
+             if (getAllocatedSingleString(pvApiCtx, piAddr, &option) == 0)
+             {
+                 rhs = Rhs - 1;
+             }
+             else
+             {
 -              Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
++                Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
+                 return 0;
+             }
+         }
+     }
+     /********************  Checking if isn is given  ************************************************/
+     if (rhs == 1)  /*only one rhs argument: forward dst*/
+     {
+         isn = FFTW_FORWARD; /* default value */
+     }
+     else   /*get isn out of second argument*/
+     {
+         sciErr = getScalarIntArg(pvApiCtx, 2, fname, &isn);
+         if (sciErr.iErr)
+         {
+             Scierror(sciErr.iErr, getErrorMessage(sciErr));
+             return 0;
+         }
+         /* check value of second rhs argument */
+         if ((isn !=  FFTW_FORWARD) && (isn !=  FFTW_BACKWARD))
+         {
+             Scierror(53, _("%s: Wrong value for input argument #%d: %d or %d expected.\n"), fname, 2, FFTW_FORWARD, FFTW_BACKWARD);
+             return 0;
+         }
+     }
+     if (option != NULL)
 -      {
 -        if (isn== FFTW_FORWARD)
 -          {
 -            if (strcmp("dst1", option) == 0)  iopt = 1;
 -            else if (strcmp("dst2", option) == 0)  iopt = 2;
 -            else if (strcmp("dst", option) == 0)  iopt = 0;
 -            else if (strcmp("dst4", option) == 0)  iopt = 4;
++    {
++        if (isn == FFTW_FORWARD)
++        {
++            if (strcmp("dst1", option) == 0)
++            {
++                iopt = 1;
++            }
++            else if (strcmp("dst2", option) == 0)
++            {
++                iopt = 2;
++            }
++            else if (strcmp("dst", option) == 0)
++            {
++                iopt = 0;
++            }
++            else if (strcmp("dst4", option) == 0)
++            {
++                iopt = 4;
++            }
+             else
 -              {
++            {
+                 Scierror(999, _("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"), fname, Rhs,
+                          "\"dst\", \"dst1\",\"dst2\",\"dst4\"");
+                 freeAllocatedSingleString(option);
+                 option = NULL;
+                 return 0;
 -              }
 -          }
 -        else {
 -            if (strcmp("dst1", option) == 0)  iopt = 1;
 -            else if (strcmp("dst3", option) == 0)  iopt = 3;
 -            else if (strcmp("idst", option) == 0)  iopt = 0;
 -            else if (strcmp("dst4", option) == 0)  iopt = 4;
++            }
++        }
++        else
++        {
++            if (strcmp("dst1", option) == 0)
++            {
++                iopt = 1;
++            }
++            else if (strcmp("dst3", option) == 0)
++            {
++                iopt = 3;
++            }
++            else if (strcmp("idst", option) == 0)
++            {
++                iopt = 0;
++            }
++            else if (strcmp("dst4", option) == 0)
++            {
++                iopt = 4;
++            }
+             else
 -              {
++            {
+                 Scierror(999, _("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"), fname, Rhs,
+                          "\"idst\", \"dst1\",\"dst3\",\"dst4\"");
+                 freeAllocatedSingleString(option);
+                 option = NULL;
+                 return 0;
 -              }
++            }
+         }
+         freeAllocatedSingleString(option);
+         option = NULL;
+     }
+     /********************  getting the array A      ************************************************/
+     getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
+     if (!getArrayOfDouble(pvApiCtx, piAddr, &ndimsA, &dimsA, &Ar, &Ai))
+     {
+         Scierror(999, _("%s: Wrong type for argument #%d: Array of floating point numbers expected.\n"),
+                  fname, 1);
+         return 0;
+     }
+     /********************  Select proper method     ************************************************/
+     if (rhs < 3)
+     {
+         /* dst(A ,sign)*/
 -      sci_dst_2args(pvApiCtx, fname, ndimsA, dimsA, Ar, Ai, isn, iopt);
++        sci_dst_2args(pvApiCtx, fname, ndimsA, dimsA, Ar, Ai, isn, iopt);
+     }
+     else if (rhs == 3)
+     {
+         /* dst(A ,sign ,sel)*/
+         sci_dst_3args(pvApiCtx, fname, ndimsA, dimsA, Ar, Ai, isn, iopt);
+     }
+     else if (rhs == 4)
+     {
+         /* dst(A ,sign ,dim,incr)*/
+         sci_dst_4args(pvApiCtx, fname, ndimsA, dimsA, Ar, Ai, isn, iopt);
+     }
+     return 0;
+ }
 -int sci_dst_2args(void* _pvCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt)
++int sci_dst_2args(void* pvApiCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt)
+ {
+     /*FFTW specific library variable */
+     guru_dim_struct gdim = {0, NULL, 0, NULL};
+     /* local variable */
+     int ndims = 0; /* number of non singleton dimensions */
+     int first_nonsingleton = -1;
+     int i = 0, j = 0;
+     int prd = 1;
+     /* ignore singleton dimensions */
+     first_nonsingleton = -1;
+     ndims = 0;
+     for (i = 0; i < ndimsA; i++)
+     {
+         if (dimsA[i] > 1)
+         {
+             ndims++;
 -            if (first_nonsingleton < 0) first_nonsingleton = i;
++            if (first_nonsingleton < 0)
++            {
++                first_nonsingleton = i;
++            }
+         }
+     }
+     /* void or scalar input gives void output or scalar*/
+     if (ndims == 0 )
+     {
 -        AssignOutputVariable(_pvCtx, 1) =  1;
 -        ReturnArguments(_pvCtx);
++        AssignOutputVariable(pvApiCtx, 1) =  1;
++        ReturnArguments(pvApiCtx);
+         return 0;
+     }
+     gdim.rank = ndims;
+     if ((gdim.dims = (fftw_iodim *)MALLOC(sizeof(fftw_iodim) * gdim.rank)) == NULL)
+     {
+         Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     j = 0;
+     prd = 1;
+     for (i = (first_nonsingleton); i < ndimsA; i++)
+     {
+         if (dimsA[i] > 1)
+         {
+             gdim.dims[j].n = dimsA[i];
+             gdim.dims[j].is = prd;
+             gdim.dims[j].os = prd;
+             prd *= dimsA[i];
+             j++;
+         }
+     }
+     gdim.howmany_rank = 0;
+     gdim.howmany_dims = NULL;
 -    if (!sci_dst_gen(_pvCtx, fname, ndimsA, dimsA,  Ar,  Ai, isn, gdim,iopt))
++    if (!sci_dst_gen(pvApiCtx, fname, ndimsA, dimsA,  Ar,  Ai, isn, gdim, iopt))
+     {
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     /***********************************
+     * Return results in lhs argument *
+     ***********************************/
 -    ReturnArguments(_pvCtx);
++    ReturnArguments(pvApiCtx);
+     FREE(gdim.dims);
+     FREE(gdim.howmany_dims);
+     return 0;
+ }
 -int  sci_dst_3args(void* _pvCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt)
++int  sci_dst_3args(void* pvApiCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt)
+ {
+     /* API variables */
+     SciErr sciErr;
+     int *piAddr = NULL;
+     int *Sel = NULL;
+     int rank = 0;
+     /*FFTW specific library variable */
+     guru_dim_struct gdim = {0, NULL, 0, NULL};
+     /* local variable */
+     int ndims = 0;
+     int first_nonsingleton = -1;
+     int ih = 0;
+     int pd = 1; /* used to store prod(Dims(1:sel(k-1)))*/
+     int pds = 1; /* used to store prod(Dims(sel(k-1):sel(k)))*/
+     int i = 0, j = 0;
+     /* ignore singleton dimensions */
+     first_nonsingleton = -1;
+     ndims = 0;
+     for (i = 0; i < ndimsA; i++)
+     {
+         if (dimsA[i] > 1)
+         {
+             ndims++;
 -            if (first_nonsingleton < 0) first_nonsingleton = i;
++            if (first_nonsingleton < 0)
++            {
++                first_nonsingleton = i;
++            }
+         }
+     }
+     /* void or scalar input gives void output or scalar*/
+     if (ndims == 0 )
+     {
 -        AssignOutputVariable(_pvCtx, 1) =  1;
 -        ReturnArguments(_pvCtx);
++        AssignOutputVariable(pvApiCtx, 1) =  1;
++        ReturnArguments(pvApiCtx);
+         return 0;
+     }
+     /******************** get and check third argument (sel) ****************************************/
+     getVarAddressFromPosition(pvApiCtx, 3, &piAddr);
+     if (isVarMatrixType(pvApiCtx, piAddr) == 0)
+     {
+         Scierror(999, _("%s: Wrong type for input argument #%d.\n"), fname, 3);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     sciErr = getVectorIntArg(pvApiCtx, 3, fname, &rank, &Sel);
+     if (sciErr.iErr)
+     {
+         Scierror(sciErr.iErr, getErrorMessage(sciErr));
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     /* size of Sel must be less than ndimsA */
+     if (rank <= 0 || rank >= ndimsA)
+     {
+         Scierror(999, _("%s: Wrong size for input argument #%d: Must be between %d and %d.\n"), fname, 3, 1, ndimsA - 1);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     /* check values of Sel[i] */
+     for (i = 0; i < rank; i++)
+     {
+         if (Sel[i] <= 0)
+         {
+             Scierror(999, _("%s: Wrong values for input argument #%d: Positive integers expected.\n"), fname, 3);
+             FREE(gdim.dims);
+             FREE(gdim.howmany_dims);
+             return 0;
+         }
+         if (Sel[i] > ndimsA)
+         {
+             Scierror(999, _("%s: Wrong values for input argument #%d: Elements must be less than %d.\n"), fname, 3, ndimsA);
+             FREE(gdim.dims);
+             FREE(gdim.howmany_dims);
+             return 0;
+         }
+         if (i > 0 && Sel[i] <= Sel[i - 1])
+         {
+             Scierror(999, _("%s: Wrong values for input argument #%d: Elements must be in increasing order.\n"), fname, 3);
+             FREE(gdim.dims);
+             FREE(gdim.howmany_dims);
+             return 0;
+         }
+     }
+     /* Create  gdim struct */
+     gdim.rank = rank;
+     if ((gdim.dims = (fftw_iodim *)MALLOC(sizeof(fftw_iodim) * gdim.rank)) == NULL)
+     {
+         Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     pd = 1; /* used to store prod(Dims(1:sel(k-1)))*/
+     pds = 1; /* used to store prod(Dims(sel(k-1):sel(k)))*/
+     j = 0;
+     for (i = 0; i < ndimsA; i++)
+     {
 -        if (j >= gdim.rank) break;
++        if (j >= gdim.rank)
++        {
++            break;
++        }
+         if (Sel[j] == i + 1)
+         {
+             gdim.dims[j].n = dimsA[i];
+             gdim.dims[j].is = pd;
+             gdim.dims[j].os = pd;
+             j++;
+         }
+         pd *= dimsA[i];
+     }
+     /* Compute howmany_rank based on jumps in the Sel sequence */
+     gdim.howmany_rank = 0;
 -    if ((Sel[0] != 1) && (Sel[0] != ndimsA)) gdim.howmany_rank++;
++    if ((Sel[0] != 1) && (Sel[0] != ndimsA))
++    {
++        gdim.howmany_rank++;
++    }
+     for (i = 1; i <= rank - 1; i++)
 -      {
 -        if (Sel[i] != Sel[i-1] + 1)
 -          {
++    {
++        if (Sel[i] != Sel[i - 1] + 1)
++        {
+             /*check if all dimensions between Sel[i-1]+1 and Sel[i]-1 are
+               equal to one, in this case they can be ignored and there is
+               no jump*/
+             for (j = Sel[i - 1] + 1; j <= Sel[i] - 1; j++)
 -              {
++            {
+                 if (dimsA[j - 1] != 1)
 -                  {
++                {
+                     gdim.howmany_rank++;
+                     break;
 -                  }
 -              }
 -          }
 -      }
++                }
++            }
++        }
++    }
 -    if ((Sel[rank - 1] != ndimsA) || (rank == 1)) gdim.howmany_rank++;
++    if ((Sel[rank - 1] != ndimsA) || (rank == 1))
++    {
++        gdim.howmany_rank++;
++    }
+     /* Fill the howmany_dims struct */
+     if (gdim.howmany_rank > 0)
+     {
+         /* it must be the case */
+         if ((gdim.howmany_dims = (fftw_iodim *)MALLOC(gdim.howmany_rank * sizeof(fftw_iodim))) == NULL)
+         {
+             Scierror(999, _("%s: Cannot allocate more memory.\n"), fname);
+             FREE(gdim.dims);
+             FREE(gdim.howmany_dims);
+             return 0;
+         }
+         pd = 1;
 -        for (j = 1; j <= (Sel[0] - 1); j++) pd *= dimsA[j - 1]; /*prod(Dims(1:(sel(1)-1)))*/
++        for (j = 1; j <= (Sel[0] - 1); j++)
++        {
++            pd *= dimsA[j - 1];    /*prod(Dims(1:(sel(1)-1)))*/
++        }
+         ih = 0;
+         if ((Sel[0] != 1) && (Sel[0] != ndimsA))
+         {
+             /* First seleted dimension */
+             gdim.howmany_dims[ih].is = 1;
+             gdim.howmany_dims[ih].os = 1;
+             gdim.howmany_dims[ih].n = pd;
+             ih++;
+         }
+         pd *= dimsA[Sel[0] - 1]; /*prod(Dims(1:sel(1)))*/
 -        for (i = 1; i <= rank -1; i++)
 -          {
++        for (i = 1; i <= rank - 1; i++)
++        {
+             /* intermediate selected dimensions */
+             if (Sel[i] != Sel[i - 1] + 1)
 -              {
++            {
+                 pds = 1;
 -                for (j = (Sel[i - 1] + 1); j <= (Sel[i] - 1); j++) pds *= dimsA[j - 1]; /*prod(Dims(sel(i-1)+1:(sel(i)-1)))*/
++                for (j = (Sel[i - 1] + 1); j <= (Sel[i] - 1); j++)
++                {
++                    pds *= dimsA[j - 1];    /*prod(Dims(sel(i-1)+1:(sel(i)-1)))*/
++                }
+                 /*check again if all dimensions between Sel[i-1]+1 and
+                   Sel[i]-1 are equal to one, in this case they can be
+                   ignored and there is no jump*/
+                 for (j = (Sel[i - 1] + 1); j <= (Sel[i] - 1); j++)
 -                  {
++                {
+                     if (dimsA[j - 1] != 1)
 -                      {
++                    {
+                         gdim.howmany_dims[ih].is = pd;
+                         gdim.howmany_dims[ih].os = pd;
+                         gdim.howmany_dims[ih].n = pds;
+                         ih++;
+                         break;
 -                      }
 -                  }
 -              }
++                    }
++                }
++            }
+             pd *= pds * dimsA[Sel[i] - 1]; /*prod(Dims(1:sel(i)))*/
 -          }
++        }
+         if (Sel[rank - 1] != ndimsA)
+         {
+             /* last selected dimension*/
+             pds = 1;
 -            for (j = (Sel[rank - 1] + 1); j <= ndimsA; j++) pds *= dimsA[j - 1]; /*prod(Dims(sel(i-1)+1:(sel(i)-1)))*/
++            for (j = (Sel[rank - 1] + 1); j <= ndimsA; j++)
++            {
++                pds *= dimsA[j - 1];    /*prod(Dims(sel(i-1)+1:(sel(i)-1)))*/
++            }
+             gdim.howmany_dims[ih].is = pd;
+             gdim.howmany_dims[ih].os = pd;
+             gdim.howmany_dims[ih].n = pds;
+             ih++;
+         }
+         else if (rank == 1)
+         {
+             /* the only selected dimension is the last one */
+             gdim.howmany_dims[ih].is = 1;
+             gdim.howmany_dims[ih].os = 1;
+             gdim.howmany_dims[ih].n = pd / dimsA[Sel[0] - 1];
+             ih++;
+         }
+     }
 -    if (!sci_dst_gen(_pvCtx, fname, ndimsA, dimsA, Ar,  Ai, isn, gdim, iopt))
++    if (!sci_dst_gen(pvApiCtx, fname, ndimsA, dimsA, Ar,  Ai, isn, gdim, iopt))
+     {
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     /***********************************
+     * Return results in lhs argument *
+     ***********************************/
 -    ReturnArguments(_pvCtx);
++    ReturnArguments(pvApiCtx);
+     FREE(gdim.dims);
+     FREE(gdim.howmany_dims);
+     return 0;
+ }
 -int sci_dst_4args(void* _pvCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt)
++int sci_dst_4args(void* pvApiCtx, char *fname, int ndimsA, int *dimsA, double *Ar,  double *Ai, int isn, int iopt)
+ {
+     /* API variables */
+     SciErr sciErr;
+     int *piAddr = NULL;
+     /* Input  array variables */
+     int *Dim1 = NULL;
+     int ndims = 0;
+     int *Incr = NULL;
+     int nincr = 0;
+     /*FFTW specific library variable */
+     guru_dim_struct gdim = {0, NULL, 0, NULL};
+     /* input/output address for transform variables */
+     /* local variable */
+     int *Dim = NULL, *Sel = NULL;
+     int pd = 1;
+     int pds = 1;
+     int nd = 0;
+     int rank = 0;
+     int i = 0, j = 0, k = 0, lA = 1;
+     for (i = 0; i < ndimsA; i++)
+     {
+         lA *= dimsA[i];
+     }
+     /* void or scalar input gives void output or scalar*/
+     if (lA <= 1 )
+     {
 -        AssignOutputVariable(_pvCtx, 1) =  1;
 -        ReturnArguments(_pvCtx);
++        AssignOutputVariable(pvApiCtx, 1) =  1;
++        ReturnArguments(pvApiCtx);
+         return 0;
+     }
+     /******************** get and check third argument (dim) ****************************************/
+     getVarAddressFromPosition(pvApiCtx, 3, &piAddr);
+     if (isVarMatrixType(pvApiCtx, piAddr) == 0)
+     {
+         Scierror(999, _("%s: Wrong type for input argument #%d.\n"), fname, 3);
+         FREE(Dim1);
+         FREE(Incr);
+         FREE(Dim);
+         FREE(Sel);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     sciErr = getVectorIntArg(pvApiCtx, 3, fname, &ndims, &Dim1);
+     if (sciErr.iErr)
+     {
+         Scierror(sciErr.iErr, getErrorMessage(sciErr));
+         FREE(Dim1);
+         FREE(Incr);
+         FREE(Dim);
+         FREE(Sel);
+         FREE(gdim.dims);
+         FREE(gdim.howmany_dims);
+         return 0;
+     }
+     /* check values of Dim1[i] */
+     pd = 1;
+     for (i = 0; i < ndims; i++)
+     {
+         if (Dim1[i] <= 1)
+         {
+             Scierror(999, _("%s: Wrong values for input argument #%d: Elements must be greater than %d.\n"), fname, 3, 1);
+             FREE(Dim1);
+             FREE(Incr);
+             FREE(Dim);
+             FREE(Sel);
+             FREE(gdim.dims);
+             FREE(gdim.howmany_dims);
+             return 0;
+         }
+         pd *= Dim1[i];
+     }
+     if ( pd > lA)
+     {
+         Scierror(999, _("%s: Wrong values for input argument #%d: Must be less than %d.\n"), fname, 3,&n