home *** CD-ROM | disk | FTP | other *** search
/ Computerworld 1996 March / Computerworld_1996-03_cd.bin / idg_cd3 / grafika / fraktaly / frasr192 / loadmap.c < prev    next >
C/C++ Source or Header  |  1995-03-21  |  2KB  |  85 lines

  1. /** loadmap.c **/
  2.  
  3.  
  4. #include    <stdio.h>
  5. #include    <stdlib.h>
  6. #ifndef XFRACT
  7. #include    <dos.h>
  8. #endif
  9. #include    <string.h>
  10. #include    "fractint.h"
  11. #include    "prototyp.h"
  12.  
  13. /***************************************************************************/
  14.  
  15. #define dac ((Palettetype *)dacbox)
  16.  
  17. void SetTgaColors() {
  18. unsigned    r, g, b, index;
  19.     if (tga16 != NULL)
  20.     for( index = 0; index < 256; index++ ) {
  21.         r = dac[index].red    << 2;
  22.         g = dac[index].green << 2;
  23.         b = dac[index].blue    << 2;
  24.         tga16[index] = ((r&248)<<7) | ((g&248)<<2) | (b>>3);
  25.         tga32[index] = ((long)r<<16) | (g<<8) | b;
  26.     }
  27. }
  28.  
  29. int ValidateLuts( char * fn )
  30. {
  31. FILE * f;
  32. unsigned    r, g, b, index;
  33. char    line[160];
  34. char    temp[81];
  35.     strcpy(temp,MAP_name); 
  36.         merge_pathnames(temp,fn,0);
  37.     if (has_ext(temp) == NULL) /* Did name have an extension? */
  38.         strcat(temp,".map");  /* No? Then add .map */
  39.     findpath( temp, line);          /* search the dos path */
  40.     f = fopen( line, "r" );
  41.     if (f == NULL) {
  42.         sprintf(line,"Could not load color map %s",fn);
  43.         stopmsg(0,line);
  44.         return 1;
  45.         }
  46.     for( index = 0; index < 256; index++ ) {
  47.         if (fgets(line,100,f) == NULL)
  48.             break;
  49.         sscanf( line, "%u %u %u", &r, &g, &b );
  50.         /** load global dac values **/
  51.         dac[index].red   = (BYTE)((r%256) >> 2);/* maps default to 8 bits */
  52.         dac[index].green = (BYTE)((g%256) >> 2);/* DAC wants 6 bits */
  53.         dac[index].blue  = (BYTE)((b%256) >> 2);
  54.     }
  55.     fclose( f );
  56.     while (index < 256)  { /* zap unset entries */
  57.         dac[index].red = dac[index].blue = dac[index].green = 40;
  58.         ++index;
  59.     }
  60.     SetTgaColors();
  61.     colorstate = 2;
  62.     strcpy(colorfile,fn);
  63.     return 0;
  64. }
  65.  
  66.  
  67. /***************************************************************************/
  68.  
  69. int SetColorPaletteName( char * fn )
  70. {
  71.     if( ValidateLuts( fn ) != 0)
  72.         return 1;
  73.     if( mapdacbox == NULL && (mapdacbox = farmemalloc(768L)) == NULL) {
  74.         static FCODE o_msg[]={"Insufficient memory for color map."};
  75.         char msg[sizeof(o_msg)];
  76.         far_strcpy(msg,o_msg);
  77.         stopmsg(0,msg);
  78.         return 1;
  79.         }
  80.     far_memcpy((char far *)mapdacbox,(char far *)dacbox,768);
  81.     /* PB, 900829, removed atexit(RestoreMap) stuff, goodbye covers it */
  82.     return 0;
  83. }
  84.  
  85.