void palette_load (void) { int i, j, l, fh; char prefname[256]; struct stat st; char *cfg; int red, green, blue; fh = hexchat_open_file ("colors.conf", O_RDONLY, 0, 0); if (fh != -1) { fstat (fh, &st); cfg = malloc (st.st_size + 1); if (cfg) { cfg[0] = '\0'; l = read (fh, cfg, st.st_size); if (l >= 0) cfg[l] = '\0'; /* mIRC colors 0-31 are here */ for (i = 0; i < 32; i++) { snprintf (prefname, sizeof prefname, "color_%d", i); cfg_get_color (cfg, prefname, &red, &green, &blue); colors[i].red = red; colors[i].green = green; colors[i].blue = blue; } /* our special colors are mapped at 256+ */ for (i = 256, j = 32; j < MAX_COL+1; i++, j++) { snprintf (prefname, sizeof prefname, "color_%d", i); cfg_get_color (cfg, prefname, &red, &green, &blue); colors[j].red = red; colors[j].green = green; colors[j].blue = blue; } free (cfg); } close (fh); } }
void palette_load (void) { int i, j, l, fh, res; char prefname[256]; struct stat st; char *cfg; int red, green, blue; int upgrade = FALSE; fh = xchat_open_file ("colors.conf", O_RDONLY, 0, 0); if (fh == -1) { fh = xchat_open_file ("palette.conf", O_RDONLY, 0, 0); upgrade = TRUE; } if (fh != -1) { fstat (fh, &st); cfg = malloc (st.st_size + 1); if (cfg) { cfg[0] = '\0'; l = read (fh, cfg, st.st_size); if (l >= 0) cfg[l] = '\0'; if (!upgrade) { /* mIRC colors 0-31 are here */ for (i = 0; i < 32; i++) { snprintf (prefname, sizeof prefname, "color_%d", i); cfg_get_color (cfg, prefname, &red, &green, &blue); colors[i].red = red; colors[i].green = green; colors[i].blue = blue; } /* our special colors are mapped at 256+ */ for (i = 256, j = 32; j < MAX_COL+1; i++, j++) { snprintf (prefname, sizeof prefname, "color_%d", i); cfg_get_color (cfg, prefname, &red, &green, &blue); colors[j].red = red; colors[j].green = green; colors[j].blue = blue; } } else { /* loading 2.0.x palette.conf */ for (i = 0; i < MAX_COL+1; i++) { snprintf (prefname, sizeof prefname, "color_%d_red", i); red = cfg_get_int (cfg, prefname); snprintf (prefname, sizeof prefname, "color_%d_grn", i); green = cfg_get_int (cfg, prefname); snprintf (prefname, sizeof prefname, "color_%d_blu", i); blue = cfg_get_int_with_result (cfg, prefname, &res); if (res) { colors[remap[i]].red = red; colors[remap[i]].green = green; colors[remap[i]].blue = blue; } } /* copy 0-15 to 16-31 */ for (i = 0; i < 16; i++) { colors[i+16].red = colors[i].red; colors[i+16].green = colors[i].green; colors[i+16].blue = colors[i].blue; } } free (cfg); } close (fh); } }