using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using AnsiConsolePlugin.Util; using Cecil_Libraries.ANSI_Utils.Objects; using Cecil_Libraries.ANSI_Utils.Util; using Microsoft.CodeAnalysis; using Mono.Cecil; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyCompany("Chaosyr")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("This mod simply enables ANSI and UTF-8 for Windows Terminals e.g. the BepInEx Console, this relies on the Cecil.ANSI_Utils functionality.")] [assembly: AssemblyFileVersion("2.0.0.0")] [assembly: AssemblyInformationalVersion("2.0.0+174da8580ee6ca0f4c1d8742e2205e616eeae7cc")] [assembly: AssemblyProduct("ANSI Mod")] [assembly: AssemblyTitle("ANSI Mod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("2.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace AnsiConsolePlugin { public class AnsiConsolePlugin { public static IEnumerable TargetDLLs { get { yield break; } } public static void Initialize() { Console.OutputEncoding = Encoding.UTF8; Console.InputEncoding = Encoding.UTF8; Console.WriteLine(); Console.WriteLine("Enabled UTF8 Encoding on Output and Input, now attempting to enable ANSI!"); try { EnableNativeAnsiUtil.EnableNativeAnsi(); Console.WriteLine("We have enabled ANSI in the Terminal! This will last the entirety of the Console Session."); } catch { Console.WriteLine("Unable to enable ANSI Code Handling."); } Console.WriteLine("We are attempting a Test to see if this is working!"); Test.TestMain(); } public static void Patch(AssemblyDefinition assembly) { } } public class Test { public static ColorRGB NeonGreen = new ColorRGB("Regular", ConvertFromXToRGB.ConverToRGBFromHex("#217727"), false, false); public static ColorRGB NeonGreenBG = new ColorRGB("Regular", ConvertFromXToRGB.ConverToRGBFromHex("#1b1f1b"), true, false); public static void TestMain() { string value = "\u001b[0;38" + ((ColorBase)NeonGreen).Extra + ";48" + ((ColorBase)NeonGreenBG).Extra + "m"; string[] array = "┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐\r\n│ │\r\n│ ┌─────┬─────┐ ┌ ┐ ┌─────────┐ ┌────────────┐ ┌ ┐ ┌───────────┐ ┌──────────┐ ┌─────┬─────┐ │\r\n│ │ │ │ │ │ │ │ │ │ │ │ │\r\n│ │ │ │ │ │ │ │ │ │ │ │ │\r\n│ │ │ │ │ │ │ │ │ │ │ │ │\r\n│ │ ├─────────┤ ├────────── │ ┌────┐ ├─────────┤ │ │ └──────────┐ │ │\r\n│ │ │ │ │ │ │ │ │ │ │ │ │ │\r\n│ │ │ │ │ │ │ │ │ │ │ │ │ │\r\n│ │ │ │ │ │ │ │ │ │ │ │ │ │\r\n│ └ └ ┘ └─────────┘ └────────────┘ └ ┘ └───────────┘ └──────────┘ └ │\r\n│ │\r\n│ ┌─────┬─────┐ ┌┐ ┐ ┌─────┬─────┐ ┌ ┐ ┌─────────┐ │\r\n│ │ │ ╎ │ │ │ │ │ │\r\n│ │ │ ╎ │ │ │ │ │ │\r\n│ │ │ ╎ │ │ │ │ │ │\r\n│ │ │ ╎ │ │ ├─────────┤ ├────────── │\r\n│ │ │ ╎ │ │ │ │ │ │\r\n│ │ │ ╎ │ │ │ │ │ │\r\n│ │ │ ╎ │ │ │ │ │ │\r\n│ └─────┴─────┘ └ └┘ └ └ ┘ └─────────┘ │\r\n│ │\r\n│ ┌───────────┐ ┌───────────┐ ┌─────────┐ ┌─────────┐ │\r\n│ │ │ │ │ ╎ │ │\r\n│ │ │ │ │ ╎ │ │\r\n│ │ │ │ │ │ │ │ │ │\r\n│ │ │ ─│─ │ │ ─│─ │ ├────────── │\r\n│ │ │ │ │ │ │ │ │ │\r\n│ │ │ │ │ ╎ │ │\r\n│ │ │ │ │ ╎ │ │\r\n│ └───────────┘ └───────────┘ └─────────┘ └─────────┘ │\r\n│ │\r\n└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘".Split(new string[3] { "\r\n", "\r", "\n" }, StringSplitOptions.None); Console.WriteLine(value); string[] array2 = array; for (int i = 0; i < array2.Length; i++) { Console.WriteLine(array2[i]); } Console.Write("\u001b[0m\n"); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "ANSI Mod"; public const string PLUGIN_NAME = "ANSI Mod"; public const string PLUGIN_VERSION = "2.0.0"; } } namespace AnsiConsolePlugin.Util { public class EnableNativeAnsiUtil { public static void EnableNativeAnsi() { if (Environment.OSVersion.Platform == PlatformID.Win32NT) { IntPtr passedHandle = FetchSTDHandle(-11); FetchSTDHandleValue(passedHandle, out var fetchedMode); fetchedMode |= 4; SetSTDHandleValue(passedHandle, fetchedMode); } } [DllImport("kernel32.dll", EntryPoint = "GetStdHandle", SetLastError = true)] public static extern IntPtr FetchSTDHandle(int location); [DllImport("kernel32.dll", EntryPoint = "GetConsoleMode", SetLastError = true)] public static extern bool FetchSTDHandleValue(IntPtr passedHandle, out uint fetchedMode); [DllImport("kernel32.dll", EntryPoint = "SetConsoleMode", SetLastError = true)] public static extern bool SetSTDHandleValue(IntPtr passedHandle, uint setMode); } }