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)); }