Event event_next() { while (!event_peek()) { sleep_enable(); sleep_cpu(); sleep_disable(); } return event_pop(); }
static at *test_event_sub(int arg_number, at **arg_array, int remove) { /* Validate parameters */ at *handler = NIL; if (arg_number == 0) handler = current_window_handler(); else if (arg_number == 1) handler = APOINTER(1); else ARG_NUMBER(-1); /* Perform */ call_spoll(); at *r = handler ? event_get(handler, remove) : event_peek(); return r; }
Event event_pop() { Event *e = event_peek(); if (!e || e->id == EVENT_INVALID) return InvalidEvent; Event ret = *e; _event_queue[_event_queue_head] = InvalidEvent; _event_queue_size--; if (++_event_queue_head >= EVENT_QUEUE_MAX_SIZE) { _event_queue_head = 0; } return ret; }