home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 120.lha / AnimBalls / makedata.c < prev    next >
C/C++ Source or Header  |  1986-11-20  |  3KB  |  110 lines

  1. /* makedata.c - enhancement to basic code to create data.c HAM file */
  2. #include <stdio.h>
  3.  
  4. printcomments()
  5. {
  6.   printf("/* data.c - table of data for HAM routines.                 */\n\n");
  7.   printf("/* color[16] - colormap containing rgb values fairly evenly */\n");
  8.   printf("/*             spread throughout 16x16x16 space.            */\n");
  9.   printf("/* near[4096] - table of distance. For each r,g,b           */\n");
  10.   printf("/*              address = (r<<8 | g<<4 | b) & 0xfff         */\n");
  11.   printf("/*              near>>4 gives the nearest color (index) and */\n");
  12.   printf("/*              near & 0x0f gives the distance.             */\n");
  13.   printf("/* nearmc[4096] - table of distance minus color             */\n");
  14.   printf("/*       This contains the nearest color ignoring a color   */\n");
  15.   printf("/*       (nearmc >> 8) & 0xf is for red,                    */\n");
  16.   printf("/*       (nearmc >> 4) & 0xf is for green,                  */\n");
  17.   printf("/*       and nearmc & 0xf is for blue                       */\n\n");
  18. }  
  19.  
  20. struct color {
  21.     int red, green, blue;
  22. };
  23.  
  24. struct color color[16] = {
  25.     {0x0,0x0,0x0},
  26.     {0x4,0x6,0x6},
  27.     {0x3,0x7,0x2},
  28.     {0xc,0x2,0x3},
  29.     {0x3,0xd,0x3},
  30.     {0x3,0x2,0xc},
  31.     {0xc,0xc,0x2},
  32.     {0xc,0x3,0xd},
  33.     {0x3,0xc,0xd},
  34.     {0xc,0xd,0xc},
  35.     {0x0,0x8,0xa},
  36.     {0x8,0x0,0x8},
  37.     {0x8,0x8,0x0},
  38.     {0xf,0x7,0x7},
  39.     {0x8,0xf,0x8},
  40.     {0x8,0x8,0xf}
  41. };
  42.  
  43. main()
  44. {
  45.     int r,g,b;
  46.     int d,dd,n,i;
  47.     int dr,dg,db, ddr,ddg,ddb, nr,ng,nb;
  48.  
  49.     printcomments();
  50.  
  51.     printf("#include <exec/types.h>\n\n");
  52.     printf("UWORD colortable[16] = {\n");
  53.     for (i=0; i<15; i++)
  54.         printf("\t0x%01x%01x%01x,\n",
  55.             color[i].red,color[i].green,color[i].blue);
  56.     printf("\t0x%01x%01x%01x\n",
  57.         color[i].red,color[i].green,color[i].blue);
  58.     printf("};\n\n");
  59.     printf("UBYTE near[4096] = {\n");
  60.     for (r = 0; r < 16; r++) {
  61.        for (g = 0; g < 16; g++) {
  62.           printf("\t");
  63.           for (b = 0; b < 16; b++) {
  64.          d = 10000;
  65.          for (i = 0; i < 16; i++) {
  66.             dd = abs(r - color[i].red) +
  67.                  abs(g - color[i].green) +
  68.              abs(b - color[i].blue);
  69.             if (dd < d) {
  70.                  d = dd;
  71.              n = i;
  72.             }
  73.          }
  74.          printf("0x%01x%01x",n,d);
  75.          if (b < 15) printf(", ");
  76.          else if ((r < 15) || (g < 15)) printf(",\n");
  77.          else printf("\n");
  78.          if (b == 7) printf("\n\t");
  79.           }
  80.        }
  81.     }
  82.     printf("};\n\n");
  83.  
  84.     printf("UWORD nearmc[4096] = {\n");
  85.     for (r = 0; r < 16; r++) {
  86.        for (g = 0; g < 16; g++) {
  87.           printf("\t");
  88.           for (b = 0; b < 16; b++) {
  89.          dr = 10000;
  90.          dg = 10000;
  91.          db = 10000;
  92.          for (i = 0; i < 16; i++) {
  93.             ddr = abs(g -color[i].green) + abs(b - color[i].blue );
  94.             ddg = abs(r -color[i].red  ) + abs(b - color[i].blue );
  95.             ddb = abs(r -color[i].red  ) + abs(g - color[i].green);
  96.             if (ddr < dr) { dr = ddr; nr = i;}
  97.             if (ddg < dg) { dg = ddg; ng = i;}
  98.             if (ddb < db) { db = ddb; nb = i;}
  99.          }
  100.          printf("0x%01x%01x%01x",nr,ng,nb);
  101.          if (b < 15) printf(", ");
  102.          else if ((r < 15) || (g < 15)) printf(",\n");
  103.          else printf("\n");
  104.          if (b == 7) printf("\n\t");
  105.           }
  106.        }
  107.     }
  108.     printf("};\n");
  109. }
  110.