-/**/
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <X11/Xlib.h>
-#include <X11/extensions/XTest.h>
-
-#define eassert assert
-
-static Display *disp;
-static long id;
-
-static KeyCode keycode(const char *s) {
- KeySym sym= XStringToKeysym(s);
- return XKeysymToKeycode(disp,sym);
-}
-
-int main(int argc, const char *const *argv) {
- char *ep;
- XWindowAttributes attr;
- int xpos,ypos;
- unsigned width,height,bd,depth;
- int r;
-
- id= strtoul(*++argv,&ep,0);
- disp= XOpenDisplay(0); eassert(disp);
-
- r= XRaiseWindow(disp, id); eassert(r);
-
- r= XGetWindowAttributes(disp, id, &attr); eassert(r);
- r= XGetGeometry(disp,id, &attr.root,&xpos,&ypos,&width,&height, &bd,&depth);
- eassert(r);
-
- Window dummy;
- r= XTranslateCoordinates(disp, id,attr.root, 160,160, &xpos,&ypos,
- &dummy);
- eassert(r);
-
- int screen= XScreenNumberOfScreen(attr.screen);
- XTestFakeMotionEvent(disp,screen, xpos, ypos, 0);
- XTestFakeButtonEvent(disp,1,1, 0);
- XTestFakeButtonEvent(disp,1,0, 100);
-
- XTestFakeKeyEvent(disp, keycode("Next"),1, 100);
- XTestFakeKeyEvent(disp, keycode("Next"),0, 100);
-
-#if 0
-
- while (*++argv) {
-
- memset(&ev,0,sizeof(ev));
-#define KE ev.xkey
-#define ME ev.xbutton
-
- switch (**argv) {
- case 'r':
- break;
-
-#define KMEVENT(e,t) \
- e.type= t; \
- e.window= id; \
- e.root= attr.root; \
- e.x= atoi(*++argv); \
- e.y= atoi(*++argv); \
- e.x_root= e.x; \
- e.y_root= e.y; \
- e.same_screen= True; \
- kmevent(&ev); \
- break;
-
- case 'K': KE.keycode= ; KMEVENT(KE,KeyPress);
- case 'k': KE.keycode= keycode(*++argv); KMEVENT(KE,KeyRelease);
- case 'M': ME.button=1; KMEVENT(ME,ButtonPress);
- case 'm': ME.button=1; ME.state=Button1Mask; KMEVENT(ME,ButtonRelease);
- default:
- abort();
- }
- }
-
-#endif
- r= XSync(disp, False); eassert(r);
- exit(0);
-}