xref: /inferno-os/libdraw/writecolmap.c (revision b43c1ca5eb5fc65b93ae935a568432712797b049)
1 #include "lib9.h"
2 #include "draw.h"
3 #include "kernel.h"
4 
5 /*
6  * This code (and the devdraw interface) will have to change
7  * if we ever get bitmaps with ldepth > 3, because the
8  * colormap will have to be written in chunks
9  */
10 
11 void
12 writecolmap(Display *d, RGB *m)
13 {
14 	int i, n, fd;
15 	char buf[64], *t;
16 	ulong r, g, b;
17 
18 	sprint(buf, "/dev/draw/%d/colormap", d->dirno);
19 	fd = open(buf, OWRITE);
20 	if(fd < 0)
21 		drawerror(d, "wrcolmap: open colormap failed");
22 	t = malloc(8192);
23 	if(t == nil)
24 		return;
25 	n = 0;
26 	for(i = 0; i < 256; i++) {
27 		r = m[i].red>>24;
28 		g = m[i].green>>24;
29 		b = m[i].blue>>24;
30 		n += sprint(t+n, "%d %lud %lud %lud\n", 255-i, r, g, b);
31 	}
32 	i = libwrite(fd, t, n);
33 	free(t);
34 	close(fd);
35 	if(i != n)
36 		drawerror(d, "wrcolmap: bad write");
37 }
38