Move the sources to trunk
[opencv] / apps / cvenv / EiC / signal.c
1 #include <stdlib.h>
2 #include "eic.h"
3
4 /*#include "signal.h"*/
5
6 void (*signal(int sig, void (*func)(int a))) (int a);
7 int raise(int sig);
8
9 /* prototype EiC internal signal handlers */
10
11 static val_t eic_raise(void)
12 {
13         val_t v;
14
15         v.ival = raise(arg(0,getargs(),int));
16
17         return v;
18 }
19
20
21 extern void EiC_exit_call(int);
22 extern void EiC_bus_err(int);
23 extern void EiC_ill_oper(int);
24 extern void EiC_stor_access(int);
25 extern void EiC_float_err(int);
26 extern void EiC_term_int(int);
27
28 #define NUM_SIG 32
29
30 /* SIG_IGN must be last one */
31 static void (*EiC_Cfunc[32])(int) = {
32     EiC_exit_call,EiC_bus_err,EiC_ill_oper,
33     EiC_stor_access,EiC_float_err,EiC_term_int,
34     /*SIG_DFL, SIG_ERR, SIG_IGN,*/
35 };
36
37
38 static void  MiddleOne_0(int x0 )
39 {
40     setArg(0, (void*)EiC_Cfunc[0], int ,x0);
41
42     EiC_callBack((void*)EiC_Cfunc[0]);
43 }
44
45 static void  MiddleOne_1(int x0 )
46 {
47     setArg(0, (void*)EiC_Cfunc[1], int ,x0);
48
49     EiC_callBack((void*)EiC_Cfunc[1]);
50 }
51
52
53 static void  MiddleOne_2(int x0 )
54 {
55     setArg(0, (void*)EiC_Cfunc[2], int ,x0);
56
57     EiC_callBack((void*)EiC_Cfunc[2]);
58 }
59
60
61 static void  MiddleOne_3(int x0 )
62 {
63     setArg(0, (void*)EiC_Cfunc[3], int ,x0);
64
65     EiC_callBack((void*)EiC_Cfunc[3]);
66 }
67
68
69 static void  MiddleOne_4(int x0 )
70 {
71     setArg(0, (void*)EiC_Cfunc[4], int ,x0);
72
73     EiC_callBack((void*)EiC_Cfunc[4]);
74 }
75
76
77 static void  MiddleOne_5(int x0 )
78 {
79     setArg(0, (void*)EiC_Cfunc[5], int ,x0);
80
81     EiC_callBack((void*)EiC_Cfunc[5]);
82 }
83
84
85 static void  MiddleOne_6(int x0 )
86 {
87     setArg(0, (void*)EiC_Cfunc[6], int ,x0);
88
89     EiC_callBack((void*)EiC_Cfunc[6]);
90 }
91
92
93 static void  MiddleOne_7(int x0 )
94 {
95     setArg(0, (void*)EiC_Cfunc[7], int ,x0);
96
97     EiC_callBack((void*)EiC_Cfunc[7]);
98 }
99
100
101 static void  MiddleOne_8(int x0 )
102 {
103     setArg(0, (void*)EiC_Cfunc[8], int ,x0);
104
105     EiC_callBack((void*)EiC_Cfunc[8]);
106 }
107
108
109 static void  MiddleOne_9(int x0 )
110 {
111     setArg(0, (void*)EiC_Cfunc[9], int ,x0);
112
113     EiC_callBack((void*)EiC_Cfunc[9]);
114 }
115
116
117 static void  MiddleOne_10(int x0 )
118 {
119     setArg(0, (void*)EiC_Cfunc[10], int ,x0);
120
121     EiC_callBack((void*)EiC_Cfunc[10]);
122 }
123
124
125 static void  MiddleOne_11(int x0 )
126 {
127     setArg(0, (void*)EiC_Cfunc[11], int ,x0);
128
129     EiC_callBack((void*)EiC_Cfunc[11]);
130 }
131
132
133 static void  MiddleOne_12(int x0 )
134 {
135     setArg(0, (void*)EiC_Cfunc[12], int ,x0);
136
137     EiC_callBack((void*)EiC_Cfunc[12]);
138 }
139
140
141 static void  MiddleOne_13(int x0 )
142 {
143     setArg(0, (void*)EiC_Cfunc[13], int ,x0);
144
145     EiC_callBack((void*)EiC_Cfunc[13]);
146 }
147
148
149 static void  MiddleOne_14(int x0 )
150 {
151     setArg(0, (void*)EiC_Cfunc[14], int ,x0);
152
153     EiC_callBack((void*)EiC_Cfunc[14]);
154 }
155
156
157 static void  MiddleOne_15(int x0 )
158 {
159     setArg(0, (void*)EiC_Cfunc[15], int ,x0);
160
161     EiC_callBack((void*)EiC_Cfunc[15]);
162 }
163
164
165 static void  MiddleOne_16(int x0 )
166 {
167     setArg(0, (void*)EiC_Cfunc[16], int ,x0);
168
169     EiC_callBack((void*)EiC_Cfunc[16]);
170 }
171
172
173 static void  MiddleOne_17(int x0 )
174 {
175     setArg(0, (void*)EiC_Cfunc[17], int ,x0);
176
177     EiC_callBack((void*)EiC_Cfunc[17]);
178 }
179
180
181 static void  MiddleOne_18(int x0 )
182 {
183     setArg(0, (void*)EiC_Cfunc[18], int ,x0);
184
185     EiC_callBack((void*)EiC_Cfunc[18]);
186 }
187
188
189 static void  MiddleOne_19(int x0 )
190 {
191     setArg(0, (void*)EiC_Cfunc[19], int ,x0);
192
193     EiC_callBack((void*)EiC_Cfunc[19]);
194 }
195
196
197 static void  MiddleOne_20(int x0 )
198 {
199     setArg(0, (void*)EiC_Cfunc[20], int ,x0);
200
201     EiC_callBack((void*)EiC_Cfunc[20]);
202 }
203
204
205 static void  MiddleOne_21(int x0 )
206 {
207     setArg(0, (void*)EiC_Cfunc[21], int ,x0);
208
209     EiC_callBack((void*)EiC_Cfunc[21]);
210 }
211
212
213 static void  MiddleOne_22(int x0 )
214 {
215     setArg(0, (void*)EiC_Cfunc[22], int ,x0);
216
217     EiC_callBack((void*)EiC_Cfunc[22]);
218 }
219
220
221 static void  MiddleOne_23(int x0 )
222 {
223     setArg(0, (void*)EiC_Cfunc[23], int ,x0);
224
225     EiC_callBack((void*)EiC_Cfunc[23]);
226 }
227
228
229 static void  MiddleOne_24(int x0 )
230 {
231     setArg(0, (void*)EiC_Cfunc[24], int ,x0);
232
233     EiC_callBack((void*)EiC_Cfunc[24]);
234 }
235
236
237 static void  MiddleOne_25(int x0 )
238 {
239     setArg(0, (void*)EiC_Cfunc[25], int ,x0);
240
241     EiC_callBack((void*)EiC_Cfunc[25]);
242 }
243
244
245 static void  MiddleOne_26(int x0 )
246 {
247     setArg(0, (void*)EiC_Cfunc[26], int ,x0);
248
249     EiC_callBack((void*)EiC_Cfunc[26]);
250 }
251
252
253 static void  MiddleOne_27(int x0 )
254 {
255     setArg(0, (void*)EiC_Cfunc[27], int ,x0);
256
257     EiC_callBack((void*)EiC_Cfunc[27]);
258 }
259
260
261 static void  MiddleOne_28(int x0 )
262 {
263     setArg(0, (void*)EiC_Cfunc[28], int ,x0);
264
265     EiC_callBack((void*)EiC_Cfunc[28]);
266 }
267
268
269 static void  MiddleOne_29(int x0 )
270 {
271     setArg(0, (void*)EiC_Cfunc[29], int ,x0);
272
273     EiC_callBack((void*)EiC_Cfunc[29]);
274 }
275
276
277 static void  MiddleOne_30(int x0 )
278 {
279     setArg(0, (void*)EiC_Cfunc[30], int ,x0);
280
281     EiC_callBack((void*)EiC_Cfunc[30]);
282 }
283
284
285 static void  MiddleOne_31(int x0 )
286 {
287     setArg(0, (void*)EiC_Cfunc[31], int ,x0);
288
289     EiC_callBack((void*)EiC_Cfunc[31]);
290 }
291
292 static void (*middle[NUM_SIG])(int) = {
293 MiddleOne_0,MiddleOne_1,MiddleOne_2,MiddleOne_3,MiddleOne_4,MiddleOne_5,MiddleOne_6,MiddleOne_7,
294 MiddleOne_8,MiddleOne_9,MiddleOne_10,MiddleOne_11,MiddleOne_12,MiddleOne_13,MiddleOne_14,
295 MiddleOne_15,MiddleOne_16,MiddleOne_17,MiddleOne_18,MiddleOne_19,MiddleOne_20,MiddleOne_21,
296 MiddleOne_22,MiddleOne_23,MiddleOne_24,MiddleOne_25,MiddleOne_26,MiddleOne_27,MiddleOne_28,
297 MiddleOne_29,MiddleOne_30,MiddleOne_31,};
298
299 static int used;
300 static int nb;
301 static val_t eic_signal(void)
302 {
303         val_t v;
304         int i;
305         code_t *c;
306         
307         void (*func)(int);
308
309         func = (void(*)(int))arg(1,getargs(),ptr_t).p;
310         c = arg(1,getargs(),ptr_t).p;
311
312         for(i=0;i<NUM_SIG;++i)
313             if(func == EiC_Cfunc[i])
314                 break;
315         if(i==NUM_SIG && (long)func > 1) {
316             i = nb++;
317             nb %=NUM_SIG;
318             EiC_Cfunc[i] = func;
319         }
320
321         if(i<used || (long)func <= 1)
322             func = signal(arg(0,getargs(),int),func);
323         else
324             func = signal(arg(0,getargs(),int),middle[i]);
325
326         /* look for return func */
327         for(i=0;i<NUM_SIG;++i)
328             if(func == middle[i])
329                 break;
330
331         if(i==NUM_SIG || (i < used || (long)func <= 1))
332             v.p.sp = v.p.p = v.p.ep = (void*)func;
333         else {
334             c = (code_t*)EiC_Cfunc[i];
335             if(c)
336                 v.p.sp = v.p.p = v.p.ep = c->parent;
337             else
338                 v.p.sp = v.p.p = v.p.ep = c;
339         }
340         return v;
341 }
342
343 /**********************************/
344
345 void module_signal()
346 {
347      for(used=0;used<NUM_SIG;++used)
348         if(EiC_Cfunc[used] != NULL) 
349             break;
350
351      nb = used;
352
353     EiC_add_builtinfunc("raise",eic_raise);
354     EiC_add_builtinfunc("signal",eic_signal);
355 }
356
357 /**********************************/
358
359
360
361
362
363