shithub: drawfs

ref: 15fb95683835a788826d0826f28e88fcd68ea85d
dir: /drawmgr/drawmgr.c/

View raw version
#include <u.h>
#include <libc.h>
#include <draw.h>

void
usage(void)
{
	fprint(2, "usage: %s\n", argv0);
	exits("usage");
}

int drawdispfd;
int drawcmdfd;

void
eresized(int new)
{
	Image *tmpimg;
	Point size;
	uchar buf[1+4+4];
	
	if (new && getwindow(display, Refnone) < 0)
		sysfatal("can't reattach to window: %r");
	
	size.x = Dx(screen->r);
	size.y = Dy(screen->r);
	
	buf[0] = 'r';
	BPLONG(buf+1, size.x);
	BPLONG(buf+5, size.y);
	write(drawcmdfd, buf, 1+4+4);
	
	seek(drawdispfd, 0, 0);
	tmpimg = readimage(display, drawdispfd, 0);
	if (!tmpimg)
		sysfatal("%r");
	draw(screen, screen->r, tmpimg, nil, ZP);
	freeimage(tmpimg);
}

void
main(int argc, char **argv)
{
	char file[256];
	char *name = nil;
	
	ARGBEGIN{
	case 'n':
		name = EARGF(usage());
		break;
	default:
		usage();
		break;
	}ARGEND;
	
	if (!name || !name[0])
		usage();
	
	if (strlen(name) + strlen("/srv/drawfs..display") + 2 > 256)
		sysfatal("error: name too long: %s\n", name);
	
	snprint(file, sizeof file, "/srv/drawfs.%s.display", name);
	drawdispfd = open(file, OREAD);
	if (drawdispfd < 0)
		sysfatal("%r");
	
	snprint(file, sizeof file, "/srv/drawfs.%s.cmd", name);
	drawcmdfd = open(file, ORDWR);
	if (drawcmdfd < 0)
		sysfatal("%r");
	
	if (initdraw(nil, nil, "drawmgr") < 0)
		sysfatal("initdraw: %r");
	
	eresized(0);
}