/*
 * -- $Header: /cec/src/nestor/servers/R3/shXlib/XNextEvent.c,v 1.1.1.1
 * 90/04/23 10:02:27 spanachi Exp $
 */

#include "copyright.h"

/* $XConsortium: XNextEvent.c,v 11.15 88/09/06 16:09:22 jim Exp $ */
/* Copyright    Massachusetts Institute of Technology    1986	 */

/* -- MULTIPLEX Extension -- */

#define NEED_EVENTS
#include "Xlibint.h"

/* -- additional includes -- */
#include "multiplex.h"

extern _XQEvent *_qfree;

/*
 * Return next event in queue, or if none, flush output and wait for events.
 */

XNextEvent (dpy, event)
  register Display *dpy;
  register XEvent *event;
{
  register _XQEvent *qelt;

  LockDisplay (dpy);

  if (dpy->head == NULL)
    _XReadEvents (dpy);

  /*
   * -- may have enqueued something special without calling _XReadEvents
   */
  if (XmuXMustDoSomething (dpy))
    XmuXDoSomething (dpy);
  qelt = dpy->head;
  *event = qelt->event;

  /* move the head of the queue to the free list */
  if ((dpy->head = qelt->next) == NULL)
    dpy->tail = NULL;
  qelt->next = _qfree;
  _qfree = qelt;
  dpy->qlen--;
  UnlockDisplay (dpy);
  return;
}
