a76928850ebfd9f1135df71a6788474c06d86293
[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(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(iVar, name, matfile_version, parent, item_position);
61         break;
62     case sci_strings:
63         tmp_res = GetCharVariable(iVar, name, parent, item_position);
64         break;
65     case sci_ints:
66         tmp_res = GetIntegerVariable(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(iVar, name, matfile_version, parent, item_position);
73         }
74         else
75         {
76             tmp_res = GetMlistVariable(iVar, name, matfile_version, parent, -1);
77         }
78         break;
79     case sci_sparse:
80         if (item_position > 0)
81         {
82             tmp_res = GetSparseVariable(iVar, name, parent, item_position);
83         }
84         else
85         {
86             tmp_res = GetSparseVariable(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 }