blob: 0a4de9ef7bd8b4ec47a3f6ef91f476235ff83547 [file]
/**
* Windows API header module
*
* Translated from MinGW Windows headers
*
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
* Source: $(DRUNTIMESRC core/sys/windows/_wincon.d)
*/
module core.sys.windows.wincon;
version (Windows):
version (ANSI) {} else version = Unicode;
pragma(lib, "kernel32");
import core.sys.windows.w32api, core.sys.windows.windef;
// FIXME: clean up Windows version support
enum {
FOREGROUND_BLUE = 0x0001,
FOREGROUND_GREEN = 0x0002,
FOREGROUND_RED = 0x0004,
FOREGROUND_INTENSITY = 0x0008,
BACKGROUND_BLUE = 0x0010,
BACKGROUND_GREEN = 0x0020,
BACKGROUND_RED = 0x0040,
BACKGROUND_INTENSITY = 0x0080,
COMMON_LVB_LEADING_BYTE = 0x0100,
COMMON_LVB_TRAILING_BYTE = 0x0200,
COMMON_LVB_GRID_HORIZONTAL = 0x0400,
COMMON_LVB_GRID_LVERTICAL = 0x0800,
COMMON_LVB_GRID_RVERTICAL = 0x1000,
COMMON_LVB_REVERSE_VIDEO = 0x4000,
COMMON_LVB_UNDERSCORE = 0x8000,
COMMON_LVB_SBCSDBCS = 0x0300,
}
static if (_WIN32_WINNT >= 0x501) {
enum {
CONSOLE_FULLSCREEN_MODE = 1,
CONSOLE_WINDOWED_MODE = 0
}
}
enum {
CTRL_C_EVENT = 0,
CTRL_BREAK_EVENT = 1,
CTRL_CLOSE_EVENT = 2,
CTRL_LOGOFF_EVENT = 5,
CTRL_SHUTDOWN_EVENT = 6
}
enum {
ENABLE_PROCESSED_INPUT = 1,
ENABLE_LINE_INPUT = 2,
ENABLE_ECHO_INPUT = 4,
ENABLE_WINDOW_INPUT = 8,
ENABLE_MOUSE_INPUT = 16,
ENABLE_INSERT_MODE = 32,
ENABLE_QUICK_EDIT_MODE = 64,
ENABLE_EXTENDED_FLAGS = 128,
ENABLE_AUTO_POSITION = 256,
ENABLE_VIRTUAL_TERMINAL_INPUT = 512
}
enum {
ENABLE_PROCESSED_OUTPUT = 1,
ENABLE_WRAP_AT_EOL_OUTPUT = 2,
ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4,
DISABLE_NEWLINE_AUTO_RETURN = 8,
ENABLE_LVB_GRID_WORLDWIDE = 16
}
enum {
KEY_EVENT = 1,
MOUSE_EVENT = 2,
WINDOW_BUFFER_SIZE_EVENT = 4,
MENU_EVENT = 8,
FOCUS_EVENT = 16
}
enum {
RIGHT_ALT_PRESSED = 1,
LEFT_ALT_PRESSED = 2,
RIGHT_CTRL_PRESSED = 4,
LEFT_CTRL_PRESSED = 8,
SHIFT_PRESSED = 16,
NUMLOCK_ON = 32,
SCROLLLOCK_ON = 64,
CAPSLOCK_ON = 128,
ENHANCED_KEY = 256
}
enum {
FROM_LEFT_1ST_BUTTON_PRESSED = 1,
RIGHTMOST_BUTTON_PRESSED = 2,
FROM_LEFT_2ND_BUTTON_PRESSED = 4,
FROM_LEFT_3RD_BUTTON_PRESSED = 8,
FROM_LEFT_4TH_BUTTON_PRESSED = 16
}
enum {
MOUSE_MOVED = 1,
DOUBLE_CLICK = 2,
MOUSE_WHEELED = 4
}
struct CHAR_INFO {
union _Char {
WCHAR UnicodeChar = 0;
CHAR AsciiChar;
}
union {
_Char Char;
WCHAR UnicodeChar;
CHAR AsciiChar;
}
WORD Attributes;
}
alias PCHAR_INFO = CHAR_INFO*;
struct SMALL_RECT {
SHORT Left;
SHORT Top;
SHORT Right;
SHORT Bottom;
}
alias PSMALL_RECT = SMALL_RECT*;
struct CONSOLE_CURSOR_INFO {
DWORD dwSize;
BOOL bVisible;
}
alias PCONSOLE_CURSOR_INFO = CONSOLE_CURSOR_INFO*;
struct COORD {
SHORT X;
SHORT Y;
}
alias PCOORD = COORD*;
struct CONSOLE_FONT_INFO {
DWORD nFont;
COORD dwFontSize;
}
alias PCONSOLE_FONT_INFO = CONSOLE_FONT_INFO*;
struct CONSOLE_SCREEN_BUFFER_INFO {
COORD dwSize;
COORD dwCursorPosition;
WORD wAttributes;
SMALL_RECT srWindow;
COORD dwMaximumWindowSize;
}
alias PCONSOLE_SCREEN_BUFFER_INFO = CONSOLE_SCREEN_BUFFER_INFO*;
alias PHANDLER_ROUTINE = extern(Windows) BOOL function(DWORD) nothrow;
struct KEY_EVENT_RECORD {
BOOL bKeyDown;
WORD wRepeatCount;
WORD wVirtualKeyCode;
WORD wVirtualScanCode;
union _uChar {
WCHAR UnicodeChar = 0;
CHAR AsciiChar;
}
union {
WCHAR UnicodeChar = 0;
CHAR AsciiChar;
_uChar uChar;
}
DWORD dwControlKeyState;
}
alias PKEY_EVENT_RECORD = KEY_EVENT_RECORD*;
struct MOUSE_EVENT_RECORD {
COORD dwMousePosition;
DWORD dwButtonState;
DWORD dwControlKeyState;
DWORD dwEventFlags;
}
alias PMOUSE_EVENT_RECORD = MOUSE_EVENT_RECORD*;
struct WINDOW_BUFFER_SIZE_RECORD {
COORD dwSize;
}
alias PWINDOW_BUFFER_SIZE_RECORD = WINDOW_BUFFER_SIZE_RECORD*;
struct MENU_EVENT_RECORD {
UINT dwCommandId;
}
alias PMENU_EVENT_RECORD = MENU_EVENT_RECORD*;
struct FOCUS_EVENT_RECORD {
BOOL bSetFocus;
}
alias PFOCUS_EVENT_RECORD = FOCUS_EVENT_RECORD*;
struct INPUT_RECORD {
WORD EventType;
union _Event {
KEY_EVENT_RECORD KeyEvent;
MOUSE_EVENT_RECORD MouseEvent;
WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
MENU_EVENT_RECORD MenuEvent;
FOCUS_EVENT_RECORD FocusEvent;
}
union {
KEY_EVENT_RECORD KeyEvent;
MOUSE_EVENT_RECORD MouseEvent;
WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
MENU_EVENT_RECORD MenuEvent;
FOCUS_EVENT_RECORD FocusEvent;
_Event Event;
}
}
alias PINPUT_RECORD = INPUT_RECORD*;
extern (Windows) nothrow @nogc:
BOOL AllocConsole();
HANDLE CreateConsoleScreenBuffer(DWORD, DWORD, const(SECURITY_ATTRIBUTES)*, DWORD, LPVOID);
BOOL FillConsoleOutputAttribute(HANDLE, WORD, DWORD, COORD, PDWORD);
BOOL FillConsoleOutputCharacterA(HANDLE, CHAR, DWORD, COORD, PDWORD);
BOOL FillConsoleOutputCharacterW(HANDLE, WCHAR, DWORD, COORD, PDWORD);
BOOL FlushConsoleInputBuffer(HANDLE);
BOOL FreeConsole();
BOOL GenerateConsoleCtrlEvent(DWORD, DWORD);
UINT GetConsoleCP();
BOOL GetConsoleCursorInfo(HANDLE, PCONSOLE_CURSOR_INFO);
BOOL GetConsoleMode(HANDLE,PDWORD);
UINT GetConsoleOutputCP();
BOOL GetConsoleScreenBufferInfo(HANDLE, PCONSOLE_SCREEN_BUFFER_INFO);
DWORD GetConsoleTitleA(LPSTR, DWORD);
DWORD GetConsoleTitleW(LPWSTR, DWORD);
COORD GetLargestConsoleWindowSize(HANDLE);
BOOL GetNumberOfConsoleInputEvents(HANDLE, PDWORD);
BOOL GetNumberOfConsoleMouseButtons(PDWORD);
BOOL PeekConsoleInputA(HANDLE, PINPUT_RECORD, DWORD, PDWORD);
BOOL PeekConsoleInputW(HANDLE, PINPUT_RECORD, DWORD, PDWORD);
BOOL ReadConsoleA(HANDLE, PVOID, DWORD, PDWORD, PVOID);
BOOL ReadConsoleW(HANDLE, PVOID, DWORD, PDWORD, PVOID);
BOOL ReadConsoleInputA(HANDLE, PINPUT_RECORD, DWORD, PDWORD);
BOOL ReadConsoleInputW(HANDLE, PINPUT_RECORD, DWORD, PDWORD);
BOOL ReadConsoleOutputAttribute(HANDLE, LPWORD, DWORD, COORD, LPDWORD);
BOOL ReadConsoleOutputCharacterA(HANDLE, LPSTR, DWORD, COORD, PDWORD);
BOOL ReadConsoleOutputCharacterW(HANDLE, LPWSTR, DWORD, COORD, PDWORD);
BOOL ReadConsoleOutputA(HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT);
BOOL ReadConsoleOutputW(HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT);
BOOL ScrollConsoleScreenBufferA(HANDLE, const(SMALL_RECT)*, const(SMALL_RECT)*, COORD, const(CHAR_INFO)*);
BOOL ScrollConsoleScreenBufferW(HANDLE, const(SMALL_RECT)*, const(SMALL_RECT)*, COORD, const(CHAR_INFO)*);
BOOL SetConsoleActiveScreenBuffer(HANDLE);
BOOL SetConsoleCP(UINT);
BOOL SetConsoleCtrlHandler(PHANDLER_ROUTINE, BOOL);
BOOL SetConsoleCursorInfo(HANDLE, const(CONSOLE_CURSOR_INFO)*);
BOOL SetConsoleCursorPosition(HANDLE, COORD);
static if (_WIN32_WINNT >= 0x500) {
BOOL GetConsoleDisplayMode(LPDWORD);
HWND GetConsoleWindow();
}
static if (_WIN32_WINNT >= 0x501) {
BOOL AttachConsole(DWORD);
BOOL SetConsoleDisplayMode(HANDLE, DWORD, PCOORD);
enum DWORD ATTACH_PARENT_PROCESS = cast(DWORD)-1;
}
BOOL SetConsoleMode(HANDLE, DWORD);
BOOL SetConsoleOutputCP(UINT);
BOOL SetConsoleScreenBufferSize(HANDLE, COORD);
BOOL SetConsoleTextAttribute(HANDLE, WORD);
BOOL SetConsoleTitleA(LPCSTR);
BOOL SetConsoleTitleW(LPCWSTR);
BOOL SetConsoleWindowInfo(HANDLE, BOOL, const(SMALL_RECT)*);
BOOL WriteConsoleA(HANDLE, PCVOID, DWORD, PDWORD, PVOID);
BOOL WriteConsoleW(HANDLE, PCVOID, DWORD, PDWORD, PVOID);
BOOL WriteConsoleInputA(HANDLE, const(INPUT_RECORD)*, DWORD, PDWORD);
BOOL WriteConsoleInputW(HANDLE, const(INPUT_RECORD)*, DWORD, PDWORD);
BOOL WriteConsoleOutputA(HANDLE, const(CHAR_INFO)*, COORD, COORD, PSMALL_RECT);
BOOL WriteConsoleOutputW(HANDLE, const(CHAR_INFO)*, COORD, COORD, PSMALL_RECT);
BOOL WriteConsoleOutputAttribute(HANDLE, const(WORD)*, DWORD, COORD, PDWORD);
BOOL WriteConsoleOutputCharacterA(HANDLE, LPCSTR, DWORD, COORD, PDWORD);
BOOL WriteConsoleOutputCharacterW(HANDLE, LPCWSTR, DWORD, COORD, PDWORD);
version (Unicode) {
alias FillConsoleOutputCharacter = FillConsoleOutputCharacterW;
alias GetConsoleTitle = GetConsoleTitleW;
alias PeekConsoleInput = PeekConsoleInputW;
alias ReadConsole = ReadConsoleW;
alias ReadConsoleInput = ReadConsoleInputW;
alias ReadConsoleOutput = ReadConsoleOutputW;
alias ReadConsoleOutputCharacter = ReadConsoleOutputCharacterW;
alias ScrollConsoleScreenBuffer = ScrollConsoleScreenBufferW;
alias SetConsoleTitle = SetConsoleTitleW;
alias WriteConsole = WriteConsoleW;
alias WriteConsoleInput = WriteConsoleInputW;
alias WriteConsoleOutput = WriteConsoleOutputW;
alias WriteConsoleOutputCharacter = WriteConsoleOutputCharacterW;
} else {
alias FillConsoleOutputCharacter = FillConsoleOutputCharacterA;
alias GetConsoleTitle = GetConsoleTitleA;
alias PeekConsoleInput = PeekConsoleInputA;
alias ReadConsole = ReadConsoleA;
alias ReadConsoleInput = ReadConsoleInputA;
alias ReadConsoleOutput = ReadConsoleOutputA;
alias ReadConsoleOutputCharacter = ReadConsoleOutputCharacterA;
alias ScrollConsoleScreenBuffer = ScrollConsoleScreenBufferA;
alias SetConsoleTitle = SetConsoleTitleA;
alias WriteConsole = WriteConsoleA;
alias WriteConsoleInput = WriteConsoleInputA;
alias WriteConsoleOutput = WriteConsoleOutputA;
alias WriteConsoleOutputCharacter = WriteConsoleOutputCharacterA;
}