// gcc -o em em.c -L/usr/X11R6/lib -I/usr/X11R6/include -lX11 #include #include #include #include #include #define MAX (20) const double c=0.3; const double d=0.92; int main (int argc, char *argv []) { double vx,vy; int ox,oy; int dw, dh; Display *dpy; Window rootwindow; dpy = XOpenDisplay (NULL); if(!dpy) return 1; rootwindow = DefaultRootWindow (dpy); dw = DisplayWidth (dpy, DefaultScreen (dpy)); dh = DisplayHeight (dpy, DefaultScreen (dpy)); ox=-1; vx=vy=0; for(;;){ int x, y, dummy; Window w=rootwindow; XQueryPointer (dpy, w, &w, &w, &x, &y, &dummy, &dummy, &dummy); if(ox>=0){ vx=(vx+((double)(x-ox))*c)*d; vy=(vy+((double)(y-oy))*c)*d; if(vx>MAX) vx=MAX; if(vx<-MAX) vx=-MAX; if(vy>MAX) vy=MAX; if(vy<-MAX) vy=-MAX; if(x+vx<0 || x+vx>=dw) vx*=-1; if(y+vy<0 || y+vy>=dh) vy*=-1; XWarpPointer (dpy, rootwindow, 0, 0, 0, 0, 0, (int)vx, (int)vy); } ox=x+(int)vx; oy=y+(int)vy; usleep(10000); } XCloseDisplay (dpy); }