예제 #1
0
파일: event.c 프로젝트: barak/lush
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);
}
예제 #2
0
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);
}
예제 #3
0
/* 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;
}
예제 #4
0
파일: event.c 프로젝트: barak/lush
/* 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;
}