static void parsecolor(char *col, int *fg, int *bg) { char *p; p = strchr(col, ':'); if (p == NULL) { *fg = coloridx(col); *bg = -1; } else { *p++ = '\0'; *fg = coloridx(col); *bg = coloridx(p); } }
const char * color(int idx, int type, int which) { int ansi = 0; /* if user is connected over TELNET or !backgrd, show ANSI * if they are relaying, they are most likely on an IRC client and should have mIRC codes */ if ((ansi = coloridx(idx)) == 0) return ""; if (ansi == 2) ansi = 0; if (type == BOLD_OPEN) { return ansi ? "\033[1m" : "\002"; } else if (type == BOLD_CLOSE) { // return ansi ? "\033[22m" : "\002"; return ansi ? "\033[0m" : "\002"; } else if (type == UNDERLINE_OPEN) { return ansi ? "\033[4m" : "\037"; } else if (type == UNDERLINE_CLOSE) { return ansi ? "\033[24m" : "\037"; } else if (type == FLASH_OPEN) { return ansi ? "\033[5m" : "\002\037"; } else if (type == FLASH_CLOSE) { return ansi ? "\033[0m" : "\037\002"; } else if (type == COLOR_OPEN) { switch (which) { case C_BLACK: return ansi ? "\033[30m" : "\00301"; case C_RED: return ansi ? "\033[31m" : "\00305"; case C_GREEN: return ansi ? "\033[32m" : "\00303"; case C_BROWN: return ansi ? "\033[33m" : "\00307"; case C_BLUE: return ansi ? "\033[34m" : "\00302"; case C_PURPLE: return ansi ? "\033[35m" : "\00306"; case C_CYAN: return ansi ? "\033[36m" : "\00310"; case C_WHITE: return ansi ? "\033[1;37m" : "\00300"; case C_DARKGREY: return ansi ? "\033[1;30m" : "\00314"; case C_LIGHTRED: return ansi ? "\033[1;31m" : "\00304"; case C_LIGHTGREEN: return ansi ? "\033[1;32m" : "\00309"; case C_LIGHTBLUE: return ansi ? "\033[1;34m" : "\00312"; case C_LIGHTPURPLE: return ansi ? "\033[1;35m" : "\00313"; case C_LIGHTCYAN: return ansi ? "\033[1;36m" : "\00311"; case C_LIGHTGREY: return ansi ? "\033[37m" : "\00315"; case C_YELLOW: return ansi ? "\033[1;33m" : "\00308"; default: break; } } else if (type == COLOR_CLOSE) { return ansi ? "\033[0m" : "\00300"; } /* This should never be reached.. */ return ""; }