| /** | |
| * Windows API header module | |
| * | |
| * Translated from MinGW Windows headers | |
| * | |
| * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) | |
| * Source: $(DRUNTIMESRC core/sys/windows/_wincon.d) | |
| */ | |
| module core.sys.windows.wincon; | |
| version (Windows): | |
| version (ANSI) {} else version = Unicode; | |
| pragma(lib, "kernel32"); | |
| import core.sys.windows.w32api, core.sys.windows.windef; | |
| // FIXME: clean up Windows version support | |
| enum { | |
| FOREGROUND_BLUE = 0x0001, | |
| FOREGROUND_GREEN = 0x0002, | |
| FOREGROUND_RED = 0x0004, | |
| FOREGROUND_INTENSITY = 0x0008, | |
| BACKGROUND_BLUE = 0x0010, | |
| BACKGROUND_GREEN = 0x0020, | |
| BACKGROUND_RED = 0x0040, | |
| BACKGROUND_INTENSITY = 0x0080, | |
| COMMON_LVB_LEADING_BYTE = 0x0100, | |
| COMMON_LVB_TRAILING_BYTE = 0x0200, | |
| COMMON_LVB_GRID_HORIZONTAL = 0x0400, | |
| COMMON_LVB_GRID_LVERTICAL = 0x0800, | |
| COMMON_LVB_GRID_RVERTICAL = 0x1000, | |
| COMMON_LVB_REVERSE_VIDEO = 0x4000, | |
| COMMON_LVB_UNDERSCORE = 0x8000, | |
| COMMON_LVB_SBCSDBCS = 0x0300, | |
| } | |
| static if (_WIN32_WINNT >= 0x501) { | |
| enum { | |
| CONSOLE_FULLSCREEN_MODE = 1, | |
| CONSOLE_WINDOWED_MODE = 0 | |
| } | |
| } | |
| enum { | |
| CTRL_C_EVENT = 0, | |
| CTRL_BREAK_EVENT = 1, | |
| CTRL_CLOSE_EVENT = 2, | |
| CTRL_LOGOFF_EVENT = 5, | |
| CTRL_SHUTDOWN_EVENT = 6 | |
| } | |
| enum { | |
| ENABLE_PROCESSED_INPUT = 1, | |
| ENABLE_LINE_INPUT = 2, | |
| ENABLE_ECHO_INPUT = 4, | |
| ENABLE_WINDOW_INPUT = 8, | |
| ENABLE_MOUSE_INPUT = 16, | |
| ENABLE_INSERT_MODE = 32, | |
| ENABLE_QUICK_EDIT_MODE = 64, | |
| ENABLE_EXTENDED_FLAGS = 128, | |
| ENABLE_AUTO_POSITION = 256, | |
| ENABLE_VIRTUAL_TERMINAL_INPUT = 512 | |
| } | |
| enum { | |
| ENABLE_PROCESSED_OUTPUT = 1, | |
| ENABLE_WRAP_AT_EOL_OUTPUT = 2, | |
| ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4, | |
| DISABLE_NEWLINE_AUTO_RETURN = 8, | |
| ENABLE_LVB_GRID_WORLDWIDE = 16 | |
| } | |
| enum { | |
| KEY_EVENT = 1, | |
| MOUSE_EVENT = 2, | |
| WINDOW_BUFFER_SIZE_EVENT = 4, | |
| MENU_EVENT = 8, | |
| FOCUS_EVENT = 16 | |
| } | |
| enum { | |
| RIGHT_ALT_PRESSED = 1, | |
| LEFT_ALT_PRESSED = 2, | |
| RIGHT_CTRL_PRESSED = 4, | |
| LEFT_CTRL_PRESSED = 8, | |
| SHIFT_PRESSED = 16, | |
| NUMLOCK_ON = 32, | |
| SCROLLLOCK_ON = 64, | |
| CAPSLOCK_ON = 128, | |
| ENHANCED_KEY = 256 | |
| } | |
| enum { | |
| FROM_LEFT_1ST_BUTTON_PRESSED = 1, | |
| RIGHTMOST_BUTTON_PRESSED = 2, | |
| FROM_LEFT_2ND_BUTTON_PRESSED = 4, | |
| FROM_LEFT_3RD_BUTTON_PRESSED = 8, | |
| FROM_LEFT_4TH_BUTTON_PRESSED = 16 | |
| } | |
| enum { | |
| MOUSE_MOVED = 1, | |
| DOUBLE_CLICK = 2, | |
| MOUSE_WHEELED = 4 | |
| } | |
| struct CHAR_INFO { | |
| union _Char { | |
| WCHAR UnicodeChar = 0; | |
| CHAR AsciiChar; | |
| } | |
| union { | |
| _Char Char; | |
| WCHAR UnicodeChar; | |
| CHAR AsciiChar; | |
| } | |
| WORD Attributes; | |
| } | |
| alias PCHAR_INFO = CHAR_INFO*; | |
| struct SMALL_RECT { | |
| SHORT Left; | |
| SHORT Top; | |
| SHORT Right; | |
| SHORT Bottom; | |
| } | |
| alias PSMALL_RECT = SMALL_RECT*; | |
| struct CONSOLE_CURSOR_INFO { | |
| DWORD dwSize; | |
| BOOL bVisible; | |
| } | |
| alias PCONSOLE_CURSOR_INFO = CONSOLE_CURSOR_INFO*; | |
| struct COORD { | |
| SHORT X; | |
| SHORT Y; | |
| } | |
| alias PCOORD = COORD*; | |
| struct CONSOLE_FONT_INFO { | |
| DWORD nFont; | |
| COORD dwFontSize; | |
| } | |
| alias PCONSOLE_FONT_INFO = CONSOLE_FONT_INFO*; | |
| struct CONSOLE_SCREEN_BUFFER_INFO { | |
| COORD dwSize; | |
| COORD dwCursorPosition; | |
| WORD wAttributes; | |
| SMALL_RECT srWindow; | |
| COORD dwMaximumWindowSize; | |
| } | |
| alias PCONSOLE_SCREEN_BUFFER_INFO = CONSOLE_SCREEN_BUFFER_INFO*; | |
| alias PHANDLER_ROUTINE = extern(Windows) BOOL function(DWORD) nothrow; | |
| struct KEY_EVENT_RECORD { | |
| BOOL bKeyDown; | |
| WORD wRepeatCount; | |
| WORD wVirtualKeyCode; | |
| WORD wVirtualScanCode; | |
| union _uChar { | |
| WCHAR UnicodeChar = 0; | |
| CHAR AsciiChar; | |
| } | |
| union { | |
| WCHAR UnicodeChar = 0; | |
| CHAR AsciiChar; | |
| _uChar uChar; | |
| } | |
| DWORD dwControlKeyState; | |
| } | |
| alias PKEY_EVENT_RECORD = KEY_EVENT_RECORD*; | |
| struct MOUSE_EVENT_RECORD { | |
| COORD dwMousePosition; | |
| DWORD dwButtonState; | |
| DWORD dwControlKeyState; | |
| DWORD dwEventFlags; | |
| } | |
| alias PMOUSE_EVENT_RECORD = MOUSE_EVENT_RECORD*; | |
| struct WINDOW_BUFFER_SIZE_RECORD { | |
| COORD dwSize; | |
| } | |
| alias PWINDOW_BUFFER_SIZE_RECORD = WINDOW_BUFFER_SIZE_RECORD*; | |
| struct MENU_EVENT_RECORD { | |
| UINT dwCommandId; | |
| } | |
| alias PMENU_EVENT_RECORD = MENU_EVENT_RECORD*; | |
| struct FOCUS_EVENT_RECORD { | |
| BOOL bSetFocus; | |
| } | |
| alias PFOCUS_EVENT_RECORD = FOCUS_EVENT_RECORD*; | |
| struct INPUT_RECORD { | |
| WORD EventType; | |
| union _Event { | |
| KEY_EVENT_RECORD KeyEvent; | |
| MOUSE_EVENT_RECORD MouseEvent; | |
| WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent; | |
| MENU_EVENT_RECORD MenuEvent; | |
| FOCUS_EVENT_RECORD FocusEvent; | |
| } | |
| union { | |
| KEY_EVENT_RECORD KeyEvent; | |
| MOUSE_EVENT_RECORD MouseEvent; | |
| WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent; | |
| MENU_EVENT_RECORD MenuEvent; | |
| FOCUS_EVENT_RECORD FocusEvent; | |
| _Event Event; | |
| } | |
| } | |
| alias PINPUT_RECORD = INPUT_RECORD*; | |
| extern (Windows) nothrow @nogc: | |
| BOOL AllocConsole(); | |
| HANDLE CreateConsoleScreenBuffer(DWORD, DWORD, const(SECURITY_ATTRIBUTES)*, DWORD, LPVOID); | |
| BOOL FillConsoleOutputAttribute(HANDLE, WORD, DWORD, COORD, PDWORD); | |
| BOOL FillConsoleOutputCharacterA(HANDLE, CHAR, DWORD, COORD, PDWORD); | |
| BOOL FillConsoleOutputCharacterW(HANDLE, WCHAR, DWORD, COORD, PDWORD); | |
| BOOL FlushConsoleInputBuffer(HANDLE); | |
| BOOL FreeConsole(); | |
| BOOL GenerateConsoleCtrlEvent(DWORD, DWORD); | |
| UINT GetConsoleCP(); | |
| BOOL GetConsoleCursorInfo(HANDLE, PCONSOLE_CURSOR_INFO); | |
| BOOL GetConsoleMode(HANDLE,PDWORD); | |
| UINT GetConsoleOutputCP(); | |
| BOOL GetConsoleScreenBufferInfo(HANDLE, PCONSOLE_SCREEN_BUFFER_INFO); | |
| DWORD GetConsoleTitleA(LPSTR, DWORD); | |
| DWORD GetConsoleTitleW(LPWSTR, DWORD); | |
| COORD GetLargestConsoleWindowSize(HANDLE); | |
| BOOL GetNumberOfConsoleInputEvents(HANDLE, PDWORD); | |
| BOOL GetNumberOfConsoleMouseButtons(PDWORD); | |
| BOOL PeekConsoleInputA(HANDLE, PINPUT_RECORD, DWORD, PDWORD); | |
| BOOL PeekConsoleInputW(HANDLE, PINPUT_RECORD, DWORD, PDWORD); | |
| BOOL ReadConsoleA(HANDLE, PVOID, DWORD, PDWORD, PVOID); | |
| BOOL ReadConsoleW(HANDLE, PVOID, DWORD, PDWORD, PVOID); | |
| BOOL ReadConsoleInputA(HANDLE, PINPUT_RECORD, DWORD, PDWORD); | |
| BOOL ReadConsoleInputW(HANDLE, PINPUT_RECORD, DWORD, PDWORD); | |
| BOOL ReadConsoleOutputAttribute(HANDLE, LPWORD, DWORD, COORD, LPDWORD); | |
| BOOL ReadConsoleOutputCharacterA(HANDLE, LPSTR, DWORD, COORD, PDWORD); | |
| BOOL ReadConsoleOutputCharacterW(HANDLE, LPWSTR, DWORD, COORD, PDWORD); | |
| BOOL ReadConsoleOutputA(HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT); | |
| BOOL ReadConsoleOutputW(HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT); | |
| BOOL ScrollConsoleScreenBufferA(HANDLE, const(SMALL_RECT)*, const(SMALL_RECT)*, COORD, const(CHAR_INFO)*); | |
| BOOL ScrollConsoleScreenBufferW(HANDLE, const(SMALL_RECT)*, const(SMALL_RECT)*, COORD, const(CHAR_INFO)*); | |
| BOOL SetConsoleActiveScreenBuffer(HANDLE); | |
| BOOL SetConsoleCP(UINT); | |
| BOOL SetConsoleCtrlHandler(PHANDLER_ROUTINE, BOOL); | |
| BOOL SetConsoleCursorInfo(HANDLE, const(CONSOLE_CURSOR_INFO)*); | |
| BOOL SetConsoleCursorPosition(HANDLE, COORD); | |
| static if (_WIN32_WINNT >= 0x500) { | |
| BOOL GetConsoleDisplayMode(LPDWORD); | |
| HWND GetConsoleWindow(); | |
| } | |
| static if (_WIN32_WINNT >= 0x501) { | |
| BOOL AttachConsole(DWORD); | |
| BOOL SetConsoleDisplayMode(HANDLE, DWORD, PCOORD); | |
| enum DWORD ATTACH_PARENT_PROCESS = cast(DWORD)-1; | |
| } | |
| BOOL SetConsoleMode(HANDLE, DWORD); | |
| BOOL SetConsoleOutputCP(UINT); | |
| BOOL SetConsoleScreenBufferSize(HANDLE, COORD); | |
| BOOL SetConsoleTextAttribute(HANDLE, WORD); | |
| BOOL SetConsoleTitleA(LPCSTR); | |
| BOOL SetConsoleTitleW(LPCWSTR); | |
| BOOL SetConsoleWindowInfo(HANDLE, BOOL, const(SMALL_RECT)*); | |
| BOOL WriteConsoleA(HANDLE, PCVOID, DWORD, PDWORD, PVOID); | |
| BOOL WriteConsoleW(HANDLE, PCVOID, DWORD, PDWORD, PVOID); | |
| BOOL WriteConsoleInputA(HANDLE, const(INPUT_RECORD)*, DWORD, PDWORD); | |
| BOOL WriteConsoleInputW(HANDLE, const(INPUT_RECORD)*, DWORD, PDWORD); | |
| BOOL WriteConsoleOutputA(HANDLE, const(CHAR_INFO)*, COORD, COORD, PSMALL_RECT); | |
| BOOL WriteConsoleOutputW(HANDLE, const(CHAR_INFO)*, COORD, COORD, PSMALL_RECT); | |
| BOOL WriteConsoleOutputAttribute(HANDLE, const(WORD)*, DWORD, COORD, PDWORD); | |
| BOOL WriteConsoleOutputCharacterA(HANDLE, LPCSTR, DWORD, COORD, PDWORD); | |
| BOOL WriteConsoleOutputCharacterW(HANDLE, LPCWSTR, DWORD, COORD, PDWORD); | |
| version (Unicode) { | |
| alias FillConsoleOutputCharacter = FillConsoleOutputCharacterW; | |
| alias GetConsoleTitle = GetConsoleTitleW; | |
| alias PeekConsoleInput = PeekConsoleInputW; | |
| alias ReadConsole = ReadConsoleW; | |
| alias ReadConsoleInput = ReadConsoleInputW; | |
| alias ReadConsoleOutput = ReadConsoleOutputW; | |
| alias ReadConsoleOutputCharacter = ReadConsoleOutputCharacterW; | |
| alias ScrollConsoleScreenBuffer = ScrollConsoleScreenBufferW; | |
| alias SetConsoleTitle = SetConsoleTitleW; | |
| alias WriteConsole = WriteConsoleW; | |
| alias WriteConsoleInput = WriteConsoleInputW; | |
| alias WriteConsoleOutput = WriteConsoleOutputW; | |
| alias WriteConsoleOutputCharacter = WriteConsoleOutputCharacterW; | |
| } else { | |
| alias FillConsoleOutputCharacter = FillConsoleOutputCharacterA; | |
| alias GetConsoleTitle = GetConsoleTitleA; | |
| alias PeekConsoleInput = PeekConsoleInputA; | |
| alias ReadConsole = ReadConsoleA; | |
| alias ReadConsoleInput = ReadConsoleInputA; | |
| alias ReadConsoleOutput = ReadConsoleOutputA; | |
| alias ReadConsoleOutputCharacter = ReadConsoleOutputCharacterA; | |
| alias ScrollConsoleScreenBuffer = ScrollConsoleScreenBufferA; | |
| alias SetConsoleTitle = SetConsoleTitleA; | |
| alias WriteConsole = WriteConsoleA; | |
| alias WriteConsoleInput = WriteConsoleInputA; | |
| alias WriteConsoleOutput = WriteConsoleOutputA; | |
| alias WriteConsoleOutputCharacter = WriteConsoleOutputCharacterA; | |
| } |