#include <u.h> | |
#include <sys/select.h> | |
#include <errno.h> | |
#include "x11-inc.h" | |
#include <libc.h> | |
#include <draw.h> | |
#include <memdraw.h> | |
#include <memlayer.h> | |
#include <keyboard.h> | |
#include <mouse.h> | |
#include <cursor.h> | |
#include <drawfcall.h> | |
#include "x11-memdraw.h" | |
#include "devdraw.h" | |
#undef time | |
#define MouseMask (\ | |
ButtonPressMask|\ | |
ButtonReleaseMask|\ | |
PointerMotionMask|\ | |
Button1MotionMask|\ | |
Button2MotionMask|\ | |
Button3MotionMask) | |
#define Mask MouseMask|ExposureMask|StructureNotifyMask|KeyPressMask|EnterWindowMask|LeaveWindowMask | |
void runxevent(XEvent*); | |
void | |
usage(void) | |
{ | |
fprint(2, "usage: snarf [-a] [-o | text]\n"); | |
exits("usage"); | |
} | |
void | |
main(int argc, char **argv) | |
{ | |
int apple; | |
int out; | |
apple = 0; | |
out = 0; | |
ARGBEGIN{ | |
case 'a': | |
apple = 1; | |
break; | |
case 'o': | |
out = 1; | |
break; | |
default: | |
usage(); | |
}ARGEND | |
if(out && argc != 0) | |
usage(); | |
if(!out && argc != 1) | |
usage(); | |
_x.fd = -1; | |
memimageinit(); | |
_xattach("snarf", "20x20"); | |
XSelectInput(_x.display, _x.drawable, Mask); | |
XFlush(_x.display); | |
if(out){ | |
char *s; | |
if(apple) | |
s = _applegetsnarf(); | |
else | |
s = _xgetsnarf(); | |
write(1, s, strlen(s)); | |
write(1, "\n", 1); | |
exits(0); | |
}else{ | |
_xputsnarf(argv[0]); | |
for(;;){ | |
XEvent event; | |
XNextEvent(_x.display, &event); | |
runxevent(&event); | |
} | |
} | |
} | |
/* | |
* Handle an incoming X event. | |
*/ | |
void | |
runxevent(XEvent *xev) | |
{ | |
switch(xev->type){ | |
case Expose: | |
_xexpose(xev); | |
break; | |
case DestroyNotify: | |
if(_xdestroy(xev)) | |
exits(0); | |
break; | |
case SelectionRequest: | |
_xselect(xev); | |
break; | |
} | |
} | |