1 // Copyright © 2015, Peter Atashian
2 // Licensed under the MIT License <LICENSE.md>
3 //! This module contains the public data structures, data types, and procedures exported by the NT
4 //! console subsystem.
5 STRUCT!{struct COORD {
6     X: ::SHORT,
7     Y: ::SHORT,
8 }}
9 pub type PCOORD = *mut COORD;
10 STRUCT!{struct SMALL_RECT {
11     Left: ::SHORT,
12     Top: ::SHORT,
13     Right: ::SHORT,
14     Bottom: ::SHORT,
15 }}
16 pub type PSMALL_RECT = *mut SMALL_RECT;
17 STRUCT!{struct KEY_EVENT_RECORD {
18     bKeyDown: ::BOOL,
19     wRepeatCount: ::WORD,
20     wVirtualKeyCode: ::WORD,
21     wVirtualScanCode: ::WORD,
22     UnicodeChar: ::WCHAR,
23     dwControlKeyState: ::DWORD,
24 }}
25 UNION!{KEY_EVENT_RECORD, UnicodeChar, AsciiChar, AsciiChar_mut, ::CHAR}
26 pub type PKEY_EVENT_RECORD = *mut KEY_EVENT_RECORD;
27 pub const RIGHT_ALT_PRESSED: ::DWORD = 0x0001;
28 pub const LEFT_ALT_PRESSED: ::DWORD = 0x0002;
29 pub const RIGHT_CTRL_PRESSED: ::DWORD = 0x0004;
30 pub const LEFT_CTRL_PRESSED: ::DWORD = 0x0008;
31 pub const SHIFT_PRESSED: ::DWORD = 0x0010;
32 pub const NUMLOCK_ON: ::DWORD = 0x0020;
33 pub const SCROLLLOCK_ON: ::DWORD = 0x0040;
34 pub const CAPSLOCK_ON: ::DWORD = 0x0080;
35 pub const ENHANCED_KEY: ::DWORD = 0x0100;
36 pub const NLS_DBCSCHAR: ::DWORD = 0x00010000;
37 pub const NLS_ALPHANUMERIC: ::DWORD = 0x00000000;
38 pub const NLS_KATAKANA: ::DWORD = 0x00020000;
39 pub const NLS_HIRAGANA: ::DWORD = 0x00040000;
40 pub const NLS_ROMAN: ::DWORD = 0x00400000;
41 pub const NLS_IME_CONVERSION: ::DWORD = 0x00800000;
42 pub const NLS_IME_DISABLE: ::DWORD = 0x20000000;
43 STRUCT!{struct MOUSE_EVENT_RECORD {
44     dwMousePosition: COORD,
45     dwButtonState: ::DWORD,
46     dwControlKeyState: ::DWORD,
47     dwEventFlags: ::DWORD,
48 }}
49 pub type PMOUSE_EVENT_RECORD = *mut MOUSE_EVENT_RECORD;
50 pub const FROM_LEFT_1ST_BUTTON_PRESSED: ::DWORD = 0x0001;
51 pub const RIGHTMOST_BUTTON_PRESSED: ::DWORD = 0x0002;
52 pub const FROM_LEFT_2ND_BUTTON_PRESSED: ::DWORD = 0x0004;
53 pub const FROM_LEFT_3RD_BUTTON_PRESSED: ::DWORD = 0x0008;
54 pub const FROM_LEFT_4TH_BUTTON_PRESSED: ::DWORD = 0x0010;
55 pub const MOUSE_MOVED: ::DWORD = 0x0001;
56 pub const DOUBLE_CLICK: ::DWORD = 0x0002;
57 pub const MOUSE_WHEELED: ::DWORD = 0x0004;
58 pub const MOUSE_HWHEELED: ::DWORD = 0x0008;
59 STRUCT!{struct WINDOW_BUFFER_SIZE_RECORD {
60     dwSize: COORD,
61 }}
62 pub type PWINDOW_BUFFER_SIZE_RECORD = *mut WINDOW_BUFFER_SIZE_RECORD;
63 STRUCT!{struct MENU_EVENT_RECORD {
64     dwCommandId: ::UINT,
65 }}
66 pub type PMENU_EVENT_RECORD = *mut MENU_EVENT_RECORD;
67 STRUCT!{struct FOCUS_EVENT_RECORD {
68     bSetFocus: ::BOOL,
69 }}
70 pub type PFOCUS_EVENT_RECORD = *mut FOCUS_EVENT_RECORD;
71 STRUCT!{struct INPUT_RECORD {
72     EventType: ::WORD,
73     Event: [u32; 4],
74 }}
75 UNION!{INPUT_RECORD, Event, KeyEvent, KeyEvent_mut, KEY_EVENT_RECORD}
76 UNION!{INPUT_RECORD, Event, MouseEvent, MouseEvent_mut, MOUSE_EVENT_RECORD}
77 UNION!{INPUT_RECORD, Event, WindowBufferSizeEvent, WindowBufferSizeEvent_mut,
78     WINDOW_BUFFER_SIZE_RECORD}
79 UNION!{INPUT_RECORD, Event, MenuEvent, MenuEvent_mut, MENU_EVENT_RECORD}
80 UNION!{INPUT_RECORD, Event, FocusEvent, FocusEvent_mut, FOCUS_EVENT_RECORD}
81 pub type PINPUT_RECORD = *mut INPUT_RECORD;
82 pub const KEY_EVENT: ::WORD = 0x0001;
83 pub const MOUSE_EVENT: ::WORD = 0x0002;
84 pub const WINDOW_BUFFER_SIZE_EVENT: ::WORD = 0x0004;
85 pub const MENU_EVENT: ::WORD = 0x0008;
86 pub const FOCUS_EVENT: ::WORD = 0x0010;
87 STRUCT!{struct CHAR_INFO {
88     UnicodeChar: ::WCHAR,
89     Attributes: ::WORD,
90 }}
91 UNION!{CHAR_INFO, UnicodeChar, AsciiChar, AsciiChar_mut, ::CHAR}
92 pub type PCHAR_INFO = *mut CHAR_INFO;
93 pub const FOREGROUND_BLUE: ::DWORD = 0x0001;
94 pub const FOREGROUND_GREEN: ::DWORD = 0x0002;
95 pub const FOREGROUND_RED: ::DWORD = 0x0004;
96 pub const FOREGROUND_INTENSITY: ::DWORD = 0x0008;
97 pub const BACKGROUND_BLUE: ::DWORD = 0x0010;
98 pub const BACKGROUND_GREEN: ::DWORD = 0x0020;
99 pub const BACKGROUND_RED: ::DWORD = 0x0040;
100 pub const BACKGROUND_INTENSITY: ::DWORD = 0x0080;
101 pub const COMMON_LVB_LEADING_BYTE: ::DWORD = 0x0100;
102 pub const COMMON_LVB_TRAILING_BYTE: ::DWORD = 0x0200;
103 pub const COMMON_LVB_GRID_HORIZONTAL: ::DWORD = 0x0400;
104 pub const COMMON_LVB_GRID_LVERTICAL: ::DWORD = 0x0800;
105 pub const COMMON_LVB_GRID_RVERTICAL: ::DWORD = 0x1000;
106 pub const COMMON_LVB_REVERSE_VIDEO: ::DWORD = 0x4000;
107 pub const COMMON_LVB_UNDERSCORE: ::DWORD = 0x8000;
108 pub const COMMON_LVB_SBCSDBCS: ::DWORD = 0x0300;
109 STRUCT!{struct CONSOLE_SCREEN_BUFFER_INFO {
110     dwSize: COORD,
111     dwCursorPosition: COORD,
112     wAttributes: ::WORD,
113     srWindow: SMALL_RECT,
114     dwMaximumWindowSize: COORD,
115 }}
116 pub type PCONSOLE_SCREEN_BUFFER_INFO = *mut CONSOLE_SCREEN_BUFFER_INFO;
117 STRUCT!{struct CONSOLE_SCREEN_BUFFER_INFOEX {
118     cbSize: ::ULONG,
119     dwSize: COORD,
120     dwCursorPosition: COORD,
121     wAttributes: ::WORD,
122     srWindow: SMALL_RECT,
123     dwMaximumWindowSize: COORD,
124     wPopupAttributes: ::WORD,
125     bFullscreenSupported: ::BOOL,
126     ColorTable: [::COLORREF; 16],
127 }}
128 pub type PCONSOLE_SCREEN_BUFFER_INFOEX = *mut CONSOLE_SCREEN_BUFFER_INFOEX;
129 STRUCT!{struct CONSOLE_CURSOR_INFO {
130     dwSize: ::DWORD,
131     bVisible: ::BOOL,
132 }}
133 pub type PCONSOLE_CURSOR_INFO = *mut CONSOLE_CURSOR_INFO;
134 STRUCT!{struct CONSOLE_FONT_INFO {
135     nFont: ::DWORD,
136     dwFontSize: ::COORD,
137 }}
138 pub type PCONSOLE_FONT_INFO = *mut CONSOLE_FONT_INFO;
139 STRUCT!{struct CONSOLE_FONT_INFOEX {
140     cbSize: ::ULONG,
141     nFont: ::DWORD,
142     dwFontSize: COORD,
143     FontFamily: ::UINT,
144     FontWeight: ::UINT,
145     FaceName: [::WCHAR; ::LF_FACESIZE],
146 }}
147 pub type PCONSOLE_FONT_INFOEX = *mut CONSOLE_FONT_INFOEX;
148 pub const HISTORY_NO_DUP_FLAG: ::DWORD = 0x1;
149 STRUCT!{struct CONSOLE_HISTORY_INFO {
150     cbSize: ::UINT,
151     HistoryBufferSize: ::UINT,
152     NumberOfHistoryBuffers: ::UINT,
153     dwFlags: ::DWORD,
154 }}
155 pub type PCONSOLE_HISTORY_INFO = *mut CONSOLE_HISTORY_INFO;
156 STRUCT!{struct CONSOLE_SELECTION_INFO {
157     dwFlags: ::DWORD,
158     dwSelectionAnchor: COORD,
159     srSelection: SMALL_RECT,
160 }}
161 pub type PCONSOLE_SELECTION_INFO = *mut CONSOLE_SELECTION_INFO;
162 pub const CONSOLE_NO_SELECTION: ::DWORD = 0x0000;
163 pub const CONSOLE_SELECTION_IN_PROGRESS: ::DWORD = 0x0001;
164 pub const CONSOLE_SELECTION_NOT_EMPTY: ::DWORD = 0x0002;
165 pub const CONSOLE_MOUSE_SELECTION: ::DWORD = 0x0004;
166 pub const CONSOLE_MOUSE_DOWN: ::DWORD = 0x0008;
167 pub type PHANDLER_ROUTINE = Option<unsafe extern "system" fn(CtrlType: ::DWORD) -> ::BOOL>;
168 pub const CTRL_C_EVENT: ::DWORD = 0;
169 pub const CTRL_BREAK_EVENT: ::DWORD = 1;
170 pub const CTRL_CLOSE_EVENT: ::DWORD = 2;
171 pub const CTRL_LOGOFF_EVENT: ::DWORD = 5;
172 pub const CTRL_SHUTDOWN_EVENT: ::DWORD = 6;
173 pub const ENABLE_PROCESSED_INPUT: ::DWORD = 0x0001;
174 pub const ENABLE_LINE_INPUT: ::DWORD = 0x0002;
175 pub const ENABLE_ECHO_INPUT: ::DWORD = 0x0004;
176 pub const ENABLE_WINDOW_INPUT: ::DWORD = 0x0008;
177 pub const ENABLE_MOUSE_INPUT: ::DWORD = 0x0010;
178 pub const ENABLE_INSERT_MODE: ::DWORD = 0x0020;
179 pub const ENABLE_QUICK_EDIT_MODE: ::DWORD = 0x0040;
180 pub const ENABLE_EXTENDED_FLAGS: ::DWORD = 0x0080;
181 pub const ENABLE_AUTO_POSITION: ::DWORD = 0x0100;
182 pub const ENABLE_PROCESSED_OUTPUT: ::DWORD = 0x0001;
183 pub const ENABLE_WRAP_AT_EOL_OUTPUT: ::DWORD = 0x0002;
184 pub const CONSOLE_REAL_OUTPUT_HANDLE: *mut ::c_void = -2isize as *mut ::c_void;
185 pub const CONSOLE_REAL_INPUT_HANDLE: *mut ::c_void = -3isize as *mut ::c_void;
186 pub const ATTACH_PARENT_PROCESS: ::DWORD = 0xFFFFFFFF;
187 STRUCT!{struct CONSOLE_READCONSOLE_CONTROL {
188     nLength: ::ULONG,
189     nInitialChars: ::ULONG,
190     dwCtrlWakeupMask: ::ULONG,
191     dwControlKeyState: ::ULONG,
192 }}
193 pub type PCONSOLE_READCONSOLE_CONTROL = *mut CONSOLE_READCONSOLE_CONTROL;
194 pub const CONSOLE_TEXTMODE_BUFFER: ::DWORD = 1;
195 pub const CONSOLE_FULLSCREEN: ::DWORD = 1;
196 pub const CONSOLE_FULLSCREEN_HARDWARE: ::DWORD = 2;
197 pub const CONSOLE_FULLSCREEN_MODE: ::DWORD = 1;
198 pub const CONSOLE_WINDOWED_MODE: ::DWORD = 2;
199