|  | #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); | 
|  | } |