Fix a memory leaks + remove a dead assignment 89/9089/5
Sylvestre Ledru [Thu, 20 Sep 2012 22:39:53 +0000 (00:39 +0200)]
Change-Id: Ic093b4a1bfe6d566a66e486eac0b94564c9cac03

scilab/modules/fileio/sci_gateway/c/sci_mgetl.c
scilab/modules/fileio/sci_gateway/c/sci_mputl.c
scilab/modules/fileio/src/c/fscanfMat.c
scilab/modules/fileio/src/c/mgetl.c
scilab/modules/graphics/sci_gateway/c/sci_newaxes.c
scilab/modules/graphics/sci_gateway/c/sci_plot2d.c
scilab/modules/graphics/sci_gateway/c/sci_xget.c
scilab/modules/graphics/sci_gateway/c/sci_xrects.c
scilab/modules/optimization/sci_gateway/c/sci_qp_solve.c

index 08009fa..f36e9e6 100644 (file)
@@ -2,11 +2,11 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2006 - INRIA - Allan CORNET
  * Copyright (C) 2010 - 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    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
@@ -23,7 +23,7 @@
 #include "freeArrayOfString.h"
 #include "BOOL.h"
 /*--------------------------------------------------------------------------*/
-int sci_mgetl(char *fname,unsigned long fname_len)
+int sci_mgetl(char *fname, unsigned long fname_len)
 {
     SciErr sciErr;
     int *piAddressVarOne = NULL;
@@ -39,7 +39,7 @@ int sci_mgetl(char *fname,unsigned long fname_len)
         int *piAddressVarTwo = NULL;
 
         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);
@@ -51,7 +51,7 @@ int sci_mgetl(char *fname,unsigned long fname_len)
             double dValue = 0.;
             if (!isScalar(pvApiCtx, piAddressVarTwo))
             {
-                Scierror(999,_("%s: Wrong size for input argument #%d: Integer expected.\n"), fname, 2);
+                Scierror(999, _("%s: Wrong size for input argument #%d: Integer expected.\n"), fname, 2);
                 return 0;
             }
 
@@ -61,19 +61,19 @@ int sci_mgetl(char *fname,unsigned long fname_len)
             }
             else
             {
-                Scierror(999,_("%s: Memory allocation error.\n"), fname);
+                Scierror(999, _("%s: Memory allocation error.\n"), fname);
                 return 0;
             }
         }
         else
         {
-            Scierror(999,_("%s: Wrong type for input argument #%d: Integer expected.\n"), fname, 2);
+            Scierror(999, _("%s: Wrong type for input argument #%d: Integer expected.\n"), fname, 2);
             return 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);
@@ -90,7 +90,7 @@ int sci_mgetl(char *fname,unsigned long fname_len)
 
         if (!isScalar(pvApiCtx, piAddressVarOne))
         {
-            Scierror(999,_("%s: Wrong size for input argument #%d: String or logical unit expected.\n"), fname, 1);
+            Scierror(999, _("%s: Wrong size for input argument #%d: String or logical unit expected.\n"), fname, 1);
             return 0;
         }
 
@@ -107,12 +107,16 @@ int sci_mgetl(char *fname,unsigned long fname_len)
                 {
                     int fd = GetIdFromFilename(expandedFileName);
                     fileDescriptor = fd;
-                    if (expandedFileName) {FREE(expandedFileName); expandedFileName = NULL;}
+                    if (expandedFileName)
+                    {
+                        FREE(expandedFileName);
+                        expandedFileName = NULL;
+                    }
                     bCloseFile = FALSE;
                 }
                 else
                 {
-                    #define READ_ONLY_TEXT_MODE "rt"
+#define READ_ONLY_TEXT_MODE "rt"
                     int fd = 0;
                     int f_swap = 0;
                     double res = 0.0;
@@ -125,49 +129,74 @@ int sci_mgetl(char *fname,unsigned long fname_len)
                     {
                         case MOPEN_NO_ERROR:
                             fileDescriptor = fd;
-                            if (expandedFileName) {FREE(expandedFileName); expandedFileName = NULL;}
+                            if (expandedFileName)
+                            {
+                                FREE(expandedFileName);
+                                expandedFileName = NULL;
+                            }
                             break;
                         case MOPEN_NO_MORE_LOGICAL_UNIT:
+                        {
+                            Scierror(66, _("%s: Too many files opened!\n"), fname);
+                            if (expandedFileName)
                             {
-                                Scierror(66, _("%s: Too many files opened!\n"), fname);
-                                if (expandedFileName) {FREE(expandedFileName); expandedFileName = NULL;}
-                                return 0;
+                                FREE(expandedFileName);
+                                expandedFileName = NULL;
                             }
-                            break;
+                            return 0;
+                        }
+                        break;
                         case MOPEN_CAN_NOT_OPEN_FILE:
+                        {
+                            Scierror(999, _("%s: Cannot open file %s.\n"), fname, expandedFileName);
+                            if (expandedFileName)
                             {
-                                Scierror(999, _("%s: Cannot open file %s.\n"), fname, expandedFileName);
-                                if (expandedFileName) {FREE(expandedFileName); expandedFileName = NULL;}
-                                return 0;
+                                FREE(expandedFileName);
+                                expandedFileName = NULL;
                             }
-                            break;
+                            return 0;
+                        }
+                        break;
                         case MOPEN_NO_MORE_MEMORY:
+                        {
+                            if (expandedFileName)
                             {
-                                if (expandedFileName) {FREE(expandedFileName); expandedFileName = NULL;}
-                                Scierror(999, _("%s: No more memory.\n"), fname);
-                                return 0;
+                                FREE(expandedFileName);
+                                expandedFileName = NULL;
                             }
-                            break;
+                            Scierror(999, _("%s: No more memory.\n"), fname);
+                            return 0;
+                        }
+                        break;
                         case MOPEN_INVALID_FILENAME:
+                        {
+                            Scierror(999, _("%s: invalid filename %s.\n"), fname, expandedFileName);
+                            if (expandedFileName)
                             {
-                                Scierror(999, _("%s: invalid filename %s.\n"), fname, expandedFileName);
-                                if (expandedFileName) {FREE(expandedFileName); expandedFileName = NULL;}
-                                return 0;
+                                FREE(expandedFileName);
+                                expandedFileName = NULL;
                             }
-                            break;
-                        case MOPEN_INVALID_STATUS: default:
+                            return 0;
+                        }
+                        break;
+                        case MOPEN_INVALID_STATUS:
+                        default:
+                        {
+                            if (expandedFileName)
                             {
-                                if (expandedFileName) {FREE(expandedFileName); expandedFileName = NULL;}
-                                Scierror(999, _("%s: invalid status.\n"), fname);
-                                return 0;
+                                FREE(expandedFileName);
+                                expandedFileName = NULL;
                             }
-                            break;
+                            Scierror(999, _("%s: invalid status.\n"), fname);
+                            return 0;
+                        }
+                        break;
                     }
                 }
             }
             else
             {
-                Scierror(999,_("%s: Memory allocation error.\n"), fname);
+                Scierror(999, _("%s: Memory allocation error.\n"), fname);
                 return 0;
             }
         }
@@ -188,13 +217,13 @@ int sci_mgetl(char *fname,unsigned long fname_len)
                 fd = GetFileOpenedInScilab(fileDescriptor);
                 if (fd == NULL)
                 {
-                    Scierror(245,_("%s: No input file associated to logical unit %d.\n"), fname, fileDescriptor);
+                    Scierror(245, _("%s: No input file associated to logical unit %d.\n"), fname, fileDescriptor);
                     return 0;
                 }
             }
             else
             {
-                Scierror(999,_("%s: Memory allocation error.\n"), fname);
+                Scierror(999, _("%s: Memory allocation error.\n"), fname);
                 return 0;
             }
         }
@@ -205,10 +234,9 @@ int sci_mgetl(char *fname,unsigned long fname_len)
         {
             double dErrClose = 0.;
             C2F(mclose)(&fileDescriptor, &dErrClose);
-            bCloseFile = FALSE;
         }
 
-        switch(iErrorMgetl)
+        switch (iErrorMgetl)
         {
             case MGETL_NO_ERROR:
             {
@@ -216,7 +244,7 @@ int sci_mgetl(char *fname,unsigned long fname_len)
                 {
                     if (createEmptyMatrix(pvApiCtx, Rhs + 1) != 0)
                     {
-                        Scierror(999,_("%s: Memory allocation error.\n"), fname);
+                        Scierror(999, _("%s: Memory allocation error.\n"), fname);
                         return 0;
                     }
                 }
@@ -226,7 +254,7 @@ int sci_mgetl(char *fname,unsigned long fname_len)
                     int n = 1;
 
                     sciErr = createMatrixOfString(pvApiCtx, Rhs + 1, m, n, wcReadedStrings);
-                    if(sciErr.iErr)
+                    if (sciErr.iErr)
                     {
                         printError(&sciErr, 0);
                         Scierror(17, _("%s: Memory allocation error.\n"), fname);
@@ -245,7 +273,7 @@ int sci_mgetl(char *fname,unsigned long fname_len)
                 {
                     if (createEmptyMatrix(pvApiCtx, Rhs + 1) != 0)
                     {
-                        Scierror(999,_("%s: Memory allocation error.\n"), fname);
+                        Scierror(999, _("%s: Memory allocation error.\n"), fname);
                         return 0;
                     }
                 }
@@ -255,7 +283,7 @@ int sci_mgetl(char *fname,unsigned long fname_len)
                     int n = 1;
 
                     sciErr = createMatrixOfString(pvApiCtx, Rhs + 1, m, n, wcReadedStrings);
-                    if(sciErr.iErr)
+                    if (sciErr.iErr)
                     {
                         printError(&sciErr, 0);
                         Scierror(17, _("%s: Memory allocation error.\n"), fname);
@@ -274,7 +302,7 @@ int sci_mgetl(char *fname,unsigned long fname_len)
                     freeArrayOfString(wcReadedStrings, numberOfLinesReaded);
                     wcReadedStrings = NULL;
                 }
-                Scierror(999,_("%s: Memory allocation error.\n"), fname);
+                Scierror(999, _("%s: Memory allocation error.\n"), fname);
                 return 0;
             }
             break;
@@ -286,7 +314,7 @@ int sci_mgetl(char *fname,unsigned long fname_len)
                     freeArrayOfString(wcReadedStrings, numberOfLinesReaded);
                     wcReadedStrings = NULL;
                 }
-                Scierror(999,_("%s: error.\n"), fname);
+                Scierror(999, _("%s: error.\n"), fname);
                 return 0;
             }
             break;
@@ -297,7 +325,7 @@ int sci_mgetl(char *fname,unsigned long fname_len)
     }
     else
     {
-        Scierror(999,_("%s: Wrong type for input argument #%d: String or logical unit expected.\n"), fname, 1);
+        Scierror(999, _("%s: Wrong type for input argument #%d: String or logical unit expected.\n"), fname, 1);
     }
 
     return 0;
index 5cb441d..6b43c19 100644 (file)
@@ -1,15 +1,15 @@
 /*
 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 * Copyright (C) 2010 - 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    
+* are also available at
 * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
 *
 */
-/*--------------------------------------------------------------------------*/ 
+/*--------------------------------------------------------------------------*/
 #include "gw_fileio.h"
 #include "localization.h"
 #include "Scierror.h"
@@ -22,7 +22,7 @@
 #include "MALLOC.h"
 #include "BOOL.h"
 #include "mputl.h"
-/*--------------------------------------------------------------------------*/ 
+/*--------------------------------------------------------------------------*/
 int sci_mputl(char *fname, unsigned long fname_len)
 {
     SciErr sciErr;
@@ -54,7 +54,7 @@ int sci_mputl(char *fname, unsigned long fname_len)
     }
 
     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);
@@ -67,7 +67,7 @@ int sci_mputl(char *fname, unsigned long fname_len)
 
         if (!isScalar(pvApiCtx, piAddressVarTwo))
         {
-            Scierror(999,_("%s: Wrong size for input argument #%d: Integer expected.\n"), fname, 2);
+            Scierror(999, _("%s: Wrong size for input argument #%d: Integer expected.\n"), fname, 2);
             return 0;
         }
 
@@ -77,56 +77,60 @@ int sci_mputl(char *fname, unsigned long fname_len)
         }
         else
         {
-            Scierror(999,_("%s: Memory allocation error.\n"), fname);
+            Scierror(999, _("%s: Memory allocation error.\n"), fname);
             return 0;
         }
-    } 
+    }
     else if ( isStringType(pvApiCtx, piAddressVarTwo) )
     {
         if (!isScalar(pvApiCtx, piAddressVarTwo))
         {
-            Scierror(999,_("%s: Wrong size for input argument #%d: String expected.\n"), fname, 2);
+            Scierror(999, _("%s: Wrong size for input argument #%d: String expected.\n"), fname, 2);
             return 0;
         }
 
         if (getAllocatedSingleString(pvApiCtx, piAddressVarTwo, &filename) == 0)
         {
-            #define WRITE_ONLY_TEXT_MODE "wt"
+#define WRITE_ONLY_TEXT_MODE "wt"
             int f_swap = 0;
             double res = 0.0;
             int ierr = 0;
             char *expandedFileName = expandPathVariable(filename);
-            
+
             C2F(mopen)(&fileDescriptor, expandedFileName, WRITE_ONLY_TEXT_MODE, &f_swap, &res, &ierr);
-            if (expandedFileName) {FREE(expandedFileName); expandedFileName = NULL;}
+            if (expandedFileName)
+            {
+                FREE(expandedFileName);
+                expandedFileName = NULL;
+            }
 
             switch (ierr)
             {
-            case MOPEN_NO_ERROR:
-                bCloseFile = TRUE;
-                break;
-            case MOPEN_NO_MORE_LOGICAL_UNIT:
+                case MOPEN_NO_ERROR:
+                    bCloseFile = TRUE;
+                    break;
+                case MOPEN_NO_MORE_LOGICAL_UNIT:
                 {
                     freeAllocatedSingleString(filename);
                     Scierror(66, _("%s: Too many files opened!\n"), fname);
                     return 0;
                 }
                 break;
-            case MOPEN_CAN_NOT_OPEN_FILE:
+                case MOPEN_CAN_NOT_OPEN_FILE:
                 {
                     Scierror(999, _("%s: Cannot open file %s.\n"), fname, filename);
                     freeAllocatedSingleString(filename);
                     return 0;
                 }
                 break;
-            case MOPEN_NO_MORE_MEMORY:
+                case MOPEN_NO_MORE_MEMORY:
                 {
                     freeAllocatedSingleString(filename);
                     Scierror(999, _("%s: No more memory.\n"), fname);
                     return 0;
                 }
                 break;
-            case MOPEN_INVALID_FILENAME:
+                case MOPEN_INVALID_FILENAME:
                 {
                     if (filename)
                     {
@@ -140,7 +144,8 @@ int sci_mputl(char *fname, unsigned long fname_len)
                     return 0;
                 }
                 break;
-            case MOPEN_INVALID_STATUS: default:
+                case MOPEN_INVALID_STATUS:
+                default:
                 {
                     freeAllocatedSingleString(filename);
                     Scierror(999, _("%s: invalid status.\n"), fname);
@@ -153,17 +158,17 @@ int sci_mputl(char *fname, unsigned long fname_len)
         }
         else
         {
-            Scierror(999,_("%s: Memory allocation error.\n"), fname);
+            Scierror(999, _("%s: Memory allocation error.\n"), fname);
             return 0;
         }
     }
     else
     {
-        Scierror(999,_("%s: Wrong type for input argument #%d: a String or Integer expected.\n"), fname, 2);
+        Scierror(999, _("%s: Wrong type for input argument #%d: a String or Integer expected.\n"), fname, 2);
     }
 
     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);
@@ -172,12 +177,12 @@ int sci_mputl(char *fname, unsigned long fname_len)
 
     if (!isStringType(pvApiCtx, piAddressVarOne))
     {
-        Scierror(999,_("%s: Wrong type for input argument #%d: String expected.\n"), fname, 1);
+        Scierror(999, _("%s: Wrong type for input argument #%d: String expected.\n"), fname, 1);
         return 0;
     }
 
-    sciErr = getMatrixOfString(pvApiCtx, piAddressVarOne,&mOne, &nOne, NULL, NULL);
-    if(sciErr.iErr)
+    sciErr = getMatrixOfString(pvApiCtx, piAddressVarOne, &mOne, &nOne, NULL, NULL);
+    if (sciErr.iErr)
     {
         printError(&sciErr, 0);
         return 0;
@@ -185,7 +190,7 @@ int sci_mputl(char *fname, unsigned long fname_len)
 
     if ( !((mOne == 1) || (nOne == 1)) )
     {
-        Scierror(999,_("%s: Wrong size for input argument #%d: A 1-by-n or m-by-1 array expected.\n"), fname, 1);
+        Scierror(999, _("%s: Wrong size for input argument #%d: A 1-by-n or m-by-1 array expected.\n"), fname, 1);
         return 0;
     }
 
@@ -198,8 +203,8 @@ int sci_mputl(char *fname, unsigned long fname_len)
         return 0;
     }
 
-    sciErr = getMatrixOfString(pvApiCtx, piAddressVarOne,&mOne, &nOne, lenStVarOne, NULL);
-    if(sciErr.iErr)
+    sciErr = getMatrixOfString(pvApiCtx, piAddressVarOne, &mOne, &nOne, lenStVarOne, NULL);
+    if (sciErr.iErr)
     {
         printError(&sciErr, 0);
         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
@@ -209,7 +214,8 @@ int sci_mputl(char *fname, unsigned long fname_len)
     pStVarOne = (char**) MALLOC(sizeof(char*) * mnOne);
     if (pStVarOne == NULL)
     {
-        FREE(lenStVarOne); lenStVarOne = NULL;
+        FREE(lenStVarOne);
+        lenStVarOne = NULL;
         Scierror(999, _("%s: No more memory.\n"), fname);
         return 0;
     }
@@ -220,15 +226,23 @@ int sci_mputl(char *fname, unsigned long fname_len)
         if (pStVarOne[i] == NULL)
         {
             freeArrayOfString(pStVarOne, i);
-            if (lenStVarOne) {FREE(lenStVarOne); lenStVarOne = NULL;}
+            if (lenStVarOne)
+            {
+                FREE(lenStVarOne);
+                lenStVarOne = NULL;
+            }
             Scierror(999, _("%s: No more memory.\n"), fname);
             return 0;
         }
     }
 
     sciErr = getMatrixOfString(pvApiCtx, piAddressVarOne, &mOne, &nOne, lenStVarOne, pStVarOne);
-    if (lenStVarOne) {FREE(lenStVarOne); lenStVarOne = NULL;}
-    if(sciErr.iErr)
+    if (lenStVarOne)
+    {
+        FREE(lenStVarOne);
+        lenStVarOne = NULL;
+    }
+    if (sciErr.iErr)
     {
         freeArrayOfString(pStVarOne, mnOne);
         printError(&sciErr, 0);
@@ -243,30 +257,29 @@ int sci_mputl(char *fname, unsigned long fname_len)
     {
         double dErrClose = 0.;
         C2F(mclose)(&fileDescriptor, &dErrClose);
-        bCloseFile = FALSE;
     }
 
     switch (mputlErr)
     {
-    case MPUTL_NO_ERROR:
-        createScalarBoolean(pvApiCtx, Rhs + 1, TRUE);
-        LhsVar(1) = Rhs + 1;
-        PutLhsVar();
-        break;
+        case MPUTL_NO_ERROR:
+            createScalarBoolean(pvApiCtx, Rhs + 1, TRUE);
+            LhsVar(1) = Rhs + 1;
+            PutLhsVar();
+            break;
 
-    case MPUTL_INVALID_FILE_DESCRIPTOR:
-        // commented for compatiblity
-        // Scierror(999, _("%s: invalid file descriptor.\n"), fname);
-        // break;
-    case MPUTL_ERROR:
-    case MPUTL_NO_WRITE_RIGHT:
-    default:
-        createScalarBoolean(pvApiCtx, Rhs + 1, FALSE);
-        LhsVar(1) = Rhs + 1;
-        PutLhsVar();
-        break;
+        case MPUTL_INVALID_FILE_DESCRIPTOR:
+            // commented for compatiblity
+            // Scierror(999, _("%s: invalid file descriptor.\n"), fname);
+            // break;
+        case MPUTL_ERROR:
+        case MPUTL_NO_WRITE_RIGHT:
+        default:
+            createScalarBoolean(pvApiCtx, Rhs + 1, FALSE);
+            LhsVar(1) = Rhs + 1;
+            PutLhsVar();
+            break;
     }
 
     return 0;
 }
-/*--------------------------------------------------------------------------*/ 
+/*--------------------------------------------------------------------------*/
index 2c28165..0199189 100644 (file)
@@ -49,18 +49,18 @@ static char *supportedFormat[NB_FORMAT_SUPPORTED] =
 static BOOL itCanBeMatrixLine(char *line, char *format, char *separator);
 static int getNbColumnsInLine(char *line, char *format, char *separator);
 static int getNumbersColumnsInLines(char **lines, int sizelines,
-    int nbLinesText,
-    char *format, char *separator);
+                                    int nbLinesText,
+                                    char *format, char *separator);
 static int getNumbersLinesOfText(char **lines, int sizelines,
-    char *format, char *separator);
+                                 char *format, char *separator);
 static char **splitLine(char *str, char *sep, int *toks, char meta);
 static double *getDoubleValuesFromLines(char **lines, int sizelines,
-    int nbLinesText,
-    char *format, char *separator,
-    int m, int n);
+                                        int nbLinesText,
+                                        char *format, char *separator,
+                                        int m, int n);
 static double *getDoubleValuesInLine(char *line,
-    char *format, char *separator,
-    int nbColumnsMax);
+                                     char *format, char *separator,
+                                     int nbColumnsMax);
 static double returnINF(BOOL bPositive);
 static double returnNAN(void);
 static BOOL checkFscanfMatFormat(char *format);
@@ -150,9 +150,9 @@ fscanfMatResult *fscanfMat(char *filename, char *format, char *separator, BOOL a
     nbColumns = getNumbersColumnsInLines(lines, nblines, nbLinesTextDetected, format, separator);
 
     dValues = getDoubleValuesFromLines(lines, nblines,
-        nbLinesTextDetected,
-        format, separator,
-        nbColumns, nbRows);
+                                       nbLinesTextDetected,
+                                       format, separator,
+                                       nbColumns, nbRows);
     if (dValues)
     {
         resultFscanfMat = (fscanfMatResult*)(MALLOC(sizeof(fscanfMatResult)));
@@ -186,6 +186,7 @@ fscanfMatResult *fscanfMat(char *filename, char *format, char *separator, BOOL a
         }
         else
         {
+            FREE(dValues);
             freeArrayOfString(lines, nblines);
         }
     }
@@ -254,8 +255,8 @@ static BOOL itCanBeMatrixLine(char *line, char *format, char *separator)
                 if ((ierr != 0) && (ierr != EOF))
                 {
                     if ((strncmp(str, NanString, (int)strlen(NanString)) == 0) ||
-                        (strncmp(str, NegInfString, (int)strlen(NegInfString)) == 0) ||
-                        (strncmp(str, InfString, (int)strlen(InfString)) == 0))
+                            (strncmp(str, NegInfString, (int)strlen(NegInfString)) == 0) ||
+                            (strncmp(str, InfString, (int)strlen(InfString)) == 0))
                     {
                         FREE(str);
                         str = NULL;
@@ -275,13 +276,13 @@ static BOOL itCanBeMatrixLine(char *line, char *format, char *separator)
 }
 /*--------------------------------------------------------------------------*/
 static int getNumbersLinesOfText(char **lines, int sizelines,
-    char *format, char *separator)
+                                 char *format, char *separator)
 {
     int numberOfLines = 0;
     if (lines)
     {
         int i = 0;
-        for(i = 0; i < sizelines; i++)
+        for (i = 0; i < sizelines; i++)
         {
             if (!itCanBeMatrixLine(lines[i], format, separator))
             {
@@ -297,8 +298,8 @@ static int getNumbersLinesOfText(char **lines, int sizelines,
 }
 /*--------------------------------------------------------------------------*/
 static int getNumbersColumnsInLines(char **lines, int sizelines,
-    int nbLinesText,
-    char *format, char *separator)
+                                    int nbLinesText,
+                                    char *format, char *separator)
 {
     int previousNbColumns = 0;
     int NbColumns = 0;
@@ -343,7 +344,7 @@ static int getNbColumnsInLine(char *line, char *format, char *separator)
         }
         if (splittedStr)
         {
-            for(i = 0; i < nbTokens;i++)
+            for (i = 0; i < nbTokens; i++)
             {
                 double dValue = 0.;
                 int ierr = sscanf(splittedStr[i], format, &dValue);
@@ -361,8 +362,8 @@ static int getNbColumnsInLine(char *line, char *format, char *separator)
                     if ((ierr != 0) && (ierr != EOF))
                     {
                         if ( (strcmp(str, NanString) == 0) ||
-                            (strcmp(str, NegInfString) == 0) ||
-                            (strcmp(str, InfString) == 0) )
+                                (strcmp(str, NegInfString) == 0) ||
+                                (strcmp(str, InfString) == 0) )
                         {
                             nbColums++;
                         }
@@ -442,19 +443,19 @@ static char **splitLine(char *str, char *sep, int *toks, char meta)
         return NULL;
     }
 
-    while(idx < end)
+    while (idx < end)
     {
-        while(sep_idx < sep_end)
+        while (sep_idx < sep_end)
         {
-            if((*idx == *sep_idx) && (last_char != meta))
+            if ((*idx == *sep_idx) && (last_char != meta))
             {
-                if(len > 0)
+                if (len > 0)
                 {
-                    if(curr_str < (int)strlen(str))
+                    if (curr_str < (int)strlen(str))
                     {
                         retstr[curr_str] = (char *) MALLOC((sizeof(char) * len) + 1);
 
-                        if(retstr[curr_str] == NULL)
+                        if (retstr[curr_str] == NULL)
                         {
                             *toks = 0;
                             return NULL;
@@ -467,7 +468,7 @@ static char **splitLine(char *str, char *sep, int *toks, char meta)
                         idx++;
                     }
 
-                    if(curr_str >= (int)strlen(str))
+                    if (curr_str >= (int)strlen(str))
                     {
                         *toks = curr_str + 1;
                         return retstr;
@@ -493,13 +494,14 @@ static char **splitLine(char *str, char *sep, int *toks, char meta)
         idx++;
     }
 
-    if(len > 0)
+    if (len > 0)
     {
         retstr[curr_str] = (char *) MALLOC((sizeof(char) * len) + 1);
 
-        if(retstr[curr_str] == NULL)
+        if (retstr[curr_str] == NULL)
         {
             *toks = 0;
+            FREE(retstr);
             return NULL;
         }
 
@@ -512,9 +514,9 @@ static char **splitLine(char *str, char *sep, int *toks, char meta)
 }
 /*--------------------------------------------------------------------------*/
 static double *getDoubleValuesFromLines(char **lines, int sizelines,
-    int nbLinesText,
-    char *format, char *separator,
-    int m, int n)
+                                        int nbLinesText,
+                                        char *format, char *separator,
+                                        int m, int n)
 {
     double *dValues = NULL;
 
@@ -533,7 +535,7 @@ static double *getDoubleValuesFromLines(char **lines, int sizelines,
                 int j = 0;
                 for (j = 0; j < m; j++)
                 {
-                    dValues[(i-firstLinesMatrix) + n * j] = dValsTmp[j];
+                    dValues[(i - firstLinesMatrix) + n * j] = dValsTmp[j];
                 }
                 FREE(dValsTmp);
                 dValsTmp = NULL;
@@ -544,8 +546,8 @@ static double *getDoubleValuesFromLines(char **lines, int sizelines,
 }
 /*--------------------------------------------------------------------------*/
 static double *getDoubleValuesInLine(char *line,
-    char *format, char *separator,
-    int nbColumnsMax)
+                                     char *format, char *separator,
+                                     int nbColumnsMax)
 {
     double *dValues = NULL;
 
@@ -573,8 +575,8 @@ static double *getDoubleValuesInLine(char *line,
                     if ((ierr != 0) && (ierr != EOF))
                     {
                         if ( (strcmp(str, NanString) == 0) ||
-                            (strcmp(str, NegInfString) == 0) ||
-                            (strcmp(str, InfString) == 0) )
+                                (strcmp(str, NegInfString) == 0) ||
+                                (strcmp(str, InfString) == 0) )
                         {
                             if (strcmp(str, NanString) == 0)
                             {
@@ -594,19 +596,24 @@ static double *getDoubleValuesInLine(char *line,
                         else
                         {
                             freeArrayOfString(splittedStr, nbTokens);
-                            FREE(dValues); dValues = NULL;
-                            FREE(str); str = NULL;
+                            FREE(dValues);
+                            dValues = NULL;
+                            FREE(str);
+                            str = NULL;
                             return NULL;
                         }
                     }
                     else
                     {
                         freeArrayOfString(splittedStr, nbTokens);
-                        FREE(dValues); dValues = NULL;
-                        FREE(str); str = NULL;
+                        FREE(dValues);
+                        dValues = NULL;
+                        FREE(str);
+                        str = NULL;
                         return NULL;
                     }
-                    FREE(str); str = NULL;
+                    FREE(str);
+                    str = NULL;
                 }
             }
             freeArrayOfString(splittedStr, nbTokens);
@@ -631,7 +638,7 @@ static double returnNAN(void)
 
     if ( first )
     {
-        nan = (nan - (double) first)/(nan - (double) first);
+        nan = (nan - (double) first) / (nan - (double) first);
         first = 0;
     }
     return (nan);
@@ -666,7 +673,7 @@ static char *getCleanedFormat(char *format)
         if (percent)
         {
             int i = 0;
-            for(i = 0; i < NB_FORMAT_SUPPORTED; i++)
+            for (i = 0; i < NB_FORMAT_SUPPORTED; i++)
             {
                 char *token = strstr(percent, supportedFormat[i]);
                 if (token)
@@ -674,9 +681,9 @@ static char *getCleanedFormat(char *format)
                     int nbcharacters = (int)(strlen(percent) - strlen(token));
                     cleanedFormat = strdup(percent);
                     cleanedFormat[nbcharacters] = 0;
-                    if ( (nbcharacters - 1 > 0) && (isdigit(cleanedFormat[nbcharacters-1]) ||
-                        (cleanedFormat[nbcharacters-1]) == '.') ||
-                        (cleanedFormat[nbcharacters-1]) == '%')
+                    if ( (nbcharacters - 1 > 0) && (isdigit(cleanedFormat[nbcharacters - 1]) ||
+                                                    (cleanedFormat[nbcharacters - 1]) == '.') ||
+                            (cleanedFormat[nbcharacters - 1]) == '%')
                     {
                         strcat(cleanedFormat, supportedFormat[i]);
                         return cleanedFormat;
@@ -742,8 +749,8 @@ static BOOL isValidLineWithOnlyOneNumber(char *line)
         else
         {
             if ((strncmp(line, NanString, (int)strlen(NanString)) == 0) ||
-                (strncmp(line, NegInfString, (int)strlen(NegInfString)) == 0) ||
-                (strncmp(line, InfString, (int)strlen(InfString)) == 0))
+                    (strncmp(line, NegInfString, (int)strlen(NegInfString)) == 0) ||
+                    (strncmp(line, InfString, (int)strlen(InfString)) == 0))
             {
                 return TRUE;
             }
index 282ff01..bec5a83 100644 (file)
@@ -182,6 +182,7 @@ char **mgetl(int fd, int nbLinesIn, int *nbLinesOut, int *ierr)
                             {
                                 *nbLinesOut = 0;
                                 *ierr = MGETL_MEMORY_ALLOCATION_ERROR;
+                                FREE(nbLines);
                                 return NULL;
                             }
                         }
index 569bcfc..4afdb20 100644 (file)
@@ -39,7 +39,7 @@ int sci_newaxes( char * fname, unsigned long fname_len )
     CheckRhs(0, 0);
     CheckLhs(0, 1);
 
-    psubwinUID = (char*)getOrCreateDefaultSubwin();
+    getOrCreateDefaultSubwin();
 
     if ((psubwinUID = (char*)ConstructSubWin (getCurrentFigure())) != NULL)
     {
index 72d7fbb..aacab57 100644 (file)
 int sci_plot2d( char * fname, unsigned long fname_len )
 {
 
-  int m1 = 0, n1 = 0, l1 = 0, m2 = 0, n2 = 0, l2 = 0, lt = 0;
-  int test = 0,i = 0,j = 0,iskip = 0;
-  int frame_def = 8;
-  int *frame=&frame_def;
-  int axes_def=1;
-  int *axes=&axes_def;
-
-  /* F.Leray 18.05.04 : log. case test*/
-  int size_x = 0, size_y = 0;
-  double xd[2];
-  double *x1 = NULL;
-  char dataflag = 0;
-
-  char   * logFlags = NULL  ;
-  int    * style    = NULL  ;
-  double * rect     = NULL  ;
-  char   * strf     = NULL  ;
-  char   * legend   = NULL  ;
-  int    * nax      = NULL  ;
-  BOOL     flagNax  = FALSE ;
-  char strfl[4];
-
-  static rhs_opts opts[]= { {-1,"axesflag","?",0,0,0},
-                                             {-1,"frameflag","?",0,0,0},
-                                       {-1,"leg","?",0,0,0},
-                                       {-1,"logflag","?",0,0,0},
-                                       {-1,"nax","?",0,0,0},
-                                       {-1,"rect","?",0,0,0},
-                                       {-1,"strf","?",0,0,0},
-                                       {-1,"style","?",0,0,0},
-                            {-1,NULL,NULL,0,0}};
-  
-  if (Rhs == 0)
-  {
-    sci_demo(fname, fname_len);
-    return 0;
-  }
-
-  CheckRhs(1,9);
-
-  iskip=0;
-  if ( get_optionals(fname,opts) == 0)
-  {
-         PutLhsVar();
-         return 0 ;
-  }
-
-  if (GetType(1)==sci_strings)
-  {
-    /* logflags */
-    GetLogflags( fname, 1, opts, &logFlags ) ;
-    iskip=1;
-  }
+    int m1 = 0, n1 = 0, l1 = 0, m2 = 0, n2 = 0, l2 = 0, lt = 0;
+    int test = 0, i = 0, j = 0, iskip = 0;
+    int frame_def = 8;
+    int *frame = &frame_def;
+    int axes_def = 1;
+    int *axes = &axes_def;
+
+    /* F.Leray 18.05.04 : log. case test*/
+    int size_x = 0, size_y = 0;
+    double xd[2];
+    char dataflag = 0;
+
+    char   * logFlags = NULL  ;
+    int    * style    = NULL  ;
+    double * rect     = NULL  ;
+    char   * strf     = NULL  ;
+    char   * legend   = NULL  ;
+    int    * nax      = NULL  ;
+    BOOL     flagNax  = FALSE ;
+    char strfl[4];
+
+    static rhs_opts opts[] = { { -1, "axesflag", "?", 0, 0, 0},
+        { -1, "frameflag", "?", 0, 0, 0},
+        { -1, "leg", "?", 0, 0, 0},
+        { -1, "logflag", "?", 0, 0, 0},
+        { -1, "nax", "?", 0, 0, 0},
+        { -1, "rect", "?", 0, 0, 0},
+        { -1, "strf", "?", 0, 0, 0},
+        { -1, "style", "?", 0, 0, 0},
+        { -1, NULL, NULL, 0, 0}
+    };
+
+    if (Rhs == 0)
+    {
+        sci_demo(fname, fname_len);
+        return 0;
+    }
 
-  if (FirstOpt() == 2+iskip)                                   /** plot2d([loglags,] y, <opt_args>); **/
-  {
-    GetRhsVar(1+iskip,MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);
+    CheckRhs(1, 9);
 
-    if (m2 == 1 && n2 > 1) { m2 = n2; n2 = 1;}
-    m1 = m2;  n1 = n2;
-    CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,  &m1, &n1, &l1);
+    iskip = 0;
+    if ( get_optionals(fname, opts) == 0)
+    {
+        PutLhsVar();
+        return 0 ;
+    }
 
-    for (i = 0; i < m2 ; ++i)
+    if (GetType(1) == sci_strings)
     {
-           for (j = 0 ; j < n2 ;  ++j)
-      {
-             *stk( l1 + i + m2*j) = (double) i+1;
-      }
+        /* logflags */
+        GetLogflags( fname, 1, opts, &logFlags ) ;
+        iskip = 1;
     }
-  }
-  else if (FirstOpt() >= 3 + iskip)     /** plot2d([loglags,] x, y[, style [,...]]); **/
-  {
-
-    /* x */
-    GetRhsVar(1+iskip,MATRIX_OF_DOUBLE_DATATYPE, &m1, &n1, &l1);
-
-    /* y */
-    GetRhsVar(2+iskip,MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);
-
-    test = (m1*n1 == 0)||
-      ((m1 == 1 || n1 == 1) && (m2 == 1 || n2 ==1) && (m1*n1 == m2*n2))  ||
-      ((m1 == m2) && (n1 == n2)) ||
-      ((m1 == 1 && n1 == m2) || (n1 == 1 && m1 == m2));
-    CheckDimProp(1+iskip,2+iskip,!test);
-
-    if (m1*n1 == 0)
-    { /* default x=1:n */
-      CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,  &m2, &n2, &lt);
-      if (m2 == 1 && n2 > 1) { m2 = n2; n2 = 1;}
-      for (i = 0; i < m2 ; ++i)
-      {
-             for (j = 0 ; j < n2 ;  ++j)
+
+    if (FirstOpt() == 2 + iskip)                                       /** plot2d([loglags,] y, <opt_args>); **/
+    {
+        GetRhsVar(1 + iskip, MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);
+
+        if (m2 == 1 && n2 > 1)
         {
-                *stk( lt + i + m2*j) = (double) i+1;
+            m2 = n2;
+            n2 = 1;
         }
-      }
-      m1 = m2;
-      n1 = n2;
-      l1 = lt;
-    }
-    else if ((m1 == 1 || n1 == 1) && (m2 != 1 && n2 != 1) )
-    {
-      /* a single x vector for mutiple columns for y */
-      CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,  &m2, &n2, &lt);
-      for (i = 0; i < m2 ; ++i)
-      {
-             for (j = 0 ; j < n2 ;  ++j)
+        m1 = m2;
+        n1 = n2;
+        CreateVar(Rhs + 1, MATRIX_OF_DOUBLE_DATATYPE,  &m1, &n1, &l1);
+
+        for (i = 0; i < m2 ; ++i)
         {
-               *stk( lt + i + m2*j) = *stk(l1 +i);
+            for (j = 0 ; j < n2 ;  ++j)
+            {
+                *stk( l1 + i + m2 * j) = (double) i + 1;
+            }
         }
-      }
-      m1 = m2;
-      n1 = n2;
-      l1 = lt;
-    }
-    else if ((m1 == 1 && n1 == 1) && (n2 != 1) )
-    {
-      /* a single y row vector  for a single x */
-      CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,  &m1, &n2, &lt);
-      for (j = 0 ; j < n2 ;  ++j)
-      {
-             *stk( lt + j ) = *stk(l1);
-      }
-      n1 = n2;
-      l1 = lt;
     }
-    else
+    else if (FirstOpt() >= 3 + iskip)     /** plot2d([loglags,] x, y[, style [,...]]); **/
     {
-      if (m2 == 1 && n2 > 1) { m2 = n2; n2 = 1;}
-      if (m1 == 1 && n1 > 1) { m1 = n1; n1 = 1;}
-    }
-  }
-  else
-  {
-         Scierror(999, _("%s: Wrong number of mandatory input arguments. At least %d expected.\n"), fname, 1);
-         return 0;
-  }
-
-  if(n1 == -1 || n2 == -1 || m1 == -1 || m2 == -1)
-  {
-         Scierror(999, _("%s: Wrong size for input arguments #%d and #%d.\n"), fname, 1, 2); /* @TODO : detail error */
-         return 0;
-  }
-
-  sciGetStyle( fname, 3+iskip, n1, opts, &style ) ;
-
-  GetStrf( fname, 4+iskip, opts, &strf ) ;
-
-  GetLegend( fname, 5+iskip, opts, &legend );
-
-  GetRect( fname, 6+iskip, opts, &rect );
 
-  GetNax( 7+iskip, opts, &nax, &flagNax ) ;
+        /* x */
+        GetRhsVar(1 + iskip, MATRIX_OF_DOUBLE_DATATYPE, &m1, &n1, &l1);
 
-  if (iskip==0) { GetLogflags( fname, 8, opts, &logFlags ) ; }
+        /* y */
+        GetRhsVar(2 + iskip, MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);
 
-  if ( isDefStrf( strf ) )
-  {
-    strcpy(strfl,DEFSTRFN);
+        test = (m1*n1 == 0) ||
+               ((m1 == 1 || n1 == 1) && (m2 == 1 || n2 == 1) && (m1*n1 == m2 * n2))  ||
+               ((m1 == m2) && (n1 == n2)) ||
+               ((m1 == 1 && n1 == m2) || (n1 == 1 && m1 == m2));
+        CheckDimProp(1 + iskip, 2 + iskip, !test);
 
-    strf = strfl;
-    if ( !isDefRect( rect ) )
-    {
-      strfl[1] = '7';
+        if (m1*n1 == 0)
+        {
+            /* default x=1:n */
+            CreateVar(Rhs + 1, MATRIX_OF_DOUBLE_DATATYPE,  &m2, &n2, &lt);
+            if (m2 == 1 && n2 > 1)
+            {
+                m2 = n2;
+                n2 = 1;
+            }
+            for (i = 0; i < m2 ; ++i)
+            {
+                for (j = 0 ; j < n2 ;  ++j)
+                {
+                    *stk( lt + i + m2 * j) = (double) i + 1;
+                }
+            }
+            m1 = m2;
+            n1 = n2;
+            l1 = lt;
+        }
+        else if ((m1 == 1 || n1 == 1) && (m2 != 1 && n2 != 1) )
+        {
+            /* a single x vector for mutiple columns for y */
+            CreateVar(Rhs + 1, MATRIX_OF_DOUBLE_DATATYPE,  &m2, &n2, &lt);
+            for (i = 0; i < m2 ; ++i)
+            {
+                for (j = 0 ; j < n2 ;  ++j)
+                {
+                    *stk( lt + i + m2 * j) = *stk(l1 + i);
+                }
+            }
+            m1 = m2;
+            n1 = n2;
+            l1 = lt;
+        }
+        else if ((m1 == 1 && n1 == 1) && (n2 != 1) )
+        {
+            /* a single y row vector  for a single x */
+            CreateVar(Rhs + 1, MATRIX_OF_DOUBLE_DATATYPE,  &m1, &n2, &lt);
+            for (j = 0 ; j < n2 ;  ++j)
+            {
+                *stk( lt + j ) = *stk(l1);
+            }
+            n1 = n2;
+            l1 = lt;
+        }
+        else
+        {
+            if (m2 == 1 && n2 > 1)
+            {
+                m2 = n2;
+                n2 = 1;
+            }
+            if (m1 == 1 && n1 > 1)
+            {
+                m1 = n1;
+                n1 = 1;
+            }
+        }
     }
-    if ( !isDefLegend( legend ) )
+    else
     {
-      strfl[0] = '1';
+        Scierror(999, _("%s: Wrong number of mandatory input arguments. At least %d expected.\n"), fname, 1);
+        return 0;
     }
 
-    GetOptionalIntArg(fname,9,"frameflag",&frame,1,opts);
-    if( frame != &frame_def )
+    if (n1 == -1 || n2 == -1 || m1 == -1 || m2 == -1)
     {
-      strfl[1] = (char)(*frame+48);
+        Scierror(999, _("%s: Wrong size for input arguments #%d and #%d.\n"), fname, 1, 2); /* @TODO : detail error */
+        return 0;
     }
 
-    GetOptionalIntArg(fname, 9,"axesflag",&axes,1,opts);
+    sciGetStyle( fname, 3 + iskip, n1, opts, &style ) ;
 
-    if(axes != &axes_def)
-    {
-      strfl[2] = (char)(*axes+48);
-    }
-  }
-
-  /* Make a test on log. mode : available or not depending on the bounds set by Rect arg. or xmin/xmax :
-  Rect case :
-  - if the min bound is strictly posivite, we can use log. mode
-  - if not, send error message
-  x/y min/max case:
-  - we find the first strictly positive min bound in Plo2dn.c ?? */
-
-  switch (strf[1])
-  {
-  case '0':
-    /* no computation, the plot use the previous (or default) scale */
-    break;
-  case '1' : case '3' : case '5' : case '7':
-    /* based on Rect arg */
-    if( rect[0] > rect[2] || rect[1] > rect[3])
-    {
-      Scierror(999, _("%s: Impossible status min > max in x or y rect data.\n"),fname);
-      return -1;
-    }
+    GetStrf( fname, 4 + iskip, opts, &strf ) ;
 
-    if( rect[0] <= 0. && logFlags[1] =='l') /* xmin */
-    {
-      Scierror(999, _("%s: Bounds on x axis must be strictly positive to use logarithmic mode.\n"),fname);
-      return -1 ;
-    }
+    GetLegend( fname, 5 + iskip, opts, &legend );
 
-    if( rect[1] <= 0. && logFlags[2] =='l') /* ymin */
-    {
-      Scierror(999, _("%s: Bounds on y axis must be strictly positive to use logarithmic mode.\n"),fname);
-      return -1 ;
-    }
+    GetRect( fname, 6 + iskip, opts, &rect );
 
-    break;
-  case '2' : case '4' : case '6' : case '8': case '9':
-    /* computed from the x/y min/max */
-    if ( (int)strlen(logFlags) < 1)
-    {
-      dataflag='g' ;
-    }
-    else
-    {
-      dataflag=logFlags[0];
-    }
+    GetNax( 7 + iskip, opts, &nax, &flagNax ) ;
 
-    switch ( dataflag )
+    if (iskip == 0)
     {
-    case 'e' :
-      xd[0] = 1.0; xd[1] = (double)m1;
-      x1 = xd;size_x = (m1 != 0) ? 2 : 0 ;
-      break;
-    case 'o' :
-      x1 = stk(l1);size_x = m1;
-      break;
-    case 'g' :
-    default  :
-      x1 = stk(l1);size_x = (n1*m1) ;
-      break;
+        GetLogflags( fname, 8, opts, &logFlags ) ;
     }
 
-    if (size_x != 0)
+    if ( isDefStrf( strf ) )
     {
-      if(logFlags[1] == 'l' && sciFindStPosMin(stk(l1),size_x) <= 0.0 )
-      {
-        Scierror(999, _("%s: At least one x data must be strictly positive to compute the bounds and use logarithmic mode.\n"),fname);
-        return -1 ;
-      }
+        strcpy(strfl, DEFSTRFN);
+
+        strf = strfl;
+        if ( !isDefRect( rect ) )
+        {
+            strfl[1] = '7';
+        }
+        if ( !isDefLegend( legend ) )
+        {
+            strfl[0] = '1';
+        }
+
+        GetOptionalIntArg(fname, 9, "frameflag", &frame, 1, opts);
+        if ( frame != &frame_def )
+        {
+            strfl[1] = (char)(*frame + 48);
+        }
+
+        GetOptionalIntArg(fname, 9, "axesflag", &axes, 1, opts);
+
+        if (axes != &axes_def)
+        {
+            strfl[2] = (char)(*axes + 48);
+        }
     }
 
-    size_y = (n1*m1) ;
+    /* Make a test on log. mode : available or not depending on the bounds set by Rect arg. or xmin/xmax :
+    Rect case :
+    - if the min bound is strictly posivite, we can use log. mode
+    - if not, send error message
+    x/y min/max case:
+    - we find the first strictly positive min bound in Plo2dn.c ?? */
 
-    if (size_y != 0)
+    switch (strf[1])
     {
-      if( logFlags[2] == 'l' && sciFindStPosMin(stk(l2),size_y) <= 0.0 )
-      {
-        Scierror(999, _("%s: At least one y data must be strictly positive to compute the bounds and use logarithmic mode\n"),fname);
-        return -1 ;
-      }
+        case '0':
+            /* no computation, the plot use the previous (or default) scale */
+            break;
+        case '1' :
+        case '3' :
+        case '5' :
+        case '7':
+            /* based on Rect arg */
+            if ( rect[0] > rect[2] || rect[1] > rect[3])
+            {
+                Scierror(999, _("%s: Impossible status min > max in x or y rect data.\n"), fname);
+                return -1;
+            }
+
+            if ( rect[0] <= 0. && logFlags[1] == 'l') /* xmin */
+            {
+                Scierror(999, _("%s: Bounds on x axis must be strictly positive to use logarithmic mode.\n"), fname);
+                return -1 ;
+            }
+
+            if ( rect[1] <= 0. && logFlags[2] == 'l') /* ymin */
+            {
+                Scierror(999, _("%s: Bounds on y axis must be strictly positive to use logarithmic mode.\n"), fname);
+                return -1 ;
+            }
+
+            break;
+        case '2' :
+        case '4' :
+        case '6' :
+        case '8':
+        case '9':
+            /* computed from the x/y min/max */
+            if ( (int)strlen(logFlags) < 1)
+            {
+                dataflag = 'g' ;
+            }
+            else
+            {
+                dataflag = logFlags[0];
+            }
+
+            switch ( dataflag )
+            {
+                case 'e' :
+                    xd[0] = 1.0;
+                    xd[1] = (double)m1;
+                    size_x = (m1 != 0) ? 2 : 0 ;
+                    break;
+                case 'o' :
+                    size_x = m1;
+                    break;
+                case 'g' :
+                default  :
+                    size_x = (n1 * m1) ;
+                    break;
+            }
+
+            if (size_x != 0)
+            {
+                if (logFlags[1] == 'l' && sciFindStPosMin(stk(l1), size_x) <= 0.0 )
+                {
+                    Scierror(999, _("%s: At least one x data must be strictly positive to compute the bounds and use logarithmic mode.\n"), fname);
+                    return -1 ;
+                }
+            }
+
+            size_y = (n1 * m1) ;
+
+            if (size_y != 0)
+            {
+                if ( logFlags[2] == 'l' && sciFindStPosMin(stk(l2), size_y) <= 0.0 )
+                {
+                    Scierror(999, _("%s: At least one y data must be strictly positive to compute the bounds and use logarithmic mode\n"), fname);
+                    return -1 ;
+                }
+            }
+
+            break;
     }
 
-    break;
-  }
-
-  // open a figure if none already exists
-  getOrCreateDefaultSubwin();
-  Objplot2d (1,logFlags,stk(l1), stk(l2), &n1, &m1, style, strf,legend, rect,nax,flagNax);
+    // open a figure if none already exists
+    getOrCreateDefaultSubwin();
+    Objplot2d (1, logFlags, stk(l1), stk(l2), &n1, &m1, style, strf, legend, rect, nax, flagNax);
 
-  LhsVar(1) = 0;
-  PutLhsVar();
-  return 0;
+    LhsVar(1) = 0;
+    PutLhsVar();
+    return 0;
 }
 /*------------------------------------------------------------------------*/
index 88a5a75..c509960 100644 (file)
 #include "getHandleProperty.h"
 #include "CurrentFigure.h"
 /*--------------------------------------------------------------------------*/
-int xgetg( char * str, char * str1, int * len,int  lx0,int lx1);
+int xgetg( char * str, char * str1, int * len, int  lx0, int lx1);
 /*--------------------------------------------------------------------------*/
-int sci_xget(char *fname,unsigned long fname_len)
+int sci_xget(char *fname, unsigned long fname_len)
 {
-    int flagx = 0, x2 = 0, m1 = 0, n1 = 0, l1 = 0, m2 = 0, n2 = 0, l2 = 0, l3 = 0, i = 0;
+    int x2 = 0, m1 = 0, n1 = 0, l1 = 0, m2 = 0, n2 = 0, l2 = 0, l3 = 0, i = 0;
     int one = 1;
 
     BOOL keyFound = FALSE;
@@ -53,15 +53,15 @@ int sci_xget(char *fname,unsigned long fname_len)
         return 0;
     }
 
-    CheckRhs(1,2);
-    CheckLhs(0,1);
+    CheckRhs(1, 2);
+    CheckLhs(0, 1);
 
-    GetRhsVar(1,STRING_DATATYPE,&m1,&n1,&l1);
+    GetRhsVar(1, STRING_DATATYPE, &m1, &n1, &l1);
 
     /* check if key is valid */
-    for (i=0; i < NUMSETFONC ; i++)
+    for (i = 0; i < NUMSETFONC ; i++)
     {
-        if ( strcmp(cstk(l1),KeyTab_[i]) == 0 )
+        if ( strcmp(cstk(l1), KeyTab_[i]) == 0 )
         {
             keyFound = TRUE ;
             break ;
@@ -74,25 +74,24 @@ int sci_xget(char *fname,unsigned long fname_len)
         return -1;
     }
 
-    if (Rhs == 2) {
-        GetRhsVar(2,MATRIX_OF_DOUBLE_DATATYPE,&m2,&n2,&l2);
-        CheckScalar(2,m2,n2);
-        flagx = (int)  *stk(l2); }
-    else
-        flagx = 0;
+    if (Rhs == 2)
+    {
+        GetRhsVar(2, MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);
+        CheckScalar(2, m2, n2);
+    }
 
-    if ( strcmp(cstk(l1),"fpf") == 0 || strcmp(cstk(l1),"auto clear") == 0)
+    if ( strcmp(cstk(l1), "fpf") == 0 || strcmp(cstk(l1), "auto clear") == 0)
     {
         int bufl;
         /*     special case for global variables set */
-        xgetg( cstk(l1),C2F(cha1).buf,&bufl,m1,bsiz);
-        CreateVar(Rhs+1,STRING_DATATYPE,&bufl,&one,&l3);
-        strncpy(cstk(l3),C2F(cha1).buf,bufl);
-        LhsVar(1)=Rhs+1;
+        xgetg( cstk(l1), C2F(cha1).buf, &bufl, m1, bsiz);
+        CreateVar(Rhs + 1, STRING_DATATYPE, &bufl, &one, &l3);
+        strncpy(cstk(l3), C2F(cha1).buf, bufl);
+        LhsVar(1) = Rhs + 1;
         PutLhsVar();
         return 0;
     }
-    else if ( strcmp(cstk(l1),"colormap") == 0)
+    else if ( strcmp(cstk(l1), "colormap") == 0)
     {
         char *pobjUID = NULL;
         // Force figure creation if none exists.
@@ -106,7 +105,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if ( strcmp(cstk(l1),"mark") == 0)
+    else if ( strcmp(cstk(l1), "mark") == 0)
     {
         char *pobjUID = (char*)getOrCreateDefaultSubwin();
         int iMarkStyle = 0;
@@ -126,7 +125,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if ( strcmp(cstk(l1),"mark size") == 0)
+    else if ( strcmp(cstk(l1), "mark size") == 0)
     {
         char *pobjUID = (char*)getOrCreateDefaultSubwin();
         get_mark_size_property(pvApiCtx, pobjUID);
@@ -136,7 +135,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if ( strcmp(cstk(l1),"line style") == 0)
+    else if ( strcmp(cstk(l1), "line style") == 0)
     {
         get_line_style_property(pvApiCtx, (char*)getOrCreateDefaultSubwin());
 
@@ -144,7 +143,7 @@ int sci_xget(char *fname,unsigned long fname_len)
         PutLhsVar();
         return 0;
     }
-    else if(strcmp(cstk(l1),"clipping") == 0)
+    else if (strcmp(cstk(l1), "clipping") == 0)
     {
         double *clipBox = NULL;
         char* pobjUID = (char*)getOrCreateDefaultSubwin();
@@ -156,7 +155,7 @@ int sci_xget(char *fname,unsigned long fname_len)
         PutLhsVar();
         return 0;
     }
-    else if(strcmp(cstk(l1),"font")==0)
+    else if (strcmp(cstk(l1), "font") == 0)
     {
         char *pobjUID = (char*)getOrCreateDefaultSubwin();
         double dblFontSize = 0;
@@ -177,7 +176,7 @@ int sci_xget(char *fname,unsigned long fname_len)
         PutLhsVar();
         return 0;
     }
-    else if(strcmp(cstk(l1),"font size")==0)
+    else if (strcmp(cstk(l1), "font size") == 0)
     {
         double dblFontSize = 0;
         double* pdblFontSize = &dblFontSize;
@@ -189,7 +188,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if(strcmp(cstk(l1),"dashes")==0)
+    else if (strcmp(cstk(l1), "dashes") == 0)
     {
         int iLineStyle = 0;
         int* piLineStyle = &iLineStyle;
@@ -202,7 +201,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if(strcmp(cstk(l1),"hidden3d")==0)
+    else if (strcmp(cstk(l1), "hidden3d") == 0)
     {
         get_hidden_color_property(pvApiCtx, (char*)getOrCreateDefaultSubwin());
 
@@ -211,7 +210,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if(strcmp(cstk(l1),"window")== 0 || strcmp(cstk(l1),"figure") == 0)
+    else if (strcmp(cstk(l1), "window") == 0 || strcmp(cstk(l1), "figure") == 0)
     {
         int iFigureId = 0;
         int* piFigureId = &iFigureId;
@@ -223,7 +222,7 @@ int sci_xget(char *fname,unsigned long fname_len)
         PutLhsVar();
         return 0;
     }
-    else if(strcmp(cstk(l1),"thickness") == 0)
+    else if (strcmp(cstk(l1), "thickness") == 0)
     {
         get_thickness_property(pvApiCtx, (char*)getOrCreateDefaultSubwin());
 
@@ -232,7 +231,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if(strcmp(cstk(l1),"wdim") == 0 || strcmp(cstk(l1),"wpdim") == 0)
+    else if (strcmp(cstk(l1), "wdim") == 0 || strcmp(cstk(l1), "wpdim") == 0)
     {
         int *piFigureSize = NULL;
         double pdblFigureSize[2];
@@ -248,7 +247,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if(strcmp(cstk(l1),"wpos") == 0)
+    else if (strcmp(cstk(l1), "wpos") == 0)
     {
         int *piFigurePosition = NULL;
         double pdblFigurePosition[2];
@@ -264,7 +263,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if(strcmp(cstk(l1),"viewport") == 0)
+    else if (strcmp(cstk(l1), "viewport") == 0)
     {
         int* viewport = NULL;
         double pdblViewport[2];
@@ -280,7 +279,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if(strcmp(cstk(l1),"background") == 0)
+    else if (strcmp(cstk(l1), "background") == 0)
     {
         get_background_property(pvApiCtx, (char*)getOrCreateDefaultSubwin());
 
@@ -289,9 +288,9 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if(   strcmp(cstk(l1),"color") == 0
-               || strcmp(cstk(l1),"foreground") == 0
-               || strcmp(cstk(l1),"pattern") == 0)
+    else if (   strcmp(cstk(l1), "color") == 0
+                || strcmp(cstk(l1), "foreground") == 0
+                || strcmp(cstk(l1), "pattern") == 0)
     {
         get_foreground_property(pvApiCtx, (char*)getOrCreateDefaultSubwin());
 
@@ -300,7 +299,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if(strcmp(cstk(l1),"lastpattern") == 0)
+    else if (strcmp(cstk(l1), "lastpattern") == 0)
     {
         int iNumColors = 0;
         int* piNumColors = &iNumColors;
@@ -315,7 +314,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if(strcmp(cstk(l1),"line mode") == 0)
+    else if (strcmp(cstk(l1), "line mode") == 0)
     {
         int iLineMode = 0;
         int* lineMode = &iLineMode;
@@ -329,7 +328,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if(strcmp(cstk(l1),"pixmap") == 0)
+    else if (strcmp(cstk(l1), "pixmap") == 0)
     {
         int iPixmap = 0;
         int *piPixmap = &iPixmap;
@@ -343,7 +342,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if(strcmp(cstk(l1),"white") == 0)
+    else if (strcmp(cstk(l1), "white") == 0)
     {
         int iNumColors = 0;
         int* piNumColors = &iNumColors;
@@ -359,7 +358,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if(strcmp(cstk(l1),"wresize") == 0)
+    else if (strcmp(cstk(l1), "wresize") == 0)
     {
         // autoresize property
         int iAutoResize = 0;
@@ -375,7 +374,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if( strcmp(cstk(l1),"clipgrf") == 0 )
+    else if ( strcmp(cstk(l1), "clipgrf") == 0 )
     {
         /* clip_state : 0 = off, 1 = on */
         int iClipState = 0;
@@ -389,7 +388,7 @@ int sci_xget(char *fname,unsigned long fname_len)
 
         return 0;
     }
-    else if( strcmp(cstk(l1),"clipoff") == 0 )
+    else if ( strcmp(cstk(l1), "clipoff") == 0 )
     {
         int iClipState = 0;
         int* piClipState = &iClipState;
@@ -418,14 +417,14 @@ int sci_xget(char *fname,unsigned long fname_len)
     return 0;
 }
 /*--------------------------------------------------------------------------*/
-int xgetg( char * str, char * str1, int * len,int  lx0,int lx1)
+int xgetg( char * str, char * str1, int * len, int  lx0, int lx1)
 {
-    if ( strcmp(str,"fpf") == 0)
+    if ( strcmp(str, "fpf") == 0)
     {
-        strncpy(str1,getFPF(),32);
-        *len= (int) strlen(str1);
+        strncpy(str1, getFPF(), 32);
+        *len = (int) strlen(str1);
     }
-    else if ( strcmp(str,"auto clear")==0)
+    else if ( strcmp(str, "auto clear") == 0)
     {
         int iAutoClear = 0;
         int* piAutoClear = &iAutoClear;
@@ -433,13 +432,13 @@ int xgetg( char * str, char * str1, int * len,int  lx0,int lx1)
         getGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_AUTO_CLEAR__, jni_bool, (void **)&piAutoClear);
         if (iAutoClear == 1)
         {
-            strncpy(str1,"on",2);
-            *len=2;
+            strncpy(str1, "on", 2);
+            *len = 2;
         }
         else
         {
-            strncpy(str1,"off",3);
-            *len=3;
+            strncpy(str1, "off", 3);
+            *len = 3;
         }
     }
     return 0;
index db09655..4284f96 100644 (file)
@@ -36,7 +36,7 @@
 /*--------------------------------------------------------------------------*/
 int sci_xrects( char *fname, unsigned long fname_len )
 {
-    int m1 = 0,n1 = 0,l1 = 0,m2 = 0,n2 = 0,l2 = 0;
+    int m1 = 0, n1 = 0, l1 = 0, m2 = 0, n2 = 0, l2 = 0;
     long  hdl = 0;
     int i = 0;
     char* psubwinUID = NULL;
@@ -45,32 +45,35 @@ int sci_xrects( char *fname, unsigned long fname_len )
     int *piForeground = &foreground;
     char *pstCompoundUID = NULL;
 
-    int iVisible = (int) FALSE;
+    CheckRhs(1, 2);
 
-    CheckRhs(1,2);
+    GetRhsVar(1, MATRIX_OF_DOUBLE_DATATYPE, &m1, &n1, &l1);
 
-    GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE,&m1,&n1,&l1);
-
-    if (m1 != 4) {
-        Scierror(999,_("%s: Wrong size for input argument #%d: %s expected.\n"),fname, 1, "(4,n)");
+    if (m1 != 4)
+    {
+        Scierror(999, _("%s: Wrong size for input argument #%d: %s expected.\n"), fname, 1, "(4,n)");
         return 0;
     }
 
 
     if (Rhs == 2)
     {
-        GetRhsVar(2,MATRIX_OF_INTEGER_DATATYPE,&m2,&n2,&l2);
-        CheckVector(2,m2,n2);
-        if (m2 * n2 != n1) {
-            Scierror(999,_("%s: Incompatible length for input arguments #%d and #%d.\n"),fname, 1, 2);
+        GetRhsVar(2, MATRIX_OF_INTEGER_DATATYPE, &m2, &n2, &l2);
+        CheckVector(2, m2, n2);
+        if (m2 * n2 != n1)
+        {
+            Scierror(999, _("%s: Incompatible length for input arguments #%d and #%d.\n"), fname, 1, 2);
             return 0;
         }
     }
     else
     {
-        m2=1,n2=n1;
-        CreateVar(2,MATRIX_OF_INTEGER_DATATYPE,&m2,&n2,&l2);
-        for (i = 0; i < n2; ++i)  { *istk(l2 + i) = 0; }
+        m2 = 1, n2 = n1;
+        CreateVar(2, MATRIX_OF_INTEGER_DATATYPE, &m2, &n2, &l2);
+        for (i = 0; i < n2; ++i)
+        {
+            *istk(l2 + i) = 0;
+        }
     }
 
     psubwinUID = (char*)getOrCreateDefaultSubwin();
@@ -78,10 +81,7 @@ int sci_xrects( char *fname, unsigned long fname_len )
     // Create compound.
     pstCompoundUID = createGraphicObject(__GO_COMPOUND__);
     /* Sets the parent-child relationship for the Compound */
-    setGraphicObjectRelationship(psubwinUID,pstCompoundUID);
-
-    /** Hide Compound */
-    //setGraphicObjectProperty(pstCompoundUID, __GO_VISIBLE__, &iVisible, jni_bool, 1);
+    setGraphicObjectRelationship(psubwinUID, pstCompoundUID);
 
     /** Get Subwin line color */
     getGraphicObjectProperty(psubwinUID, __GO_LINE_COLOR__, jni_int, (void**)&piForeground);
@@ -89,42 +89,38 @@ int sci_xrects( char *fname, unsigned long fname_len )
     for (i = 0; i < n1; ++i)
     {
         /*       j = (i==0) ? 0 : 1; */
-        if (*istk(l2+i) == 0)
+        if (*istk(l2 + i) == 0)
         {
             /** fil(i) = 0 rectangle i is drawn using the current line style (or color).**/
             /* color setting is done now */
 
-            Objrect(stk(l1+(4*i)),stk(l1+(4*i)+1),stk(l1+(4*i)+2),stk(l1+(4*i)+3),
-                     &foreground,NULL,FALSE,TRUE,&hdl);
+            Objrect(stk(l1 + (4 * i)), stk(l1 + (4 * i) + 1), stk(l1 + (4 * i) + 2), stk(l1 + (4 * i) + 3),
+                    &foreground, NULL, FALSE, TRUE, &hdl);
         }
         else
         {
-            if (*istk(l2+i) < 0)
+            if (*istk(l2 + i) < 0)
             {
                 /** fil(i) < 0 rectangle i is drawn using the line style (or color) **/
-                int tmp = - (*istk(l2+i));
-                Objrect(stk(l1+(4*i)),stk(l1+(4*i)+1),stk(l1+(4*i)+2),stk(l1+(4*i)+3),
-                         &tmp,NULL,FALSE,TRUE,&hdl);
+                int tmp = - (*istk(l2 + i));
+                Objrect(stk(l1 + (4 * i)), stk(l1 + (4 * i) + 1), stk(l1 + (4 * i) + 2), stk(l1 + (4 * i) + 3),
+                        &tmp, NULL, FALSE, TRUE, &hdl);
             }
             else
             {
                 /** fil(i) > 0   rectangle i is filled using the pattern (or color) **/
-                Objrect(stk(l1+(4*i)),stk(l1+(4*i)+1),stk(l1+(4*i)+2),stk(l1+(4*i)+3),
-                         NULL,istk(l2+i),TRUE,FALSE,&hdl);
+                Objrect(stk(l1 + (4 * i)), stk(l1 + (4 * i) + 1), stk(l1 + (4 * i) + 2), stk(l1 + (4 * i) + 3),
+                        NULL, istk(l2 + i), TRUE, FALSE, &hdl);
             }
         }
         // Add newly created object to Compound
         setGraphicObjectRelationship(pstCompoundUID, getObjectFromHandle(hdl));
     }
 
-    /** Show Compound */
-    iVisible = (int) TRUE;
-    //setGraphicObjectProperty(pstCompoundUID, __GO_VISIBLE__, &iVisible, jni_bool, 1);
-
     /** make Compound current object **/
     setCurrentObject(pstCompoundUID);
 
-    LhsVar(1)=0;
+    LhsVar(1) = 0;
     PutLhsVar();
     return 0;
 }
index 00f08d7..008c165 100644 (file)
@@ -43,7 +43,7 @@ int sci_qp_solve(char *fname, unsigned long fname_len)
     static int b = 0, mbis = 0;
     static int me = 0, pipo = 0;
     static int x = 0, iter = 0, iact = 0, nact = 0, crval = 0, ierr = 0;
-    int next = 0, r = 0;
+    int r = 0;
     static int lw = 0,  k = 0;
     static SciSparse Sp;
     static int issparse = 0;
@@ -57,7 +57,7 @@ int sci_qp_solve(char *fname, unsigned long fname_len)
 
     /* RhsVar: qp_solve(Q,p,C,b,me) */
     /*                1,2,3,4,5   */
-    next = Rhs + 1;
+
     /*   Variable 1 (Q)   */
     GetRhsVar(1, MATRIX_OF_DOUBLE_DATATYPE, &n, &nbis, &Q);
     CheckSquare(1, n, nbis);
@@ -97,11 +97,10 @@ int sci_qp_solve(char *fname, unsigned long fname_len)
     }
 
     /* Lhs variables: x, iact, iter, crval */
-    next = Rhs;
-    CreateVar(next + 1, MATRIX_OF_DOUBLE_DATATYPE, &n, &un, &x);
-    CreateVar(next + 2, MATRIX_OF_INTEGER_DATATYPE, &m, &un, &iact);
-    CreateVar(next + 3, MATRIX_OF_INTEGER_DATATYPE, &deux, &un, &iter);
-    CreateVar(next + 4, MATRIX_OF_DOUBLE_DATATYPE, &un, &un, &crval);
+    CreateVar(Rhs + 1, MATRIX_OF_DOUBLE_DATATYPE, &n, &un, &x);
+    CreateVar(Rhs + 2, MATRIX_OF_INTEGER_DATATYPE, &m, &un, &iact);
+    CreateVar(Rhs + 3, MATRIX_OF_INTEGER_DATATYPE, &deux, &un, &iter);
+    CreateVar(Rhs + 4, MATRIX_OF_DOUBLE_DATATYPE, &un, &un, &crval);
 
     r = Min(n, m);
     lw =  2 * n + r * (r + 5) / 2 + 2 * m + 1;
@@ -162,7 +161,7 @@ int sci_qp_solve(char *fname, unsigned long fname_len)
 
     if (ierr == 0)
     {
-        for (k = 0; k < Lhs; k++) LhsVar(1 + k) = next + 1 + k;
+        for (k = 0; k < Lhs; k++) LhsVar(1 + k) = Rhs + 1 + k;
         PutLhsVar();
     }
     else if (ierr == 1)