ref: 15fb95683835a788826d0826f28e88fcd68ea85d
dir: /drawmgr/drawmgr.c/
#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);
}