Remove some useless code...
[scilab.git] / scilab / modules / scicos / src / c / var2sci.c
1 /*  Scicos
2 *
3 *  Copyright (C) DIGITEO - 2009 - Allan CORNET
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 *
19 * See the file ./license.txt
20 */
21 /*--------------------------------------------------------------------------*/
22 #include "var2sci.h"
23 #include "import.h"
24 #include "stack-c.h"
25 #include "MALLOC.h"
26 /*--------------------------------------------------------------------------*/
27 int var2sci(void *x, int n, int m, int typ_var)
28 {
29     /************************************
30     * variables and constants d?inition
31     ************************************/
32     /*counter and address variable declaration*/
33     int nm = 0, il = 0, l = 0, j = 0, i = 0, err = 0;
34
35     /*define all type of accepted ptr */
36     SCSREAL_COP *x_d = NULL, *ptr_d = NULL;
37     SCSINT8_COP *x_c = NULL, *ptr_c = NULL;
38     SCSUINT8_COP *x_uc = NULL, *ptr_uc = NULL;
39     SCSINT16_COP *x_s = NULL, *ptr_s = NULL;
40     SCSUINT16_COP *x_us = NULL, *ptr_us = NULL;
41     SCSINT_COP *x_i = NULL, *ptr_i = NULL;
42     SCSUINT_COP *x_ui = NULL, *ptr_ui = NULL;
43     SCSINT32_COP *x_l = NULL, *ptr_l = NULL;
44     SCSUINT32_COP *x_ul = NULL, *ptr_ul = NULL;
45
46     /* Check if the stack is not full */
47     if (Top >= Bot)
48     {
49         return 1;
50     }
51     else
52     {
53         Top = Top + 1;
54         il = iadr(*Lstk(Top));
55         l = sadr(il + 4);
56     }
57
58     /* set number of double needed to store data */
59     if (typ_var == SCSREAL_N)
60     {
61         nm = n * m;    /*double real matrix*/
62     }
63     else if (typ_var == SCSCOMPLEX_N)
64     {
65         nm = n * m * 2;    /*double real matrix*/
66     }
67     else if (typ_var == SCSINT_N)
68     {
69         nm = (int)(ceil((n * m) / 2) + 1);    /*int*/
70     }
71     else if (typ_var == SCSINT8_N)
72     {
73         nm = (int)(ceil((n * m) / 8) + 1);    /*int8*/
74     }
75     else if (typ_var == SCSINT16_N)
76     {
77         nm = (int)(ceil((n * m) / 4) + 1);    /*int16*/
78     }
79     else if (typ_var == SCSINT32_N)
80     {
81         nm = (int)(ceil((n * m) / 2) + 1);    /*int32*/
82     }
83     else if (typ_var == SCSUINT_N)
84     {
85         nm = (int)(ceil((n * m) / 2) + 1);    /*uint*/
86     }
87     else if (typ_var == SCSUINT8_N)
88     {
89         nm = (int)(ceil((n * m) / 8) + 1);    /*uint8*/
90     }
91     else if (typ_var == SCSUINT16_N)
92     {
93         nm = (int)(ceil((n * m) / 4) + 1);    /*uint16*/
94     }
95     else if (typ_var == SCSUINT32_N)
96     {
97         nm = (int)(ceil((n * m) / 2) + 1);    /*uint32*/
98     }
99     else if (typ_var == SCSUNKNOW_N)
100     {
101         nm = n * m;    /*arbitrary scilab object*/
102     }
103     else
104     {
105         nm = n * m;    /*double real matrix*/
106     }
107
108     /*check if there is free space for new data*/
109     err = l + nm - *Lstk(Bot);
110     if (err > 0)
111     {
112         return 2;
113     }
114
115     /**************************
116     * store data on the stack
117     *************************/
118     switch (typ_var) /*for each type of data*/
119     {
120         case SCSREAL_N    : /* set header */
121             *istk(il) = sci_matrix; /*double real matrix*/
122             *istk(il + 1) = n;
123             *istk(il + 2) = m;
124             *istk(il + 3) = 0;
125             x_d = (SCSREAL_COP *) x;
126             ptr_d = (SCSREAL_COP *) stk(l);
127             for (j = 0; j < m * n; j++)
128             {
129                 ptr_d[j] = x_d[j];
130             }
131             break;
132
133         case SCSCOMPLEX_N : /* set header */
134             *istk(il) = 1; /*double complex matrix*/
135             *istk(il + 1) = n;
136             *istk(il + 2) = m;
137             *istk(il + 3) = 1;
138             x_d = (SCSCOMPLEX_COP *) x;
139             ptr_d = (SCSCOMPLEX_COP *) stk(l);
140             for (j = 0; j < 2 * m * n; j++)
141             {
142                 ptr_d[j] = x_d[j];
143             }
144             break;
145
146         case SCSINT_N     : /* set header */
147             *istk(il) = sci_ints; /*int*/
148             *istk(il + 1) = n;
149             *istk(il + 2) = m;
150             *istk(il + 3) = 4;
151             x_i = (SCSINT_COP *) x;
152             for (j = 0; j < m * n; j++)
153             {
154                 ptr_i = (SCSINT_COP *) istk(il + 4);
155                 ptr_i[j] = x_i[j];
156             }
157             break;
158
159         case SCSINT8_N    : /* set header */
160             *istk(il) = sci_ints; /*int8*/
161             *istk(il + 1) = n;
162             *istk(il + 2) = m;
163             *istk(il + 3) = 1;
164             x_c = (SCSINT8_COP *) x;
165             for (j = 0; j < m * n; j++)
166             {
167                 ptr_c = (SCSINT8_COP *) istk(il + 4);
168                 ptr_c[j] = x_c[j];
169             }
170             break;
171
172         case SCSINT16_N   : /* set header */
173             *istk(il) = sci_ints; /*int16*/
174             *istk(il + 1) = n;
175             *istk(il + 2) = m;
176             *istk(il + 3) = 2;
177             x_s = (SCSINT16_COP *) x;
178             for (j = 0; j < m * n; j++)
179             {
180                 ptr_s = (SCSINT16_COP *) istk(il + 4);
181                 ptr_s[j] = x_s[j];
182             }
183             break;
184
185         case SCSINT32_N   : /* set header */
186             *istk(il) = sci_ints; /*int32*/
187             *istk(il + 1) = n;
188             *istk(il + 2) = m;
189             *istk(il + 3) = 4;
190             x_l = (SCSINT32_COP *) x;
191             for (j = 0; j < m * n; j++)
192             {
193                 ptr_l = (SCSINT32_COP *) istk(il + 4);
194                 ptr_l[j] = x_l[j];
195             }
196             break;
197
198         case SCSUINT_N   : /* set header */
199             *istk(il) = sci_ints; /*uint*/
200             *istk(il + 1) = n;
201             *istk(il + 2) = m;
202             *istk(il + 3) = 14;
203             x_ui = (SCSUINT_COP *) x;
204             for (j = 0; j < m * n; j++)
205             {
206                 ptr_ui = (SCSUINT_COP *) istk(il + 4);
207                 ptr_ui[j] = x_ui[j];
208             }
209             break;
210
211         case SCSUINT8_N   : /* set header */
212             *istk(il) = sci_ints; /*uint8*/
213             *istk(il + 1) = n;
214             *istk(il + 2) = m;
215             *istk(il + 3) = 11;
216             x_uc = (SCSUINT8_COP *) x;
217             for (j = 0; j < m * n; j++)
218             {
219                 ptr_uc = (SCSUINT8_COP *) istk(il + 4);
220                 ptr_uc[j] = x_uc[j];
221             }
222             break;
223
224         case SCSUINT16_N  : /* set header */
225             *istk(il) = sci_ints; /*uint16*/
226             *istk(il + 1) = n;
227             *istk(il + 2) = m;
228             *istk(il + 3) = 12;
229             x_us = (SCSUINT16_COP *) x;
230             for (j = 0; j < m * n; j++)
231             {
232                 ptr_us = (SCSUINT16_COP *) istk(il + 4);
233                 ptr_us[j] = x_us[j];
234             }
235             break;
236
237         case SCSUINT32_N  : /* set header */
238             *istk(il) = sci_ints; /*uint32*/
239             *istk(il + 1) = n;
240             *istk(il + 2) = m;
241             *istk(il + 3) = 14;
242             x_ul = (SCSUINT32_COP *) x;
243             for (j = 0; j < m * n; j++)
244             {
245                 ptr_ul = (SCSUINT32_COP *) istk(il + 4);
246                 ptr_ul[j] = x_ul[j];
247             }
248             break;
249
250         case SCSUNKNOW_N  :
251             x_d = (double *) x;
252             C2F(unsfdcopy)(&nm, x_d, (j = 1, &j), stk(*Lstk(Top)), (i = 1, &i));
253             break;
254
255         default         : /* set header */
256             *istk(il) = sci_matrix; /* double by default */
257             *istk(il + 1) = n;
258             *istk(il + 2) = m;
259             *istk(il + 3) = 0;
260             x_d = (double *) x;
261             for (j = 0; j < m * n; j++)
262             {
263                 ptr_d = (double *) stk(il + 4);
264                 ptr_d[j] = x_d[j];
265             }
266             break;
267     }
268
269     /* set value in lstk */
270     *Lstk(Top + 1) = l + nm;
271
272     return 0;
273 }
274 /*--------------------------------------------------------------------------*/