From f5ce6cd2fa039562619cc2fad3e8e64b31680cf3 Mon Sep 17 00:00:00 2001 From: Cj <161484149+CJ-SPT@users.noreply.github.com> Date: Wed, 28 May 2025 17:24:40 -0400 Subject: [PATCH] Fix console formatting (#295) * Fix console virtual processing * remove sneaky using * Only set on windows --- SPTarkov.Server/Program.cs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/SPTarkov.Server/Program.cs b/SPTarkov.Server/Program.cs index 78e9193c..923c7b30 100644 --- a/SPTarkov.Server/Program.cs +++ b/SPTarkov.Server/Program.cs @@ -1,4 +1,5 @@ using System.Runtime; +using System.Runtime.InteropServices; using SPTarkov.Common.Semver; using SPTarkov.Common.Semver.Implementations; using SPTarkov.DI; @@ -46,6 +47,8 @@ public static class Program try { + SetConsoleOutputMode(); + var watermark = serviceProvider.GetService(); // Initialize Watermark watermark?.Initialize(); @@ -132,4 +135,38 @@ public static class Program var modValidator = provider.GetRequiredService(); return modValidator.ValidateAndSort(mods); } + + private static void SetConsoleOutputMode() + { + if (!OperatingSystem.IsWindows()) + { + return; + } + + const int stdOutputHandle = -11; + const uint enableVirtualTerminalProcessing = 0x0004; + + var handle = GetStdHandle(stdOutputHandle); + + if (!GetConsoleMode(handle, out var consoleMode)) + { + throw new Exception("Unable to get console mode"); + } + + consoleMode |= enableVirtualTerminalProcessing; + + if (!SetConsoleMode(handle, consoleMode)) + { + throw new Exception("Unable to set console mode"); + } + } + + [DllImport("kernel32.dll", SetLastError = true)] + private static extern IntPtr GetStdHandle(int nStdHandle); + + [DllImport("kernel32.dll")] + private static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode); + + [DllImport("kernel32.dll")] + private static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode); }