void ev_parsedesc(at *desc) { if (CONSP(desc)) { ev_parsedesc(Car(desc)); ev_parsedesc(Cdr(desc)); } else if (GPTRP(desc)) evdesc = (const char *)String(desc); else if (NUMBERP(desc)) evmods = (unsigned char)Number(desc); }
void ev_parsedesc(at *desc) { if (CONSP(desc)) { ev_parsedesc(desc->Car); ev_parsedesc(desc->Cdr); } else if (GPTRP(desc)) evdesc = (const char *)(desc->Gptr); else if (NUMBERP(desc)) evmods = (unsigned char)(desc->Number); }
/* event_get -- Return the next event associated with the specified handler. The event is removed from the queue if <remove> is non zero. */ at * event_get(void *handler, int remove) { at *pp = head; if (CONSP(pp)) { while (CONSP(pp->Cdr)) { at *p = pp->Cdr; void *hndl = ev_hndl(p->Car); if (hndl == handler) { at *event = p->Car->Cdr->Cdr; ev_parsedesc(p->Car->Cdr->Car); LOCK(event); if (remove) ev_remove(pp, p); return event; } if (hndl == 0) { ev_remove(pp, p); continue; } pp = p; } if (pp->Cdr) { at *p = pp->Cdr; pp->Cdr = NIL; UNLOCK(p); } } return NIL; }
/* event_get -- * Return the next event associated with the specified handler. * The event is removed from the queue if <remove> is true. */ at *event_get(void *handler, bool remove) { at *pp = head; if (CONSP(pp)) { while (CONSP(Cdr(pp))) { at *p = Cdr(pp); void *hndl = ev_hndl(Car(p)); if (hndl == handler) { at *event = Cdr(Cdar(p)); ev_parsedesc(Car(Cdar(p))); if (remove) ev_remove(pp, p); return event; } if (!hndl) { ev_remove(pp, p); continue; } pp = p; } if (Cdr(pp)) Cdr(pp) = NIL; } return NIL; }