diff -urN cui3/cui.c cui4/cui.c --- cui3/cui.c Thu Jan 30 03:30:00 2014 +++ cui4/cui.c Thu Jan 30 03:40:00 2014 @@ -27,6 +27,7 @@ obj->h = h; if(parent) cui_base_child_add(parent, obj); + obj->handler_list = NULL; } void @@ -79,6 +80,25 @@ { cui_label_init(obj, parent, x, y, s); obj->w += 2; +} + +cui_handler_list +cui_handler_list_new(cui_handler hdr, int evt, void *prm, cui_handler_list next) +{ + cui_handler_list list; + + if((list = malloc(sizeof(struct cui_handler_list))) == NULL) ERR("No Mem"); + list->hdr = hdr; + list->evt = evt; + list->prm = prm; + list->next = next; + return list; +} + +void +cui_bind(cui obj, int evt, cui_handler hdr, void *prm) +{ + obj->handler_list = cui_handler_list_new(hdr, evt, prm, obj->handler_list); } /* EOF */ diff -urN cui3/cui.h cui4/cui.h --- cui3/cui.h Thu Jan 30 03:30:00 2014 +++ cui4/cui.h Thu Jan 30 03:40:00 2014 @@ -3,9 +3,25 @@ typedef struct cui_base *cui; +#define CUI_EVT_KEY (1<<0) +#define CUI_EVT_DRAW (1<<1) +#define CUI_EVT_BUTTON (1<<2) + +typedef void (*cui_handler)(cui obj, int evt, void *prm); + +typedef struct cui_handler_list *cui_handler_list; + +struct cui_handler_list{ + cui_handler hdr; + int evt; + void *prm; + cui_handler_list next; +}; + struct cui_base{ cui parent, children, next; int x, y, w, h; + cui_handler_list handler_list; }; typedef struct cui_panel{