#include "HGConsole.h" #include "HGInc.h" struct HGConsoleImpl { HGConsoleImpl() { #if defined(HG_CMP_MSC) m_bAllocConsole = FALSE; m_hConsole = INVALID_HANDLE_VALUE; #endif } ~HGConsoleImpl() { #if defined(HG_CMP_MSC) if (INVALID_HANDLE_VALUE != m_hConsole) m_hConsole = INVALID_HANDLE_VALUE; if (m_bAllocConsole) { FreeConsole(); m_bAllocConsole = FALSE; } #endif } #if defined(HG_CMP_MSC) BOOL m_bAllocConsole; HANDLE m_hConsole; #endif }; HGResult HGAPI HGBase_OpenConsole(HGConsole* console) { if (NULL == console) { return HGBASE_ERR_INVALIDARG; } HGConsoleImpl* consoleImpl = new HGConsoleImpl; #if defined(HG_CMP_MSC) consoleImpl->m_bAllocConsole = AllocConsole(); consoleImpl->m_hConsole = GetStdHandle(STD_OUTPUT_HANDLE); #endif *console = (HGConsole)consoleImpl; return HGBASE_ERR_OK; } HGResult HGAPI HGBase_CloseConsole(HGConsole console) { if (NULL == console) { return HGBASE_ERR_INVALIDARG; } HGConsoleImpl* consoleImpl = (HGConsoleImpl*)console; delete consoleImpl; return HGBASE_ERR_OK; } HGResult HGAPI HGBase_WriteConsole(HGConsole console, const HGChar* info) { if (NULL == console || NULL == info || '\0' == *info) { return HGBASE_ERR_INVALIDARG; } HGConsoleImpl* consoleImpl = (HGConsoleImpl*)console; #if defined(HG_CMP_MSC) DWORD dwNumberOfCharsWritten; WriteConsoleA(consoleImpl->m_hConsole, info, (DWORD)strlen(info), &dwNumberOfCharsWritten, NULL); if (info[strlen(info) - 1] != '\n') WriteConsoleA(consoleImpl->m_hConsole, "\r\n", (DWORD)strlen("\r\n"), &dwNumberOfCharsWritten, NULL); #else printf(info); if (info[strlen(info) - 1] != '\n') printf("\n"); #endif return HGBASE_ERR_OK; }