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