summaryrefslogtreecommitdiff
path: root/src/citron/debugger/console.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/citron/debugger/console.cpp')
-rw-r--r--src/citron/debugger/console.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/citron/debugger/console.cpp b/src/citron/debugger/console.cpp
new file mode 100644
index 000000000..1c1342ff1
--- /dev/null
+++ b/src/citron/debugger/console.cpp
@@ -0,0 +1,49 @@
+// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#ifdef _WIN32
+#include <windows.h>
+
+#include <wincon.h>
+#endif
+
+#include "common/logging/backend.h"
+#include "yuzu/debugger/console.h"
+#include "yuzu/uisettings.h"
+
+namespace Debugger {
+void ToggleConsole() {
+ static bool console_shown = false;
+ if (console_shown == UISettings::values.show_console.GetValue()) {
+ return;
+ } else {
+ console_shown = UISettings::values.show_console.GetValue();
+ }
+
+ using namespace Common::Log;
+#if defined(_WIN32) && !defined(_DEBUG)
+ FILE* temp;
+ if (UISettings::values.show_console) {
+ if (AllocConsole()) {
+ // The first parameter for freopen_s is a out parameter, so we can just ignore it
+ freopen_s(&temp, "CONIN$", "r", stdin);
+ freopen_s(&temp, "CONOUT$", "w", stdout);
+ freopen_s(&temp, "CONOUT$", "w", stderr);
+ SetConsoleOutputCP(65001);
+ SetColorConsoleBackendEnabled(true);
+ }
+ } else {
+ if (FreeConsole()) {
+ // In order to close the console, we have to also detach the streams on it.
+ // Just redirect them to NUL if there is no console window
+ SetColorConsoleBackendEnabled(false);
+ freopen_s(&temp, "NUL", "r", stdin);
+ freopen_s(&temp, "NUL", "w", stdout);
+ freopen_s(&temp, "NUL", "w", stderr);
+ }
+ }
+#else
+ SetColorConsoleBackendEnabled(UISettings::values.show_console.GetValue());
+#endif
+}
+} // namespace Debugger