xref: /plan9/sys/src/libmemdraw/mkcmap.c (revision 3ff48bf5ed603850fcd251ddf13025d23d693782)
1*3ff48bf5SDavid du Colombier #include <u.h>
2*3ff48bf5SDavid du Colombier #include <libc.h>
3*3ff48bf5SDavid du Colombier #include <draw.h>
4*3ff48bf5SDavid du Colombier #include <memdraw.h>
5*3ff48bf5SDavid du Colombier 
6*3ff48bf5SDavid du Colombier /*
7*3ff48bf5SDavid du Colombier struct Memcmap
8*3ff48bf5SDavid du Colombier {
9*3ff48bf5SDavid du Colombier 	uchar	cmap2rgb[3*256];
10*3ff48bf5SDavid du Colombier 	uchar	rgb2cmap[16*16*16];
11*3ff48bf5SDavid du Colombier };
12*3ff48bf5SDavid du Colombier */
13*3ff48bf5SDavid du Colombier 
14*3ff48bf5SDavid du Colombier static Memcmap*
mkcmap(void)15*3ff48bf5SDavid du Colombier mkcmap(void)
16*3ff48bf5SDavid du Colombier {
17*3ff48bf5SDavid du Colombier 	static Memcmap def;
18*3ff48bf5SDavid du Colombier 
19*3ff48bf5SDavid du Colombier 	int i, rgb, r, g, b;
20*3ff48bf5SDavid du Colombier 
21*3ff48bf5SDavid du Colombier 	for(i=0; i<256; i++){
22*3ff48bf5SDavid du Colombier 		rgb = cmap2rgb(i);
23*3ff48bf5SDavid du Colombier 		r = (rgb>>16)&0xff;
24*3ff48bf5SDavid du Colombier 		g = (rgb>>8)&0xff;
25*3ff48bf5SDavid du Colombier 		b = rgb&0xff;
26*3ff48bf5SDavid du Colombier 		def.cmap2rgb[3*i] = r;
27*3ff48bf5SDavid du Colombier 		def.cmap2rgb[3*i+1] = g;
28*3ff48bf5SDavid du Colombier 		def.cmap2rgb[3*i+2] = b;
29*3ff48bf5SDavid du Colombier 	}
30*3ff48bf5SDavid du Colombier 
31*3ff48bf5SDavid du Colombier 	for(r=0; r<16; r++)
32*3ff48bf5SDavid du Colombier 	for(g=0; g<16; g++)
33*3ff48bf5SDavid du Colombier 	for(b=0; b<16; b++)
34*3ff48bf5SDavid du Colombier 		def.rgb2cmap[r*16*16+g*16+b] = rgb2cmap(r*0x11, g*0x11, b*0x11);
35*3ff48bf5SDavid du Colombier 	return &def;
36*3ff48bf5SDavid du Colombier }
37*3ff48bf5SDavid du Colombier 
38*3ff48bf5SDavid du Colombier void
main(int argc,char ** argv)39*3ff48bf5SDavid du Colombier main(int argc, char **argv)
40*3ff48bf5SDavid du Colombier {
41*3ff48bf5SDavid du Colombier 	Memcmap *c;
42*3ff48bf5SDavid du Colombier 	int i, j, inferno;
43*3ff48bf5SDavid du Colombier 
44*3ff48bf5SDavid du Colombier 	inferno = 0;
45*3ff48bf5SDavid du Colombier 	ARGBEGIN{
46*3ff48bf5SDavid du Colombier 	case 'i':
47*3ff48bf5SDavid du Colombier 		inferno = 1;
48*3ff48bf5SDavid du Colombier 	}ARGEND
49*3ff48bf5SDavid du Colombier 
50*3ff48bf5SDavid du Colombier 	memimageinit();
51*3ff48bf5SDavid du Colombier 	c = mkcmap();
52*3ff48bf5SDavid du Colombier 	if(!inferno)
53*3ff48bf5SDavid du Colombier 		print("#include <u.h>\n#include <libc.h>\n");
54*3ff48bf5SDavid du Colombier 	else
55*3ff48bf5SDavid du Colombier 		print("#include \"lib9.h\"\n");
56*3ff48bf5SDavid du Colombier 	print("#include <draw.h>\n");
57*3ff48bf5SDavid du Colombier 	print("#include <memdraw.h>\n\n");
58*3ff48bf5SDavid du Colombier 	print("static Memcmap def = {\n");
59*3ff48bf5SDavid du Colombier 	print("/* cmap2rgb */ {\n");
60*3ff48bf5SDavid du Colombier 	for(i=0; i<sizeof(c->cmap2rgb); ){
61*3ff48bf5SDavid du Colombier 		print("\t");
62*3ff48bf5SDavid du Colombier 		for(j=0; j<16; j++, i++)
63*3ff48bf5SDavid du Colombier 			print("0x%2.2ux,", c->cmap2rgb[i]);
64*3ff48bf5SDavid du Colombier 		print("\n");
65*3ff48bf5SDavid du Colombier 	}
66*3ff48bf5SDavid du Colombier 	print("},\n");
67*3ff48bf5SDavid du Colombier 	print("/* rgb2cmap */ {\n");
68*3ff48bf5SDavid du Colombier 	for(i=0; i<sizeof(c->rgb2cmap);){
69*3ff48bf5SDavid du Colombier 		print("\t");
70*3ff48bf5SDavid du Colombier 		for(j=0; j<16; j++, i++)
71*3ff48bf5SDavid du Colombier 			print("0x%2.2ux,", c->rgb2cmap[i]);
72*3ff48bf5SDavid du Colombier 		print("\n");
73*3ff48bf5SDavid du Colombier 	}
74*3ff48bf5SDavid du Colombier 	print("}\n");
75*3ff48bf5SDavid du Colombier 	print("};\n");
76*3ff48bf5SDavid du Colombier 	print("Memcmap *memdefcmap = &def;\n");
77*3ff48bf5SDavid du Colombier 	print("void _memmkcmap(void){}\n");
78*3ff48bf5SDavid du Colombier 	exits(0);
79*3ff48bf5SDavid du Colombier }
80