home *** CD-ROM | disk | FTP | other *** search
- /* makedata.c - enhancement to basic code to create data.c HAM file */
- #include <stdio.h>
-
- printcomments()
- {
- printf("/* data.c - table of data for HAM routines. */\n\n");
- printf("/* color[16] - colormap containing rgb values fairly evenly */\n");
- printf("/* spread throughout 16x16x16 space. */\n");
- printf("/* near[4096] - table of distance. For each r,g,b */\n");
- printf("/* address = (r<<8 | g<<4 | b) & 0xfff */\n");
- printf("/* near>>4 gives the nearest color (index) and */\n");
- printf("/* near & 0x0f gives the distance. */\n");
- printf("/* nearmc[4096] - table of distance minus color */\n");
- printf("/* This contains the nearest color ignoring a color */\n");
- printf("/* (nearmc >> 8) & 0xf is for red, */\n");
- printf("/* (nearmc >> 4) & 0xf is for green, */\n");
- printf("/* and nearmc & 0xf is for blue */\n\n");
- }
-
- struct color {
- int red, green, blue;
- };
-
- struct color color[16] = {
- {0x0,0x0,0x0},
- {0x4,0x6,0x6},
- {0x3,0x7,0x2},
- {0xc,0x2,0x3},
- {0x3,0xd,0x3},
- {0x3,0x2,0xc},
- {0xc,0xc,0x2},
- {0xc,0x3,0xd},
- {0x3,0xc,0xd},
- {0xc,0xd,0xc},
- {0x0,0x8,0xa},
- {0x8,0x0,0x8},
- {0x8,0x8,0x0},
- {0xf,0x7,0x7},
- {0x8,0xf,0x8},
- {0x8,0x8,0xf}
- };
-
- main()
- {
- int r,g,b;
- int d,dd,n,i;
- int dr,dg,db, ddr,ddg,ddb, nr,ng,nb;
-
- printcomments();
-
- printf("#include <exec/types.h>\n\n");
- printf("UWORD colortable[16] = {\n");
- for (i=0; i<15; i++)
- printf("\t0x%01x%01x%01x,\n",
- color[i].red,color[i].green,color[i].blue);
- printf("\t0x%01x%01x%01x\n",
- color[i].red,color[i].green,color[i].blue);
- printf("};\n\n");
- printf("UBYTE near[4096] = {\n");
- for (r = 0; r < 16; r++) {
- for (g = 0; g < 16; g++) {
- printf("\t");
- for (b = 0; b < 16; b++) {
- d = 10000;
- for (i = 0; i < 16; i++) {
- dd = abs(r - color[i].red) +
- abs(g - color[i].green) +
- abs(b - color[i].blue);
- if (dd < d) {
- d = dd;
- n = i;
- }
- }
- printf("0x%01x%01x",n,d);
- if (b < 15) printf(", ");
- else if ((r < 15) || (g < 15)) printf(",\n");
- else printf("\n");
- if (b == 7) printf("\n\t");
- }
- }
- }
- printf("};\n\n");
-
- printf("UWORD nearmc[4096] = {\n");
- for (r = 0; r < 16; r++) {
- for (g = 0; g < 16; g++) {
- printf("\t");
- for (b = 0; b < 16; b++) {
- dr = 10000;
- dg = 10000;
- db = 10000;
- for (i = 0; i < 16; i++) {
- ddr = abs(g -color[i].green) + abs(b - color[i].blue );
- ddg = abs(r -color[i].red ) + abs(b - color[i].blue );
- ddb = abs(r -color[i].red ) + abs(g - color[i].green);
- if (ddr < dr) { dr = ddr; nr = i;}
- if (ddg < dg) { dg = ddg; ng = i;}
- if (ddb < db) { db = ddb; nb = i;}
- }
- printf("0x%01x%01x%01x",nr,ng,nb);
- if (b < 15) printf(", ");
- else if ((r < 15) || (g < 15)) printf(",\n");
- else printf("\n");
- if (b == 7) printf("\n\t");
- }
- }
- }
- printf("};\n");
- }
-