959e6be582053aca3762f335815025fc59c39c8f
[scilab.git] / scilab / modules / scicos / includes / scicos.h
1 /*  Scicos
2 *
3 *  Copyright (C) INRIA - METALAU Project <scicos@inria.fr>
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., 675 Mass Ave, Cambridge, MA 02139, USA.
18 *
19 * See the file ./license.txt
20 */
21 #ifndef __SCICOS_H
22 #define __SCICOS_H
23
24 #include "machine.h"
25 #include "scicos_block4.h"
26 #include "import.h"
27
28 /* maximum value for sum of number of inputs and outputs ports of a given 
29 block of type 2 */
30 #define SZ_SIZE 60
31
32 /* maximum value for sum of number of inputs and outputs of a given block 
33 of type 0 */
34 #define TB_SIZE 500
35
36 typedef void (*voidf) (void);
37
38 /* Blocks prototypes */
39 #define I int
40 #define IP int*
41 #define DP double*
42 #define DPP double**
43 #define DB scicos_block*
44 #define F scicos_flag
45 #define FP scicos_flag*
46
47 /*                    flag  nclock ntvec  rpar  nrpar ipar  nipar  u  nu */
48 #define ARGS_scicosm1 IP,    IP,    IP,    DP,   IP,  IP,   IP,   DP, IP
49
50 /* flag  nclock t    xd   x    nx   z   nz   tvec   ntvec  rpar  nrpar ipar  nipar  intabl  ni  outabl no */
51 #define ARGS_scicos0 FP,IP,DP,DP,DP,IP,DP,IP,DP,IP,DP,IP,IP,IP,DP,IP,DP,IP
52
53 /*       flag   nclock t    xd   x    nx   z   nz   tvec   ntvec  rpar  nrpar ipar  nipar  intabl  .... */
54 #define ARGS_scicos FP,IP,DP,DP,DP,IP,DP,IP,DP,IP,DP,IP,IP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP
55
56 /*        flag   nclock t    xd   x    nx   z   nz   tvec   ntvec  rpar  nrpar ipar  nipar   args_in sz_in, n_in  args_out sz_out, n_out  */
57 #define ARGS_scicos2 FP,IP,DP,DP,DP,IP,DP,IP,DP,IP,DP,IP,IP,IP,DPP,IP,IP,DPP,IP,IP
58
59 /*        flag   nclock t    xd   x    nx   z   nz   tvec   ntvec  rpar  nrpar ipar  nipar   args_in sz_in, n_in  args_out sz_out, n_out g ng */
60 #define ARGS_scicos2z FP,IP,DP,DP,DP,IP,DP,IP,DP,IP,DP,IP,IP,IP,DPP,IP,IP,DPP,IP,IP,DP,IP
61
62 /*       flag   nclock t    residual xd   x    nx   z   nz   tvec   ntvec  rpar  nrpar ipar  nipar  intabl  .... */
63
64 #define ARGS_scicosi FP,IP,DP,DP,DP,DP,IP,DP,IP,DP,IP,DP,IP,IP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP,DP,IP
65
66 /*        flag   nclockf t   residual xd   x    nx   z   nz   tvec   ntvec  rpar  nrpar ipar  nipar   args_in sz_in, n_in  args_out sz_out, n_out  */
67 #define ARGS_scicosi2 FP,IP,DP,DP,DP,DP,IP,DP,IP,DP,IP,DP,IP,IP,IP,DPP,IP,IP,DPP,IP,IP
68
69 /*        flag   nclockf t   residual xd   x    nx   z   nz   tvec   ntvec  rpar  nrpar ipar  nipar   args_in sz_in, n_in  args_out sz_out, n_out g ng */
70 #define ARGS_scicosi2z FP,IP,DP,DP,DP,DP,IP,DP,IP,DP,IP,DP,IP,IP,IP,DPP,IP,IP,DPP,IP,IP,DP,IP
71
72 /*         block     flag*/
73 #define ARGS_scicos4 DB, F
74
75 typedef void (*ScicosFm1) (ARGS_scicosm1);
76 typedef void (*ScicosF0) (ARGS_scicos0);
77 typedef void (*ScicosF) (ARGS_scicos);
78 typedef void (*ScicosF2) (ARGS_scicos2);
79 typedef void (*ScicosF2z) (ARGS_scicos2z);
80 typedef void (*ScicosFi) (ARGS_scicosi);
81 typedef void (*ScicosFi2) (ARGS_scicosi2);
82 typedef void (*ScicosFi2z) (ARGS_scicosi2z);
83 typedef void (*ScicosF4) (ARGS_scicos4);
84
85 typedef struct
86 {
87     char *name;
88     ScicosF fonc;
89 } OpTab;
90
91 /**
92  * @TODO add comment
93  *
94  * @param x_in  
95  * @param xptr_in   
96  * @param z__   
97  * @param work  
98  * @param zptr  
99  * @param modptr_in 
100  * @param oz    
101  * @param ozsz  
102  * @param oztyp 
103  * @param ozptr 
104  * @param iz    
105  * @param izptr 
106  * @param t0_in 
107  * @param tf_in 
108  * @param tevts_in  
109  * @param evtspt_in 
110  * @param nevts 
111  * @param pointi_in 
112  * @param outtbptr_in   
113  * @param outtbsz_in    
114  * @param outtbtyp_in   
115  * @param outtb_elem_in 
116  * @param nelem1    
117  * @param nlnk1 
118  * @param funptr    
119  * @param funtyp_in 
120  * @param inpptr_in 
121  * @param outptr_in 
122  * @param inplnk_in 
123  * @param outlnk_in 
124  * @param rpar  
125  * @param rpptr 
126  * @param ipar  
127  * @param ipptr 
128  * @param opar  
129  * @param oparsz    
130  * @param opartyp   
131  * @param opptr 
132  * @param clkptr_in 
133  * @param ordptr_in 
134  * @param nordptr1  
135  * @param ordclk_in 
136  * @param cord_in   
137  * @param ncord1    
138  * @param iord_in   
139  * @param niord1    
140  * @param oord_in   
141  * @param noord1    
142  * @param zord_in   
143  * @param nzord1    
144  * @param critev_in 
145  * @param nblk1 
146  * @param ztyp  
147  * @param zcptr_in  
148  * @param subscr    
149  * @param nsubs 
150  * @param simpar    
151  * @param flag__    
152  * @param ierr_out  
153  * @return <ReturnValue>
154  */
155 int C2F(scicos) (double *x_in, int *xptr_in, double *z__,
156                  void **work, int *zptr, int *modptr_in,
157                  void **oz, int *ozsz, int *oztyp, int *ozptr,
158                  int *iz, int *izptr, double *t0_in,
159                  double *tf_in, double *tevts_in, int *evtspt_in,
160                  int *nevts, int *pointi_in, void **outtbptr_in,
161                  int *outtbsz_in, int *outtbtyp_in,
162                  outtb_el * outtb_elem_in, int *nelem1, int *nlnk1,
163                  int *funptr, int *funtyp_in, int *inpptr_in,
164                  int *outptr_in, int *inplnk_in, int *outlnk_in,
165                  double *rpar, int *rpptr, int *ipar, int *ipptr,
166                  void **opar, int *oparsz, int *opartyp, int *opptr,
167                  int *clkptr_in, int *ordptr_in, int *nordptr1,
168                  int *ordclk_in, int *cord_in, int *ncord1,
169                  int *iord_in, int *niord1, int *oord_in,
170                  int *noord1, int *zord_in, int *nzord1,
171                  int *critev_in, int *nblk1, int *ztyp, int *zcptr_in, int *subscr, int *nsubs, double *simpar, int *flag__, int *ierr_out);
172
173 /**
174 *
175 */
176 void callf(double *t, scicos_block * block, scicos_flag * flag);
177
178 /**
179 *
180 */
181 int get_phase_simulation(void);
182
183 /**
184 *
185 */
186 void set_block_error(int err);
187
188 /**
189 *
190 */
191 double get_scicos_time(void);
192
193 /**
194 *
195 */
196 void set_pointer_xproperty(int *pointer);
197
198 /**
199 *
200 */
201 void do_cold_restart(void);
202
203 /**
204 *
205 */
206 int get_block_number(void);
207
208 /**
209 *
210 */
211 void end_scicos_sim(void);
212
213 /**
214 *
215 */
216 void Coserror(const char *fmt, ...);
217
218 #endif