1 // Licensed under the Apache License, Version 2.0 2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license 3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. 4 // All files in the project carrying such notice may not be copied, modified, or distributed 5 // except according to those terms. 6 //! This module contains the public data structures, data types, and procedures exported by the NT 7 //! console subsystem. 8 use ctypes::c_void; 9 use shared::minwindef::{BOOL, DWORD, UINT, WORD}; 10 use um::winnt::{CHAR, SHORT, WCHAR}; 11 STRUCT!{struct COORD { 12 X: SHORT, 13 Y: SHORT, 14 }} 15 pub type PCOORD = *mut COORD; 16 STRUCT!{struct SMALL_RECT { 17 Left: SHORT, 18 Top: SHORT, 19 Right: SHORT, 20 Bottom: SHORT, 21 }} 22 pub type PSMALL_RECT = *mut SMALL_RECT; 23 UNION!{union KEY_EVENT_RECORD_uChar { 24 [u16; 1], 25 UnicodeChar UnicodeChar_mut: WCHAR, 26 AsciiChar AsciiChar_mut: CHAR, 27 }} 28 STRUCT!{struct KEY_EVENT_RECORD { 29 bKeyDown: BOOL, 30 wRepeatCount: WORD, 31 wVirtualKeyCode: WORD, 32 wVirtualScanCode: WORD, 33 uChar: KEY_EVENT_RECORD_uChar, 34 dwControlKeyState: DWORD, 35 }} 36 pub type PKEY_EVENT_RECORD = *mut KEY_EVENT_RECORD; 37 pub const RIGHT_ALT_PRESSED: DWORD = 0x0001; 38 pub const LEFT_ALT_PRESSED: DWORD = 0x0002; 39 pub const RIGHT_CTRL_PRESSED: DWORD = 0x0004; 40 pub const LEFT_CTRL_PRESSED: DWORD = 0x0008; 41 pub const SHIFT_PRESSED: DWORD = 0x0010; 42 pub const NUMLOCK_ON: DWORD = 0x0020; 43 pub const SCROLLLOCK_ON: DWORD = 0x0040; 44 pub const CAPSLOCK_ON: DWORD = 0x0080; 45 pub const ENHANCED_KEY: DWORD = 0x0100; 46 pub const NLS_DBCSCHAR: DWORD = 0x00010000; 47 pub const NLS_ALPHANUMERIC: DWORD = 0x00000000; 48 pub const NLS_KATAKANA: DWORD = 0x00020000; 49 pub const NLS_HIRAGANA: DWORD = 0x00040000; 50 pub const NLS_ROMAN: DWORD = 0x00400000; 51 pub const NLS_IME_CONVERSION: DWORD = 0x00800000; 52 pub const NLS_IME_DISABLE: DWORD = 0x20000000; 53 STRUCT!{struct MOUSE_EVENT_RECORD { 54 dwMousePosition: COORD, 55 dwButtonState: DWORD, 56 dwControlKeyState: DWORD, 57 dwEventFlags: DWORD, 58 }} 59 pub type PMOUSE_EVENT_RECORD = *mut MOUSE_EVENT_RECORD; 60 pub const FROM_LEFT_1ST_BUTTON_PRESSED: DWORD = 0x0001; 61 pub const RIGHTMOST_BUTTON_PRESSED: DWORD = 0x0002; 62 pub const FROM_LEFT_2ND_BUTTON_PRESSED: DWORD = 0x0004; 63 pub const FROM_LEFT_3RD_BUTTON_PRESSED: DWORD = 0x0008; 64 pub const FROM_LEFT_4TH_BUTTON_PRESSED: DWORD = 0x0010; 65 pub const MOUSE_MOVED: DWORD = 0x0001; 66 pub const DOUBLE_CLICK: DWORD = 0x0002; 67 pub const MOUSE_WHEELED: DWORD = 0x0004; 68 pub const MOUSE_HWHEELED: DWORD = 0x0008; 69 STRUCT!{struct WINDOW_BUFFER_SIZE_RECORD { 70 dwSize: COORD, 71 }} 72 pub type PWINDOW_BUFFER_SIZE_RECORD = *mut WINDOW_BUFFER_SIZE_RECORD; 73 STRUCT!{struct MENU_EVENT_RECORD { 74 dwCommandId: UINT, 75 }} 76 pub type PMENU_EVENT_RECORD = *mut MENU_EVENT_RECORD; 77 STRUCT!{struct FOCUS_EVENT_RECORD { 78 bSetFocus: BOOL, 79 }} 80 pub type PFOCUS_EVENT_RECORD = *mut FOCUS_EVENT_RECORD; 81 UNION!{union INPUT_RECORD_Event { 82 [u32; 4], 83 KeyEvent KeyEvent_mut: KEY_EVENT_RECORD, 84 MouseEvent MouseEvent_mut: MOUSE_EVENT_RECORD, 85 WindowBufferSizeEvent WindowBufferSizeEvent_mut: WINDOW_BUFFER_SIZE_RECORD, 86 MenuEvent MenuEvent_mut: MENU_EVENT_RECORD, 87 FocusEvent FocusEvent_mut: FOCUS_EVENT_RECORD, 88 }} 89 STRUCT!{struct INPUT_RECORD { 90 EventType: WORD, 91 Event: INPUT_RECORD_Event, 92 }} 93 pub type PINPUT_RECORD = *mut INPUT_RECORD; 94 pub const KEY_EVENT: WORD = 0x0001; 95 pub const MOUSE_EVENT: WORD = 0x0002; 96 pub const WINDOW_BUFFER_SIZE_EVENT: WORD = 0x0004; 97 pub const MENU_EVENT: WORD = 0x0008; 98 pub const FOCUS_EVENT: WORD = 0x0010; 99 UNION!{union CHAR_INFO_Char { 100 [u16; 1], 101 UnicodeChar UnicodeChar_mut: WCHAR, 102 AsciiChar AsciiChar_mut: CHAR, 103 }} 104 STRUCT!{struct CHAR_INFO { 105 Char: CHAR_INFO_Char, 106 Attributes: WORD, 107 }} 108 pub type PCHAR_INFO = *mut CHAR_INFO; 109 STRUCT!{struct CONSOLE_FONT_INFO { 110 nFont: DWORD, 111 dwFontSize: COORD, 112 }} 113 pub type PCONSOLE_FONT_INFO = *mut CONSOLE_FONT_INFO; 114 pub type HPCON = *mut c_void; 115