1: #include <X/mit-copyright.h>
   2: 
   3: /* $Header: XNextEvent.c,v 10.4 86/02/01 15:37:26 tony Rel $ */
   4: /* Copyright    Massachusetts Institute of Technology    1985	*/
   5: 
   6: #include "XlibInternal.h"
   7: 
   8: extern _QEvent *_qfree;
   9: 
  10: /* Flush output and (wait for and) return the next event in the queue.
  11: */
  12: 
  13: XNextEvent (event)
  14:     register XEvent *event;
  15: {
  16:     register _QEvent *qelt;
  17:     register Display *dpy = _XlibCurrentDisplay;
  18: 
  19:     _XFlush (dpy);
  20: 
  21:     /* if the queue is empty, read as many events as possible
  22: 	   and enqueue them */
  23:     while (dpy->head == NULL) {
  24:         char buf[BUFSIZE];
  25:         int pend_not_register; /* because can't "&" a register variable */
  26:         register int pend;
  27:         register XRep *rep;
  28: 
  29:         /* find out how much data can be read */
  30:         if (ioctl(dpy->fd, FIONREAD, &pend_not_register) < 0)
  31:             _XIOError(dpy);
  32:         pend = pend_not_register;
  33: 
  34:         /* must read at least one XRep; if none is pending, then
  35: 	       we'll just block waiting for it */
  36:         if (pend < sizeof(XRep))
  37:             pend = sizeof (XRep);
  38: 
  39:         /* but we won't read more than the max buffer size */
  40:         if (pend > BUFSIZE)
  41:             pend = BUFSIZE;
  42: 
  43:         /* round down to an integral number of XReps */
  44:         pend = (pend / sizeof (XRep)) * sizeof (XRep);
  45: 
  46:         _XRead (dpy, buf, pend);
  47:         for (rep = (XRep *) buf; pend > 0; rep++, pend -= sizeof(XRep))
  48:         if (rep->code == X_Error)
  49:             _XError (dpy, (XErrorEvent *) rep);
  50:         else  /* it's an event packet; enqueue it */
  51:             _XEnq (dpy, (XEvent *) rep);
  52:         }
  53: 
  54:     *event = (qelt = dpy->head)->event;
  55: 
  56:     /* move the head of the queue to the free list */
  57:     if ((dpy->head = qelt->next) == NULL)
  58:         dpy->tail = NULL;
  59:     qelt->next = _qfree;
  60:     _qfree = qelt;
  61:     dpy->qlen--;
  62: }
Last modified: 1986-02-01
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 987
Valid CSS Valid XHTML 1.0 Strict