xref: /inferno-os/libdraw/readcolmap.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include "lib9.h"
2*37da2899SCharles.Forsyth #include "draw.h"
3*37da2899SCharles.Forsyth #include "bio.h"
4*37da2899SCharles.Forsyth 
5*37da2899SCharles.Forsyth static ulong
getval(char ** p)6*37da2899SCharles.Forsyth getval(char **p)
7*37da2899SCharles.Forsyth {
8*37da2899SCharles.Forsyth 	ulong v;
9*37da2899SCharles.Forsyth 	char *q;
10*37da2899SCharles.Forsyth 
11*37da2899SCharles.Forsyth 	v = strtoul(*p, &q, 0);
12*37da2899SCharles.Forsyth 	v |= v<<8;
13*37da2899SCharles.Forsyth 	v |= v<<16;
14*37da2899SCharles.Forsyth 	*p = q;
15*37da2899SCharles.Forsyth 	return v;
16*37da2899SCharles.Forsyth }
17*37da2899SCharles.Forsyth 
18*37da2899SCharles.Forsyth void
readcolmap(Display * d,RGB * colmap)19*37da2899SCharles.Forsyth readcolmap(Display *d, RGB *colmap)
20*37da2899SCharles.Forsyth {
21*37da2899SCharles.Forsyth 	int i;
22*37da2899SCharles.Forsyth 	char *p, *q;
23*37da2899SCharles.Forsyth 	Biobuf *b;
24*37da2899SCharles.Forsyth 	char buf[128];
25*37da2899SCharles.Forsyth 
26*37da2899SCharles.Forsyth 	sprint(buf, "/dev/draw/%d/colormap", d->dirno);
27*37da2899SCharles.Forsyth 	b = Bopen(buf, OREAD);
28*37da2899SCharles.Forsyth 	if(b == 0)
29*37da2899SCharles.Forsyth 		drawerror(d, "rdcolmap: can't open colormap device");
30*37da2899SCharles.Forsyth 
31*37da2899SCharles.Forsyth 	for(;;) {
32*37da2899SCharles.Forsyth 		p = Brdline(b, '\n');
33*37da2899SCharles.Forsyth 		if(p == 0)
34*37da2899SCharles.Forsyth 			break;
35*37da2899SCharles.Forsyth 		i = strtoul(p, &q, 0);
36*37da2899SCharles.Forsyth 		if(i < 0 || i > 255) {
37*37da2899SCharles.Forsyth 			_drawprint(2, "rdcolmap: bad index\n");
38*37da2899SCharles.Forsyth 			exits("bad");
39*37da2899SCharles.Forsyth 		}
40*37da2899SCharles.Forsyth 		p = q;
41*37da2899SCharles.Forsyth 		colmap[255-i].red = getval(&p);
42*37da2899SCharles.Forsyth 		colmap[255-i].green = getval(&p);
43*37da2899SCharles.Forsyth 		colmap[255-i].blue = getval(&p);
44*37da2899SCharles.Forsyth 	}
45*37da2899SCharles.Forsyth 	Bterm(b);
46*37da2899SCharles.Forsyth }
47