* Port to matio 1.5.0 * Code cleaning * Prepare code for Scilab 6 (YaSp branch merge)
[scilab.git] / scilab / modules / matio / src / c / GetMatlabVariable.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2008 - INRIA - Vincent COUVERT
4  * Copyright (C) 2010 - DIGITEO - Yann COLLETTE
5  * Copyright (C) 2011 - DIGITEO - Vincent COUVERT
6  *
7  * This file must be used under the terms of the CeCILL.
8  * This source file is licensed as described in the file COPYING, which
9  * you should have received as part of this distribution.  The terms
10  * are also available at
11  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
12  *
13  */
14
15 #include "GetMatlabVariable.h"
16 #include "sci_types.h"
17 #include "api_scilab.h"
18
19 matvar_t *GetMatlabVariable(void *pvApiCtx, int iVar, const char *name, int matfile_version, int * parent, int item_position)
20 {
21     int * var_addr = NULL;
22     int var_type;
23     SciErr sciErr;
24     matvar_t * tmp_res = NULL;
25
26     if (parent == NULL)
27     {
28         sciErr = getVarAddressFromPosition(pvApiCtx, iVar, &var_addr);
29         if (sciErr.iErr)
30         {
31             printError(&sciErr, 0);
32             return NULL;
33         }
34         sciErr = getVarType(pvApiCtx, var_addr, &var_type);
35         if (sciErr.iErr)
36         {
37             printError(&sciErr, 0);
38             return NULL;
39         }
40     }
41     else
42     {
43         sciErr = getListItemAddress(pvApiCtx, parent, item_position, &var_addr);
44         if (sciErr.iErr)
45         {
46             printError(&sciErr, 0);
47             return NULL;
48         }
49         sciErr = getVarType(pvApiCtx, var_addr, &var_type);
50         if (sciErr.iErr)
51         {
52             printError(&sciErr, 0);
53             return NULL;
54         }
55     }
56
57     switch (var_type)
58     {
59         case sci_matrix:
60             tmp_res = GetDoubleVariable(pvApiCtx, iVar, name, matfile_version, parent, item_position);
61             break;
62         case sci_strings:
63             tmp_res = GetCharVariable(pvApiCtx, iVar, name, parent, item_position);
64             break;
65         case sci_ints:
66             tmp_res = GetIntegerVariable(pvApiCtx, iVar, name, parent, item_position);
67             break;
68         case sci_mlist:
69             /* Only cells structs and hypermatrices are managed */
70             if (item_position > 0)
71             {
72                 tmp_res = GetMlistVariable(pvApiCtx, iVar, name, matfile_version, parent, item_position);
73             }
74             else
75             {
76                 tmp_res = GetMlistVariable(pvApiCtx, iVar, name, matfile_version, parent, -1);
77             }
78             break;
79         case sci_sparse:
80             if (item_position > 0)
81             {
82                 tmp_res = GetSparseVariable(pvApiCtx, iVar, name, parent, item_position);
83             }
84             else
85             {
86                 tmp_res = GetSparseVariable(pvApiCtx, iVar, name, parent, -1);
87             }
88             break;
89         default:
90             sciprint("Do not known how to get variable of type %d\n", var_type);
91             tmp_res = NULL;
92     }
93
94     return tmp_res;
95 }