1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _WINCON_
7 #define _WINCON_
8 
9 #include <_mingw_unicode.h>
10 
11 #include <winapifamily.h>
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
17 #define CONSOLE_REAL_OUTPUT_HANDLE (LongToHandle(-2))
18 #define CONSOLE_REAL_INPUT_HANDLE (LongToHandle(-3))
19 
20   typedef struct _COORD {
21     SHORT X;
22     SHORT Y;
23   } COORD,*PCOORD;
24 
25   typedef struct _SMALL_RECT {
26     SHORT Left;
27     SHORT Top;
28     SHORT Right;
29     SHORT Bottom;
30   } SMALL_RECT,*PSMALL_RECT;
31 
32   typedef struct _KEY_EVENT_RECORD {
33     WINBOOL bKeyDown;
34     WORD wRepeatCount;
35     WORD wVirtualKeyCode;
36     WORD wVirtualScanCode;
37     union {
38       WCHAR UnicodeChar;
39       CHAR AsciiChar;
40     } uChar;
41     DWORD dwControlKeyState;
42   } KEY_EVENT_RECORD,*PKEY_EVENT_RECORD;
43 
44 #define RIGHT_ALT_PRESSED 0x1
45 #define LEFT_ALT_PRESSED 0x2
46 #define RIGHT_CTRL_PRESSED 0x4
47 #define LEFT_CTRL_PRESSED 0x8
48 #define SHIFT_PRESSED 0x10
49 #define NUMLOCK_ON 0x20
50 #define SCROLLLOCK_ON 0x40
51 #define CAPSLOCK_ON 0x80
52 #define ENHANCED_KEY 0x100
53 #define NLS_DBCSCHAR 0x10000
54 #define NLS_ALPHANUMERIC 0x0
55 #define NLS_KATAKANA 0x20000
56 #define NLS_HIRAGANA 0x40000
57 #define NLS_ROMAN 0x400000
58 #define NLS_IME_CONVERSION 0x800000
59 #define ALTNUMPAD_BIT 0x4000000
60 #define NLS_IME_DISABLE 0x20000000
61 
62   typedef struct _MOUSE_EVENT_RECORD {
63     COORD dwMousePosition;
64     DWORD dwButtonState;
65     DWORD dwControlKeyState;
66     DWORD dwEventFlags;
67   } MOUSE_EVENT_RECORD,*PMOUSE_EVENT_RECORD;
68 
69 #define FROM_LEFT_1ST_BUTTON_PRESSED 0x1
70 #define RIGHTMOST_BUTTON_PRESSED 0x2
71 #define FROM_LEFT_2ND_BUTTON_PRESSED 0x4
72 #define FROM_LEFT_3RD_BUTTON_PRESSED 0x8
73 #define FROM_LEFT_4TH_BUTTON_PRESSED 0x10
74 
75 #define MOUSE_MOVED 0x1
76 #define DOUBLE_CLICK 0x2
77 #define MOUSE_WHEELED 0x4
78 #if (_WIN32_WINNT >= 0x0600)
79 #define MOUSE_HWHEELED 0x8
80 #endif
81 
82   typedef struct _WINDOW_BUFFER_SIZE_RECORD {
83     COORD dwSize;
84   } WINDOW_BUFFER_SIZE_RECORD,*PWINDOW_BUFFER_SIZE_RECORD;
85 
86   typedef struct _MENU_EVENT_RECORD {
87     UINT dwCommandId;
88   } MENU_EVENT_RECORD,*PMENU_EVENT_RECORD;
89 
90   typedef struct _FOCUS_EVENT_RECORD {
91     WINBOOL bSetFocus;
92   } FOCUS_EVENT_RECORD,*PFOCUS_EVENT_RECORD;
93 
94   typedef struct _INPUT_RECORD {
95     WORD EventType;
96     union {
97       KEY_EVENT_RECORD KeyEvent;
98       MOUSE_EVENT_RECORD MouseEvent;
99       WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
100       MENU_EVENT_RECORD MenuEvent;
101       FOCUS_EVENT_RECORD FocusEvent;
102     } Event;
103   } INPUT_RECORD,*PINPUT_RECORD;
104 
105 #define KEY_EVENT 0x1
106 #define MOUSE_EVENT 0x2
107 #define WINDOW_BUFFER_SIZE_EVENT 0x4
108 #define MENU_EVENT 0x8
109 #define FOCUS_EVENT 0x10
110 
111   typedef struct _CHAR_INFO {
112     union {
113       WCHAR UnicodeChar;
114       CHAR AsciiChar;
115     } Char;
116     WORD Attributes;
117   } CHAR_INFO,*PCHAR_INFO;
118 
119 #define FOREGROUND_BLUE 0x1
120 #define FOREGROUND_GREEN 0x2
121 #define FOREGROUND_RED 0x4
122 #define FOREGROUND_INTENSITY 0x8
123 #define BACKGROUND_BLUE 0x10
124 #define BACKGROUND_GREEN 0x20
125 #define BACKGROUND_RED 0x40
126 #define BACKGROUND_INTENSITY 0x80
127 #define COMMON_LVB_LEADING_BYTE 0x100
128 #define COMMON_LVB_TRAILING_BYTE 0x200
129 #define COMMON_LVB_GRID_HORIZONTAL 0x400
130 #define COMMON_LVB_GRID_LVERTICAL 0x800
131 #define COMMON_LVB_GRID_RVERTICAL 0x1000
132 #define COMMON_LVB_REVERSE_VIDEO 0x4000
133 #define COMMON_LVB_UNDERSCORE 0x8000
134 
135 #define COMMON_LVB_SBCSDBCS 0x300
136 
137   typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
138     COORD dwSize;
139     COORD dwCursorPosition;
140     WORD wAttributes;
141     SMALL_RECT srWindow;
142     COORD dwMaximumWindowSize;
143   } CONSOLE_SCREEN_BUFFER_INFO,*PCONSOLE_SCREEN_BUFFER_INFO;
144 
145   typedef struct _CONSOLE_CURSOR_INFO {
146     DWORD dwSize;
147     WINBOOL bVisible;
148   } CONSOLE_CURSOR_INFO,*PCONSOLE_CURSOR_INFO;
149 
150   typedef struct _CONSOLE_FONT_INFO {
151     DWORD nFont;
152     COORD dwFontSize;
153   } CONSOLE_FONT_INFO,*PCONSOLE_FONT_INFO;
154 
155   typedef struct _CONSOLE_SELECTION_INFO {
156     DWORD dwFlags;
157     COORD dwSelectionAnchor;
158     SMALL_RECT srSelection;
159   } CONSOLE_SELECTION_INFO,*PCONSOLE_SELECTION_INFO;
160 
161 #define CONSOLE_NO_SELECTION 0x0
162 #define CONSOLE_SELECTION_IN_PROGRESS 0x1
163 #define CONSOLE_SELECTION_NOT_EMPTY 0x2
164 #define CONSOLE_MOUSE_SELECTION 0x4
165 #define CONSOLE_MOUSE_DOWN 0x8
166 
167   typedef WINBOOL (WINAPI *PHANDLER_ROUTINE)(DWORD CtrlType);
168 
169 #define CTRL_C_EVENT 0
170 #define CTRL_BREAK_EVENT 1
171 #define CTRL_CLOSE_EVENT 2
172 
173 #define CTRL_LOGOFF_EVENT 5
174 #define CTRL_SHUTDOWN_EVENT 6
175 
176 #define ENABLE_PROCESSED_INPUT 0x1
177 #define ENABLE_LINE_INPUT 0x2
178 #define ENABLE_ECHO_INPUT 0x4
179 #define ENABLE_WINDOW_INPUT 0x8
180 #define ENABLE_MOUSE_INPUT 0x10
181 #define ENABLE_INSERT_MODE 0x20
182 #define ENABLE_QUICK_EDIT_MODE 0x40
183 #define ENABLE_EXTENDED_FLAGS 0x80
184 #define ENABLE_AUTO_POSITION 0x100
185 #define ENABLE_VIRTUAL_TERMINAL_INPUT 0x200
186 
187 #define ENABLE_PROCESSED_OUTPUT 0x1
188 #define ENABLE_WRAP_AT_EOL_OUTPUT 0x2
189 #define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x4
190 #define DISABLE_NEWLINE_AUTO_RETURN 0x8
191 #define ENABLE_LVB_GRID_WORLDWIDE 0x10
192 
193 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
194 
195 #define PeekConsoleInput __MINGW_NAME_AW(PeekConsoleInput)
196 #define ReadConsoleInput __MINGW_NAME_AW(ReadConsoleInput)
197 #define WriteConsoleInput __MINGW_NAME_AW(WriteConsoleInput)
198 #define ReadConsoleOutput __MINGW_NAME_AW(ReadConsoleOutput)
199 #define WriteConsoleOutput __MINGW_NAME_AW(WriteConsoleOutput)
200 #define ReadConsoleOutputCharacter __MINGW_NAME_AW(ReadConsoleOutputCharacter)
201 #define WriteConsoleOutputCharacter __MINGW_NAME_AW(WriteConsoleOutputCharacter)
202 #define FillConsoleOutputCharacter __MINGW_NAME_AW(FillConsoleOutputCharacter)
203 #define ScrollConsoleScreenBuffer __MINGW_NAME_AW(ScrollConsoleScreenBuffer)
204 #define GetConsoleTitle __MINGW_NAME_AW(GetConsoleTitle)
205 #define SetConsoleTitle __MINGW_NAME_AW(SetConsoleTitle)
206 #define ReadConsole __MINGW_NAME_AW(ReadConsole)
207 #define WriteConsole __MINGW_NAME_AW(WriteConsole)
208 #define AddConsoleAlias __MINGW_NAME_AW(AddConsoleAlias)
209 #define GetConsoleAlias __MINGW_NAME_AW(GetConsoleAlias)
210 #define GetConsoleAliasesLength __MINGW_NAME_AW(GetConsoleAliasesLength)
211 #define GetConsoleAliasExesLength __MINGW_NAME_AW(GetConsoleAliasExesLength)
212 #define GetConsoleAliases __MINGW_NAME_AW(GetConsoleAliases)
213 #define GetConsoleAliasExes __MINGW_NAME_AW(GetConsoleAliasExes)
214 
215   WINBASEAPI WINBOOL WINAPI PeekConsoleInputA(HANDLE hConsoleInput,PINPUT_RECORD lpBuffer,DWORD nLength,LPDWORD lpNumberOfEventsRead);
216   WINBASEAPI WINBOOL WINAPI PeekConsoleInputW(HANDLE hConsoleInput,PINPUT_RECORD lpBuffer,DWORD nLength,LPDWORD lpNumberOfEventsRead);
217   WINBASEAPI WINBOOL WINAPI ReadConsoleInputA(HANDLE hConsoleInput,PINPUT_RECORD lpBuffer,DWORD nLength,LPDWORD lpNumberOfEventsRead);
218   WINBASEAPI WINBOOL WINAPI ReadConsoleInputW(HANDLE hConsoleInput,PINPUT_RECORD lpBuffer,DWORD nLength,LPDWORD lpNumberOfEventsRead);
219   WINBASEAPI WINBOOL WINAPI WriteConsoleInputA(HANDLE hConsoleInput,CONST INPUT_RECORD *lpBuffer,DWORD nLength,LPDWORD lpNumberOfEventsWritten);
220   WINBASEAPI WINBOOL WINAPI WriteConsoleInputW(HANDLE hConsoleInput,CONST INPUT_RECORD *lpBuffer,DWORD nLength,LPDWORD lpNumberOfEventsWritten);
221   WINBASEAPI WINBOOL WINAPI ReadConsoleOutputA(HANDLE hConsoleOutput,PCHAR_INFO lpBuffer,COORD dwBufferSize,COORD dwBufferCoord,PSMALL_RECT lpReadRegion);
222   WINBASEAPI WINBOOL WINAPI ReadConsoleOutputW(HANDLE hConsoleOutput,PCHAR_INFO lpBuffer,COORD dwBufferSize,COORD dwBufferCoord,PSMALL_RECT lpReadRegion);
223   WINBASEAPI WINBOOL WINAPI WriteConsoleOutputA(HANDLE hConsoleOutput,CONST CHAR_INFO *lpBuffer,COORD dwBufferSize,COORD dwBufferCoord,PSMALL_RECT lpWriteRegion);
224   WINBASEAPI WINBOOL WINAPI WriteConsoleOutputW(HANDLE hConsoleOutput,CONST CHAR_INFO *lpBuffer,COORD dwBufferSize,COORD dwBufferCoord,PSMALL_RECT lpWriteRegion);
225   WINBASEAPI WINBOOL WINAPI ReadConsoleOutputCharacterA(HANDLE hConsoleOutput,LPSTR lpCharacter,DWORD nLength,COORD dwReadCoord,LPDWORD lpNumberOfCharsRead);
226   WINBASEAPI WINBOOL WINAPI ReadConsoleOutputCharacterW(HANDLE hConsoleOutput,LPWSTR lpCharacter,DWORD nLength,COORD dwReadCoord,LPDWORD lpNumberOfCharsRead);
227   WINBASEAPI WINBOOL WINAPI ReadConsoleOutputAttribute(HANDLE hConsoleOutput,LPWORD lpAttribute,DWORD nLength,COORD dwReadCoord,LPDWORD lpNumberOfAttrsRead);
228   WINBASEAPI WINBOOL WINAPI WriteConsoleOutputCharacterA(HANDLE hConsoleOutput,LPCSTR lpCharacter,DWORD nLength,COORD dwWriteCoord,LPDWORD lpNumberOfCharsWritten);
229   WINBASEAPI WINBOOL WINAPI WriteConsoleOutputCharacterW(HANDLE hConsoleOutput,LPCWSTR lpCharacter,DWORD nLength,COORD dwWriteCoord,LPDWORD lpNumberOfCharsWritten);
230   WINBASEAPI WINBOOL WINAPI WriteConsoleOutputAttribute(HANDLE hConsoleOutput,CONST WORD *lpAttribute,DWORD nLength,COORD dwWriteCoord,LPDWORD lpNumberOfAttrsWritten);
231   WINBASEAPI WINBOOL WINAPI FillConsoleOutputCharacterA(HANDLE hConsoleOutput,CHAR cCharacter,DWORD nLength,COORD dwWriteCoord,LPDWORD lpNumberOfCharsWritten);
232   WINBASEAPI WINBOOL WINAPI FillConsoleOutputCharacterW(HANDLE hConsoleOutput,WCHAR cCharacter,DWORD nLength,COORD dwWriteCoord,LPDWORD lpNumberOfCharsWritten);
233   WINBASEAPI WINBOOL WINAPI FillConsoleOutputAttribute(HANDLE hConsoleOutput,WORD wAttribute,DWORD nLength,COORD dwWriteCoord,LPDWORD lpNumberOfAttrsWritten);
234   WINBASEAPI WINBOOL WINAPI GetConsoleMode(HANDLE hConsoleHandle,LPDWORD lpMode);
235   WINBASEAPI WINBOOL WINAPI GetNumberOfConsoleInputEvents(HANDLE hConsoleInput,LPDWORD lpNumberOfEvents);
236   WINBASEAPI WINBOOL WINAPI GetConsoleScreenBufferInfo(HANDLE hConsoleOutput,PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo);
237   WINBASEAPI COORD WINAPI GetLargestConsoleWindowSize(HANDLE hConsoleOutput);
238   WINBASEAPI WINBOOL WINAPI GetConsoleCursorInfo(HANDLE hConsoleOutput,PCONSOLE_CURSOR_INFO lpConsoleCursorInfo);
239   WINBASEAPI WINBOOL WINAPI GetCurrentConsoleFont(HANDLE hConsoleOutput,WINBOOL bMaximumWindow,PCONSOLE_FONT_INFO lpConsoleCurrentFont);
240   WINBASEAPI COORD WINAPI GetConsoleFontSize(HANDLE hConsoleOutput,DWORD nFont);
241   WINBASEAPI WINBOOL WINAPI GetConsoleSelectionInfo(PCONSOLE_SELECTION_INFO lpConsoleSelectionInfo);
242   WINBASEAPI WINBOOL WINAPI GetNumberOfConsoleMouseButtons(LPDWORD lpNumberOfMouseButtons);
243   WINBASEAPI WINBOOL WINAPI SetConsoleMode(HANDLE hConsoleHandle,DWORD dwMode);
244   WINBASEAPI WINBOOL WINAPI SetConsoleActiveScreenBuffer(HANDLE hConsoleOutput);
245   WINBASEAPI WINBOOL WINAPI FlushConsoleInputBuffer(HANDLE hConsoleInput);
246   WINBASEAPI WINBOOL WINAPI SetConsoleScreenBufferSize(HANDLE hConsoleOutput,COORD dwSize);
247   WINBASEAPI WINBOOL WINAPI SetConsoleCursorPosition(HANDLE hConsoleOutput,COORD dwCursorPosition);
248   WINBASEAPI WINBOOL WINAPI SetConsoleCursorInfo(HANDLE hConsoleOutput,CONST CONSOLE_CURSOR_INFO *lpConsoleCursorInfo);
249   WINBASEAPI WINBOOL WINAPI ScrollConsoleScreenBufferA(HANDLE hConsoleOutput,CONST SMALL_RECT *lpScrollRectangle,CONST SMALL_RECT *lpClipRectangle,COORD dwDestinationOrigin,CONST CHAR_INFO *lpFill);
250   WINBASEAPI WINBOOL WINAPI ScrollConsoleScreenBufferW(HANDLE hConsoleOutput,CONST SMALL_RECT *lpScrollRectangle,CONST SMALL_RECT *lpClipRectangle,COORD dwDestinationOrigin,CONST CHAR_INFO *lpFill);
251   WINBASEAPI WINBOOL WINAPI SetConsoleWindowInfo(HANDLE hConsoleOutput,WINBOOL bAbsolute,CONST SMALL_RECT *lpConsoleWindow);
252   WINBASEAPI WINBOOL WINAPI SetConsoleTextAttribute(HANDLE hConsoleOutput,WORD wAttributes);
253   WINBASEAPI WINBOOL WINAPI SetConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine,WINBOOL Add);
254   WINBASEAPI WINBOOL WINAPI GenerateConsoleCtrlEvent(DWORD dwCtrlEvent,DWORD dwProcessGroupId);
255   WINBASEAPI WINBOOL WINAPI AllocConsole(VOID);
256   WINBASEAPI WINBOOL WINAPI FreeConsole(VOID);
257   WINBASEAPI WINBOOL WINAPI AttachConsole(DWORD dwProcessId);
258 
259 #define ATTACH_PARENT_PROCESS ((DWORD)-1)
260 
261   WINBASEAPI DWORD WINAPI GetConsoleTitleA(LPSTR lpConsoleTitle,DWORD nSize);
262   WINBASEAPI DWORD WINAPI GetConsoleTitleW(LPWSTR lpConsoleTitle,DWORD nSize);
263   WINBASEAPI WINBOOL WINAPI SetConsoleTitleA(LPCSTR lpConsoleTitle);
264   WINBASEAPI WINBOOL WINAPI SetConsoleTitleW(LPCWSTR lpConsoleTitle);
265   WINBASEAPI WINBOOL WINAPI ReadConsoleA(HANDLE hConsoleInput,LPVOID lpBuffer,DWORD nNumberOfCharsToRead,LPDWORD lpNumberOfCharsRead,LPVOID lpReserved);
266   WINBASEAPI WINBOOL WINAPI ReadConsoleW(HANDLE hConsoleInput,LPVOID lpBuffer,DWORD nNumberOfCharsToRead,LPDWORD lpNumberOfCharsRead,LPVOID lpReserved);
267   WINBASEAPI WINBOOL WINAPI WriteConsoleA(HANDLE hConsoleOutput,CONST VOID *lpBuffer,DWORD nNumberOfCharsToWrite,LPDWORD lpNumberOfCharsWritten,LPVOID lpReserved);
268   WINBASEAPI WINBOOL WINAPI WriteConsoleW(HANDLE hConsoleOutput,CONST VOID *lpBuffer,DWORD nNumberOfCharsToWrite,LPDWORD lpNumberOfCharsWritten,LPVOID lpReserved);
269 
270 #define CONSOLE_TEXTMODE_BUFFER 1
271 
272   WINBASEAPI HANDLE WINAPI CreateConsoleScreenBuffer(DWORD dwDesiredAccess,DWORD dwShareMode,CONST SECURITY_ATTRIBUTES *lpSecurityAttributes,DWORD dwFlags,LPVOID lpScreenBufferData);
273   WINBASEAPI UINT WINAPI GetConsoleCP(VOID);
274   WINBASEAPI WINBOOL WINAPI SetConsoleCP(UINT wCodePageID);
275   WINBASEAPI UINT WINAPI GetConsoleOutputCP(VOID);
276   WINBASEAPI WINBOOL WINAPI SetConsoleOutputCP(UINT wCodePageID);
277 
278 #define CONSOLE_FULLSCREEN 1
279 #define CONSOLE_FULLSCREEN_HARDWARE 2
280   WINBASEAPI WINBOOL WINAPI GetConsoleDisplayMode(LPDWORD lpModeFlags);
281 
282 #define CONSOLE_FULLSCREEN_MODE 1
283 #define CONSOLE_WINDOWED_MODE 2
284   WINBASEAPI WINBOOL WINAPI SetConsoleDisplayMode(HANDLE hConsoleOutput, DWORD dwFlags, PCOORD lpNewScreenBufferDimensions);
285 
286   WINBASEAPI HWND WINAPI GetConsoleWindow(VOID);
287   WINBASEAPI DWORD WINAPI GetConsoleProcessList(LPDWORD lpdwProcessList,DWORD dwProcessCount);
288   WINBASEAPI WINBOOL WINAPI AddConsoleAliasA(LPSTR Source,LPSTR Target,LPSTR ExeName);
289   WINBASEAPI WINBOOL WINAPI AddConsoleAliasW(LPWSTR Source,LPWSTR Target,LPWSTR ExeName);
290   WINBASEAPI DWORD WINAPI GetConsoleAliasA(LPSTR Source,LPSTR TargetBuffer,DWORD TargetBufferLength,LPSTR ExeName);
291   WINBASEAPI DWORD WINAPI GetConsoleAliasW(LPWSTR Source,LPWSTR TargetBuffer,DWORD TargetBufferLength,LPWSTR ExeName);
292   WINBASEAPI DWORD WINAPI GetConsoleAliasesLengthA(LPSTR ExeName);
293   WINBASEAPI DWORD WINAPI GetConsoleAliasesLengthW(LPWSTR ExeName);
294   WINBASEAPI DWORD WINAPI GetConsoleAliasExesLengthA(VOID);
295   WINBASEAPI DWORD WINAPI GetConsoleAliasExesLengthW(VOID);
296   WINBASEAPI DWORD WINAPI GetConsoleAliasesA(LPSTR AliasBuffer,DWORD AliasBufferLength,LPSTR ExeName);
297   WINBASEAPI DWORD WINAPI GetConsoleAliasesW(LPWSTR AliasBuffer,DWORD AliasBufferLength,LPWSTR ExeName);
298   WINBASEAPI DWORD WINAPI GetConsoleAliasExesA(LPSTR ExeNameBuffer,DWORD ExeNameBufferLength);
299   WINBASEAPI DWORD WINAPI GetConsoleAliasExesW(LPWSTR ExeNameBuffer,DWORD ExeNameBufferLength);
300 
301 WINBASEAPI VOID WINAPI ExpungeConsoleCommandHistoryA(LPSTR ExeName);
302 WINBASEAPI VOID WINAPI ExpungeConsoleCommandHistoryW(LPWSTR ExeName);
303 #define ExpungeConsoleCommandHistory __MINGW_NAME_AW(ExpungeConsoleCommandHistory)
304 
305 WINBASEAPI WINBOOL WINAPI SetConsoleNumberOfCommandsA(DWORD Number, LPSTR ExeName);
306 WINBASEAPI WINBOOL WINAPI SetConsoleNumberOfCommandsW(DWORD Number, LPWSTR ExeName);
307 #define SetConsoleNumberOfCommands __MINGW_NAME_AW(SetConsoleNumberOfCommands)
308 
309 WINBASEAPI DWORD WINAPI GetConsoleCommandHistoryLengthA(LPSTR ExeName);
310 WINBASEAPI DWORD WINAPI GetConsoleCommandHistoryLengthW(LPWSTR ExeName);
311 #define GetConsoleCommandHistoryLength __MINGW_NAME_AW(GetConsoleCommandHistoryLength)
312 
313 WINBASEAPI DWORD WINAPI GetConsoleCommandHistoryA(LPSTR Commands, DWORD CommandBufferLength, LPSTR ExeName);
314 WINBASEAPI DWORD WINAPI GetConsoleCommandHistoryW(LPWSTR Commands, DWORD CommandBufferLength, LPWSTR ExeName);
315 #define GetConsoleCommandHistory __MINGW_NAME_AW(GetConsoleCommandHistory)
316 
317 #ifndef LF_FACESIZE
318 #define LF_FACESIZE 32
319 #endif
320 
321 typedef struct _CONSOLE_FONT_INFOEX {
322   ULONG cbSize;
323   DWORD nFont;
324   COORD dwFontSize;
325   UINT  FontFamily;
326   UINT  FontWeight;
327   WCHAR FaceName[LF_FACESIZE];
328 } CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
329 
330 #define HISTORY_NO_DUP_FLAG 0x1
331 
332 typedef struct _CONSOLE_HISTORY_INFO {
333   UINT  cbSize;
334   UINT  HistoryBufferSize;
335   UINT  NumberOfHistoryBuffers;
336   DWORD dwFlags;
337 } CONSOLE_HISTORY_INFO, *PCONSOLE_HISTORY_INFO;
338 
339 typedef struct _CONSOLE_READCONSOLE_CONTROL {
340   ULONG nLength;
341   ULONG nInitialChars;
342   ULONG dwCtrlWakeupMask;
343   ULONG dwControlKeyState;
344 } CONSOLE_READCONSOLE_CONTROL, *PCONSOLE_READCONSOLE_CONTROL;
345 
346 typedef struct _CONSOLE_SCREEN_BUFFER_INFOEX {
347   ULONG      cbSize;
348   COORD      dwSize;
349   COORD      dwCursorPosition;
350   WORD       wAttributes;
351   SMALL_RECT srWindow;
352   COORD      dwMaximumWindowSize;
353   WORD       wPopupAttributes;
354   WINBOOL    bFullscreenSupported;
355   COLORREF   ColorTable[16];
356 } CONSOLE_SCREEN_BUFFER_INFOEX, *PCONSOLE_SCREEN_BUFFER_INFOEX;
357 
358 WINBOOL WINAPI GetConsoleHistoryInfo(
359   PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo
360 );
361 
362 #if (_WIN32_WINNT >= 0x0600)
363 #define GetConsoleOriginalTitle __MINGW_NAME_AW(GetConsoleOriginalTitle)
364 
365 WINBASEAPI DWORD WINAPI GetConsoleOriginalTitleA(
366   LPSTR lpConsoleTitle,
367   DWORD nSize
368 );
369 
370 WINBASEAPI DWORD WINAPI GetConsoleOriginalTitleW(
371   LPWSTR lpConsoleTitle,
372   DWORD nSize
373 );
374 #endif /* (_WIN32_WINNT >= 0x0600) */
375 
376 WINBASEAPI WINBOOL WINAPI GetConsoleScreenBufferInfoEx(
377   HANDLE hConsoleOutput,
378   PCONSOLE_SCREEN_BUFFER_INFOEX lpConsoleScreenBufferInfoEx
379 );
380 
381 WINBASEAPI WINBOOL WINAPI GetCurrentConsoleFontEx(
382   HANDLE hConsoleOutput,
383   WINBOOL bMaximumWindow,
384   PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx
385 );
386 
387 WINBASEAPI WINBOOL WINAPI SetConsoleHistoryInfo(
388   PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo
389 );
390 
391 WINBASEAPI WINBOOL WINAPI SetConsoleScreenBufferInfoEx(
392   HANDLE hConsoleOutput,
393   PCONSOLE_SCREEN_BUFFER_INFOEX lpConsoleScreenBufferInfoEx
394 );
395 
396 WINBASEAPI WINBOOL WINAPI SetCurrentConsoleFontEx(
397   HANDLE hConsoleOutput,
398   WINBOOL bMaximumWindow,
399   PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx
400 );
401 
402 #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */
403 
404 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
405 
406 #if (NTDDI_VERSION >= 0x0A000006)
407 
408 /* CreatePseudoConsole Flags */
409 #define PSEUDOCONSOLE_INHERIT_CURSOR 1
410 
411 typedef VOID* HPCON;
412 
413 WINBASEAPI HRESULT WINAPI CreatePseudoConsole(COORD size, HANDLE hInput, HANDLE hOutput, DWORD dwFlags, HPCON* phPC);
414 WINBASEAPI HRESULT WINAPI ResizePseudoConsole(HPCON hPC, COORD size);
415 WINBASEAPI VOID WINAPI ClosePseudoConsole(HPCON hPC);
416 
417 #endif /* NTDDI_WIN10_RS5 */
418 
419 #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
420 
421 #ifdef __cplusplus
422 }
423 #endif
424 #endif
425