XTimeCoord *XGetMotionEvents( register Display *dpy, Window w, Time start, Time stop, int *nEvents) /* RETURN */ { xGetMotionEventsReply rep; register xGetMotionEventsReq *req; XTimeCoord *tc = NULL; long nbytes; LockDisplay(dpy); GetReq(GetMotionEvents, req); req->window = w; /* XXX is this right for all machines? */ req->start = start; req->stop = stop; if (!_XReply (dpy, (xReply *)&rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return (NULL); } if (rep.nEvents) { if (! (tc = (XTimeCoord *) Xmalloc( (unsigned) (nbytes = (long) rep.nEvents * sizeof(XTimeCoord))))) { _XEatData (dpy, (unsigned long) nbytes); UnlockDisplay(dpy); SyncHandle(); return (NULL); } } *nEvents = rep.nEvents; nbytes = SIZEOF (xTimecoord); { register XTimeCoord *tcptr; register int i; xTimecoord xtc; for (i = rep.nEvents, tcptr = tc; i > 0; i--, tcptr++) { _XRead (dpy, (char *) &xtc, nbytes); tcptr->time = xtc.time; tcptr->x = cvtINT16toShort (xtc.x); tcptr->y = cvtINT16toShort (xtc.y); } } UnlockDisplay(dpy); SyncHandle(); return (tc); }
XTimeCoord *XGetMotionEvents( register Display *dpy, Window w, Time start, Time stop, int *nEvents) /* RETURN */ { xGetMotionEventsReply rep; register xGetMotionEventsReq *req; XTimeCoord *tc = NULL; LockDisplay(dpy); GetReq(GetMotionEvents, req); req->window = w; /* XXX is this right for all machines? */ req->start = start; req->stop = stop; if (!_XReply (dpy, (xReply *)&rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return (NULL); } if (rep.nEvents && (rep.nEvents < (INT_MAX / sizeof(XTimeCoord)))) tc = Xmalloc(rep.nEvents * sizeof(XTimeCoord)); if (tc == NULL) { /* server returned either no events or a bad event count */ *nEvents = 0; _XEatDataWords (dpy, rep.length); } else { register XTimeCoord *tcptr; unsigned int i; xTimecoord xtc; *nEvents = (int) rep.nEvents; for (i = rep.nEvents, tcptr = tc; i > 0; i--, tcptr++) { _XRead (dpy, (char *) &xtc, SIZEOF (xTimecoord)); tcptr->time = xtc.time; tcptr->x = cvtINT16toShort (xtc.x); tcptr->y = cvtINT16toShort (xtc.y); } } UnlockDisplay(dpy); SyncHandle(); return (tc); }