Blame


1 0335ceae 2007-05-03 devnull #include <u.h>
2 0335ceae 2007-05-03 devnull #include <sys/select.h>
3 0335ceae 2007-05-03 devnull #include <errno.h>
4 0335ceae 2007-05-03 devnull #include "x11-inc.h"
5 0335ceae 2007-05-03 devnull #include <libc.h>
6 0335ceae 2007-05-03 devnull #include <draw.h>
7 0335ceae 2007-05-03 devnull #include <memdraw.h>
8 0335ceae 2007-05-03 devnull #include <memlayer.h>
9 0335ceae 2007-05-03 devnull #include <keyboard.h>
10 0335ceae 2007-05-03 devnull #include <mouse.h>
11 0335ceae 2007-05-03 devnull #include <cursor.h>
12 0335ceae 2007-05-03 devnull #include <drawfcall.h>
13 0335ceae 2007-05-03 devnull #include "x11-memdraw.h"
14 0335ceae 2007-05-03 devnull #include "devdraw.h"
15 0335ceae 2007-05-03 devnull
16 0335ceae 2007-05-03 devnull #undef time
17 0335ceae 2007-05-03 devnull
18 0335ceae 2007-05-03 devnull #define MouseMask (\
19 0335ceae 2007-05-03 devnull ButtonPressMask|\
20 0335ceae 2007-05-03 devnull ButtonReleaseMask|\
21 0335ceae 2007-05-03 devnull PointerMotionMask|\
22 0335ceae 2007-05-03 devnull Button1MotionMask|\
23 0335ceae 2007-05-03 devnull Button2MotionMask|\
24 0335ceae 2007-05-03 devnull Button3MotionMask)
25 0335ceae 2007-05-03 devnull
26 0335ceae 2007-05-03 devnull #define Mask MouseMask|ExposureMask|StructureNotifyMask|KeyPressMask|EnterWindowMask|LeaveWindowMask
27 0335ceae 2007-05-03 devnull
28 0335ceae 2007-05-03 devnull void runxevent(XEvent*);
29 0335ceae 2007-05-03 devnull
30 0335ceae 2007-05-03 devnull void
31 0335ceae 2007-05-03 devnull usage(void)
32 0335ceae 2007-05-03 devnull {
33 0335ceae 2007-05-03 devnull fprint(2, "usage: snarf [-a] [-o | text]\n");
34 0335ceae 2007-05-03 devnull exits("usage");
35 0335ceae 2007-05-03 devnull }
36 0335ceae 2007-05-03 devnull
37 0335ceae 2007-05-03 devnull void
38 0335ceae 2007-05-03 devnull main(int argc, char **argv)
39 0335ceae 2007-05-03 devnull {
40 0335ceae 2007-05-03 devnull int apple;
41 0335ceae 2007-05-03 devnull int out;
42 0335ceae 2007-05-03 devnull
43 0335ceae 2007-05-03 devnull apple = 0;
44 0335ceae 2007-05-03 devnull out = 0;
45 0335ceae 2007-05-03 devnull
46 0335ceae 2007-05-03 devnull ARGBEGIN{
47 0335ceae 2007-05-03 devnull case 'a':
48 0335ceae 2007-05-03 devnull apple = 1;
49 0335ceae 2007-05-03 devnull break;
50 0335ceae 2007-05-03 devnull case 'o':
51 0335ceae 2007-05-03 devnull out = 1;
52 0335ceae 2007-05-03 devnull break;
53 0335ceae 2007-05-03 devnull default:
54 0335ceae 2007-05-03 devnull usage();
55 0335ceae 2007-05-03 devnull }ARGEND
56 0335ceae 2007-05-03 devnull
57 0335ceae 2007-05-03 devnull if(out && argc != 0)
58 0335ceae 2007-05-03 devnull usage();
59 0335ceae 2007-05-03 devnull if(!out && argc != 1)
60 0335ceae 2007-05-03 devnull usage();
61 0335ceae 2007-05-03 devnull
62 0335ceae 2007-05-03 devnull _x.fd = -1;
63 0335ceae 2007-05-03 devnull
64 0335ceae 2007-05-03 devnull memimageinit();
65 0335ceae 2007-05-03 devnull _xattach("snarf", "20x20");
66 0335ceae 2007-05-03 devnull
67 0335ceae 2007-05-03 devnull XSelectInput(_x.display, _x.drawable, Mask);
68 0335ceae 2007-05-03 devnull XFlush(_x.display);
69 0335ceae 2007-05-03 devnull
70 0335ceae 2007-05-03 devnull if(out){
71 0335ceae 2007-05-03 devnull char *s;
72 0335ceae 2007-05-03 devnull if(apple)
73 0335ceae 2007-05-03 devnull s = _applegetsnarf();
74 0335ceae 2007-05-03 devnull else
75 0335ceae 2007-05-03 devnull s = _xgetsnarf();
76 0335ceae 2007-05-03 devnull write(1, s, strlen(s));
77 0335ceae 2007-05-03 devnull write(1, "\n", 1);
78 0335ceae 2007-05-03 devnull exits(0);
79 0335ceae 2007-05-03 devnull }else{
80 0335ceae 2007-05-03 devnull _xputsnarf(argv[0]);
81 0335ceae 2007-05-03 devnull for(;;){
82 0335ceae 2007-05-03 devnull XEvent event;
83 0335ceae 2007-05-03 devnull XNextEvent(_x.display, &event);
84 0335ceae 2007-05-03 devnull runxevent(&event);
85 0335ceae 2007-05-03 devnull }
86 0335ceae 2007-05-03 devnull }
87 0335ceae 2007-05-03 devnull }
88 0335ceae 2007-05-03 devnull
89 0335ceae 2007-05-03 devnull /*
90 0335ceae 2007-05-03 devnull * Handle an incoming X event.
91 0335ceae 2007-05-03 devnull */
92 0335ceae 2007-05-03 devnull void
93 0335ceae 2007-05-03 devnull runxevent(XEvent *xev)
94 0335ceae 2007-05-03 devnull {
95 0335ceae 2007-05-03 devnull switch(xev->type){
96 0335ceae 2007-05-03 devnull case Expose:
97 0335ceae 2007-05-03 devnull _xexpose(xev);
98 0335ceae 2007-05-03 devnull break;
99 0335ceae 2007-05-03 devnull
100 0335ceae 2007-05-03 devnull case DestroyNotify:
101 0335ceae 2007-05-03 devnull if(_xdestroy(xev))
102 0335ceae 2007-05-03 devnull exits(0);
103 0335ceae 2007-05-03 devnull break;
104 0335ceae 2007-05-03 devnull
105 0335ceae 2007-05-03 devnull case SelectionRequest:
106 0335ceae 2007-05-03 devnull _xselect(xev);
107 0335ceae 2007-05-03 devnull break;
108 0335ceae 2007-05-03 devnull }
109 0335ceae 2007-05-03 devnull }
110 0335ceae 2007-05-03 devnull