0220f5512ff90b1b2da04aa7d4a7d2f0b9532918
[scilab.git] / scilab / modules / api_scilab / tests / unit_tests / stringExample.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2009-2010 - DIGITEO
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 #include "api_scilab.h"
17 #include "Scierror.h"
18 #include "localization.h"
19 #include "sciprint.h"
20
21 int stringExample(char *fname, void* pvApiCtx)
22 {
23     SciErr sciErr;
24     int* piAddr = NULL;
25     int iType   = 0;
26     int iRet    = 0;
27
28     CheckInputArgument(pvApiCtx, 1, 1);
29     CheckOutputArgument(pvApiCtx, 0, 1);
30
31     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
32     if (sciErr.iErr)
33     {
34         printError(&sciErr, 0);
35         return 0;
36     }
37
38     if (isStringType(pvApiCtx, piAddr))
39     {
40         if (isScalar(pvApiCtx, piAddr))
41         {
42             char* pstData = NULL;
43
44             iRet = getAllocatedSingleString(pvApiCtx, piAddr, &pstData);
45             if (iRet)
46             {
47                 freeAllocatedSingleString(pstData);
48                 return iRet;
49             }
50
51             iRet = createSingleString(pvApiCtx, nbInputArgument(pvApiCtx) + 1, pstData);
52             if (iRet)
53             {
54                 freeAllocatedSingleString(pstData);
55                 return iRet;
56             }
57
58             freeAllocatedSingleString(pstData);
59         }
60         else
61         {
62             int iRows       = 0;
63             int iCols       = 0;
64             char** pstData  = NULL;
65
66             iRet = getAllocatedMatrixOfString(pvApiCtx, piAddr, &iRows, &iCols, &pstData);
67             if (iRet)
68             {
69                 freeAllocatedMatrixOfString(iRows, iCols, pstData);
70                 return iRet;
71             }
72
73             sciErr = createMatrixOfString(pvApiCtx, nbInputArgument(pvApiCtx) + 1, iRows, iCols, pstData);
74             if (sciErr.iErr)
75             {
76                 freeAllocatedMatrixOfString(iRows, iCols, pstData);
77                 printError(&sciErr, 0);
78                 return sciErr.iErr;
79             }
80
81             freeAllocatedMatrixOfString(iRows, iCols, pstData);
82         }
83
84         AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
85     }
86     else
87     {
88         AssignOutputVariable(pvApiCtx, 1) = 0;
89     }
90     return 0;
91 }