OSDN Git Service

3903aaea0c9776e5140c2ca1d8e2011e2627d93c
[mingw/mingw-org-wsl.git] / w32api / include / wincon.h
1 /*
2  * wincon.h
3  *
4  * Windows console I/O declarations, and API function prototypes.
5  *
6  * $Id$
7  *
8  * Written by Anders Norlander  <anorland@hem2.passagen.se>
9  * Copyright (C) 1998, 1999, 2002-2006, 2009, 2011, 2016, 2018,
10  *   MinGW.org Project.
11  *
12  *
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:
19  *
20  * The above copyright notice, this permission notice, and the following
21  * disclaimer shall be included in all copies or substantial portions of
22  * the Software.
23  *
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.
31  *
32  */
33 #ifndef _WINCON_H
34 #pragma GCC system_header
35 #define _WINCON_H
36
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...
40  */
41 # include <windef.h>
42 #else
43 /* ...but Vista and later introduce additional dependencies on <wingdi.h>;
44  * this will indirectly include <windef.h> anyway, so it suffices to...
45  */
46 # include <wingdi.h>
47 #endif
48
49 _BEGIN_C_DECLS
50
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
59
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
67
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
73
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
89
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
97
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
105
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
115
116 typedef
117 struct _CHAR_INFO
118 { union
119   { WCHAR                         UnicodeChar;
120     CHAR                          AsciiChar;
121   }                             Char;
122   WORD                          Attributes;
123 } CHAR_INFO, *PCHAR_INFO;
124
125 typedef
126 struct _SMALL_RECT
127 { SHORT                         Left;
128   SHORT                         Top;
129   SHORT                         Right;
130   SHORT                         Bottom;
131 } SMALL_RECT, *PSMALL_RECT;
132
133 typedef
134 struct _CONSOLE_CURSOR_INFO
135 { DWORD                         dwSize;
136   BOOL                          bVisible;
137 } CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
138
139 typedef
140 struct _COORD
141 { SHORT                         X;
142   SHORT                         Y;
143 } COORD, *PCOORD;
144
145 typedef
146 struct _CONSOLE_SCREEN_BUFFER_INFO
147 { COORD                         dwSize;
148   COORD                         dwCursorPosition;
149   WORD                          wAttributes;
150   SMALL_RECT                    srWindow;
151   COORD                         dwMaximumWindowSize;
152 } CONSOLE_SCREEN_BUFFER_INFO, *PCONSOLE_SCREEN_BUFFER_INFO;
153
154 typedef BOOL (CALLBACK *PHANDLER_ROUTINE)(DWORD);
155
156 typedef
157 struct _KEY_EVENT_RECORD
158 #ifdef __GNUC__  /* gcc's alignment is not what Win32 expects here! */
159 # define __MINGW_ATTRIBUTE_PACKED__ __attribute__((packed))
160 #else
161 # define __MINGW_ATTRIBUTE_PACKED__
162 #endif
163 { BOOL                          bKeyDown;
164   WORD                          wRepeatCount;
165   WORD                          wVirtualKeyCode;
166   WORD                          wVirtualScanCode;
167   union
168   { WCHAR                         UnicodeChar;
169     CHAR                          AsciiChar;
170   }                             uChar;
171   DWORD                         dwControlKeyState;
172 } __MINGW_ATTRIBUTE_PACKED__ KEY_EVENT_RECORD;
173
174 typedef
175 struct _MOUSE_EVENT_RECORD
176 { COORD                         dwMousePosition;
177   DWORD                         dwButtonState;
178   DWORD                         dwControlKeyState;
179   DWORD                         dwEventFlags;
180 } MOUSE_EVENT_RECORD;
181
182 typedef
183 struct _WINDOW_BUFFER_SIZE_RECORD
184 { COORD                         dwSize;
185 } WINDOW_BUFFER_SIZE_RECORD;
186
187 typedef
188 struct _MENU_EVENT_RECORD
189 { UINT                          dwCommandId;
190 } MENU_EVENT_RECORD, *PMENU_EVENT_RECORD;
191
192 typedef
193 struct _FOCUS_EVENT_RECORD
194 { BOOL                          bSetFocus;
195 } FOCUS_EVENT_RECORD;
196
197 typedef
198 struct _INPUT_RECORD
199 { WORD                          EventType;
200   union
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;
206   }                             Event;
207 } INPUT_RECORD, *PINPUT_RECORD;
208
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);
212
213 #define FillConsoleOutputCharacter __AW_SUFFIXED__(FillConsoleOutputCharacter)
214 WINAPI BOOL FillConsoleOutputCharacterA (HANDLE, CHAR, DWORD, COORD, PDWORD);
215 WINAPI BOOL FillConsoleOutputCharacterW (HANDLE, WCHAR, DWORD, COORD, PDWORD);
216
217 WINAPI BOOL FlushConsoleInputBuffer (HANDLE);
218 WINAPI BOOL FreeConsole (void);
219 WINAPI BOOL GenerateConsoleCtrlEvent (DWORD, DWORD);
220
221 #define GetConsoleAlias __AW_SUFFIXED__(GetConsoleAlias)
222 WINAPI DWORD GetConsoleAliasA (LPSTR, LPSTR, DWORD, LPSTR);
223 WINAPI DWORD GetConsoleAliasW (LPWSTR, LPWSTR, DWORD, LPWSTR);
224
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);
230
231 #define GetConsoleTitle __AW_SUFFIXED__(GetConsoleTitle)
232 WINAPI DWORD GetConsoleTitleA (LPSTR, DWORD);
233 WINAPI DWORD GetConsoleTitleW (LPWSTR, DWORD);
234
235 WINAPI COORD GetLargestConsoleWindowSize (HANDLE);
236 WINAPI BOOL GetNumberOfConsoleInputEvents (HANDLE, PDWORD);
237 WINAPI BOOL GetNumberOfConsoleMouseButtons (PDWORD);
238 WINAPI BOOL HandlerRoutine (DWORD);
239
240 #define PeekConsoleInput __AW_SUFFIXED__(PeekConsoleInput)
241 WINAPI BOOL PeekConsoleInputA (HANDLE, PINPUT_RECORD, DWORD, PDWORD);
242 WINAPI BOOL PeekConsoleInputW (HANDLE, PINPUT_RECORD, DWORD, PDWORD);
243
244 #define ReadConsole __AW_SUFFIXED__(ReadConsole)
245 WINAPI BOOL ReadConsoleA (HANDLE, PVOID, DWORD, PDWORD, PVOID);
246 WINAPI BOOL ReadConsoleW (HANDLE, PVOID, DWORD, PDWORD, PVOID);
247
248 #define ReadConsoleInput __AW_SUFFIXED__(ReadConsoleInput)
249 WINAPI BOOL ReadConsoleInputA (HANDLE, PINPUT_RECORD, DWORD, PDWORD);
250 WINAPI BOOL ReadConsoleInputW (HANDLE, PINPUT_RECORD, DWORD, PDWORD);
251
252 WINAPI BOOL ReadConsoleOutputAttribute (HANDLE, LPWORD, DWORD, COORD, LPDWORD);
253
254 #define ReadConsoleOutputCharacter __AW_SUFFIXED__(ReadConsoleOutputCharacter)
255 WINAPI BOOL ReadConsoleOutputCharacterA (HANDLE, LPSTR, DWORD, COORD, PDWORD);
256 WINAPI BOOL ReadConsoleOutputCharacterW (HANDLE, LPWSTR, DWORD, COORD, PDWORD);
257
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);
261
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 *);
267
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);
277
278 #define SetConsoleTitle __AW_SUFFIXED__(SetConsoleTitle)
279 WINAPI BOOL SetConsoleTitleA (LPCSTR);
280 WINAPI BOOL SetConsoleTitleW (LPCWSTR);
281
282 WINAPI BOOL SetConsoleWindowInfo (HANDLE, BOOL, const SMALL_RECT *);
283
284 #define WriteConsole __AW_SUFFIXED__(WriteConsole)
285 WINAPI BOOL WriteConsoleA (HANDLE, PCVOID, DWORD, PDWORD, PVOID);
286 WINAPI BOOL WriteConsoleW (HANDLE, PCVOID, DWORD, PDWORD, PVOID);
287
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);
291
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);
295
296 WINAPI BOOL WriteConsoleOutputAttribute (HANDLE, const WORD *, DWORD, COORD, PDWORD);
297
298 #define WriteConsoleOutputCharacter __AW_SUFFIXED__(WriteConsoleOutputCharacter)
299 WINAPI BOOL WriteConsoleOutputCharacterA (HANDLE, LPCSTR, DWORD, COORD, PDWORD);
300 WINAPI BOOL WriteConsoleOutputCharacterW (HANDLE, LPCWSTR, DWORD, COORD, PDWORD);
301
302 #if _WIN32_WINNT >= _WIN32_WINNT_WIN2K
303
304 #define CONSOLE_FULLSCREEN                      0x0001
305 #define CONSOLE_FULLSCREEN_HARDWARE             0x0002
306
307 WINAPI BOOL GetConsoleDisplayMode (LPDWORD);
308 WINAPI COORD GetConsoleFontSize (HANDLE, DWORD);
309 WINAPI HWND GetConsoleWindow (void);
310
311 #if _WIN32_WINNT >= _WIN32_WINNT_WINXP
312
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
320
321 typedef
322 struct _CONSOLE_FONT_INFO
323 { DWORD                         nFont;
324   COORD                         dwFontSize;
325 } CONSOLE_FONT_INFO, *PCONSOLE_FONT_INFO;
326
327 typedef
328 struct _CONSOLE_SELECTION_INFO
329 { DWORD                         dwFlags;
330   COORD                         dwSelectionAnchor;
331   SMALL_RECT                    srSelection;
332 } CONSOLE_SELECTION_INFO, *PCONSOLE_SELECTION_INFO;
333
334 #define AddConsoleAlias __AW_SUFFIXED__(AddConsoleAlias)
335 WINAPI BOOL AddConsoleAliasA (LPCSTR, LPCSTR, LPCSTR);
336 WINAPI BOOL AddConsoleAliasW (LPCWSTR, LPCWSTR, LPCWSTR);
337
338 #define ATTACH_PARENT_PROCESS  ((DWORD)(-1))
339
340 WINAPI BOOL AttachConsole (DWORD);
341
342 #define GetConsoleAliases __AW_SUFFIXED__(GetConsoleAliases)
343 WINAPI DWORD GetConsoleAliasesA (LPSTR, DWORD, LPSTR);
344 WINAPI DWORD GetConsoleAliasesW (LPWSTR, DWORD, LPWSTR);
345
346 #define GetConsoleAliasExes __AW_SUFFIXED__(GetConsoleAliasExes)
347 WINAPI DWORD GetConsoleAliasExesA (LPSTR, DWORD);
348 WINAPI DWORD GetConsoleAliasExesW (LPWSTR, DWORD);
349
350 #define GetConsoleAliasesLength __AW_SUFFIXED__(GetConsoleAliasesLength)
351 WINAPI DWORD GetConsoleAliasesLengthA (LPSTR);
352 WINAPI DWORD GetConsoleAliasesLengthW (LPWSTR);
353
354 #define GetConsoleAliasExesLength __AW_SUFFIXED__(GetConsoleAliasExesLength)
355 WINAPI DWORD GetConsoleAliasExesLengthA (void);
356 WINAPI DWORD GetConsoleAliasExesLengthW (void);
357
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);
362
363 #if _WIN32_WINNT >= _WIN32_WINNT_VISTA
364
365 #define HISTORY_NO_DUP_FLAG                     0x0001
366
367 typedef
368 struct _CONSOLE_FONT_INFOEX
369 { ULONG                         cbSize;
370   DWORD                         nFont;
371   COORD                         dwFontSize;
372   UINT                          FontFamily;
373   UINT                          FontWeight;
374   WCHAR                         FaceName[LF_FACESIZE];
375 } CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
376
377 typedef
378 struct
379 { UINT                          cbSize;
380   UINT                          HistoryBufferSize;
381   UINT                          NumberOfHistoryBuffers;
382   DWORD                         dwFlags;
383 } CONSOLE_HISTORY_INFO, *PCONSOLE_HISTORY_INFO;
384
385 typedef
386 struct _CONSOLE_READCONSOLE_CONTROL
387 { ULONG                         nLength;
388   ULONG                         nInitialChars;
389   ULONG                         dwCtrlWakeupMask;
390   ULONG                         dwControlKeyState;
391 } CONSOLE_READCONSOLE_CONTROL, *PCONSOLE_READCONSOLE_CONTROL;
392
393 typedef
394 struct _CONSOLE_SCREEN_BUFFER_INFOEX
395 { ULONG                         cbSize;
396   COORD                         dwSize;
397   COORD                         dwCursorPosition;
398   WORD                          wAttributes;
399   SMALL_RECT                    srWindow;
400   COORD                         dwMaximumWindowSize;
401   WORD                          wPopupAttributes;
402   BOOL                          bFullscreenSupported;
403   COLORREF                      ColorTable[16];
404 } CONSOLE_SCREEN_BUFFER_INFOEX, *PCONSOLE_SCREEN_BUFFER_INFOEX;
405
406 WINAPI BOOL GetConsoleHistoryInfo (PCONSOLE_HISTORY_INFO);
407
408 #define GetConsoleOriginalTitle __AW_SUFFIXED__(GetConsoleOriginalTitle)
409 WINAPI DWORD GetConsoleOriginalTitleA (LPSTR, DWORD);
410 WINAPI DWORD GetConsoleOriginalTitleW (LPWSTR, DWORD);
411
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);
417
418 #endif  /* Vista and later */
419 #endif  /* WinXP and later */
420 #endif  /* Win2K and later */
421
422 _END_C_DECLS
423
424 #endif  /* !_WINCON_H: $RCSfile$: end of file */