Scicos src: fix sublist and substruct reading in vec2var
[scilab.git] / scilab / modules / console / sci_gateway / c / sci_lines.c
index 1c1e669..73a131c 100644 (file)
@@ -1,13 +1,13 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2007 - INRIA - Allan CORNET 
- * Copyright (C) 2011-2012 - DIGITEO - Allan CORNET 
- * 
+ * Copyright (C) 2007 - INRIA - Allan CORNET
+ * Copyright (C) 2011 - DIGITEO - Allan CORNET
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
- * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
  *
  */
 /*--------------------------------------------------------------------------*/
 #include "MALLOC.h"
 #include "gw_console.h"
 #include "ScilabLinesUpdate.h"
-#include "scilabmode.h"
+#include "configvariable_interface.h"
 /*--------------------------------------------------------------------------*/
-static int sci_lines_no_rhs(char *fname);
-static int sci_lines_one_rhs(char *fname);
-static int sci_lines_two_rhs(char *fname);
+static int sci_lines_no_rhs(char *fname, void* pvApiCtx);
+static int sci_lines_one_rhs(char *fname, void* pvApiCtx);
+static int sci_lines_two_rhs(char *fname, void* pvApiCtx);
 /*--------------------------------------------------------------------------*/
-int sci_lines(char *fname,unsigned long fname_len)
+int sci_lines(char *fname, void* pvApiCtx)
 {
-    CheckRhs(0,2);
-    CheckLhs(1,1);
+    CheckRhs(0, 2);
+    CheckLhs(1, 1);
 
-    switch(Rhs)
+    switch (Rhs)
     {
-    case 0:
-        sci_lines_no_rhs(fname);
-        break;
-    case 1:
-        sci_lines_one_rhs(fname);
-        break;
-    case 2:
-        sci_lines_two_rhs(fname);
-        break;
+        case 0:
+            sci_lines_no_rhs(fname, pvApiCtx);
+            break;
+        case 1:
+            sci_lines_one_rhs(fname, pvApiCtx);
+            break;
+        case 2:
+            sci_lines_two_rhs(fname, pvApiCtx);
+            break;
     }
     return 0;
 }
 /*--------------------------------------------------------------------------*/
-static int sci_lines_no_rhs(char *fname)
+static int sci_lines_no_rhs(char *fname, void* pvApiCtx)
 {
     /* ncl = lines() */
     /* with ncl a 1x2 vector [nc , nl] */
@@ -52,18 +52,19 @@ static int sci_lines_no_rhs(char *fname)
     /* input/output not coherents */
     SciErr sciErr;
     double returnedDouble[2];
-    int n1 = 0,m1 = 0;
+    int n1 = 0, m1 = 0;
 
     returnedDouble[0] = (double)getColumnsSize();
     returnedDouble[1] = (double)getLinesSize();
 
-    n1 = 1; m1 = 2;
+    n1 = 1;
+    m1 = 2;
     sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 1, n1, m1, returnedDouble);
 
     if (sciErr.iErr)
     {
         printError(&sciErr, 0);
-        Scierror(999,_("%s: Memory allocation error.\n"), fname);
+        Scierror(999, _("%s: Memory allocation error.\n"), fname);
         return 0;
     }
 
@@ -73,7 +74,7 @@ static int sci_lines_no_rhs(char *fname)
     return 0;
 }
 /*--------------------------------------------------------------------------*/
-static int sci_lines_one_rhs(char *fname)
+static int sci_lines_one_rhs(char *fname, void* pvApiCtx)
 {
     /* lines(nb_lines) */
     /* nb_lines == -1 auto */
@@ -81,11 +82,10 @@ static int sci_lines_one_rhs(char *fname)
     /* nb_lines > 0 set value */
     SciErr sciErr;
     int *piAddressVarOne = NULL;
-
-    int isScalarInput = 0;
+    int iParam1 = 0;
 
     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
-    if(sciErr.iErr)
+    if (sciErr.iErr)
     {
         printError(&sciErr, 0);
         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
@@ -95,118 +95,52 @@ static int sci_lines_one_rhs(char *fname)
     /* compatibility with previous version manages int32 and double */
     if (!(isDoubleType(pvApiCtx, piAddressVarOne) || isIntegerType(pvApiCtx, piAddressVarOne)))
     {
-        Scierror(999,_("%s: Wrong type for input argument #%d: A scalar expected.\n"),fname, 1);
+        Scierror(999, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), fname, 1);
         return 0;
     }
 
-    isScalarInput = isScalar(pvApiCtx, piAddressVarOne);
-
-    if (!isScalarInput && !checkVarDimension(pvApiCtx, piAddressVarOne, 1, 2))
+    if (!isScalar(pvApiCtx, piAddressVarOne))
     {
-        Scierror(999,_("%s: Wrong size for input argument #%d: A scalar expected.\n"),fname, 1);
+        Scierror(999, _("%s: Wrong size for input argument #%d: A scalar expected.\n"), fname, 1);
         return 0;
     }
 
-    if (isScalarInput)
+    if (isIntegerType(pvApiCtx, piAddressVarOne))
     {
-        int iParam1 = 0;
-        if (isIntegerType(pvApiCtx, piAddressVarOne))
+        if (getScalarInteger32(pvApiCtx, piAddressVarOne, &iParam1) != 0)
         {
-            if (getScalarInteger32(pvApiCtx, piAddressVarOne, &iParam1) != 0)
-            {
-                Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
-                return 0;
-            }
+            Scierror(999, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), fname, 1);
+            return 0;
         }
-        else // double
+    }
+    else // double
+    {
+        double dParam1 = 0.;
+        if (getScalarDouble(pvApiCtx, piAddressVarOne, &dParam1) == 0)
         {
-            double dParam1 = 0.;
-            if (getScalarDouble(pvApiCtx,piAddressVarOne, &dParam1) == 0)
-            {
-                iParam1 = (int)dParam1;
-                if (dParam1 != (double)iParam1)
-                {
-                    Scierror(999, _("%s: Wrong value for input argument #%d: An integer value expected.\n"), fname, 1);
-                    return 0;
-                }
-            }
-            else
-            {
-                Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
-                return 0;
-            }
+            iParam1 = (int)dParam1;
         }
+    }
 
-        if (iParam1 == -1)
-        {
-            scilinesdefault();
-            if (getScilabMode() == SCILAB_STD)
-            {
-                ScilabLinesUpdate();
-            }
-        }
-        else
+    if (iParam1 == -1)
+    {
+        scilinesdefault();
+        if (getScilabMode() == SCILAB_STD)
         {
-            if (iParam1 < 0)
-            {
-                Scierror(999,_("%s: Wrong value for input argument #%d: A scalar (>= 0) expected.\n"),fname, 1);
-                return 0;
-            }
-            else
-            {
-                setLinesSize(iParam1);
-            }
+            ScilabLinesUpdate();
         }
     }
     else
     {
-        int iLinesValues[2];
-
-        if (isIntegerType(pvApiCtx, piAddressVarOne))
-        {
-            int *iParams1 = NULL;
-            int m = 0, n = 0;
-            sciErr = getMatrixOfInteger32(pvApiCtx,piAddressVarOne, &m, &n, &iParams1);
-            if(sciErr.iErr)
-            {
-                printError(&sciErr, 0);
-                Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
-                return 0;
-            }
-            iLinesValues[0] = iParams1[0];
-            iLinesValues[1] = iParams1[1];
-        }
-        else // double
+        if (iParam1 < 0)
         {
-            double *dParams1 = NULL;
-            int m = 0, n = 0;
-
-            sciErr = getMatrixOfDouble(pvApiCtx, piAddressVarOne, &m, &n, &dParams1);
-            if(sciErr.iErr)
-            {
-                printError(&sciErr, 0);
-                Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
-                return 0;
-            }
-
-            iLinesValues[0] = (int)dParams1[0];
-            iLinesValues[1] = (int)dParams1[1];
-
-            if ((dParams1[0] != (double)iLinesValues[0]) ||
-                (dParams1[1] != (double)iLinesValues[1]))
-            {
-                Scierror(999, _("%s: Wrong value for input argument #%d: An integer value expected.\n"), fname, 1);
-                return 0;
-            }
+            Scierror(999, _("%s: Wrong value for input argument #%d: A scalar (>= 0) expected.\n"), fname, 1);
+            return 0;
         }
-
-        if ((iLinesValues[0] < 0) || (iLinesValues[1] < 0))
+        else
         {
-            Scierror(999,_("%s: Wrong value for input argument #%d.\n"), fname, 1);
-            return 0;
+            setLinesSize(iParam1);
         }
-
-        scilines(iLinesValues[1], iLinesValues[0]);
     }
 
     LhsVar(1) = 0;
@@ -214,7 +148,7 @@ static int sci_lines_one_rhs(char *fname)
     return 0;
 }
 /*--------------------------------------------------------------------------*/
-static int sci_lines_two_rhs(char *fname)
+static int sci_lines_two_rhs(char *fname, void* pvApiCtx)
 {
     /* lines (nl, nc) */
     SciErr sciErr;
@@ -225,7 +159,7 @@ static int sci_lines_two_rhs(char *fname)
     int iParam2 = 0;
 
     sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddressVarTwo);
-    if(sciErr.iErr)
+    if (sciErr.iErr)
     {
         printError(&sciErr, 0);
         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 2);
@@ -233,7 +167,7 @@ static int sci_lines_two_rhs(char *fname)
     }
 
     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
-    if(sciErr.iErr)
+    if (sciErr.iErr)
     {
         printError(&sciErr, 0);
         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
@@ -243,25 +177,25 @@ static int sci_lines_two_rhs(char *fname)
     /* compatibility with previous version manages int32 and double */
     if (!(isDoubleType(pvApiCtx, piAddressVarOne) || isIntegerType(pvApiCtx, piAddressVarOne)))
     {
-        Scierror(999,_("%s: Wrong type for input argument #%d: A scalar expected.\n"),fname, 1);
+        Scierror(999, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), fname, 1);
         return 0;
     }
 
     if (!(isDoubleType(pvApiCtx, piAddressVarTwo) || isIntegerType(pvApiCtx, piAddressVarTwo)))
     {
-        Scierror(999,_("%s: Wrong type for input argument #%d: A scalar expected.\n"),fname, 2);
+        Scierror(999, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), fname, 2);
         return 0;
     }
 
     if (!isScalar(pvApiCtx, piAddressVarOne))
     {
-        Scierror(999,_("%s: Wrong size for input argument #%d: A scalar expected.\n"),fname, 1);
+        Scierror(999, _("%s: Wrong size for input argument #%d: A scalar expected.\n"), fname, 1);
         return 0;
     }
 
     if (!isScalar(pvApiCtx, piAddressVarTwo))
     {
-        Scierror(999,_("%s: Wrong size for input argument #%d: A scalar expected.\n"),fname, 2);
+        Scierror(999, _("%s: Wrong size for input argument #%d: A scalar expected.\n"), fname, 2);
         return 0;
     }
 
@@ -269,14 +203,14 @@ static int sci_lines_two_rhs(char *fname)
     {
         if (getScalarInteger32(pvApiCtx, piAddressVarOne, &iParam1) != 0)
         {
-            Scierror(999,_("%s: Wrong type for input argument #%d: A scalar expected.\n"),fname, 1);
+            Scierror(999, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), fname, 1);
             return 0;
         }
     }
     else // double
     {
         double dParam1 = 0.;
-        if (getScalarDouble(pvApiCtx,piAddressVarOne, &dParam1) == 0)
+        if (getScalarDouble(pvApiCtx, piAddressVarOne, &dParam1) == 0)
         {
             iParam1 = (int)dParam1;
         }
@@ -286,14 +220,14 @@ static int sci_lines_two_rhs(char *fname)
     {
         if (getScalarInteger32(pvApiCtx, piAddressVarTwo, &iParam2) != 0)
         {
-            Scierror(999,_("%s: Wrong type for input argument #%d: A scalar expected.\n"),fname, 2);
+            Scierror(999, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), fname, 2);
             return 0;
         }
     }
     else // double
     {
         double dParam2 = 0.;
-        if (getScalarDouble(pvApiCtx,piAddressVarTwo, &dParam2) == 0)
+        if (getScalarDouble(pvApiCtx, piAddressVarTwo, &dParam2) == 0)
         {
             iParam2 = (int)dParam2;
         }
@@ -312,7 +246,7 @@ static int sci_lines_two_rhs(char *fname)
     {
         if (iParam1 < 0)
         {
-            Scierror(999,_("%s: Wrong value for input argument #%d: A scalar (>= 0) expected.\n"),fname, 1);
+            Scierror(999, _("%s: Wrong value for input argument #%d: A scalar (>= 0) expected.\n"), fname, 1);
             return 0;
         }
         else
@@ -327,7 +261,7 @@ static int sci_lines_two_rhs(char *fname)
     }
     else
     {
-        Scierror(999,_("%s: Wrong value for input argument #%d: A scalar (>= 0) expected.\n"),fname, 2);
+        Scierror(999, _("%s: Wrong value for input argument #%d: A scalar (>= 0) expected.\n"), fname, 2);
         return 0;
     }