110 lines · 1.5 KB · C
RawDownload
#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*); voidusage(void){	fprint(2, "usage: snarf [-a] [-o | text]\n");	exits("usage");} voidmain(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. */voidrunxevent(XEvent *xev){	switch(xev->type){	case Expose:		_xexpose(xev);		break;		case DestroyNotify:		if(_xdestroy(xev))			exits(0);		break; 	case SelectionRequest:		_xselect(xev);		break;	}}