public static void Show()
 {
     Console.Clear();
     Console.Fill(fill);
     while (true)
     {
         if (recovery)
         {
             break;
         }
         if (menu == 0)
         {
             ShowCategoryMenu();
         }
         else if (menu == 1)
         {
             Console.Fill(fill); menu++;
         }
         else if (menu == 2)
         {
             ShowEntryMenu();
         }
         else if (menu == 3)
         {
             Console.Fill(fill); menu = 0;
         }
     }
 }
 /// <summary>
 /// Initiates a Bluescreen.
 /// </summary>
 /// <param name="error">Error title or exception name</param>
 /// <param name="description">Error description</param>
 /// <param name="critical">Critical error?</param>
 public static void Init(
     string error       = "Something went wrong!",
     string description = "Unknown exception",
     bool critical      = false)
 {
     DrawOOPS();
     if (description.Length + 33 < Console.WindowHeight)
     {
         Console.CursorTop = 2; Console.CursorLeft = 33;
         ConsoleColor errcolor = ConsoleColor.White;
         if (critical)
         {
             errcolor = ConsoleColor.Red;
         }
         Console.WriteLineEx(error, errcolor, ConsoleColor.Blue);
         Console.CursorTop = 4; Console.CursorLeft = 70;
         Console.WriteLineEx(description, ConsoleColor.White, ConsoleColor.Blue);
     }
     else
     {
         Console.CursorTop = 12; Console.CursorLeft = 2;
         ConsoleColor errcolor = ConsoleColor.White;
         if (critical)
         {
             errcolor = ConsoleColor.Red;
         }
         Console.WriteLineEx(error, errcolor, ConsoleColor.Blue);
         Console.CursorTop = 14; Console.CursorLeft = 2;
         Console.WriteLineEx(description, ConsoleColor.White, ConsoleColor.Blue);
     }
     if (!critical)
     {
         Console.CursorTop = Console.WindowHeight - 1;
         Console.WriteEx("Press the [Enter]-key to resume", ConsoleColor.White, ConsoleColor.Blue);
         Console.CursorTop++;
         Console.ReadLine();
         Console.Clear();
     }
     else
     {
         Console.CursorTop = Console.WindowHeight - 4;
         Console.WriteLineEx("Press the [Enter]-key to shutdown", ConsoleColor.White, ConsoleColor.Blue);
         Console.CursorTop++;
         Console.WriteLineEx("If it doesn't work, press the RESET-button on your computer.", ConsoleColor.White, ConsoleColor.Blue);
         Console.CursorTop++;
         Console.ReadLine();
         ACPI.Shutdown();
     }
 }
        /// <summary>
        /// Kernel Panic
        /// </summary>
        public static void Panic()
        {
            Console.Clear();
            Console.Fill(ConsoleColor.Red);
            Console.CursorTop = 2;
            Console.WriteLineEx("KERNEL PANIC", ConsoleColor.White, ConsoleColor.Red, true);
            Console.WriteLine("\n");
            string message = "CRITICAL KERNEL EXCEPTION\nPLEASE CONTACT YOUR SOFTWARE MANUFACTURER";

            Console.WriteLineEx(message, ConsoleColor.White, ConsoleColor.Red, true);
            // Enter an infinite loop
            while (true)
            {
            }
        }
 public static void Init(Exception ex, bool critical = false)
 {
     DrawOOPS();
     if (ex.Message.Length + 33 < Console.WindowHeight)
     {
         Console.CursorTop = 2; Console.CursorLeft = 33;
         ConsoleColor errcolor = ConsoleColor.White;
         if (critical)
         {
             errcolor = ConsoleColor.Red;
         }
         Console.WriteLineEx(ex.Source, errcolor, ConsoleColor.Blue);
         Console.CursorTop = 4; Console.CursorLeft = 70;
         Console.WriteLineEx(ex.Message, ConsoleColor.White, ConsoleColor.Blue);
     }
     else
     {
         Console.CursorTop = 12; Console.CursorLeft = 2;
         ConsoleColor errcolor = ConsoleColor.White;
         if (critical)
         {
             errcolor = ConsoleColor.Red;
         }
         Console.WriteLineEx(ex.Source, errcolor, ConsoleColor.Blue);
         Console.CursorTop = 14; Console.CursorLeft = 2;
         Console.WriteLineEx(ex.Message, ConsoleColor.White, ConsoleColor.Blue);
     }
     if (!critical)
     {
         Console.CursorTop = Console.WindowHeight - 3;
         Console.WriteEx("Press the [Enter]-key to resume", ConsoleColor.White, ConsoleColor.Blue);
         Console.CursorTop++;
         Console.ReadLine();
         Console.Clear();
     }
     else
     {
         Console.CursorTop = Console.WindowHeight - 4;
         Console.WriteEx("Press the [Enter]-key to shutdown", ConsoleColor.White, ConsoleColor.Blue);
         Console.CursorTop++;
         Console.WriteEx("If it doesn't work, press the RESET-button on your computer.", ConsoleColor.White, ConsoleColor.Blue);
         Console.CursorTop++;
         Console.ReadLine();
         ACPI.Shutdown();
     }
 }
 private static void DrawOOPS()
 {
     Console.Fill(ConsoleColor.Blue);
     string[] arrOOPS = new string[] {
         "======  ======  =====  =====  =",
         "=    =  =    =  =   =  =      =",
         "=    =  =    =  =====  =====  =",
         "=    =  =    =  =          =   ",
         "======  ======  =      =====  ="
     };
     Console.CursorTop = 2;
     foreach (string str in arrOOPS)
     {
         Console.CursorLeft = 2;
         Console.WriteLineEx(str, ConsoleColor.White, ConsoleColor.Blue);
     }
 }
 private static void ShowEntryMenu()
 {
     for (int i = 10 - (cat[itemcat].entries.Count / 2); i < 11 + cat.Count; i++)
     {
         string buffer = "";
         Console.CursorTop = i;
         for (int j = 10; j <= 70; j++)
         {
             buffer += " ";
         }
         Console.CursorLeft = 10;
         Console.WriteEx(buffer, background, background);
     }
     Console.CursorTop = 11 - (cat[itemcat].entries.Count / 2);
     for (int i = 0; i < cat[itemcat].entries.Count; i++)
     {
         if (i == item)
         {
             Console.WriteEx(cat[itemcat].entries[i].text, highlighted, background, true);
             Console.CursorLeft = 69;
             Console.WriteLineEx(">", arrow, background);
         }
         else
         {
             Console.WriteLineEx(cat[itemcat].entries[i].text, normal, background, true);
         }
     }
     while (true)
     {
         ConsoleKey key = Console.ReadKey().Key;
         if (key == ConsoleKey.UpArrow)
         {
             if (item > 0)
             {
                 item--;
             }
             else
             {
                 item = cat[itemcat].entries.Count - 1;
             }
             break;
         }
         else if (key == ConsoleKey.DownArrow)
         {
             if (item < cat[itemcat].entries.Count - 1)
             {
                 item++;
             }
             else
             {
                 item = 0;
             }
             break;
         }
         else if (key == ConsoleKey.Enter || key == ConsoleKey.RightArrow)
         {
             cat[itemcat].entries[item].Execute();
             break;
         }
     }
 }