📄 signal.c
字号:
#include <stdlib.h>
#include "eic.h"
/*#include "signal.h"*/
void (*signal(int sig, void (*func)(int a))) (int a);
int raise(int sig);
/* prototype EiC internal signal handlers */
static val_t eic_raise(void)
{
val_t v;
v.ival = raise(arg(0,getargs(),int));
return v;
}
extern void EiC_exit_call(int);
extern void EiC_bus_err(int);
extern void EiC_ill_oper(int);
extern void EiC_stor_access(int);
extern void EiC_float_err(int);
extern void EiC_term_int(int);
#define NUM_SIG 32
/* SIG_IGN must be last one */
static void (*EiC_Cfunc[32])(int) = {
EiC_exit_call,EiC_bus_err,EiC_ill_oper,
EiC_stor_access,EiC_float_err,EiC_term_int,
/*SIG_DFL, SIG_ERR, SIG_IGN,*/
};
static void MiddleOne_0(int x0 )
{
setArg(0, (void*)EiC_Cfunc[0], int ,x0);
EiC_callBack((void*)EiC_Cfunc[0]);
}
static void MiddleOne_1(int x0 )
{
setArg(0, (void*)EiC_Cfunc[1], int ,x0);
EiC_callBack((void*)EiC_Cfunc[1]);
}
static void MiddleOne_2(int x0 )
{
setArg(0, (void*)EiC_Cfunc[2], int ,x0);
EiC_callBack((void*)EiC_Cfunc[2]);
}
static void MiddleOne_3(int x0 )
{
setArg(0, (void*)EiC_Cfunc[3], int ,x0);
EiC_callBack((void*)EiC_Cfunc[3]);
}
static void MiddleOne_4(int x0 )
{
setArg(0, (void*)EiC_Cfunc[4], int ,x0);
EiC_callBack((void*)EiC_Cfunc[4]);
}
static void MiddleOne_5(int x0 )
{
setArg(0, (void*)EiC_Cfunc[5], int ,x0);
EiC_callBack((void*)EiC_Cfunc[5]);
}
static void MiddleOne_6(int x0 )
{
setArg(0, (void*)EiC_Cfunc[6], int ,x0);
EiC_callBack((void*)EiC_Cfunc[6]);
}
static void MiddleOne_7(int x0 )
{
setArg(0, (void*)EiC_Cfunc[7], int ,x0);
EiC_callBack((void*)EiC_Cfunc[7]);
}
static void MiddleOne_8(int x0 )
{
setArg(0, (void*)EiC_Cfunc[8], int ,x0);
EiC_callBack((void*)EiC_Cfunc[8]);
}
static void MiddleOne_9(int x0 )
{
setArg(0, (void*)EiC_Cfunc[9], int ,x0);
EiC_callBack((void*)EiC_Cfunc[9]);
}
static void MiddleOne_10(int x0 )
{
setArg(0, (void*)EiC_Cfunc[10], int ,x0);
EiC_callBack((void*)EiC_Cfunc[10]);
}
static void MiddleOne_11(int x0 )
{
setArg(0, (void*)EiC_Cfunc[11], int ,x0);
EiC_callBack((void*)EiC_Cfunc[11]);
}
static void MiddleOne_12(int x0 )
{
setArg(0, (void*)EiC_Cfunc[12], int ,x0);
EiC_callBack((void*)EiC_Cfunc[12]);
}
static void MiddleOne_13(int x0 )
{
setArg(0, (void*)EiC_Cfunc[13], int ,x0);
EiC_callBack((void*)EiC_Cfunc[13]);
}
static void MiddleOne_14(int x0 )
{
setArg(0, (void*)EiC_Cfunc[14], int ,x0);
EiC_callBack((void*)EiC_Cfunc[14]);
}
static void MiddleOne_15(int x0 )
{
setArg(0, (void*)EiC_Cfunc[15], int ,x0);
EiC_callBack((void*)EiC_Cfunc[15]);
}
static void MiddleOne_16(int x0 )
{
setArg(0, (void*)EiC_Cfunc[16], int ,x0);
EiC_callBack((void*)EiC_Cfunc[16]);
}
static void MiddleOne_17(int x0 )
{
setArg(0, (void*)EiC_Cfunc[17], int ,x0);
EiC_callBack((void*)EiC_Cfunc[17]);
}
static void MiddleOne_18(int x0 )
{
setArg(0, (void*)EiC_Cfunc[18], int ,x0);
EiC_callBack((void*)EiC_Cfunc[18]);
}
static void MiddleOne_19(int x0 )
{
setArg(0, (void*)EiC_Cfunc[19], int ,x0);
EiC_callBack((void*)EiC_Cfunc[19]);
}
static void MiddleOne_20(int x0 )
{
setArg(0, (void*)EiC_Cfunc[20], int ,x0);
EiC_callBack((void*)EiC_Cfunc[20]);
}
static void MiddleOne_21(int x0 )
{
setArg(0, (void*)EiC_Cfunc[21], int ,x0);
EiC_callBack((void*)EiC_Cfunc[21]);
}
static void MiddleOne_22(int x0 )
{
setArg(0, (void*)EiC_Cfunc[22], int ,x0);
EiC_callBack((void*)EiC_Cfunc[22]);
}
static void MiddleOne_23(int x0 )
{
setArg(0, (void*)EiC_Cfunc[23], int ,x0);
EiC_callBack((void*)EiC_Cfunc[23]);
}
static void MiddleOne_24(int x0 )
{
setArg(0, (void*)EiC_Cfunc[24], int ,x0);
EiC_callBack((void*)EiC_Cfunc[24]);
}
static void MiddleOne_25(int x0 )
{
setArg(0, (void*)EiC_Cfunc[25], int ,x0);
EiC_callBack((void*)EiC_Cfunc[25]);
}
static void MiddleOne_26(int x0 )
{
setArg(0, (void*)EiC_Cfunc[26], int ,x0);
EiC_callBack((void*)EiC_Cfunc[26]);
}
static void MiddleOne_27(int x0 )
{
setArg(0, (void*)EiC_Cfunc[27], int ,x0);
EiC_callBack((void*)EiC_Cfunc[27]);
}
static void MiddleOne_28(int x0 )
{
setArg(0, (void*)EiC_Cfunc[28], int ,x0);
EiC_callBack((void*)EiC_Cfunc[28]);
}
static void MiddleOne_29(int x0 )
{
setArg(0, (void*)EiC_Cfunc[29], int ,x0);
EiC_callBack((void*)EiC_Cfunc[29]);
}
static void MiddleOne_30(int x0 )
{
setArg(0, (void*)EiC_Cfunc[30], int ,x0);
EiC_callBack((void*)EiC_Cfunc[30]);
}
static void MiddleOne_31(int x0 )
{
setArg(0, (void*)EiC_Cfunc[31], int ,x0);
EiC_callBack((void*)EiC_Cfunc[31]);
}
static void (*middle[NUM_SIG])(int) = {
MiddleOne_0,MiddleOne_1,MiddleOne_2,MiddleOne_3,MiddleOne_4,MiddleOne_5,MiddleOne_6,MiddleOne_7,
MiddleOne_8,MiddleOne_9,MiddleOne_10,MiddleOne_11,MiddleOne_12,MiddleOne_13,MiddleOne_14,
MiddleOne_15,MiddleOne_16,MiddleOne_17,MiddleOne_18,MiddleOne_19,MiddleOne_20,MiddleOne_21,
MiddleOne_22,MiddleOne_23,MiddleOne_24,MiddleOne_25,MiddleOne_26,MiddleOne_27,MiddleOne_28,
MiddleOne_29,MiddleOne_30,MiddleOne_31,};
static int used;
static int nb;
static val_t eic_signal(void)
{
val_t v;
int i;
code_t *c;
void (*func)(int);
func = (void(*)(int))arg(1,getargs(),ptr_t).p;
c = arg(1,getargs(),ptr_t).p;
for(i=0;i<NUM_SIG;++i)
if(func == EiC_Cfunc[i])
break;
if(i==NUM_SIG && (long)func > 1) {
i = nb++;
nb %=NUM_SIG;
EiC_Cfunc[i] = func;
}
if(i<used || (long)func <= 1)
func = signal(arg(0,getargs(),int),func);
else
func = signal(arg(0,getargs(),int),middle[i]);
/* look for return func */
for(i=0;i<NUM_SIG;++i)
if(func == middle[i])
break;
if(i==NUM_SIG || (i < used || (long)func <= 1))
v.p.sp = v.p.p = v.p.ep = (void*)func;
else {
c = (code_t*)EiC_Cfunc[i];
if(c)
v.p.sp = v.p.p = v.p.ep = c->parent;
else
v.p.sp = v.p.p = v.p.ep = c;
}
return v;
}
/**********************************/
void module_signal()
{
for(used=0;used<NUM_SIG;++used)
if(EiC_Cfunc[used] != NULL)
break;
nb = used;
EiC_add_builtinfunc("raise",eic_raise);
EiC_add_builtinfunc("signal",eic_signal);
}
/**********************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -