1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
/*
$Id: console_window_generic.cpp,v 1.14 2001/11/26 23:18:09 sphair Exp $
------------------------------------------------------------------------
ClanLib, the platform independent game SDK.
This library is distributed under the GNU LIBRARY GENERAL PUBLIC LICENSE
version 2. See COPYING for details.
For a total list of contributers see CREDITS.
------------------------------------------------------------------------
*/
#include "Core/precomp.h"
#include "API/Core/System/cl_assert.h"
#include "console_window_generic.h"
#include <iostream>
#include <cstdio>
using namespace std;
#ifdef WIN32
#include <stdio.h>
static HANDLE scrbuf = NULL;
#endif
/////////////////////////////////////////////////////////////////////////////
// CL_ConsoleWindow_Generic Construction:
CL_ConsoleWindow_Generic::CL_ConsoleWindow_Generic(
const std::string &title,
int width,
int height)
{
#ifdef WIN32
AllocConsole();
SetConsoleTitle(title.c_str());
COORD coord;
coord.X = width;
coord.Y = height;
scrbuf =
CreateConsoleScreenBuffer(
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
CONSOLE_TEXTMODE_BUFFER,
NULL);
cl_assert(scrbuf != INVALID_HANDLE_VALUE);
SetConsoleActiveScreenBuffer(scrbuf);
SetConsoleScreenBufferSize(scrbuf, coord);
#endif
}
CL_ConsoleWindow_Generic::~CL_ConsoleWindow_Generic()
{
}
/////////////////////////////////////////////////////////////////////////////
// CL_ConsoleWindow_Generic Operations:
void CL_ConsoleWindow_Generic::redirect_stdio()
{
#ifdef WIN32
freopen("CONIN$","rt",stdin);
freopen("CONOUT$", "wt", stderr);
freopen("CONOUT$", "wt", stdout);
#endif
}
void CL_ConsoleWindow_Generic::redirect_stdio(const std::string &file)
{
freopen(file.c_str(),"wt",stdout);
freopen(file.c_str(),"wt",stderr);
}
void CL_ConsoleWindow_Generic::wait_for_key()
{
#ifdef WIN32
// If your application crashes here, you are linking with a single threaded
// libc in your application! -- mbn 13. Jan 2001.
#ifdef __BORLANDC__
std::string foo;
cin >> foo;
#else
while (!kbhit()) Sleep(250);
#endif
#endif
}
void CL_ConsoleWindow_Generic::display_close_message()
{
#ifdef WIN32
std::cout << std::endl << "(press any key to close this console window)";
std::cout.flush();
wait_for_key();
#endif
}
|