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); }