Annotation of researchv9/X11/src/X.V11R1/lib/X/XPeekIfEv.c, revision 1.1.1.1

1.1       root        1: #include "copyright.h"
                      2: 
                      3: /* $Header: XPeekIfEv.c,v 11.9 87/09/11 08:09:07 toddb Exp $ */
                      4: /* Copyright    Massachusetts Institute of Technology    1986  */
                      5: 
                      6: #define NEED_EVENTS
                      7: #include "Xlibint.h"
                      8: 
                      9: extern _XQEvent *_qfree;
                     10: 
                     11: /*
                     12:  * Flush output and (wait for and) return the next event in the queue
                     13:  * that satisfies the predicate.
                     14:  * BUT do not remove it from the queue.
                     15:  */
                     16: 
                     17: XPeekIfEvent (dpy, event, predicate, arg)
                     18:        register Display *dpy;
                     19:        register XEvent *event;
                     20:        Bool (*predicate)();
                     21:        char *arg;
                     22: {
                     23:        register _XQEvent *qelt;
                     24:        xEvent ev;
                     25: 
                     26:        LockDisplay(dpy);
                     27:        _XFlush (dpy);
                     28: 
                     29:        qelt = dpy->head;
                     30:        while (qelt) {
                     31:            if ((*predicate)(dpy, &qelt->event, arg)) {
                     32:                *event = qelt->event;
                     33:                UnlockDisplay(dpy);
                     34:                return;
                     35:                }
                     36:                qelt = qelt->next;
                     37:        }
                     38: 
                     39:        /* 
                     40:         * if no match in queue, then block waiting for event, enqueing
                     41:         * other events all the while.
                     42:         */
                     43:        while (1) {
                     44:            _XRead (dpy, (char *)&ev, (long)sizeof(xEvent));
                     45:            if (ev.u.u.type == X_Error)
                     46:                _XError (dpy, (xError *) &ev);
                     47:            else {  /* it's an event packet */
                     48:                _XEnq (dpy, &ev);
                     49:                if ((*predicate)(dpy, &dpy->tail->event, arg)) {
                     50:                        *event = dpy->tail->event;
                     51:                        UnlockDisplay(dpy);
                     52:                        return;
                     53:                        }
                     54:                }
                     55:        }
                     56: }
                     57: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.