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