+/*
+ */
+
+#include "ocr.h"
+
+#include <X11/Xlib.h>
+#include <X11/extensions/XTest.h>
+#include <X11/keysym.h>
+
+#define NUM_PAGES 25
+
+static Display *disp;
+
+static KeyCode keycode(KeySym sym) {
+ return XKeysymToKeycode(disp,sym);
+}
+
+static CanonImage *screenshot_now(Window id) {
+ char *cmd;
+ CanonImage *ci;
+ int r;
+
+ r= asprintf(&cmd, "xwd -silent -id 0x%lx | xwdtopnm", (unsigned long)id);
+ eassert(r>=0);
+ FILE *f= popen(cmd,"r"); eassert(f);
+ ci= file_read_image(f);
+ r= fgetc(f); eassert(r==EOF); eassert(feof(f));
+ r= pclose(f); eassert(r>=0); eassert(WIFEXITED(r) && !WEXITSTATUS(r));
+ free(cmd);
+ return ci;
+}
+
+static void read_pages(Window id) {
+ int r;
+ XWindowAttributes attr;
+ int xpos,ypos, evbase,errbase,majver,minver;
+ unsigned width,height,bd,depth;
+ Window dummy;
+
+ disp= XOpenDisplay(0); eassert(disp);
+
+ r= XTestQueryExtension(disp, &evbase,&errbase,&majver,&minver);
+ eassert(r==True);
+
+ 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);
+
+ 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, 50);
+
+ XTestFakeKeyEvent(disp, keycode(XK_Next),1, 50);
+ XTestFakeKeyEvent(disp, keycode(XK_Next),0, 50);
+
+ r= XSync(disp, False); eassert(r);
+}
+
+int main(int argc, char **argv) {
+ Window id;
+ CanonImage *ci;
+
+ id= strtoul(*++argv,0,0);
+ read_pages(id);
+ ci= screenshot_now(id);
+ return 0;
+}