/*! \brief Virtual worker function - by default it calls the user callback function. \remark The respective callback parameter format is chosen depending on whether clss is defined or not. */ void flext::Timer::Work() { if(cback) { if(clss) ((bool (*)(flext_base *,void *))cback)(clss,userdata); else cback(userdata); } }
void JoystickHandler::handleEvent(char key, char info) { char _info = info; // For analog stick events, mask info and send the original information via _info if(key == LS || key == RS) { info = info & 4 ? YMOVE : XMOVE; } for(auto it = m_events.begin(); it != m_events.end(); ++it) { if(it->key == key && it->info == info) it->cback(key, _info); } }
static void handle_starttag(ekhtml_parser_t *parser, char *curp, ekhtml_starttag_state *sstate) { ekhtml_tag_container *container; ekhtml_starttag_cb_t cback = NULL; int taglen = sstate->tagend - 1; ekhtml_string_t str; ekhtml_attr_t *attr; char *upper_str; hnode_t *hn; upper_str = ekhtml_make_upperstr(curp + 1, taglen); str.str = upper_str; str.len = taglen; if((hn = hash_lookup(parser->startendcb, &str)) && (container = hnode_get(hn)) && container->startfunc) { cback = container->startfunc; } else if(parser->startcb_unk) cback = parser->startcb_unk; if(!cback) return; /* Formulate real attribute callback data from the 'offset' pointer values */ for(attr=sstate->attrs;attr;attr=attr->next){ attr->name.str = curp + (int)attr->name.str; if(!attr->isBoolean) attr->val.str = curp + (int)attr->val.str; } cback(parser->cbdata, &str, sstate->attrs); }