4 * Windows console I/O declarations, and API function prototypes.
8 * Written by Anders Norlander <anorland@hem2.passagen.se>
9 * Copyright (C) 1998, 1999, 2002-2006, 2009, 2011, 2016, 2018,
13 * Permission is hereby granted, free of charge, to any person obtaining a
14 * copy of this software and associated documentation files (the "Software"),
15 * to deal in the Software without restriction, including without limitation
16 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
17 * and/or sell copies of the Software, and to permit persons to whom the
18 * Software is furnished to do so, subject to the following conditions:
20 * The above copyright notice, this permission notice, and the following
21 * disclaimer shall be included in all copies or substantial portions of
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
27 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF OR OTHER
30 * DEALINGS IN THE SOFTWARE.
34 #pragma GCC system_header
37 #if _WIN32_WINNT < _WIN32_WINNT_VISTA
38 /* For effective self-containment, <wincon.h> is dependent on the core set
39 * of Windows' custom type definitions; prior to Vista, it suffices to...
43 /* ...but Vista and later introduce additional dependencies on <wingdi.h>;
44 * this will indirectly include <windef.h> anyway, so it suffices to...
51 #define FOREGROUND_BLUE 0x0001
52 #define FOREGROUND_GREEN 0x0002
53 #define FOREGROUND_RED 0x0004
54 #define FOREGROUND_INTENSITY 0x0008
55 #define BACKGROUND_BLUE 0x0010
56 #define BACKGROUND_GREEN 0x0020
57 #define BACKGROUND_RED 0x0040
58 #define BACKGROUND_INTENSITY 0x0080
60 #define COMMON_LVB_LEADING_BYTE 0x0100
61 #define COMMON_LVB_TRAILING_BYTE 0x0200
62 #define COMMON_LVB_GRID_HORIZONTAL 0x0400
63 #define COMMON_LVB_GRID_LVERTICAL 0x0800
64 #define COMMON_LVB_GRID_RVERTICAL 0x1000
65 #define COMMON_LVB_REVERSE_VIDEO 0x4000
66 #define COMMON_LVB_UNDERSCORE 0x8000
68 #define CTRL_C_EVENT 0x0000
69 #define CTRL_BREAK_EVENT 0x0001
70 #define CTRL_CLOSE_EVENT 0x0002
71 #define CTRL_LOGOFF_EVENT 0x0005
72 #define CTRL_SHUTDOWN_EVENT 0x0006
74 #define ENABLE_LINE_INPUT 0x0002
75 #define ENABLE_ECHO_INPUT 0x0004
76 #define ENABLE_PROCESSED_INPUT 0x0001
77 #define ENABLE_WINDOW_INPUT 0x0008
78 #define ENABLE_MOUSE_INPUT 0x0010
79 #define ENABLE_INSERT_MODE 0x0020
80 #define ENABLE_QUICK_EDIT_MODE 0x0040
81 #define ENABLE_EXTENDED_FLAGS 0x0080
82 #define ENABLE_AUTO_POSITION 0x0100
83 #define ENABLE_VIRTUAL_TERMINAL_INPUT 0x0200
84 #define ENABLE_PROCESSED_OUTPUT 0x0001
85 #define ENABLE_WRAP_AT_EOL_OUTPUT 0x0002
86 #define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
87 #define DISABLE_NEWLINE_AUTO_RETURN 0x0008
88 #define ENABLE_LVB_GRID_WORLDWIDE 0x0010
90 #define KEY_EVENT 0x0001
91 #define MOUSE_EVENT 0x0002
92 #define WINDOW_BUFFER_SIZE_EVENT 0x0004
93 #define MENU_EVENT 0x0008
94 #define FOCUS_EVENT 0x0010
95 #define CAPSLOCK_ON 0x0080
96 #define ENHANCED_KEY 0x0100
98 #define RIGHT_ALT_PRESSED 0x0001
99 #define LEFT_ALT_PRESSED 0x0002
100 #define RIGHT_CTRL_PRESSED 0x0004
101 #define LEFT_CTRL_PRESSED 0x0008
102 #define SHIFT_PRESSED 0x0010
103 #define NUMLOCK_ON 0x0020
104 #define SCROLLLOCK_ON 0x0040
106 #define FROM_LEFT_1ST_BUTTON_PRESSED 0x0001
107 #define RIGHTMOST_BUTTON_PRESSED 0x0002
108 #define FROM_LEFT_2ND_BUTTON_PRESSED 0x0004
109 #define FROM_LEFT_3RD_BUTTON_PRESSED 0x0008
110 #define FROM_LEFT_4TH_BUTTON_PRESSED 0x0010
111 #define MOUSE_MOVED 0x0001
112 #define DOUBLE_CLICK 0x0002
113 #define MOUSE_WHEELED 0x0004
114 #define MOUSE_HWHEELED 0x0008
123 } CHAR_INFO, *PCHAR_INFO;
131 } SMALL_RECT, *PSMALL_RECT;
134 struct _CONSOLE_CURSOR_INFO
137 } CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
146 struct _CONSOLE_SCREEN_BUFFER_INFO
148 COORD dwCursorPosition;
151 COORD dwMaximumWindowSize;
152 } CONSOLE_SCREEN_BUFFER_INFO, *PCONSOLE_SCREEN_BUFFER_INFO;
154 typedef BOOL (CALLBACK *PHANDLER_ROUTINE)(DWORD);
157 struct _KEY_EVENT_RECORD
158 #ifdef __GNUC__ /* gcc's alignment is not what Win32 expects here! */
159 # define __MINGW_ATTRIBUTE_PACKED__ __attribute__((packed))
161 # define __MINGW_ATTRIBUTE_PACKED__
165 WORD wVirtualKeyCode;
166 WORD wVirtualScanCode;
171 DWORD dwControlKeyState;
172 } __MINGW_ATTRIBUTE_PACKED__ KEY_EVENT_RECORD;
175 struct _MOUSE_EVENT_RECORD
176 { COORD dwMousePosition;
178 DWORD dwControlKeyState;
180 } MOUSE_EVENT_RECORD;
183 struct _WINDOW_BUFFER_SIZE_RECORD
185 } WINDOW_BUFFER_SIZE_RECORD;
188 struct _MENU_EVENT_RECORD
190 } MENU_EVENT_RECORD, *PMENU_EVENT_RECORD;
193 struct _FOCUS_EVENT_RECORD
195 } FOCUS_EVENT_RECORD;
201 { KEY_EVENT_RECORD KeyEvent;
202 MOUSE_EVENT_RECORD MouseEvent;
203 WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
204 MENU_EVENT_RECORD MenuEvent;
205 FOCUS_EVENT_RECORD FocusEvent;
207 } INPUT_RECORD, *PINPUT_RECORD;
209 WINAPI BOOL AllocConsole (void);
210 WINAPI HANDLE CreateConsoleScreenBuffer (DWORD, DWORD, CONST SECURITY_ATTRIBUTES *, DWORD, LPVOID);
211 WINAPI BOOL FillConsoleOutputAttribute (HANDLE, WORD, DWORD, COORD, PDWORD);
213 #define FillConsoleOutputCharacter __AW_SUFFIXED__(FillConsoleOutputCharacter)
214 WINAPI BOOL FillConsoleOutputCharacterA (HANDLE, CHAR, DWORD, COORD, PDWORD);
215 WINAPI BOOL FillConsoleOutputCharacterW (HANDLE, WCHAR, DWORD, COORD, PDWORD);
217 WINAPI BOOL FlushConsoleInputBuffer (HANDLE);
218 WINAPI BOOL FreeConsole (void);
219 WINAPI BOOL GenerateConsoleCtrlEvent (DWORD, DWORD);
221 #define GetConsoleAlias __AW_SUFFIXED__(GetConsoleAlias)
222 WINAPI DWORD GetConsoleAliasA (LPSTR, LPSTR, DWORD, LPSTR);
223 WINAPI DWORD GetConsoleAliasW (LPWSTR, LPWSTR, DWORD, LPWSTR);
225 WINAPI UINT GetConsoleCP (void);
226 WINAPI BOOL GetConsoleCursorInfo (HANDLE, PCONSOLE_CURSOR_INFO);
227 WINAPI BOOL GetConsoleMode (HANDLE, PDWORD);
228 WINAPI UINT GetConsoleOutputCP (void);
229 WINAPI BOOL GetConsoleScreenBufferInfo (HANDLE, PCONSOLE_SCREEN_BUFFER_INFO);
231 #define GetConsoleTitle __AW_SUFFIXED__(GetConsoleTitle)
232 WINAPI DWORD GetConsoleTitleA (LPSTR, DWORD);
233 WINAPI DWORD GetConsoleTitleW (LPWSTR, DWORD);
235 WINAPI COORD GetLargestConsoleWindowSize (HANDLE);
236 WINAPI BOOL GetNumberOfConsoleInputEvents (HANDLE, PDWORD);
237 WINAPI BOOL GetNumberOfConsoleMouseButtons (PDWORD);
238 WINAPI BOOL HandlerRoutine (DWORD);
240 #define PeekConsoleInput __AW_SUFFIXED__(PeekConsoleInput)
241 WINAPI BOOL PeekConsoleInputA (HANDLE, PINPUT_RECORD, DWORD, PDWORD);
242 WINAPI BOOL PeekConsoleInputW (HANDLE, PINPUT_RECORD, DWORD, PDWORD);
244 #define ReadConsole __AW_SUFFIXED__(ReadConsole)
245 WINAPI BOOL ReadConsoleA (HANDLE, PVOID, DWORD, PDWORD, PVOID);
246 WINAPI BOOL ReadConsoleW (HANDLE, PVOID, DWORD, PDWORD, PVOID);
248 #define ReadConsoleInput __AW_SUFFIXED__(ReadConsoleInput)
249 WINAPI BOOL ReadConsoleInputA (HANDLE, PINPUT_RECORD, DWORD, PDWORD);
250 WINAPI BOOL ReadConsoleInputW (HANDLE, PINPUT_RECORD, DWORD, PDWORD);
252 WINAPI BOOL ReadConsoleOutputAttribute (HANDLE, LPWORD, DWORD, COORD, LPDWORD);
254 #define ReadConsoleOutputCharacter __AW_SUFFIXED__(ReadConsoleOutputCharacter)
255 WINAPI BOOL ReadConsoleOutputCharacterA (HANDLE, LPSTR, DWORD, COORD, PDWORD);
256 WINAPI BOOL ReadConsoleOutputCharacterW (HANDLE, LPWSTR, DWORD, COORD, PDWORD);
258 #define ReadConsoleOutput __AW_SUFFIXED__(ReadConsoleOutput)
259 WINAPI BOOL ReadConsoleOutputA (HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT);
260 WINAPI BOOL ReadConsoleOutputW (HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT);
262 #define ScrollConsoleScreenBuffer __AW_SUFFIXED__(ScrollConsoleScreenBuffer)
263 WINAPI BOOL ScrollConsoleScreenBufferA
264 (HANDLE, const SMALL_RECT *, const SMALL_RECT *, COORD, const CHAR_INFO *);
265 WINAPI BOOL ScrollConsoleScreenBufferW
266 (HANDLE, const SMALL_RECT *, const SMALL_RECT *, COORD, const CHAR_INFO *);
268 WINAPI BOOL SetConsoleActiveScreenBuffer (HANDLE);
269 WINAPI BOOL SetConsoleCP (UINT);
270 WINAPI BOOL SetConsoleCtrlHandler (PHANDLER_ROUTINE, BOOL);
271 WINAPI BOOL SetConsoleCursorInfo (HANDLE, const CONSOLE_CURSOR_INFO *);
272 WINAPI BOOL SetConsoleCursorPosition (HANDLE, COORD);
273 WINAPI BOOL SetConsoleMode (HANDLE, DWORD);
274 WINAPI BOOL SetConsoleOutputCP (UINT);
275 WINAPI BOOL SetConsoleScreenBufferSize (HANDLE, COORD);
276 WINAPI BOOL SetConsoleTextAttribute (HANDLE, WORD);
278 #define SetConsoleTitle __AW_SUFFIXED__(SetConsoleTitle)
279 WINAPI BOOL SetConsoleTitleA (LPCSTR);
280 WINAPI BOOL SetConsoleTitleW (LPCWSTR);
282 WINAPI BOOL SetConsoleWindowInfo (HANDLE, BOOL, const SMALL_RECT *);
284 #define WriteConsole __AW_SUFFIXED__(WriteConsole)
285 WINAPI BOOL WriteConsoleA (HANDLE, PCVOID, DWORD, PDWORD, PVOID);
286 WINAPI BOOL WriteConsoleW (HANDLE, PCVOID, DWORD, PDWORD, PVOID);
288 #define WriteConsoleInput __AW_SUFFIXED__(WriteConsoleInput)
289 WINAPI BOOL WriteConsoleInputA (HANDLE, const INPUT_RECORD *, DWORD, PDWORD);
290 WINAPI BOOL WriteConsoleInputW (HANDLE, const INPUT_RECORD *, DWORD, PDWORD);
292 #define WriteConsoleOutput __AW_SUFFIXED__(WriteConsoleOutput)
293 WINAPI BOOL WriteConsoleOutputA (HANDLE, const CHAR_INFO *, COORD, COORD, PSMALL_RECT);
294 WINAPI BOOL WriteConsoleOutputW (HANDLE, const CHAR_INFO *, COORD, COORD, PSMALL_RECT);
296 WINAPI BOOL WriteConsoleOutputAttribute (HANDLE, const WORD *, DWORD, COORD, PDWORD);
298 #define WriteConsoleOutputCharacter __AW_SUFFIXED__(WriteConsoleOutputCharacter)
299 WINAPI BOOL WriteConsoleOutputCharacterA (HANDLE, LPCSTR, DWORD, COORD, PDWORD);
300 WINAPI BOOL WriteConsoleOutputCharacterW (HANDLE, LPCWSTR, DWORD, COORD, PDWORD);
302 #if _WIN32_WINNT >= _WIN32_WINNT_WIN2K
304 #define CONSOLE_FULLSCREEN 0x0001
305 #define CONSOLE_FULLSCREEN_HARDWARE 0x0002
307 WINAPI BOOL GetConsoleDisplayMode (LPDWORD);
308 WINAPI COORD GetConsoleFontSize (HANDLE, DWORD);
309 WINAPI HWND GetConsoleWindow (void);
311 #if _WIN32_WINNT >= _WIN32_WINNT_WINXP
313 #define CONSOLE_FULLSCREEN_MODE 0x0001
314 #define CONSOLE_WINDOWED_MODE 0x0002
315 #define CONSOLE_NO_SELECTION 0x0000
316 #define CONSOLE_SELECTION_IN_PROGRESS 0x0001
317 #define CONSOLE_SELECTION_NOT_EMPTY 0x0002
318 #define CONSOLE_MOUSE_SELECTION 0x0004
319 #define CONSOLE_MOUSE_DOWN 0x0008
322 struct _CONSOLE_FONT_INFO
325 } CONSOLE_FONT_INFO, *PCONSOLE_FONT_INFO;
328 struct _CONSOLE_SELECTION_INFO
330 COORD dwSelectionAnchor;
331 SMALL_RECT srSelection;
332 } CONSOLE_SELECTION_INFO, *PCONSOLE_SELECTION_INFO;
334 #define AddConsoleAlias __AW_SUFFIXED__(AddConsoleAlias)
335 WINAPI BOOL AddConsoleAliasA (LPCSTR, LPCSTR, LPCSTR);
336 WINAPI BOOL AddConsoleAliasW (LPCWSTR, LPCWSTR, LPCWSTR);
338 #define ATTACH_PARENT_PROCESS ((DWORD)(-1))
340 WINAPI BOOL AttachConsole (DWORD);
342 #define GetConsoleAliases __AW_SUFFIXED__(GetConsoleAliases)
343 WINAPI DWORD GetConsoleAliasesA (LPSTR, DWORD, LPSTR);
344 WINAPI DWORD GetConsoleAliasesW (LPWSTR, DWORD, LPWSTR);
346 #define GetConsoleAliasExes __AW_SUFFIXED__(GetConsoleAliasExes)
347 WINAPI DWORD GetConsoleAliasExesA (LPSTR, DWORD);
348 WINAPI DWORD GetConsoleAliasExesW (LPWSTR, DWORD);
350 #define GetConsoleAliasesLength __AW_SUFFIXED__(GetConsoleAliasesLength)
351 WINAPI DWORD GetConsoleAliasesLengthA (LPSTR);
352 WINAPI DWORD GetConsoleAliasesLengthW (LPWSTR);
354 #define GetConsoleAliasExesLength __AW_SUFFIXED__(GetConsoleAliasExesLength)
355 WINAPI DWORD GetConsoleAliasExesLengthA (void);
356 WINAPI DWORD GetConsoleAliasExesLengthW (void);
358 WINAPI BOOL GetConsoleSelectionInfo (PCONSOLE_SELECTION_INFO);
359 WINAPI DWORD GetConsoleProcessList (LPDWORD, DWORD);
360 WINAPI BOOL GetCurrentConsoleFont (HANDLE, BOOL, PCONSOLE_FONT_INFO);
361 WINAPI BOOL SetConsoleDisplayMode (HANDLE, DWORD, PCOORD);
363 #if _WIN32_WINNT >= _WIN32_WINNT_VISTA
365 #define HISTORY_NO_DUP_FLAG 0x0001
368 struct _CONSOLE_FONT_INFOEX
374 WCHAR FaceName[LF_FACESIZE];
375 } CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
380 UINT HistoryBufferSize;
381 UINT NumberOfHistoryBuffers;
383 } CONSOLE_HISTORY_INFO, *PCONSOLE_HISTORY_INFO;
386 struct _CONSOLE_READCONSOLE_CONTROL
389 ULONG dwCtrlWakeupMask;
390 ULONG dwControlKeyState;
391 } CONSOLE_READCONSOLE_CONTROL, *PCONSOLE_READCONSOLE_CONTROL;
394 struct _CONSOLE_SCREEN_BUFFER_INFOEX
397 COORD dwCursorPosition;
400 COORD dwMaximumWindowSize;
401 WORD wPopupAttributes;
402 BOOL bFullscreenSupported;
403 COLORREF ColorTable[16];
404 } CONSOLE_SCREEN_BUFFER_INFOEX, *PCONSOLE_SCREEN_BUFFER_INFOEX;
406 WINAPI BOOL GetConsoleHistoryInfo (PCONSOLE_HISTORY_INFO);
408 #define GetConsoleOriginalTitle __AW_SUFFIXED__(GetConsoleOriginalTitle)
409 WINAPI DWORD GetConsoleOriginalTitleA (LPSTR, DWORD);
410 WINAPI DWORD GetConsoleOriginalTitleW (LPWSTR, DWORD);
412 WINAPI BOOL GetConsoleScreenBufferInfoEx (HANDLE, PCONSOLE_SCREEN_BUFFER_INFOEX);
413 WINAPI BOOL GetCurrentConsoleFontEx (HANDLE, BOOL, PCONSOLE_FONT_INFOEX);
414 WINAPI BOOL SetConsoleHistoryInfo (PCONSOLE_HISTORY_INFO);
415 WINAPI BOOL SetConsoleScreenBufferInfoEx (HANDLE, PCONSOLE_SCREEN_BUFFER_INFOEX);
416 WINAPI BOOL SetCurrentConsoleFontEx (HANDLE, BOOL, PCONSOLE_FONT_INFOEX);
418 #endif /* Vista and later */
419 #endif /* WinXP and later */
420 #endif /* Win2K and later */
424 #endif /* !_WINCON_H: $RCSfile$: end of file */