1 /* $Id: console.c,v 1.2 2003/06/01 17:06:22 hbirr Exp $
3 * CONSOLE.C - console input/output functions.
8 * 20-Jan-1999 (Eric Kohl <ekohl@abo.rhein-zeitung.de>)
23 #define OUTPUT_BUFFER_SIZE 4096
27 VOID
DebugPrintf (LPTSTR szFormat
, ...)
29 TCHAR szOut
[OUTPUT_BUFFER_SIZE
];
33 va_start (arg_ptr
, szFormat
);
34 _vstprintf (szOut
, szFormat
, arg_ptr
);
37 WriteFile (GetStdHandle (STD_ERROR_HANDLE
),
39 _tcslen(szOut
) * sizeof(TCHAR
),
43 OutputDebugString (szOut
);
49 VOID
ConInDisable (VOID
)
51 HANDLE hInput
= GetStdHandle (STD_INPUT_HANDLE
);
54 GetConsoleMode (hInput
, &dwMode
);
55 dwMode
&= ~ENABLE_PROCESSED_INPUT
;
56 SetConsoleMode (hInput
, dwMode
);
60 VOID
ConInEnable (VOID
)
62 HANDLE hInput
= GetStdHandle (STD_INPUT_HANDLE
);
65 GetConsoleMode (hInput
, &dwMode
);
66 dwMode
|= ENABLE_PROCESSED_INPUT
;
67 SetConsoleMode (hInput
, dwMode
);
71 VOID
ConInDummy (VOID
)
73 HANDLE hInput
= GetStdHandle (STD_INPUT_HANDLE
);
78 if (hInput
== INVALID_HANDLE_VALUE
)
79 DebugPrintf ("Invalid input handle!!!\n");
82 ReadConsoleInput (hInput
, &dummy
, 1, &dwRead
);
85 VOID
ConInFlush (VOID
)
87 FlushConsoleInputBuffer (GetStdHandle (STD_INPUT_HANDLE
));
91 VOID
ConInKey (PINPUT_RECORD lpBuffer
)
93 HANDLE hInput
= GetStdHandle (STD_INPUT_HANDLE
);
97 if (hInput
== INVALID_HANDLE_VALUE
)
98 DebugPrintf ("Invalid input handle!!!\n");
103 ReadConsoleInput (hInput
, lpBuffer
, 1, &dwRead
);
104 if ((lpBuffer
->EventType
== KEY_EVENT
) &&
105 (lpBuffer
->Event
.KeyEvent
.bKeyDown
== TRUE
))
113 VOID
ConInString (LPTSTR lpInput
, DWORD dwLength
)
122 ZeroMemory (lpInput
, dwLength
* sizeof(TCHAR
));
123 hFile
= GetStdHandle (STD_INPUT_HANDLE
);
124 GetConsoleMode (hFile
, &dwOldMode
);
126 SetConsoleMode (hFile
, ENABLE_LINE_INPUT
| ENABLE_ECHO_INPUT
);
128 ReadFile (hFile
, lpInput
, dwLength
, &dwRead
, NULL
);
131 for (i
= 0; i
< dwRead
; i
++, p
++)
133 if (*p
== _T('\x0d'))
140 SetConsoleMode (hFile
, dwOldMode
);
144 VOID
ConOutChar (TCHAR c
)
148 WriteFile (GetStdHandle (STD_OUTPUT_HANDLE
),
156 VOID
ConOutPuts (LPTSTR szText
)
160 WriteFile (GetStdHandle (STD_OUTPUT_HANDLE
),
162 _tcslen(szText
) * sizeof(TCHAR
),
165 WriteFile (GetStdHandle (STD_OUTPUT_HANDLE
),
173 VOID
ConOutPrintf (LPTSTR szFormat
, ...)
175 TCHAR szOut
[OUTPUT_BUFFER_SIZE
];
179 va_start (arg_ptr
, szFormat
);
180 _vstprintf (szOut
, szFormat
, arg_ptr
);
183 WriteFile (GetStdHandle (STD_OUTPUT_HANDLE
),
185 _tcslen(szOut
) * sizeof(TCHAR
),
191 VOID
ConErrChar (TCHAR c
)
195 WriteFile (GetStdHandle (STD_ERROR_HANDLE
),
203 VOID
ConErrPuts (LPTSTR szText
)
207 WriteFile (GetStdHandle (STD_ERROR_HANDLE
),
209 _tcslen(szText
) * sizeof(TCHAR
),
212 WriteFile (GetStdHandle (STD_ERROR_HANDLE
),
220 VOID
ConErrPrintf (LPTSTR szFormat
, ...)
222 TCHAR szOut
[OUTPUT_BUFFER_SIZE
];
226 va_start (arg_ptr
, szFormat
);
227 _vstprintf (szOut
, szFormat
, arg_ptr
);
230 WriteFile (GetStdHandle (STD_ERROR_HANDLE
),
232 _tcslen(szOut
) * sizeof(TCHAR
),
238 VOID
SetCursorXY (SHORT x
, SHORT y
)
244 SetConsoleCursorPosition (GetStdHandle (STD_OUTPUT_HANDLE
), coPos
);
248 VOID
GetCursorXY (PSHORT x
, PSHORT y
)
250 CONSOLE_SCREEN_BUFFER_INFO csbi
;
252 GetConsoleScreenBufferInfo (hConsole
, &csbi
);
254 *x
= csbi
.dwCursorPosition
.X
;
255 *y
= csbi
.dwCursorPosition
.Y
;
259 SHORT
GetCursorX (VOID
)
261 CONSOLE_SCREEN_BUFFER_INFO csbi
;
263 GetConsoleScreenBufferInfo (hConsole
, &csbi
);
265 return csbi
.dwCursorPosition
.X
;
269 SHORT
GetCursorY (VOID
)
271 CONSOLE_SCREEN_BUFFER_INFO csbi
;
273 GetConsoleScreenBufferInfo (hConsole
, &csbi
);
275 return csbi
.dwCursorPosition
.Y
;
279 VOID
GetScreenSize (PSHORT maxx
, PSHORT maxy
)
281 CONSOLE_SCREEN_BUFFER_INFO csbi
;
283 GetConsoleScreenBufferInfo (hConsole
, &csbi
);
286 *maxx
= csbi
.dwSize
.X
;
288 *maxy
= csbi
.dwSize
.Y
;
292 VOID
SetCursorType (BOOL bInsert
, BOOL bVisible
)
294 CONSOLE_CURSOR_INFO cci
;
296 cci
.dwSize
= bInsert
? 10 : 99;
297 cci
.bVisible
= bVisible
;
299 SetConsoleCursorInfo (GetStdHandle (STD_OUTPUT_HANDLE
), &cci
);