Plan 9 from Bell Labs’s /usr/web/sources/contrib/quanstro/drawfunny/p9psrc/compose/page.c

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


#include "compose.h"

void
intimg(C *c, char *path, int fd)
{
	memset(c, 0, sizeof *c);
	c->path = path;
	c->fd = fd;

	if(c->fd == -1)
		c->fd = open(c->path, OREAD);
	if(c->fd == -1)
		sysfatal("open: %r");
}

Memimage*
pageimg(C *c, ulong chan)
{
	char *args[10];
	int i, p[2];
	Memimage *t;

	if(c->im)
		return c->im;
	if(pipe(p) == -1)
		sysfatal("pipe: %r");
	switch(fork()){
	case -1:
		sysfatal("fork: %r");
	case 0:
		i = 0;
		args[i++] = unsharp("#9/bin/imgtype");
		args[i++] = "imgtype";
		if(flag['t'])
			args[i++] = "-t";
		args[i++] = "-e";
		args[i] = nil;
		close(p[0]);
		close(0);
		dup(c->fd, 0);
		dup(p[1], 1);
		exec(args[0], args+1);
		sysfatal("exec: %r");
	}
	close(p[1]);
	c->im = readmemimage(p[0]);
	if(c->im == nil)
		sysfatal("readmemimage: %r");
	if(chan != 0){
		t = allocmemimage(c->im->r, chan);
		if(t == nil)
			sysfatal("readmemimage: %r");
		memfillcolor(t, DTransparent);
		memdraw(t, t->r, c->im, ZP, nil, ZP, SoverD);
		freememimage(c->im);
		c->im = t;
	}
	close(p[0]);
	return c->im;
}

void
closeimg(C *c)
{
	freememimage(c->im);
	c->im = nil;
	if(c->path)
		close(c->fd);
}

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.