Sweden-Number/include/wine/condrv.h

251 lines
10 KiB
C

/*
* Console driver ioctls
*
* Copyright 2020 Jacek Caban for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef _INC_CONDRV
#define _INC_CONDRV
#include "winioctl.h"
#include "wincon.h"
/* common console input and output ioctls */
#define IOCTL_CONDRV_GET_MODE CTL_CODE(FILE_DEVICE_CONSOLE, 0, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CONDRV_SET_MODE CTL_CODE(FILE_DEVICE_CONSOLE, 1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
/* console input ioctls */
#define IOCTL_CONDRV_READ_CONSOLE CTL_CODE(FILE_DEVICE_CONSOLE, 10, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CONDRV_READ_INPUT CTL_CODE(FILE_DEVICE_CONSOLE, 11, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CONDRV_WRITE_INPUT CTL_CODE(FILE_DEVICE_CONSOLE, 12, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CONDRV_PEEK CTL_CODE(FILE_DEVICE_CONSOLE, 13, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CONDRV_GET_INPUT_INFO CTL_CODE(FILE_DEVICE_CONSOLE, 14, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CONDRV_SET_INPUT_INFO CTL_CODE(FILE_DEVICE_CONSOLE, 15, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CONDRV_GET_TITLE CTL_CODE(FILE_DEVICE_CONSOLE, 16, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CONDRV_SET_TITLE CTL_CODE(FILE_DEVICE_CONSOLE, 17, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CONDRV_CTRL_EVENT CTL_CODE(FILE_DEVICE_CONSOLE, 18, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CONDRV_BEEP CTL_CODE(FILE_DEVICE_CONSOLE, 19, METHOD_BUFFERED, FILE_ANY_ACCESS)
/* console output ioctls */
#define IOCTL_CONDRV_WRITE_CONSOLE CTL_CODE(FILE_DEVICE_CONSOLE, 30, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CONDRV_READ_OUTPUT CTL_CODE(FILE_DEVICE_CONSOLE, 31, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CONDRV_WRITE_OUTPUT CTL_CODE(FILE_DEVICE_CONSOLE, 32, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CONDRV_GET_OUTPUT_INFO CTL_CODE(FILE_DEVICE_CONSOLE, 33, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CONDRV_SET_OUTPUT_INFO CTL_CODE(FILE_DEVICE_CONSOLE, 34, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CONDRV_ACTIVATE CTL_CODE(FILE_DEVICE_CONSOLE, 35, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CONDRV_FILL_OUTPUT CTL_CODE(FILE_DEVICE_CONSOLE, 36, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CONDRV_SCROLL CTL_CODE(FILE_DEVICE_CONSOLE, 37, METHOD_BUFFERED, FILE_WRITE_ACCESS)
/* console connection ioctls */
#define IOCTL_CONDRV_BIND_PID CTL_CODE(FILE_DEVICE_CONSOLE, 51, METHOD_BUFFERED, FILE_ANY_ACCESS)
/* console server ioctls */
#define IOCTL_CONDRV_SETUP_INPUT CTL_CODE(FILE_DEVICE_CONSOLE, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
/* console renderer ioctls */
#define IOCTL_CONDRV_GET_RENDERER_EVENTS CTL_CODE(FILE_DEVICE_CONSOLE, 70, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CONDRV_ATTACH_RENDERER CTL_CODE(FILE_DEVICE_CONSOLE, 71, METHOD_BUFFERED, FILE_READ_ACCESS)
/* ioctls used for communication between driver and host */
#define IOCTL_CONDRV_INIT_OUTPUT CTL_CODE(FILE_DEVICE_CONSOLE, 90, METHOD_BUFFERED, 0)
#define IOCTL_CONDRV_CLOSE_OUTPUT CTL_CODE(FILE_DEVICE_CONSOLE, 91, METHOD_BUFFERED, 0)
/* console handle type */
typedef unsigned int condrv_handle_t;
/* convert an object handle to a server handle */
static inline condrv_handle_t condrv_handle( HANDLE handle )
{
if ((int)(INT_PTR)handle != (INT_PTR)handle) return 0xfffffff0; /* some invalid handle */
return (INT_PTR)handle;
}
/* structure for console char/attribute info */
typedef struct
{
WCHAR ch;
unsigned short attr;
} char_info_t;
/* IOCTL_CONDRV_GET_INPUT_INFO result */
struct condrv_input_info
{
unsigned int input_cp; /* console input codepage */
unsigned int output_cp; /* console output codepage */
unsigned int history_mode; /* whether we duplicate lines in history */
unsigned int history_size; /* number of lines in history */
unsigned int history_index; /* number of used lines in history */
unsigned int edition_mode; /* index to the edition mode flavors */
unsigned int input_count; /* number of available input records */
condrv_handle_t win; /* renderer window handle */
};
/* IOCTL_CONDRV_SET_INPUT_INFO params */
struct condrv_input_info_params
{
unsigned int mask; /* setting mask */
struct condrv_input_info info; /* input_info */
};
#define SET_CONSOLE_INPUT_INFO_EDITION_MODE 0x01
#define SET_CONSOLE_INPUT_INFO_INPUT_CODEPAGE 0x02
#define SET_CONSOLE_INPUT_INFO_OUTPUT_CODEPAGE 0x04
#define SET_CONSOLE_INPUT_INFO_WIN 0x08
#define SET_CONSOLE_INPUT_INFO_HISTORY_MODE 0x10
#define SET_CONSOLE_INPUT_INFO_HISTORY_SIZE 0x20
/* IOCTL_CONDRV_WRITE_OUTPUT and IOCTL_CONDRV_READ_OUTPUT params */
struct condrv_output_params
{
unsigned int x; /* destination position */
unsigned int y;
unsigned int mode; /* char info mode */
unsigned int width; /* width of output rectangle, 0 for wrapped mode */
/* followed by an array of data with type depending on mode */
};
enum char_info_mode
{
CHAR_INFO_MODE_TEXT, /* characters only */
CHAR_INFO_MODE_ATTR, /* attributes only */
CHAR_INFO_MODE_TEXTATTR, /* both characters and attributes */
CHAR_INFO_MODE_TEXTSTDATTR, /* characters but use standard attributes */
};
/* IOCTL_CONDRV_GET_OUTPUT_INFO result */
struct condrv_output_info
{
short int cursor_size; /* size of cursor (percentage filled) */
short int cursor_visible; /* cursor visibility flag */
short int cursor_x; /* position of cursor (x, y) */
short int cursor_y;
short int width; /* width of the screen buffer */
short int height; /* height of the screen buffer */
short int attr; /* default fill attributes (screen colors) */
short int popup_attr; /* pop-up color attributes */
short int win_left; /* window actually displayed by renderer */
short int win_top; /* the rect area is expressed within the */
short int win_right; /* boundaries of the screen buffer */
short int win_bottom;
short int max_width; /* maximum size (width x height) for the window */
short int max_height;
short int font_width; /* font size (width x height) */
short int font_height;
short int font_weight; /* font weight */
short int font_pitch_family; /* font pitch & family */
unsigned int color_map[16]; /* color table */
};
/* IOCTL_CONDRV_SET_OUTPUT_INFO params */
struct condrv_output_info_params
{
unsigned int mask; /* setting mask */
struct condrv_output_info info; /* output info */
};
#define SET_CONSOLE_OUTPUT_INFO_CURSOR_GEOM 0x0001
#define SET_CONSOLE_OUTPUT_INFO_CURSOR_POS 0x0002
#define SET_CONSOLE_OUTPUT_INFO_SIZE 0x0004
#define SET_CONSOLE_OUTPUT_INFO_ATTR 0x0008
#define SET_CONSOLE_OUTPUT_INFO_DISPLAY_WINDOW 0x0010
#define SET_CONSOLE_OUTPUT_INFO_MAX_SIZE 0x0020
#define SET_CONSOLE_OUTPUT_INFO_FONT 0x0040
#define SET_CONSOLE_OUTPUT_INFO_COLORTABLE 0x0080
#define SET_CONSOLE_OUTPUT_INFO_POPUP_ATTR 0x0100
/* IOCTL_CONDRV_FILL_OUTPUT params */
struct condrv_fill_output_params
{
int x; /* position where to start writing */
int y;
int mode; /* char info mode */
int count; /* number to write */
int wrap; /* wrap around at end of line? */
WCHAR ch; /* character to write */
unsigned short attr; /* attribute to write */
};
/* IOCTL_CONDRV_SCROLL params */
struct condrv_scroll_params
{
SMALL_RECT scroll; /* source rectangle */
COORD origin; /* destination coordinates */
SMALL_RECT clip; /* clipping rectangle */
char_info_t fill; /* empty character info */
};
/* IOCTL_CONDRV_GET_RENDERER_EVENTS result */
struct condrv_renderer_event
{
short event;
union
{
struct
{
short top;
short bottom;
} update;
struct
{
short width;
short height;
} resize;
struct
{
short x;
short y;
} cursor_pos;
struct
{
short visible;
short size;
} cursor_geom;
struct
{
short left;
short top;
short width;
short height;
} display;
} u;
};
enum condrv_renderer_event_type
{
CONSOLE_RENDERER_NONE_EVENT,
CONSOLE_RENDERER_TITLE_EVENT,
CONSOLE_RENDERER_SB_RESIZE_EVENT,
CONSOLE_RENDERER_UPDATE_EVENT,
CONSOLE_RENDERER_CURSOR_POS_EVENT,
CONSOLE_RENDERER_CURSOR_GEOM_EVENT,
CONSOLE_RENDERER_DISPLAY_EVENT,
CONSOLE_RENDERER_EXIT_EVENT,
};
/* IOCTL_CONDRV_CTRL_EVENT params */
struct condrv_ctrl_event
{
int event; /* the event to send */
unsigned int group_id; /* the group to send the event to */
};
/* Wine specific values for console inheritance (params->ConsoleHandle) */
#define CONSOLE_HANDLE_ALLOC ((HANDLE)1)
#define CONSOLE_HANDLE_SHELL ((HANDLE)2)
#endif /* _INC_CONDRV */