summaryrefslogtreecommitdiff
path: root/src/yuzu/debugger/console.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2018-07-03 00:26:45 -0400
committerGitHub <noreply@github.com>2018-07-03 00:26:45 -0400
commit15e68cdbaac38bbf13cd4eb0d70d1e34b2fd4256 (patch)
tree9d072a572c0037a44e1e35aeffc242d3772a383c /src/yuzu/debugger/console.cpp
parente3ca561ea0aa2e38dd1bba6757c7170448579554 (diff)
parent76b475faf774a7a357bdc707e556c75f7975bc45 (diff)
Merge pull request #607 from jroweboy/logging
Logging - Customizable backends
Diffstat (limited to 'src/yuzu/debugger/console.cpp')
-rw-r--r--src/yuzu/debugger/console.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/yuzu/debugger/console.cpp b/src/yuzu/debugger/console.cpp
new file mode 100644
index 000000000..e3d2d975f
--- /dev/null
+++ b/src/yuzu/debugger/console.cpp
@@ -0,0 +1,45 @@
+// Copyright 2018 yuzu Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#ifdef _WIN32
+#include <windows.h>
+
+#include <wincon.h>
+#endif
+
+#include "common/logging/backend.h"
+#include "yuzu/debugger/console.h"
+#include "yuzu/ui_settings.h"
+
+namespace Debugger {
+void ToggleConsole() {
+#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);
+ Log::AddBackend(std::make_unique<Log::ColorConsoleBackend>());
+ }
+ } 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
+ Log::RemoveBackend(Log::ColorConsoleBackend::Name());
+ freopen_s(&temp, "NUL", "r", stdin);
+ freopen_s(&temp, "NUL", "w", stdout);
+ freopen_s(&temp, "NUL", "w", stderr);
+ }
+ }
+#else
+ if (UISettings::values.show_console) {
+ Log::AddBackend(std::make_unique<Log::ColorConsoleBackend>());
+ } else {
+ Log::RemoveBackend(Log::ColorConsoleBackend::Name());
+ }
+#endif
+}
+} // namespace Debugger