From b70ed765ff6cf51aff20714e3ec4415b06898059 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Thu, 28 Mar 2024 00:02:43 +0100 Subject: Random work --- deimos/core/os_win32.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 deimos/core/os_win32.cpp (limited to 'deimos/core/os_win32.cpp') diff --git a/deimos/core/os_win32.cpp b/deimos/core/os_win32.cpp new file mode 100644 index 0000000..07d3247 --- /dev/null +++ b/deimos/core/os_win32.cpp @@ -0,0 +1,57 @@ +#include "deimos/core/os.h" +#include "deimos/core/api_registry.h" +#include "deimos/core/allocator.h" + +#define WIN32_LEAN_AND_MEAN +#include + +namespace deimos +{ + +class Win32OsConsoleApiImpl : public OsConsoleApi +{ + HANDLE m_stdout; + HANDLE m_stderr; + + constexpr HANDLE Handle(OsConsoleType type) const + { + switch (type) + { + using enum OsConsoleType; + case kStdOut: return m_stdout; + case kStdErr: return m_stderr; + } + } + +public: + Win32OsConsoleApiImpl() : + m_stdout{::GetStdHandle(STD_OUTPUT_HANDLE)}, + m_stderr{::GetStdHandle(STD_ERROR_HANDLE)} + {} + + void Write(OsConsoleType type, const char* data, int64 length) override + { + ::WriteConsoleA(Handle(type), data, (DWORD)length, nullptr, nullptr); + } +}; + +class Win32OsApiImpl : public OsApi +{ + Win32OsConsoleApiImpl m_console_api; + +public: + Win32OsApiImpl() + { + console = &m_console_api; + } +}; + +void RegisterOsApi(ApiRegistry* api_registry) +{ + auto* allocator_api = api_registry->Get(); + auto* os_api = allocator_api->system->New(); + api_registry->Set(os_api); +} + +} // namespace deimos + -- cgit