|
|
|
@ -432,6 +432,287 @@ lib_mod_event(struct mod *mod, int msg, tbus param1, tbus param2,
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_fill_rect(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int x;
|
|
|
|
|
int y;
|
|
|
|
|
int cx;
|
|
|
|
|
int cy;
|
|
|
|
|
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
|
in_sint16_le(s, y);
|
|
|
|
|
in_uint16_le(s, cx);
|
|
|
|
|
in_uint16_le(s, cy);
|
|
|
|
|
rv = mod->server_fill_rect(mod, x, y, cx, cy);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_screen_blt(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int x;
|
|
|
|
|
int y;
|
|
|
|
|
int cx;
|
|
|
|
|
int cy;
|
|
|
|
|
int srcx;
|
|
|
|
|
int srcy;
|
|
|
|
|
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
|
in_sint16_le(s, y);
|
|
|
|
|
in_uint16_le(s, cx);
|
|
|
|
|
in_uint16_le(s, cy);
|
|
|
|
|
in_sint16_le(s, srcx);
|
|
|
|
|
in_sint16_le(s, srcy);
|
|
|
|
|
rv = mod->server_screen_blt(mod, x, y, cx, cy, srcx, srcy);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_paint_rect(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int x;
|
|
|
|
|
int y;
|
|
|
|
|
int cx;
|
|
|
|
|
int cy;
|
|
|
|
|
int len_bmpdata;
|
|
|
|
|
char *bmpdata;
|
|
|
|
|
int width;
|
|
|
|
|
int height;
|
|
|
|
|
int srcx;
|
|
|
|
|
int srcy;
|
|
|
|
|
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
|
in_sint16_le(s, y);
|
|
|
|
|
in_uint16_le(s, cx);
|
|
|
|
|
in_uint16_le(s, cy);
|
|
|
|
|
in_uint32_le(s, len_bmpdata);
|
|
|
|
|
in_uint8p(s, bmpdata, len_bmpdata);
|
|
|
|
|
in_uint16_le(s, width);
|
|
|
|
|
in_uint16_le(s, height);
|
|
|
|
|
in_sint16_le(s, srcx);
|
|
|
|
|
in_sint16_le(s, srcy);
|
|
|
|
|
rv = mod->server_paint_rect(mod, x, y, cx, cy,
|
|
|
|
|
bmpdata, width, height,
|
|
|
|
|
srcx, srcy);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_set_clip(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int x;
|
|
|
|
|
int y;
|
|
|
|
|
int cx;
|
|
|
|
|
int cy;
|
|
|
|
|
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
|
in_sint16_le(s, y);
|
|
|
|
|
in_uint16_le(s, cx);
|
|
|
|
|
in_uint16_le(s, cy);
|
|
|
|
|
rv = mod->server_set_clip(mod, x, y, cx, cy);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_reset_clip(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
|
|
|
|
|
rv = mod->server_reset_clip(mod);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_set_fgcolor(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int fgcolor;
|
|
|
|
|
|
|
|
|
|
in_uint32_le(s, fgcolor);
|
|
|
|
|
rv = mod->server_set_fgcolor(mod, fgcolor);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_set_bgcolor(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int bgcolor;
|
|
|
|
|
|
|
|
|
|
in_uint32_le(s, bgcolor);
|
|
|
|
|
rv = mod->server_set_bgcolor(mod, bgcolor);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_set_opcode(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int opcode;
|
|
|
|
|
|
|
|
|
|
in_uint16_le(s, opcode);
|
|
|
|
|
rv = mod->server_set_opcode(mod, opcode);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_set_pen(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int style;
|
|
|
|
|
int width;
|
|
|
|
|
|
|
|
|
|
in_uint16_le(s, style);
|
|
|
|
|
in_uint16_le(s, width);
|
|
|
|
|
rv = mod->server_set_pen(mod, style, width);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_draw_line(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int x1;
|
|
|
|
|
int y1;
|
|
|
|
|
int x2;
|
|
|
|
|
int y2;
|
|
|
|
|
|
|
|
|
|
in_sint16_le(s, x1);
|
|
|
|
|
in_sint16_le(s, y1);
|
|
|
|
|
in_sint16_le(s, x2);
|
|
|
|
|
in_sint16_le(s, y2);
|
|
|
|
|
rv = mod->server_draw_line(mod, x1, y1, x2, y2);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_set_cursor(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int x;
|
|
|
|
|
int y;
|
|
|
|
|
char cur_data[32 * (32 * 3)];
|
|
|
|
|
char cur_mask[32 * (32 / 8)];
|
|
|
|
|
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
|
in_sint16_le(s, y);
|
|
|
|
|
in_uint8a(s, cur_data, 32 * (32 * 3));
|
|
|
|
|
in_uint8a(s, cur_mask, 32 * (32 / 8));
|
|
|
|
|
rv = mod->server_set_cursor(mod, x, y, cur_data, cur_mask);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_create_os_surface(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int rdpid;
|
|
|
|
|
int width;
|
|
|
|
|
int height;
|
|
|
|
|
|
|
|
|
|
in_uint32_le(s, rdpid);
|
|
|
|
|
in_uint16_le(s, width);
|
|
|
|
|
in_uint16_le(s, height);
|
|
|
|
|
rv = mod->server_create_os_surface(mod, rdpid, width, height);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_switch_os_surface(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int rdpid;
|
|
|
|
|
|
|
|
|
|
in_uint32_le(s, rdpid);
|
|
|
|
|
rv = mod->server_switch_os_surface(mod, rdpid);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_delete_os_surface(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int rdpid;
|
|
|
|
|
|
|
|
|
|
in_uint32_le(s, rdpid);
|
|
|
|
|
rv = mod->server_delete_os_surface(mod, rdpid);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_paint_rect_os(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int x;
|
|
|
|
|
int y;
|
|
|
|
|
int cx;
|
|
|
|
|
int cy;
|
|
|
|
|
int rdpid;
|
|
|
|
|
int srcx;
|
|
|
|
|
int srcy;
|
|
|
|
|
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
|
in_sint16_le(s, y);
|
|
|
|
|
in_uint16_le(s, cx);
|
|
|
|
|
in_uint16_le(s, cy);
|
|
|
|
|
in_uint32_le(s, rdpid);
|
|
|
|
|
in_sint16_le(s, srcx);
|
|
|
|
|
in_sint16_le(s, srcy);
|
|
|
|
|
rv = mod->server_paint_rect_os(mod, x, y, cx, cy,
|
|
|
|
|
rdpid, srcx, srcy);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_set_hints(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int hints;
|
|
|
|
|
int mask;
|
|
|
|
|
|
|
|
|
|
in_uint32_le(s, hints);
|
|
|
|
|
in_uint32_le(s, mask);
|
|
|
|
|
rv = mod->server_set_hints(mod, hints, mask);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
@ -518,18 +799,13 @@ process_server_window_new_update(struct mod *mod, struct stream *s)
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_window_show(struct mod* mod, struct stream* s)
|
|
|
|
|
process_server_window_delete(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int window_id;
|
|
|
|
|
int rv;
|
|
|
|
|
int flags;
|
|
|
|
|
struct rail_window_state_order rwso;
|
|
|
|
|
|
|
|
|
|
g_memset(&rwso, 0, sizeof(rwso));
|
|
|
|
|
in_uint32_le(s, window_id);
|
|
|
|
|
in_uint32_le(s, flags);
|
|
|
|
|
in_uint32_le(s, rwso.show_state);
|
|
|
|
|
mod->server_window_new_update(mod, window_id, &rwso, flags);
|
|
|
|
|
mod->server_window_delete(mod, window_id);
|
|
|
|
|
rv = 0;
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
@ -537,13 +813,18 @@ process_server_window_show(struct mod* mod, struct stream* s)
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_window_delete(struct mod *mod, struct stream *s)
|
|
|
|
|
process_server_window_show(struct mod* mod, struct stream* s)
|
|
|
|
|
{
|
|
|
|
|
int window_id;
|
|
|
|
|
int rv;
|
|
|
|
|
int flags;
|
|
|
|
|
struct rail_window_state_order rwso;
|
|
|
|
|
|
|
|
|
|
g_memset(&rwso, 0, sizeof(rwso));
|
|
|
|
|
in_uint32_le(s, window_id);
|
|
|
|
|
mod->server_window_delete(mod, window_id);
|
|
|
|
|
in_uint32_le(s, flags);
|
|
|
|
|
in_uint32_le(s, rwso.show_state);
|
|
|
|
|
mod->server_window_new_update(mod, window_id, &rwso, flags);
|
|
|
|
|
rv = 0;
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
@ -551,238 +832,18 @@ process_server_window_delete(struct mod *mod, struct stream *s)
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_set_pointer_ex(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int x;
|
|
|
|
|
int y;
|
|
|
|
|
int bpp;
|
|
|
|
|
int Bpp;
|
|
|
|
|
char cur_data[32 * (32 * 4)];
|
|
|
|
|
char cur_mask[32 * (32 / 8)];
|
|
|
|
|
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
|
in_sint16_le(s, y);
|
|
|
|
|
in_uint16_le(s, bpp);
|
|
|
|
|
Bpp = (bpp == 0) ? 3 : (bpp + 7) / 8;
|
|
|
|
|
in_uint8a(s, cur_data, 32 * (32 * Bpp));
|
|
|
|
|
in_uint8a(s, cur_mask, 32 * (32 / 8));
|
|
|
|
|
rv = mod->server_set_cursor_ex(mod, x, y, cur_data, cur_mask, bpp);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
send_paint_rect_ack(struct mod *mod, int flags, int x, int y, int cx, int cy,
|
|
|
|
|
int frame_id)
|
|
|
|
|
{
|
|
|
|
|
int len;
|
|
|
|
|
struct stream *s;
|
|
|
|
|
|
|
|
|
|
make_stream(s);
|
|
|
|
|
init_stream(s, 8192);
|
|
|
|
|
s_push_layer(s, iso_hdr, 4);
|
|
|
|
|
out_uint16_le(s, 105);
|
|
|
|
|
out_uint32_le(s, flags);
|
|
|
|
|
out_uint32_le(s, frame_id);
|
|
|
|
|
out_uint32_le(s, x);
|
|
|
|
|
out_uint32_le(s, y);
|
|
|
|
|
out_uint32_le(s, cx);
|
|
|
|
|
out_uint32_le(s, cy);
|
|
|
|
|
s_mark_end(s);
|
|
|
|
|
len = (int)(s->end - s->data);
|
|
|
|
|
s_pop_layer(s, iso_hdr);
|
|
|
|
|
out_uint32_le(s, len);
|
|
|
|
|
lib_send(mod, s->data, len);
|
|
|
|
|
free_stream(s);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
lib_mod_process_orders(struct mod *mod, int type, struct stream *s)
|
|
|
|
|
process_server_add_char(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int font;
|
|
|
|
|
int charactor;
|
|
|
|
|
int x;
|
|
|
|
|
int y;
|
|
|
|
|
int cx;
|
|
|
|
|
int cy;
|
|
|
|
|
int srcx;
|
|
|
|
|
int srcy;
|
|
|
|
|
int mskx;
|
|
|
|
|
int msky;
|
|
|
|
|
int dstx;
|
|
|
|
|
int dsty;
|
|
|
|
|
int len_bmpdata;
|
|
|
|
|
int style;
|
|
|
|
|
int x1;
|
|
|
|
|
int y1;
|
|
|
|
|
int x2;
|
|
|
|
|
int y2;
|
|
|
|
|
int bpp;
|
|
|
|
|
int rdpid;
|
|
|
|
|
int hints;
|
|
|
|
|
int mask;
|
|
|
|
|
int width;
|
|
|
|
|
int height;
|
|
|
|
|
int fgcolor;
|
|
|
|
|
int bgcolor;
|
|
|
|
|
int opcode;
|
|
|
|
|
int flags;
|
|
|
|
|
int shmem_id;
|
|
|
|
|
int shmem_offset;
|
|
|
|
|
int frame_id;
|
|
|
|
|
int charactor;
|
|
|
|
|
int font;
|
|
|
|
|
int mixmode;
|
|
|
|
|
int clip_left;
|
|
|
|
|
int clip_top;
|
|
|
|
|
int clip_right;
|
|
|
|
|
int clip_bottom;
|
|
|
|
|
int box_left;
|
|
|
|
|
int box_top;
|
|
|
|
|
int box_right;
|
|
|
|
|
int box_bottom;
|
|
|
|
|
int srcrepeat;
|
|
|
|
|
int srcidx;
|
|
|
|
|
int srcformat;
|
|
|
|
|
int srcwidth;
|
|
|
|
|
int mskflags;
|
|
|
|
|
int mskidx;
|
|
|
|
|
int mskformat;
|
|
|
|
|
int mskwidth;
|
|
|
|
|
int mskrepeat;
|
|
|
|
|
int dstformat;
|
|
|
|
|
int op;
|
|
|
|
|
int transform[10];
|
|
|
|
|
char *bmpdata;
|
|
|
|
|
char cur_data[32 * (32 * 3)];
|
|
|
|
|
char cur_mask[32 * (32 / 8)];
|
|
|
|
|
|
|
|
|
|
rv = 0;
|
|
|
|
|
|
|
|
|
|
switch (type)
|
|
|
|
|
{
|
|
|
|
|
case 1: /* server_begin_update */
|
|
|
|
|
rv = mod->server_begin_update(mod);
|
|
|
|
|
break;
|
|
|
|
|
case 2: /* server_end_update */
|
|
|
|
|
rv = mod->server_end_update(mod);
|
|
|
|
|
break;
|
|
|
|
|
case 3: /* server_fill_rect */
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
|
in_sint16_le(s, y);
|
|
|
|
|
in_uint16_le(s, cx);
|
|
|
|
|
in_uint16_le(s, cy);
|
|
|
|
|
rv = mod->server_fill_rect(mod, x, y, cx, cy);
|
|
|
|
|
break;
|
|
|
|
|
case 4: /* server_screen_blt */
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
|
in_sint16_le(s, y);
|
|
|
|
|
in_uint16_le(s, cx);
|
|
|
|
|
in_uint16_le(s, cy);
|
|
|
|
|
in_sint16_le(s, srcx);
|
|
|
|
|
in_sint16_le(s, srcy);
|
|
|
|
|
rv = mod->server_screen_blt(mod, x, y, cx, cy, srcx, srcy);
|
|
|
|
|
break;
|
|
|
|
|
case 5: /* server_paint_rect */
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
|
in_sint16_le(s, y);
|
|
|
|
|
in_uint16_le(s, cx);
|
|
|
|
|
in_uint16_le(s, cy);
|
|
|
|
|
in_uint32_le(s, len_bmpdata);
|
|
|
|
|
in_uint8p(s, bmpdata, len_bmpdata);
|
|
|
|
|
in_uint16_le(s, width);
|
|
|
|
|
in_uint16_le(s, height);
|
|
|
|
|
in_sint16_le(s, srcx);
|
|
|
|
|
in_sint16_le(s, srcy);
|
|
|
|
|
rv = mod->server_paint_rect(mod, x, y, cx, cy,
|
|
|
|
|
bmpdata, width, height,
|
|
|
|
|
srcx, srcy);
|
|
|
|
|
break;
|
|
|
|
|
case 10: /* server_set_clip */
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
|
in_sint16_le(s, y);
|
|
|
|
|
in_uint16_le(s, cx);
|
|
|
|
|
in_uint16_le(s, cy);
|
|
|
|
|
rv = mod->server_set_clip(mod, x, y, cx, cy);
|
|
|
|
|
break;
|
|
|
|
|
case 11: /* server_reset_clip */
|
|
|
|
|
rv = mod->server_reset_clip(mod);
|
|
|
|
|
break;
|
|
|
|
|
case 12: /* server_set_fgcolor */
|
|
|
|
|
in_uint32_le(s, fgcolor);
|
|
|
|
|
rv = mod->server_set_fgcolor(mod, fgcolor);
|
|
|
|
|
break;
|
|
|
|
|
case 13: /* server_set_bgcolor */
|
|
|
|
|
in_uint32_le(s, bgcolor);
|
|
|
|
|
rv = mod->server_set_bgcolor(mod, bgcolor);
|
|
|
|
|
break;
|
|
|
|
|
case 14:
|
|
|
|
|
in_uint16_le(s, opcode);
|
|
|
|
|
rv = mod->server_set_opcode(mod, opcode);
|
|
|
|
|
break;
|
|
|
|
|
case 17:
|
|
|
|
|
in_uint16_le(s, style);
|
|
|
|
|
in_uint16_le(s, width);
|
|
|
|
|
rv = mod->server_set_pen(mod, style, width);
|
|
|
|
|
break;
|
|
|
|
|
case 18:
|
|
|
|
|
in_sint16_le(s, x1);
|
|
|
|
|
in_sint16_le(s, y1);
|
|
|
|
|
in_sint16_le(s, x2);
|
|
|
|
|
in_sint16_le(s, y2);
|
|
|
|
|
rv = mod->server_draw_line(mod, x1, y1, x2, y2);
|
|
|
|
|
break;
|
|
|
|
|
case 19:
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
|
in_sint16_le(s, y);
|
|
|
|
|
in_uint8a(s, cur_data, 32 * (32 * 3));
|
|
|
|
|
in_uint8a(s, cur_mask, 32 * (32 / 8));
|
|
|
|
|
rv = mod->server_set_cursor(mod, x, y, cur_data, cur_mask);
|
|
|
|
|
break;
|
|
|
|
|
case 20:
|
|
|
|
|
in_uint32_le(s, rdpid);
|
|
|
|
|
in_uint16_le(s, width);
|
|
|
|
|
in_uint16_le(s, height);
|
|
|
|
|
rv = mod->server_create_os_surface(mod, rdpid, width, height);
|
|
|
|
|
break;
|
|
|
|
|
case 21:
|
|
|
|
|
in_uint32_le(s, rdpid);
|
|
|
|
|
rv = mod->server_switch_os_surface(mod, rdpid);
|
|
|
|
|
break;
|
|
|
|
|
case 22:
|
|
|
|
|
in_uint32_le(s, rdpid);
|
|
|
|
|
rv = mod->server_delete_os_surface(mod, rdpid);
|
|
|
|
|
break;
|
|
|
|
|
case 23: /* server_paint_rect_os */
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
|
in_sint16_le(s, y);
|
|
|
|
|
in_uint16_le(s, cx);
|
|
|
|
|
in_uint16_le(s, cy);
|
|
|
|
|
in_uint32_le(s, rdpid);
|
|
|
|
|
in_sint16_le(s, srcx);
|
|
|
|
|
in_sint16_le(s, srcy);
|
|
|
|
|
rv = mod->server_paint_rect_os(mod, x, y, cx, cy,
|
|
|
|
|
rdpid, srcx, srcy);
|
|
|
|
|
break;
|
|
|
|
|
case 24: /* server_set_hints */
|
|
|
|
|
in_uint32_le(s, hints);
|
|
|
|
|
in_uint32_le(s, mask);
|
|
|
|
|
rv = mod->server_set_hints(mod, hints, mask);
|
|
|
|
|
break;
|
|
|
|
|
case 25: /* server_window_new_update */
|
|
|
|
|
rv = process_server_window_new_update(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 26: /* server_window_delete */
|
|
|
|
|
rv = process_server_window_delete(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 27: /* server_window_new_update - show */
|
|
|
|
|
rv = process_server_window_show(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 28: /* server_add_char */
|
|
|
|
|
in_uint16_le(s, font);
|
|
|
|
|
in_uint16_le(s, charactor);
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
@ -792,8 +853,25 @@ lib_mod_process_orders(struct mod *mod, int type, struct stream *s)
|
|
|
|
|
in_uint16_le(s, len_bmpdata);
|
|
|
|
|
in_uint8p(s, bmpdata, len_bmpdata);
|
|
|
|
|
rv = mod->server_add_char(mod, font, charactor, x, y, cx, cy, bmpdata);
|
|
|
|
|
break;
|
|
|
|
|
case 29: /* server_add_char_alpha */
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_add_char_alpha(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int font;
|
|
|
|
|
int charactor;
|
|
|
|
|
int x;
|
|
|
|
|
int y;
|
|
|
|
|
int cx;
|
|
|
|
|
int cy;
|
|
|
|
|
int len_bmpdata;
|
|
|
|
|
char *bmpdata;
|
|
|
|
|
|
|
|
|
|
in_uint16_le(s, font);
|
|
|
|
|
in_uint16_le(s, charactor);
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
@ -802,9 +880,33 @@ lib_mod_process_orders(struct mod *mod, int type, struct stream *s)
|
|
|
|
|
in_uint16_le(s, cy);
|
|
|
|
|
in_uint16_le(s, len_bmpdata);
|
|
|
|
|
in_uint8p(s, bmpdata, len_bmpdata);
|
|
|
|
|
rv = mod->server_add_char_alpha(mod, font, charactor, x, y, cx, cy, bmpdata);
|
|
|
|
|
break;
|
|
|
|
|
case 30: /* server_draw_text */
|
|
|
|
|
rv = mod->server_add_char_alpha(mod, font, charactor, x, y, cx, cy,
|
|
|
|
|
bmpdata);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_draw_text(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int font;
|
|
|
|
|
int flags;
|
|
|
|
|
int mixmode;
|
|
|
|
|
int clip_left;
|
|
|
|
|
int clip_top;
|
|
|
|
|
int clip_right;
|
|
|
|
|
int clip_bottom;
|
|
|
|
|
int box_left;
|
|
|
|
|
int box_top;
|
|
|
|
|
int box_right;
|
|
|
|
|
int box_bottom;
|
|
|
|
|
int x;
|
|
|
|
|
int y;
|
|
|
|
|
int len_bmpdata;
|
|
|
|
|
char *bmpdata;
|
|
|
|
|
|
|
|
|
|
in_uint16_le(s, font);
|
|
|
|
|
in_uint16_le(s, flags);
|
|
|
|
|
in_uint16_le(s, mixmode);
|
|
|
|
@ -823,15 +925,47 @@ lib_mod_process_orders(struct mod *mod, int type, struct stream *s)
|
|
|
|
|
rv = mod->server_draw_text(mod, font, flags, mixmode, clip_left, clip_top,
|
|
|
|
|
clip_right, clip_bottom, box_left, box_top,
|
|
|
|
|
box_right, box_bottom, x, y, bmpdata, len_bmpdata);
|
|
|
|
|
break;
|
|
|
|
|
case 31: /* server_create_os_surface_bpp */
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_create_os_surface_bpp(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int rdpid;
|
|
|
|
|
int width;
|
|
|
|
|
int height;
|
|
|
|
|
int bpp;
|
|
|
|
|
|
|
|
|
|
in_uint32_le(s, rdpid);
|
|
|
|
|
in_uint16_le(s, width);
|
|
|
|
|
in_uint16_le(s, height);
|
|
|
|
|
in_uint8(s, bpp);
|
|
|
|
|
rv = mod->server_create_os_surface_bpp(mod, rdpid, width, height, bpp);
|
|
|
|
|
break;
|
|
|
|
|
case 32: /* server_paint_rect_bpp */
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_paint_rect_bpp(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int x;
|
|
|
|
|
int y;
|
|
|
|
|
int cx;
|
|
|
|
|
int cy;
|
|
|
|
|
int len_bmpdata;
|
|
|
|
|
char *bmpdata;
|
|
|
|
|
int width;
|
|
|
|
|
int height;
|
|
|
|
|
int srcx;
|
|
|
|
|
int srcy;
|
|
|
|
|
int bpp;
|
|
|
|
|
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
|
in_sint16_le(s, y);
|
|
|
|
|
in_uint16_le(s, cx);
|
|
|
|
@ -846,8 +980,36 @@ lib_mod_process_orders(struct mod *mod, int type, struct stream *s)
|
|
|
|
|
rv = mod->server_paint_rect_bpp(mod, x, y, cx, cy,
|
|
|
|
|
bmpdata, width, height,
|
|
|
|
|
srcx, srcy, bpp);
|
|
|
|
|
break;
|
|
|
|
|
case 33:
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_composite(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int srcidx;
|
|
|
|
|
int srcformat;
|
|
|
|
|
int srcwidth;
|
|
|
|
|
int srcrepeat;
|
|
|
|
|
int transform[10];
|
|
|
|
|
int mskflags;
|
|
|
|
|
int mskidx;
|
|
|
|
|
int mskformat;
|
|
|
|
|
int mskwidth;
|
|
|
|
|
int mskrepeat;
|
|
|
|
|
int op;
|
|
|
|
|
int srcx;
|
|
|
|
|
int srcy;
|
|
|
|
|
int mskx;
|
|
|
|
|
int msky;
|
|
|
|
|
int dstx;
|
|
|
|
|
int dsty;
|
|
|
|
|
int width;
|
|
|
|
|
int height;
|
|
|
|
|
int dstformat;
|
|
|
|
|
|
|
|
|
|
in_uint16_le(s, srcidx);
|
|
|
|
|
in_uint32_le(s, srcformat);
|
|
|
|
|
in_uint16_le(s, srcwidth);
|
|
|
|
@ -873,11 +1035,80 @@ lib_mod_process_orders(struct mod *mod, int type, struct stream *s)
|
|
|
|
|
transform, mskflags, mskidx, mskformat,
|
|
|
|
|
mskwidth, mskrepeat, op, srcx, srcy, mskx, msky,
|
|
|
|
|
dstx, dsty, width, height, dstformat);
|
|
|
|
|
break;
|
|
|
|
|
case 51: /* server_set_pointer_ex */
|
|
|
|
|
rv = process_server_set_pointer_ex(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 60: /* server_paint_rect_shmem */
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_set_pointer_ex(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int x;
|
|
|
|
|
int y;
|
|
|
|
|
int bpp;
|
|
|
|
|
int Bpp;
|
|
|
|
|
char cur_data[32 * (32 * 4)];
|
|
|
|
|
char cur_mask[32 * (32 / 8)];
|
|
|
|
|
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
|
in_sint16_le(s, y);
|
|
|
|
|
in_uint16_le(s, bpp);
|
|
|
|
|
Bpp = (bpp == 0) ? 3 : (bpp + 7) / 8;
|
|
|
|
|
in_uint8a(s, cur_data, 32 * (32 * Bpp));
|
|
|
|
|
in_uint8a(s, cur_mask, 32 * (32 / 8));
|
|
|
|
|
rv = mod->server_set_cursor_ex(mod, x, y, cur_data, cur_mask, bpp);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
send_paint_rect_ack(struct mod *mod, int flags, int x, int y, int cx, int cy,
|
|
|
|
|
int frame_id)
|
|
|
|
|
{
|
|
|
|
|
int len;
|
|
|
|
|
struct stream *s;
|
|
|
|
|
|
|
|
|
|
make_stream(s);
|
|
|
|
|
init_stream(s, 8192);
|
|
|
|
|
s_push_layer(s, iso_hdr, 4);
|
|
|
|
|
out_uint16_le(s, 105);
|
|
|
|
|
out_uint32_le(s, flags);
|
|
|
|
|
out_uint32_le(s, frame_id);
|
|
|
|
|
out_uint32_le(s, x);
|
|
|
|
|
out_uint32_le(s, y);
|
|
|
|
|
out_uint32_le(s, cx);
|
|
|
|
|
out_uint32_le(s, cy);
|
|
|
|
|
s_mark_end(s);
|
|
|
|
|
len = (int)(s->end - s->data);
|
|
|
|
|
s_pop_layer(s, iso_hdr);
|
|
|
|
|
out_uint32_le(s, len);
|
|
|
|
|
lib_send(mod, s->data, len);
|
|
|
|
|
free_stream(s);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
process_server_paint_rect_shmem(struct mod *mod, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
int x;
|
|
|
|
|
int y;
|
|
|
|
|
int cx;
|
|
|
|
|
int cy;
|
|
|
|
|
int flags;
|
|
|
|
|
int frame_id;
|
|
|
|
|
int shmem_id;
|
|
|
|
|
int shmem_offset;
|
|
|
|
|
int width;
|
|
|
|
|
int height;
|
|
|
|
|
int srcx;
|
|
|
|
|
int srcy;
|
|
|
|
|
char *bmpdata;
|
|
|
|
|
|
|
|
|
|
in_sint16_le(s, x);
|
|
|
|
|
in_sint16_le(s, y);
|
|
|
|
|
in_uint16_le(s, cx);
|
|
|
|
@ -914,14 +1145,112 @@ lib_mod_process_orders(struct mod *mod, int type, struct stream *s)
|
|
|
|
|
rv = 1;
|
|
|
|
|
}
|
|
|
|
|
send_paint_rect_ack(mod, flags, x, y, cx, cy, frame_id);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
/* return error */
|
|
|
|
|
static int APP_CC
|
|
|
|
|
lib_mod_process_orders(struct mod *mod, int type, struct stream *s)
|
|
|
|
|
{
|
|
|
|
|
int rv;
|
|
|
|
|
|
|
|
|
|
rv = 0;
|
|
|
|
|
switch (type)
|
|
|
|
|
{
|
|
|
|
|
case 1: /* server_begin_update */
|
|
|
|
|
rv = mod->server_begin_update(mod);
|
|
|
|
|
break;
|
|
|
|
|
case 2: /* server_end_update */
|
|
|
|
|
rv = mod->server_end_update(mod);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 3: /* server_fill_rect */
|
|
|
|
|
rv = process_server_fill_rect(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 4: /* server_screen_blt */
|
|
|
|
|
rv = process_server_screen_blt(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 5: /* server_paint_rect */
|
|
|
|
|
rv = process_server_paint_rect(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 10: /* server_set_clip */
|
|
|
|
|
rv = process_server_set_clip(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 11: /* server_reset_clip */
|
|
|
|
|
rv = process_server_reset_clip(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 12: /* server_set_fgcolor */
|
|
|
|
|
rv = process_server_set_fgcolor(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 13: /* server_set_bgcolor */
|
|
|
|
|
rv = process_server_set_bgcolor(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 14: /* server_set_opcode */
|
|
|
|
|
rv = process_server_set_opcode(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 17: /* server_set_pen */
|
|
|
|
|
rv = process_server_set_pen(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 18: /* server_draw_line */
|
|
|
|
|
rv = process_server_draw_line(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 19: /* server_set_cursor */
|
|
|
|
|
rv = process_server_set_cursor(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 20: /* server_create_os_surface */
|
|
|
|
|
rv = process_server_create_os_surface(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 21: /* server_switch_os_surface */
|
|
|
|
|
rv = process_server_switch_os_surface(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 22: /* server_delete_os_surface */
|
|
|
|
|
rv = process_server_delete_os_surface(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 23: /* server_paint_rect_os */
|
|
|
|
|
rv = process_server_paint_rect_os(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 24: /* server_set_hints */
|
|
|
|
|
rv = process_server_set_hints(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 25: /* server_window_new_update */
|
|
|
|
|
rv = process_server_window_new_update(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 26: /* server_window_delete */
|
|
|
|
|
rv = process_server_window_delete(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 27: /* server_window_new_update - show */
|
|
|
|
|
rv = process_server_window_show(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 28: /* server_add_char */
|
|
|
|
|
rv = process_server_add_char(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 29: /* server_add_char_alpha */
|
|
|
|
|
rv = process_server_add_char_alpha(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 30: /* server_draw_text */
|
|
|
|
|
rv = process_server_draw_text(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 31: /* server_create_os_surface_bpp */
|
|
|
|
|
rv = process_server_create_os_surface_bpp(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 32: /* server_paint_rect_bpp */
|
|
|
|
|
rv = process_server_paint_rect_bpp(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 33: /* server_composite */
|
|
|
|
|
rv = process_server_composite(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 51: /* server_set_pointer_ex */
|
|
|
|
|
rv = process_server_set_pointer_ex(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
case 60: /* server_paint_rect_shmem */
|
|
|
|
|
rv = process_server_paint_rect_shmem(mod, s);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
g_writeln("lib_mod_process_orders: unknown order type %d", type);
|
|
|
|
|
rv = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|