aboutsummaryrefslogtreecommitdiff
path: root/src/libmemdraw/mkcmap.c
blob: e8d5efc394486da4f81a362839441ed54c1f5030 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <u.h>
#include <libc.h>
#include <draw.h>
#include <memdraw.h>

/*
struct Memcmap
{
	uchar	cmap2rgb[3*256];
	uchar	rgb2cmap[16*16*16];
};
*/

static Memcmap*
mkcmap(void)
{
	static Memcmap def;

	int i, rgb, r, g, b;

	for(i=0; i<256; i++){
		rgb = cmap2rgb(i);
		r = (rgb>>16)&0xff;
		g = (rgb>>8)&0xff;
		b = rgb&0xff;
		def.cmap2rgb[3*i] = r;
		def.cmap2rgb[3*i+1] = g;
		def.cmap2rgb[3*i+2] = b;
	}

	for(r=0; r<16; r++)
	for(g=0; g<16; g++)
	for(b=0; b<16; b++)
		def.rgb2cmap[r*16*16+g*16+b] = rgb2cmap(r*0x11, g*0x11, b*0x11);
	return &def;
}

void
main(int argc, char **argv)
{
	Memcmap *c;
	int i, j, inferno;

	inferno = 0;
	ARGBEGIN{
	case 'i':
		inferno = 1;
	}ARGEND

	memimageinit();
	c = mkcmap();
	if(!inferno)
		print("#include <u.h>\n#include <libc.h>\n");
	else
		print("#include \"lib9.h\"\n");
	print("#include <draw.h>\n");
	print("#include <memdraw.h>\n\n");
	print("static Memcmap def = {\n");
	print("/* cmap2rgb */ {\n");
	for(i=0; i<sizeof(c->cmap2rgb); ){
		print("\t");
		for(j=0; j<16; j++, i++)
			print("0x%2.2ux,", c->cmap2rgb[i]);
		print("\n");
	}
	print("},\n");
	print("/* rgb2cmap */ {\n");
	for(i=0; i<sizeof(c->rgb2cmap);){
		print("\t");
		for(j=0; j<16; j++, i++)
			print("0x%2.2ux,", c->rgb2cmap[i]);
		print("\n");
	}
	print("}\n");
	print("};\n");
	print("Memcmap *memdefcmap = &def;\n");
	print("void _memmkcmap(void){}\n");
	exits(0);
}