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