OSDN Git Service

Improve WinXP/Vista console I/O support.
authorDavid Gressett <texasgaidheal@users.osdn.me>
Wed, 24 Oct 2018 18:17:28 +0000 (19:17 +0100)
committerDavid Gressett <texasgaidheal@users.osdn.me>
Wed, 24 Oct 2018 18:17:28 +0000 (19:17 +0100)
w32api/ChangeLog
w32api/include/wincon.h

index 41054ab..65f4301 100644 (file)
@@ -1,3 +1,59 @@
+2018-10-24  David Gressett  <texasgaidheal@users.osdn.me>
+
+       Improve WinXP/Vista console I/O support.
+
+       * include/wincon.h (AddConsoleAlias, GetConsoleAlias)
+       (GetConsoleAliases, GetConsoleAliasExes, GetConsoleAliasesLength)
+       (GetConsoleAliasExesLength, GetConsoleOriginalTitle): New function
+       name aliases; define them, mapping them conditionally to represent...
+       [UNICODE]: ...their corresponding UTF-16LE function names, else...
+       [!UNICODE]: ...their corresponding ASCII/DBCS function names.
+       (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, ENABLE_VIRTUAL_TERMINAL_INPUT)
+       (ENABLE_VIRTUAL_TERMINAL_PROCESSING, DISABLE_NEWLINE_AUTO_RETURN)
+       (ENABLE_LVB_GRID_WORLDWIDE,(MOUSE_HWHEELED): Define them.
+       (GetConsoleAliasA, GetConsoleAliasW, HandlerRoutine): Declare.
+       (CONSOLE_FULLSCREEN, CONSOLE_FULLSCREEN_HARDWARE): Define when...
+       [_WIN32_WINNT >= 0x0500]: ...this prevails; additionally...
+       (GetConsoleFontSize): ...declare function.
+       (CONSOLE_NO_SELECTION, CONSOLE_SELECTION_NOT_EMPTY)
+       (CONSOLE_SELECTION_IN_PROGRESS, CONSOLE_MOUSE_SELECTION)
+       (CONSOLE_MOUSE_DOWN): Define them; make them visible only when...
+       [_WIN32_WINNT >= 0x0501]: ...this prevails.
+       (struct _CONSOLE_FONT_INFO): Make it visible, only when...
+       [_WIN32_WINNT >= 0x0501]: ...this prevails; when visible, map it to...
+       (CONSOLE_FONT_INFO, PCONSOLE_FONT_INFO): ...these typedefs.
+       (struct _CONSOLE_SELECTION_INFO): Declare it; visible only when...
+       [_WIN32_WINNT >= 0x0501]: ...this prevails; when visible, map it to...
+       (CONSOLE_SELECTION_INFO, PCONSOLE_SELECTION_INFO): ...these typedefs.
+       [_WIN32_WINNT >= 0x0501] (AddConsoleAliasA, AddConsoleAliasW)
+       (GetConsoleAliasesA, GetConsoleAliasesW, GetConsoleAliasExesA)
+       (GetConsoleAliasExesW, GetConsoleAliasesLengthA)
+       (GetConsoleAliasesLengthW, GetConsoleAliasExesLengthA)
+       (GetConsoleAliasExesLengthW, GetConsoleSelectionInfo)
+       (GetCurrentConsoleFont): Declare functions.
+       [_WIN32_WINNT >= 0x0600] (HISTORY_NO_DUP_FLAG): Define it.
+       (struct _CONSOLE_FONT_INFOEX): New structure; declare it only when...
+       [_WIN32_WINNT >= 0x0600]: ...this prevails; when declared, map to...
+       (CONSOLE_FONT_INFOEX, PCONSOLE_FONT_INFOEX): ...these typedefs.
+       (CONSOLE_HISTORY_INFO, PCONSOLE_HISTORY_INFO): New typedefs; they
+       map to an anonymous structure, and are visible only when...
+       [_WIN32_WINNT >= 0x0600]: ...this prevails.
+       (struct _CONSOLE_READCONSOLE_CONTROL): New structure; declare when...
+       [_WIN32_WINNT >= 0x0600]: ...this prevails; when declared, map to...
+       (CONSOLE_READCONSOLE_CONTROL, PCONSOLE_READCONSOLE_CONTROL): ...these.
+       (struct _CONSOLE_SCREEN_BUFFER_INFOEX): New structure; declare when...
+       [_WIN32_WINNT >= 0x0600]: ...this prevails; when declared, map to...
+       (CONSOLE_SCREEN_BUFFER_INFOEX, PCONSOLE_SCREEN_BUFFER_INFOEX):
+       ...these typedefs.
+       [_WIN32_WINNT >= 0x0600] (GetConsoleHistoryInfo)
+       (GetConsoleOriginalTitleA, GetConsoleOriginalTitleW)
+       (GetConsoleScreenBufferInfoEx, GetCurrentConsoleFontEx)
+       (SetConsoleHistoryInfo, SetConsoleScreenBufferInfoEx)
+       (SetCurrentConsoleFontEx): Declare functions.
+
 2018-09-03  Keith Marshall  <keith@users.osdn.me>
 
        Prepare and publish MinGW.org WSL-5.1.1 release.
index d536acb..f49d994 100644 (file)
@@ -16,9 +16,21 @@ extern "C" {
 #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_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
@@ -34,8 +46,15 @@ extern "C" {
 #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
@@ -58,6 +77,11 @@ extern "C" {
 #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
 
 typedef struct _CHAR_INFO {
        union {
@@ -80,10 +104,35 @@ 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;
+#endif
+#if (_WIN32_WINNT >= 0x600)
+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;
+} CONSOLE_HISTORY_INFO, *PCONSOLE_HISTORY_INFO;
+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;
@@ -91,6 +140,26 @@ typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
        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];
+} 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;
@@ -129,6 +198,10 @@ typedef struct _INPUT_RECORD {
        } 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)
@@ -141,11 +214,39 @@ 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)
@@ -154,10 +255,15 @@ 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);
@@ -179,13 +285,22 @@ 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);
@@ -197,7 +312,14 @@ 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
@@ -211,7 +333,14 @@ BOOL WINAPI WriteConsoleOutputCharacterW(HANDLE,LPCWSTR,DWORD,COORD,PDWORD);
 #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