OSDN Git Service

Clean up <wincon.h>; consolidate its version dependencies.
authorKeith Marshall <keith@users.osdn.me>
Mon, 29 Oct 2018 23:36:08 +0000 (23:36 +0000)
committerKeith Marshall <keith@users.osdn.me>
Mon, 29 Oct 2018 23:36:08 +0000 (23:36 +0000)
w32api/ChangeLog
w32api/include/wincon.h

index 470878f..0e3c6c8 100644 (file)
@@ -1,3 +1,40 @@
+2018-10-29  Keith Marshall  <keith@users.osdn.me>
+
+       Clean up <wincon.h>; consolidate its version dependencies.
+
+       * include/wincon.h: Tidy layout; assert copyright.
+       [_WIN32_WINNT]: Always compare it symbolically, with respect to...
+       [_WIN32_WINNT_WIN2K, _WIN32_WINNT_WINXP, _WIN32_WINNT_VISTA]: ...each
+       of these; group and consolidate respective version dependencies.
+       (FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED)
+       (FOREGROUND_INTENSITY, BACKGROUND_BLUE, BACKGROUND_GREEN)
+       (BACKGROUND_RED, BACKGROUND_INTENSITY, COMMON_LVB_LEADING_BYTE)
+       (COMMON_LVB_TRAILING_BYTE, COMMON_LVB_GRID_HORIZONTAL)
+       (COMMON_LVB_GRID_LVERTICAL, COMMON_LVB_GRID_RVERTICAL)
+       (COMMON_LVB_REVERSE_VIDEO, COMMON_LVB_UNDERSCORE, CTRL_C_EVENT)
+       (CTRL_BREAK_EVENT, CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT)
+       (CTRL_SHUTDOWN_EVENT, ENABLE_LINE_INPUT, ENABLE_ECHO_INPUT)
+       (ENABLE_PROCESSED_INPUT, ENABLE_WINDOW_INPUT, ENABLE_MOUSE_INPUT)
+       (ENABLE_INSERT_MODE, ENABLE_QUICK_EDIT_MODE, ENABLE_EXTENDED_FLAGS)
+       (ENABLE_AUTO_POSITION, ENABLE_VIRTUAL_TERMINAL_INPUT)
+       (ENABLE_PROCESSED_OUTPUT, ENABLE_WRAP_AT_EOL_OUTPUT)
+       (ENABLE_VIRTUAL_TERMINAL_PROCESSING, DISABLE_NEWLINE_AUTO_RETURN)
+       (ENABLE_LVB_GRID_WORLDWIDE, KEY_EVENT, MOUSE_EVENT)
+       (WINDOW_BUFFER_SIZE_EVENT, MENU_EVENT, FOCUS_EVENT, CAPSLOCK_ON)
+       (ENHANCED_KEY, RIGHT_ALT_PRESSED, LEFT_ALT_PRESSED)
+       (RIGHT_CTRL_PRESSED, LEFT_CTRL_PRESSED, SHIFT_PRESSED, NUMLOCK_ON)
+       (SCROLLLOCK_ON, FROM_LEFT_1ST_BUTTON_PRESSED)
+       (FROM_LEFT_2ND_BUTTON_PRESSED, FROM_LEFT_3RD_BUTTON_PRESSED)
+       (FROM_LEFT_4TH_BUTTON_PRESSED, RIGHTMOST_BUTTON_PRESSED, MOUSE_MOVED)
+       (DOUBLE_CLICK, MOUSE_WHEELED, MOUSE_HWHEELED, CONSOLE_FULLSCREEN)
+       (CONSOLE_FULLSCREEN_HARDWARE, CONSOLE_FULLSCREEN_MODE)
+       (CONSOLE_WINDOWED_MODE, CONSOLE_NO_SELECTION)
+       (CONSOLE_SELECTION_IN_PROGRESS, CONSOLE_SELECTION_NOT_EMPTY)
+       (CONSOLE_MOUSE_SELECTION, CONSOLE_MOUSE_DOWN, HISTORY_NO_DUP_FLAG):
+       Redefine, expressing all values in hexadecimal rather than decimal;
+       this is consistent with Microsoft documentation, and it is also more
+       logical, since all represent bit-flags, bit-fields, or bit-masks.
+
 2018-10-24  Keith Marshall  <keith@users.osdn.me>
 
        Make <wincon.h> header effectively self-contained.
index 5fbe429..3903aae 100644 (file)
@@ -1,8 +1,40 @@
+/*
+ * wincon.h
+ *
+ * Windows console I/O declarations, and API function prototypes.
+ *
+ * $Id$
+ *
+ * Written by Anders Norlander  <anorland@hem2.passagen.se>
+ * Copyright (C) 1998, 1999, 2002-2006, 2009, 2011, 2016, 2018,
+ *   MinGW.org Project.
+ *
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice, this permission notice, and the following
+ * disclaimer shall be included in all copies or substantial portions of
+ * the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ */
 #ifndef _WINCON_H
-#define _WINCON_H
 #pragma GCC system_header
+#define _WINCON_H
 
-#if _WIN32_WINNT < 0x0600
+#if _WIN32_WINNT < _WIN32_WINNT_VISTA
 /* For effective self-containment, <wincon.h> is dependent on the core set
  * of Windows' custom type definitions; prior to Vista, it suffices to...
  */
 
 _BEGIN_C_DECLS
 
-#define FOREGROUND_BLUE        1
-#define FOREGROUND_GREEN       2
-#define FOREGROUND_RED 4
-#define FOREGROUND_INTENSITY   8
-#define BACKGROUND_BLUE        16
-#define BACKGROUND_GREEN       32
-#define BACKGROUND_RED 64
-#define BACKGROUND_INTENSITY   128
-#define COMMON_LVB_LEADING_BYTE        256
-#define COMMON_LVB_TRAILING_BYTE       512
-#define COMMON_LVB_GRID_HORIZONTAL     1024
-#define COMMON_LVB_GRID_LVERTICAL      2048
-#define COMMON_LVB_GRID_RVERTICAL      4096
-#define COMMON_LVB_REVERSE_VIDEO       16384
-#define COMMON_LVB_UNDERSCORE  32768
-#if (_WIN32_WINNT >= 0x0501)
-#define CONSOLE_FULLSCREEN_MODE 1
-#define CONSOLE_WINDOWED_MODE 2
-#define CONSOLE_NO_SELECTION 0
-#define CONSOLE_SELECTION_IN_PROGRESS 1
-#define CONSOLE_SELECTION_NOT_EMPTY 2
-#define CONSOLE_MOUSE_SELECTION 4
-#define CONSOLE_MOUSE_DOWN 8
-#endif
-#define CTRL_C_EVENT 0
-#define CTRL_BREAK_EVENT 1
-#define CTRL_CLOSE_EVENT 2
-#define CTRL_LOGOFF_EVENT 5
-#define CTRL_SHUTDOWN_EVENT 6
-#define ENABLE_LINE_INPUT 2
-#define ENABLE_ECHO_INPUT 4
-#define ENABLE_PROCESSED_INPUT 1
-#define ENABLE_WINDOW_INPUT 8
-#define ENABLE_MOUSE_INPUT 16
-#define ENABLE_INSERT_MODE 32
-#define ENABLE_QUICK_EDIT_MODE 64
-#define ENABLE_EXTENDED_FLAGS  128
-#define ENABLE_AUTO_POSITION   256
-#define ENABLE_VIRTUAL_TERMINAL_INPUT 512
-#define ENABLE_PROCESSED_OUTPUT 1
-#define ENABLE_WRAP_AT_EOL_OUTPUT 2
-#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 4
-#define DISABLE_NEWLINE_AUTO_RETURN 8
-#define ENABLE_LVB_GRID_WORLDWIDE 16
-#if (_WIN32_WINNT >= 0x0600)
-#define HISTORY_NO_DUP_FLAG 1
-#endif
-#define KEY_EVENT 1
-#define MOUSE_EVENT 2
-#define WINDOW_BUFFER_SIZE_EVENT 4
-#define MENU_EVENT 8
-#define FOCUS_EVENT 16
-#define CAPSLOCK_ON 128
-#define ENHANCED_KEY 256
-#define RIGHT_ALT_PRESSED 1
-#define LEFT_ALT_PRESSED 2
-#define RIGHT_CTRL_PRESSED 4
-#define LEFT_CTRL_PRESSED 8
-#define SHIFT_PRESSED 16
-#define NUMLOCK_ON 32
-#define SCROLLLOCK_ON 64
-#define FROM_LEFT_1ST_BUTTON_PRESSED 1
-#define RIGHTMOST_BUTTON_PRESSED 2
-#define FROM_LEFT_2ND_BUTTON_PRESSED 4
-#define FROM_LEFT_3RD_BUTTON_PRESSED 8
-#define FROM_LEFT_4TH_BUTTON_PRESSED 16
-#define MOUSE_MOVED    1
-#define DOUBLE_CLICK   2
-#define MOUSE_WHEELED  4
-#define MOUSE_HWHEELED 8
-#if (_WIN32_WINNT >= 0x0500)
-#define CONSOLE_FULLSCREEN 1
-#define CONSOLE_FULLSCREEN_HARDWARE 2
-#endif
+#define FOREGROUND_BLUE                        0x0001
+#define FOREGROUND_GREEN                       0x0002
+#define FOREGROUND_RED                         0x0004
+#define FOREGROUND_INTENSITY                   0x0008
+#define BACKGROUND_BLUE                        0x0010
+#define BACKGROUND_GREEN                       0x0020
+#define BACKGROUND_RED                         0x0040
+#define BACKGROUND_INTENSITY                   0x0080
+
+#define COMMON_LVB_LEADING_BYTE                0x0100
+#define COMMON_LVB_TRAILING_BYTE               0x0200
+#define COMMON_LVB_GRID_HORIZONTAL             0x0400
+#define COMMON_LVB_GRID_LVERTICAL              0x0800
+#define COMMON_LVB_GRID_RVERTICAL              0x1000
+#define COMMON_LVB_REVERSE_VIDEO               0x4000
+#define COMMON_LVB_UNDERSCORE                  0x8000
 
-typedef struct _CHAR_INFO {
-       union {
-               WCHAR UnicodeChar;
-               CHAR AsciiChar;
-       } Char;
-       WORD Attributes;
+#define CTRL_C_EVENT                           0x0000
+#define CTRL_BREAK_EVENT                       0x0001
+#define CTRL_CLOSE_EVENT                       0x0002
+#define CTRL_LOGOFF_EVENT                      0x0005
+#define CTRL_SHUTDOWN_EVENT                    0x0006
+
+#define ENABLE_LINE_INPUT                      0x0002
+#define ENABLE_ECHO_INPUT                      0x0004
+#define ENABLE_PROCESSED_INPUT                 0x0001
+#define ENABLE_WINDOW_INPUT                    0x0008
+#define ENABLE_MOUSE_INPUT                     0x0010
+#define ENABLE_INSERT_MODE                     0x0020
+#define ENABLE_QUICK_EDIT_MODE                 0x0040
+#define ENABLE_EXTENDED_FLAGS                  0x0080
+#define ENABLE_AUTO_POSITION                   0x0100
+#define ENABLE_VIRTUAL_TERMINAL_INPUT          0x0200
+#define ENABLE_PROCESSED_OUTPUT                0x0001
+#define ENABLE_WRAP_AT_EOL_OUTPUT              0x0002
+#define ENABLE_VIRTUAL_TERMINAL_PROCESSING     0x0004
+#define DISABLE_NEWLINE_AUTO_RETURN            0x0008
+#define ENABLE_LVB_GRID_WORLDWIDE              0x0010
+
+#define KEY_EVENT                              0x0001
+#define MOUSE_EVENT                            0x0002
+#define WINDOW_BUFFER_SIZE_EVENT               0x0004
+#define MENU_EVENT                             0x0008
+#define FOCUS_EVENT                            0x0010
+#define CAPSLOCK_ON                            0x0080
+#define ENHANCED_KEY                           0x0100
+
+#define RIGHT_ALT_PRESSED                      0x0001
+#define LEFT_ALT_PRESSED                       0x0002
+#define RIGHT_CTRL_PRESSED                     0x0004
+#define LEFT_CTRL_PRESSED                      0x0008
+#define SHIFT_PRESSED                          0x0010
+#define NUMLOCK_ON                             0x0020
+#define SCROLLLOCK_ON                          0x0040
+
+#define FROM_LEFT_1ST_BUTTON_PRESSED           0x0001
+#define RIGHTMOST_BUTTON_PRESSED               0x0002
+#define FROM_LEFT_2ND_BUTTON_PRESSED           0x0004
+#define FROM_LEFT_3RD_BUTTON_PRESSED           0x0008
+#define FROM_LEFT_4TH_BUTTON_PRESSED           0x0010
+#define MOUSE_MOVED                            0x0001
+#define DOUBLE_CLICK                           0x0002
+#define MOUSE_WHEELED                          0x0004
+#define MOUSE_HWHEELED                         0x0008
+
+typedef
+struct _CHAR_INFO
+{ union
+  { WCHAR                        UnicodeChar;
+    CHAR                         AsciiChar;
+  }                            Char;
+  WORD                         Attributes;
 } CHAR_INFO, *PCHAR_INFO;
-typedef struct _SMALL_RECT {
-       SHORT Left;
-       SHORT Top;
-       SHORT Right;
-       SHORT Bottom;
+
+typedef
+struct _SMALL_RECT
+{ SHORT                        Left;
+  SHORT                        Top;
+  SHORT                        Right;
+  SHORT                        Bottom;
 } SMALL_RECT, *PSMALL_RECT;
-typedef struct _CONSOLE_CURSOR_INFO {
-       DWORD   dwSize;
-       BOOL    bVisible;
-} CONSOLE_CURSOR_INFO,*PCONSOLE_CURSOR_INFO;
-typedef struct _COORD {
-       SHORT X;
-       SHORT Y;
+
+typedef
+struct _CONSOLE_CURSOR_INFO
+{ DWORD                        dwSize;
+  BOOL                         bVisible;
+} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
+
+typedef
+struct _COORD
+{ SHORT                        X;
+  SHORT                        Y;
 } COORD, *PCOORD;
-#if (_WIN32_WINNT >= 0x0501)
-typedef struct _CONSOLE_FONT_INFO {
-       DWORD nFont;
-       COORD dwFontSize;
-} CONSOLE_FONT_INFO, *PCONSOLE_FONT_INFO;
+
+typedef
+struct _CONSOLE_SCREEN_BUFFER_INFO
+{ COORD                        dwSize;
+  COORD                        dwCursorPosition;
+  WORD                         wAttributes;
+  SMALL_RECT                   srWindow;
+  COORD                        dwMaximumWindowSize;
+} CONSOLE_SCREEN_BUFFER_INFO, *PCONSOLE_SCREEN_BUFFER_INFO;
+
+typedef BOOL (CALLBACK *PHANDLER_ROUTINE)(DWORD);
+
+typedef
+struct _KEY_EVENT_RECORD
+#ifdef __GNUC__  /* gcc's alignment is not what Win32 expects here! */
+# define __MINGW_ATTRIBUTE_PACKED__ __attribute__((packed))
+#else
+# define __MINGW_ATTRIBUTE_PACKED__
 #endif
-#if (_WIN32_WINNT >= 0x600)
-typedef struct _CONSOLE_FONT_INFOEX {
-       ULONG cbSize;
-       DWORD nFont;
-       COORD dwFontSize;
-       UINT  FontFamily;
-       UINT  FontWeight;
-       WCHAR FaceName[LF_FACESIZE];
+{ BOOL                         bKeyDown;
+  WORD                         wRepeatCount;
+  WORD                         wVirtualKeyCode;
+  WORD                         wVirtualScanCode;
+  union
+  { WCHAR                        UnicodeChar;
+    CHAR                         AsciiChar;
+  }                            uChar;
+  DWORD                        dwControlKeyState;
+} __MINGW_ATTRIBUTE_PACKED__ KEY_EVENT_RECORD;
+
+typedef
+struct _MOUSE_EVENT_RECORD
+{ COORD                        dwMousePosition;
+  DWORD                        dwButtonState;
+  DWORD                        dwControlKeyState;
+  DWORD                        dwEventFlags;
+} MOUSE_EVENT_RECORD;
+
+typedef
+struct _WINDOW_BUFFER_SIZE_RECORD
+{ COORD                        dwSize;
+} WINDOW_BUFFER_SIZE_RECORD;
+
+typedef
+struct _MENU_EVENT_RECORD
+{ UINT                         dwCommandId;
+} MENU_EVENT_RECORD, *PMENU_EVENT_RECORD;
+
+typedef
+struct _FOCUS_EVENT_RECORD
+{ BOOL                         bSetFocus;
+} FOCUS_EVENT_RECORD;
+
+typedef
+struct _INPUT_RECORD
+{ WORD                         EventType;
+  union
+  { KEY_EVENT_RECORD             KeyEvent;
+    MOUSE_EVENT_RECORD           MouseEvent;
+    WINDOW_BUFFER_SIZE_RECORD    WindowBufferSizeEvent;
+    MENU_EVENT_RECORD            MenuEvent;
+    FOCUS_EVENT_RECORD           FocusEvent;
+  }                            Event;
+} INPUT_RECORD, *PINPUT_RECORD;
+
+WINAPI BOOL AllocConsole (void);
+WINAPI HANDLE CreateConsoleScreenBuffer (DWORD, DWORD, CONST SECURITY_ATTRIBUTES *, DWORD, LPVOID);
+WINAPI BOOL FillConsoleOutputAttribute (HANDLE, WORD, DWORD, COORD, PDWORD);
+
+#define FillConsoleOutputCharacter __AW_SUFFIXED__(FillConsoleOutputCharacter)
+WINAPI BOOL FillConsoleOutputCharacterA (HANDLE, CHAR, DWORD, COORD, PDWORD);
+WINAPI BOOL FillConsoleOutputCharacterW (HANDLE, WCHAR, DWORD, COORD, PDWORD);
+
+WINAPI BOOL FlushConsoleInputBuffer (HANDLE);
+WINAPI BOOL FreeConsole (void);
+WINAPI BOOL GenerateConsoleCtrlEvent (DWORD, DWORD);
+
+#define GetConsoleAlias __AW_SUFFIXED__(GetConsoleAlias)
+WINAPI DWORD GetConsoleAliasA (LPSTR, LPSTR, DWORD, LPSTR);
+WINAPI DWORD GetConsoleAliasW (LPWSTR, LPWSTR, DWORD, LPWSTR);
+
+WINAPI UINT GetConsoleCP (void);
+WINAPI BOOL GetConsoleCursorInfo (HANDLE, PCONSOLE_CURSOR_INFO);
+WINAPI BOOL GetConsoleMode (HANDLE, PDWORD);
+WINAPI UINT GetConsoleOutputCP (void);
+WINAPI BOOL GetConsoleScreenBufferInfo (HANDLE, PCONSOLE_SCREEN_BUFFER_INFO);
+
+#define GetConsoleTitle __AW_SUFFIXED__(GetConsoleTitle)
+WINAPI DWORD GetConsoleTitleA (LPSTR, DWORD);
+WINAPI DWORD GetConsoleTitleW (LPWSTR, DWORD);
+
+WINAPI COORD GetLargestConsoleWindowSize (HANDLE);
+WINAPI BOOL GetNumberOfConsoleInputEvents (HANDLE, PDWORD);
+WINAPI BOOL GetNumberOfConsoleMouseButtons (PDWORD);
+WINAPI BOOL HandlerRoutine (DWORD);
+
+#define PeekConsoleInput __AW_SUFFIXED__(PeekConsoleInput)
+WINAPI BOOL PeekConsoleInputA (HANDLE, PINPUT_RECORD, DWORD, PDWORD);
+WINAPI BOOL PeekConsoleInputW (HANDLE, PINPUT_RECORD, DWORD, PDWORD);
+
+#define ReadConsole __AW_SUFFIXED__(ReadConsole)
+WINAPI BOOL ReadConsoleA (HANDLE, PVOID, DWORD, PDWORD, PVOID);
+WINAPI BOOL ReadConsoleW (HANDLE, PVOID, DWORD, PDWORD, PVOID);
+
+#define ReadConsoleInput __AW_SUFFIXED__(ReadConsoleInput)
+WINAPI BOOL ReadConsoleInputA (HANDLE, PINPUT_RECORD, DWORD, PDWORD);
+WINAPI BOOL ReadConsoleInputW (HANDLE, PINPUT_RECORD, DWORD, PDWORD);
+
+WINAPI BOOL ReadConsoleOutputAttribute (HANDLE, LPWORD, DWORD, COORD, LPDWORD);
+
+#define ReadConsoleOutputCharacter __AW_SUFFIXED__(ReadConsoleOutputCharacter)
+WINAPI BOOL ReadConsoleOutputCharacterA (HANDLE, LPSTR, DWORD, COORD, PDWORD);
+WINAPI BOOL ReadConsoleOutputCharacterW (HANDLE, LPWSTR, DWORD, COORD, PDWORD);
+
+#define ReadConsoleOutput __AW_SUFFIXED__(ReadConsoleOutput)
+WINAPI BOOL ReadConsoleOutputA (HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT);
+WINAPI BOOL ReadConsoleOutputW (HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT);
+
+#define ScrollConsoleScreenBuffer __AW_SUFFIXED__(ScrollConsoleScreenBuffer)
+WINAPI BOOL ScrollConsoleScreenBufferA
+(HANDLE, const SMALL_RECT *, const SMALL_RECT *, COORD, const CHAR_INFO *);
+WINAPI BOOL ScrollConsoleScreenBufferW
+(HANDLE, const SMALL_RECT *, const SMALL_RECT *, COORD, const CHAR_INFO *);
+
+WINAPI BOOL SetConsoleActiveScreenBuffer (HANDLE);
+WINAPI BOOL SetConsoleCP (UINT);
+WINAPI BOOL SetConsoleCtrlHandler (PHANDLER_ROUTINE, BOOL);
+WINAPI BOOL SetConsoleCursorInfo (HANDLE, const CONSOLE_CURSOR_INFO *);
+WINAPI BOOL SetConsoleCursorPosition (HANDLE, COORD);
+WINAPI BOOL SetConsoleMode (HANDLE, DWORD);
+WINAPI BOOL SetConsoleOutputCP (UINT);
+WINAPI BOOL SetConsoleScreenBufferSize (HANDLE, COORD);
+WINAPI BOOL SetConsoleTextAttribute (HANDLE, WORD);
+
+#define SetConsoleTitle __AW_SUFFIXED__(SetConsoleTitle)
+WINAPI BOOL SetConsoleTitleA (LPCSTR);
+WINAPI BOOL SetConsoleTitleW (LPCWSTR);
+
+WINAPI BOOL SetConsoleWindowInfo (HANDLE, BOOL, const SMALL_RECT *);
+
+#define WriteConsole __AW_SUFFIXED__(WriteConsole)
+WINAPI BOOL WriteConsoleA (HANDLE, PCVOID, DWORD, PDWORD, PVOID);
+WINAPI BOOL WriteConsoleW (HANDLE, PCVOID, DWORD, PDWORD, PVOID);
+
+#define WriteConsoleInput __AW_SUFFIXED__(WriteConsoleInput)
+WINAPI BOOL WriteConsoleInputA (HANDLE, const INPUT_RECORD *, DWORD, PDWORD);
+WINAPI BOOL WriteConsoleInputW (HANDLE, const INPUT_RECORD *, DWORD, PDWORD);
+
+#define WriteConsoleOutput __AW_SUFFIXED__(WriteConsoleOutput)
+WINAPI BOOL WriteConsoleOutputA (HANDLE, const CHAR_INFO *, COORD, COORD, PSMALL_RECT);
+WINAPI BOOL WriteConsoleOutputW (HANDLE, const CHAR_INFO *, COORD, COORD, PSMALL_RECT);
+
+WINAPI BOOL WriteConsoleOutputAttribute (HANDLE, const WORD *, DWORD, COORD, PDWORD);
+
+#define WriteConsoleOutputCharacter __AW_SUFFIXED__(WriteConsoleOutputCharacter)
+WINAPI BOOL WriteConsoleOutputCharacterA (HANDLE, LPCSTR, DWORD, COORD, PDWORD);
+WINAPI BOOL WriteConsoleOutputCharacterW (HANDLE, LPCWSTR, DWORD, COORD, PDWORD);
+
+#if _WIN32_WINNT >= _WIN32_WINNT_WIN2K
+
+#define CONSOLE_FULLSCREEN                     0x0001
+#define CONSOLE_FULLSCREEN_HARDWARE            0x0002
+
+WINAPI BOOL GetConsoleDisplayMode (LPDWORD);
+WINAPI COORD GetConsoleFontSize (HANDLE, DWORD);
+WINAPI HWND GetConsoleWindow (void);
+
+#if _WIN32_WINNT >= _WIN32_WINNT_WINXP
+
+#define CONSOLE_FULLSCREEN_MODE                0x0001
+#define CONSOLE_WINDOWED_MODE                  0x0002
+#define CONSOLE_NO_SELECTION                   0x0000
+#define CONSOLE_SELECTION_IN_PROGRESS          0x0001
+#define CONSOLE_SELECTION_NOT_EMPTY            0x0002
+#define CONSOLE_MOUSE_SELECTION                0x0004
+#define CONSOLE_MOUSE_DOWN                     0x0008
+
+typedef
+struct _CONSOLE_FONT_INFO
+{ DWORD                        nFont;
+  COORD                        dwFontSize;
+} CONSOLE_FONT_INFO, *PCONSOLE_FONT_INFO;
+
+typedef
+struct _CONSOLE_SELECTION_INFO
+{ DWORD                        dwFlags;
+  COORD                        dwSelectionAnchor;
+  SMALL_RECT                   srSelection;
+} CONSOLE_SELECTION_INFO, *PCONSOLE_SELECTION_INFO;
+
+#define AddConsoleAlias __AW_SUFFIXED__(AddConsoleAlias)
+WINAPI BOOL AddConsoleAliasA (LPCSTR, LPCSTR, LPCSTR);
+WINAPI BOOL AddConsoleAliasW (LPCWSTR, LPCWSTR, LPCWSTR);
+
+#define ATTACH_PARENT_PROCESS  ((DWORD)(-1))
+
+WINAPI BOOL AttachConsole (DWORD);
+
+#define GetConsoleAliases __AW_SUFFIXED__(GetConsoleAliases)
+WINAPI DWORD GetConsoleAliasesA (LPSTR, DWORD, LPSTR);
+WINAPI DWORD GetConsoleAliasesW (LPWSTR, DWORD, LPWSTR);
+
+#define GetConsoleAliasExes __AW_SUFFIXED__(GetConsoleAliasExes)
+WINAPI DWORD GetConsoleAliasExesA (LPSTR, DWORD);
+WINAPI DWORD GetConsoleAliasExesW (LPWSTR, DWORD);
+
+#define GetConsoleAliasesLength __AW_SUFFIXED__(GetConsoleAliasesLength)
+WINAPI DWORD GetConsoleAliasesLengthA (LPSTR);
+WINAPI DWORD GetConsoleAliasesLengthW (LPWSTR);
+
+#define GetConsoleAliasExesLength __AW_SUFFIXED__(GetConsoleAliasExesLength)
+WINAPI DWORD GetConsoleAliasExesLengthA (void);
+WINAPI DWORD GetConsoleAliasExesLengthW (void);
+
+WINAPI BOOL GetConsoleSelectionInfo (PCONSOLE_SELECTION_INFO);
+WINAPI DWORD GetConsoleProcessList (LPDWORD, DWORD);
+WINAPI BOOL GetCurrentConsoleFont (HANDLE, BOOL, PCONSOLE_FONT_INFO);
+WINAPI BOOL SetConsoleDisplayMode (HANDLE, DWORD, PCOORD);
+
+#if _WIN32_WINNT >= _WIN32_WINNT_VISTA
+
+#define HISTORY_NO_DUP_FLAG                    0x0001
+
+typedef
+struct _CONSOLE_FONT_INFOEX
+{ ULONG                        cbSize;
+  DWORD                        nFont;
+  COORD                        dwFontSize;
+  UINT                         FontFamily;
+  UINT                         FontWeight;
+  WCHAR                        FaceName[LF_FACESIZE];
 } CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
-typedef struct {
-       UINT cbSize;
-       UINT HistoryBufferSize;
-       UINT NumberOfHistoryBuffers;
-       DWORD dwFlags;
+
+typedef
+struct
+{ UINT                         cbSize;
+  UINT                         HistoryBufferSize;
+  UINT                         NumberOfHistoryBuffers;
+  DWORD                        dwFlags;
 } CONSOLE_HISTORY_INFO, *PCONSOLE_HISTORY_INFO;
-typedef struct _CONSOLE_READCONSOLE_CONTROL {
-       ULONG nLength;
-       ULONG nInitialChars;
-       ULONG dwCtrlWakeupMask;
-       ULONG dwControlKeyState;
+
+typedef
+struct _CONSOLE_READCONSOLE_CONTROL
+{ ULONG                        nLength;
+  ULONG                        nInitialChars;
+  ULONG                        dwCtrlWakeupMask;
+  ULONG                        dwControlKeyState;
 } CONSOLE_READCONSOLE_CONTROL, *PCONSOLE_READCONSOLE_CONTROL;
-#endif
 
-typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
-       COORD   dwSize;
-       COORD   dwCursorPosition;
-       WORD    wAttributes;
-       SMALL_RECT srWindow;
-       COORD   dwMaximumWindowSize;
-} CONSOLE_SCREEN_BUFFER_INFO,*PCONSOLE_SCREEN_BUFFER_INFO;
-#if (_WIN32_WINNT >= 0x0600)
-typedef struct _CONSOLE_SCREEN_BUFFER_INFOEX {
-       ULONG cbSize;
-       COORD dwSize;
-       COORD dwCursorPosition;
-       WORD  wAttributes;
-       SMALL_RECT srWindow;
-       COORD dwMaximumWindowSize;
-       WORD wPopupAttributes;
-       BOOL bFullscreenSupported;
-       COLORREF ColorTable[16];
+typedef
+struct _CONSOLE_SCREEN_BUFFER_INFOEX
+{ ULONG                        cbSize;
+  COORD                        dwSize;
+  COORD                        dwCursorPosition;
+  WORD                         wAttributes;
+  SMALL_RECT                   srWindow;
+  COORD                        dwMaximumWindowSize;
+  WORD                         wPopupAttributes;
+  BOOL                         bFullscreenSupported;
+  COLORREF                     ColorTable[16];
 } CONSOLE_SCREEN_BUFFER_INFOEX, *PCONSOLE_SCREEN_BUFFER_INFOEX;
-#endif
-#if (_WIN32_WINNT >= 0x0501)
-typedef struct _CONSOLE_SELECTION_INFO {
-       DWORD dwFlags;
-       COORD dwSelectionAnchor;
-       SMALL_RECT srSelection;
-} CONSOLE_SELECTION_INFO, *PCONSOLE_SELECTION_INFO;
-#endif
-typedef BOOL(CALLBACK *PHANDLER_ROUTINE)(DWORD);
-typedef struct _KEY_EVENT_RECORD {
-       BOOL bKeyDown;
-       WORD wRepeatCount;
-       WORD wVirtualKeyCode;
-       WORD wVirtualScanCode;
-       union {
-               WCHAR UnicodeChar;
-               CHAR AsciiChar;
-       } uChar;
-       DWORD dwControlKeyState;
-}
-#ifdef __GNUC__
-/* gcc's alignment is not what win32 expects */
- __attribute__((packed))
-#endif
-KEY_EVENT_RECORD;
 
-typedef struct _MOUSE_EVENT_RECORD {
-       COORD dwMousePosition;
-       DWORD dwButtonState;
-       DWORD dwControlKeyState;
-       DWORD dwEventFlags;
-} MOUSE_EVENT_RECORD;
-typedef struct _WINDOW_BUFFER_SIZE_RECORD {    COORD dwSize; } WINDOW_BUFFER_SIZE_RECORD;
-typedef struct _MENU_EVENT_RECORD {    UINT dwCommandId; } MENU_EVENT_RECORD,*PMENU_EVENT_RECORD;
-typedef struct _FOCUS_EVENT_RECORD { BOOL bSetFocus; } FOCUS_EVENT_RECORD;
-typedef struct _INPUT_RECORD {
-       WORD EventType;
-       union {
-               KEY_EVENT_RECORD KeyEvent;
-               MOUSE_EVENT_RECORD MouseEvent;
-               WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
-               MENU_EVENT_RECORD MenuEvent;
-               FOCUS_EVENT_RECORD FocusEvent;
-       } Event;
-} INPUT_RECORD,*PINPUT_RECORD;
-
-#if (_WIN32_WINNT >= 0x0501)
-BOOL WINAPI AddConsoleAliasA(LPCSTR,LPCSTR,LPCSTR);
-BOOL WINAPI AddConsoleAliasW(LPCWSTR,LPCWSTR,LPCWSTR);
-#endif
-BOOL WINAPI AllocConsole(void);
-#if (_WIN32_WINNT >= 0x0501)
-#define ATTACH_PARENT_PROCESS  ((DWORD)-1)
-BOOL WINAPI AttachConsole(DWORD);
-#endif
-HANDLE WINAPI CreateConsoleScreenBuffer(DWORD,DWORD,CONST SECURITY_ATTRIBUTES*,DWORD,LPVOID);
-BOOL WINAPI FillConsoleOutputAttribute(HANDLE,WORD,DWORD,COORD,PDWORD);
-BOOL WINAPI FillConsoleOutputCharacterA(HANDLE,CHAR,DWORD,COORD,PDWORD);
-BOOL WINAPI FillConsoleOutputCharacterW(HANDLE,WCHAR,DWORD,COORD,PDWORD);
-BOOL WINAPI FlushConsoleInputBuffer(HANDLE);
-BOOL WINAPI FreeConsole(void);
-BOOL WINAPI GenerateConsoleCtrlEvent(DWORD,DWORD);
-DWORD WINAPI GetConsoleAliasA(LPSTR,LPSTR,DWORD,LPSTR);
-DWORD WINAPI GetConsoleAliasW(LPWSTR,LPWSTR,DWORD,LPWSTR);
-#if (_WIN32_WINNT >= 0x0501)
-DWORD WINAPI GetConsoleAliasesA(LPSTR,DWORD,LPSTR);
-DWORD WINAPI GetConsoleAliasesW(LPWSTR,DWORD,LPWSTR);
-DWORD WINAPI GetConsoleAliasExesA(LPSTR,DWORD);
-DWORD WINAPI GetConsoleAliasExesW(LPWSTR,DWORD);
-DWORD WINAPI GetConsoleAliasesLengthA(LPSTR);
-DWORD WINAPI GetConsoleAliasesLengthW(LPWSTR);
-DWORD WINAPI GetConsoleAliasExesLengthA(void);
-DWORD WINAPI GetConsoleAliasExesLengthW(void);
-#endif
-UINT WINAPI GetConsoleCP(void);
-#if (_WIN32_WINNT >= 0x0500)
-COORD WINAPI GetConsoleFontSize(HANDLE,DWORD);
-#endif
-BOOL WINAPI GetConsoleCursorInfo(HANDLE,PCONSOLE_CURSOR_INFO);
-#if (_WIN32_WINNT >= 0x0600)
-BOOL WINAPI GetConsoleHistoryInfo(PCONSOLE_HISTORY_INFO);
-#endif
-BOOL WINAPI GetConsoleMode(HANDLE,PDWORD);
-#if (_WIN32_WINNT >= 0x0600)
-DWORD WINAPI GetConsoleOriginalTitleA(LPSTR,DWORD);
-DWORD WINAPI GetConsoleOriginalTitleW(LPWSTR,DWORD);
-#endif
-UINT WINAPI GetConsoleOutputCP(void);
-#if (_WIN32_WINNT >= 0x0501)
-BOOL WINAPI GetConsoleSelectionInfo(PCONSOLE_SELECTION_INFO);
-#endif
-BOOL WINAPI GetConsoleScreenBufferInfo(HANDLE,PCONSOLE_SCREEN_BUFFER_INFO);
-#if (_WIN32_WINNT >= 0x0600)
-BOOL WINAPI GetConsoleScreenBufferInfoEx(HANDLE,PCONSOLE_SCREEN_BUFFER_INFOEX);
-#endif
-DWORD WINAPI GetConsoleTitleA(LPSTR,DWORD);
-DWORD WINAPI GetConsoleTitleW(LPWSTR,DWORD);
-#if (_WIN32_WINNT >= 0x0500)
-BOOL WINAPI GetConsoleDisplayMode(LPDWORD);
-HWND WINAPI GetConsoleWindow(void);
-#endif
-#if (_WIN32_WINNT >= 0x0501)
-DWORD WINAPI GetConsoleProcessList(LPDWORD, DWORD);
-BOOL WINAPI GetCurrentConsoleFont(HANDLE,BOOL,PCONSOLE_FONT_INFO);
-#endif
-#if (_WIN32_WINNT >= 0x0600)
-BOOL WINAPI GetCurrentConsoleFontEx(HANDLE,BOOL,PCONSOLE_FONT_INFOEX);
-#endif
-COORD WINAPI GetLargestConsoleWindowSize(HANDLE);
-BOOL WINAPI GetNumberOfConsoleInputEvents(HANDLE,PDWORD);
-BOOL WINAPI GetNumberOfConsoleMouseButtons(PDWORD);
-BOOL WINAPI HandlerRoutine(DWORD);
-BOOL WINAPI PeekConsoleInputA(HANDLE,PINPUT_RECORD,DWORD,PDWORD);
-BOOL WINAPI PeekConsoleInputW(HANDLE,PINPUT_RECORD,DWORD,PDWORD);
-BOOL WINAPI ReadConsoleA(HANDLE,PVOID,DWORD,PDWORD,PVOID);
-BOOL WINAPI ReadConsoleW(HANDLE,PVOID,DWORD,PDWORD,PVOID);
-BOOL WINAPI ReadConsoleInputA(HANDLE,PINPUT_RECORD,DWORD,PDWORD);
-BOOL WINAPI ReadConsoleInputW(HANDLE,PINPUT_RECORD,DWORD,PDWORD);
-BOOL WINAPI ReadConsoleOutputAttribute(HANDLE,LPWORD,DWORD,COORD,LPDWORD);
-BOOL WINAPI ReadConsoleOutputCharacterA(HANDLE,LPSTR,DWORD,COORD,PDWORD);
-BOOL WINAPI ReadConsoleOutputCharacterW(HANDLE,LPWSTR,DWORD,COORD,PDWORD);
-BOOL WINAPI ReadConsoleOutputA(HANDLE,PCHAR_INFO,COORD,COORD,PSMALL_RECT);
-BOOL WINAPI ReadConsoleOutputW(HANDLE,PCHAR_INFO,COORD,COORD,PSMALL_RECT);
-BOOL WINAPI ScrollConsoleScreenBufferA(HANDLE,const SMALL_RECT*,const SMALL_RECT*,COORD,const CHAR_INFO*);
-BOOL WINAPI ScrollConsoleScreenBufferW(HANDLE,const SMALL_RECT*,const SMALL_RECT*,COORD,const CHAR_INFO*);
-BOOL WINAPI SetConsoleActiveScreenBuffer(HANDLE);
-BOOL WINAPI SetConsoleCP(UINT);
-BOOL WINAPI SetConsoleCtrlHandler(PHANDLER_ROUTINE,BOOL);
-BOOL WINAPI SetConsoleCursorInfo(HANDLE,const CONSOLE_CURSOR_INFO*);
-BOOL WINAPI SetConsoleCursorPosition(HANDLE,COORD);
-#if (_WIN32_WINNT >= 0x0501)
-BOOL WINAPI SetConsoleDisplayMode(HANDLE,DWORD,PCOORD);
-#endif
-#if (_WIN32_WINNT >= 0x0600)
-BOOL WINAPI SetConsoleHistoryInfo(PCONSOLE_HISTORY_INFO);
-#endif
-BOOL WINAPI SetConsoleMode(HANDLE,DWORD);
-BOOL WINAPI SetConsoleOutputCP(UINT);
-#if (_WIN32_WINNT >= 0x0600)
-BOOL WINAPI SetConsoleScreenBufferInfoEx(HANDLE,PCONSOLE_SCREEN_BUFFER_INFOEX);
-#endif
-BOOL WINAPI SetConsoleScreenBufferSize(HANDLE,COORD);
-BOOL WINAPI SetConsoleTextAttribute(HANDLE,WORD);
-BOOL WINAPI SetConsoleTitleA(LPCSTR);
-BOOL WINAPI SetConsoleTitleW(LPCWSTR);
-BOOL WINAPI SetConsoleWindowInfo(HANDLE,BOOL,const SMALL_RECT*);
-#if (_WIN32_WINNT >= 0x0600)
-BOOL WINAPI SetCurrentConsoleFontEx(HANDLE,BOOL,PCONSOLE_FONT_INFOEX);
-#endif
-BOOL WINAPI WriteConsoleA(HANDLE,PCVOID,DWORD,PDWORD,PVOID);
-BOOL WINAPI WriteConsoleW(HANDLE,PCVOID,DWORD,PDWORD,PVOID);
-BOOL WINAPI WriteConsoleInputA(HANDLE,const INPUT_RECORD*,DWORD,PDWORD);
-BOOL WINAPI WriteConsoleInputW(HANDLE,const INPUT_RECORD*,DWORD,PDWORD);
-BOOL WINAPI WriteConsoleOutputA(HANDLE,const CHAR_INFO*,COORD,COORD,PSMALL_RECT);
-BOOL WINAPI WriteConsoleOutputW(HANDLE,const CHAR_INFO*,COORD,COORD,PSMALL_RECT);
-BOOL WINAPI WriteConsoleOutputAttribute(HANDLE,const WORD*,DWORD,COORD,PDWORD);
-BOOL WINAPI WriteConsoleOutputCharacterA(HANDLE,LPCSTR,DWORD,COORD,PDWORD);
-BOOL WINAPI WriteConsoleOutputCharacterW(HANDLE,LPCWSTR,DWORD,COORD,PDWORD);
-
-#ifdef UNICODE
-#define AddConsoleAlias AddConsoleAliasW
-#define FillConsoleOutputCharacter FillConsoleOutputCharacterW
-#define GetConsoleAlias GetConsoleAliasW
-#define GetConsoleAliases GetConsoleAliasesW
-#define GetConsoleAliasExes GetConsoleAliasExesW
-#define GetConsoleAliasesLength GetConsoleAliasesLengthW
-#define GetConsoleAliasExesLength GetConsoleAliasExesLengthW
-#define GetConsoleOriginalTitle GetConsoleOriginalTitleW
-#define GetConsoleTitle GetConsoleTitleW
-#define PeekConsoleInput PeekConsoleInputW
-#define ReadConsole ReadConsoleW
-#define ReadConsoleInput ReadConsoleInputW
-#define ReadConsoleOutput ReadConsoleOutputW
-#define ReadConsoleOutputCharacter ReadConsoleOutputCharacterW
-#define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferW
-#define SetConsoleTitle SetConsoleTitleW
-#define WriteConsole WriteConsoleW
-#define WriteConsoleInput WriteConsoleInputW
-#define WriteConsoleOutput WriteConsoleOutputW
-#define WriteConsoleOutputCharacter WriteConsoleOutputCharacterW
-#else
-#define AddConsoleAlias AddConsoleAliasA
-#define FillConsoleOutputCharacter FillConsoleOutputCharacterA
-#define GetConsoleAlias GetConsoleAliasA
-#define GetConsoleAliases GetConsoleAliasesA
-#define GetConsoleAliasExes GetConsoleAliasExesA
-#define GetConsoleAliasesLength GetConsoleAliasesLengthA
-#define GetConsoleAliasExesLength GetConsoleAliasExesLengthA
-#define GetConsoleOriginalTitle GetConsoleOriginalTitleA
-#define GetConsoleTitle GetConsoleTitleA
-#define PeekConsoleInput PeekConsoleInputA
-#define ReadConsole ReadConsoleA
-#define ReadConsoleInput ReadConsoleInputA
-#define ReadConsoleOutput ReadConsoleOutputA
-#define ReadConsoleOutputCharacter ReadConsoleOutputCharacterA
-#define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferA
-#define SetConsoleTitle SetConsoleTitleA
-#define WriteConsole WriteConsoleA
-#define WriteConsoleInput WriteConsoleInputA
-#define WriteConsoleOutput WriteConsoleOutputA
-#define WriteConsoleOutputCharacter WriteConsoleOutputCharacterA
-#endif
+WINAPI BOOL GetConsoleHistoryInfo (PCONSOLE_HISTORY_INFO);
+
+#define GetConsoleOriginalTitle __AW_SUFFIXED__(GetConsoleOriginalTitle)
+WINAPI DWORD GetConsoleOriginalTitleA (LPSTR, DWORD);
+WINAPI DWORD GetConsoleOriginalTitleW (LPWSTR, DWORD);
+
+WINAPI BOOL GetConsoleScreenBufferInfoEx (HANDLE, PCONSOLE_SCREEN_BUFFER_INFOEX);
+WINAPI BOOL GetCurrentConsoleFontEx (HANDLE, BOOL, PCONSOLE_FONT_INFOEX);
+WINAPI BOOL SetConsoleHistoryInfo (PCONSOLE_HISTORY_INFO);
+WINAPI BOOL SetConsoleScreenBufferInfoEx (HANDLE, PCONSOLE_SCREEN_BUFFER_INFOEX);
+WINAPI BOOL SetCurrentConsoleFontEx (HANDLE, BOOL, PCONSOLE_FONT_INFOEX);
+
+#endif /* Vista and later */
+#endif /* WinXP and later */
+#endif /* Win2K and later */
 
 _END_C_DECLS
 
-#endif
+#endif /* !_WINCON_H: $RCSfile$: end of file */