License Header change: Removed the LICENSE_END before beta
[scilab.git] / scilab / modules / api_scilab / tests / unit_tests / pointer_reading_api.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 #include <stdlib.h>
16 #include "api_scilab.h"
17 #include "Scierror.h"
18 #include "localization.h"
19 #include "sciprint.h"
20 #include "sci_malloc.h"
21
22 int read_pointer(char *fname, void* pvApiCtx)
23 {
24     SciErr sciErr;
25
26     CheckInputArgument(pvApiCtx, 0, 1);
27     CheckOutputArgument(pvApiCtx, 1, 1);
28
29     if (nbInputArgument(pvApiCtx) == 0)
30     {
31         //create mode
32         double* pdblData    = (double*)MALLOC(sizeof(double) * 2 * 2);
33         pdblData[0]                     = 1;
34         pdblData[1]                     = 3;
35         pdblData[2]                     = 2;
36         pdblData[3]                     = 4;
37         sciErr = createPointer(pvApiCtx, nbInputArgument(pvApiCtx) + 1, (void*)pdblData);
38     }
39     else if (nbInputArgument(pvApiCtx) == 1)
40     {
41         //read mode
42         int iType                       = 0;
43         int* piAddr                     = NULL;
44         void* pvPtr                     = NULL;
45         double* pdblData        = NULL;
46         sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
47         if (sciErr.iErr)
48         {
49             printError(&sciErr, 0);
50             return 0;
51         }
52         sciErr = getPointer(pvApiCtx, piAddr, &pvPtr);
53         if (sciErr.iErr)
54         {
55             printError(&sciErr, 0);
56             return 0;
57         }
58         pdblData = (double*)pvPtr;
59         sciErr = createMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, 2, 2, pdblData);
60         FREE(pvPtr);
61     }
62     else
63     {
64         return 0;
65     }
66     if (sciErr.iErr)
67     {
68         printError(&sciErr, 0);
69         return 0;
70     }
71     AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
72     return 0;
73 }