home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Games / flying-6.11 / rgb.C < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-30  |  3.1 KB  |  132 lines

  1. #ifndef _global_h
  2. #    include "global.h"
  3. #endif
  4. #ifndef _rgb_h
  5. #    include "rgb.h"
  6. #endif
  7.  
  8. #define    RGB_FILE        "rgb.txt"
  9.  
  10. int RGBColor::SetColor( const char *name ) {
  11. FILE    *fp;
  12. char    buffer[80];
  13. char    *bp;
  14. int    name_len = strlen(name);
  15.  
  16.     if (!SetInternalColor(name))        return 0;
  17.  
  18.     fp = fopen( RGB_FILE, "r" );
  19.     if (!fp) {
  20.         fp = fopen( "\\borlandc\\bgi\\" RGB_FILE, "r" );
  21.         if (!fp) {
  22.             fp = fopen( "\\" RGB_FILE, "r" );
  23.         }
  24.     }
  25.     if (!fp) {
  26.         fprintf( stderr, "missing colorfile '%s'\n", RGB_FILE );
  27.         return -1;
  28.     }
  29.  
  30.     while( (bp=fgets( buffer, sizeof(buffer), fp))!=0 ) {
  31.         if ( (buffer[24+name_len]=='\n')
  32.             && (!strncmp( buffer+24, name, name_len )) )    break;    // gesucher Name ?
  33.     }
  34.     fclose(fp);
  35.  
  36.     if (bp) {
  37.         // BINGO
  38.         if (sscanf(buffer, "%d %d %d", &red, &green, &blue)==3)    return 0;
  39.         fprintf( stderr, "bad syntax for colorname '%s'\n", name );
  40.         fprintf( stderr, "%s\n", buffer );
  41.         return -1;
  42.     }
  43.  
  44.     fprintf( stderr, "colorname '%s' not found.\n", name );
  45.     return -1;
  46. }
  47.  
  48.  
  49. typedef struct {
  50.     const char        *name;
  51.     unsigned short    r,g,b;
  52. } RGBValue;
  53.  
  54. static RGBValue coltab[] = {
  55. { "Brown", 165, 42, 42 },
  56. { "DarkGoldenrod", 184, 134, 11 },
  57. { "DarkGoldenrod1", 255, 185, 15 },
  58. { "DarkGreen", 0, 86, 45 },
  59. { "DarkViolet", 148, 0, 211 },
  60. { "DeepSkyBlue", 0, 191, 255 },
  61. { "HotPink3", 205, 96, 144 },
  62. { "LightSalmon", 255, 160, 122 },
  63. { "LightSalmon2", 238, 149, 114 },
  64. { "LightSteelBlue", 124, 152, 211 },
  65. { "LightSteelBlue3", 162, 181, 205 },
  66. { "LightSteelBlue4", 110, 123, 139 },
  67. { "LimeGreen", 0, 175, 20 },
  68. { "Maroon", 143, 0, 82 },
  69. { "MediumAquamarine", 0, 147, 143 },
  70. { "MediumForestGreen", 50, 129, 75 },
  71. { "MidnightBlue", 47, 47, 100 },
  72. { "Navy", 35, 35, 117 },
  73. { "PaleTurquoise", 175, 238, 238 },
  74. { "RosyBrown", 188, 143, 143 },
  75. { "SeaGreen", 82, 149, 132 },
  76. { "SteelBlue", 84, 112, 170 },
  77. { "Tan", 222, 184, 135 },
  78. { "White", 255, 255, 255 },
  79. { "bisque", 255, 228, 196 },
  80. { "black", 0, 0, 0 },
  81. { "blue", 0, 0, 255 },
  82. { "brown", 165, 42, 42 },
  83. { "brown4", 139, 35, 35 },
  84. { "coral2", 238, 106, 80 },
  85. { "coral3", 205, 91, 69 },
  86. { "coral4", 139, 62, 47 },
  87. { "cyan", 0, 255, 255 },
  88. { "gold1", 255, 215, 0 },
  89. { "green4", 0, 139, 0 },
  90. { "grey", 126, 126, 126 },
  91. { "ivory", 255, 255, 240 },
  92. { "orange", 255, 135, 0 },
  93. { "red", 255, 0, 0 },
  94. { "red3", 205, 0, 0 },
  95. { "red4", 139, 0, 0 },
  96. { "white", 255, 255, 255 },
  97. { "white", 245, 245, 245 },
  98. { "yellow", 255, 255, 0 },
  99. { "yellow1", 255, 255, 0 },
  100. { 0, 0, 0, 0 }            // end coltab
  101. };
  102.  
  103. int RGBColor::SetInternalColor( const char *flag_name ) {
  104.     if (!strncmp(flag_name,"RGB:",4)||!strncmp(flag_name,"RGB:",4)) {
  105.         if (sscanf(flag_name+4,"%x/%x/%x",&red,&green,&blue)==3) {
  106.             switch (strlen(flag_name)) {
  107.             case 9:                        /* 6+3*1 */
  108.                 red   |= (red<<4);
  109.                 green |= (green<<4);
  110.                 blue  |= (blue<<4);
  111.             case 12:                        /* 6+3*2 */
  112.                 red   |= (red<<8);
  113.                 green |= (green<<8);
  114.                 blue  |= (blue<<8);
  115.             case 18:                        /* 6+3*4 */
  116.                 return 1;
  117.             }
  118.         }
  119.         printf( "can't convert color '%s'\n", flag_name );
  120.         return 0;
  121.     }
  122.     for (int i=0;i<sizeof(coltab)/sizeof(RGBValue)-1;i++) {
  123.         if (!strcmp(flag_name,coltab[i].name)) {
  124.             red   = coltab[i].r;
  125.             green = coltab[i].g;
  126.             blue  = coltab[i].b;
  127.             return 0;
  128.         }
  129.     }
  130.     return 1;
  131. }
  132.