4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync rdesktop: A Remote Desktop Protocol client.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP order processing
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (C) Matthew Chapman 1999-2008
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program is free software: you can redistribute it and/or modify
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync it under the terms of the GNU General Public License as published by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the Free Software Foundation, either version 3 of the License, or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (at your option) any later version.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program is distributed in the hope that it will be useful,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync but WITHOUT ANY WARRANTY; without even the implied warranty of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GNU General Public License for more details.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync You should have received a copy of the GNU General Public License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync along with this program. If not, see <http://www.gnu.org/licenses/>.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync*/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Oracle GPL Disclaimer: For the avoidance of doubt, except that if any license choice
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * the General Public License version 2 (GPLv2) at this time for any software where
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * a choice of GPL license versions is made available with the language indicating
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * that GPLv2 or any later version may be used, or where a choice of which version
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * of the GPL is applied is otherwise unspecified.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define RDP_ORDER_STANDARD 0x01
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define RDP_ORDER_SECONDARY 0x02
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define RDP_ORDER_BOUNDS 0x04
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define RDP_ORDER_CHANGE 0x08
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define RDP_ORDER_DELTA 0x10
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define RDP_ORDER_LASTBOUNDS 0x20
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define RDP_ORDER_SMALL 0x40
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define RDP_ORDER_TINY 0x80
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncenum RDP_ORDER_TYPE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_DESTBLT = 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_PATBLT = 1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_SCREENBLT = 2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_LINE = 9,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_RECT = 10,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_DESKSAVE = 11,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_MEMBLT = 13,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_TRIBLT = 14,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_POLYGON = 20,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_POLYGON2 = 21,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_POLYLINE = 22,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_ELLIPSE = 25,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_ELLIPSE2 = 26,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_TEXT2 = 27
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncenum RDP_SECONDARY_ORDER_TYPE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_RAW_BMPCACHE = 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_COLCACHE = 1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_BMPCACHE = 2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_FONTCACHE = 3,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_RAW_BMPCACHE2 = 4,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_BMPCACHE2 = 5,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RDP_ORDER_BRUSHCACHE = 7
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _DESTBLT_ORDER
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 x;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 y;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 cx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 cy;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 opcode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDESTBLT_ORDER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _PATBLT_ORDER
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 x;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 y;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 cx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 cy;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 opcode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint32 bgcolour;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint32 fgcolour;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BRUSH brush;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPATBLT_ORDER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _SCREENBLT_ORDER
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 x;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 y;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 cx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 cy;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 opcode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 srcx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 srcy;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSCREENBLT_ORDER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _LINE_ORDER
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint16 mixmode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 startx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 starty;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 endx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 endy;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint32 bgcolour;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 opcode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PEN pen;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncLINE_ORDER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _RECT_ORDER
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 x;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 y;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 cx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 cy;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint32 colour;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncRECT_ORDER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _DESKSAVE_ORDER
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint32 offset;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 left;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 top;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 right;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 bottom;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 action;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDESKSAVE_ORDER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _TRIBLT_ORDER
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 colour_table;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 cache_id;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 x;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 y;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 cx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 cy;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 opcode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 srcx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 srcy;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint32 bgcolour;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint32 fgcolour;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BRUSH brush;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint16 cache_idx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint16 unknown;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTRIBLT_ORDER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _MEMBLT_ORDER
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 colour_table;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 cache_id;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 x;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 y;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 cx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 cy;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 opcode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 srcx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 srcy;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint16 cache_idx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMEMBLT_ORDER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MAX_DATA 256
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _POLYGON_ORDER
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 x;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 y;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 opcode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 fillmode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint32 fgcolour;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 npoints;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 datasize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 data[MAX_DATA];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPOLYGON_ORDER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _POLYGON2_ORDER
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 x;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sint16 y;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 opcode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint8 fillmode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync uint32 bgcolour;
uint32 fgcolour;
BRUSH brush;
uint8 npoints;
uint8 datasize;
uint8 data[MAX_DATA];
}
POLYGON2_ORDER;
typedef struct _POLYLINE_ORDER
{
sint16 x;
sint16 y;
uint8 opcode;
uint32 fgcolour;
uint8 lines;
uint8 datasize;
uint8 data[MAX_DATA];
}
POLYLINE_ORDER;
typedef struct _ELLIPSE_ORDER
{
sint16 left;
sint16 top;
sint16 right;
sint16 bottom;
uint8 opcode;
uint8 fillmode;
uint32 fgcolour;
}
ELLIPSE_ORDER;
typedef struct _ELLIPSE2_ORDER
{
sint16 left;
sint16 top;
sint16 right;
sint16 bottom;
uint8 opcode;
uint8 fillmode;
BRUSH brush;
uint32 bgcolour;
uint32 fgcolour;
}
ELLIPSE2_ORDER;
#define MAX_TEXT 256
typedef struct _TEXT2_ORDER
{
uint8 font;
uint8 flags;
uint8 opcode;
uint8 mixmode;
uint32 bgcolour;
uint32 fgcolour;
sint16 clipleft;
sint16 cliptop;
sint16 clipright;
sint16 clipbottom;
sint16 boxleft;
sint16 boxtop;
sint16 boxright;
sint16 boxbottom;
BRUSH brush;
sint16 x;
sint16 y;
uint8 length;
uint8 text[MAX_TEXT];
}
TEXT2_ORDER;
typedef struct _RDP_ORDER_STATE
{
uint8 order_type;
BOUNDS bounds;
DESTBLT_ORDER destblt;
PATBLT_ORDER patblt;
SCREENBLT_ORDER screenblt;
LINE_ORDER line;
RECT_ORDER rect;
DESKSAVE_ORDER desksave;
MEMBLT_ORDER memblt;
TRIBLT_ORDER triblt;
POLYGON_ORDER polygon;
POLYGON2_ORDER polygon2;
POLYLINE_ORDER polyline;
ELLIPSE_ORDER ellipse;
ELLIPSE2_ORDER ellipse2;
TEXT2_ORDER text2;
}
RDP_ORDER_STATE;
typedef struct _RDP_RAW_BMPCACHE_ORDER
{
uint8 cache_id;
uint8 pad1;
uint8 width;
uint8 height;
uint8 bpp;
uint16 bufsize;
uint16 cache_idx;
uint8 *data;
}
RDP_RAW_BMPCACHE_ORDER;
typedef struct _RDP_BMPCACHE_ORDER
{
uint8 cache_id;
uint8 pad1;
uint8 width;
uint8 height;
uint8 bpp;
uint16 bufsize;
uint16 cache_idx;
uint16 pad2;
uint16 size;
uint16 row_size;
uint16 final_size;
uint8 *data;
}
RDP_BMPCACHE_ORDER;
/* RDP_BMPCACHE2_ORDER */
#define ID_MASK 0x0007
#define MODE_MASK 0x0038
#define SQUARE 0x0080
#define PERSIST 0x0100
#define FLAG_51_UNKNOWN 0x0800
#define MODE_SHIFT 3
#define LONG_FORMAT 0x80
#define BUFSIZE_MASK 0x3FFF /* or 0x1FFF? */
#define MAX_GLYPH 32
typedef struct _RDP_FONT_GLYPH
{
uint16 character;
uint16 unknown;
uint16 baseline;
uint16 width;
uint16 height;
uint8 data[MAX_GLYPH];
}
RDP_FONT_GLYPH;
#define MAX_GLYPHS 256
typedef struct _RDP_FONTCACHE_ORDER
{
uint8 font;
uint8 nglyphs;
RDP_FONT_GLYPH glyphs[MAX_GLYPHS];
}
RDP_FONTCACHE_ORDER;
typedef struct _RDP_COLCACHE_ORDER
{
uint8 cache_id;
COLOURMAP map;
}
RDP_COLCACHE_ORDER;