78 lines
1.6 KiB
C++
78 lines
1.6 KiB
C++
#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);
|
|
WriteConsoleA(consoleImpl->m_hConsole, "\r\n", (DWORD)strlen("\r\n"), &dwNumberOfCharsWritten, NULL);
|
|
#else
|
|
printf(info);
|
|
printf("\n");
|
|
#endif
|
|
return HGBASE_ERR_OK;
|
|
} |