Javasci: Add sparse, boolean sparse, polynomial and (t|m|)lists management 46/6146/14
Calixte DENIZET [Mon, 6 Feb 2012 10:06:47 +0000 (11:06 +0100)]
Change-Id: I23d8ffb374ef0a9f6e40179dfd1b50fca3ad92bc

31 files changed:
scilab/modules/api_scilab/includes/api_list.h
scilab/modules/api_scilab/src/cpp/api_list.cpp
scilab/modules/javasci/Javasci.vcxproj
scilab/modules/javasci/Javasci.vcxproj.filters
scilab/modules/javasci/Makefile.am
scilab/modules/javasci/Makefile.in
scilab/modules/javasci/src/c/javasci2_helper.c
scilab/modules/javasci/src/c/javasci2_helper.h
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/java/org/scilab/modules/javasci/Scilab.java
scilab/modules/javasci/src/jni/call_scilab.i
scilab/modules/javasci/src/jni/call_scilab_java_typemaps.i
scilab/modules/javasci/src/jni/call_scilab_java_typemaps_complex.i
scilab/modules/javasci/src/jni/call_scilab_java_typemaps_poly.i [new file with mode: 0644]
scilab/modules/javasci/src/jni/call_scilab_java_typemaps_sparse.i [new file with mode: 0644]
scilab/modules/javasci/src/jni/call_scilab_java_typemaps_string.i
scilab/modules/javasci/src/jni/call_scilab_wrap.c
scilab/modules/javasci/src/jni/putLists.c [new file with mode: 0644]
scilab/modules/javasci/tests/java/org/scilab/tests/modules/javasci/testReadWrite.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabBoolean.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabBooleanSparse.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabDouble.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabInteger.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabList.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabMList.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabPolynomial.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabSparse.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabString.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabTList.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabType.java

index 4b0f86a..230ff84 100644 (file)
@@ -18,1355 +18,1355 @@ extern "C" {
 
 #include "doublecomplex.h"
 
-/**********************/
-/*   list functions   */
-/**********************/
-
-/**
- * Get the number of items in a list
- * @param[in] _piAddress list address
- * @param[out] _piNbItem return number of items
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getListItemNumber(void* _pvCtx, int* _piAddress, int* _piNbItem);
-
-/**
- * Get the address of an item in a list
- * @param[in] _piAddress list address
- * @param[in] _iItemNum item number
- * @param[out] _piItemAddress return item address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getListItemAddress(void* _pvCtx, int* _piAddress, int _iItemNum, int** _piItemAddress);
-
-/**
- * Get a list from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos position of the retrieved list in the parent list
- * @param[out] _piAddress return list address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getListInList(void* _pvCtx, int* _piParent, int _iItemPos, int** _piAddress);
-
-/**
- * Get a tlist from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos position of the retrieved tlist in the parent list
- * @param[out] _piAddress return tlist address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getTListInList(void* _pvCtx, int* _piParent, int _iItemPos, int** _piAddress);
-
-/**
- * Get an mlist from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos position of the retrieved mlist in the parent list
- * @param[out] _piAddress return mlist address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getMListInList(void* _pvCtx, int* _piParent, int _iItemPos, int** _piAddress);
-
-/**
- * Get a list from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos position of the retrieved list in the parent list
- * @param[out] _piAddress return list address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int** _piAddress);
-
-/**
- * Get a tlist from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos position of the retrieved tlist in the parent list
- * @param[out] _piAddress return tlist address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getTListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int** _piAddress);
-
-/**
- * Get an mlist from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos position of the retrieved mlist in the parent list
- * @param[out] _piAddress return mlist address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getMListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int** _piAddress);
-
-/**
- * Create a list
- * @param[in] _iVar variable number
- * @param[in] _iNbItem number of items
- * @param[out] _piAddress return list address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createList(void* _pvCtx, int _iVar, int _iNbItem, int** _piAddress);
-
-/**
- * Create a tlist
- * @param[in] _iVar variable number
- * @param[in] _iNbItem number of items
- * @param[out] _piAddress return tlist address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createTList(void* _pvCtx, int _iVar, int _iNbItem, int** _piAddress);
-
-/**
- * Create an mlist
- * @param[in] _iVar variable number
- * @param[in] _iNbItem number of items
- * @param[out] _piAddress return mlist address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMList(void* _pvCtx, int _iVar, int _iNbItem, int** _piAddress);
-
-/**
- * Create a named list
- * @param[in] _pstName variable name
- * @param[in] _iNbItem number of items
- * @param[out] _piAddress return list address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createNamedList(void* _pvCtx, const char* _pstName, int _iNbItem, int** _piAddress);
-
-/**
- * Create a named tlist
- * @param[in] _pstName variable name
- * @param[in] _iNbItem number of items
- * @param[out] _piAddress return tlist address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createNamedTList(void* _pvCtx, const char* _pstName, int _iNbItem, int** _piAddress);
-
-/**
- * Create a named mlist
- * @param[in] _pstName variable name
- * @param[in] _iNbItem number of items
- * @param[out] _piAddress return mlist address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createNamedMList(void* _pvCtx, const char* _pstName, int _iNbItem, int** _piAddress);
-
-/**
- * Read a named list
- * @param[in] _pstName variable name
- * @param[out] _piNbItem return number of items
- * @param[out] _piAddress return list address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readNamedList(void* _pvCtx, const char* _pstName, int* _piNbItem, int** _piAddress);
-
-/**
- * Read a named tlist
- * @param[in] _pstName variable name
- * @param[out] _piNbItem return number of items
- * @param[out] _piAddress return tlist address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readNamedTList(void* _pvCtx, const char* _pstName, int* _piNbItem, int** _piAddress);
-
-/**
- * Read a named mlist
- * @param[in] _pstName variable name
- * @param[out] _piNbItem return number of items
- * @param[out] _piAddress return mlist address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readNamedMList(void* _pvCtx, const char* _pstName, int* _piNbItem, int** _piAddress);
-
-/**
- * Create a list in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos position of the created list in the parent list
- * @param[in] _iNbItem number of items in the created list
- * @param[out] _piAddress return new list address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createListInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress);
-
-/**
- * Create a tlist in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos position of the created tlist in the parent list
- * @param[in] _iNbItem number of items in the created tlist
- * @param[out] _piAddress return new tlist address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createTListInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress);
-
-/**
- * Create an mlist in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos position of the created mlist in the parent list
- * @param[in] _iNbItem number of items in the created mlist
- * @param[out] _piAddress return new mlist address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMListInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress);
-
-/**
- * Create a list in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos position of the created list in the parent list
- * @param[in] _iNbItem number of items in the created list
- * @param[out] _piAddress return new list address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress);
-
-/**
- * Create a tlist in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos position of the created tlist in the parent list
- * @param[in] _iNbItem number of items in the created tlist
- * @param[out] _piAddress return new tlist address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createTListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress);
-
-/**
- * Create an mlist in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos position of the created mlist in the parent list
- * @param[in] _iNbItem number of items in the created mlist
- * @param[out] _piAddress return new mlist address
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress);
-
-/*********************************
- * void and undefined functions  *
- *********************************/
-
-/**
- * Create a void item in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos position of the created mlist in the parent list
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createVoidInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos);
-
-/**
- * Create a undefined item in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos position of the created mlist in the parent list
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createUndefinedInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos);
-
-/*********************
- * double functions  *
- *********************/
-
-/**
- * Get double variable data from a list item
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @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 getMatrixOfDoubleInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, double** _pdblReal);
-
-/**
- * Get complex double variable data from a list item
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _pdblReal return pointer to real parts
- * @param[out] _pdblImg return pointer to imaginary parts
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getComplexMatrixOfDoubleInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, double** _pdblReal, double** _pdblImg);
-
-/**
- * Allocate a double variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @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 allocMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, double** _pdblReal);
-
-/**
- * Allocate a complex double variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[out] _pdblReal return pointer to real parts
- * @param[out] _pdblImg return pointer to imaginary parts
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr allocComplexMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, double** _pdblReal, double** _pdblImg);
-
-/**
- * Create a double variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @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 createMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const double* _pdblReal);
-
-/**
- * Create a complex double variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pdblReal pointer to real parts
- * @param[in] _pdblImg pointer to imaginary parts
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createComplexMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg);
-
-/**
- * Create a complex double variable (Z-representation) in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pdblData pointer to real data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createComplexZMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const doublecomplex* _pdblData);
-
-/**
- * Create a double variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @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 createMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const double* _pdblReal);
-
-/**
- * Create a complex double variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pdblReal pointer to real parts
- * @param[in] _pdblImg pointer to imaginary parts
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createComplexMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg);
-
-/**
- * Create a complex double variable (Z-representation) in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pdblData pointer to complex data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createComplexZMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const doublecomplex* _pdblData);
-
-/**
- * Read a double variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @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 readMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, double* _pdblReal);
-
-/**
- * Read a complex double variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _pdblReal return pointer to real parts
- * @param[out] _pdblImg return pointer to imaginary parts
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readComplexMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, double* _pdblReal, double* _pdblImg);
-
-/*********************
- * strings functions *
- *********************/
-
-/**
- * Get a string variable from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _piLength return strings length
- * @param[out] _pstStrings return array of char
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getMatrixOfStringInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piLength, char** _pstStrings);
-
-/**
- * Create a string variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pstStrings array of null-terminated strings
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfStringInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const char* const* _pstStrings);
-
-/**
- * Create a string variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pstStrings array of null-terminated strings
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfStringInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const char* const* _pstStrings);
-
-/**
- * Read a string variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _pstStrings return array of null-terminated strings
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readMatrixOfStringInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piLength, char** _pstStrings);
-
-/*********************
- * boolean functions *
- *********************/
-
-/**
- * Get a boolean variable from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _piBool return pointer to boolean data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getMatrixOfBooleanInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int** _piBool);
-
-/**
- * Allocate a boolean variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[out] _piBool return pointer to boolean data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr allocMatrixOfBooleanInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int** _piBool);
-
-/**
- * Create a boolean variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _piBool pointer to boolean data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfBooleanInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const int* _piBool);
-
-/**
- * Create a boolean variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _piBool pointer to boolean data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfBooleanInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const int* _piBool);
-
-/**
- * Read a boolean variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _piBool pointer to boolean data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readMatrixOfBooleanInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piBool);
-
-/*************************
- * polynomials functions *
- *************************/
-
-/**
- * Get a polynomial variable from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _piNbCoef return number of polynomial coefficients for each element
- * @param[out] _pdblReal return pointer to real polynomials coefficients
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getMatrixOfPolyInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbCoef, double** _pdblReal);
-
-/**
- * Get a complex polynomial variable from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _piNbCoef return number of polynomial coefficients for each element
- * @param[out] _pdblReal return pointer to real polynomials coefficients
- * @param[out] _pdblImg return pointer to imaginary polynomials coefficients
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getComplexMatrixOfPolyInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbCoef, double** _pdblReal, double** _pdblImg);
-
-/**
- * Create a polynomial variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _pstVarName polynomial variable name
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _piNbCoef number of polynomial coefficients for each element
- * @param[in] _pdblReal pointer to real polynomial coefficients
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfPolyInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, char* _pstVarName, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal);
-
-/**
- * Create a complex polynomial variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _pstVarName polynomial variable name
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _piNbCoef number of polynomial coefficients for each element
- * @param[in] _pdblReal pointer to real polynomial coefficients
- * @param[in] _pdblImg pointer to imaginary polynomial coefficients
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createComplexMatrixOfPolyInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, char* _pstVarName, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal, const double* const* _pdblImg);
-
-/**
- * Read a polynomial variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _piNbCoef return number of polynomial coefficients for each element
- * @param[out] _pdblReal return pointer to real polynomial coefficients
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbCoef, double** _pdblReal);
-
-/**
- * Read a complex polynomial variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _piNbCoef return number of polynomial coefficients for each element
- * @param[out] _pdblReal return pointer to real polynomial coefficients
- * @param[out] _pdblImg return pointer to imaginary polynomial coefficients
-* @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readComplexMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbCoef, double** _pdblReal, double** _pdblImg);
-
-/**
- * Create a polynomial variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _pstVarName polynomial variable name
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _piNbCoef number of polynomial coefficients for each element
- * @param[in] _pdblReal pointer to real polynomial coefficients
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, char* _pstVarName, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal);
-
-/**
- * Create a complex polynomial variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _pstVarName polynomial variable name
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _piNbCoef number of polynomial coefficients for each element
- * @param[in] _pdblReal pointer to real polynomial coefficients
- * @param[in] _pdblImg pointer to imaginary polynomial coefficients
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createComplexMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, char* _pstVarName, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal, const double* const* _pdblImg);
-
-/*********************
- * integer functions *
- *********************/
-
-/**
- * Create an 8-bit signed integer variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pcData pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfInteger8InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const char* _pcData);
-
-/**
- * Create an 8-bit unsigned integer variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pucData pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfUnsignedInteger8InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned char* _pucData);
-
-/**
- * Create a 16-bit signed integer variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _psData pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfInteger16InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const short* _psData);
-
-/**
- * Create a 16-bit unsigned integer variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pusData pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfUnsignedInteger16InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned short* _pusData);
-
-/**
- * Create a 32-bit signed integer variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _piData pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfInteger32InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const int* _piData);
-
-/**
- * Create a 32-bit unsigned integer variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _puiData pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfUnsignedInteger32InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned int* _puiData);
+    /**********************/
+    /*   list functions   */
+    /**********************/
+
+    /**
+     * Get the number of items in a list
+     * @param[in] _piAddress list address
+     * @param[out] _piNbItem return number of items
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getListItemNumber(void* _pvCtx, int* _piAddress, int* _piNbItem);
+
+    /**
+     * Get the address of an item in a list
+     * @param[in] _piAddress list address
+     * @param[in] _iItemNum item number
+     * @param[out] _piItemAddress return item address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getListItemAddress(void* _pvCtx, int* _piAddress, int _iItemNum, int** _piItemAddress);
+
+    /**
+     * Get a list from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos position of the retrieved list in the parent list
+     * @param[out] _piAddress return list address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getListInList(void* _pvCtx, int* _piParent, int _iItemPos, int** _piAddress);
+
+    /**
+     * Get a tlist from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos position of the retrieved tlist in the parent list
+     * @param[out] _piAddress return tlist address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getTListInList(void* _pvCtx, int* _piParent, int _iItemPos, int** _piAddress);
+
+    /**
+     * Get an mlist from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos position of the retrieved mlist in the parent list
+     * @param[out] _piAddress return mlist address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getMListInList(void* _pvCtx, int* _piParent, int _iItemPos, int** _piAddress);
+
+    /**
+     * Get a list from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos position of the retrieved list in the parent list
+     * @param[out] _piAddress return list address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int** _piAddress);
+
+    /**
+     * Get a tlist from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos position of the retrieved tlist in the parent list
+     * @param[out] _piAddress return tlist address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getTListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int** _piAddress);
+
+    /**
+     * Get an mlist from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos position of the retrieved mlist in the parent list
+     * @param[out] _piAddress return mlist address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getMListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int** _piAddress);
+
+    /**
+     * Create a list
+     * @param[in] _iVar variable number
+     * @param[in] _iNbItem number of items
+     * @param[out] _piAddress return list address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createList(void* _pvCtx, int _iVar, int _iNbItem, int** _piAddress);
+
+    /**
+     * Create a tlist
+     * @param[in] _iVar variable number
+     * @param[in] _iNbItem number of items
+     * @param[out] _piAddress return tlist address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createTList(void* _pvCtx, int _iVar, int _iNbItem, int** _piAddress);
+
+    /**
+     * Create an mlist
+     * @param[in] _iVar variable number
+     * @param[in] _iNbItem number of items
+     * @param[out] _piAddress return mlist address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMList(void* _pvCtx, int _iVar, int _iNbItem, int** _piAddress);
+
+    /**
+     * Create a named list
+     * @param[in] _pstName variable name
+     * @param[in] _iNbItem number of items
+     * @param[out] _piAddress return list address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createNamedList(void* _pvCtx, const char* _pstName, int _iNbItem, int** _piAddress);
+
+    /**
+     * Create a named tlist
+     * @param[in] _pstName variable name
+     * @param[in] _iNbItem number of items
+     * @param[out] _piAddress return tlist address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createNamedTList(void* _pvCtx, const char* _pstName, int _iNbItem, int** _piAddress);
+
+    /**
+     * Create a named mlist
+     * @param[in] _pstName variable name
+     * @param[in] _iNbItem number of items
+     * @param[out] _piAddress return mlist address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createNamedMList(void* _pvCtx, const char* _pstName, int _iNbItem, int** _piAddress);
+
+    /**
+     * Read a named list
+     * @param[in] _pstName variable name
+     * @param[out] _piNbItem return number of items
+     * @param[out] _piAddress return list address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readNamedList(void* _pvCtx, const char* _pstName, int* _piNbItem, int** _piAddress);
+
+    /**
+     * Read a named tlist
+     * @param[in] _pstName variable name
+     * @param[out] _piNbItem return number of items
+     * @param[out] _piAddress return tlist address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readNamedTList(void* _pvCtx, const char* _pstName, int* _piNbItem, int** _piAddress);
+
+    /**
+     * Read a named mlist
+     * @param[in] _pstName variable name
+     * @param[out] _piNbItem return number of items
+     * @param[out] _piAddress return mlist address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readNamedMList(void* _pvCtx, const char* _pstName, int* _piNbItem, int** _piAddress);
+
+    /**
+     * Create a list in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos position of the created list in the parent list
+     * @param[in] _iNbItem number of items in the created list
+     * @param[out] _piAddress return new list address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createListInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress);
+
+    /**
+     * Create a tlist in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos position of the created tlist in the parent list
+     * @param[in] _iNbItem number of items in the created tlist
+     * @param[out] _piAddress return new tlist address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createTListInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress);
+
+    /**
+     * Create an mlist in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos position of the created mlist in the parent list
+     * @param[in] _iNbItem number of items in the created mlist
+     * @param[out] _piAddress return new mlist address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMListInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress);
+
+    /**
+     * Create a list in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos position of the created list in the parent list
+     * @param[in] _iNbItem number of items in the created list
+     * @param[out] _piAddress return new list address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress);
+
+    /**
+     * Create a tlist in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos position of the created tlist in the parent list
+     * @param[in] _iNbItem number of items in the created tlist
+     * @param[out] _piAddress return new tlist address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createTListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress);
+
+    /**
+     * Create an mlist in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos position of the created mlist in the parent list
+     * @param[in] _iNbItem number of items in the created mlist
+     * @param[out] _piAddress return new mlist address
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress);
+
+    /*********************************
+     * void and undefined functions  *
+     *********************************/
+
+    /**
+     * Create a void item in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos position of the created mlist in the parent list
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createVoidInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos);
+
+    /**
+     * Create a undefined item in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos position of the created mlist in the parent list
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createUndefinedInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos);
+
+    /*********************
+     * double functions  *
+     *********************/
+
+    /**
+     * Get double variable data from a list item
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @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 getMatrixOfDoubleInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, double** _pdblReal);
+
+    /**
+     * Get complex double variable data from a list item
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _pdblReal return pointer to real parts
+     * @param[out] _pdblImg return pointer to imaginary parts
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getComplexMatrixOfDoubleInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, double** _pdblReal, double** _pdblImg);
+
+    /**
+     * Allocate a double variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @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 allocMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, double** _pdblReal);
+
+    /**
+     * Allocate a complex double variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[out] _pdblReal return pointer to real parts
+     * @param[out] _pdblImg return pointer to imaginary parts
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr allocComplexMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, double** _pdblReal, double** _pdblImg);
+
+    /**
+     * Create a double variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @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 createMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const double* _pdblReal);
+
+    /**
+     * Create a complex double variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pdblReal pointer to real parts
+     * @param[in] _pdblImg pointer to imaginary parts
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createComplexMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg);
+
+    /**
+     * Create a complex double variable (Z-representation) in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pdblData pointer to real data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createComplexZMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const doublecomplex* _pdblData);
+
+    /**
+     * Create a double variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @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 createMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const double* _pdblReal);
+
+    /**
+     * Create a complex double variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pdblReal pointer to real parts
+     * @param[in] _pdblImg pointer to imaginary parts
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createComplexMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg);
+
+    /**
+     * Create a complex double variable (Z-representation) in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pdblData pointer to complex data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createComplexZMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const doublecomplex* _pdblData);
+
+    /**
+     * Read a double variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @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 readMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, double* _pdblReal);
+
+    /**
+     * Read a complex double variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _pdblReal return pointer to real parts
+     * @param[out] _pdblImg return pointer to imaginary parts
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readComplexMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, double* _pdblReal, double* _pdblImg);
+
+    /*********************
+     * strings functions *
+     *********************/
+
+    /**
+     * Get a string variable from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _piLength return strings length
+     * @param[out] _pstStrings return array of char
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getMatrixOfStringInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piLength, char** _pstStrings);
+
+    /**
+     * Create a string variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pstStrings array of null-terminated strings
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfStringInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const char* const* _pstStrings);
+
+    /**
+     * Create a string variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pstStrings array of null-terminated strings
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfStringInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const char* const* _pstStrings);
+
+    /**
+     * Read a string variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _pstStrings return array of null-terminated strings
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readMatrixOfStringInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piLength, char** _pstStrings);
+
+    /*********************
+     * boolean functions *
+     *********************/
+
+    /**
+     * Get a boolean variable from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _piBool return pointer to boolean data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getMatrixOfBooleanInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int** _piBool);
+
+    /**
+     * Allocate a boolean variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[out] _piBool return pointer to boolean data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr allocMatrixOfBooleanInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int** _piBool);
+
+    /**
+     * Create a boolean variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _piBool pointer to boolean data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfBooleanInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const int* _piBool);
+
+    /**
+     * Create a boolean variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _piBool pointer to boolean data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfBooleanInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const int* _piBool);
+
+    /**
+     * Read a boolean variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _piBool pointer to boolean data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readMatrixOfBooleanInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piBool);
+
+    /*************************
+     * polynomials functions *
+     *************************/
+
+    /**
+     * Get a polynomial variable from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _piNbCoef return number of polynomial coefficients for each element
+     * @param[out] _pdblReal return pointer to real polynomials coefficients
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getMatrixOfPolyInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbCoef, double** _pdblReal);
+
+    /**
+     * Get a complex polynomial variable from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _piNbCoef return number of polynomial coefficients for each element
+     * @param[out] _pdblReal return pointer to real polynomials coefficients
+     * @param[out] _pdblImg return pointer to imaginary polynomials coefficients
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getComplexMatrixOfPolyInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbCoef, double** _pdblReal, double** _pdblImg);
+
+    /**
+     * Create a polynomial variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _pstVarName polynomial variable name
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _piNbCoef number of polynomial coefficients for each element
+     * @param[in] _pdblReal pointer to real polynomial coefficients
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfPolyInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, char* _pstVarName, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal);
+
+    /**
+     * Create a complex polynomial variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _pstVarName polynomial variable name
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _piNbCoef number of polynomial coefficients for each element
+     * @param[in] _pdblReal pointer to real polynomial coefficients
+     * @param[in] _pdblImg pointer to imaginary polynomial coefficients
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createComplexMatrixOfPolyInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, char* _pstVarName, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal, const double* const* _pdblImg);
+
+    /**
+     * Read a polynomial variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _piNbCoef return number of polynomial coefficients for each element
+     * @param[out] _pdblReal return pointer to real polynomial coefficients
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbCoef, double** _pdblReal);
+
+    /**
+     * Read a complex polynomial variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _piNbCoef return number of polynomial coefficients for each element
+     * @param[out] _pdblReal return pointer to real polynomial coefficients
+     * @param[out] _pdblImg return pointer to imaginary polynomial coefficients
+    * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readComplexMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbCoef, double** _pdblReal, double** _pdblImg);
+
+    /**
+     * Create a polynomial variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _pstVarName polynomial variable name
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _piNbCoef number of polynomial coefficients for each element
+     * @param[in] _pdblReal pointer to real polynomial coefficients
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, char* _pstVarName, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal);
+
+    /**
+     * Create a complex polynomial variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _pstVarName polynomial variable name
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _piNbCoef number of polynomial coefficients for each element
+     * @param[in] _pdblReal pointer to real polynomial coefficients
+     * @param[in] _pdblImg pointer to imaginary polynomial coefficients
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createComplexMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, char* _pstVarName, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal, const double* const* _pdblImg);
+
+    /*********************
+     * integer functions *
+     *********************/
+
+    /**
+     * Create an 8-bit signed integer variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pcData pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfInteger8InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const char* _pcData);
+
+    /**
+     * Create an 8-bit unsigned integer variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pucData pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfUnsignedInteger8InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned char* _pucData);
+
+    /**
+     * Create a 16-bit signed integer variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _psData pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfInteger16InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const short* _psData);
+
+    /**
+     * Create a 16-bit unsigned integer variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pusData pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfUnsignedInteger16InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned short* _pusData);
+
+    /**
+     * Create a 32-bit signed integer variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _piData pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfInteger32InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const int* _piData);
+
+    /**
+     * Create a 32-bit unsigned integer variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _puiData pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfUnsignedInteger32InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned int* _puiData);
 
 #ifdef __SCILAB_INT64__
 
-/**
- * Create a 64-bit signed integer variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pllData pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfInteger64InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const long long* _pllData);
-
-/**
- * Create a 64-bit unsigned integer variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pullData pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfUnsignedInteger64InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned long long* _pullData);
+    /**
+     * Create a 64-bit signed integer variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pllData pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfInteger64InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const long long* _pllData);
+
+    /**
+     * Create a 64-bit unsigned integer variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pullData pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfUnsignedInteger64InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned long long* _pullData);
 
 #endif
 
-/**
- * Allocate an 8-bit signed integer variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[out] _pcData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr allocMatrixOfInteger8InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, char** _pcData);
-
-/**
- * Allocate an 8-bit unsigned integer variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[out] _pucData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr allocMatrixOfUnsignedInteger8InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, unsigned char** _pucData);
-
-/**
- * Allocate a 16-bit signed integer variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[out] _psData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr allocMatrixOfInteger16InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, short** _psData);
-
-/**
- * Allocate a 16-bit unsigned integer variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[out] _pusData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr allocMatrixOfUnsignedInteger16InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, unsigned short** _pusData);
-
-/**
- * Allocate a 32-bit signed integer variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[out] _piData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr allocMatrixOfInteger32InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int** _piData);
-
-/**
- * Allocate a 32-bit unsigned integer variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[out] _puiData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr allocMatrixOfUnsignedInteger32InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, unsigned int** _puiData);
+    /**
+     * Allocate an 8-bit signed integer variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[out] _pcData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr allocMatrixOfInteger8InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, char** _pcData);
+
+    /**
+     * Allocate an 8-bit unsigned integer variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[out] _pucData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr allocMatrixOfUnsignedInteger8InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, unsigned char** _pucData);
+
+    /**
+     * Allocate a 16-bit signed integer variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[out] _psData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr allocMatrixOfInteger16InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, short** _psData);
+
+    /**
+     * Allocate a 16-bit unsigned integer variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[out] _pusData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr allocMatrixOfUnsignedInteger16InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, unsigned short** _pusData);
+
+    /**
+     * Allocate a 32-bit signed integer variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[out] _piData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr allocMatrixOfInteger32InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int** _piData);
+
+    /**
+     * Allocate a 32-bit unsigned integer variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[out] _puiData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr allocMatrixOfUnsignedInteger32InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, unsigned int** _puiData);
 
 #ifdef __SCILAB_INT64__
 
-/**
- * Allocate a 64-bit signed integer variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[out] _pllData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr allocMatrixOfInteger64InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, long long** _pllData);
-
-/**
- * Allocate a 64-bit unsigned integer variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[out] _pullData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr allocMatrixOfUnsignedInteger64InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, unsigned long long** _pullData);
+    /**
+     * Allocate a 64-bit signed integer variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[out] _pllData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr allocMatrixOfInteger64InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, long long** _pllData);
+
+    /**
+     * Allocate a 64-bit unsigned integer variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[out] _pullData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr allocMatrixOfUnsignedInteger64InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, unsigned long long** _pullData);
 
 #endif
 
-/**
- * Get an 8-bit signed integer variable from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _pcData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getMatrixOfInteger8InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, char** _pcData);
-
-/**
- * Get an 8-bit unsigned integer variable from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _pucData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getMatrixOfUnsignedInteger8InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned char** _pucData);
-
-/**
- * Get a 16-bit signed integer variable from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _psData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getMatrixOfInteger16InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, short** _psData);
-
-/**
- * Get a 16-bit unsigned integer variable from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _pusData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getMatrixOfUnsignedInteger16InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned short** _pusData);
-
-/**
- * Get a 32-bit signed integer variable from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _piData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getMatrixOfInteger32InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int** _piData);
-
-/**
- * Get a 32-bit unsigned integer variable from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _puiData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getMatrixOfUnsignedInteger32InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned int** _puiData);
+    /**
+     * Get an 8-bit signed integer variable from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _pcData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getMatrixOfInteger8InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, char** _pcData);
+
+    /**
+     * Get an 8-bit unsigned integer variable from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _pucData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getMatrixOfUnsignedInteger8InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned char** _pucData);
+
+    /**
+     * Get a 16-bit signed integer variable from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _psData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getMatrixOfInteger16InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, short** _psData);
+
+    /**
+     * Get a 16-bit unsigned integer variable from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _pusData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getMatrixOfUnsignedInteger16InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned short** _pusData);
+
+    /**
+     * Get a 32-bit signed integer variable from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _piData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getMatrixOfInteger32InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int** _piData);
+
+    /**
+     * Get a 32-bit unsigned integer variable from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _puiData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getMatrixOfUnsignedInteger32InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned int** _puiData);
 
 #ifdef __SCILAB_INT64__
 
-/**
- * Get a 64-bit signed integer variable from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _pllData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getMatrixOfInteger64InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, long long** _pllData);
-
-/**
- * Get a 64-bit unsigned integer variable from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _pllData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getMatrixOfUnsignedInteger64InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned long long** _pullData);
+    /**
+     * Get a 64-bit signed integer variable from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _pllData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getMatrixOfInteger64InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, long long** _pllData);
+
+    /**
+     * Get a 64-bit unsigned integer variable from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _pllData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getMatrixOfUnsignedInteger64InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned long long** _pullData);
 
 #endif
 
-/**
- * Create an 8-bit signed integer variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pcData pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfInteger8InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const char* _pcData);
-
-/**
- * Create an 8-bit unsigned integer variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pucData pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfUnsignedInteger8InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned char* _pucData);
-
-/**
- * Create a 16-bit signed integer variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _psData pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfInteger16InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const short* _psData);
-
-/**
- * Create a 16-bit unsigned integer variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pusData pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfUnsignedInteger16InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned short* _pusData);
-
-/**
- * Create a 32-bit signed integer variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _piData pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfInteger32InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const int* _piData);
-
-/**
- * Create a 32-bit unsigned integer variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _puiData pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfUnsignedInteger32InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned int* _puiData);
+    /**
+     * Create an 8-bit signed integer variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pcData pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfInteger8InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const char* _pcData);
+
+    /**
+     * Create an 8-bit unsigned integer variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pucData pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfUnsignedInteger8InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned char* _pucData);
+
+    /**
+     * Create a 16-bit signed integer variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _psData pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfInteger16InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const short* _psData);
+
+    /**
+     * Create a 16-bit unsigned integer variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pusData pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfUnsignedInteger16InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned short* _pusData);
+
+    /**
+     * Create a 32-bit signed integer variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _piData pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfInteger32InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const int* _piData);
+
+    /**
+     * Create a 32-bit unsigned integer variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _puiData pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfUnsignedInteger32InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned int* _puiData);
 
 #ifdef __SCILAB_INT64__
 
-/**
- * Create a 64-bit signed integer variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pllData pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfInteger64InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const long long* _pllData);
-
-/**
- * Create a 64-bit unsigned integer variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _pullData pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createMatrixOfUnsignedInteger64InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned long long* _pullData);
+    /**
+     * Create a 64-bit signed integer variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pllData pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfInteger64InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const long long* _pllData);
+
+    /**
+     * Create a 64-bit unsigned integer variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _pullData pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createMatrixOfUnsignedInteger64InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned long long* _pullData);
 #endif
 
-/**
- * Read an 8-bit signed integer variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _pcData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readMatrixOfIntger8InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, char* _pcData);
-
-/**
- * Read an 8-bit unsigned integer variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _pucData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readMatrixOfUnsignedInteger8InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned char* _pucData);
-
-/**
- * Read a 16-bit signed integer variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _psData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readMatrixOfIntger16InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, short* _psData);
-
-/**
- * Read a 16-bit unsigned integer variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _pusData return pointert to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readMatrixOfUnsignedInteger16InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned short* _pusData);
-
-/**
- * Read a 32-bit signed integer variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _piData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readMatrixOfIntger32InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piData);
-
-/**
- * Read a 32-bit unsigned integer variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _puiData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readMatrixOfUnsignedInteger32InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned int* _puiData);
+    /**
+     * Read an 8-bit signed integer variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _pcData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readMatrixOfIntger8InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, char* _pcData);
+
+    /**
+     * Read an 8-bit unsigned integer variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _pucData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readMatrixOfUnsignedInteger8InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned char* _pucData);
+
+    /**
+     * Read a 16-bit signed integer variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _psData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readMatrixOfIntger16InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, short* _psData);
+
+    /**
+     * Read a 16-bit unsigned integer variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _pusData return pointert to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readMatrixOfUnsignedInteger16InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned short* _pusData);
+
+    /**
+     * Read a 32-bit signed integer variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _piData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readMatrixOfIntger32InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piData);
+
+    /**
+     * Read a 32-bit unsigned integer variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _puiData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readMatrixOfUnsignedInteger32InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned int* _puiData);
 
 #ifdef __SCILAB_INT64__
 
-/**
- * Read a 64-bit signed integer variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows number of rows
- * @param[out] _piCols number of columns
- * @param[out] _pllData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readMatrixOfIntger64InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, long long* _pllData);
-
-/**
- * Read a 64-bit unsigned integer variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows number of rows
- * @param[out] _piCols number of columns
- * @param[out] _pullData return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readMatrixOfUnsignedInteger64InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned long long* _pullData);
+    /**
+     * Read a 64-bit signed integer variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows number of rows
+     * @param[out] _piCols number of columns
+     * @param[out] _pllData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readMatrixOfIntger64InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, long long* _pllData);
+
+    /**
+     * Read a 64-bit unsigned integer variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows number of rows
+     * @param[out] _piCols number of columns
+     * @param[out] _pullData return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readMatrixOfUnsignedInteger64InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned long long* _pullData);
 #endif
 
-/********************
- * sparse functions *
- ********************/
-
-/**
- * Create a double sparse variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _iNbItem number of items
- * @param[in] _piNbItemRow number of items for each row
- * @param[in] _piColPos array of item column positions ( 1 indexed )
- * @param[in] _pdblReal pointer to real data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createSparseMatrixInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal);
-
-/**
- * Create a complex sparse variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _iNbItem number of items
- * @param[in] _piNbItemRow number of items for each row
- * @param[in] _piColPos array of item column positions ( 1 indexed )
- * @param[in] _pdblReal pointer to real parts
- * @param[in] _pdblImg pointer to imaginary parts
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createComplexSparseMatrixInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal, const double* _pdblImg);
-
-/**
- * Create a double sparse variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _iNbItem number of items
- * @param[in] _piNbItemRow number of items for each row
- * @param[in] _piColPos array of item column positions ( 1 indexed )
- * @param[in] _pdblReal pointer to real data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal);
-
-/**
- * Create a complex sparse variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _iNbItem number of items
- * @param[in] _piNbItemRow number of items for each row
- * @param[in] _piColPos array of item column positions ( 1 indexed )
- * @param[in] _pdblReal pointer to real parts
- * @param[in] _pdblImg pointer to imaginary parts
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createComplexSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal, const double* _pdblImg);
-
-/**
- * Get a double sparse variable from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _piNbItem return number of items
- * @param[out] _piNbItemRow return number of items for each row
- * @param[out] _piColPos return array of item column positions ( 1 indexed )
- * @param[out] _pdblReal return pointer to data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getSparseMatrixInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int** _piNbItemRow, int** _piColPos, double** _pdblReal);
-
-/**
- * Get a complex sparse variable from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _piNbItem return number of items
- * @param[out] _piNbItemRow return number of items for each row
- * @param[out] _piColPos return array of item column positions ( 1 indexed )
- * @param[out] _pdblReal return pointer to real parts
- * @param[out] _pdblImg return pointer to imaginary parts
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getComplexSparseMatrixInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int** _piNbItemRow, int** _piColPos, double** _pdblReal, double** _pdblImg);
-
-/**
- * Read a double sparse variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _piNbItem return number of item
- * @param[out] _piNbItemRow return number of items for each row
- * @param[out] _piColPos return array of item column positions ( 1 indexed )
- * @param[out] _pdblReal return pointer to real data
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int* _piNbItemRow, int* _piColPos, double* _pdblReal);
-
-/**
- * Read a complex sparse variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _piNbItem return number of items
- * @param[out] _piNbItemRow return number of items for each row
- * @param[out] _piColPos return array of item column positions ( 1 indexed )
- * @param[out] _pdblReal return pointer to real parts
- * @param[out] _pdblImg return pointer to imaginary parts
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readComplexSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int* _piNbItemRow, int* _piColPos, double* _pdblReal, double* _pdblImg);
-
-
-/****************************
- * boolean sparse functions *
- ****************************/
-
-/**
- * Create a boolean sparse variable in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _iNbItem number of items
- * @param[in] _piNbItemRow number of items for each row
- * @param[in] _piColPos array of column positions of "true" elements ( 1 indexed )
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createBooleanSparseMatrixInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos);
-
-/**
- * Create a boolean sparse variable in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _iRows number of rows
- * @param[in] _iCols number of columns
- * @param[in] _iNbItem number of items
- * @param[in] _piNbItemRow number of items for each row
- * @param[in] _piColPos array of column positions of "true" elements ( 1 indexed )
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createBooleanSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos);
-
-/**
- * Get a boolean sparse variable from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _piNbItem return number of items
- * @param[out] _piNbItemRow return number of items for each row
- * @param[out] _piColPos return array of column positions of "true" elements ( 1 indexed )
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getBooleanSparseMatrixInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int** _piNbItemRow, int** _piColPos);
-
-/**
- * Read a boolean sparse variable from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _piRows return number of rows
- * @param[out] _piCols return number of columns
- * @param[out] _piNbItem return number of items
- * @param[out] _piNbItemRow number of items for each row
- * @param[out] _piColPos return array of column positions of "true" elements ( 1 indexed )
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readBooleanSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int* _piNbItemRow, int* _piColPos);
-
-/*********************
- * pointer functions *
- *********************/
-
-/**
- * Get a pointer from a list
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _pvPtr return pointer value
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr getPointerInList(void* _pvCtx, int* _piParent, int _iItemPos, void** _pvPtr);
-
-/**
- * Create a pointer in a list
- * @param[in] _iVar variable number
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _pvPtr return pointer value
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createPointerInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, void* _pvPtr);
-
-/**
- * Read a pointer from a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[out] _pvPtr return pointer value
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr readPointerInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, void** _pvPtr);
-
-/**
- * Create a pointer in a named list
- * @param[in] _pstName variable name
- * @param[in] _piParent pointer to the parent
- * @param[in] _iItemPos item position in the parent list
- * @param[in] _pvPtr pointer value
- * @return if the operation succeeded ( 0 ) or not ( !0 )
- */
-SciErr createPointerInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, void* _pvPtr);
+    /********************
+     * sparse functions *
+     ********************/
+
+    /**
+     * Create a double sparse variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _iNbItem number of items
+     * @param[in] _piNbItemRow number of items for each row
+     * @param[in] _piColPos array of item column positions ( 1 indexed )
+     * @param[in] _pdblReal pointer to real data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createSparseMatrixInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal);
+
+    /**
+     * Create a complex sparse variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _iNbItem number of items
+     * @param[in] _piNbItemRow number of items for each row
+     * @param[in] _piColPos array of item column positions ( 1 indexed )
+     * @param[in] _pdblReal pointer to real parts
+     * @param[in] _pdblImg pointer to imaginary parts
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createComplexSparseMatrixInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal, const double* _pdblImg);
+
+    /**
+     * Create a double sparse variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _iNbItem number of items
+     * @param[in] _piNbItemRow number of items for each row
+     * @param[in] _piColPos array of item column positions ( 1 indexed )
+     * @param[in] _pdblReal pointer to real data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal);
+
+    /**
+     * Create a complex sparse variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _iNbItem number of items
+     * @param[in] _piNbItemRow number of items for each row
+     * @param[in] _piColPos array of item column positions ( 1 indexed )
+     * @param[in] _pdblReal pointer to real parts
+     * @param[in] _pdblImg pointer to imaginary parts
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createComplexSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal, const double* _pdblImg);
+
+    /**
+     * Get a double sparse variable from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _piNbItem return number of items
+     * @param[out] _piNbItemRow return number of items for each row
+     * @param[out] _piColPos return array of item column positions ( 1 indexed )
+     * @param[out] _pdblReal return pointer to data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getSparseMatrixInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int** _piNbItemRow, int** _piColPos, double** _pdblReal);
+
+    /**
+     * Get a complex sparse variable from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _piNbItem return number of items
+     * @param[out] _piNbItemRow return number of items for each row
+     * @param[out] _piColPos return array of item column positions ( 1 indexed )
+     * @param[out] _pdblReal return pointer to real parts
+     * @param[out] _pdblImg return pointer to imaginary parts
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getComplexSparseMatrixInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int** _piNbItemRow, int** _piColPos, double** _pdblReal, double** _pdblImg);
+
+    /**
+     * Read a double sparse variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _piNbItem return number of item
+     * @param[out] _piNbItemRow return number of items for each row
+     * @param[out] _piColPos return array of item column positions ( 1 indexed )
+     * @param[out] _pdblReal return pointer to real data
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int* _piNbItemRow, int* _piColPos, double* _pdblReal);
+
+    /**
+     * Read a complex sparse variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _piNbItem return number of items
+     * @param[out] _piNbItemRow return number of items for each row
+     * @param[out] _piColPos return array of item column positions ( 1 indexed )
+     * @param[out] _pdblReal return pointer to real parts
+     * @param[out] _pdblImg return pointer to imaginary parts
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readComplexSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int* _piNbItemRow, int* _piColPos, double* _pdblReal, double* _pdblImg);
+
+
+    /****************************
+     * boolean sparse functions *
+     ****************************/
+
+    /**
+     * Create a boolean sparse variable in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _iNbItem number of items
+     * @param[in] _piNbItemRow number of items for each row
+     * @param[in] _piColPos array of column positions of "true" elements ( 1 indexed )
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createBooleanSparseMatrixInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos);
+
+    /**
+     * Create a boolean sparse variable in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _iRows number of rows
+     * @param[in] _iCols number of columns
+     * @param[in] _iNbItem number of items
+     * @param[in] _piNbItemRow number of items for each row
+     * @param[in] _piColPos array of column positions of "true" elements ( 1 indexed )
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createBooleanSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos);
+
+    /**
+     * Get a boolean sparse variable from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _piNbItem return number of items
+     * @param[out] _piNbItemRow return number of items for each row
+     * @param[out] _piColPos return array of column positions of "true" elements ( 1 indexed )
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getBooleanSparseMatrixInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int** _piNbItemRow, int** _piColPos);
+
+    /**
+     * Read a boolean sparse variable from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _piRows return number of rows
+     * @param[out] _piCols return number of columns
+     * @param[out] _piNbItem return number of items
+     * @param[out] _piNbItemRow number of items for each row
+     * @param[out] _piColPos return array of column positions of "true" elements ( 1 indexed )
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readBooleanSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int* _piNbItemRow, int* _piColPos);
+
+    /*********************
+     * pointer functions *
+     *********************/
+
+    /**
+     * Get a pointer from a list
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _pvPtr return pointer value
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr getPointerInList(void* _pvCtx, int* _piParent, int _iItemPos, void** _pvPtr);
+
+    /**
+     * Create a pointer in a list
+     * @param[in] _iVar variable number
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _pvPtr return pointer value
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createPointerInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, void* _pvPtr);
+
+    /**
+     * Read a pointer from a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[out] _pvPtr return pointer value
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr readPointerInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, void** _pvPtr);
+
+    /**
+     * Create a pointer in a named list
+     * @param[in] _pstName variable name
+     * @param[in] _piParent pointer to the parent
+     * @param[in] _iItemPos item position in the parent list
+     * @param[in] _pvPtr pointer value
+     * @return if the operation succeeded ( 0 ) or not ( !0 )
+     */
+    SciErr createPointerInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, void* _pvPtr);
 
 #ifdef __cplusplus
 }
index 6cd90e6..24b99c6 100644 (file)
@@ -1,17 +1,21 @@
 /*
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2009 - DIGITEO - 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.
- */
+* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+* Copyright (C) 2009 - DIGITEO - 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.
+*/
+
+#include <vector>
+#include <map>
+#include <string>
 
 #include "stdio.h"
 #include "MALLOC.h"
@@ -38,7 +42,7 @@
 
 //internal functions
 static SciErr createCommonList(void* _pvCtx, int _iVar, int _iListType, int _iNbItem, int** _piAddress);
-static SciErr createCommonListInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iListType, int _iNbItem, int** _piAddress, int iNamed);
+static SciErr createCommonListInList(void* _pvCtx, int _iVar, const char* _pstName, int* _piParent, int _iItemPos, int _iListType, int _iNbItem, int** _piAddress, int iNamed);
 static SciErr createCommonNamedList(void* _pvCtx, const char* _pstName, int _iListType, int _iNbItem, int** _piAddress);
 static SciErr createCommonListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iListType, int _iNbItem, int** _piAddress);
 static SciErr getCommonListInList(void* _pvCtx, int* _piParent, int _iItemPos, int _iListType, int** _piAddress);
@@ -49,8 +53,8 @@ static int isKindOfList(int* _piNode);
 static int getParentList(void* _pvCtx, int* _piStart, int* _piToFind, int* _piDepth, int** _piParent);
 static void closeList(int _iVar, int *_piEnd);
 static void updateListOffset(void* _pvCtx, int _iVar, int *_piCurrentNode, int _iItemPos, int *_piEnd);
-static void updateNamedListOffset(void* _pvCtx, int _iVar, int *_piCurrentNode, int _iItemPos, int *_piEnd);
-static void updateCommunListOffset(void* _pvCtx, int _iVar, int *_piCurrentNode, int _iItemPos, int *_piEnd);
+static void updateNamedListOffset(void* _pvCtx, int _iVar, const char* _pstName, int *_piCurrentNode, int _iItemPos, int *_piEnd);
+static void updateCommunListOffset(void* _pvCtx, int _iVar, const char* _pstName, int *_piCurrentNode, int _iItemPos, int *_piEnd);
 
 static SciErr allocCommonMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iComplex, int _iRows, int _iCols, double **_pdblReal, double **_pdblImg);
 static SciErr getCommonMatrixOfDoubleInList(void* _pvCtx, int* _piParent, int _iItemPos, int _iComplex, int* _piRows, int* _piCols, double** _pdblReal, double** _pdblImg);
@@ -70,122 +74,332 @@ static SciErr readCommonSparseMatrixInNamedList(void* _pvCtx, const char* _pstNa
 static SciErr createCommonSparseMatrixInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iComplex, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal, const double* _pdblImg);
 static SciErr createCommonSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iComplex, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal, const double* _pdblImg);
 
+struct ListInfo
+{
+    ListInfo(int* _piAddr, int _iLast) : m_piAddr(_piAddr), m_iLast(_iLast) {};
+    int* m_piAddr;
+    int m_iLast;
+};
+
+typedef std::vector<ListInfo*> VectListInfo;
+typedef std::map<int, VectListInfo*> StackList;
+typedef std::map<std::string, VectListInfo*> StackNamedList;
+static StackList stackListPosition;
+static StackNamedList stackNamedListPosition;
+
+
+// Push a list address on the stackListPosition
+static void pushListAddress(int _iRhsPos, int* _piAddr, int _iLast)
+{
+    if (stackListPosition.find(_iRhsPos) == stackListPosition.end())
+    {
+        VectListInfo* pVect = new VectListInfo();
+        pVect->push_back(new ListInfo(_piAddr, _iLast));
+        stackListPosition[_iRhsPos] = pVect;
+    }
+    else
+    {
+        stackListPosition[_iRhsPos]->push_back(new ListInfo(_piAddr, _iLast));
+    }
+}
+
+static void pushNamedListAddress(std::string _stNamedList, int* _piAddr, int _iLast)
+{
+    if (stackNamedListPosition.find(_stNamedList) == stackNamedListPosition.end())
+    {
+        VectListInfo* pVect = new VectListInfo();
+        pVect->push_back(new ListInfo(_piAddr, _iLast));
+        stackNamedListPosition[_stNamedList] = pVect;
+    }
+    else
+    {
+        stackNamedListPosition[_stNamedList]->push_back(new ListInfo(_piAddr, _iLast));
+    }
+}
+
+// Pop a list address from the stackListPosition
+static void popListAddress(int _iRhsPos)
+{
+    StackList::iterator it = stackListPosition.find(_iRhsPos);
+    if (it != stackListPosition.end())
+    {
+        delete it->second->back();
+        stackListPosition[_iRhsPos]->pop_back();
+    }
+}
+
+static void popNamedListAddress(std::string _stNamedList)
+{
+
+    StackNamedList::iterator it = stackNamedListPosition.find(_stNamedList);
+    if (it != stackNamedListPosition.end())
+    {
+        delete it->second->back();
+        stackNamedListPosition[_stNamedList]->pop_back();
+        if (it->second->size() > 0 && it->second->back()->m_iLast == 1)
+        {
+            //close cascade
+            popNamedListAddress(_stNamedList);
+        }
+
+        if (stackNamedListPosition[_stNamedList]->empty())
+        {
+            int iVarID[nsiz];
+            stackNamedListPosition.erase(stackNamedListPosition.find(_stNamedList));
+            C2F(str2name)(_stNamedList.c_str(), iVarID, (unsigned long)_stNamedList.size());
+            createNamedVariable(iVarID);
+        }
+    }
+}
+
+/*get last store address*/
+static int* getLastListAddress(int _iRhsPos)
+{
+    StackList::iterator it = stackListPosition.find(_iRhsPos);
+    if (it == stackListPosition.end() || it->second->empty())
+    {
+        return NULL;
+    }
+    return it->second->back()->m_piAddr;
+}
+
+static int* getLastNamedListAddress(std::string _stNamedList, int _iItemPos)
+{
+    StackNamedList::iterator it = stackNamedListPosition.find(_stNamedList);
+    if (it == stackNamedListPosition.end() || it->second->empty())
+    {
+        return NULL;
+    }
+
+    if (_iItemPos == it->second->back()->m_piAddr[1])
+    {
+        it->second->back()->m_iLast = 1;
+    }
+
+    return it->second->back()->m_piAddr;
+}
+
+
+//get address list
+static void getListAdressses(int _iRhsPos, int** _piAddresses)
+{
+    StackList::iterator it = stackListPosition.find(_iRhsPos);
+    if (it == stackListPosition.end() || it->second->empty() || _piAddresses == NULL)
+    {
+        return;
+    }
+
+    VectListInfo::iterator vit;
+    int i = 0;
+    for (vit = it->second->begin() ; vit != it->second->end() ; vit++, i++)
+    {
+        _piAddresses[i] = (*vit)->m_piAddr;
+    }
+}
+
+static void getNamedListAdressses(std::string _stName, int** _piAddresses)
+{
+    StackNamedList::iterator it = stackNamedListPosition.find(_stName);
+    if (it == stackNamedListPosition.end() || it->second->empty() || _piAddresses == NULL)
+    {
+        return;
+    }
+
+    VectListInfo::iterator vit;
+    int i = 0;
+    for (vit = it->second->begin() ; vit != it->second->end() ; vit++, i++)
+    {
+        _piAddresses[i] = (*vit)->m_piAddr;
+    }
+}
+
+//get Depth of list
+static int getDepthList(int _iRhsPos)
+{
+    StackList::iterator it = stackListPosition.find(_iRhsPos);
+    if (it == stackListPosition.end() || it->second->empty())
+    {
+        return 0;
+    }
+    return (int)it->second->size();
+}
+
+static int getDepthNamedList(std::string _stNamedList)
+{
+    StackNamedList::iterator it = stackNamedListPosition.find(_stNamedList);
+    if (it == stackNamedListPosition.end() || it->second->empty())
+    {
+        return 0;
+    }
+    return (int)it->second->size();
+}
+
+// Clean the stackListPosition
+static void cleanStackListAddress(int _iRhsPos)
+{
+    StackList::iterator it = stackListPosition.find(_iRhsPos);
+    if (it != stackListPosition.end())
+    {
+        while (it->second->empty() == false)
+        {
+            popListAddress(_iRhsPos);
+        }
+        stackListPosition.erase(it);
+    }
+}
+
+static void cleanStackListAddress(std::string _stNamedList)
+{
+    StackNamedList::iterator it = stackNamedListPosition.find(_stNamedList);
+    if (it != stackNamedListPosition.end())
+    {
+        while (it->second->empty() == false)
+        {
+            popNamedListAddress(_stNamedList);
+        }
+        stackNamedListPosition.erase(it);
+    }
+}
+
 char* getListTypeName(int _iType)
 {
-       switch(_iType)
-       {
-       case sci_list :
-               return "list";
-               break;
-       case sci_tlist :
-               return "tlist";
-               break;
-       case sci_mlist :
-               return "mlist";
-               break;
-       default:
-               break;
-       }
-       return "";
+    switch (_iType)
+    {
+        case sci_list :
+            return "list";
+            break;
+        case sci_tlist :
+            return "tlist";
+            break;
+        case sci_mlist :
+            return "mlist";
+            break;
+        default:
+            break;
+    }
+    return "";
 }
+
 SciErr getListItemNumber(void* _pvCtx, int* _piAddress, int* _piNbItem)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iType       = 0;
-
-       sciErr = getVarType(_pvCtx, _piAddress, &iType);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_LIST_ITEM_NUMBER, _("%s: Unable to get item number of list"), "getListItemNumber");
-               return sciErr;
-       }
-       switch(iType)
-       {
-       case sci_list :
-       case sci_mlist :
-       case sci_tlist :
-               *_piNbItem = _piAddress[1];
-               break;
-       default :
-               addErrorMessage(&sciErr, API_ERROR_INVALID_LIST_TYPE, _("%s: Invalid argument type, %s excepted"), "getListItemNumber", _("list"));
-               return sciErr;
-       }
-       return sciErr;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iType = 0;
+
+    sciErr = getVarType(_pvCtx, _piAddress, &iType);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_LIST_ITEM_NUMBER, _("%s: Unable to get item number of list"), "getListItemNumber");
+        return sciErr;
+    }
+    switch (iType)
+    {
+        case sci_list :
+        case sci_mlist :
+        case sci_tlist :
+            *_piNbItem = _piAddress[1];
+            break;
+        default :
+            addErrorMessage(&sciErr, API_ERROR_INVALID_LIST_TYPE, _("%s: Invalid argument type, %s excepted"), "getListItemNumber", _("list"));
+            return sciErr;
+    }
+    return sciErr;
 }
 
 SciErr getListItemAddress(void* _pvCtx, int* _piAddress, int _iItemNum, int** _piItemAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iItem                                               = 0;
-       int* piOffset                           = NULL;
-       int* piItemAddress      = NULL;
-
-       //get item count
-       sciErr = getListItemNumber(_pvCtx, _piAddress, &iItem);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_ITEM_ADDRESS, _("%s: Unable to get address of item #%d in argument #%d"), "getListItemAddress", _iItemNum + 1, getRhsFromAddress(_pvCtx, _piAddress));
-               return sciErr;
-       }
-
-       if(_iItemNum > iItem)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_ITEM_ADDRESS, _("%s: Unable to get address of item #%d in argument #%d"), "getListItemAddress", _iItemNum + 1, getRhsFromAddress(_pvCtx, _piAddress));
-               return sciErr;
-       }
-
-       //get offset of item array
-       piOffset                                =        _piAddress + 2;
-    if(piOffset[_iItemNum] == piOffset[_iItemNum - 1])
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iItem      = 0;
+    int* piOffset    = NULL;
+    int* piItemAddress = NULL;
+
+    //get item count
+    sciErr = getListItemNumber(_pvCtx, _piAddress, &iItem);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_ITEM_ADDRESS, _("%s: Unable to get address of item #%d in argument #%d"), "getListItemAddress", _iItemNum + 1, getRhsFromAddress(_pvCtx, _piAddress));
+        return sciErr;
+    }
+
+    if (_iItemNum > iItem)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_ITEM_ADDRESS, _("%s: Unable to get address of item #%d in argument #%d"), "getListItemAddress", _iItemNum + 1, getRhsFromAddress(_pvCtx, _piAddress));
+        return sciErr;
+    }
+
+    //get offset of item array
+    piOffset    =  _piAddress + 2;
+    if (piOffset[_iItemNum] == piOffset[_iItemNum - 1])
     {
         *_piItemAddress = NULL;
     }
     else
     {
-           piItemAddress       = piOffset + iItem  + 1 + !(iItem % 2);
-           *_piItemAddress     = piItemAddress + (piOffset[_iItemNum - 1] - 1) * (sizeof(double) / sizeof(int));
+        piItemAddress = piOffset + iItem  + 1 + !(iItem % 2);
+        *_piItemAddress = piItemAddress + (piOffset[_iItemNum - 1] - 1) * (sizeof(double) / sizeof(int));
     }
-       return sciErr;
+    return sciErr;
 }
 
 SciErr createList(void* _pvCtx, int _iVar, int _iNbItem, int** _piAddress)
 {
-       return createCommonList(_pvCtx, _iVar, sci_list, _iNbItem, _piAddress);
+    return createCommonList(_pvCtx, _iVar, sci_list, _iNbItem, _piAddress);
 }
 
 SciErr createMList(void* _pvCtx, int _iVar, int _iNbItem, int** _piAddress)
 {
-       return createCommonList(_pvCtx, _iVar, sci_mlist, _iNbItem, _piAddress);
+    return createCommonList(_pvCtx, _iVar, sci_mlist, _iNbItem, _piAddress);
 }
 
 SciErr createTList(void* _pvCtx, int _iVar, int _iNbItem, int** _piAddress)
 {
-       return createCommonList(_pvCtx, _iVar, sci_tlist, _iNbItem, _piAddress);
+    return createCommonList(_pvCtx, _iVar, sci_tlist, _iNbItem, _piAddress);
 }
 
 SciErr createNamedList(void* _pvCtx, const char* _pstName, int _iNbItem, int** _piAddress)
 {
-       return createCommonNamedList(_pvCtx, _pstName, sci_list, _iNbItem, _piAddress);
+    return createCommonNamedList(_pvCtx, _pstName, sci_list, _iNbItem, _piAddress);
 }
 
 SciErr createNamedTList(void* _pvCtx, const char* _pstName, int _iNbItem, int** _piAddress)
 {
-       return createCommonNamedList(_pvCtx, _pstName, sci_tlist, _iNbItem, _piAddress);
+    return createCommonNamedList(_pvCtx, _pstName, sci_tlist, _iNbItem, _piAddress);
 }
 
 SciErr createNamedMList(void* _pvCtx, const char* _pstName, int _iNbItem, int** _piAddress)
 {
-       return createCommonNamedList(_pvCtx, _pstName, sci_mlist, _iNbItem, _piAddress);
+    return createCommonNamedList(_pvCtx, _pstName, sci_mlist, _iNbItem, _piAddress);
+}
+
+SciErr createNamedList(void* _pvCtx, const char* _pstName, int _iNbItem, int** _piAddress, bool useStack)
+{
+
+    return createCommonNamedList(_pvCtx, _pstName, sci_list, _iNbItem, _piAddress);
+}
+
+SciErr createNamedTList(void* _pvCtx, const char* _pstName, int _iNbItem, int** _piAddress, bool useStack)
+{
+    return createCommonNamedList(_pvCtx, _pstName, sci_tlist, _iNbItem, _piAddress);
+}
+
+SciErr createNamedMList(void* _pvCtx, const char* _pstName, int _iNbItem, int** _piAddress, bool useStack)
+{
+    return createCommonNamedList(_pvCtx, _pstName, sci_mlist, _iNbItem, _piAddress);
 }
 
 static SciErr createCommonNamedList(void* _pvCtx, const char* _pstName, int _iListType, int _iNbItem, int** _piAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iVarID[nsiz];
-    int iSaveRhs                       = Rhs;
-       int iSaveTop                    = Top;
-       int *piAddr                             = NULL;
-       int* piEnd                              = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iVarID[nsiz];
+    int iSaveRhs   = Rhs;
+    int iSaveTop   = Top;
+    int *piAddr    = NULL;
+    int* piEnd    = NULL;
 
     if (!checkNamedVarFormat(_pvCtx, _pstName))
     {
@@ -196,286 +410,302 @@ static SciErr createCommonNamedList(void* _pvCtx, const char* _pstName, int _iLi
     C2F(str2name)(_pstName, iVarID, (unsigned long)strlen(_pstName));
     Top = Top + Nbvars + 1;
 
-       getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
-       
-       sciErr = fillCommonList(_pvCtx, piAddr, _iListType, _iNbItem);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_NAMED_LIST,_("%s: Unable to create %s named \"%s\""), "createNamedList", getListTypeName(_iListType), _pstName);
-               return sciErr;
-       }
+    getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
+
+    sciErr = fillCommonList(_pvCtx, piAddr, _iListType, _iNbItem);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_NAMED_LIST, _("%s: Unable to create %s named \"%s\""), "createNamedList", getListTypeName(_iListType), _pstName);
+        return sciErr;
+    }
 
-       piEnd = piAddr + 3 + _iNbItem + !(_iNbItem % 2);
-       closeList(Top, piEnd);
+    piEnd = piAddr + 3 + _iNbItem + !(_iNbItem % 2);
+    closeList(Top, piEnd);
 
+    Rhs = 0;
 
-       Rhs = 0;
-       
-       if(_iNbItem == 0)
-       {//Add name in stack reference list
-               createNamedVariable(iVarID);
-       }
+    if (_iNbItem != 0)
+    {
+        pushNamedListAddress(_pstName, piAddr, 0);
+    }
 
-       Top                                             = iSaveTop;
-  Rhs                                          = iSaveRhs;
+    Top      = iSaveTop;
+    Rhs      = iSaveRhs;
 
-       *_piAddress = piAddr;
-       return sciErr;
+    *_piAddress = piAddr;
+    return sciErr;
 }
 
 static SciErr createCommonList(void* _pvCtx, int _iVar, int _iListType, int _iNbItem, int** _piAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int *piAddr                     = NULL;
-       int iNewPos                     = Top - Rhs + _iVar;
-       int iAddr                               = *Lstk(iNewPos);
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int *piAddr   = NULL;
+    int iNewPos   = Top - Rhs + _iVar;
+    int iAddr    = *Lstk(iNewPos);
 
-       getNewVarAddressFromPosition(_pvCtx, iNewPos, &piAddr);
+    getNewVarAddressFromPosition(_pvCtx, iNewPos, &piAddr);
 
-       sciErr = fillCommonList(_pvCtx, piAddr, _iListType, _iNbItem);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_LIST, _("%s: Unable to create variable in Scilab memory"), "createList");
-               return sciErr;
-       }
+    sciErr = fillCommonList(_pvCtx, piAddr, _iListType, _iNbItem);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_LIST, _("%s: Unable to create variable in Scilab memory"), "createList");
+        return sciErr;
+    }
 
-       *_piAddress     = piAddr;
-       updateInterSCI(_iVar, '$', iAddr, sadr(iadr(iAddr) + 2 + _iNbItem + 1 + !(_iNbItem % 2)));
-       closeList(iNewPos, piAddr + 2 + _iNbItem + 1 + !(_iNbItem % 2));
+    *_piAddress = piAddr;
+    updateInterSCI(_iVar, '$', iAddr, sadr(iadr(iAddr) + 2 + _iNbItem + 1 + !(_iNbItem % 2)));
+    closeList(iNewPos, piAddr + 2 + _iNbItem + 1 + !(_iNbItem % 2));
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr fillCommonList(void* _pvCtx, int* _piAddress, int _iListType, int _iNbItem)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piOffset = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piOffset = NULL;
 
-       _piAddress[0]   = _iListType;
-       _piAddress[1] = _iNbItem;
+    _piAddress[0] = _iListType;
+    _piAddress[1] = _iNbItem;
 
-       piOffset                = _piAddress + 2;
-       piOffset[0]     = 1; //always
+    piOffset  = _piAddress + 2;
+    piOffset[0] = 1; //always
 
-       for(int i = 0 ; i < _iNbItem; i++)
-       {//initialize item offset
-               piOffset[i + 1] = -1;
-       }
-       return sciErr;
+    for (int i = 0 ; i < _iNbItem; i++)
+    {
+        //initialize item offset
+        piOffset[i + 1] = -1;
+    }
+    return sciErr;
 }
 
 SciErr readNamedList(void* _pvCtx, const char* _pstName, int* _piNbItem, int** _piAddress)
 {
-       return readCommonNamedList(_pvCtx, _pstName, sci_list, _piNbItem, _piAddress);
+    return readCommonNamedList(_pvCtx, _pstName, sci_list, _piNbItem, _piAddress);
 }
 
 SciErr readNamedTList(void* _pvCtx, const char* _pstName, int* _piNbItem, int** _piAddress)
 {
-       return readCommonNamedList(_pvCtx, _pstName, sci_tlist, _piNbItem, _piAddress);
+    return readCommonNamedList(_pvCtx, _pstName, sci_tlist, _piNbItem, _piAddress);
 }
 
 SciErr readNamedMList(void* _pvCtx, const char* _pstName, int* _piNbItem, int** _piAddress)
 {
-       return readCommonNamedList(_pvCtx, _pstName, sci_mlist, _piNbItem, _piAddress);
+    return readCommonNamedList(_pvCtx, _pstName, sci_mlist, _piNbItem, _piAddress);
 }
 
 static SciErr readCommonNamedList(void* _pvCtx, const char* _pstName, int _iListType, int* _piNbItem, int** _piAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piAddr             = NULL;
-       int iNbItem             = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piAddr  = NULL;
+    int iNbItem  = 0;
 
-       sciErr = getVarAddressFromName(_pvCtx, _pstName, &piAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_NAMED_LIST, _("%s: Unable to get variable \"%s\""), "readNamedList", _pstName);
-               return sciErr;
-       }
+    sciErr = getVarAddressFromName(_pvCtx, _pstName, &piAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_NAMED_LIST, _("%s: Unable to get variable \"%s\""), "readNamedList", _pstName);
+        return sciErr;
+    }
 
-       if(piAddr[0] != _iListType)
-       {
-               addErrorMessage(&sciErr, API_ERROR_INVALID_LIST_TYPE, _("%s: Invalid argument type, %s excepted"), "readNamedList", getListTypeName(_iListType));
-               return sciErr;
-       }
+    if (piAddr[0] != _iListType)
+    {
+        addErrorMessage(&sciErr, API_ERROR_INVALID_LIST_TYPE, _("%s: Invalid argument type, %s excepted"), "readNamedList", getListTypeName(_iListType));
+        return sciErr;
+    }
 
-       sciErr = getListItemNumber(_pvCtx, piAddr, &iNbItem);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_NAMED_LIST, _("%s: Unable to get variable \"%s\""), "readNamedList", _pstName);
-               return sciErr;
-       }
+    sciErr = getListItemNumber(_pvCtx, piAddr, &iNbItem);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_NAMED_LIST, _("%s: Unable to get variable \"%s\""), "readNamedList", _pstName);
+        return sciErr;
+    }
 
-       *_piNbItem = iNbItem;
-       *_piAddress = piAddr;
+    *_piNbItem = iNbItem;
+    *_piAddress = piAddr;
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr getListInList(void* _pvCtx, int* _piParent, int _iItemPos, int** _piAddress)
 {
-       return getCommonListInList(_pvCtx, _piParent, _iItemPos, sci_list, _piAddress);
+    return getCommonListInList(_pvCtx, _piParent, _iItemPos, sci_list, _piAddress);
 }
 
 SciErr getTListInList(void* _pvCtx, int* _piParent, int _iItemPos, int** _piAddress)
 {
-       return getCommonListInList(_pvCtx, _piParent, _iItemPos, sci_tlist, _piAddress);
+    return getCommonListInList(_pvCtx, _piParent, _iItemPos, sci_tlist, _piAddress);
 }
 
 SciErr getMListInList(void* _pvCtx, int* _piParent, int _iItemPos, int** _piAddress)
 {
-       return getCommonListInList(_pvCtx, _piParent, _iItemPos, sci_mlist, _piAddress);
+    return getCommonListInList(_pvCtx, _piParent, _iItemPos, sci_mlist, _piAddress);
 }
 
 SciErr getCommonListInList(void* _pvCtx, int* _piParent, int _iItemPos, int _iListType, int** _piAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
 
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, _piAddress);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_LIST_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getListInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, _piAddress);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_LIST_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getListInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
 
-       if((*_piAddress)[0] != _iListType)
-       {
-               addErrorMessage(&sciErr, API_ERROR_INVALID_LIST_TYPE, _("%s: Invalid argument type, %s excepted"), "getListInList", getListTypeName(_iListType));
-               return sciErr;
-       }
-       return sciErr;
+    if ((*_piAddress)[0] != _iListType)
+    {
+        addErrorMessage(&sciErr, API_ERROR_INVALID_LIST_TYPE, _("%s: Invalid argument type, %s excepted"), "getListInList", getListTypeName(_iListType));
+        return sciErr;
+    }
+    return sciErr;
 }
 
 SciErr getListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int** _piAddress)
 {
-       return getCommomListInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, sci_list, _piAddress);
+    return getCommomListInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, sci_list, _piAddress);
 }
 
 SciErr getTListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int** _piAddress)
 {
-       return getCommomListInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, sci_tlist, _piAddress);
+    return getCommomListInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, sci_tlist, _piAddress);
 }
 
 SciErr getMListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int** _piAddress)
 {
-       return getCommomListInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, sci_mlist, _piAddress);
+    return getCommomListInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, sci_mlist, _piAddress);
 }
 
 SciErr getCommomListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iListType, int** _piAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piAddr             = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piAddr  = NULL;
 
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_LIST_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "getListInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_LIST_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "getListInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       if(piAddr[0] != _iListType)
-       {
-               addErrorMessage(&sciErr, API_ERROR_INVALID_LIST_TYPE, _("%s: Invalid argument type, %s excepted"), "getListInNamedList", getListTypeName(_iListType));
-               return sciErr;
-       }
+    if (piAddr[0] != _iListType)
+    {
+        addErrorMessage(&sciErr, API_ERROR_INVALID_LIST_TYPE, _("%s: Invalid argument type, %s excepted"), "getListInNamedList", getListTypeName(_iListType));
+        return sciErr;
+    }
 
-       *_piAddress = piAddr;
-       return sciErr;
+    *_piAddress = piAddr;
+    return sciErr;
 }
 
 SciErr createListInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress)
 {
-       return createCommonListInList(_pvCtx, _iVar, _piParent, _iItemPos, sci_list, _iNbItem, _piAddress, 0);
+    return createCommonListInList(_pvCtx, _iVar, NULL, _piParent, _iItemPos, sci_list, _iNbItem, _piAddress, 0);
 }
 
 SciErr createTListInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress)
 {
-       return createCommonListInList(_pvCtx, _iVar, _piParent, _iItemPos, sci_tlist, _iNbItem, _piAddress, 0);
+    return createCommonListInList(_pvCtx, _iVar, NULL, _piParent, _iItemPos, sci_tlist, _iNbItem, _piAddress, 0);
 }
 
 SciErr createMListInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress)
 {
-       return createCommonListInList(_pvCtx, _iVar, _piParent, _iItemPos, sci_mlist, _iNbItem, _piAddress, 0);
-}
-
-static SciErr createCommonListInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iListType, int _iNbItem, int** _piAddress, int iNamed)
-{
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNewPos                             = Top - Rhs + _iVar;
-       int iNbItem                             = 0;
-       int* piChildAddr        = NULL;
-
-       //Does item can be added in the list
-       sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
-
-       if(iNbItem < _iItemPos)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createListInList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_LIST_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createListInList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       sciErr = fillCommonList(_pvCtx, piChildAddr, _iListType, _iNbItem);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_LIST_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createListInList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       *_piAddress = piChildAddr;
-       if(iNamed)
-       {
-               closeList(_iVar, piChildAddr + 2 + _iNbItem + 1 + !(_iNbItem % 2));
-       }
-       else
-       {
-               closeList(iNewPos, piChildAddr + 2 + _iNbItem + 1 + !(_iNbItem % 2));
-       }
-
-       if(_iNbItem == 0)
-       {//for empty list
-               int *piOffset                           = _piParent + 2;
-               int* piEnd                                      = piChildAddr + 4;
-
-               piOffset[_iItemPos] = piOffset[_iItemPos - 1] + 2;
-               if(iNamed)
-               {
-                       updateNamedListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
-               }
-               else
-               {
-                       updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
-               }
-       }
-
-       return sciErr;
+    return createCommonListInList(_pvCtx, _iVar, NULL, _piParent, _iItemPos, sci_mlist, _iNbItem, _piAddress, 0);
+}
+
+static SciErr createCommonListInList(void* _pvCtx, int _iVar, const char* _pstName, int* _piParent, int _iItemPos, int _iListType, int _iNbItem, int** _piAddress, int iNamed)
+{
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNewPos    = Top - Rhs + _iVar;
+    int iNbItem    = 0;
+    int* piChildAddr = NULL;
+
+    //Does item can be added in the list
+    sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
+
+    if (iNbItem < _iItemPos)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createListInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_LIST_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createListInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    sciErr = fillCommonList(_pvCtx, piChildAddr, _iListType, _iNbItem);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_LIST_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createListInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    *_piAddress = piChildAddr;
+    if (iNamed)
+    {
+        closeList(_iVar, piChildAddr + 2 + _iNbItem + 1 + !(_iNbItem % 2));
+    }
+    else
+    {
+        closeList(iNewPos, piChildAddr + 2 + _iNbItem + 1 + !(_iNbItem % 2));
+    }
+
+    if (_iNbItem == 0)
+    {
+        //for empty list
+        int *piOffset    = _piParent + 2;
+        int* piEnd     = piChildAddr + 4;
+
+        piOffset[_iItemPos] = piOffset[_iItemPos - 1] + 2;
+        if (iNamed)
+        {
+            updateNamedListOffset(_pvCtx, _iVar, _pstName, _piParent, _iItemPos, piEnd);
+        }
+        else
+        {
+            updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
+        }
+    }
+
+    return sciErr;
 }
 
 SciErr createListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress)
 {
-       return createCommonListInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, sci_list, _iNbItem, _piAddress);
+    return createCommonListInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, sci_list, _iNbItem, _piAddress);
 }
 
 SciErr createTListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress)
 {
-       return createCommonListInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, sci_tlist, _iNbItem, _piAddress);
+    return createCommonListInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, sci_tlist, _iNbItem, _piAddress);
 }
 
 SciErr createMListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iNbItem, int** _piAddress)
 {
-       return createCommonListInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, sci_mlist, _iNbItem, _piAddress);
+    return createCommonListInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, sci_mlist, _iNbItem, _piAddress);
 }
 
-SciErr createCommonListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iListType, int _iNbItem, int** _piAddress)
+SciErr createCommonListInNamedList(void* _pvCtx, const char* _pstName, int* /*_piParent*/, int _iItemPos, int _iListType, int _iNbItem, int** _piAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iVarID[nsiz];
-       int iSaveTop = Top;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iVarID[nsiz];
+    int iSaveTop    = Top;
+    int* piParent   = getLastNamedListAddress(_pstName, _iItemPos);
 
     if (!checkNamedVarFormat(_pvCtx, _pstName))
     {
@@ -484,62 +714,72 @@ SciErr createCommonListInNamedList(void* _pvCtx, const char* _pstName, int* _piP
     }
 
     C2F(str2name)(_pstName, iVarID, (unsigned long)strlen(_pstName));
-       Top = Top + Nbvars + 1;
+    Top = Top + Nbvars + 1;
+
+    sciErr = createCommonListInList(_pvCtx, Top, _pstName, piParent, _iItemPos, _iListType, _iNbItem, _piAddress, 1);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_LIST_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createListInList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       sciErr = createCommonListInList(_pvCtx, Top, _piParent, _iItemPos, _iListType, _iNbItem, _piAddress, 1);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_LIST_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createListInList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    if (_iNbItem == 0 && _iItemPos == piParent[1])
+    {
+        popNamedListAddress(_pstName);
+    }
 
-       if(_iNbItem == 0 && _iItemPos == _piParent[1])
-       {
-               int* piEnd = *_piAddress + 4;
-               updateNamedListOffset(_pvCtx, Top, _piParent, _iItemPos, piEnd);
-               createNamedVariable(iVarID);
-       }
+    if (_iNbItem != 0)
+    {
+        //add new child address in stacklist
+        pushNamedListAddress(_pstName, *_piAddress, _iItemPos == piParent[1]);
+    }
 
-       Top = iSaveTop;
-       return sciErr;
+    Top = iSaveTop;
+    return sciErr;
 }
 
-SciErr allocCommonItemInList(void* _pvCtx, int* _piParent, int _iItemPos, int** _piChildAddr)
+SciErr allocCommonItemInList(void* _pvCtx, int* _piParent, int _iItemPos, int** _piChildAddr)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piOffset = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piOffset = NULL;
 
-       //Does previous items was already inserted
-       piOffset                = _piParent + 2;
-       if(piOffset[_iItemPos - 1] == -1)
-       {//Previous items wasn't inserted
-               addErrorMessage(&sciErr, API_ERROR_NON_ORDERED_INSERTION, _("%s: Items must be inserted in order"), "allocItemInList");
-               return sciErr;
-       }
+    //Does previous items was already inserted
+    piOffset  = _piParent + 2;
+    if (piOffset[_iItemPos - 1] == -1)
+    {
+        //Previous items wasn't inserted
+        addErrorMessage(&sciErr, API_ERROR_NON_ORDERED_INSERTION, _("%s: Items must be inserted in order"), "allocItemInList");
+        return sciErr;
+    }
 
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, _piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ALLOC_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "allocItemInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, _piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ALLOC_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "allocItemInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       return sciErr;
+    return sciErr;
 }
 
 /******************************
- * Void and defined functions *
- ******************************/
-SciErr createVoidInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos)
+* Void and defined functions *
+******************************/
+SciErr createVoidInNamedList(void* _pvCtx, const char* _pstName, int* /*_piParent*/, int _iItemPos)
 {
-    SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iVarID[nsiz];
     int iNbItem         = 0;
     int iSaveRhs        = Rhs;
     int iSaveTop        = Top;
     int* piEnd          = NULL;
     int* piChildAddr    = NULL;
-       int* piOffset       = NULL;
+    int* piOffset       = NULL;
+    int* piParent       = getLastNamedListAddress(_pstName, _iItemPos);
 
     if (!checkNamedVarFormat(_pvCtx, _pstName))
     {
@@ -550,43 +790,43 @@ SciErr createVoidInNamedList(void* _pvCtx, const char* _pstName, int* _piParent,
     C2F(str2name)(_pstName, iVarID, (unsigned long)strlen(_pstName));
     Top = Top + Nbvars + 1;
 
-       //Does item can be added in the list
-       sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
-       if(sciErr.iErr)
-       {
-        addErrorMessage(&sciErr, API_ERROR_CREATE_VOID_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "createVoidInNamedList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
-
-       if(iNbItem < _iItemPos)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createVoidInNamedList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ALLOC_DOUBLE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "createVoidInNamedList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    //Does item can be added in the list
+    sciErr = getListItemNumber(_pvCtx, piParent, &iNbItem);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_VOID_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "createVoidInNamedList", _iItemPos + 1, getRhsFromAddress(_pvCtx, piParent));
+        return sciErr;
+    }
+
+    if (iNbItem < _iItemPos)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createVoidInNamedList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    sciErr = allocCommonItemInList(_pvCtx, piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ALLOC_DOUBLE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "createVoidInNamedList", _iItemPos + 1, getRhsFromAddress(_pvCtx, piParent));
+        return sciErr;
+    }
 
     //set type, rows, cols complex at 0
-    piChildAddr[0]             = 0;
-    piChildAddr[1]             = 0;
-    piChildAddr[2]             = 0;
-    piChildAddr[3]             = 0;
+    piChildAddr[0]  = 0;
+    piChildAddr[1]  = 0;
+    piChildAddr[2]  = 0;
+    piChildAddr[3]  = 0;
 
-       piOffset            = _piParent + 2;
-       piOffset[_iItemPos] = piOffset[_iItemPos - 1] + 2;
+    piOffset            = piParent + 2;
+    piOffset[_iItemPos] = piOffset[_iItemPos - 1] + 2;
 
     piEnd = piChildAddr + 4;
     closeList(Top, piEnd);
 
-    if(_iItemPos == _piParent[1])
+    if (_iItemPos == piParent[1])
     {
-        updateNamedListOffset(_pvCtx, Top, _piParent, _iItemPos, piEnd);
-        createNamedVariable(iVarID);
+        updateNamedListOffset(_pvCtx, Top, _pstName, piParent, _iItemPos, piEnd);
+        popNamedListAddress(_pstName);
     }
 
     Top = iSaveTop;
@@ -595,16 +835,19 @@ SciErr createVoidInNamedList(void* _pvCtx, const char* _pstName, int* _piParent,
     return sciErr;
 }
 
-SciErr createUndefinedInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos)
+SciErr createUndefinedInNamedList(void* _pvCtx, const char* _pstName, int* /*_piParent*/, int _iItemPos)
 {
-    SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iVarID[nsiz];
     int iNbItem         = 0;
     int iSaveRhs        = Rhs;
     int iSaveTop        = Top;
     int* piEnd          = NULL;
     int* piChildAddr    = NULL;
-       int* piOffset       = NULL;
+    int* piOffset       = NULL;
+    int* piParent       = getLastNamedListAddress(_pstName, _iItemPos);
 
     if (!checkNamedVarFormat(_pvCtx, _pstName))
     {
@@ -615,43 +858,43 @@ SciErr createUndefinedInNamedList(void* _pvCtx, const char* _pstName, int* _piPa
     C2F(str2name)(_pstName, iVarID, (unsigned long)strlen(_pstName));
     Top = Top + Nbvars + 1;
 
-       //Does item can be added in the list
-       sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
-       if(sciErr.iErr)
-       {
-        addErrorMessage(&sciErr, API_ERROR_CREATE_VOID_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "createVoidInNamedList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
-
-       if(iNbItem < _iItemPos)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createVoidInNamedList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ALLOC_DOUBLE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "createVoidInNamedList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    //Does item can be added in the list
+    sciErr = getListItemNumber(_pvCtx, piParent, &iNbItem);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_VOID_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "createVoidInNamedList", _iItemPos + 1, getRhsFromAddress(_pvCtx, piParent));
+        return sciErr;
+    }
+
+    if (iNbItem < _iItemPos)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createVoidInNamedList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    sciErr = allocCommonItemInList(_pvCtx, piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ALLOC_DOUBLE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "createVoidInNamedList", _iItemPos + 1, getRhsFromAddress(_pvCtx, piParent));
+        return sciErr;
+    }
 
     //set type, rows, cols complex at 0
-    piChildAddr[0]             = 0;
-    piChildAddr[1]             = 0;
-    piChildAddr[2]             = 0;
-    piChildAddr[3]             = 0;
+    piChildAddr[0]  = 0;
+    piChildAddr[1]  = 0;
+    piChildAddr[2]  = 0;
+    piChildAddr[3]  = 0;
 
-       piOffset            = _piParent + 2;
-       piOffset[_iItemPos] = piOffset[_iItemPos - 1];
+    piOffset            = piParent + 2;
+    piOffset[_iItemPos] = piOffset[_iItemPos - 1];
 
     piEnd = piChildAddr + 4;
     closeList(Top, piEnd);
 
-    if(_iItemPos == _piParent[1])
+    if (_iItemPos == piParent[1])
     {
-        updateNamedListOffset(_pvCtx, Top, _piParent, _iItemPos, piEnd);
-        createNamedVariable(iVarID);
+        updateNamedListOffset(_pvCtx, Top, _pstName, piParent, _iItemPos, piEnd);
+        popNamedListAddress(_pstName);
     }
 
     Top = iSaveTop;
@@ -661,190 +904,203 @@ SciErr createUndefinedInNamedList(void* _pvCtx, const char* _pstName, int* _piPa
 }
 
 /*********************
- * Double functions *
- *********************/
+* Double functions *
+*********************/
 
 SciErr getMatrixOfDoubleInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, double** _pdblReal)
 {
-       return getCommonMatrixOfDoubleInList(_pvCtx, _piParent,_iItemPos, 0, _piRows, _piCols, _pdblReal, NULL);
+    return getCommonMatrixOfDoubleInList(_pvCtx, _piParent, _iItemPos, 0, _piRows, _piCols, _pdblReal, NULL);
 }
 
 SciErr getComplexMatrixOfDoubleInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, double** _pdblReal, double** _pdblImg)
 {
-       return getCommonMatrixOfDoubleInList(_pvCtx, _piParent,_iItemPos, 1, _piRows, _piCols, _pdblReal, _pdblImg);
+    return getCommonMatrixOfDoubleInList(_pvCtx, _piParent, _iItemPos, 1, _piRows, _piCols, _pdblReal, _pdblImg);
 }
 
 static SciErr getCommonMatrixOfDoubleInList(void* _pvCtx, int* _piParent, int _iItemPos, int _iComplex, int* _piRows, int* _piCols, double** _pdblReal, double** _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piAddr             = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piAddr  = NULL;
 
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_DOUBLE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "getComplexMatrixOfDoubleInList" : "getMatrixOfDoubleInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_DOUBLE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "getComplexMatrixOfDoubleInList" : "getMatrixOfDoubleInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
 
-       sciErr = getCommonMatrixOfDouble(_pvCtx, piAddr, _iComplex, _piRows, _piCols, _pdblReal, _pdblImg);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_DOUBLE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "getComplexMatrixOfDoubleInList" : "getMatrixOfDoubleInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
-       return sciErr;
+    sciErr = getCommonMatrixOfDouble(_pvCtx, piAddr, _iComplex, _piRows, _piCols, _pdblReal, _pdblImg);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_DOUBLE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "getComplexMatrixOfDoubleInList" : "getMatrixOfDoubleInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
+    return sciErr;
 }
 
 SciErr allocMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, double** _pdblReal)
 {
-       return allocCommonMatrixOfDoubleInList(_pvCtx, _iVar, _piParent, _iItemPos, 0, _iRows, _iCols, _pdblReal, NULL);
+    return allocCommonMatrixOfDoubleInList(_pvCtx, _iVar, _piParent, _iItemPos, 0, _iRows, _iCols, _pdblReal, NULL);
 }
 
 SciErr allocComplexMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, double** _pdblReal, double** _pdblImg)
 {
-       return allocCommonMatrixOfDoubleInList(_pvCtx, _iVar, _piParent, _iItemPos, 1, _iRows, _iCols, _pdblReal, _pdblImg);
+    return allocCommonMatrixOfDoubleInList(_pvCtx, _iVar, _piParent, _iItemPos, 1, _iRows, _iCols, _pdblReal, _pdblImg);
 }
 
 static SciErr allocCommonMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iComplex, int _iRows, int _iCols, double** _pdblReal, double** _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNewPos                             = Top - Rhs + _iVar;
-       int* piEnd                              = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNewPos    = Top - Rhs + _iVar;
+    int* piEnd    = NULL;
 
-       sciErr = fillCommonMatrixOfDoubleInList(_pvCtx, _iVar, _piParent, _iItemPos, _iComplex, _iRows, _iCols, _pdblReal, _pdblImg);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ALLOC_DOUBLE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "allocComplexMatrixOfDoubleInList" : "allocMatrixOfDoubleInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    sciErr = fillCommonMatrixOfDoubleInList(_pvCtx, _iVar, _piParent, _iItemPos, _iComplex, _iRows, _iCols, _pdblReal, _pdblImg);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ALLOC_DOUBLE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "allocComplexMatrixOfDoubleInList" : "allocMatrixOfDoubleInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
 
-       piEnd = (int*) (*_pdblReal + _iRows * _iCols * (_iComplex + 1));
-       closeList(iNewPos, piEnd);
+    piEnd = (int*) (*_pdblReal + _iRows * _iCols * (_iComplex + 1));
+    closeList(iNewPos, piEnd);
 
-       if(_iItemPos == _piParent[1])
-       {
-               updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
-       }
+    if (_iItemPos == _piParent[1])
+    {
+        updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
+    }
 
-       return sciErr;
+    return sciErr;
 }
 
 static SciErr fillCommonMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iComplex, int _iRows, int _iCols, double** _pdblReal, double** _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNbItem                             = 0;
-       int* piOffset                   = NULL;
-       int* piChildAddr        = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNbItem    = 0;
+    int* piOffset   = NULL;
+    int* piChildAddr = NULL;
 
-       //Does item can be added in the list
-       sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ALLOC_DOUBLE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "allocComplexMatrixOfDoubleInList" : "allocMatrixOfDoubleInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    //Does item can be added in the list
+    sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ALLOC_DOUBLE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "allocComplexMatrixOfDoubleInList" : "allocMatrixOfDoubleInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
 
-       if(iNbItem < _iItemPos)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfDoubleInList" : "createMatrixOfDoubleInList", _iItemPos + 1);
-               return sciErr;
-       }
+    if (iNbItem < _iItemPos)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfDoubleInList" : "createMatrixOfDoubleInList", _iItemPos + 1);
+        return sciErr;
+    }
 
 
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ALLOC_DOUBLE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "allocComplexMatrixOfDoubleInList" : "allocMatrixOfDoubleInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ALLOC_DOUBLE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "allocComplexMatrixOfDoubleInList" : "allocMatrixOfDoubleInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
 
-       sciErr = fillCommonMatrixOfDouble(_pvCtx, piChildAddr, _iComplex, _iRows, _iCols, _pdblReal, _pdblImg);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ALLOC_DOUBLE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "allocComplexMatrixOfDoubleInList" : "allocMatrixOfDoubleInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    sciErr = fillCommonMatrixOfDouble(_pvCtx, piChildAddr, _iComplex, _iRows, _iCols, _pdblReal, _pdblImg);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ALLOC_DOUBLE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "allocComplexMatrixOfDoubleInList" : "allocMatrixOfDoubleInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
 
-       piOffset                                                = _piParent + 2;
-       piOffset[_iItemPos] = piOffset[_iItemPos - 1] + _iRows * _iCols * (_iComplex + 1) + 2;
+    piOffset      = _piParent + 2;
+    piOffset[_iItemPos] = piOffset[_iItemPos - 1] + _iRows * _iCols * (_iComplex + 1) + 2;
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr createMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const double* _pdblReal)
 {
-       return createCommonMatrixOfDoubleInList(_pvCtx, _iVar, _piParent, _iItemPos, 0, _iRows, _iCols, _pdblReal, NULL);
+    return createCommonMatrixOfDoubleInList(_pvCtx, _iVar, _piParent, _iItemPos, 0, _iRows, _iCols, _pdblReal, NULL);
 }
 
 SciErr createComplexMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg)
 {
-       return createCommonMatrixOfDoubleInList(_pvCtx, _iVar, _piParent, _iItemPos, 1, _iRows, _iCols, _pdblReal, _pdblImg);
+    return createCommonMatrixOfDoubleInList(_pvCtx, _iVar, _piParent, _iItemPos, 1, _iRows, _iCols, _pdblReal, _pdblImg);
 }
 
 SciErr createComplexZMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const doublecomplex* _pdblData)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       double *pdblReal        = NULL;
-       double *pdblImg         = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    double *pdblReal = NULL;
+    double *pdblImg  = NULL;
 
-       sciErr = allocCommonMatrixOfDoubleInList(_pvCtx, _iVar, _piParent, _iItemPos, 1, _iRows, _iCols, &pdblReal, &pdblImg);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_DOUBLE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createComplexZMatrixOfDoubleInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = allocCommonMatrixOfDoubleInList(_pvCtx, _iVar, _piParent, _iItemPos, 1, _iRows, _iCols, &pdblReal, &pdblImg);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_DOUBLE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createComplexZMatrixOfDoubleInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       vGetPointerFromDoubleComplex(_pdblData, _iRows * _iCols, pdblReal, pdblImg);
+    vGetPointerFromDoubleComplex(_pdblData, _iRows * _iCols, pdblReal, pdblImg);
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr createCommonMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iComplex, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       double *pdblReal        = NULL;
-       double *pdblImg         = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    double *pdblReal = NULL;
+    double *pdblImg  = NULL;
 
-       sciErr = allocCommonMatrixOfDoubleInList(_pvCtx, _iVar, _piParent, _iItemPos, _iComplex, _iRows, _iCols, &pdblReal, &pdblImg);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_DOUBLE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfDoubleInList" : "createMatrixOfDoubleInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = allocCommonMatrixOfDoubleInList(_pvCtx, _iVar, _piParent, _iItemPos, _iComplex, _iRows, _iCols, &pdblReal, &pdblImg);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_DOUBLE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfDoubleInList" : "createMatrixOfDoubleInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       if(_pdblReal != NULL)
-       {
-               memcpy(pdblReal, _pdblReal, _iRows * _iCols * sizeof(double));
-       }
+    if (_pdblReal != NULL)
+    {
+        memcpy(pdblReal, _pdblReal, _iRows * _iCols * sizeof(double));
+    }
 
-       if(_iComplex && _pdblImg != NULL)
-       {
-               memcpy(pdblImg, _pdblImg, _iRows * _iCols * sizeof(double));
-       }
-       return sciErr;
-}
+    if (_iComplex && _pdblImg != NULL)
+    {
+        memcpy(pdblImg, _pdblImg, _iRows * _iCols * sizeof(double));
+    }
+    return sciErr;
+}
 
 SciErr createMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const double* _pdblReal)
 {
-       return createCommomMatrixOfDoubleInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 0, _iRows, _iCols, _pdblReal, NULL);
+    return createCommomMatrixOfDoubleInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 0, _iRows, _iCols, _pdblReal, NULL);
 }
 
 SciErr createComplexMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg)
 {
-       return createCommomMatrixOfDoubleInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 1, _iRows, _iCols, _pdblReal, _pdblImg);
+    return createCommomMatrixOfDoubleInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 1, _iRows, _iCols, _pdblReal, _pdblImg);
 }
 
-SciErr createComplexZMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const doublecomplex* _pdblData)
+SciErr createComplexZMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* /*_piParent*/, int _iItemPos, int _iRows, int _iCols, const doublecomplex* _pdblData)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iVarID[nsiz];
-    int iSaveRhs                       = Rhs;
-       int iSaveTop                    = Top;
-       int *piAddr                             = NULL;
-       double *pdblReal        = NULL;
-       double *pdblImg         = NULL;
-       int* piEnd                              = NULL;
-       int* piChildAddr        = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iVarID[nsiz];
+    int iSaveRhs        = Rhs;
+    int iSaveTop        = Top;
+    int *piAddr         = NULL;
+    double *pdblReal    = NULL;
+    double *pdblImg     = NULL;
+    int* piEnd          = NULL;
+    int* piChildAddr    = NULL;
+    int* piParent       = getLastNamedListAddress(_pstName, _iItemPos);
 
     if (!checkNamedVarFormat(_pvCtx, _pstName))
     {
@@ -855,50 +1111,53 @@ SciErr createComplexZMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstNam
     C2F(str2name)(_pstName, iVarID, (unsigned long)strlen(_pstName));
     Top = Top + Nbvars + 1;
 
-       getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
+    getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
 
-       sciErr = fillCommonMatrixOfDoubleInList(_pvCtx, Top, _piParent, _iItemPos, 1, _iRows, _iCols, &pdblReal, &pdblImg);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_ZDOUBLE_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createComplexZMatrixOfDoubleInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = fillCommonMatrixOfDoubleInList(_pvCtx, Top, piParent, _iItemPos, 1, _iRows, _iCols, &pdblReal, &pdblImg);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_ZDOUBLE_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createComplexZMatrixOfDoubleInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       vGetPointerFromDoubleComplex(_pdblData, _iRows * _iCols, pdblReal, pdblImg);
+    vGetPointerFromDoubleComplex(_pdblData, _iRows * _iCols, pdblReal, pdblImg);
 
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_ZDOUBLE_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createComplexZMatrixOfDoubleInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = allocCommonItemInList(_pvCtx, piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_ZDOUBLE_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createComplexZMatrixOfDoubleInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       piEnd = piChildAddr + 4 + (_iRows * _iCols * 4);//4 -> 2*2 real + img * double
-       closeList(Top, piEnd);
+    piEnd = piChildAddr + 4 + (_iRows * _iCols * 4);//4 -> 2*2 real + img * double
+    closeList(Top, piEnd);
 
-       if(_iItemPos == _piParent[1])
-       {
-               updateNamedListOffset(_pvCtx, Top, _piParent, _iItemPos, piEnd);
-               createNamedVariable(iVarID);
-       }
+    if (_iItemPos == piParent[1])
+    {
+        updateNamedListOffset(_pvCtx, Top, _pstName, piParent, _iItemPos, piEnd);
+        popNamedListAddress(_pstName);
+    }
 
-       Top = iSaveTop;
-  Rhs = iSaveRhs;
+    Top = iSaveTop;
+    Rhs = iSaveRhs;
 
-       return sciErr;
+    return sciErr;
 }
 
-SciErr createCommomMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iComplex, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg)
+SciErr createCommomMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* /*_piParent*/, int _iItemPos, int _iComplex, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iVarID[nsiz];
-  int iSaveRhs                 = Rhs;
-       int iSaveTop                    = Top;
-       int *piAddr                             = NULL;
-       double *pdblReal        = NULL;
-       double *pdblImg         = NULL;
-       int* piEnd                              = NULL;
-       int* piChildAddr        = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iVarID[nsiz];
+    int iSaveRhs        = Rhs;
+    int iSaveTop        = Top;
+    int *piAddr         = NULL;
+    double *pdblReal    = NULL;
+    double *pdblImg     = NULL;
+    int* piEnd          = NULL;
+    int* piChildAddr    = NULL;
+    int* piParent       = getLastNamedListAddress(_pstName, _iItemPos);
 
     if (!checkNamedVarFormat(_pvCtx, _pstName))
     {
@@ -909,226 +1168,236 @@ SciErr createCommomMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName,
     C2F(str2name)(_pstName, iVarID, (unsigned long)strlen(_pstName));
     Top = Top + Nbvars + 1;
 
-       getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
+    getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
 
-       sciErr = fillCommonMatrixOfDoubleInList(_pvCtx, Top, _piParent, _iItemPos, _iComplex, _iRows, _iCols, &pdblReal, &pdblImg);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_DOUBLE_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), _iComplex ? "createComplexMatrixOfDoubleInNamedList" : "createMatrixOfDoubleInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = fillCommonMatrixOfDoubleInList(_pvCtx, Top, piParent, _iItemPos, _iComplex, _iRows, _iCols, &pdblReal, &pdblImg);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_DOUBLE_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), _iComplex ? "createComplexMatrixOfDoubleInNamedList" : "createMatrixOfDoubleInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       memcpy(pdblReal, _pdblReal, sizeof(double) * _iRows * _iCols);
-       if(_iComplex)
-       {
-               memcpy(pdblImg, _pdblImg, sizeof(double) * _iRows * _iCols);
-       }
+    memcpy(pdblReal, _pdblReal, sizeof(double) * _iRows * _iCols);
+    if (_iComplex)
+    {
+        memcpy(pdblImg, _pdblImg, sizeof(double) * _iRows * _iCols);
+    }
 
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_DOUBLE_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), _iComplex ? "createComplexMatrixOfDoubleInNamedList" : "createMatrixOfDoubleInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = allocCommonItemInList(_pvCtx, piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_DOUBLE_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), _iComplex ? "createComplexMatrixOfDoubleInNamedList" : "createMatrixOfDoubleInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       piEnd = piChildAddr + 4 + (_iRows * _iCols * 2 * (_iComplex + 1));
-       closeList(Top, piEnd);
+    piEnd = piChildAddr + 4 + (_iRows * _iCols * 2 * (_iComplex + 1));
+    closeList(Top, piEnd);
 
-       if(_iItemPos == _piParent[1])
-       {
-               updateNamedListOffset(_pvCtx, Top, _piParent, _iItemPos, piEnd);
-               createNamedVariable(iVarID);
-       }
+    if (_iItemPos == piParent[1])
+    {
+        updateNamedListOffset(_pvCtx, Top, _pstName, piParent, _iItemPos, piEnd);
+        popNamedListAddress(_pstName);
+    }
 
-       Top = iSaveTop;
-  Rhs = iSaveRhs;
+    Top = iSaveTop;
+    Rhs = iSaveRhs;
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr readMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, double* _pdblReal)
 {
-       return readCommonMatrixOfDoubleInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 0, _piRows, _piCols, _pdblReal, NULL);
+    return readCommonMatrixOfDoubleInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 0, _piRows, _piCols, _pdblReal, NULL);
 }
 
 SciErr readComplexMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, double* _pdblReal, double* _pdblImg)
 {
-       return readCommonMatrixOfDoubleInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 1, _piRows, _piCols, _pdblReal, _pdblImg);
+    return readCommonMatrixOfDoubleInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 1, _piRows, _piCols, _pdblReal, _pdblImg);
 }
 
 static SciErr readCommonMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iComplex, int* _piRows, int* _piCols, double* _pdblReal, double* _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNbItem                             = 0;
-       int* piAddr                             = NULL;
-       int* piRoot                             = NULL;
-       double* pdblReal        = NULL;
-       double* pdblImg         = NULL;
-
-       if(_piParent == NULL)
-       {
-               sciErr = readNamedList(_pvCtx, _pstName, &iNbItem, &piRoot);
-               if(sciErr.iErr)
-               {
-                       addErrorMessage(&sciErr, API_ERROR_READ_DOUBLE_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""),_iComplex ? "readComplexMatrixOfDoubleInNamedList" : "readMatrixOfDoubleInNamedList", _iItemPos + 1, _pstName);
-                       return sciErr;
-               }
-
-               sciErr = getListItemAddress(_pvCtx, piRoot, _iItemPos, &piAddr);
-       }
-       else
-       {
-               sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       }
-
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_DOUBLE_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""),_iComplex ? "readComplexMatrixOfDoubleInNamedList" : "readMatrixOfDoubleInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
-
-       sciErr = getCommonMatrixOfDouble(_pvCtx, piAddr, _iComplex, _piRows, _piCols, &pdblReal, &pdblImg);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_DOUBLE_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""),_iComplex ? "readComplexMatrixOfDoubleInNamedList" : "readMatrixOfDoubleInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
-
-       if(_pdblReal == NULL || (_iComplex && _pdblImg == NULL))
-       {
-               return sciErr;
-       }
-
-       memcpy(_pdblReal, pdblReal, sizeof(double) * *_piRows * *_piCols);
-       if(_iComplex)
-       {
-               memcpy(_pdblImg, pdblImg, sizeof(double) * *_piRows * *_piCols);
-       }
-       return sciErr;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNbItem    = 0;
+    int* piAddr    = NULL;
+    int* piRoot    = NULL;
+    double* pdblReal = NULL;
+    double* pdblImg  = NULL;
+
+    if (_piParent == NULL)
+    {
+        sciErr = readNamedList(_pvCtx, _pstName, &iNbItem, &piRoot);
+        if (sciErr.iErr)
+        {
+            addErrorMessage(&sciErr, API_ERROR_READ_DOUBLE_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), _iComplex ? "readComplexMatrixOfDoubleInNamedList" : "readMatrixOfDoubleInNamedList", _iItemPos + 1, _pstName);
+            return sciErr;
+        }
+
+        sciErr = getListItemAddress(_pvCtx, piRoot, _iItemPos, &piAddr);
+    }
+    else
+    {
+        sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    }
+
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_DOUBLE_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), _iComplex ? "readComplexMatrixOfDoubleInNamedList" : "readMatrixOfDoubleInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
+
+    sciErr = getCommonMatrixOfDouble(_pvCtx, piAddr, _iComplex, _piRows, _piCols, &pdblReal, &pdblImg);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_DOUBLE_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), _iComplex ? "readComplexMatrixOfDoubleInNamedList" : "readMatrixOfDoubleInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
+
+    if (_pdblReal == NULL || (_iComplex && _pdblImg == NULL))
+    {
+        return sciErr;
+    }
+
+    memcpy(_pdblReal, pdblReal, sizeof(double) * *_piRows * *_piCols);
+    if (_iComplex)
+    {
+        memcpy(_pdblImg, pdblImg, sizeof(double) * *_piRows * *_piCols);
+    }
+    return sciErr;
 }
 
 
 /*********************
- * Strings functions *
- *********************/
+* Strings functions *
+*********************/
 
 SciErr getMatrixOfStringInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piLength, char** _pstStrings)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piAddr             = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piAddr  = NULL;
 
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_STRING_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getMatrixOfStringInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_STRING_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getMatrixOfStringInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
 
-       sciErr = getMatrixOfString(_pvCtx, piAddr, _piRows, _piCols, _piLength, _pstStrings);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_STRING_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getMatrixOfStringInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    sciErr = getMatrixOfString(_pvCtx, piAddr, _piRows, _piCols, _piLength, _pstStrings);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_STRING_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getMatrixOfStringInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
 
-       return sciErr;
+    return sciErr;
 }
 
 
 SciErr createMatrixOfStringInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const char* const* _pstStrings)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNbItem                             = 0;
-       int iTotalLen                   = 0;
-       int iNewPos                             = Top - Rhs + _iVar;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNbItem    = 0;
+    int iTotalLen   = 0;
+    int iNewPos    = Top - Rhs + _iVar;
 
-       int* piItemAddr         = NULL;
-       int* piEnd                              = NULL;
+    int* piItemAddr  = NULL;
+    int* piEnd    = NULL;
 
-       sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_STRING_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfStringInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_STRING_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfStringInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       if(iNbItem < _iItemPos)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfStringInList", _iItemPos + 1);
-               return sciErr;
-       }
+    if (iNbItem < _iItemPos)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfStringInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piItemAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_STRING_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfStringInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piItemAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_STRING_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfStringInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       sciErr = fillCommonMatrixOfStringInList(_pvCtx, _iVar, _piParent, _iItemPos, _iRows, _iCols, _pstStrings, &iTotalLen);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_STRING_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfStringInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = fillCommonMatrixOfStringInList(_pvCtx, _iVar, _piParent, _iItemPos, _iRows, _iCols, _pstStrings, &iTotalLen);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_STRING_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfStringInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       piEnd = piItemAddr + iTotalLen + 5 + _iRows * _iCols + !((iTotalLen + _iRows * _iCols) % 2);
-       closeList(iNewPos, piEnd);
+    piEnd = piItemAddr + iTotalLen + 5 + _iRows * _iCols + !((iTotalLen + _iRows * _iCols) % 2);
+    closeList(iNewPos, piEnd);
 
-       if(_iItemPos == iNbItem)
-       {
-               updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
-       }
+    if (_iItemPos == iNbItem)
+    {
+        updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
+    }
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr fillCommonMatrixOfStringInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const char* const* _pstStrings, int* _piTotalLen)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNbItem                     = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNbItem   = 0;
 
-       int* piAddr                     = NULL;
-       int* piOffset           = NULL;
+    int* piAddr   = NULL;
+    int* piOffset  = NULL;
 
-       //Does item can be added in the list
-       getListItemNumber(_pvCtx, _piParent, &iNbItem);
-       if(iNbItem < _iItemPos)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfStringInList", _iItemPos + 1);
-               return sciErr;
-       }
+    //Does item can be added in the list
+    getListItemNumber(_pvCtx, _piParent, &iNbItem);
+    if (iNbItem < _iItemPos)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfStringInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_STRING_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "fillMatrixOfStringInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_STRING_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "fillMatrixOfStringInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       sciErr = fillMatrixOfString(_pvCtx, piAddr, _iRows, _iCols, _pstStrings, _piTotalLen);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_STRING_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "fillMatrixOfStringInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = fillMatrixOfString(_pvCtx, piAddr, _iRows, _iCols, _pstStrings, _piTotalLen);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_STRING_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "fillMatrixOfStringInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       piOffset                                                = _piParent + 2;
-       piOffset[_iItemPos] = piOffset[_iItemPos - 1] + (*_piTotalLen + 5 + _iRows * _iCols + !((*_piTotalLen + _iRows * _iCols) %2)) / 2;
+    piOffset      = _piParent + 2;
+    piOffset[_iItemPos] = piOffset[_iItemPos - 1] + (*_piTotalLen + 5 + _iRows * _iCols + !((*_piTotalLen + _iRows * _iCols) % 2)) / 2;
 
-       return sciErr;
+    return sciErr;
 }
 
-SciErr createMatrixOfStringInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const char* const* _pstStrings)
+SciErr createMatrixOfStringInNamedList(void* _pvCtx, const char* _pstName, int* /*_piParent*/, int _iItemPos, int _iRows, int _iCols, const char* const* _pstStrings)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iVarID[nsiz];
-       int iTotalLen                   = 0;
-       int iSaveRhs                    = Rhs;
-       int iSaveTop                    = Top;
-
-       int* piItemAddr         = NULL;
-       int* piEnd                              = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iVarID[nsiz];
+    int iTotalLen       = 0;
+    int iSaveRhs        = Rhs;
+    int iSaveTop        = Top;
+    int* piItemAddr     = NULL;
+    int* piEnd          = NULL;
+    int* piParent       = getLastNamedListAddress(_pstName, _iItemPos);
 
     if (!checkNamedVarFormat(_pvCtx, _pstName))
     {
@@ -1137,439 +1406,464 @@ SciErr createMatrixOfStringInNamedList(void* _pvCtx, const char* _pstName, int*
     }
 
     C2F(str2name)(_pstName, iVarID, (unsigned long)strlen(_pstName));
-       Top = Top + Nbvars + 1;
+    Top = Top + Nbvars + 1;
 
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piItemAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_STRING_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createMatrixOfStringInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = getListItemAddress(_pvCtx, piParent, _iItemPos, &piItemAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_STRING_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createMatrixOfStringInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       sciErr = fillCommonMatrixOfStringInList(_pvCtx, Top, _piParent, _iItemPos, _iRows, _iCols, _pstStrings, &iTotalLen);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_STRING_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createMatrixOfStringInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = fillCommonMatrixOfStringInList(_pvCtx, Top, piParent, _iItemPos, _iRows, _iCols, _pstStrings, &iTotalLen);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_STRING_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createMatrixOfStringInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       piEnd = piItemAddr + (iTotalLen + 5 + _iRows * _iCols + !((_iRows * _iCols) %2));
-       closeList(Top, piEnd);
+    piEnd = piItemAddr + (iTotalLen + 5 + _iRows * _iCols + !((_iRows * _iCols) % 2));
+    closeList(Top, piEnd);
 
-       if(_iItemPos == _piParent[1])
-       {
-               updateNamedListOffset(_pvCtx, Top, _piParent, _iItemPos, piEnd);
-               createNamedVariable(iVarID);
-       }
+    if (_iItemPos == piParent[1])
+    {
+        updateNamedListOffset(_pvCtx, Top, _pstName, piParent, _iItemPos, piEnd);
+        popNamedListAddress(_pstName);
+    }
 
-       Top = iSaveTop;
-  Rhs = iSaveRhs;
+    Top = iSaveTop;
+    Rhs = iSaveRhs;
 
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr readMatrixOfStringInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piLength, char** _pstStrings)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piAddr                             = NULL;
-       int* piRoot                             = NULL;
-       int iNbItem                             = NULL;
-
-       if(_piParent == NULL)
-       {
-               sciErr = readNamedList(_pvCtx, _pstName, &iNbItem, &piRoot);
-               if(sciErr.iErr)
-               {
-                       addErrorMessage(&sciErr, API_ERROR_READ_STRING_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfStringInNamedList", _iItemPos + 1, _pstName);
-                       return sciErr;
-               }
-
-               sciErr = getListItemAddress(_pvCtx, piRoot, _iItemPos, &piAddr);
-       }
-       else
-       {
-               sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       }
-
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_STRING_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfStringInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
-
-       sciErr = getMatrixOfString(_pvCtx, piAddr, _piRows, _piCols, _piLength, _pstStrings);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_STRING_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfStringInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
-
-       return sciErr;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piAddr    = NULL;
+    int* piRoot    = NULL;
+    int iNbItem    = NULL;
+
+    if (_piParent == NULL)
+    {
+        sciErr = readNamedList(_pvCtx, _pstName, &iNbItem, &piRoot);
+        if (sciErr.iErr)
+        {
+            addErrorMessage(&sciErr, API_ERROR_READ_STRING_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfStringInNamedList", _iItemPos + 1, _pstName);
+            return sciErr;
+        }
+
+        sciErr = getListItemAddress(_pvCtx, piRoot, _iItemPos, &piAddr);
+    }
+    else
+    {
+        sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    }
+
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_STRING_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfStringInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
+
+    sciErr = getMatrixOfString(_pvCtx, piAddr, _piRows, _piCols, _piLength, _pstStrings);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_STRING_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfStringInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
+
+    return sciErr;
 }
 
 /*********************
- * boolean functions *
- *********************/
+* boolean functions *
+*********************/
 
 SciErr getMatrixOfBooleanInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int** _piBool)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piAddr             = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piAddr  = NULL;
 
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_BOOLEAN_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getMatrixOfBooleanInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_BOOLEAN_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getMatrixOfBooleanInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
 
-       sciErr = getMatrixOfBoolean(_pvCtx, piAddr, _piRows, _piCols, _piBool);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_BOOLEAN_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getMatrixOfBooleanInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    sciErr = getMatrixOfBoolean(_pvCtx, piAddr, _piRows, _piCols, _piBool);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_BOOLEAN_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getMatrixOfBooleanInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr createMatrixOfBooleanInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const int* _piBool)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int *piBool                     = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int *piBool   = NULL;
 
-       sciErr = allocMatrixOfBooleanInList(_pvCtx, _iVar, _piParent, _iItemPos, _iRows, _iCols, &piBool);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBooleanInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = allocMatrixOfBooleanInList(_pvCtx, _iVar, _piParent, _iItemPos, _iRows, _iCols, &piBool);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBooleanInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       if(_piBool != NULL)
-       {
-               memcpy(piBool, _piBool, _iRows * _iCols * sizeof(int));
-       }
-       return sciErr;
+    if (_piBool != NULL)
+    {
+        memcpy(piBool, _piBool, _iRows * _iCols * sizeof(int));
+    }
+    return sciErr;
 }
 
 SciErr allocMatrixOfBooleanInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int** _piBool)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNewPos                             = Top - Rhs + _iVar;
-       int* piEnd                              = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNewPos    = Top - Rhs + _iVar;
+    int* piEnd    = NULL;
 
-       sciErr = fillMatrixOfBoolInList(_pvCtx, _iVar, _piParent, _iItemPos, _iRows, _iCols, _piBool);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ALLOC_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "allocMatrixOfBooleanInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = fillMatrixOfBoolInList(_pvCtx, _iVar, _piParent, _iItemPos, _iRows, _iCols, _piBool);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ALLOC_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "allocMatrixOfBooleanInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       piEnd = *_piBool + _iRows * _iCols + !((_iRows * _iCols) % 2);
-       closeList(iNewPos, piEnd);
+    piEnd = *_piBool + _iRows * _iCols + !((_iRows * _iCols) % 2);
+    closeList(iNewPos, piEnd);
 
-       if(_iItemPos == _piParent[1])
-       {
-               updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
-       }
-       return sciErr;
+    if (_iItemPos == _piParent[1])
+    {
+        updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
+    }
+    return sciErr;
 }
 
 static SciErr fillMatrixOfBoolInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int** _piBool)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNbItem                             = 0;
-       int* piOffset                   = NULL;
-       int* piChildAddr        = NULL;
-
-       //Does item can be added in the list
-       sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBoolInList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       if(iNbItem < _iItemPos)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBooleanInList", _iItemPos + 1);
-               return sciErr;
-       }
-
-
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBoolInList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       sciErr = fillMatrixOfBoolean(_pvCtx, piChildAddr, _iRows, _iCols, _piBool);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBoolInList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       piOffset                                                = _piParent + 2;
-       piOffset[_iItemPos] = piOffset[_iItemPos - 1] + ((3 + _iRows * _iCols + !((_iRows * _iCols) % 2)) / 2);
-
-       return sciErr;
-}
-
-SciErr createMatrixOfBooleanInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const int* _piBool)
-{
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iVarID[nsiz];
-       int iSaveRhs                    = Rhs;
-       int iSaveTop                    = Top;
-       int *piAddr                             = NULL;
-       int* piBool                             = NULL;
-       int* piEnd                              = NULL;
-       int* piChildAddr        = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNbItem    = 0;
+    int* piOffset   = NULL;
+    int* piChildAddr = NULL;
+
+    //Does item can be added in the list
+    sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBoolInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    if (iNbItem < _iItemPos)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBooleanInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+
+    sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBoolInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    sciErr = fillMatrixOfBoolean(_pvCtx, piChildAddr, _iRows, _iCols, _piBool);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBoolInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    piOffset      = _piParent + 2;
+    piOffset[_iItemPos] = piOffset[_iItemPos - 1] + ((3 + _iRows * _iCols + !((_iRows * _iCols) % 2)) / 2);
+
+    return sciErr;
+}
+
+SciErr createMatrixOfBooleanInNamedList(void* _pvCtx, const char* _pstName, int* /*_piParent*/, int _iItemPos, int _iRows, int _iCols, const int* _piBool)
+{
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iVarID[nsiz];
+    int iSaveRhs        = Rhs;
+    int iSaveTop        = Top;
+    int *piAddr         = NULL;
+    int* piBool         = NULL;
+    int* piEnd          = NULL;
+    int* piChildAddr    = NULL;
+    int* piParent       = getLastNamedListAddress(_pstName, _iItemPos);
 
     if (!checkNamedVarFormat(_pvCtx, _pstName))
     {
         addErrorMessage(&sciErr, API_ERROR_INVALID_NAME, _("%s: Invalid variable name."), "createMatrixOfBooleanInNamedList");
         return sciErr;
     }
-    
+
     C2F(str2name)(_pstName, iVarID, (unsigned long)strlen(_pstName));
     Top = Top + Nbvars + 1;
 
-       getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
-       
-       sciErr = fillMatrixOfBoolInList(_pvCtx, Top, _piParent, _iItemPos, _iRows, _iCols, &piBool);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createMatrixOfBooleanInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
 
-       memcpy(piBool, _piBool, sizeof(int) * _iRows * _iCols);
+    sciErr = fillMatrixOfBoolInList(_pvCtx, Top, piParent, _iItemPos, _iRows, _iCols, &piBool);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createMatrixOfBooleanInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
+
+    memcpy(piBool, _piBool, sizeof(int) * _iRows * _iCols);
 
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createMatrixOfBooleanInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = allocCommonItemInList(_pvCtx, piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createMatrixOfBooleanInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       piEnd = piChildAddr + 4 + (_iRows * _iCols) + ((_iRows * _iCols) % 2);
-       closeList(Top, piEnd);
+    piEnd = piChildAddr + 4 + (_iRows * _iCols) + ((_iRows * _iCols) % 2);
+    closeList(Top, piEnd);
 
-       if(_iItemPos == _piParent[1])
-       {
-               updateNamedListOffset(_pvCtx, Top, _piParent, _iItemPos, piEnd);
-               createNamedVariable(iVarID);
-       }
+    if (_iItemPos == piParent[1])
+    {
+        updateNamedListOffset(_pvCtx, Top, _pstName, piParent, _iItemPos, piEnd);
+        popNamedListAddress(_pstName);
+    }
 
-       Top = iSaveTop;
-  Rhs = iSaveRhs;
+    Top = iSaveTop;
+    Rhs = iSaveRhs;
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr readMatrixOfBooleanInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piBool)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piAddr                             = NULL;
-       int* piRoot                             = NULL;
-       int iNbItem                             = NULL;
-       int* piBool                             = NULL;
-
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piAddr    = NULL;
+    int* piRoot    = NULL;
+    int iNbItem    = NULL;
+    int* piBool    = NULL;
 
-       if(_piParent == NULL)
-       {
-               sciErr = readNamedList(_pvCtx, _pstName, &iNbItem, &piRoot);
-               if(sciErr.iErr)
-               {
-                       addErrorMessage(&sciErr, API_ERROR_READ_BOOLEAN_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfBooleanInNamedList", _iItemPos + 1, _pstName);
-                       return sciErr;
-               }
 
-               sciErr = getListItemAddress(_pvCtx, piRoot, _iItemPos, &piAddr);
-       }
-       else
-       {
-               sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       }
+    if (_piParent == NULL)
+    {
+        sciErr = readNamedList(_pvCtx, _pstName, &iNbItem, &piRoot);
+        if (sciErr.iErr)
+        {
+            addErrorMessage(&sciErr, API_ERROR_READ_BOOLEAN_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfBooleanInNamedList", _iItemPos + 1, _pstName);
+            return sciErr;
+        }
+
+        sciErr = getListItemAddress(_pvCtx, piRoot, _iItemPos, &piAddr);
+    }
+    else
+    {
+        sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    }
 
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_BOOLEAN_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfBooleanInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_BOOLEAN_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfBooleanInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       sciErr = getMatrixOfBoolean(_pvCtx, piAddr, _piRows, _piCols, &piBool);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_BOOLEAN_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfBooleanInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = getMatrixOfBoolean(_pvCtx, piAddr, _piRows, _piCols, &piBool);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_BOOLEAN_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfBooleanInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       if(_piBool == NULL)
-       {
-               return sciErr;
-       }
+    if (_piBool == NULL)
+    {
+        return sciErr;
+    }
 
-       memcpy(_piBool, piBool, *_piRows * *_piCols * sizeof(int));
-       return sciErr;
+    memcpy(_piBool, piBool, *_piRows * *_piCols * sizeof(int));
+    return sciErr;
 }
 
 
 /*************************
- * polynomials functions *
- *************************/
+* polynomials functions *
+*************************/
 
 SciErr getMatrixOfPolyInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbCoef, double** _pdblReal)
 {
-       return getCommonMatrixOfPolyInList(_pvCtx, _piParent, _iItemPos, 0, _piRows, _piCols, _piNbCoef, _pdblReal, NULL);
+    return getCommonMatrixOfPolyInList(_pvCtx, _piParent, _iItemPos, 0, _piRows, _piCols, _piNbCoef, _pdblReal, NULL);
 }
 
 SciErr getComplexMatrixOfPolyInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbCoef, double** _pdblReal, double** _pdblImg)
 {
-       return getCommonMatrixOfPolyInList(_pvCtx, _piParent, _iItemPos, 1, _piRows, _piCols, _piNbCoef, _pdblReal, _pdblImg);
+    return getCommonMatrixOfPolyInList(_pvCtx, _piParent, _iItemPos, 1, _piRows, _piCols, _piNbCoef, _pdblReal, _pdblImg);
 }
 
 SciErr getCommonMatrixOfPolyInList(void* _pvCtx, int* _piParent, int _iItemPos, int _iComplex, int* _piRows, int* _piCols, int* _piNbCoef, double** _pdblReal, double** _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piAddr             = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piAddr  = NULL;
 
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_POLY_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "getComplexMatrixOfPolyInList" : "getMatrixOfPolyInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_POLY_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "getComplexMatrixOfPolyInList" : "getMatrixOfPolyInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
 
-       sciErr = getCommonMatrixOfPoly(_pvCtx, piAddr, _iComplex, _piRows, _piCols, _piNbCoef, _pdblReal, _pdblImg);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_POLY_IN_LIST, _("API_ERROR_GET_POLY_IN_LIST"));
-               return sciErr;
-       }
+    sciErr = getCommonMatrixOfPoly(_pvCtx, piAddr, _iComplex, _piRows, _piCols, _piNbCoef, _pdblReal, _pdblImg);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_POLY_IN_LIST, _("API_ERROR_GET_POLY_IN_LIST"));
+        return sciErr;
+    }
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr createMatrixOfPolyInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, char* _pstVarName, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal)
 {
-       return createCommonMatrixOfPolyInList(_pvCtx, _iVar, _piParent, _iItemPos, _pstVarName, 0, _iRows, _iCols, _piNbCoef, _pdblReal, NULL);
+    return createCommonMatrixOfPolyInList(_pvCtx, _iVar, _piParent, _iItemPos, _pstVarName, 0, _iRows, _iCols, _piNbCoef, _pdblReal, NULL);
 }
 
 SciErr createComplexMatrixOfPolyInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, char* _pstVarName, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal, const double* const* _pdblImg)
 {
-       return createCommonMatrixOfPolyInList(_pvCtx, _iVar, _piParent, _iItemPos, _pstVarName, 1, _iRows, _iCols, _piNbCoef, _pdblReal, _pdblImg);
+    return createCommonMatrixOfPolyInList(_pvCtx, _iVar, _piParent, _iItemPos, _pstVarName, 1, _iRows, _iCols, _piNbCoef, _pdblReal, _pdblImg);
 }
 
 SciErr createCommonMatrixOfPolyInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, char* _pstVarName, int _iComplex, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal, const double* const* _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piItemAddr                 = NULL;
-       int *piEnd                                      = NULL;
-       int iItemLen                            = 0;
-       int iTotalLen                           = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piItemAddr   = NULL;
+    int *piEnd     = NULL;
+    int iItemLen    = 0;
+    int iTotalLen    = 0;
 
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piItemAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_POLY_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfPolyInList" : "createMatrixOfPolyInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piItemAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_POLY_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfPolyInList" : "createMatrixOfPolyInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       sciErr = fillCommonMatrixOfPolyInList(_pvCtx, _iVar, _piParent, _iItemPos, _pstVarName, _iComplex, _iRows, _iCols, _piNbCoef, _pdblReal, _pdblImg, &iTotalLen);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_POLY_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfPolyInList" : "createMatrixOfPolyInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = fillCommonMatrixOfPolyInList(_pvCtx, _iVar, _piParent, _iItemPos, _pstVarName, _iComplex, _iRows, _iCols, _piNbCoef, _pdblReal, _pdblImg, &iTotalLen);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_POLY_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfPolyInList" : "createMatrixOfPolyInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       iItemLen                                                = 9 + _iRows * _iCols + (9 + _iRows * _iCols)%2;
-       iItemLen                                                += iTotalLen;
-       piEnd                                                           =       piItemAddr + iItemLen;
-       if(_iItemPos == _piParent[1])
-       {
-               updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
-       }
+    iItemLen      = 9 + _iRows * _iCols + (9 + _iRows * _iCols) % 2;
+    iItemLen      += iTotalLen;
+    piEnd        = piItemAddr + iItemLen;
+    if (_iItemPos == _piParent[1])
+    {
+        updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
+    }
 
-       closeList(_iVar, piEnd);
+    closeList(_iVar, piEnd);
 
-       return sciErr;
+    return sciErr;
 }
 
 static SciErr fillCommonMatrixOfPolyInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, char* _pstVarName, int _iComplex, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal, const double* const* _pdblImg, int* _piTotalLen)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNbItem                             = 0;
-       int iTotalLen                   = 0;
-       int* piOffset                   = NULL;
-       int* piChildAddr        = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNbItem    = 0;
+    int iTotalLen   = 0;
+    int* piOffset   = NULL;
+    int* piChildAddr = NULL;
 
-       int iItemLen                    = 0;
+    int iItemLen   = 0;
 
-       //Does item can be added in the list
-       sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_POLY_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfPolyInList" : "createMatrixOfPolyInList", _iItemPos + 1);
-               return sciErr;
-       }
+    //Does item can be added in the list
+    sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_POLY_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfPolyInList" : "createMatrixOfPolyInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       if(iNbItem < _iItemPos)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfPolyInList" : "createMatrixOfPolyInList", _iItemPos + 1);
-               return sciErr;
-       }
+    if (iNbItem < _iItemPos)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfPolyInList" : "createMatrixOfPolyInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_POLY_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfPolyInList" : "createMatrixOfPolyInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_POLY_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfPolyInList" : "createMatrixOfPolyInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       sciErr = fillCommonMatrixOfPoly(_pvCtx, piChildAddr, _pstVarName, _iComplex, _iRows, _iCols, _piNbCoef, _pdblReal, _pdblImg, &iTotalLen);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_POLY_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfPolyInList" : "createMatrixOfPolyInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = fillCommonMatrixOfPoly(_pvCtx, piChildAddr, _pstVarName, _iComplex, _iRows, _iCols, _piNbCoef, _pdblReal, _pdblImg, &iTotalLen);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_POLY_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfPolyInList" : "createMatrixOfPolyInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       piOffset                                                = _piParent + 2;
+    piOffset      = _piParent + 2;
 
-       iItemLen                                                = 9 + _iRows * _iCols + (9 + _iRows * _iCols)%2;
-       iItemLen                                                += iTotalLen;
-       piOffset[_iItemPos] = piOffset[_iItemPos - 1] + ((iItemLen + 1) / 2);
+    iItemLen      = 9 + _iRows * _iCols + (9 + _iRows * _iCols) % 2;
+    iItemLen      += iTotalLen;
+    piOffset[_iItemPos] = piOffset[_iItemPos - 1] + ((iItemLen + 1) / 2);
 
-       *_piTotalLen = iTotalLen;
-       return sciErr;
+    *_piTotalLen = iTotalLen;
+    return sciErr;
 }
 
 
 SciErr createMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, char* _pstVarName, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal)
 {
-       return createCommonMatrixOfPolyInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, _pstVarName, 0, _iRows, _iCols, _piNbCoef, _pdblReal, NULL);
+    return createCommonMatrixOfPolyInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, _pstVarName, 0, _iRows, _iCols, _piNbCoef, _pdblReal, NULL);
 }
 
 SciErr createComplexMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, char* _pstVarName, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal, const double* const* _pdblImg)
 {
-       return createCommonMatrixOfPolyInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, _pstVarName, 1, _iRows, _iCols, _piNbCoef, _pdblReal, _pdblImg);
+    return createCommonMatrixOfPolyInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, _pstVarName, 1, _iRows, _iCols, _piNbCoef, _pdblReal, _pdblImg);
 }
 
-SciErr createCommonMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, char* _pstVarName, int _iComplex, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal, const double* const* _pdblImg)
+SciErr createCommonMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int* /*_piParent*/, int _iItemPos, char* _pstVarName, int _iComplex, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal, const double* const* _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iVarID[nsiz];
-  int iSaveRhs                 = Rhs;
-       int iSaveTop                    = Top;
-       int *piAddr                             = NULL;
-       int* piEnd                              = NULL;
-       int* piChildAddr        = NULL;
-       int iTotalLen                   = 0;
-       int iItemLen                    = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iVarID[nsiz];
+    int iSaveRhs        = Rhs;
+    int iSaveTop        = Top;
+    int *piAddr         = NULL;
+    int* piEnd          = NULL;
+    int* piChildAddr    = NULL;
+    int iTotalLen       = 0;
+    int iItemLen        = 0;
+    int* piParent       = getLastNamedListAddress(_pstName, _iItemPos);
+
 
     if (!checkNamedVarFormat(_pvCtx, _pstName))
     {
@@ -1580,309 +1874,323 @@ SciErr createCommonMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, i
     C2F(str2name)(_pstName, iVarID, (unsigned long)strlen(_pstName));
     Top = Top + Nbvars + 1;
 
-       getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
+    getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
 
-       sciErr = fillCommonMatrixOfPolyInList(_pvCtx, Top, _piParent, _iItemPos, _pstVarName, _iComplex, _iRows, _iCols, _piNbCoef, _pdblReal, _pdblImg, &iTotalLen);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_POLY_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), _iComplex ? "createComplexMatrixOfPolyInNamedList" : "createMatrixOfPolyInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = fillCommonMatrixOfPolyInList(_pvCtx, Top, piParent, _iItemPos, _pstVarName, _iComplex, _iRows, _iCols, _piNbCoef, _pdblReal, _pdblImg, &iTotalLen);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_POLY_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), _iComplex ? "createComplexMatrixOfPolyInNamedList" : "createMatrixOfPolyInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       iItemLen                                                = 9 + _iRows * _iCols + (9 + _iRows * _iCols)%2;
-       iItemLen                                                += iTotalLen;
+    iItemLen      = 9 + _iRows * _iCols + (9 + _iRows * _iCols) % 2;
+    iItemLen      += iTotalLen;
 
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_POLY_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), _iComplex ? "createComplexMatrixOfPolyInNamedList" : "createMatrixOfPolyInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = getListItemAddress(_pvCtx, piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_POLY_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), _iComplex ? "createComplexMatrixOfPolyInNamedList" : "createMatrixOfPolyInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       piEnd                                                           =       piChildAddr + iItemLen;
-       closeList(Top, piEnd);
+    piEnd        = piChildAddr + iItemLen;
+    closeList(Top, piEnd);
 
-       if(_iItemPos == _piParent[1])
-       {
-               updateNamedListOffset(_pvCtx, Top, _piParent, _iItemPos, piEnd);
-               createNamedVariable(iVarID);
-       }
+    if (_iItemPos == piParent[1])
+    {
+        updateNamedListOffset(_pvCtx, Top, _pstName, piParent, _iItemPos, piEnd);
+        popNamedListAddress(_pstName);
+    }
 
 
-       Top = iSaveTop;
-  Rhs = iSaveRhs;
+    Top = iSaveTop;
+    Rhs = iSaveRhs;
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr readMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbCoef, double** _pdblReal)
 {
-       return readCommonMatrixOfPolyInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 0, _piRows, _piCols, _piNbCoef, _pdblReal, NULL);
+    return readCommonMatrixOfPolyInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 0, _piRows, _piCols, _piNbCoef, _pdblReal, NULL);
 }
 
 SciErr readComplexMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbCoef, double** _pdblReal, double** _pdblImg)
 {
-       return readCommonMatrixOfPolyInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 1, _piRows, _piCols, _piNbCoef, _pdblReal, _pdblImg);
+    return readCommonMatrixOfPolyInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 1, _piRows, _piCols, _piNbCoef, _pdblReal, _pdblImg);
 }
 
 SciErr readCommonMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iComplex, int* _piRows, int* _piCols, int* _piNbCoef, double** _pdblReal, double** _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piAddr                             = NULL;
-       int* piRoot                             = NULL;
-       int iNbItem                             = NULL;
-
-       if(_piParent == NULL)
-       {
-               sciErr = readNamedList(_pvCtx, _pstName, &iNbItem, &piRoot);
-               if(sciErr.iErr)
-               {
-                       addErrorMessage(&sciErr, API_ERROR_READ_POLY_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), _iComplex ? "readComplexMatrixOfPolyInNamedList" : "readMatrixOfPolyInNamedList", _iItemPos + 1, _pstName);
-                       return sciErr;
-               }
-
-               sciErr = getListItemAddress(_pvCtx, piRoot, _iItemPos, &piAddr);
-       }
-       else
-       {
-               sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       }
-
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_POLY_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), _iComplex ? "readComplexMatrixOfPolyInNamedList" : "readMatrixOfPolyInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
-
-       sciErr = getCommonMatrixOfPoly(_pvCtx, piAddr, _iComplex, _piRows, _piCols, _piNbCoef, _pdblReal, _pdblImg);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_POLY_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), _iComplex ? "readComplexMatrixOfPolyInNamedList" : "readMatrixOfPolyInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
-
-       return sciErr;
-}
-
-/**********************
- * integers functions *
- **********************/
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piAddr    = NULL;
+    int* piRoot    = NULL;
+    int iNbItem    = NULL;
 
-static SciErr fillCommonMatrixOfIntegerInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iPrecision, int _iRows, int _iCols, void** _pvData)
+    if (_piParent == NULL)
+    {
+        sciErr = readNamedList(_pvCtx, _pstName, &iNbItem, &piRoot);
+        if (sciErr.iErr)
+        {
+            addErrorMessage(&sciErr, API_ERROR_READ_POLY_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), _iComplex ? "readComplexMatrixOfPolyInNamedList" : "readMatrixOfPolyInNamedList", _iItemPos + 1, _pstName);
+            return sciErr;
+        }
+
+        sciErr = getListItemAddress(_pvCtx, piRoot, _iItemPos, &piAddr);
+    }
+    else
+    {
+        sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    }
+
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_POLY_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), _iComplex ? "readComplexMatrixOfPolyInNamedList" : "readMatrixOfPolyInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
+
+    sciErr = getCommonMatrixOfPoly(_pvCtx, piAddr, _iComplex, _piRows, _piCols, _piNbCoef, _pdblReal, _pdblImg);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_POLY_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), _iComplex ? "readComplexMatrixOfPolyInNamedList" : "readMatrixOfPolyInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
+
+    return sciErr;
+}
+
+/**********************
+* integers functions *
+**********************/
+
+static SciErr fillCommonMatrixOfIntegerInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iPrecision, int _iRows, int _iCols, void** _pvData)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNbItem                             = 0;
-       int* piOffset                   = NULL;
-       int* piChildAddr        = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNbItem    = 0;
+    int* piOffset   = NULL;
+    int* piChildAddr = NULL;
 
-       //Does item can be added in the list
-       sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_INT_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfIntegerInList", _iItemPos + 1);
-               return sciErr;
-       }
+    //Does item can be added in the list
+    sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_INT_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfIntegerInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       if(iNbItem < _iItemPos)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfIntegerInList", _iItemPos + 1);
-               return sciErr;
-       }
+    if (iNbItem < _iItemPos)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfIntegerInList", _iItemPos + 1);
+        return sciErr;
+    }
 
 
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_INT_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfIntegerInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_INT_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfIntegerInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       sciErr = fillCommonMatrixOfInteger(_pvCtx, piChildAddr, _iPrecision, _iRows, _iCols, _pvData);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_INT_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfIntegerInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = fillCommonMatrixOfInteger(_pvCtx, piChildAddr, _iPrecision, _iRows, _iCols, _pvData);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_INT_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfIntegerInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       piOffset                                                = _piParent + 2;
+    piOffset      = _piParent + 2;
 
-       //integer : size in double
-       //1st case, 5 * 1 int8  -> (10,5) (1,1) (1,2,3,4,5,x,x,x)                                                                                       -> 3 : 2 + 5/8 + !!(5%8) -> 2 + 0 + 1 -> 3
-       //2nd case, 5 * 1 int16 -> (10,5) (1,2)                 (1,2,3,4)                               (5,x,x,x)                                       -> 4 : 2 + 5/4 + !!(5%4) -> 2 + 1 + 1 -> 4
-       //3th case, 5 * 1 int32 -> (10,5) (1,3)                         (1,2)                                           (3,4)                   (5,x)   -> 5 : 2 + 5/2 + !!(5%2) -> 2 + 2 + 1 -> 5
+    //integer : size in double
+    //1st case, 5 * 1 int8  -> (10,5) (1,1) (1,2,3,4,5,x,x,x)           -> 3 : 2 + 5/8 + !!(5%8) -> 2 + 0 + 1 -> 3
+    //2nd case, 5 * 1 int16 -> (10,5) (1,2)   (1,2,3,4)    (5,x,x,x)     -> 4 : 2 + 5/4 + !!(5%4) -> 2 + 1 + 1 -> 4
+    //3th case, 5 * 1 int32 -> (10,5) (1,3)    (1,2)      (3,4)   (5,x) -> 5 : 2 + 5/2 + !!(5%2) -> 2 + 2 + 1 -> 5
 
-       //with 5*5 int matrix
-       //1st case, 5 * 5 int8  -> (10,5) (5,1) (1:25) -> 3 : 2 + 25/8 + !!(25%8) -> 2 + 3  + 1 -> 6
-       //2nd case, 5 * 1 int16 -> (10,5) (5,2) (1:25) -> 4 : 2 + 25/4 + !!(25%4) -> 2 + 6  + 1 -> 9
-       //3th case, 5 * 5 int32 -> (10,5) (5,3) (1:25) -> 5 : 2 + 25/2 + !!(25%2) -> 2 + 12 + 1 -> 15
-       piOffset[_iItemPos] = piOffset[_iItemPos - 1] + 2 + _iRows * _iCols / (sizeof(double) / (_iPrecision % 10 )) + (int)(!!(_iRows * _iCols)) % (sizeof(double) / (_iPrecision % 10 ));
+    //with 5*5 int matrix
+    //1st case, 5 * 5 int8  -> (10,5) (5,1) (1:25) -> 3 : 2 + 25/8 + !!(25%8) -> 2 + 3  + 1 -> 6
+    //2nd case, 5 * 1 int16 -> (10,5) (5,2) (1:25) -> 4 : 2 + 25/4 + !!(25%4) -> 2 + 6  + 1 -> 9
+    //3th case, 5 * 5 int32 -> (10,5) (5,3) (1:25) -> 5 : 2 + 25/2 + !!(25%2) -> 2 + 12 + 1 -> 15
+    piOffset[_iItemPos] = piOffset[_iItemPos - 1] + 2 + _iRows * _iCols / (sizeof(double) / (_iPrecision % 10 )) + (int)(!!(_iRows * _iCols)) % (sizeof(double) / (_iPrecision % 10 ));
 
-       return sciErr;
+    return sciErr;
 }
 
 static SciErr allocCommonMatrixOfIntegerInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iPrecision, int _iRows, int _iCols, void** _pvData)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNewPos                             = Top - Rhs + _iVar;
-       int* piEnd                              = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNewPos    = Top - Rhs + _iVar;
+    int* piEnd    = NULL;
 
-       sciErr = fillCommonMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, _iPrecision, _iRows, _iCols, _pvData);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ALLOC_INT_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "allocMatrixOfIntegerInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = fillCommonMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, _iPrecision, _iRows, _iCols, _pvData);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ALLOC_INT_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "allocMatrixOfIntegerInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       piEnd = (int*)*_pvData + _iRows * _iCols / (sizeof(int) / (_iPrecision % 10)) + (int)(!!(_iRows * _iCols)) % (sizeof(int) / (_iPrecision % 10));
-       closeList(iNewPos, piEnd);
+    piEnd = (int*) * _pvData + _iRows * _iCols / (sizeof(int) / (_iPrecision % 10)) + (int)(!!(_iRows * _iCols)) % (sizeof(int) / (_iPrecision % 10));
+    closeList(iNewPos, piEnd);
 
-       if(_iItemPos == _piParent[1])
-       {
-               updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
-       }
-       return sciErr;
+    if (_iItemPos == _piParent[1])
+    {
+        updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
+    }
+    return sciErr;
 }
 
 SciErr allocMatrixOfUnsignedInteger8InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, unsigned char** _pucData)
 {
-       return allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_UINT8, _iRows, _iCols, (void **)_pucData);
+    return allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_UINT8, _iRows, _iCols, (void **)_pucData);
 }
 
 SciErr allocMatrixOfUnsignedInteger16InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, unsigned short** _pusData)
 {
-       return allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_UINT16, _iRows, _iCols, (void**)_pusData);
+    return allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_UINT16, _iRows, _iCols, (void**)_pusData);
 }
 
 SciErr allocMatrixOfUnsignedInteger32InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, unsigned int** _puiData)
 {
-       return allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_UINT32, _iRows, _iCols, (void**)_puiData);
+    return allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_UINT32, _iRows, _iCols, (void**)_puiData);
 }
 
 SciErr allocMatrixOfInteger8InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, char** _pcData)
 {
-       return allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_INT8, _iRows, _iCols, (void**)_pcData);
+    return allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_INT8, _iRows, _iCols, (void**)_pcData);
 }
 
 SciErr allocMatrixOfInteger16InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, short** _psData)
 {
-       return allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_INT16, _iRows, _iCols, (void**)_psData);
+    return allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_INT16, _iRows, _iCols, (void**)_psData);
 }
 
 SciErr allocMatrixOfInteger32InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int** _piData)
 {
-       return allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_INT32, _iRows, _iCols, (void**)_piData);
+    return allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_INT32, _iRows, _iCols, (void**)_piData);
 }
 
 static SciErr createCommomMatrixOfIntegerInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iPrecision, int _iRows, int _iCols, const void* _pvData)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       void *pvData = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    void *pvData = NULL;
 
-       sciErr = allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, _iPrecision, _iRows, _iCols, &pvData);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_INT_IN_LIST,_("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfIntegerInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, _iPrecision, _iRows, _iCols, &pvData);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_INT_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfIntegerInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       if(pvData != NULL)
-       {
-               memcpy(pvData, _pvData, _iRows * _iCols * (_iPrecision % 10));
-       }
-       return sciErr;
+    if (pvData != NULL)
+    {
+        memcpy(pvData, _pvData, _iRows * _iCols * (_iPrecision % 10));
+    }
+    return sciErr;
 }
 
 SciErr createMatrixOfUnsignedInteger8InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned char* _pucData)
 {
-       return createCommomMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_UINT8, _iRows, _iCols, _pucData);
+    return createCommomMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_UINT8, _iRows, _iCols, _pucData);
 }
 
 SciErr createMatrixOfUnsignedInteger16InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned short* _pusData)
 {
-       return createCommomMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_UINT16, _iRows, _iCols, _pusData);
+    return createCommomMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_UINT16, _iRows, _iCols, _pusData);
 }
 
 SciErr createMatrixOfUnsignedInteger32InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned int* _puiData)
 {
-       return createCommomMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_UINT32, _iRows, _iCols, _puiData);
+    return createCommomMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_UINT32, _iRows, _iCols, _puiData);
 }
 
 SciErr createMatrixOfInteger8InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const char* _pcData)
 {
-       return createCommomMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_INT8, _iRows, _iCols, _pcData);
+    return createCommomMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_INT8, _iRows, _iCols, _pcData);
 }
 
 SciErr createMatrixOfInteger16InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const short* _psData)
 {
-       return createCommomMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_INT16, _iRows, _iCols, _psData);
+    return createCommomMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_INT16, _iRows, _iCols, _psData);
 }
 
 SciErr createMatrixOfInteger32InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const int* _piData)
 {
-       return createCommomMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_INT32, _iRows, _iCols, _piData);
+    return createCommomMatrixOfIntegerInList(_pvCtx, _iVar, _piParent, _iItemPos, SCI_INT32, _iRows, _iCols, _piData);
 }
 
 static SciErr getCommonMatrixOfIntegerInList(void* _pvCtx, int* _piParent, int _iItemPos, int _iPrecision, int* _piRows, int* _piCols, void** _pvData)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piAddr             = NULL;
-       
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_INT_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getMatrixOfIntegerInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piAddr  = NULL;
 
-       sciErr = getCommonMatrixOfInteger(_pvCtx, piAddr, _iPrecision, _piRows, _piCols, _pvData);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_INT_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getMatrixOfIntegerInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_INT_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getMatrixOfIntegerInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
 
-       return sciErr;
+    sciErr = getCommonMatrixOfInteger(_pvCtx, piAddr, _iPrecision, _piRows, _piCols, _pvData);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_INT_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getMatrixOfIntegerInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
+
+    return sciErr;
 }
 
 SciErr getMatrixOfUnsignedInteger8InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned char** _pucData)
 {
-       return getCommonMatrixOfIntegerInList(_pvCtx, _piParent, _iItemPos, SCI_UINT8, _piRows, _piCols, (void**)_pucData);
+    return getCommonMatrixOfIntegerInList(_pvCtx, _piParent, _iItemPos, SCI_UINT8, _piRows, _piCols, (void**)_pucData);
 }
 
 SciErr getMatrixOfUnsignedInteger16InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned short** _pusData)
 {
-       return getCommonMatrixOfIntegerInList(_pvCtx, _piParent, _iItemPos, SCI_UINT16, _piRows, _piCols, (void**)_pusData);
+    return getCommonMatrixOfIntegerInList(_pvCtx, _piParent, _iItemPos, SCI_UINT16, _piRows, _piCols, (void**)_pusData);
 }
 
 SciErr getMatrixOfUnsignedInteger32InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned int** _puiData)
 {
-       return getCommonMatrixOfIntegerInList(_pvCtx, _piParent, _iItemPos, SCI_UINT32, _piRows, _piCols, (void**)_puiData);
+    return getCommonMatrixOfIntegerInList(_pvCtx, _piParent, _iItemPos, SCI_UINT32, _piRows, _piCols, (void**)_puiData);
 }
 
 SciErr getMatrixOfInteger8InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, char** _pcData)
 {
-       return getCommonMatrixOfIntegerInList(_pvCtx, _piParent, _iItemPos, SCI_INT8, _piRows, _piCols, (void**)_pcData);
+    return getCommonMatrixOfIntegerInList(_pvCtx, _piParent, _iItemPos, SCI_INT8, _piRows, _piCols, (void**)_pcData);
 }
 
 SciErr getMatrixOfInteger16InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, short** _psData)
 {
-       return getCommonMatrixOfIntegerInList(_pvCtx, _piParent, _iItemPos, SCI_INT16, _piRows, _piCols, (void**)_psData);
+    return getCommonMatrixOfIntegerInList(_pvCtx, _piParent, _iItemPos, SCI_INT16, _piRows, _piCols, (void**)_psData);
 }
 
 SciErr getMatrixOfInteger32InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int** _piData)
 {
-       return getCommonMatrixOfIntegerInList(_pvCtx, _piParent, _iItemPos, SCI_INT32, _piRows, _piCols, (void**)_piData);
+    return getCommonMatrixOfIntegerInList(_pvCtx, _piParent, _iItemPos, SCI_INT32, _piRows, _piCols, (void**)_piData);
 }
 
-static SciErr createCommonMatrixOfIntegerInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iPrecision, int _iRows, int _iCols, const void* _pvData)
+static SciErr createCommonMatrixOfIntegerInNamedList(void* _pvCtx, const char* _pstName, int* /*_piParent*/, int _iItemPos, int _iPrecision, int _iRows, int _iCols, const void* _pvData)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iVarID[nsiz];
-    int iSaveRhs                       = Rhs;
-       int iSaveTop                    = Top;
-       int *piAddr                             = NULL;
-       int* piEnd                              = NULL;
-       int* piChildAddr        = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iVarID[nsiz];
+    int iSaveRhs        = Rhs;
+    int iSaveTop        = Top;
+    int *piAddr         = NULL;
+    int* piEnd          = NULL;
+    int* piChildAddr    = NULL;
+    int* piParent       = getLastNamedListAddress(_pstName, _iItemPos);
+
 
     if (!checkNamedVarFormat(_pvCtx, _pstName))
     {
@@ -1893,267 +2201,276 @@ static SciErr createCommonMatrixOfIntegerInNamedList(void* _pvCtx, const char* _
     C2F(str2name)(_pstName, iVarID, (unsigned long)strlen(_pstName));
     Top = Top + Nbvars + 1;
 
-       getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
+    getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
 
-       sciErr = createCommomMatrixOfIntegerInList(_pvCtx, Top, _piParent, _iItemPos, _iPrecision, _iRows, _iCols, _pvData);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_INT_IN_NAMED_LIST,_("%s: Unable to create list item #%d in variable \"%s\""), "createMatrixOfIntegerInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = createCommomMatrixOfIntegerInList(_pvCtx, Top, piParent, _iItemPos, _iPrecision, _iRows, _iCols, _pvData);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_INT_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createMatrixOfIntegerInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_INT_IN_NAMED_LIST,_("%s: Unable to create list item #%d in variable \"%s\""), "createMatrixOfIntegerInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = allocCommonItemInList(_pvCtx, piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_INT_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createMatrixOfIntegerInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       //integer : size in int32
-       //1st case, 5 * 1 int8  -> 10 5 1 1 (1,2,3,4) (5,x,x,x)                                         -> 6 : 4 + 5/4 + !!(5%4) -> 4 + 1 + 1 -> 6
-       //2nd case, 5 * 1 int16 -> 10 5 1 2   (1,2)     (3,4)   (5,x)                   -> 7 : 4 + 5/2 + !!(5%2) -> 4 + 2 + 1 -> 7
-       //3th case, 5 * 1 int32 -> 10 5 1 4     1         2       3   4 5       -> 9 : 4 + 5/1 + !!(5%1) -> 4 + 5 + 0 -> 9
-       piEnd = piChildAddr + 4 + _iRows * _iCols / (sizeof(int) / (_iPrecision % 10)) + (int)(!!(_iRows * _iCols)) % ((sizeof(int) / (_iPrecision % 10)));
-       closeList(Top, piEnd);
+    //integer : size in int32
+    //1st case, 5 * 1 int8  -> 10 5 1 1 (1,2,3,4) (5,x,x,x)      -> 6 : 4 + 5/4 + !!(5%4) -> 4 + 1 + 1 -> 6
+    //2nd case, 5 * 1 int16 -> 10 5 1 2   (1,2)     (3,4)   (5,x)   -> 7 : 4 + 5/2 + !!(5%2) -> 4 + 2 + 1 -> 7
+    //3th case, 5 * 1 int32 -> 10 5 1 4     1         2       3   4 5 -> 9 : 4 + 5/1 + !!(5%1) -> 4 + 5 + 0 -> 9
+    piEnd = piChildAddr + 4 + _iRows * _iCols / (sizeof(int) / (_iPrecision % 10)) + (int)(!!(_iRows * _iCols)) % ((sizeof(int) / (_iPrecision % 10)));
+    closeList(Top, piEnd);
 
-       if(_iItemPos == _piParent[1])
-       {
-               updateNamedListOffset(_pvCtx, Top, _piParent, _iItemPos, piEnd);
-               createNamedVariable(iVarID);
-       }
+    if (_iItemPos == piParent[1])
+    {
+        updateNamedListOffset(_pvCtx, Top, _pstName, piParent, _iItemPos, piEnd);
+        popNamedListAddress(_pstName);
+    }
 
-       Top = iSaveTop;
-  Rhs = iSaveRhs;
+    Top = iSaveTop;
+    Rhs = iSaveRhs;
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr createMatrixOfUnsignedInteger8InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned char* _pucData)
 {
-       return createCommonMatrixOfIntegerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_UINT8, _iRows, _iCols, _pucData);
+    return createCommonMatrixOfIntegerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_UINT8, _iRows, _iCols, _pucData);
 }
 
 SciErr createMatrixOfUnsignedInteger16InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned short* _pusData)
 {
-       return createCommonMatrixOfIntegerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_UINT16, _iRows, _iCols, _pusData);
+    return createCommonMatrixOfIntegerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_UINT16, _iRows, _iCols, _pusData);
 }
 
 SciErr createMatrixOfUnsignedInteger32InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned int* _puiData)
 {
-       return createCommonMatrixOfIntegerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_UINT32, _iRows, _iCols, _puiData);
+    return createCommonMatrixOfIntegerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_UINT32, _iRows, _iCols, _puiData);
 }
 
 SciErr createMatrixOfInteger8InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const char* _pcData)
 {
-       return createCommonMatrixOfIntegerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_INT8, _iRows, _iCols, _pcData);
+    return createCommonMatrixOfIntegerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_INT8, _iRows, _iCols, _pcData);
 }
 
 SciErr createMatrixOfInteger16InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const short* _psData)
 {
-       return createCommonMatrixOfIntegerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_INT16, _iRows, _iCols, _psData);
+    return createCommonMatrixOfIntegerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_INT16, _iRows, _iCols, _psData);
 }
 
 SciErr createMatrixOfInteger32InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const int* _piData)
 {
-       return createCommonMatrixOfIntegerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_INT32, _iRows, _iCols, _piData);
+    return createCommonMatrixOfIntegerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_INT32, _iRows, _iCols, _piData);
 }
 
 static SciErr readCommonMatrixOfIntgerInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iPrecision, int* _piRows, int* _piCols, void* _pvData)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNbItem                             = 0;
-       int* piAddr                             = NULL;
-       int* piRoot                             = NULL;
-       void* pvData                    = NULL;
-
-       if(_piParent == NULL)
-       {
-               sciErr = readNamedList(_pvCtx, _pstName, &iNbItem, &piRoot);
-               if(sciErr.iErr)
-               {
-                       addErrorMessage(&sciErr, API_ERROR_READ_INT_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfIntgerInNamedList", _iItemPos + 1, _pstName);
-                       return sciErr;
-               }
-
-               sciErr = getListItemAddress(_pvCtx, piRoot, _iItemPos, &piAddr);
-       }
-       else
-       {
-               sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       }
-
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_INT_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfIntgerInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
-
-       sciErr = getCommonMatrixOfInteger(_pvCtx, piAddr, _iPrecision, _piRows, _piCols, &pvData);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_INT_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfIntgerInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
-
-       if(_pvData == NULL)
-       {
-               return sciErr;
-       }
-
-       memcpy(_pvData, pvData, (_iPrecision % 10 ) * *_piRows * *_piCols);
-       return sciErr;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNbItem    = 0;
+    int* piAddr    = NULL;
+    int* piRoot    = NULL;
+    void* pvData   = NULL;
+
+    if (_piParent == NULL)
+    {
+        sciErr = readNamedList(_pvCtx, _pstName, &iNbItem, &piRoot);
+        if (sciErr.iErr)
+        {
+            addErrorMessage(&sciErr, API_ERROR_READ_INT_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfIntgerInNamedList", _iItemPos + 1, _pstName);
+            return sciErr;
+        }
+
+        sciErr = getListItemAddress(_pvCtx, piRoot, _iItemPos, &piAddr);
+    }
+    else
+    {
+        sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    }
+
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_INT_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfIntgerInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
+
+    sciErr = getCommonMatrixOfInteger(_pvCtx, piAddr, _iPrecision, _piRows, _piCols, &pvData);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_INT_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readMatrixOfIntgerInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
+
+    if (_pvData == NULL)
+    {
+        return sciErr;
+    }
+
+    memcpy(_pvData, pvData, (_iPrecision % 10 ) * *_piRows * *_piCols);
+    return sciErr;
 }
 
 SciErr readMatrixOfUnsignedInteger8InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned char* _pucData)
 {
-       return readCommonMatrixOfIntgerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_UINT8, _piRows, _piCols, _pucData);
+    return readCommonMatrixOfIntgerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_UINT8, _piRows, _piCols, _pucData);
 }
 
 SciErr readMatrixOfUnsignedInteger16InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned short* _pusData)
 {
-       return readCommonMatrixOfIntgerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_UINT16, _piRows, _piCols, _pusData);
+    return readCommonMatrixOfIntgerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_UINT16, _piRows, _piCols, _pusData);
 }
 
 SciErr readMatrixOfUnsignedInteger32InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned int* _puiData)
 {
-       return readCommonMatrixOfIntgerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_UINT32, _piRows, _piCols, _puiData);
+    return readCommonMatrixOfIntgerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_UINT32, _piRows, _piCols, _puiData);
 }
 
 SciErr readMatrixOfIntger8InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, char* _pcData)
 {
-       return readCommonMatrixOfIntgerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_INT8, _piRows, _piCols, _pcData);
+    return readCommonMatrixOfIntgerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_INT8, _piRows, _piCols, _pcData);
 }
 
 SciErr readMatrixOfIntger16InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, short* _psData)
 {
-       return readCommonMatrixOfIntgerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_INT16, _piRows, _piCols, _psData);
+    return readCommonMatrixOfIntgerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_INT16, _piRows, _piCols, _psData);
 }
 
 SciErr readMatrixOfIntger32InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piData)
 {
-       return readCommonMatrixOfIntgerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_INT32, _piRows, _piCols, _piData);
+    return readCommonMatrixOfIntgerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_INT32, _piRows, _piCols, _piData);
 }
 
 /*********************
- * sparses functions *
- *********************/
+* sparses functions *
+*********************/
 
 static SciErr fillCommonSparseMatrixInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iComplex, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal, const double* _pdblImg, int* _piTotalSize)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNbItem                             = 0;
-       int iTotalLen                   = 0;
-       int* piOffset                   = NULL;
-       int* piNbItemRow        = NULL;
-       int* piColPos                   = NULL;
-       int* piChildAddr        = NULL;
-       double* pdblReal        = NULL;
-       double* pdblImg         = NULL;
-
-       int iItemLen                    = 0;
-
-       //Does item can be added in the list
-       sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createComplexSparseMatrixInList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       if(iNbItem < _iItemPos)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createSparseMatrixInNamedList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createComplexSparseMatrixInList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       sciErr = fillCommonSparseMatrix(_pvCtx, piChildAddr, _iComplex, _iRows, _iCols, _iNbItem, &piNbItemRow, &piColPos, &pdblReal, &pdblImg, &iTotalLen);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createComplexSparseMatrixInList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       piOffset                                                = _piParent + 2;
-
-       iItemLen                                                = 5 + _iRows + _iNbItem + !((_iRows + _iNbItem) % 2);
-       iItemLen                                                += iTotalLen * 2;
-       piOffset[_iItemPos] = piOffset[_iItemPos - 1] + ((iItemLen + 1) / 2);
-
-       memcpy(piNbItemRow, _piNbItemRow, _iRows * sizeof(int));
-       memcpy(piColPos, _piColPos, _iNbItem * sizeof(int));
-
-       memcpy(pdblReal, _pdblReal, _iNbItem * sizeof(double));
-       if(_iComplex)
-       {
-               memcpy(pdblImg, _pdblImg, _iNbItem * sizeof(double));
-       }
-
-       *_piTotalSize = iTotalLen;
-       return sciErr;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNbItem    = 0;
+    int iTotalLen   = 0;
+    int* piOffset   = NULL;
+    int* piNbItemRow = NULL;
+    int* piColPos   = NULL;
+    int* piChildAddr = NULL;
+    double* pdblReal = NULL;
+    double* pdblImg  = NULL;
+
+    int iItemLen   = 0;
+
+    //Does item can be added in the list
+    sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createComplexSparseMatrixInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    if (iNbItem < _iItemPos)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createSparseMatrixInNamedList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createComplexSparseMatrixInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    sciErr = fillCommonSparseMatrix(_pvCtx, piChildAddr, _iComplex, _iRows, _iCols, _iNbItem, &piNbItemRow, &piColPos, &pdblReal, &pdblImg, &iTotalLen);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createComplexSparseMatrixInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    piOffset      = _piParent + 2;
+
+    iItemLen      = 5 + _iRows + _iNbItem + !((_iRows + _iNbItem) % 2);
+    iItemLen      += iTotalLen * 2;
+    piOffset[_iItemPos] = piOffset[_iItemPos - 1] + ((iItemLen + 1) / 2);
+
+    memcpy(piNbItemRow, _piNbItemRow, _iRows * sizeof(int));
+    memcpy(piColPos, _piColPos, _iNbItem * sizeof(int));
+
+    memcpy(pdblReal, _pdblReal, _iNbItem * sizeof(double));
+    if (_iComplex)
+    {
+        memcpy(pdblImg, _pdblImg, _iNbItem * sizeof(double));
+    }
+
+    *_piTotalSize = iTotalLen;
+    return sciErr;
 }
 
 static SciErr createCommonSparseMatrixInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iComplex, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal, const double* _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piAddr                                     = NULL;
-       int *piEnd                                      = NULL;
-       int iItemLen                            = 0;
-       int iTotalLen                           = 0;
-
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createComplexSparseMatrixInList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       sciErr = fillCommonSparseMatrixInList(_pvCtx, _iVar, _piParent, _iItemPos, _iComplex, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos, _pdblReal, _pdblImg, &iTotalLen);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createComplexSparseMatrixInList", _iItemPos + 1);
-               return sciErr;
-       }
-       
-       iItemLen                                                = 5 + _iRows + _iNbItem + !((_iRows + _iNbItem) % 2);
-       iItemLen                                                += iTotalLen * 2;
-       piEnd                                                           =       piAddr + iItemLen;
-       if(_iItemPos == _piParent[1])
-       {
-               updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
-       }
-
-       closeList(_iVar, piEnd);
-
-       return sciErr;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piAddr     = NULL;
+    int *piEnd     = NULL;
+    int iItemLen    = 0;
+    int iTotalLen    = 0;
+
+    sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createComplexSparseMatrixInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    sciErr = fillCommonSparseMatrixInList(_pvCtx, _iVar, _piParent, _iItemPos, _iComplex, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos, _pdblReal, _pdblImg, &iTotalLen);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createComplexSparseMatrixInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    iItemLen      = 5 + _iRows + _iNbItem + !((_iRows + _iNbItem) % 2);
+    iItemLen      += iTotalLen * 2;
+    piEnd        = piAddr + iItemLen;
+    if (_iItemPos == _piParent[1])
+    {
+        updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
+    }
+
+    closeList(_iVar, piEnd);
+
+    return sciErr;
 }
 
 SciErr createSparseMatrixInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal)
 {
-       return createCommonSparseMatrixInList(_pvCtx, _iVar, _piParent, _iItemPos, 0, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos, _pdblReal, NULL);
+    return createCommonSparseMatrixInList(_pvCtx, _iVar, _piParent, _iItemPos, 0, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos, _pdblReal, NULL);
 }
 
 SciErr createComplexSparseMatrixInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal, const double* _pdblImg)
 {
-       return createCommonSparseMatrixInList(_pvCtx, _iVar, _piParent, _iItemPos, 1, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos, _pdblReal, _pdblImg);
+    return createCommonSparseMatrixInList(_pvCtx, _iVar, _piParent, _iItemPos, 1, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos, _pdblReal, _pdblImg);
 }
 
-SciErr createCommonSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iComplex, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal, const double* _pdblImg)
+SciErr createCommonSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* /*_piParent*/, int _iItemPos, int _iComplex, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal, const double* _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iVarID[nsiz];
-  int iSaveRhs                 = Rhs;
-       int iSaveTop                    = Top;
-       int iItemLen                    = 0;
-       int *piAddr                             = NULL;
-       int* piEnd                              = NULL;
-       int* piChildAddr        = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iVarID[nsiz];
+    int iSaveRhs        = Rhs;
+    int iSaveTop        = Top;
+    int iItemLen        = 0;
+    int *piAddr         = NULL;
+    int* piEnd          = NULL;
+    int* piChildAddr    = NULL;
+    int* piParent       = getLastNamedListAddress(_pstName, _iItemPos);
 
     if (!checkNamedVarFormat(_pvCtx, _pstName))
     {
@@ -2164,253 +2481,264 @@ SciErr createCommonSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, i
     C2F(str2name)(_pstName, iVarID, (unsigned long)strlen(_pstName));
     Top = Top + Nbvars + 1;
 
-       getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
+    getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
 
-       sciErr = createCommonSparseMatrixInList(_pvCtx, Top, _piParent, _iItemPos, _iComplex, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos, _pdblReal, _pdblImg);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_SPARSE_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), _iComplex ? "createComplexSparseMatrixInNamedList" : "createSparseMatrixInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = createCommonSparseMatrixInList(_pvCtx, Top, piParent, _iItemPos, _iComplex, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos, _pdblReal, _pdblImg);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_SPARSE_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), _iComplex ? "createComplexSparseMatrixInNamedList" : "createSparseMatrixInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_SPARSE_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), _iComplex ? "createComplexSparseMatrixInNamedList" : "createSparseMatrixInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = allocCommonItemInList(_pvCtx, piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_SPARSE_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), _iComplex ? "createComplexSparseMatrixInNamedList" : "createSparseMatrixInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       iItemLen                                                = 5 + _iRows + _iNbItem + !((_iRows + _iNbItem) % 2);
-       iItemLen                                                += _iNbItem * (_iComplex + 1) * 2;
-       piEnd                                                           =       piChildAddr + iItemLen;
-       closeList(Top, piEnd);
+    iItemLen      = 5 + _iRows + _iNbItem + !((_iRows + _iNbItem) % 2);
+    iItemLen      += _iNbItem * (_iComplex + 1) * 2;
+    piEnd        = piChildAddr + iItemLen;
+    closeList(Top, piEnd);
 
-       if(_iItemPos == _piParent[1])
-       {
-               updateNamedListOffset(_pvCtx, Top, _piParent, _iItemPos, piEnd);
-               createNamedVariable(iVarID);
-       }
+    if (_iItemPos == piParent[1])
+    {
+        updateNamedListOffset(_pvCtx, Top, _pstName, piParent, _iItemPos, piEnd);
+        popNamedListAddress(_pstName);
+    }
 
-       Top = iSaveTop;
-  Rhs = iSaveRhs;
+    Top = iSaveTop;
+    Rhs = iSaveRhs;
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr createSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal)
 {
-       return createCommonSparseMatrixInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 0, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos, _pdblReal, NULL);
+    return createCommonSparseMatrixInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 0, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos, _pdblReal, NULL);
 }
 
 SciErr createComplexSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal, const double* _pdblImg)
 {
-       return createCommonSparseMatrixInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 1, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos, _pdblReal, _pdblImg);
+    return createCommonSparseMatrixInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 1, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos, _pdblReal, _pdblImg);
 }
 
 static SciErr getCommonSparseMatrixInList(void* _pvCtx, int* _piParent, int _iItemPos, int _iComplex, int* _piRows, int* _piCols, int* _piNbItem, int** _piNbItemRow, int** _piColPos, double** _pdblReal, double** _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piAddr             = NULL;
-       
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_SPARSE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "getComplexSparseMatrixInList" : "getSparseMatrixInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piAddr  = NULL;
 
-       sciErr = getCommonSparseMatrix(_pvCtx, piAddr, _iComplex, _piRows, _piCols, _piNbItem, _piNbItemRow, _piColPos, _pdblReal, _pdblImg);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_SPARSE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "getComplexSparseMatrixInList" : "getSparseMatrixInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_SPARSE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "getComplexSparseMatrixInList" : "getSparseMatrixInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
 
-       return sciErr;
+    sciErr = getCommonSparseMatrix(_pvCtx, piAddr, _iComplex, _piRows, _piCols, _piNbItem, _piNbItemRow, _piColPos, _pdblReal, _pdblImg);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_SPARSE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), _iComplex ? "getComplexSparseMatrixInList" : "getSparseMatrixInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
+
+    return sciErr;
 }
 
 SciErr getSparseMatrixInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int** _piNbItemRow, int** _piColPos, double** _pdblReal)
 {
-       return getCommonSparseMatrixInList(_pvCtx, _piParent, _iItemPos, 0, _piRows, _piCols, _piNbItem, _piNbItemRow, _piColPos, _pdblReal, NULL);
+    return getCommonSparseMatrixInList(_pvCtx, _piParent, _iItemPos, 0, _piRows, _piCols, _piNbItem, _piNbItemRow, _piColPos, _pdblReal, NULL);
 }
 
 SciErr getComplexSparseMatrixInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int** _piNbItemRow, int** _piColPos, double** _pdblReal, double** _pdblImg)
 {
-       return getCommonSparseMatrixInList(_pvCtx, _piParent, _iItemPos, 1, _piRows, _piCols, _piNbItem, _piNbItemRow, _piColPos, _pdblReal, _pdblImg);
+    return getCommonSparseMatrixInList(_pvCtx, _piParent, _iItemPos, 1, _piRows, _piCols, _piNbItem, _piNbItemRow, _piColPos, _pdblReal, _pdblImg);
 }
 
 static SciErr readCommonSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iComplex, int* _piRows, int* _piCols, int* _piNbItem, int* _piNbItemRow, int* _piColPos, double* _pdblReal, double* _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNbItem                             = 0;
-       int* piAddr                             = NULL;
-       int* piRoot                             = NULL;
-       int* piNbItemRow        = NULL;
-       int* piColPos                   = NULL;
-       double* pdblReal        = NULL;
-       double* pdblImg         = NULL;
-
-       if(_piParent == NULL)
-       {
-               sciErr = readNamedList(_pvCtx, _pstName, &iNbItem, &piRoot);
-               if(sciErr.iErr)
-               {
-                       addErrorMessage(&sciErr, API_ERROR_READ_SPARSE_IN_NAMED_LIST,_("%s: Unable to get address of item #%d in variable \"%s\""), _iComplex ? "readComplexSparseMatrixInNamedList" : "readSparseMatrixInNamedList", _iItemPos + 1, _pstName);
-                       return sciErr;
-               }
-
-               sciErr = getListItemAddress(_pvCtx, piRoot, _iItemPos, &piAddr);
-       }
-       else
-       {
-               sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       }
-
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_SPARSE_IN_NAMED_LIST,_("%s: Unable to get address of item #%d in variable \"%s\""), _iComplex ? "readComplexSparseMatrixInNamedList" : "readSparseMatrixInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
-
-       sciErr = getCommonSparseMatrix(_pvCtx, piAddr, _iComplex, _piRows, _piCols, _piNbItem, &piNbItemRow, &piColPos, &pdblReal, &pdblImg);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_SPARSE_IN_NAMED_LIST,_("%s: Unable to get address of item #%d in variable \"%s\""), _iComplex ? "readComplexSparseMatrixInNamedList" : "readSparseMatrixInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
-
-       if(_piNbItemRow == NULL)
-       {
-               return sciErr;
-       }
-       memcpy(_piNbItemRow, piNbItemRow, *_piRows * sizeof(int));
-
-       if(_piColPos == NULL)
-       {
-               return sciErr;
-       }
-       memcpy(_piColPos, piColPos, *_piNbItem * sizeof(int));
-
-       if(_pdblReal == NULL || (_iComplex && _pdblImg == NULL))
-       {
-               return sciErr;
-       }
-
-       memcpy(_pdblReal, pdblReal, sizeof(double) * *_piNbItem);
-       if(_iComplex)
-       {
-               memcpy(_pdblImg, pdblImg, sizeof(double) * *_piNbItem);
-       }
-
-       return sciErr;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNbItem    = 0;
+    int* piAddr    = NULL;
+    int* piRoot    = NULL;
+    int* piNbItemRow = NULL;
+    int* piColPos   = NULL;
+    double* pdblReal = NULL;
+    double* pdblImg  = NULL;
+
+    if (_piParent == NULL)
+    {
+        sciErr = readNamedList(_pvCtx, _pstName, &iNbItem, &piRoot);
+        if (sciErr.iErr)
+        {
+            addErrorMessage(&sciErr, API_ERROR_READ_SPARSE_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), _iComplex ? "readComplexSparseMatrixInNamedList" : "readSparseMatrixInNamedList", _iItemPos + 1, _pstName);
+            return sciErr;
+        }
+
+        sciErr = getListItemAddress(_pvCtx, piRoot, _iItemPos, &piAddr);
+    }
+    else
+    {
+        sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    }
+
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_SPARSE_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), _iComplex ? "readComplexSparseMatrixInNamedList" : "readSparseMatrixInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
+
+    sciErr = getCommonSparseMatrix(_pvCtx, piAddr, _iComplex, _piRows, _piCols, _piNbItem, &piNbItemRow, &piColPos, &pdblReal, &pdblImg);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_SPARSE_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), _iComplex ? "readComplexSparseMatrixInNamedList" : "readSparseMatrixInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
+
+    if (_piNbItemRow == NULL)
+    {
+        return sciErr;
+    }
+    memcpy(_piNbItemRow, piNbItemRow, *_piRows * sizeof(int));
+
+    if (_piColPos == NULL)
+    {
+        return sciErr;
+    }
+    memcpy(_piColPos, piColPos, *_piNbItem * sizeof(int));
+
+    if (_pdblReal == NULL || (_iComplex && _pdblImg == NULL))
+    {
+        return sciErr;
+    }
+
+    memcpy(_pdblReal, pdblReal, sizeof(double) * *_piNbItem);
+    if (_iComplex)
+    {
+        memcpy(_pdblImg, pdblImg, sizeof(double) * *_piNbItem);
+    }
+
+    return sciErr;
 }
 
 SciErr readSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int* _piNbItemRow, int* _piColPos, double* _pdblReal)
 {
-       return readCommonSparseMatrixInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 0, _piRows, _piCols, _piNbItem, _piNbItemRow, _piColPos, _pdblReal, NULL);
+    return readCommonSparseMatrixInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 0, _piRows, _piCols, _piNbItem, _piNbItemRow, _piColPos, _pdblReal, NULL);
 }
 
 SciErr readComplexSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int* _piNbItemRow, int* _piColPos, double* _pdblReal, double* _pdblImg)
 {
-       return readCommonSparseMatrixInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 1, _piRows, _piCols, _piNbItem, _piNbItemRow, _piColPos, _pdblReal, _pdblImg);
+    return readCommonSparseMatrixInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, 1, _piRows, _piCols, _piNbItem, _piNbItemRow, _piColPos, _pdblReal, _pdblImg);
 }
 
 /*****************************
- * boolean sparses functions *
- *****************************/
+* boolean sparses functions *
+*****************************/
 static SciErr fillBooleanSparseMatrixInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNbItem                             = 0;
-       int* piOffset                   = NULL;
-       int* piNbItemRow        = NULL;
-       int* piColPos                   = NULL;
-       int* piChildAddr        = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNbItem    = 0;
+    int* piOffset   = NULL;
+    int* piNbItemRow = NULL;
+    int* piColPos   = NULL;
+    int* piChildAddr = NULL;
 
-       int iItemLen                    = 0;
+    int iItemLen   = 0;
 
-       //Does item can be added in the list
-       sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createBooleanSparseMatrixInList", _iItemPos + 1);
-               return sciErr;
-       }
+    //Does item can be added in the list
+    sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createBooleanSparseMatrixInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       if(iNbItem < _iItemPos)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createBooleanSparseMatrixInList", _iItemPos + 1);
-               return sciErr;
-       }
+    if (iNbItem < _iItemPos)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createBooleanSparseMatrixInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createBooleanSparseMatrixInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createBooleanSparseMatrixInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       sciErr = fillBooleanSparseMatrix(_pvCtx, piChildAddr, _iRows, _iCols, _iNbItem, &piNbItemRow, &piColPos);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createBooleanSparseMatrixInList", _iItemPos + 1);
-               return sciErr;
-       }
+    sciErr = fillBooleanSparseMatrix(_pvCtx, piChildAddr, _iRows, _iCols, _iNbItem, &piNbItemRow, &piColPos);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createBooleanSparseMatrixInList", _iItemPos + 1);
+        return sciErr;
+    }
 
-       piOffset                                                = _piParent + 2;
+    piOffset      = _piParent + 2;
 
-       iItemLen                                                = 5 + _iRows + _iNbItem + !((_iRows + _iNbItem) % 2);
-       piOffset[_iItemPos] = piOffset[_iItemPos - 1] + ((iItemLen + 1) / 2);
+    iItemLen      = 5 + _iRows + _iNbItem + !((_iRows + _iNbItem) % 2);
+    piOffset[_iItemPos] = piOffset[_iItemPos - 1] + ((iItemLen + 1) / 2);
 
-       memcpy(piNbItemRow, _piNbItemRow, _iRows * sizeof(int));
-       memcpy(piColPos, _piColPos, _iNbItem * sizeof(int));
+    memcpy(piNbItemRow, _piNbItemRow, _iRows * sizeof(int));
+    memcpy(piColPos, _piColPos, _iNbItem * sizeof(int));
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr createBooleanSparseMatrixInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piAddr                                     = NULL;
-       int *piEnd                                      = NULL;
-       int iItemLen                            = 0;
-
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createBooleanSparseMatrixInList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       sciErr = fillBooleanSparseMatrixInList(_pvCtx, _iVar, _piParent, _iItemPos, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createBooleanSparseMatrixInList", _iItemPos + 1);
-               return sciErr;
-       }
-       
-       iItemLen                                                = 5 + _iRows + _iNbItem + !((_iRows + _iNbItem) % 2);
-       piEnd                                                           =       piAddr + iItemLen;
-       if(_iItemPos == _piParent[1])
-       {
-               updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
-       }
-
-       closeList(_iVar, piEnd);
-
-       return sciErr;
-}
-
-SciErr createBooleanSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos)
-{
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iVarID[nsiz];
-  int iSaveRhs                 = Rhs;
-       int iSaveTop                    = Top;
-       int iItemLen                    = 0;
-       int *piAddr                             = NULL;
-       int* piEnd                              = NULL;
-       int* piChildAddr        = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piAddr     = NULL;
+    int *piEnd     = NULL;
+    int iItemLen    = 0;
+
+    sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createBooleanSparseMatrixInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    sciErr = fillBooleanSparseMatrixInList(_pvCtx, _iVar, _piParent, _iItemPos, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createBooleanSparseMatrixInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    iItemLen      = 5 + _iRows + _iNbItem + !((_iRows + _iNbItem) % 2);
+    piEnd        = piAddr + iItemLen;
+    if (_iItemPos == _piParent[1])
+    {
+        updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
+    }
+
+    closeList(_iVar, piEnd);
+
+    return sciErr;
+}
+
+SciErr createBooleanSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* /*_piParent*/, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos)
+{
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iVarID[nsiz];
+    int iSaveRhs        = Rhs;
+    int iSaveTop        = Top;
+    int iItemLen        = 0;
+    int *piAddr         = NULL;
+    int* piEnd          = NULL;
+    int* piChildAddr    = NULL;
+    int* piParent       = getLastNamedListAddress(_pstName, _iItemPos);
 
     if (!checkNamedVarFormat(_pvCtx, _pstName))
     {
@@ -2421,240 +2749,253 @@ SciErr createBooleanSparseMatrixInNamedList(void* _pvCtx, const char* _pstName,
     C2F(str2name)(_pstName, iVarID, (unsigned long)strlen(_pstName));
     Top = Top + Nbvars + 1;
 
-       getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
+    getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
 
-       sciErr = createBooleanSparseMatrixInList(_pvCtx, Top, _piParent, _iItemPos, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_SPARSE_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createBooleanSparseMatrixInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = createBooleanSparseMatrixInList(_pvCtx, Top, piParent, _iItemPos, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_SPARSE_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createBooleanSparseMatrixInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_SPARSE_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createBooleanSparseMatrixInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = allocCommonItemInList(_pvCtx, piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_SPARSE_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createBooleanSparseMatrixInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       iItemLen                                                = 5 + _iRows + _iNbItem + !((_iRows + _iNbItem) % 2);
-       piEnd                                                           =       piChildAddr + iItemLen;
-       closeList(Top, piEnd);
+    iItemLen      = 5 + _iRows + _iNbItem + !((_iRows + _iNbItem) % 2);
+    piEnd        = piChildAddr + iItemLen;
+    closeList(Top, piEnd);
 
-       if(_iItemPos == _piParent[1])
-       {
-               updateNamedListOffset(_pvCtx, Top, _piParent, _iItemPos, piEnd);
-               createNamedVariable(iVarID);
-       }
+    if (_iItemPos == piParent[1])
+    {
+        updateNamedListOffset(_pvCtx, Top, _pstName, piParent, _iItemPos, piEnd);
+        popNamedListAddress(_pstName);
+    }
 
-       Top = iSaveTop;
-  Rhs = iSaveRhs;
+    Top = iSaveTop;
+    Rhs = iSaveRhs;
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr getBooleanSparseMatrixInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int** _piNbItemRow, int** _piColPos)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piAddr             = NULL;
-       
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_BOOLEAN_SPARSE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getBooleanSparseMatrixInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piAddr  = NULL;
+
+    sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_BOOLEAN_SPARSE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getBooleanSparseMatrixInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
 
-       sciErr = getBooleanSparseMatrix(_pvCtx, piAddr, _piRows, _piCols, _piNbItem, _piNbItemRow, _piColPos);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_BOOLEAN_SPARSE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getBooleanSparseMatrixInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    sciErr = getBooleanSparseMatrix(_pvCtx, piAddr, _piRows, _piCols, _piNbItem, _piNbItemRow, _piColPos);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_BOOLEAN_SPARSE_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getBooleanSparseMatrixInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr readBooleanSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int* _piNbItemRow, int* _piColPos)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNbItem                             = 0;
-       int* piAddr                             = NULL;
-       int* piRoot                             = NULL;
-       int* piNbItemRow        = NULL;
-       int* piColPos                   = NULL;
-
-       if(_piParent == NULL)
-       {
-               sciErr = readNamedList(_pvCtx, _pstName, &iNbItem, &piRoot);
-               if(sciErr.iErr)
-               {
-                       addErrorMessage(&sciErr, API_ERROR_READ_BOOLEAN_SPARSE_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readBooleanSparseMatrixInNamedList", _iItemPos + 1, _pstName);
-                       return sciErr;
-               }
-
-               sciErr = getListItemAddress(_pvCtx, piRoot, _iItemPos, &piAddr);
-       }
-       else
-       {
-               sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       }
-
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_BOOLEAN_SPARSE_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readBooleanSparseMatrixInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
-
-       sciErr = getBooleanSparseMatrix(_pvCtx, piAddr, _piRows, _piCols, _piNbItem, &piNbItemRow, &piColPos);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_BOOLEAN_SPARSE_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readBooleanSparseMatrixInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
-
-       if(_piNbItemRow == NULL)
-       {
-               return sciErr;
-       }
-       memcpy(_piNbItemRow, piNbItemRow, *_piRows * sizeof(int));
-
-       if(_piColPos == NULL)
-       {
-               return sciErr;
-       }
-       memcpy(_piColPos, piColPos, *_piNbItem * sizeof(int));
-
-       return sciErr;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNbItem    = 0;
+    int* piAddr    = NULL;
+    int* piRoot    = NULL;
+    int* piNbItemRow = NULL;
+    int* piColPos   = NULL;
+
+    if (_piParent == NULL)
+    {
+        sciErr = readNamedList(_pvCtx, _pstName, &iNbItem, &piRoot);
+        if (sciErr.iErr)
+        {
+            addErrorMessage(&sciErr, API_ERROR_READ_BOOLEAN_SPARSE_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readBooleanSparseMatrixInNamedList", _iItemPos + 1, _pstName);
+            return sciErr;
+        }
+
+        sciErr = getListItemAddress(_pvCtx, piRoot, _iItemPos, &piAddr);
+    }
+    else
+    {
+        sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    }
+
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_BOOLEAN_SPARSE_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readBooleanSparseMatrixInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
+
+    sciErr = getBooleanSparseMatrix(_pvCtx, piAddr, _piRows, _piCols, _piNbItem, &piNbItemRow, &piColPos);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_BOOLEAN_SPARSE_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readBooleanSparseMatrixInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
+
+    if (_piNbItemRow == NULL)
+    {
+        return sciErr;
+    }
+    memcpy(_piNbItemRow, piNbItemRow, *_piRows * sizeof(int));
+
+    if (_piColPos == NULL)
+    {
+        return sciErr;
+    }
+    memcpy(_piColPos, piColPos, *_piNbItem * sizeof(int));
+
+    return sciErr;
 }
 
 /*********************
- * Pointer functions *
- *********************/
+* Pointer functions *
+*********************/
 SciErr getPointerInList(void* _pvCtx, int* _piParent, int _iItemPos, void** _pvPtr)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int* piAddr             = NULL;
-       
-       sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_POINTER_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getPointerInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int* piAddr  = NULL;
 
-       sciErr = getPointer(_pvCtx, piAddr, _pvPtr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_GET_POINTER_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getPointerInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
-               return sciErr;
-       }
+    sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_POINTER_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getPointerInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
+
+    sciErr = getPointer(_pvCtx, piAddr, _pvPtr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_GET_POINTER_IN_LIST, _("%s: Unable to get address of item #%d in argument #%d"), "getPointerInList", _iItemPos + 1, getRhsFromAddress(_pvCtx, _piParent));
+        return sciErr;
+    }
 
-       return sciErr;
+    return sciErr;
 }
 
 SciErr createPointerInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, void* _pvPtr)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNbItem                             = 0;
-       int* piOffset                   = NULL;
-       int* piChildAddr        = NULL;
-       void* pvPtr                             = NULL;
-       int* piEnd                                      = NULL;
-       int iNewPos                             = Top - Rhs + _iVar;
-
-       //Does item can be added in the list
-       sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_POINTER_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createListInList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       if(iNbItem < _iItemPos)
-       {
-               addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createPointerInList", _iItemPos + 1);
-               return sciErr;
-       }
-
-
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_POINTER_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createListInList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       sciErr = fillPointer(_pvCtx, piChildAddr, &pvPtr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_POINTER_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createListInList", _iItemPos + 1);
-               return sciErr;
-       }
-
-       ((double*)pvPtr)[0] = (double) ((unsigned long int) _pvPtr);
-
-       piOffset                                                = _piParent + 2;
-       piOffset[_iItemPos] = piOffset[_iItemPos - 1] + 3;//2 for header and 1 for data ( n * 64 bits )
-
-       piEnd = piChildAddr + 6;//4 for header and 2 for data ( n * 32 bits )
-       closeList(iNewPos, piEnd);
-
-       if(_iItemPos == _piParent[1])
-       {
-               updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
-       }
-       return sciErr;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNbItem    = 0;
+    int* piOffset   = NULL;
+    int* piChildAddr = NULL;
+    void* pvPtr    = NULL;
+    int* piEnd     = NULL;
+    int iNewPos    = Top - Rhs + _iVar;
+
+    //Does item can be added in the list
+    sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_POINTER_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createListInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    if (iNbItem < _iItemPos)
+    {
+        addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createPointerInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+
+    sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_POINTER_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createListInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    sciErr = fillPointer(_pvCtx, piChildAddr, &pvPtr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_POINTER_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createListInList", _iItemPos + 1);
+        return sciErr;
+    }
+
+    ((double*)pvPtr)[0] = (double) ((unsigned long int) _pvPtr);
+
+    piOffset      = _piParent + 2;
+    piOffset[_iItemPos] = piOffset[_iItemPos - 1] + 3;//2 for header and 1 for data ( n * 64 bits )
+
+    piEnd = piChildAddr + 6;//4 for header and 2 for data ( n * 32 bits )
+    closeList(iNewPos, piEnd);
+
+    if (_iItemPos == _piParent[1])
+    {
+        updateListOffset(_pvCtx, _iVar, _piParent, _iItemPos, piEnd);
+    }
+    return sciErr;
 }
 
 SciErr readPointerInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, void** _pvPtr)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iNbItem                             = 0;
-       int* piAddr                             = NULL;
-       int* piRoot                             = NULL;
-
-       if(_piParent == NULL)
-       {
-               sciErr = readNamedList(_pvCtx, _pstName, &iNbItem, &piRoot);
-               if(sciErr.iErr)
-               {
-                       addErrorMessage(&sciErr, API_ERROR_READ_POINTER_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readPointerInNamedList", _iItemPos + 1, _pstName);
-                       return sciErr;
-               }
-
-               sciErr = getListItemAddress(_pvCtx, piRoot, _iItemPos, &piAddr);
-       }
-       else
-       {
-               sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
-       }
-
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_POINTER_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readPointerInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
-
-       sciErr = getPointer(_pvCtx, piAddr, _pvPtr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_READ_POINTER_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readPointerInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
-
-       return sciErr;
-}
-
-SciErr createPointerInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, void* _pvPtr)
-{
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-       int iVarID[nsiz];
-  int iSaveRhs                 = Rhs;
-       int iSaveTop                    = Top;
-       int *piAddr                             = NULL;
-       int* piEnd                              = NULL;
-       int* piChildAddr        = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iNbItem    = 0;
+    int* piAddr    = NULL;
+    int* piRoot    = NULL;
+
+    if (_piParent == NULL)
+    {
+        sciErr = readNamedList(_pvCtx, _pstName, &iNbItem, &piRoot);
+        if (sciErr.iErr)
+        {
+            addErrorMessage(&sciErr, API_ERROR_READ_POINTER_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readPointerInNamedList", _iItemPos + 1, _pstName);
+            return sciErr;
+        }
+
+        sciErr = getListItemAddress(_pvCtx, piRoot, _iItemPos, &piAddr);
+    }
+    else
+    {
+        sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
+    }
+
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_POINTER_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readPointerInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
+
+    sciErr = getPointer(_pvCtx, piAddr, _pvPtr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_READ_POINTER_IN_NAMED_LIST, _("%s: Unable to get address of item #%d in variable \"%s\""), "readPointerInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
+
+    return sciErr;
+}
+
+SciErr createPointerInNamedList(void* _pvCtx, const char* _pstName, int* /*_piParent*/, int _iItemPos, void* _pvPtr)
+{
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    int iVarID[nsiz];
+    int iSaveRhs        = Rhs;
+    int iSaveTop        = Top;
+    int *piAddr         = NULL;
+    int* piEnd          = NULL;
+    int* piChildAddr    = NULL;
+    int* piParent       = getLastNamedListAddress(_pstName, _iItemPos);
 
     if (!checkNamedVarFormat(_pvCtx, _pstName))
     {
@@ -2665,163 +3006,184 @@ SciErr createPointerInNamedList(void* _pvCtx, const char* _pstName, int* _piPare
     C2F(str2name)(_pstName, iVarID, (unsigned long)strlen(_pstName));
     Top = Top + Nbvars + 1;
 
-       getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
+    getNewVarAddressFromPosition(_pvCtx, Top, &piAddr);
 
-       sciErr = createPointerInList(_pvCtx, Top, _piParent, _iItemPos, _pvPtr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_POINTER_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createPointerInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = createPointerInList(_pvCtx, Top, piParent, _iItemPos, _pvPtr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_POINTER_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createPointerInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-       if(sciErr.iErr)
-       {
-               addErrorMessage(&sciErr, API_ERROR_CREATE_POINTER_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createPointerInNamedList", _iItemPos + 1, _pstName);
-               return sciErr;
-       }
+    sciErr = allocCommonItemInList(_pvCtx, piParent, _iItemPos, &piChildAddr);
+    if (sciErr.iErr)
+    {
+        addErrorMessage(&sciErr, API_ERROR_CREATE_POINTER_IN_NAMED_LIST, _("%s: Unable to create list item #%d in variable \"%s\""), "createPointerInNamedList", _iItemPos + 1, _pstName);
+        return sciErr;
+    }
 
-       piEnd = piChildAddr + 6;//4 for header + 2 for data
-       closeList(Top, piEnd);
+    piEnd = piChildAddr + 6;//4 for header + 2 for data
+    closeList(Top, piEnd);
 
-       if(_iItemPos == _piParent[1])
-       {
-               updateNamedListOffset(_pvCtx, Top, _piParent, _iItemPos, piEnd);
-               createNamedVariable(iVarID);
-       }
+    if (_iItemPos == piParent[1])
+    {
+        updateNamedListOffset(_pvCtx, Top, _pstName, piParent, _iItemPos, piEnd);
+        popNamedListAddress(_pstName);
+    }
 
-       Top = iSaveTop;
-  Rhs = iSaveRhs;
+    Top = iSaveTop;
+    Rhs = iSaveRhs;
 
-       return sciErr;
+    return sciErr;
 }
 
 
 
 /********************
- * tools  functions *
- ********************/
+* tools  functions *
+********************/
 
-static void updateNamedListOffset(void* _pvCtx, int _iVar, int *_piCurrentNode, int _iItemPos, int *_piEnd)
+static void updateNamedListOffset(void* _pvCtx, int _iVar, const char* _pstName, int *_piCurrentNode, int _iItemPos, int *_piEnd)
 {
-       updateCommunListOffset(_pvCtx, _iVar, _piCurrentNode, _iItemPos, _piEnd);
+    updateCommunListOffset(_pvCtx, _iVar, _pstName, _piCurrentNode, _iItemPos, _piEnd);
 }
 
 static void updateListOffset(void* _pvCtx, int _iVar, int *_piCurrentNode, int _iItemPos, int *_piEnd)
 {
-       int iNewPos                             = Top - Rhs + _iVar;
-       updateCommunListOffset(_pvCtx, iNewPos, _piCurrentNode, _iItemPos, _piEnd);
+    int iNewPos    = Top - Rhs + _iVar;
+    updateCommunListOffset(_pvCtx, iNewPos, NULL, _piCurrentNode, _iItemPos, _piEnd);
 }
 
 //internal tool functions
-static void updateCommunListOffset(void* _pvCtx, int _iVar, int *_piCurrentNode, int _iItemPos, int *_piEnd)
-{
-       //find list depth and update list offset for last item
-       int i                                                   = 0;
-       int *piRoot                             = istk(iadr(*Lstk(_iVar)));
-       int iDepth                              = 1; //we are already in a list
-       int iMaxDepth                   = 0; //we are already in a list
-       int **piParent                  = NULL;
-
-       getParentList(_pvCtx, piRoot, _piCurrentNode, &iDepth, NULL);
-       piParent = (int**)MALLOC(sizeof(int*) * iDepth);
-       iMaxDepth = iDepth;
-       iDepth = 1;
-       piParent[0] = piRoot;
-       getParentList(_pvCtx, piRoot, _piCurrentNode, &iDepth, piParent);
-       for(i = iMaxDepth - 2 ; i >= 0 ; i--)
-       {
-               int j                                   =       0;
-               int iItem                       = piParent[i][1];
-               int *piOffset = piParent[i] + 2;
-               int *piData             = piOffset + iItem + 1 + !(iItem % 2);
-
-               //for all nodes
-               for(j = 0 ; j < iItem ; j++)
-               {
-                       int* piItem = piData + ((piOffset[j] - 1) * 2);
-
-                       if(piItem == piParent[i + 1])
-                       {
-                               int iOffset = 0;
-                               iOffset         = piOffset[j] + (int)((_piEnd - piItem + 1) / 2);
-                               piOffset[j + 1] = iOffset;
-                       }
-                       //else
-                       //{
-                       //      break;
-                       //      //if this item is not the last of the parent list
-                       //      //we don't need to continue to check the uppers levels
-                       //}
-               }
-       }
-
-       FREE(piParent);
+static void updateCommunListOffset(void* _pvCtx, int _iVar, const char* _pstName, int *_piCurrentNode, int _iItemPos, int *_piEnd)
+{
+    //find list depth and update list offset for last item
+    int i       = 0;
+    int *piRoot    = istk(iadr(*Lstk(_iVar)));
+    int iDepth    = 1; //we are already in a list
+    int iMaxDepth   = 0; //we are already in a list
+    int **piParent   = NULL;
+
+    /*    if (stackListPosition.empty())
+        {
+            getParentList(_pvCtx, piRoot, _piCurrentNode, &iDepth, NULL);
+            piParent = (int**)MALLOC(sizeof(int*) * iDepth);
+            iMaxDepth = iDepth;
+            iDepth = 1;
+            piParent[0] = piRoot;
+            getParentList(_pvCtx, piRoot, _piCurrentNode, &iDepth, piParent);
+        }
+        else
+        {
+    */
+    if (_pstName == NULL)
+    {
+        iMaxDepth = getDepthList(_iVar);
+        piParent = (int**)MALLOC(sizeof(int*) * iMaxDepth);
+        getListAdressses(_iVar, piParent);
+    }
+    else
+    {
+        iMaxDepth = getDepthNamedList(_pstName);
+        piParent = (int**)MALLOC(sizeof(int*) * iMaxDepth);
+        getNamedListAdressses(_pstName, piParent);
+    }
+    //    }
+
+    for (i = iMaxDepth - 2 ; i >= 0 ; i--)
+    {
+        int j     = 0;
+        int iItem   = piParent[i][1];
+        int *piOffset = piParent[i] + 2;
+        int *piData  = piOffset + iItem + 1 + !(iItem % 2);
+
+        //for all nodes
+        for (j = 0 ; j < iItem ; j++)
+        {
+            int* piItem = piData + ((piOffset[j] - 1) * 2);
+
+            if (piItem == piParent[i + 1])
+            {
+                int iOffset = 0;
+                iOffset  = piOffset[j] + (int)((_piEnd - piItem + 1) / 2);
+                piOffset[j + 1] = iOffset;
+            }
+            //else
+            //{
+            // break;
+            // //if this item is not the last of the parent list
+            // //we don't need to continue to check the uppers levels
+            //}
+        }
+    }
+
+    FREE(piParent);
 }
 
 static void closeList(int _iVar, int *_piEnd)
 {
-       //Get Root address;
-       int *piRoot                             = istk(iadr(*Lstk(_iVar)));
-       int iAddr                                       = *Lstk(_iVar);
+    //Get Root address;
+    int *piRoot         = istk(iadr(*Lstk(_iVar)));
+    int iAddr           = *Lstk(_iVar);
 
-       int iOffsetData         =       2 + piRoot[1] + 1 + !(piRoot[1] % 2);
-       int iScale                              = (int)(_piEnd - (piRoot + iOffsetData));
-       int iDoubleSclale = (iScale + 1)/ 2;
+    int iOffsetData     = 2 + piRoot[1] + 1 + !(piRoot[1] % 2);
+    int iScale          = (int)(_piEnd - (piRoot + iOffsetData));
+    int iDoubleSclale   = (iScale + 1) / 2;
 
-       updateLstk(_iVar, sadr(iadr(iAddr) + iOffsetData), iDoubleSclale);
+    updateLstk(_iVar, sadr(iadr(iAddr) + iOffsetData), iDoubleSclale);
 }
 
 static int getParentList(void* _pvCtx, int* _piStart, int* _piToFind, int* _piDepth, int** _piParent)
 {
-       if(isKindOfList(_piStart))
-       {
-               int iItem       = _piStart[1];
-               int iIndex      = 0;
-               *_piDepth += 1;
-               for(iIndex = 0 ; iIndex < iItem ; iIndex++)
-               {
-                       int *piChild = NULL;
-                       int iRet = 0;
-                       getListItemAddress(_pvCtx, _piStart, iIndex + 1, &piChild);
-            if(piChild == NULL)
+    if (isKindOfList(_piStart))
+    {
+        int iItem = _piStart[1];
+        int iIndex = 0;
+        *_piDepth += 1;
+        for (iIndex = 0 ; iIndex < iItem ; iIndex++)
+        {
+            int *piChild = NULL;
+            int iRet = 0;
+            getListItemAddress(_pvCtx, _piStart, iIndex + 1, &piChild);
+            if (piChild == NULL)
             {
                 continue;
             }
 
-                       if(piChild == _piToFind)
-                       {
-                               if(_piParent != NULL)
-                               {
-                                       _piParent[*_piDepth - 1] = piChild;
-                                       *_piDepth -= 1;
-                               }
-                               return 1;
-                       }
-
-                       iRet = getParentList(_pvCtx, piChild, _piToFind, _piDepth, _piParent);
-                       if(iRet != 0)
-                       {//find a child
-                               if(_piParent != NULL)
-                               {
-                                       _piParent[*_piDepth - 1] = piChild;
-                                       *_piDepth -= 1;
-                               }
-                               return 1;
-                       }
-
-               }
-               *_piDepth -= 1;
-       }
-       return 0;
+            if (piChild == _piToFind)
+            {
+                if (_piParent != NULL)
+                {
+                    _piParent[*_piDepth - 1] = piChild;
+                    *_piDepth -= 1;
+                }
+                return 1;
+            }
+
+            iRet = getParentList(_pvCtx, piChild, _piToFind, _piDepth, _piParent);
+            if (iRet != 0)
+            {
+                //find a child
+                if (_piParent != NULL)
+                {
+                    _piParent[*_piDepth - 1] = piChild;
+                    *_piDepth -= 1;
+                }
+                return 1;
+            }
+
+        }
+        *_piDepth -= 1;
+    }
+    return 0;
 }
 
 static int isKindOfList(int* _piNode)
 {
-       if(_piNode[0] == sci_list || _piNode[0] == sci_tlist || _piNode[0] == sci_mlist)
-               return 1;
-       else
-               return 0;
+    if (_piNode[0] == sci_list || _piNode[0] == sci_tlist || _piNode[0] == sci_mlist)
+        return 1;
+    else
+        return 0;
 }
 
 /*--------------------------------------------------------------------------*/
index 1dcacdd..f80b911 100644 (file)
     <ClCompile Include="src\c\javasci_Scilab.c" />
     <ClCompile Include="src\c\javasci_Scilab2.c" />
     <ClCompile Include="src\c\javasci_SciStringArray.c" />
+    <ClCompile Include="src\jni\putLists.c" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="src\c\javasci2_helper.h" />
index f5edf60..d433801 100644 (file)
@@ -54,6 +54,9 @@
     <ClCompile Include="src\c\javasci_SciStringArray.c">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="src\jni\putLists.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="src\c\javasci2_helper.h">
index 07f032b..921aede 100644 (file)
@@ -40,6 +40,7 @@ src/c/javasci_SciIntegerArray.c
 
 JAVASCI_V2_C_SOURCES = \
 src/jni/call_scilab_wrap.c \
+src/jni/putLists.c \
 src/c/javasci2_helper.c
 
 pkglib_LTLIBRARIES = libjavasci.la libjavasci2.la
index 6ae637c..e124a5c 100644 (file)
@@ -154,8 +154,9 @@ libjavasci_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 @JAVASCI_TRUE@ $(top_builddir)/modules/api_scilab/libsciapi_scilab.la \
 @JAVASCI_TRUE@ $(top_builddir)/modules/libscilab.la
 am__libjavasci2_la_SOURCES_DIST = src/jni/call_scilab_wrap.c \
-       src/c/javasci2_helper.c
+       src/jni/putLists.c src/c/javasci2_helper.c
 @JAVASCI_TRUE@am__objects_2 = libjavasci2_la-call_scilab_wrap.lo \
+@JAVASCI_TRUE@ libjavasci2_la-putLists.lo \
 @JAVASCI_TRUE@ libjavasci2_la-javasci2_helper.lo
 @JAVASCI_TRUE@am_libjavasci2_la_OBJECTS = $(am__objects_2)
 libjavasci2_la_OBJECTS = $(am_libjavasci2_la_OBJECTS)
@@ -463,6 +464,7 @@ libjavasci_la_etc_DATA = etc/javasci.quit etc/javasci.start
 
 @JAVASCI_TRUE@JAVASCI_V2_C_SOURCES = \
 @JAVASCI_TRUE@src/jni/call_scilab_wrap.c \
+@JAVASCI_TRUE@src/jni/putLists.c \
 @JAVASCI_TRUE@src/c/javasci2_helper.c
 
 @JAVASCI_TRUE@pkglib_LTLIBRARIES = libjavasci.la libjavasci2.la
@@ -669,6 +671,7 @@ distclean-compile:
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjavasci2_la-call_scilab_wrap.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjavasci2_la-javasci2_helper.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjavasci2_la-putLists.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjavasci_la-fix.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjavasci_la-javasci_SciAbstractArray.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjavasci_la-javasci_SciBooleanArray.Plo@am__quote@
@@ -778,6 +781,13 @@ libjavasci2_la-call_scilab_wrap.lo: src/jni/call_scilab_wrap.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjavasci2_la_CFLAGS) $(CFLAGS) -c -o libjavasci2_la-call_scilab_wrap.lo `test -f 'src/jni/call_scilab_wrap.c' || echo '$(srcdir)/'`src/jni/call_scilab_wrap.c
 
+libjavasci2_la-putLists.lo: src/jni/putLists.c
+@am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjavasci2_la_CFLAGS) $(CFLAGS) -MT libjavasci2_la-putLists.lo -MD -MP -MF $(DEPDIR)/libjavasci2_la-putLists.Tpo -c -o libjavasci2_la-putLists.lo `test -f 'src/jni/putLists.c' || echo '$(srcdir)/'`src/jni/putLists.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/libjavasci2_la-putLists.Tpo $(DEPDIR)/libjavasci2_la-putLists.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='src/jni/putLists.c' object='libjavasci2_la-putLists.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjavasci2_la_CFLAGS) $(CFLAGS) -c -o libjavasci2_la-putLists.lo `test -f 'src/jni/putLists.c' || echo '$(srcdir)/'`src/jni/putLists.c
+
 libjavasci2_la-javasci2_helper.lo: src/c/javasci2_helper.c
 @am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjavasci2_la_CFLAGS) $(CFLAGS) -MT libjavasci2_la-javasci2_helper.lo -MD -MP -MF $(DEPDIR)/libjavasci2_la-javasci2_helper.Tpo -c -o libjavasci2_la-javasci2_helper.lo `test -f 'src/c/javasci2_helper.c' || echo '$(srcdir)/'`src/c/javasci2_helper.c
 @am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/libjavasci2_la-javasci2_helper.Tpo $(DEPDIR)/libjavasci2_la-javasci2_helper.Plo
index adf747b..c127da1 100644 (file)
@@ -128,12 +128,11 @@ double *getDoubleComplexImg(char *variableName, int *nbRow, int *nbCol)
 
 }
 
-int putDoubleComplex(char *variableName, double *variable, int nbRow, int nbCol)
+int putDoubleComplex(char* variableName, double *variable, int nbRow, int nbCol, double * imag, int nbRowI, int nbColI)
 {
     SciErr sciErr;
-    double *variableImg = variable + ((nbRow) * (nbCol));
 
-    sciErr = createNamedComplexMatrixOfDouble(pvApiCtx, variableName, nbRow, nbCol, variable, variableImg);
+    sciErr = createNamedComplexMatrixOfDouble(pvApiCtx, variableName, nbRow, nbCol, variable, imag);
     if (sciErr.iErr)
     {
         printError(&sciErr, 0);
@@ -574,6 +573,72 @@ int putString(char *variableName, char **variable, int nbRow, int nbCol)
     return 0;
 }
 
+int putSparse(char * variableName, int nbRow, int nbCol, int * nbRowItem, int nbRowItemL, int * colPos, int colPosL, double * data, int dataL)
+{
+    SciErr sciErr;
+
+    sciErr = createNamedSparseMatrix(pvApiCtx, variableName, nbRow, nbCol, colPosL, nbRowItem, colPos, data);
+    if (sciErr.iErr)
+    {
+        printError(&sciErr, 0);
+        return -1;
+    }
+    return 0;
+}
+
+int putComplexSparse(char * variableName, int nbRow, int nbCol, int * nbRowItem, int nbRowItemL, int * colPos, int colPosL, double * data, int dataL, double * imag, int imagL)
+{
+    SciErr sciErr;
+
+    sciErr = createNamedComplexSparseMatrix(pvApiCtx, variableName, nbRow, nbCol, colPosL, nbRowItem, colPos, data, imag);
+    if (sciErr.iErr)
+    {
+        printError(&sciErr, 0);
+        return -1;
+    }
+    return 0;
+}
+
+int putBooleanSparse(char * variableName, int nbRow, int nbCol, int * nbRowItem, int nbRowItemL, int * colPos, int colPosL)
+{
+    SciErr sciErr;
+
+    sciErr = createNamedBooleanSparseMatrix(pvApiCtx, variableName, nbRow, nbCol, colPosL, nbRowItem, colPos);
+    if (sciErr.iErr)
+    {
+        printError(&sciErr, 0);
+        return -1;
+    }
+    return 0;
+}
+
+int putPolynomial(char * variableName, char * polyVarName, double ** data, int nbRow, int nbCol, int * nbCoef)
+{
+    SciErr sciErr;
+
+    sciErr = createNamedMatrixOfPoly(pvApiCtx, variableName, polyVarName, nbRow, nbCol, nbCoef, data);
+    if (sciErr.iErr)
+    {
+        printError(&sciErr, 0);
+        return -1;
+    }
+    return 0;
+}
+
+int putComplexPolynomial(char * variableName, char * polyVarName, double ** data, int nbRow, int nbCol, int * nbCoef, double ** imag, int nbRowI, int nbColI, int * nbCoefI)
+{
+    SciErr sciErr;
+
+    sciErr = createNamedComplexMatrixOfPoly(pvApiCtx, variableName, polyVarName, nbRow, nbCol, nbCoef, data, imag);
+    if (sciErr.iErr)
+    {
+        printError(&sciErr, 0);
+        return -1;
+    }
+    return 0;
+}
+
+
 BOOL isExistingVariable(char *variableName)
 {
     int iExisting = isNamedVarExist(pvApiCtx, variableName);
index 5258b79..f6871dc 100644 (file)
@@ -96,7 +96,7 @@ double * getDoubleComplexImg(char* variableName, int *nbRow, int *nbCol);
  * @param nbCol Number of cols
  * @return 0 if successfull, != 0 otherwise
  */
-int putDoubleComplex(char* variableName, double *variable, int nbRow, int nbCol);
+int putDoubleComplex(char* variableName, double *variable, int nbRow, int nbCol, double * imag, int nbRowI, int nbColI);
 
 /**
  * Return a matrix of boolean
@@ -317,6 +317,83 @@ char ** getString(char* variableName, int *nbRow, int *nbCol);
 int putString(char* variableName, char **variable, int nbRow, int nbCol);
 
 /**
+ * Set a sparse matrix
+ *
+ * @param variableName The name of the variable
+ * @param nbRow Number of rows
+ * @param nbCol Number of cols
+ * @param nbRowItem the number of non null items by row
+ * @param nbRowItemL the length of the previous array
+ * @param colPos the column position of each non null item
+ * @param colPosL the length of the previous array
+ * @param data the double data
+ * @param dataL the length of the previous array
+ * @return 0 if successfull, != 0 otherwise
+ */
+int putSparse(char * variableName, int nbRow, int nbCol, int * nbRowItem, int nbRowItemL, int * colPos, int colPosL, double * data, int dataL);
+
+/**
+ * Set a complex sparse matrix
+ *
+ * @param variableName The name of the variable
+ * @param nbRow Number of rows
+ * @param nbCol Number of cols
+ * @param nbRowItem the number of non null items by row
+ * @param nbRowItemL the length of the previous array
+ * @param colPos the column position of each non null item
+ * @param colPosL the length of the previous array
+ * @param data the double data
+ * @param dataL the length of the previous array
+ * @param imag the double data
+ * @param imagL the length of the previous array
+ * @return 0 if successfull, != 0 otherwise
+ */
+int putComplexSparse(char * variableName, int nbRow, int nbCol, int * nbRowItem, int nbRowItemL, int * colPos, int colPosL, double * data, int dataL, double * imag, int imagL);
+
+/**
+ * Set a boolean sparse matrix
+ *
+ * @param variableName The name of the variable
+ * @param nbRow Number of rows
+ * @param nbCol Number of cols
+ * @param nbRowItem the number of non null items by row
+ * @param nbRowItemL the length of the previous array
+ * @param colPos the column position of each non null item
+ * @param colPosL the length of the previous array
+ * @return 0 if successfull, != 0 otherwise
+ */
+int putBooleanSparse(char * variableName, int nbRow, int nbCol, int * nbRowItem, int nbRowItemL, int * colPos, int colPosL);
+
+/**
+ * Set a polynomial matrix
+ *
+ * @param variableName The name of the variable
+ * @param polyVarName The name of the polynomial variable
+ * @param data the double data
+ * @param nbRow Number of rows
+ * @param nbCol Number of cols
+ * @param nbCoef the number of coef of each polynomial
+ * @return 0 if successfull, != 0 otherwise
+ */
+int putPolynomial(char * variableName, char * polyVarName, double ** data, int nbRow, int nbCol, int * nbCoef);
+
+/**
+ * Set a complex polynomial matrix
+ *
+ * @param variableName The name of the variable
+ * @param polyVarName The name of the polynomial variable
+ * @param data the double data
+ * @param nbRow Number of rows
+ * @param nbCol Number of cols
+ * @param imag the double data
+ * @param nbRowI Number of rows
+ * @param nbColI Number of cols
+ * @param nbCoef the number of coef of each polynomial
+ * @return 0 if successfull, != 0 otherwise
+ */
+int putComplexPolynomial(char * variableName, char * polyVarName, double ** data, int nbRow, int nbCol, int * nbCoef, double ** imag, int nbRowI, int nbColI, int * nbCoefI);
+
+/**
  * Chek if a variable exists in Context
  *
  * @param variableName The name of the variable
index b0f4c2e..c37926f 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.2
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
@@ -78,8 +78,8 @@ public class Call_Scilab {
     return Call_ScilabJNI.putString(variableName, variable);
   }
 
-  public static int putDoubleComplex(String variableName, double[] variable, int nbRow, int nbCol) {
-    return Call_ScilabJNI.putDoubleComplex(variableName, variable, nbRow, nbCol);
+  public static int putDoubleComplex(String variableName, double[][] variable, double[][] imag) {
+    return Call_ScilabJNI.putDoubleComplex(variableName, variable, imag);
   }
 
   public static int putDouble(String variableName, double[][] variable) {
@@ -114,4 +114,24 @@ public class Call_Scilab {
     return Call_ScilabJNI.putUnsignedInt(variableName, variable);
   }
 
+  public static int putSparse(String variableName, int nbRow, int nbCol, int[] nbRowItem, int[] colPos, double[] data) {
+    return Call_ScilabJNI.putSparse(variableName, nbRow, nbCol, nbRowItem, colPos, data);
+  }
+
+  public static int putComplexSparse(String variableName, int nbRow, int nbCol, int[] nbRowItem, int[] colPos, double[] data, double[] imag) {
+    return Call_ScilabJNI.putComplexSparse(variableName, nbRow, nbCol, nbRowItem, colPos, data, imag);
+  }
+
+  public static int putBooleanSparse(String variableName, int nbRow, int nbCol, int[] nbRowItem, int[] colPos) {
+    return Call_ScilabJNI.putBooleanSparse(variableName, nbRow, nbCol, nbRowItem, colPos);
+  }
+
+  public static int putPolynomial(String variableName, String polyVarName, double[][][] data) {
+    return Call_ScilabJNI.putPolynomial(variableName, polyVarName, data);
+  }
+
+  public static int putComplexPolynomial(String variableName, String polyVarName, double[][][] data, double[][][] imag) {
+    return Call_ScilabJNI.putComplexPolynomial(variableName, polyVarName, data, imag);
+  }
+
 }
index 06d5bd4..b0d7b64 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.2
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
@@ -43,6 +43,8 @@ class Call_ScilabJNI {
     }
   }
 
+  public final static native int putList(String varNmae, Object list, char type);
+
   public final static native int Call_ScilabOpen(String jarg1, boolean jarg2, String jarg3, int jarg4);
   public final static native boolean TerminateScilab(String jarg1);
   public final static native int SendScilabJob(String jarg1);
@@ -56,7 +58,7 @@ class Call_ScilabJNI {
   public final static native int getIntegerPrecision(String jarg1);
   public final static native boolean isComplex(String jarg1);
   public final static native int putString(String jarg1, String[][] jarg2);
-  public final static native int putDoubleComplex(String jarg1, double[] jarg2, int jarg3, int jarg4);
+  public final static native int putDoubleComplex(String jarg1, double[][] jarg2, double[][] jarg5);
   public final static native int putDouble(String jarg1, double[][] jarg2);
   public final static native int putBoolean(String jarg1, boolean[][] jarg2);
   public final static native int putByte(String jarg1, byte[][] jarg2);
@@ -65,4 +67,9 @@ class Call_ScilabJNI {
   public final static native int putUnsignedShort(String jarg1, short[][] jarg2);
   public final static native int putInt(String jarg1, int[][] jarg2);
   public final static native int putUnsignedInt(String jarg1, int[][] jarg2);
+  public final static native int putSparse(String jarg1, int jarg2, int jarg3, int[] jarg4, int[] jarg6, double[] jarg8);
+  public final static native int putComplexSparse(String jarg1, int jarg2, int jarg3, int[] jarg4, int[] jarg6, double[] jarg8, double[] jarg10);
+  public final static native int putBooleanSparse(String jarg1, int jarg2, int jarg3, int[] jarg4, int[] jarg6);
+  public final static native int putPolynomial(String jarg1, String jarg2, double[][][] jarg3);
+  public final static native int putComplexPolynomial(String jarg1, String jarg2, double[][][] jarg3, double[][][] jarg7);
 }
index 65c14f0..e69a9b5 100644 (file)
@@ -18,9 +18,15 @@ import org.scilab.modules.types.ScilabType;
 import org.scilab.modules.types.ScilabTypeEnum;
 import org.scilab.modules.types.ScilabIntegerTypeEnum;
 import org.scilab.modules.types.ScilabDouble;
+import org.scilab.modules.types.ScilabList;
+import org.scilab.modules.types.ScilabMList;
+import org.scilab.modules.types.ScilabTList;
 import org.scilab.modules.types.ScilabString;
 import org.scilab.modules.types.ScilabBoolean;
+import org.scilab.modules.types.ScilabBooleanSparse;
 import org.scilab.modules.types.ScilabInteger;
+import org.scilab.modules.types.ScilabPolynomial;
+import org.scilab.modules.types.ScilabSparse;
 import org.scilab.modules.javasci.Call_Scilab;
 import org.scilab.modules.javasci.JavasciException.AlreadyRunningException;
 import org.scilab.modules.javasci.JavasciException.InitializationException;
@@ -48,9 +54,10 @@ import org.scilab.modules.javasci.JavasciException.ScilabErrorException;
  */
 public class Scilab {
 
+    private static int notHandledError = -999;
+
     private String SCI = null;
     private boolean advancedMode = false;
-    private int notHandledError = -999;
 
     /**
      * Creator of the Scilab Javasci object. <br />
@@ -161,19 +168,19 @@ public class Scilab {
     public boolean open() throws JavasciException {
         int res = Call_Scilab.Call_ScilabOpen(this.SCI, this.advancedMode, null, -1);
         switch (res) {
-            case 0: /* Success */
-                return true;
-            case -1:
-                throw new AlreadyRunningException("Javasci already running.");
-            case -2:
-                /* Should not occurd (processed before) */
-                throw new InitializationException("Could not find SCI.");
-            case -3:
-                throw new InitializationException("No existing directory.");
-            case 10001:
-                throw new InitializationException("Stacksize failed (not enought memory ?).");
-            default:
-                throw new InitializationException("Unknown startup error: " + res);
+        case 0: /* Success */
+            return true;
+        case -1:
+            throw new AlreadyRunningException("Javasci already running.");
+        case -2:
+            /* Should not occurd (processed before) */
+            throw new InitializationException("Could not find SCI.");
+        case -3:
+            throw new InitializationException("No existing directory.");
+        case 10001:
+            throw new InitializationException("Stacksize failed (not enought memory ?).");
+        default:
+            throw new InitializationException("Unknown startup error: " + res);
         }
     }
 
@@ -514,42 +521,40 @@ public class Scilab {
     public ScilabType get(String varname) throws JavasciException {
         ScilabTypeEnum sciType = this.getVariableType(varname);
         switch (sciType) {
-            case sci_matrix:
-            case sci_boolean:
-            case sci_strings:
-
-            case sci_poly:
-            case sci_sparse:
-            case sci_boolean_sparse:
-            case sci_list:
-            case sci_tlist:
-            case sci_mlist:
+        case sci_matrix:
+        case sci_boolean:
+        case sci_strings:
+
+        case sci_poly:
+        case sci_sparse:
+        case sci_boolean_sparse:
+        case sci_list:
+        case sci_tlist:
+        case sci_mlist:
+            return ScilabVariablesJavasci.getScilabVariable(varname);
+        case sci_ints:
+            ScilabIntegerTypeEnum typeInt = Call_Scilab.getIntegerPrecision(varname);
+
+            switch (typeInt) {
+            case sci_int8:
+            case sci_uint8:
+            case sci_int16:
+            case sci_uint16:
+            case sci_int32:
+            case sci_uint32:
                 return ScilabVariablesJavasci.getScilabVariable(varname);
-            case sci_ints:
-                ScilabIntegerTypeEnum typeInt = Call_Scilab.getIntegerPrecision(varname);
-
-                switch (typeInt) {
-                    case sci_int8:
-                    case sci_uint8:
-                    case sci_int16:
-                    case sci_uint16:
-                    case sci_int32:
-                    case sci_uint32:
-                        return ScilabVariablesJavasci.getScilabVariable(varname);
-                    case sci_int64:
-                    case sci_uint64:
-                        // will be available in Scilab 6
-                        throw new UnsupportedTypeException("64 bit (signed and unsigned) integer types not managed in Scilab 5.X");
+            case sci_int64:
+            case sci_uint64:
+                // will be available in Scilab 6
+                throw new UnsupportedTypeException("64 bit (signed and unsigned) integer types not managed in Scilab 5.X");
 
-                }
+            }
 
-            default:
-                throw new UnsupportedTypeException("Type not managed: " + sciType);
+        default:
+            throw new UnsupportedTypeException("Type not managed: " + sciType);
         }
     }
 
-
-
     /**
      * Send to Scilab a variable theVariable named varname<br />
      * Throws an exception if the datatype is not managed or if the variable is not available
@@ -568,57 +573,106 @@ public class Scilab {
      * @throws UnsupportedTypeException Type not managed yet.
      */
     public boolean put(String varname, ScilabType theVariable) throws JavasciException {
+        return putInCurrentScilabSession(varname, theVariable);
+    }
+
+    /**
+     * Send to the current Scilab session a variable theVariable named varname<br />
+     * Throws an exception if the datatype is not managed or if the variable is not available
+     * <br />
+     * Example:<br />
+    &nb