root/trunk/win32/wincon.d

Revision 422, 8.4 kB (checked in by smjg, 8 months ago)

do away with CPtr; additions to winuser pointed out by alaing; other tweaks

Line 
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");
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 >= 0x501) {
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, const(SMALL_RECT)*, const(SMALL_RECT)*, COORD, const(CHAR_INFO)*);
213 BOOL ScrollConsoleScreenBufferW(HANDLE, const(SMALL_RECT)*, const(SMALL_RECT)*, COORD, const(CHAR_INFO)*);
214 BOOL SetConsoleActiveScreenBuffer(HANDLE);
215 BOOL SetConsoleCP(UINT);
216 BOOL SetConsoleCtrlHandler(PHANDLER_ROUTINE, BOOL);
217 BOOL SetConsoleCursorInfo(HANDLE, const(CONSOLE_CURSOR_INFO)*);
218 BOOL SetConsoleCursorPosition(HANDLE, COORD);
219
220
221 static if (_WIN32_WINNT >= 0x500) {
222 BOOL GetConsoleDisplayMode(LPDWORD);
223 HWND GetConsoleWindow();
224 }
225
226 static if (_WIN32_WINNT >= 0x501) {
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, const(SMALL_RECT)*);
239 BOOL WriteConsoleA(HANDLE, PCVOID, DWORD, PDWORD, PVOID);
240 BOOL WriteConsoleW(HANDLE, PCVOID, DWORD, PDWORD, PVOID);
241 BOOL WriteConsoleInputA(HANDLE, const(INPUT_RECORD)*, DWORD, PDWORD);
242 BOOL WriteConsoleInputW(HANDLE, const(INPUT_RECORD)*, DWORD, PDWORD);
243 BOOL WriteConsoleOutputA(HANDLE, const(CHAR_INFO)*, COORD, COORD, PSMALL_RECT);
244 BOOL WriteConsoleOutputW(HANDLE, const(CHAR_INFO)*, COORD, COORD, PSMALL_RECT);
245 BOOL WriteConsoleOutputAttribute(HANDLE, const(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 }
Note: See TracBrowser for help on using the browser.