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