| 1 |
/***********************************************************************\ |
|---|
| 2 |
* wincon.d * |
|---|
| 3 |
* * |
|---|
| 4 |
* Windows API header module * |
|---|
| 5 |
* * |
|---|
| 6 |
* Translated from MinGW Windows headers * |
|---|
| 7 |
* * |
|---|
| 8 |
* Placed into public domain * |
|---|
| 9 |
\***********************************************************************/ |
|---|
| 10 |
module win32.wincon; |
|---|
| 11 |
pragma(lib, "kernel32.lib"); |
|---|
| 12 |
|
|---|
| 13 |
private import win32.w32api, win32.windef; |
|---|
| 14 |
|
|---|
| 15 |
// FIXME: clean up Windows version support |
|---|
| 16 |
|
|---|
| 17 |
enum { |
|---|
| 18 |
FOREGROUND_BLUE = 1, |
|---|
| 19 |
FOREGROUND_GREEN = 2, |
|---|
| 20 |
FOREGROUND_RED = 4, |
|---|
| 21 |
FOREGROUND_INTENSITY = 8, |
|---|
| 22 |
BACKGROUND_BLUE = 16, |
|---|
| 23 |
BACKGROUND_GREEN = 32, |
|---|
| 24 |
BACKGROUND_RED = 64, |
|---|
| 25 |
BACKGROUND_INTENSITY = 128 |
|---|
| 26 |
} |
|---|
| 27 |
|
|---|
| 28 |
static if (_WIN32_WINNT >= 0x0501) { |
|---|
| 29 |
enum { |
|---|
| 30 |
CONSOLE_FULLSCREEN_MODE = 1, |
|---|
| 31 |
CONSOLE_WINDOWED_MODE = 0 |
|---|
| 32 |
} |
|---|
| 33 |
} |
|---|
| 34 |
|
|---|
| 35 |
enum { |
|---|
| 36 |
CTRL_C_EVENT = 0, |
|---|
| 37 |
CTRL_BREAK_EVENT = 1, |
|---|
| 38 |
CTRL_CLOSE_EVENT = 2, |
|---|
| 39 |
CTRL_LOGOFF_EVENT = 5, |
|---|
| 40 |
CTRL_SHUTDOWN_EVENT = 6 |
|---|
| 41 |
} |
|---|
| 42 |
|
|---|
| 43 |
enum { |
|---|
| 44 |
ENABLE_PROCESSED_INPUT = 1, |
|---|
| 45 |
ENABLE_LINE_INPUT = 2, |
|---|
| 46 |
ENABLE_ECHO_INPUT = 4, |
|---|
| 47 |
ENABLE_WINDOW_INPUT = 8, |
|---|
| 48 |
ENABLE_MOUSE_INPUT = 16 |
|---|
| 49 |
} |
|---|
| 50 |
|
|---|
| 51 |
enum { |
|---|
| 52 |
ENABLE_PROCESSED_OUTPUT = 1, |
|---|
| 53 |
ENABLE_WRAP_AT_EOL_OUTPUT = 2 |
|---|
| 54 |
} |
|---|
| 55 |
|
|---|
| 56 |
enum { |
|---|
| 57 |
KEY_EVENT = 1, |
|---|
| 58 |
MOUSE_EVENT = 2, |
|---|
| 59 |
WINDOW_BUFFER_SIZE_EVENT = 4, |
|---|
| 60 |
MENU_EVENT = 8, |
|---|
| 61 |
FOCUS_EVENT = 16 |
|---|
| 62 |
} |
|---|
| 63 |
enum { |
|---|
| 64 |
RIGHT_ALT_PRESSED = 1, |
|---|
| 65 |
LEFT_ALT_PRESSED = 2, |
|---|
| 66 |
RIGHT_CTRL_PRESSED = 4, |
|---|
| 67 |
LEFT_CTRL_PRESSED = 8, |
|---|
| 68 |
SHIFT_PRESSED = 16, |
|---|
| 69 |
NUMLOCK_ON = 32, |
|---|
| 70 |
SCROLLLOCK_ON = 64, |
|---|
| 71 |
CAPSLOCK_ON = 128, |
|---|
| 72 |
ENHANCED_KEY = 256 |
|---|
| 73 |
} |
|---|
| 74 |
enum { |
|---|
| 75 |
FROM_LEFT_1ST_BUTTON_PRESSED = 1, |
|---|
| 76 |
RIGHTMOST_BUTTON_PRESSED = 2, |
|---|
| 77 |
FROM_LEFT_2ND_BUTTON_PRESSED = 4, |
|---|
| 78 |
FROM_LEFT_3RD_BUTTON_PRESSED = 8, |
|---|
| 79 |
FROM_LEFT_4TH_BUTTON_PRESSED = 16 |
|---|
| 80 |
} |
|---|
| 81 |
|
|---|
| 82 |
enum { |
|---|
| 83 |
MOUSE_MOVED = 1, |
|---|
| 84 |
DOUBLE_CLICK = 2, |
|---|
| 85 |
MOUSE_WHEELED = 4 |
|---|
| 86 |
} |
|---|
| 87 |
|
|---|
| 88 |
struct CHAR_INFO { |
|---|
| 89 |
union _Char { |
|---|
| 90 |
WCHAR UnicodeChar; |
|---|
| 91 |
CHAR AsciiChar; |
|---|
| 92 |
} |
|---|
| 93 |
_Char Char; |
|---|
| 94 |
WORD Attributes; |
|---|
| 95 |
} |
|---|
| 96 |
alias CHAR_INFO* PCHAR_INFO; |
|---|
| 97 |
|
|---|
| 98 |
struct SMALL_RECT { |
|---|
| 99 |
SHORT Left; |
|---|
| 100 |
SHORT Top; |
|---|
| 101 |
SHORT Right; |
|---|
| 102 |
SHORT Bottom; |
|---|
| 103 |
} |
|---|
| 104 |
alias SMALL_RECT* PSMALL_RECT; |
|---|
| 105 |
|
|---|
| 106 |
struct CONSOLE_CURSOR_INFO { |
|---|
| 107 |
DWORD dwSize; |
|---|
| 108 |
BOOL bVisible; |
|---|
| 109 |
} |
|---|
| 110 |
alias CONSOLE_CURSOR_INFO* PCONSOLE_CURSOR_INFO; |
|---|
| 111 |
|
|---|
| 112 |
struct COORD { |
|---|
| 113 |
SHORT X; |
|---|
| 114 |
SHORT Y; |
|---|
| 115 |
} |
|---|
| 116 |
alias COORD* PCOORD; |
|---|
| 117 |
|
|---|
| 118 |
struct CONSOLE_FONT_INFO { |
|---|
| 119 |
DWORD nFont; |
|---|
| 120 |
COORD dwFontSize; |
|---|
| 121 |
} |
|---|
| 122 |
alias CONSOLE_FONT_INFO* PCONSOLE_FONT_INFO; |
|---|
| 123 |
|
|---|
| 124 |
struct CONSOLE_SCREEN_BUFFER_INFO { |
|---|
| 125 |
COORD dwSize; |
|---|
| 126 |
COORD dwCursorPosition; |
|---|
| 127 |
WORD wAttributes; |
|---|
| 128 |
SMALL_RECT srWindow; |
|---|
| 129 |
COORD dwMaximumWindowSize; |
|---|
| 130 |
} |
|---|
| 131 |
alias CONSOLE_SCREEN_BUFFER_INFO* PCONSOLE_SCREEN_BUFFER_INFO; |
|---|
| 132 |
|
|---|
| 133 |
alias BOOL function(DWORD) PHANDLER_ROUTINE; |
|---|
| 134 |
|
|---|
| 135 |
struct KEY_EVENT_RECORD { |
|---|
| 136 |
BOOL bKeyDown; |
|---|
| 137 |
WORD wRepeatCount; |
|---|
| 138 |
WORD wVirtualKeyCode; |
|---|
| 139 |
WORD wVirtualScanCode; |
|---|
| 140 |
union _uChar { |
|---|
| 141 |
WCHAR UnicodeChar; |
|---|
| 142 |
CHAR AsciiChar; |
|---|
| 143 |
} |
|---|
| 144 |
_uChar uChar; |
|---|
| 145 |
DWORD dwControlKeyState; |
|---|
| 146 |
} |
|---|
| 147 |
|
|---|
| 148 |
struct MOUSE_EVENT_RECORD { |
|---|
| 149 |
COORD dwMousePosition; |
|---|
| 150 |
DWORD dwButtonState; |
|---|
| 151 |
DWORD dwControlKeyState; |
|---|
| 152 |
DWORD dwEventFlags; |
|---|
| 153 |
} |
|---|
| 154 |
|
|---|
| 155 |
struct WINDOW_BUFFER_SIZE_RECORD { |
|---|
| 156 |
COORD dwSize; |
|---|
| 157 |
} |
|---|
| 158 |
|
|---|
| 159 |
struct MENU_EVENT_RECORD { |
|---|
| 160 |
UINT dwCommandId; |
|---|
| 161 |
} |
|---|
| 162 |
alias MENU_EVENT_RECORD* PMENU_EVENT_RECORD; |
|---|
| 163 |
|
|---|
| 164 |
struct FOCUS_EVENT_RECORD { |
|---|
| 165 |
BOOL bSetFocus; |
|---|
| 166 |
} |
|---|
| 167 |
|
|---|
| 168 |
struct INPUT_RECORD { |
|---|
| 169 |
WORD EventType; |
|---|
| 170 |
union _Event { |
|---|
| 171 |
KEY_EVENT_RECORD KeyEvent; |
|---|
| 172 |
MOUSE_EVENT_RECORD MouseEvent; |
|---|
| 173 |
WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent; |
|---|
| 174 |
MENU_EVENT_RECORD MenuEvent; |
|---|
| 175 |
FOCUS_EVENT_RECORD FocusEvent; |
|---|
| 176 |
} |
|---|
| 177 |
_Event Event; |
|---|
| 178 |
} |
|---|
| 179 |
alias INPUT_RECORD* PINPUT_RECORD; |
|---|
| 180 |
|
|---|
| 181 |
extern (Windows): |
|---|
| 182 |
|
|---|
| 183 |
BOOL AllocConsole(); |
|---|
| 184 |
HANDLE CreateConsoleScreenBuffer(DWORD, DWORD, SECURITY_ATTRIBUTES*, DWORD, LPVOID); |
|---|
| 185 |
BOOL FillConsoleOutputAttribute(HANDLE, WORD, DWORD, COORD, PDWORD); |
|---|
| 186 |
BOOL FillConsoleOutputCharacterA(HANDLE, CHAR, DWORD, COORD, PDWORD); |
|---|
| 187 |
BOOL FillConsoleOutputCharacterW(HANDLE, WCHAR, DWORD, COORD, PDWORD); |
|---|
| 188 |
BOOL FlushConsoleInputBuffer(HANDLE); |
|---|
| 189 |
BOOL FreeConsole(); |
|---|
| 190 |
BOOL GenerateConsoleCtrlEvent(DWORD, DWORD); |
|---|
| 191 |
UINT GetConsoleCP(); |
|---|
| 192 |
BOOL GetConsoleCursorInfo(HANDLE, PCONSOLE_CURSOR_INFO); |
|---|
| 193 |
BOOL GetConsoleMode(HANDLE,PDWORD); |
|---|
| 194 |
UINT GetConsoleOutputCP(); |
|---|
| 195 |
BOOL GetConsoleScreenBufferInfo(HANDLE, PCONSOLE_SCREEN_BUFFER_INFO); |
|---|
| 196 |
DWORD GetConsoleTitleA(LPSTR, DWORD); |
|---|
| 197 |
DWORD GetConsoleTitleW(LPWSTR, DWORD); |
|---|
| 198 |
COORD GetLargestConsoleWindowSize(HANDLE); |
|---|
| 199 |
BOOL GetNumberOfConsoleInputEvents(HANDLE, PDWORD); |
|---|
| 200 |
BOOL GetNumberOfConsoleMouseButtons(PDWORD); |
|---|
| 201 |
BOOL PeekConsoleInputA(HANDLE, PINPUT_RECORD, DWORD, PDWORD); |
|---|
| 202 |
BOOL PeekConsoleInputW(HANDLE, PINPUT_RECORD, DWORD, PDWORD); |
|---|
| 203 |
BOOL ReadConsoleA(HANDLE, PVOID, DWORD, PDWORD, PVOID); |
|---|
| 204 |
BOOL ReadConsoleW(HANDLE, PVOID, DWORD, PDWORD, PVOID); |
|---|
| 205 |
BOOL ReadConsoleInputA(HANDLE, PINPUT_RECORD, DWORD, PDWORD); |
|---|
| 206 |
BOOL ReadConsoleInputW(HANDLE, PINPUT_RECORD, DWORD, PDWORD); |
|---|
| 207 |
BOOL ReadConsoleOutputAttribute(HANDLE, LPWORD, DWORD, COORD, LPDWORD); |
|---|
| 208 |
BOOL ReadConsoleOutputCharacterA(HANDLE, LPSTR, DWORD, COORD, PDWORD); |
|---|
| 209 |
BOOL ReadConsoleOutputCharacterW(HANDLE, LPWSTR, DWORD, COORD, PDWORD); |
|---|
| 210 |
BOOL ReadConsoleOutputA(HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT); |
|---|
| 211 |
BOOL ReadConsoleOutputW(HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT); |
|---|
| 212 |
BOOL ScrollConsoleScreenBufferA(HANDLE, CPtr!(SMALL_RECT), CPtr!(SMALL_RECT), COORD, CPtr!(CHAR_INFO)); |
|---|
| 213 |
BOOL ScrollConsoleScreenBufferW(HANDLE, CPtr!(SMALL_RECT), CPtr!(SMALL_RECT), COORD, CPtr!(CHAR_INFO)); |
|---|
| 214 |
BOOL SetConsoleActiveScreenBuffer(HANDLE); |
|---|
| 215 |
BOOL SetConsoleCP(UINT); |
|---|
| 216 |
BOOL SetConsoleCtrlHandler(PHANDLER_ROUTINE, BOOL); |
|---|
| 217 |
BOOL SetConsoleCursorInfo(HANDLE, CPtr!(CONSOLE_CURSOR_INFO)); |
|---|
| 218 |
BOOL SetConsoleCursorPosition(HANDLE, COORD); |
|---|
| 219 |
|
|---|
| 220 |
|
|---|
| 221 |
static if (_WIN32_WINNT >= 0x0500) { |
|---|
| 222 |
BOOL GetConsoleDisplayMode(LPDWORD); |
|---|
| 223 |
HWND GetConsoleWindow(); |
|---|
| 224 |
} |
|---|
| 225 |
|
|---|
| 226 |
static if (_WIN32_WINNT >= 0x0501) { |
|---|
| 227 |
BOOL AttachConsole(DWORD); |
|---|
| 228 |
BOOL SetConsoleDisplayMode(HANDLE, DWORD, PCOORD); |
|---|
| 229 |
const DWORD ATTACH_PARENT_PROCESS = cast(DWORD)-1; |
|---|
| 230 |
} |
|---|
| 231 |
|
|---|
| 232 |
BOOL SetConsoleMode(HANDLE, DWORD); |
|---|
| 233 |
BOOL SetConsoleOutputCP(UINT); |
|---|
| 234 |
BOOL SetConsoleScreenBufferSize(HANDLE, COORD); |
|---|
| 235 |
BOOL SetConsoleTextAttribute(HANDLE, WORD); |
|---|
| 236 |
BOOL SetConsoleTitleA(LPCSTR); |
|---|
| 237 |
BOOL SetConsoleTitleW(LPCWSTR); |
|---|
| 238 |
BOOL SetConsoleWindowInfo(HANDLE, BOOL, CPtr!(SMALL_RECT)); |
|---|
| 239 |
BOOL WriteConsoleA(HANDLE, PCVOID, DWORD, PDWORD, PVOID); |
|---|
| 240 |
BOOL WriteConsoleW(HANDLE, PCVOID, DWORD, PDWORD, PVOID); |
|---|
| 241 |
BOOL WriteConsoleInputA(HANDLE, CPtr!(INPUT_RECORD), DWORD, PDWORD); |
|---|
| 242 |
BOOL WriteConsoleInputW(HANDLE, CPtr!(INPUT_RECORD), DWORD, PDWORD); |
|---|
| 243 |
BOOL WriteConsoleOutputA(HANDLE, CPtr!(CHAR_INFO), COORD, COORD, PSMALL_RECT); |
|---|
| 244 |
BOOL WriteConsoleOutputW(HANDLE, CPtr!(CHAR_INFO), COORD, COORD, PSMALL_RECT); |
|---|
| 245 |
BOOL WriteConsoleOutputAttribute(HANDLE, CPtr!(WORD), DWORD, COORD, PDWORD); |
|---|
| 246 |
BOOL WriteConsoleOutputCharacterA(HANDLE, LPCSTR, DWORD, COORD, PDWORD); |
|---|
| 247 |
BOOL WriteConsoleOutputCharacterW(HANDLE, LPCWSTR, DWORD, COORD, PDWORD); |
|---|
| 248 |
|
|---|
| 249 |
version (Unicode) { |
|---|
| 250 |
alias FillConsoleOutputCharacterW FillConsoleOutputCharacter; |
|---|
| 251 |
alias GetConsoleTitleW GetConsoleTitle; |
|---|
| 252 |
alias PeekConsoleInputW PeekConsoleInput; |
|---|
| 253 |
alias ReadConsoleW ReadConsole; |
|---|
| 254 |
alias ReadConsoleInputW ReadConsoleInput; |
|---|
| 255 |
alias ReadConsoleOutputW ReadConsoleOutput; |
|---|
| 256 |
alias ReadConsoleOutputCharacterW ReadConsoleOutputCharacter; |
|---|
| 257 |
alias ScrollConsoleScreenBufferW ScrollConsoleScreenBuffer; |
|---|
| 258 |
alias SetConsoleTitleW SetConsoleTitle; |
|---|
| 259 |
alias WriteConsoleW WriteConsole; |
|---|
| 260 |
alias WriteConsoleInputW WriteConsoleInput; |
|---|
| 261 |
alias WriteConsoleOutputW WriteConsoleOutput; |
|---|
| 262 |
alias WriteConsoleOutputCharacterW WriteConsoleOutputCharacter; |
|---|
| 263 |
} else { |
|---|
| 264 |
alias FillConsoleOutputCharacterA FillConsoleOutputCharacter; |
|---|
| 265 |
alias GetConsoleTitleA GetConsoleTitle; |
|---|
| 266 |
alias PeekConsoleInputA PeekConsoleInput; |
|---|
| 267 |
alias ReadConsoleA ReadConsole; |
|---|
| 268 |
alias ReadConsoleInputA ReadConsoleInput; |
|---|
| 269 |
alias ReadConsoleOutputA ReadConsoleOutput; |
|---|
| 270 |
alias ReadConsoleOutputCharacterA ReadConsoleOutputCharacter; |
|---|
| 271 |
alias ScrollConsoleScreenBufferA ScrollConsoleScreenBuffer; |
|---|
| 272 |
alias SetConsoleTitleA SetConsoleTitle; |
|---|
| 273 |
alias WriteConsoleA WriteConsole; |
|---|
| 274 |
alias WriteConsoleInputA WriteConsoleInput; |
|---|
| 275 |
alias WriteConsoleOutputA WriteConsoleOutput; |
|---|
| 276 |
alias WriteConsoleOutputCharacterA WriteConsoleOutputCharacter; |
|---|
| 277 |
} |
|---|