xref: /plan9-contrib/sys/src/libdraw/readcolmap.c (revision b2d38b96edf6180e8fb9f7cdf9e8c22127cd764c)
17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <draw.h>
47dd7cddfSDavid du Colombier #include <bio.h>
57dd7cddfSDavid du Colombier 
67dd7cddfSDavid du Colombier static ulong
getval(char ** p)77dd7cddfSDavid du Colombier getval(char **p)
87dd7cddfSDavid du Colombier {
97dd7cddfSDavid du Colombier 	ulong v;
107dd7cddfSDavid du Colombier 	char *q;
117dd7cddfSDavid du Colombier 
127dd7cddfSDavid du Colombier 	v = strtoul(*p, &q, 0);
137dd7cddfSDavid du Colombier 	v |= v<<8;
147dd7cddfSDavid du Colombier 	v |= v<<16;
157dd7cddfSDavid du Colombier 	*p = q;
167dd7cddfSDavid du Colombier 	return v;
177dd7cddfSDavid du Colombier }
187dd7cddfSDavid du Colombier 
197dd7cddfSDavid du Colombier void
readcolmap(Display * d,RGB * colmap)207dd7cddfSDavid du Colombier readcolmap(Display *d, RGB *colmap)
217dd7cddfSDavid du Colombier {
227dd7cddfSDavid du Colombier 	int i;
237dd7cddfSDavid du Colombier 	char *p, *q;
247dd7cddfSDavid du Colombier 	Biobuf *b;
257dd7cddfSDavid du Colombier 	char buf[128];
267dd7cddfSDavid du Colombier 
277dd7cddfSDavid du Colombier 	USED(screen);
287dd7cddfSDavid du Colombier 
29*b2d38b96SDavid du Colombier 	snprint(buf, sizeof buf, "/dev/draw/%d/colormap", d->dirno);
307dd7cddfSDavid du Colombier 	b = Bopen(buf, OREAD);
317dd7cddfSDavid du Colombier 	if(b == 0)
327dd7cddfSDavid du Colombier 		drawerror(d, "rdcolmap: can't open colormap device");
337dd7cddfSDavid du Colombier 
347dd7cddfSDavid du Colombier 	for(;;) {
357dd7cddfSDavid du Colombier 		p = Brdline(b, '\n');
367dd7cddfSDavid du Colombier 		if(p == 0)
377dd7cddfSDavid du Colombier 			break;
387dd7cddfSDavid du Colombier 		i = strtoul(p, &q, 0);
397dd7cddfSDavid du Colombier 		if(i < 0 || i > 255) {
409a747e4fSDavid du Colombier 			fprint(2, "rdcolmap: bad index\n");
417dd7cddfSDavid du Colombier 			exits("bad");
427dd7cddfSDavid du Colombier 		}
437dd7cddfSDavid du Colombier 		p = q;
447dd7cddfSDavid du Colombier 		colmap[255-i].red = getval(&p);
457dd7cddfSDavid du Colombier 		colmap[255-i].green = getval(&p);
467dd7cddfSDavid du Colombier 		colmap[255-i].blue = getval(&p);
477dd7cddfSDavid du Colombier 	}
487dd7cddfSDavid du Colombier 	Bterm(b);
497dd7cddfSDavid du Colombier }
50