event.c (416B)
1 #include "c.h" 2 3 4 struct entry { 5 Apply func; 6 void *cl; 7 }; 8 9 Events events; 10 void attach(Apply func, void *cl, List *list) { 11 struct entry *p; 12 13 NEW(p, PERM); 14 p->func = func; 15 p->cl = cl; 16 *list = append(p, *list); 17 } 18 void apply(List event, void *arg1, void *arg2) { 19 if (event) { 20 List lp = event; 21 do { 22 struct entry *p = lp->x; 23 (*p->func)(p->cl, arg1, arg2); 24 lp = lp->link; 25 } while (lp != event); 26 } 27 } 28