next = event->next;
unsigned int event_call(unsigned long event_id, unsigned int arg_count, ...) {    struct eventNode *event, *next;    va_list ap;    unsigned int i;    datalist data;        if((event_types & event_id) < 1)        return 1;        if(arg_count) {        datalist_start(data, arg_count);            va_start(ap, arg_count);        for(i = 0;i < arg_count;i++)            dlist_v(data, i, void*) = va_arg(ap, void*);        va_end(ap);    }    else {        datalist_start(data, 1);        data[0] = NULL;    }        for(event = event_first;event != NULL;event = next) {        if(event->event_id & event_id) {            event->func(event, event_id, event->data, data);            next = event->next;            if(event->call_once)                event_unhook(event);        }    }        datalist_end(data);        return 1;}