1
|
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, SMALL_RECT*, SMALL_RECT*, COORD, CHAR_INFO*);
|
|
213 BOOL ScrollConsoleScreenBufferW(HANDLE, SMALL_RECT*, SMALL_RECT*, COORD, CHAR_INFO*);
|
|
214 BOOL SetConsoleActiveScreenBuffer(HANDLE);
|
|
215 BOOL SetConsoleCP(UINT);
|
|
216 BOOL SetConsoleCtrlHandler(PHANDLER_ROUTINE, BOOL);
|
|
217 BOOL SetConsoleCursorInfo(HANDLE, 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, SMALL_RECT*);
|
|
239 BOOL WriteConsoleA(HANDLE, PCVOID, DWORD, PDWORD, PVOID);
|
|
240 BOOL WriteConsoleW(HANDLE, PCVOID, DWORD, PDWORD, PVOID);
|
|
241 BOOL WriteConsoleInputA(HANDLE, INPUT_RECORD*, DWORD, PDWORD);
|
|
242 BOOL WriteConsoleInputW(HANDLE, INPUT_RECORD*, DWORD, PDWORD);
|
|
243 BOOL WriteConsoleOutputA(HANDLE, CHAR_INFO*, COORD, COORD, PSMALL_RECT);
|
|
244 BOOL WriteConsoleOutputW(HANDLE, CHAR_INFO*, COORD, COORD, PSMALL_RECT);
|
|
245 BOOL WriteConsoleOutputAttribute(HANDLE, 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 }
|