GUI module ported to api_scilab. test_run("gui")
[scilab.git] / scilab / modules / gui / sci_gateway / c / sci_x_choose_modeless.c
index d63bd34..ca4e261 100644 (file)
@@ -11,7 +11,7 @@
  */
 
 #include "gw_gui.h"
-#include "stack-c.h"
+#include "api_scilab.h"
 #include "localization.h"
 #include "CallMessageBox.h"
 #include "Scierror.h"
 /*--------------------------------------------------------------------------*/
 int sci_x_choose_modeless(char *fname, unsigned long fname_len)
 {
+    SciErr sciErr;
+
+    int* piAddritemsAdr = NULL;
+    int* piAddrmessageAdr = NULL;
+    int* piAddrbuttonLabelAdr = NULL;
+    double* userValueAdr = NULL;
+
     int nbRow = 0, nbCol = 0;
     int nbRowItems = 0, nbColItems = 0;
 
@@ -30,15 +37,26 @@ int sci_x_choose_modeless(char *fname, unsigned long fname_len)
 
     char **messageAdr = NULL;
 
-    int userValueAdr = 0;
     int userValue = 0;
 
-    CheckRhs(2, 3);
-    CheckLhs(0, 1);
+    CheckInputArgument(pvApiCtx, 2, 3);
+    CheckOutputArgument(pvApiCtx, 0, 1);
 
-    if (VarType(1) == sci_strings)
+    if ((checkInputArgumentType(pvApiCtx, 1, sci_strings)))
     {
-        GetRhsVar(1, MATRIX_OF_STRING_DATATYPE, &nbRowItems, &nbColItems, &itemsAdr);
+        sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddritemsAdr);
+        if (sciErr.iErr)
+        {
+            printError(&sciErr, 0);
+            return 1;
+        }
+
+        // Retrieve a matrix of string at position 1.
+        if (getAllocatedMatrixOfString(pvApiCtx, piAddritemsAdr, &nbRowItems, &nbColItems, &itemsAdr))
+        {
+            Scierror(202, _("%s: Wrong type for argument #%d: String matrix expected.\n"), fname, 1);
+            return 1;
+        }
     }
     else
     {
@@ -46,13 +64,27 @@ int sci_x_choose_modeless(char *fname, unsigned long fname_len)
         return FALSE;
     }
 
-    if (VarType(2) == sci_strings)
+    if ((checkInputArgumentType(pvApiCtx, 2, sci_strings)))
     {
-        GetRhsVar(2, MATRIX_OF_STRING_DATATYPE, &nbRow, &nbCol, &messageAdr);
+        sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddrmessageAdr);
+        if (sciErr.iErr)
+        {
+            printError(&sciErr, 0);
+            return 1;
+        }
+
+        // Retrieve a matrix of string at position 2.
+        if (getAllocatedMatrixOfString(pvApiCtx, piAddrmessageAdr, &nbRow, &nbCol, &messageAdr))
+        {
+            freeAllocatedMatrixOfString(nbRowItems, nbColItems, itemsAdr);
+            Scierror(202, _("%s: Wrong type for argument #%d: String matrix expected.\n"), fname, 2);
+            return 1;
+        }
+
     }
     else
     {
-        freeArrayOfString(itemsAdr, nbColItems * nbRowItems);
+        freeAllocatedMatrixOfString(nbRowItems, nbColItems, itemsAdr);
         Scierror(999, _("%s: Wrong type for input argument #%d: Vector of strings expected.\n"), fname, 2);
         return FALSE;
     }
@@ -69,17 +101,30 @@ int sci_x_choose_modeless(char *fname, unsigned long fname_len)
     /* Modality */
     setMessageBoxModal(messageBoxID, FALSE);
 
-    freeArrayOfString(itemsAdr, nbColItems * nbRowItems);
-    freeArrayOfString(messageAdr, nbCol * nbRow);
+    freeAllocatedMatrixOfString(nbRowItems, nbColItems, itemsAdr);
+    freeAllocatedMatrixOfString(nbRow, nbCol, messageAdr);
 
-    if (Rhs == 3)
+    if (nbInputArgument(pvApiCtx) == 3)
     {
         if (VarType(3) ==  sci_strings)
         {
-            GetRhsVar(3, MATRIX_OF_STRING_DATATYPE, &nbRow, &nbCol, &buttonLabelAdr);
-            if (nbRow * nbCol != 1)
+            sciErr = getVarAddressFromPosition(pvApiCtx, 3, &piAddrbuttonLabelAdr);
+            if (sciErr.iErr)
+            {
+                printError(&sciErr, 0);
+                return 1;
+            }
+
+            // Retrieve a matrix of string at position 3.
+            if (getAllocatedMatrixOfString(pvApiCtx, piAddrbuttonLabelAdr, &nbRow, &nbCol, &buttonLabelAdr))
             {
-                freeArrayOfString(buttonLabelAdr, nbRow * nbCol);
+                Scierror(202, _("%s: Wrong type for argument #%d: String matrix expected.\n"), fname, 3);
+                return 1;
+            }
+
+            if (nbRow*nbCol != 1)
+            {
+                freeAllocatedMatrixOfString(nbRow, nbCol, buttonLabelAdr);
                 Scierror(999, _("%s: Wrong size for input argument #%d: A string expected.\n"), fname, 3);
                 return FALSE;
             }
@@ -91,7 +136,7 @@ int sci_x_choose_modeless(char *fname, unsigned long fname_len)
         }
 
         setMessageBoxButtonsLabels(messageBoxID, buttonLabelAdr, nbCol * nbRow);
-        freeArrayOfString(buttonLabelAdr, nbRow * nbCol);
+        freeAllocatedMatrixOfString(nbRow, nbCol, buttonLabelAdr);
     }
 
     /* Display it and wait for a user input */
@@ -102,11 +147,19 @@ int sci_x_choose_modeless(char *fname, unsigned long fname_len)
 
     nbRow = 1;
     nbCol = 1;
-    CreateVar(Rhs + 1, MATRIX_OF_DOUBLE_DATATYPE, &nbRow, &nbCol, &userValueAdr);
-    *stk(userValueAdr) = userValue;
 
-    LhsVar(1) = Rhs + 1;
-    PutLhsVar();
+    sciErr = allocMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, nbRow, nbCol, &userValueAdr);
+    if (sciErr.iErr)
+    {
+        printError(&sciErr, 0);
+        Scierror(999, _("%s: Memory allocation error.\n"), fname);
+        return 1;
+    }
+
+    *userValueAdr = userValue;
+
+    AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
+    ReturnArguments(pvApiCtx);
     return TRUE;
 }
 /*--------------------------------------------------------------------------*/