public static ConsoleColor Color_ANSI_To_Console(ANSI_COLOR Color) { switch (Color) { case ANSI_COLOR.YELLOW: return(ConsoleColor.DarkYellow); case ANSI_COLOR.YELLOW_BRIGHT: return(ConsoleColor.Yellow); case ANSI_COLOR.RED: return(ConsoleColor.DarkRed); case ANSI_COLOR.RED_BRIGHT: return(ConsoleColor.Red); case ANSI_COLOR.MAGENTA: return(ConsoleColor.DarkMagenta); case ANSI_COLOR.MAGENTA_BRIGHT: return(ConsoleColor.Magenta); case ANSI_COLOR.GREEN: return(ConsoleColor.DarkGreen); case ANSI_COLOR.GREEN_BRIGHT: return(ConsoleColor.Green); case ANSI_COLOR.CYAN: return(ConsoleColor.DarkCyan); case ANSI_COLOR.CYAN_BRIGHT: return(ConsoleColor.Cyan); case ANSI_COLOR.BLUE: return(ConsoleColor.DarkBlue); case ANSI_COLOR.BLUE_BRIGHT: return(ConsoleColor.Blue); case ANSI_COLOR.WHITE_BRIGHT: return(ConsoleColor.White); case ANSI_COLOR.WHITE: return(ConsoleColor.Gray); case ANSI_COLOR.BLACK_BRIGHT: return(ConsoleColor.DarkGray); case ANSI_COLOR.BLACK: return(ConsoleColor.Black); default: { System.Diagnostics.Debugger.Break(); throw new ArgumentOutOfRangeException($"{nameof(Color)}({Color.ToString()})"); } } }
private static bool Execute_XLOG_Command(DataStream <int> ParameterStream) { /* Currently we are only emulating color codes. */ /* XXX: Implement emulation for other codes such as the cursor controls */ XLOG_CODE Code = (XLOG_CODE)Int32.MinValue; if (!ParameterStream.atEnd) { Code = (XLOG_CODE)ParameterStream.Consume(); } switch (Code) { case XLOG_CODE.PUSH_FG: Color_Stack_FG.Push(ANSI.Color_Console_To_ANSI(Console.ForegroundColor)); break; case XLOG_CODE.POP_FG: { if (Color_Stack_FG.Count == 0) { break; } ANSI_COLOR clr = Color_Stack_FG.Pop(); Console.ForegroundColor = ANSI.Color_ANSI_To_Console(clr); } break; case XLOG_CODE.PUSH_BG: Color_Stack_BG.Push(ANSI.Color_Console_To_ANSI(Console.BackgroundColor)); break; case XLOG_CODE.POP_BG: { if (Color_Stack_BG.Count == 0) { break; } ANSI_COLOR clr = Color_Stack_BG.Pop(); Console.BackgroundColor = ANSI.Color_ANSI_To_Console(clr); } break; default: { throw new ArgumentException($"Unrecognized xLOG code: {(XLOG_CODE)Code}"); } } return(true); }
private static Tuple <ANSI_COLOR, ANSI_COLOR> Get_Console_Default_Colors() { ConsoleColor stackFG = Console.ForegroundColor; ConsoleColor stackBG = Console.BackgroundColor; Console.ResetColor(); ANSI_COLOR fgVal = ANSI.Color_Console_To_ANSI(Console.ForegroundColor); ANSI_COLOR bgVal = ANSI.Color_Console_To_ANSI(Console.BackgroundColor); Console.ForegroundColor = stackFG; Console.BackgroundColor = stackBG; return(new Tuple <ANSI_COLOR, ANSI_COLOR>(fgVal, bgVal)); }
private void AddValue(int val) { ANSI_COLOR p = (ANSI_COLOR)val; if (p >= ANSI_COLOR.All_off && p <= ANSI_COLOR.Bold) { vals.Add(val); } else if (p >= ANSI_COLOR.Black && p <= ANSI_COLOR.White) { vals.Add(val); } else if (p >= ANSI_COLOR.Black_B && p <= ANSI_COLOR.White_B) { vals.Add(val); } else { Console.WriteLine("Not a valid ANSI color/attrib value: " + val); } }
private static string Set_FG_Color_Bright(ANSI_COLOR color, string msg) { return(String.Concat(ESC, '[', Convert.ToString(90 + (int)color), 'm', msg, RESET)); }
internal static string Set_BG_Color(ANSI_COLOR color, string Msg) => string.Concat(sPUSH_BG, xCmd((int)SGR_CODE.SET_COLOR_CUSTOM_BG, 5, (int)color), Msg, sPOP_BG);
private static void Set_BG(ANSI_COLOR Color) => Console.BackgroundColor = ANSI.Color_ANSI_To_Console(Color);
private static void Set_FG(ANSI_COLOR Color) => Console.ForegroundColor = ANSI.Color_ANSI_To_Console(Color);
private static bool Execute_SGR_Command(DataStream <int> ParameterStream) { /* Currently we are only emulating color codes. */ /* XXX: Implement emulation for other codes such as the cursor controls */ SGR_CODE Code = SGR_CODE.INVALID; if (!ParameterStream.atEnd) { Code = (SGR_CODE)ParameterStream.Consume(); } switch (Code) { case SGR_CODE.RESET_STYLE: { /* All Attribute OFF */ bModeInvertVideo = false; Color_Stack_FG.Clear(); Color_Stack_BG.Clear(); Console.ResetColor(); } break; case SGR_CODE.RESET_COLOR_FG: { var Defaults = Get_Console_Default_Colors(); var Clr = bModeInvertVideo ? Defaults.Item2 : Defaults.Item1; Set_FG(Clr); } break; case SGR_CODE.RESET_COLOR_BG: { var Defaults = Get_Console_Default_Colors(); var Clr = bModeInvertVideo ? Defaults.Item1 : Defaults.Item2; Set_BG(Clr); } break; case SGR_CODE.INVERT: Set_Inverted(true); break; case SGR_CODE.INVERT_OFF: Set_Inverted(false); break; /* 8-bit Colors */ case SGR_CODE.SET_COLOR_CUSTOM_FG: { if (ParameterStream.Remaining < 2) { throw new SgrFormatError($"Malformed command({Code}) requires atleast 2 parameters!"); } ANSI_COLOR Clr = ANSI_COLOR.WHITE; /* Read custom mode */ int mode = ParameterStream.Consume(); switch (mode) { case 2: /* 8-bit */ { if (ParameterStream.Remaining < 3) { throw new SgrFormatError($"Malformed command. 8-bit colors require 3 parameters!"); } } break; case 5: /* 4-bit */ Clr = (ANSI_COLOR)ParameterStream.Consume(); break; default: throw new SgrFormatError($"Malformed command. '{mode}' is not a valid mode for {Code}"); } if (!bModeInvertVideo) { Set_FG(Clr); } else { Set_BG(Clr); } } break; case SGR_CODE.SET_COLOR_CUSTOM_BG: { if (ParameterStream.Remaining < 2) { throw new SgrFormatError($"Malformed command({Code}) requires atleast 2 parameters!"); } ANSI_COLOR Clr = ANSI_COLOR.BLACK; /* Read custom mode */ int mode = ParameterStream.Consume(); switch (mode) { case 2: /* 8-bit */ { if (ParameterStream.Remaining < 3) { throw new SgrFormatError($"Malformed command. 8-bit colors require 3 parameters!"); } } break; case 5: /* 4-bit */ Clr = (ANSI_COLOR)ParameterStream.Consume(); break; default: throw new SgrFormatError($"Malformed command. '{mode}' is not a valid mode for {Code}"); } if (!bModeInvertVideo) { Set_BG(Clr); } else { Set_FG(Clr); } } break; /* 3/4-bit Colors */ case SGR_CODE n when(n >= SGR_CODE.SET_COLOR_FG && n <= SGR_CODE.SET_COLOR_FG + 7): { var Clr = (ANSI_COLOR)(n - SGR_CODE.SET_COLOR_FG); if (!bModeInvertVideo) { Set_FG(Clr); } else { Set_BG(Clr); } } break; case SGR_CODE n when(n >= SGR_CODE.SET_COLOR_FG_BRIGHT && n <= SGR_CODE.SET_COLOR_FG_BRIGHT + 7): { var Clr = (ANSI_COLOR)(n - SGR_CODE.SET_COLOR_FG_BRIGHT); if (!bModeInvertVideo) { Set_FG(Clr); } else { Set_BG(Clr); } } break; case SGR_CODE n when(n >= SGR_CODE.SET_COLOR_BG && n <= SGR_CODE.SET_COLOR_BG + 7): { var Clr = (ANSI_COLOR)(n - SGR_CODE.SET_COLOR_BG); if (!bModeInvertVideo) { Set_BG(Clr); } else { Set_FG(Clr); } } break; case SGR_CODE n when(n >= SGR_CODE.SET_COLOR_BG_BRIGHT && n <= SGR_CODE.SET_COLOR_BG_BRIGHT + 7): { var Clr = (ANSI_COLOR)(n - SGR_CODE.SET_COLOR_BG_BRIGHT); if (!bModeInvertVideo) { Set_BG(Clr); } else { Set_FG(Clr); } } break; default: { throw new ArgumentException($"Unrecognized (SelectGraphicRendition) code: {(SGR_CODE)Code}"); } } return(true); }
public TerminalColor(ANSI_COLOR Color) { Data = Color; }