[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Using console I/O under windows
- From: "Kenneth Rochel de Camargo Jr." <kenneth@...>
- Date: Sun, 1 Aug 1999 20:29:14 -0300
Hi everyone,
I've been researching this for a while now, and finally I've found a solution
for console I/O in a GUI Windows program (32 bit). This allows using programas
that call write() and read() without a FILE* argument under Windows in GUI mode.
I'm not completely satisfied with it, I have no control where the console
window pops up, for instance, but it works.
The following code illustrates how to do the trick. The OpenCon() function
should be called prior to running any Lua code that uses stdin/stdout/stderr.
The CloseCon() should be called after program completion.
The CtrlHandler() function avoids misbehaving of the program when Ctrl-C is hit
on the console window.
Hope this helps others, and I'd appreciate feedback, especially on how to
control the console window.
/* --------------------------------------------------------------------
Begin of sample code - all error checking funcs were left out,
but they're necessary - check the Win32 sdk help on how to do this.
-------------------------------------------------------------------- */
HANDLE Console;
BOOL CtrlHandler(DWORD fdwCtrlType)
{
if (fdwCtrlType == CTRL_C_EVENT) // ignore Ctrl-C
return TRUE;
else
return FALSE;
}
void OpenCon(void)
{
AllocConsole();
HANDLE Console = CreateConsoleScreenBuffer(GENERIC_READ|GENERIC_WRITE,
0,0,CONSOLE_TEXTMODE_BUFFER,0);
SetConsoleActiveScreenBuffer(Console);
SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, TRUE);
SetConsoleTitle("Lua Console");
freopen("CON", "wt", stdout);
freopen("CON", "wt", stderr);
freopen("CON", "rt", stdin);
}
void CloseCon(void)
{
CloseHandle(Console);
FreeConsole();
}
Kenneth Rochel de Camargo, Jr. MD PhD
Associate Professor - Social Medicine Institute
Rio de Janeiro State U. - Brazil
e-mail: kenneth@uerj.br
http://usuarios.uninet.com.br/~kcamargo/