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