#include "zori.h" #include "miao.h" /* * Pardon the pun name, but Zori is the submodule that handles the user * interface and the menus. */ int zori_handler_compare(const void * v1, const void * v2) { const struct zori_handler * h1 = v1; const struct zori_handler * h2 = v2; if (h1->type < h2->type) return -1; if (h1->type > h2->type) return 1; return 0; } struct zori_handler * zori_handlers_add(struct zori_handlers * me, zori_event_type type, zori_handler_func * handler, void * data) { struct zori_handler * result = NULL; result = miao_push_ptr(me); if (result) { result->type = type; result->handler = handler; result->data = data; } miao_qsort(me, zori_handler_compare); return result; } void zori_handlers_done(struct zori_handlers * me) { miao_done(me); } void zori_handlers_init(struct zori_handlers * me) { miao_init(me); } struct zori_handler * zori_handlers_search(struct zori_handlers * me, zori_event_type type) { struct zori_handler * result; struct zori_handler key; key.type = type; key.handler = NULL; key.data = NULL; if (!me) return NULL; result = miao_bsearch(me, zori_handler_compare, &key); return result; } int zori_handlers_handle(struct zori_handlers * me, struct zori_event * event, struct zori_widget * widget) { struct zori_handler * handler = zori_handlers_search(me, event->sysev.type); if (!handler) return 0; return handler->handler(event); } struct zori_root zori_the_root = {0}; int zori_init() { return 0; }