//example usage: ./mtrack | ../pincushion/telepoint -b2400 #include #include #define X_MAX 639 #define Y_MAX 479 int delay; int main( int argc, char **argv ) { Display* display; char *display_name = (char *)getenv("DISPLAY"); int root_x, root_y; int win_x, win_y; Window root_w, child_w; unsigned int mask; int screen_num; if( argc > 1 ) { delay = atoi(argv[1]); } else { delay = 25000; } display = XOpenDisplay(display_name); screen_num = DefaultScreen(display); if (display == NULL) { fprintf(stderr,"%s: cannot connect to X server '%s'\n",argv[0],display_name); return 1; } while(1){ XQueryPointer(display, RootWindow(display, screen_num), &root_w, &child_w, &root_x, &root_y, &win_x, &win_y, &mask); //printf("%d,%d\n", adjustX(root_x), adjustY(root_y) ); printf("%d,%d\n", adjustX(win_x), adjustY(win_y) ); fflush(stdout); usleep(delay); } XCloseDisplay(display); return 0; } int adjustX( x_val ) { int result; result = ((int)(((float)x_val/(float)X_MAX) * 255 )); if( result > 255 ) result = 255; else if( result < 0 ) result = 0; return result; } int adjustY( y_val ) { int result; float ratio; ratio = (float)Y_MAX/(float)X_MAX; result = 255 - (int)( ( ( (float)y_val/(float)Y_MAX ) * 255 ) * ratio ); if( result > 255 ) result = 255; else if( result < 0 ) result = 0; return result; }