Windows2003-3790/termsrv/drivers/rdp/rdpdd/oe2data.c
2020-09-30 16:53:55 +02:00

718 lines
41 KiB
C

/****************************************************************************/
// oe2data.c
//
// RDP field encoding global data.
//
// Copyright (C) 1997-2000 Microsoft Corporation
/****************************************************************************/
#include <ndcgdata.h>
#include <aordprot.h>
// Encoding state.
DC_DATA(unsigned, oe2LastOrderType, TS_ENC_PATBLT_ORDER);
DC_DATA(RECTL, oe2LastBounds, { 0 });
/****************************************************************************/
// Field encoding translation tables
//
// Entries can be of fixed size of variable size. Variable size entries
// must be the last in each order structure.
/****************************************************************************/
// Fields can either be signed (INT16 etc), or unsigned (UINT16 etc).
#define SIGNED_FIELD TRUE
#define UNSIGNED_FIELD FALSE
// INT_FMT_FIELD entry flag types.
#define OE2_ETF_FIXED 0x01
#define OE2_ETF_VARIABLE 0x02
#define OE2_ETF_COORDINATES 0x04
#define OE2_ETF_DATA 0x08
#define OE2_ETF_LONG_VARIABLE 0x10
/****************************************************************************/
/* Field is a fixed size */
/* type - The unencoded order structure type */
/* size - The size of the encoded version of the field */
/* signed - Is the field a signed field ? */
/* field - The name of the field in the order structure */
/****************************************************************************/
#define ETABLE_FIXED_ENTRY(type,size,signed,field) \
{ (unsigned)FIELDOFFSET(type,field), \
(unsigned)FIELDSIZE(type,field), \
size, \
signed, \
(unsigned)(OE2_ETF_FIXED) }
/****************************************************************************/
/* Field is coordinate of a fixed size */
/* type - The unencoded order structure type */
/* size - The size of the encoded version of the field */
/* signed - Is the field a signed field ? */
/* field - The name of the field in the order structure */
/****************************************************************************/
#define ETABLE_FIXED_COORDS_ENTRY(type,size,signed,field) \
{ (unsigned)FIELDOFFSET(type,field), \
(unsigned)FIELDSIZE(type,field), \
size, \
signed, \
(unsigned)(OE2_ETF_FIXED|OE2_ETF_COORDINATES) }
/****************************************************************************/
/* Field is a fixed number of bytes (array?) */
/* type - The unencoded order structure type */
/* size - The number of bytes in the encoded version of the field */
/* signed - Is the field a signed field ? */
/* field - The name of the field in the order structure */
/****************************************************************************/
#define ETABLE_DATA_ENTRY(type,size,signed,field) \
{ (unsigned)FIELDOFFSET(type,field), \
(unsigned)FIELDSIZE(type,field), \
size, \
signed, \
(unsigned)(OE2_ETF_FIXED|OE2_ETF_DATA) }
/****************************************************************************/
/* Field is a variable structure with its length encoded in ONE byte and */
/* containing coords of the form */
/* typedef struct */
/* { */
/* UINT32 len; */
/* varType varEntry[len]; */
/* } varStruct */
/* */
/* type - The unencoded order structure type */
/* size - The size of the encoded version of the field */
/* signed - Is the field a signed field ? */
/* field - The name of the field in the order structure (varStruct) */
/* elem - The name of the variable element array (varEntry) */
/****************************************************************************/
#define ETABLE_VARIABLE_ENTRY(type,size,signed,field,elem) \
{ (unsigned)FIELDOFFSET(type,field.len), \
(unsigned)FIELDSIZE(type,field.elem[0]), \
size, \
signed, \
(unsigned)(OE2_ETF_VARIABLE)}
/****************************************************************************/
/* Field is a variable structure with its length encoded in TWO bytes and */
/* containing coords of the form */
/* typedef struct */
/* { */
/* UINT32 len; */
/* varType varEntry[len]; */
/* } varStruct */
/* */
/* type - The unencoded order structure type */
/* size - The size of the encoded version of the field */
/* signed - Is the field a signed field ? */
/* field - The name of the field in the order structure (varStruct) */
/* elem - The name of the variable element array (varEntry) */
/****************************************************************************/
#define ETABLE_LONG_VARIABLE_ENTRY(type,size,signed,field,elem) \
{ (unsigned)FIELDOFFSET(type,field.len), \
(unsigned)FIELDSIZE(type,field.elem[0]), \
size, \
signed, \
(unsigned)(OE2_ETF_LONG_VARIABLE)}
#ifdef USE_VARIABLE_COORDS
/****************************************************************************/
/* Field is a variable structure with its length encoded in ONE byte and */
/* containing coords of the form */
/* typedef struct */
/* { */
/* UINT32 len; */
/* varCoord varEntry[len]; */
/* } varStruct */
/* */
/* type - The unencoded order structure type */
/* size - The size of the encoded version of the field */
/* signed - Is the field a signed field ? */
/* field - The name of the field in the order structure (varStruct) */
/* elem - The name of the variable element array (varEntry) */
/****************************************************************************/
#define ETABLE_VARIABLE_COORDS_ENTRY(type,size,signed,field,elem) \
{ (unsigned)FIELDOFFSET(type,field.len), \
(unsigned)FIELDSIZE(type,field.elem[0]), \
size, \
signed, \
(unsigned)(OE2_ETF_VARIABLE|OE2_ETF_COORDINATES)}
/****************************************************************************/
/* Field is a variable structure with its length encoded in two bytes and */
/* containing coords of the form */
/* typedef struct */
/* { */
/* UINT32 len; */
/* varCoord varEntry[len]; */
/* } varStruct */
/* */
/* type - The unencoded order structure type */
/* size - The size of the encoded version of the field */
/* signed - Is the field a signed field ? */
/* field - The name of the field in the order structure (varStruct) */
/* elem - The name of the variable element array (varEntry) */
/****************************************************************************/
#define ETABLE_LONG_VARIABLE_COORDS_ENTRY(type,size,signed,field,elem) \
{ (unsigned)FIELDOFFSET(type,field.len), \
(unsigned)FIELDSIZE(type,field.elem[0]), \
size, \
signed, \
(unsigned)(OE2_ETF_LONG_VARIABLE | OE2_ETF_COORDINATES)}
#endif // USE_VARIABLE_COORDS
// Direct-encoded.
#if 0
/****************************************************************************/
// DSTBLT_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_DB, NUM_DSTBLT_FIELDS,
DC_STRUCT5(
ETABLE_FIXED_COORDS_ENTRY(DSTBLT_ORDER, 2, SIGNED_FIELD, nLeftRect),
ETABLE_FIXED_COORDS_ENTRY(DSTBLT_ORDER, 2, SIGNED_FIELD, nTopRect),
ETABLE_FIXED_COORDS_ENTRY(DSTBLT_ORDER, 2, SIGNED_FIELD, nWidth),
ETABLE_FIXED_COORDS_ENTRY(DSTBLT_ORDER, 2, SIGNED_FIELD, nHeight),
ETABLE_FIXED_ENTRY(DSTBLT_ORDER, 1, UNSIGNED_FIELD, bRop),
));
#endif
// Direct-encoded.
#if 0
/****************************************************************************/
// PATBLT_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_PB, NUM_PATBLT_FIELDS,
DC_STRUCT12(
ETABLE_FIXED_COORDS_ENTRY(PATBLT_ORDER, 2, SIGNED_FIELD, nLeftRect),
ETABLE_FIXED_COORDS_ENTRY(PATBLT_ORDER, 2, SIGNED_FIELD, nTopRect),
ETABLE_FIXED_COORDS_ENTRY(PATBLT_ORDER, 2, SIGNED_FIELD, nWidth),
ETABLE_FIXED_COORDS_ENTRY(PATBLT_ORDER, 2, SIGNED_FIELD, nHeight),
ETABLE_FIXED_ENTRY(PATBLT_ORDER, 1, UNSIGNED_FIELD, bRop),
ETABLE_DATA_ENTRY(PATBLT_ORDER, 3, UNSIGNED_FIELD, BackColor),
ETABLE_DATA_ENTRY(PATBLT_ORDER, 3, UNSIGNED_FIELD, ForeColor),
ETABLE_FIXED_ENTRY(PATBLT_ORDER, 1, SIGNED_FIELD, BrushOrgX),
ETABLE_FIXED_ENTRY(PATBLT_ORDER, 1, SIGNED_FIELD, BrushOrgY),
ETABLE_FIXED_ENTRY(PATBLT_ORDER, 1, UNSIGNED_FIELD, BrushStyle),
ETABLE_FIXED_ENTRY(PATBLT_ORDER, 1, UNSIGNED_FIELD, BrushHatch),
ETABLE_DATA_ENTRY(PATBLT_ORDER, 7, UNSIGNED_FIELD, BrushExtra),
));
#endif
/****************************************************************************/
// SCRBLT_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_SB, NUM_SCRBLT_FIELDS,
DC_STRUCT7(
ETABLE_FIXED_COORDS_ENTRY(SCRBLT_ORDER, 2, SIGNED_FIELD, nLeftRect),
ETABLE_FIXED_COORDS_ENTRY(SCRBLT_ORDER, 2, SIGNED_FIELD, nTopRect),
ETABLE_FIXED_COORDS_ENTRY(SCRBLT_ORDER, 2, SIGNED_FIELD, nWidth),
ETABLE_FIXED_COORDS_ENTRY(SCRBLT_ORDER, 2, SIGNED_FIELD, nHeight),
ETABLE_FIXED_ENTRY(SCRBLT_ORDER, 1, UNSIGNED_FIELD, bRop),
ETABLE_FIXED_COORDS_ENTRY(SCRBLT_ORDER, 2, SIGNED_FIELD, nXSrc),
ETABLE_FIXED_COORDS_ENTRY(SCRBLT_ORDER, 2, SIGNED_FIELD, nYSrc)
));
// Direct-encoded.
#if 0
/****************************************************************************/
// LINETO_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_LT, NUM_LINETO_FIELDS,
DC_STRUCT10(
ETABLE_FIXED_ENTRY(LINETO_ORDER, 2, SIGNED_FIELD, BackMode),
ETABLE_FIXED_COORDS_ENTRY(LINETO_ORDER, 2, SIGNED_FIELD, nXStart),
ETABLE_FIXED_COORDS_ENTRY(LINETO_ORDER, 2, SIGNED_FIELD, nYStart),
ETABLE_FIXED_COORDS_ENTRY(LINETO_ORDER, 2, SIGNED_FIELD, nXEnd),
ETABLE_FIXED_COORDS_ENTRY(LINETO_ORDER, 2, SIGNED_FIELD, nYEnd),
ETABLE_DATA_ENTRY(LINETO_ORDER, 3, UNSIGNED_FIELD, BackColor),
ETABLE_FIXED_ENTRY(LINETO_ORDER, 1, UNSIGNED_FIELD, ROP2),
ETABLE_FIXED_ENTRY(LINETO_ORDER, 1, UNSIGNED_FIELD, PenStyle),
ETABLE_FIXED_ENTRY(LINETO_ORDER, 1, UNSIGNED_FIELD, PenWidth),
ETABLE_DATA_ENTRY(LINETO_ORDER, 3, UNSIGNED_FIELD, PenColor)
));
#endif
// Direct-encoded.
#if 0
/****************************************************************************/
// MULTI_DSTBLT_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_MD, NUM_MULTI_DSTBLT_FIELDS,
DC_STRUCT7(
ETABLE_FIXED_COORDS_ENTRY(MULTI_DSTBLT_ORDER, 2, SIGNED_FIELD, nLeftRect),
ETABLE_FIXED_COORDS_ENTRY(MULTI_DSTBLT_ORDER, 2, SIGNED_FIELD, nTopRect),
ETABLE_FIXED_COORDS_ENTRY(MULTI_DSTBLT_ORDER, 2, SIGNED_FIELD, nWidth),
ETABLE_FIXED_COORDS_ENTRY(MULTI_DSTBLT_ORDER, 2, SIGNED_FIELD, nHeight),
ETABLE_FIXED_ENTRY (MULTI_DSTBLT_ORDER, 1, UNSIGNED_FIELD, bRop),
ETABLE_FIXED_ENTRY (MULTI_DSTBLT_ORDER, 1, UNSIGNED_FIELD, nDeltaEntries),
ETABLE_LONG_VARIABLE_ENTRY (MULTI_DSTBLT_ORDER, 1, UNSIGNED_FIELD, codedDeltaList, Deltas)
));
#endif
// Direct-encoded.
#if 0
/****************************************************************************/
// MULTI_PATBLT_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_MP, NUM_MULTI_PATBLT_FIELDS,
DC_STRUCT14(
ETABLE_FIXED_COORDS_ENTRY(MULTI_PATBLT_ORDER, 2, SIGNED_FIELD, nLeftRect),
ETABLE_FIXED_COORDS_ENTRY(MULTI_PATBLT_ORDER, 2, SIGNED_FIELD, nTopRect),
ETABLE_FIXED_COORDS_ENTRY(MULTI_PATBLT_ORDER, 2, SIGNED_FIELD, nWidth),
ETABLE_FIXED_COORDS_ENTRY(MULTI_PATBLT_ORDER, 2, SIGNED_FIELD, nHeight),
ETABLE_FIXED_ENTRY (MULTI_PATBLT_ORDER, 1, UNSIGNED_FIELD, bRop),
ETABLE_DATA_ENTRY (MULTI_PATBLT_ORDER, 3, UNSIGNED_FIELD, BackColor),
ETABLE_DATA_ENTRY (MULTI_PATBLT_ORDER, 3, UNSIGNED_FIELD, ForeColor),
ETABLE_FIXED_ENTRY (MULTI_PATBLT_ORDER, 1, SIGNED_FIELD, BrushOrgX),
ETABLE_FIXED_ENTRY (MULTI_PATBLT_ORDER, 1, SIGNED_FIELD, BrushOrgY),
ETABLE_FIXED_ENTRY (MULTI_PATBLT_ORDER, 1, UNSIGNED_FIELD, BrushStyle),
ETABLE_FIXED_ENTRY (MULTI_PATBLT_ORDER, 1, UNSIGNED_FIELD, BrushHatch),
ETABLE_DATA_ENTRY (MULTI_PATBLT_ORDER, 7, UNSIGNED_FIELD, BrushExtra),
ETABLE_FIXED_ENTRY (MULTI_PATBLT_ORDER, 1, UNSIGNED_FIELD, nDeltaEntries),
ETABLE_LONG_VARIABLE_ENTRY(MULTI_PATBLT_ORDER, 1, UNSIGNED_FIELD, codedDeltaList, Deltas)
));
#endif
/****************************************************************************/
// MULTI_SCRBLT_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_MS, NUM_MULTI_SCRBLT_FIELDS,
DC_STRUCT9(
ETABLE_FIXED_COORDS_ENTRY(MULTI_SCRBLT_ORDER, 2, SIGNED_FIELD, nLeftRect),
ETABLE_FIXED_COORDS_ENTRY(MULTI_SCRBLT_ORDER, 2, SIGNED_FIELD, nTopRect),
ETABLE_FIXED_COORDS_ENTRY(MULTI_SCRBLT_ORDER, 2, SIGNED_FIELD, nWidth),
ETABLE_FIXED_COORDS_ENTRY(MULTI_SCRBLT_ORDER, 2, SIGNED_FIELD, nHeight),
ETABLE_FIXED_ENTRY (MULTI_SCRBLT_ORDER, 1, UNSIGNED_FIELD, bRop),
ETABLE_FIXED_COORDS_ENTRY(MULTI_SCRBLT_ORDER, 2, SIGNED_FIELD, nXSrc),
ETABLE_FIXED_COORDS_ENTRY(MULTI_SCRBLT_ORDER, 2, SIGNED_FIELD, nYSrc),
ETABLE_FIXED_ENTRY (MULTI_SCRBLT_ORDER, 1, UNSIGNED_FIELD, nDeltaEntries),
ETABLE_LONG_VARIABLE_ENTRY (MULTI_SCRBLT_ORDER, 1, UNSIGNED_FIELD, codedDeltaList, Deltas)
));
// Direct-encoded.
#if 0
/****************************************************************************/
// MULTI_OPAQUERECT_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_MO, NUM_MULTI_OPAQUERECT_FIELDS,
DC_STRUCT9(
ETABLE_FIXED_COORDS_ENTRY(MULTI_OPAQUERECT_ORDER, 2, SIGNED_FIELD, nLeftRect),
ETABLE_FIXED_COORDS_ENTRY(MULTI_OPAQUERECT_ORDER, 2, SIGNED_FIELD, nTopRect),
ETABLE_FIXED_COORDS_ENTRY(MULTI_OPAQUERECT_ORDER, 2, SIGNED_FIELD, nWidth),
ETABLE_FIXED_COORDS_ENTRY(MULTI_OPAQUERECT_ORDER, 2, SIGNED_FIELD, nHeight),
ETABLE_DATA_ENTRY (MULTI_OPAQUERECT_ORDER, 1, UNSIGNED_FIELD, Color.u.rgb.red),
ETABLE_DATA_ENTRY (MULTI_OPAQUERECT_ORDER, 1, UNSIGNED_FIELD, Color.u.rgb.green),
ETABLE_DATA_ENTRY (MULTI_OPAQUERECT_ORDER, 1, UNSIGNED_FIELD, Color.u.rgb.blue),
ETABLE_FIXED_ENTRY (MULTI_OPAQUERECT_ORDER, 1, UNSIGNED_FIELD, nDeltaEntries),
ETABLE_LONG_VARIABLE_ENTRY (MULTI_OPAQUERECT_ORDER, 1, UNSIGNED_FIELD, codedDeltaList, Deltas)
));
#endif
/****************************************************************************/
// FAST_INDEX_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_FI, NUM_FAST_INDEX_FIELDS,
DC_STRUCT15(
ETABLE_DATA_ENTRY(FAST_INDEX_ORDER, 1, UNSIGNED_FIELD, cacheId),
ETABLE_DATA_ENTRY(FAST_INDEX_ORDER, 2, UNSIGNED_FIELD, fDrawing),
ETABLE_DATA_ENTRY(FAST_INDEX_ORDER, 3, UNSIGNED_FIELD, BackColor),
ETABLE_DATA_ENTRY(FAST_INDEX_ORDER, 3, UNSIGNED_FIELD, ForeColor),
ETABLE_FIXED_COORDS_ENTRY(FAST_INDEX_ORDER, 2, SIGNED_FIELD, BkLeft),
ETABLE_FIXED_COORDS_ENTRY(FAST_INDEX_ORDER, 2, SIGNED_FIELD, BkTop),
ETABLE_FIXED_COORDS_ENTRY(FAST_INDEX_ORDER, 2, SIGNED_FIELD, BkRight),
ETABLE_FIXED_COORDS_ENTRY(FAST_INDEX_ORDER, 2, SIGNED_FIELD, BkBottom),
ETABLE_FIXED_COORDS_ENTRY(FAST_INDEX_ORDER, 2, SIGNED_FIELD, OpLeft),
ETABLE_FIXED_COORDS_ENTRY(FAST_INDEX_ORDER, 2, SIGNED_FIELD, OpTop),
ETABLE_FIXED_COORDS_ENTRY(FAST_INDEX_ORDER, 2, SIGNED_FIELD, OpRight),
ETABLE_FIXED_COORDS_ENTRY(FAST_INDEX_ORDER, 2, SIGNED_FIELD, OpBottom),
ETABLE_FIXED_COORDS_ENTRY(FAST_INDEX_ORDER, 2, SIGNED_FIELD, x),
ETABLE_FIXED_COORDS_ENTRY(FAST_INDEX_ORDER, 2, SIGNED_FIELD, y),
ETABLE_VARIABLE_ENTRY(FAST_INDEX_ORDER, 1, UNSIGNED_FIELD, variableBytes, arecs)
));
/****************************************************************************/
// POLYGON_SC_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_CG, NUM_POLYGON_SC_FIELDS,
DC_STRUCT7(
ETABLE_FIXED_COORDS_ENTRY(POLYGON_SC_ORDER, 2, SIGNED_FIELD, XStart),
ETABLE_FIXED_COORDS_ENTRY(POLYGON_SC_ORDER, 2, SIGNED_FIELD, YStart),
ETABLE_FIXED_ENTRY(POLYGON_SC_ORDER, 1, UNSIGNED_FIELD, ROP2),
ETABLE_FIXED_ENTRY(POLYGON_SC_ORDER, 1, UNSIGNED_FIELD, FillMode),
ETABLE_DATA_ENTRY(POLYGON_SC_ORDER, 3, UNSIGNED_FIELD, BrushColor),
ETABLE_FIXED_ENTRY(POLYGON_SC_ORDER, 1, UNSIGNED_FIELD,
NumDeltaEntries),
ETABLE_VARIABLE_ENTRY(POLYGON_SC_ORDER, 1, UNSIGNED_FIELD,
CodedDeltaList, Deltas)
));
/****************************************************************************/
// POLYGON_CB_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_BG, NUM_POLYGON_CB_FIELDS,
DC_STRUCT13(
ETABLE_FIXED_COORDS_ENTRY(POLYGON_CB_ORDER, 2, SIGNED_FIELD, XStart),
ETABLE_FIXED_COORDS_ENTRY(POLYGON_CB_ORDER, 2, SIGNED_FIELD, YStart),
ETABLE_FIXED_ENTRY(POLYGON_CB_ORDER, 1, UNSIGNED_FIELD, ROP2),
ETABLE_FIXED_ENTRY(POLYGON_CB_ORDER, 1, UNSIGNED_FIELD, FillMode),
ETABLE_DATA_ENTRY(POLYGON_CB_ORDER, 3, UNSIGNED_FIELD, BackColor),
ETABLE_DATA_ENTRY(POLYGON_CB_ORDER, 3, UNSIGNED_FIELD, ForeColor),
ETABLE_FIXED_ENTRY(POLYGON_CB_ORDER, 1, SIGNED_FIELD, BrushOrgX),
ETABLE_FIXED_ENTRY(POLYGON_CB_ORDER, 1, SIGNED_FIELD, BrushOrgY),
ETABLE_FIXED_ENTRY(POLYGON_CB_ORDER, 1, UNSIGNED_FIELD, BrushStyle),
ETABLE_FIXED_ENTRY(POLYGON_CB_ORDER, 1, UNSIGNED_FIELD, BrushHatch),
ETABLE_DATA_ENTRY(POLYGON_CB_ORDER, 7, UNSIGNED_FIELD, BrushExtra),
ETABLE_FIXED_ENTRY(POLYGON_CB_ORDER, 1, UNSIGNED_FIELD,
NumDeltaEntries),
ETABLE_VARIABLE_ENTRY(POLYGON_CB_ORDER, 1, UNSIGNED_FIELD,
CodedDeltaList, Deltas)
));
// Direct-encoded.
#if 0
/****************************************************************************/
// POLYLINE_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_PL, NUM_POLYLINE_FIELDS,
DC_STRUCT7(
ETABLE_FIXED_COORDS_ENTRY(POLYLINE_ORDER, 2, SIGNED_FIELD, XStart),
ETABLE_FIXED_COORDS_ENTRY(POLYLINE_ORDER, 2, SIGNED_FIELD, YStart),
ETABLE_FIXED_ENTRY(POLYLINE_ORDER, 1, UNSIGNED_FIELD, ROP2),
ETABLE_FIXED_ENTRY(POLYLINE_ORDER, 2, UNSIGNED_FIELD,
BrushCacheEntry),
ETABLE_DATA_ENTRY(POLYLINE_ORDER, 3, UNSIGNED_FIELD, PenColor),
ETABLE_FIXED_ENTRY(POLYLINE_ORDER, 1, UNSIGNED_FIELD,
NumDeltaEntries),
ETABLE_VARIABLE_ENTRY(POLYLINE_ORDER, 1, UNSIGNED_FIELD,
CodedDeltaList, Deltas)
));
#endif
// Direct-encoded.
#if 0
/****************************************************************************/
// OPAQUERECT_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_OR, NUM_OPAQUERECT_FIELDS,
DC_STRUCT7(
ETABLE_FIXED_COORDS_ENTRY(OPAQUERECT_ORDER, 2, SIGNED_FIELD,
nLeftRect),
ETABLE_FIXED_COORDS_ENTRY(OPAQUERECT_ORDER, 2, SIGNED_FIELD,
nTopRect),
ETABLE_FIXED_COORDS_ENTRY(OPAQUERECT_ORDER, 2, SIGNED_FIELD, nWidth),
ETABLE_FIXED_COORDS_ENTRY(OPAQUERECT_ORDER, 2, SIGNED_FIELD, nHeight),
ETABLE_DATA_ENTRY(OPAQUERECT_ORDER, 1, UNSIGNED_FIELD,
Color.u.rgb.red),
ETABLE_DATA_ENTRY(OPAQUERECT_ORDER, 1, UNSIGNED_FIELD,
Color.u.rgb.green),
ETABLE_DATA_ENTRY(OPAQUERECT_ORDER, 1, UNSIGNED_FIELD,
Color.u.rgb.blue)
));
#endif
/****************************************************************************/
// SAVEBITMAP_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_SV, NUM_SAVEBITMAP_FIELDS,
DC_STRUCT6(
ETABLE_FIXED_ENTRY(SAVEBITMAP_ORDER, 4, UNSIGNED_FIELD,
SavedBitmapPosition),
ETABLE_FIXED_COORDS_ENTRY(SAVEBITMAP_ORDER, 2, SIGNED_FIELD,
nLeftRect),
ETABLE_FIXED_COORDS_ENTRY(SAVEBITMAP_ORDER, 2, SIGNED_FIELD,
nTopRect),
ETABLE_FIXED_COORDS_ENTRY(SAVEBITMAP_ORDER, 2, SIGNED_FIELD,
nRightRect),
ETABLE_FIXED_COORDS_ENTRY(SAVEBITMAP_ORDER, 2, SIGNED_FIELD,
nBottomRect),
ETABLE_FIXED_ENTRY(SAVEBITMAP_ORDER, 1, UNSIGNED_FIELD, Operation)
));
// Direct encoded.
#if 0
/****************************************************************************/
// MEMBLT_R2_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_MC, NUM_MEMBLT_FIELDS,
DC_STRUCT9(
ETABLE_FIXED_ENTRY(MEMBLT_R2_ORDER, 2, UNSIGNED_FIELD, Common.cacheId),
ETABLE_FIXED_COORDS_ENTRY(MEMBLT_R2_ORDER, 2, SIGNED_FIELD,
Common.nLeftRect),
ETABLE_FIXED_COORDS_ENTRY(MEMBLT_R2_ORDER, 2, SIGNED_FIELD,
Common.nTopRect),
ETABLE_FIXED_COORDS_ENTRY(MEMBLT_R2_ORDER, 2, SIGNED_FIELD,
Common.nWidth),
ETABLE_FIXED_COORDS_ENTRY(MEMBLT_R2_ORDER, 2, SIGNED_FIELD,
Common.nHeight),
ETABLE_FIXED_ENTRY(MEMBLT_R2_ORDER, 1, UNSIGNED_FIELD,
Common.bRop),
ETABLE_FIXED_COORDS_ENTRY(MEMBLT_R2_ORDER, 2, SIGNED_FIELD,
Common.nXSrc),
ETABLE_FIXED_COORDS_ENTRY(MEMBLT_R2_ORDER, 2, SIGNED_FIELD,
Common.nYSrc),
ETABLE_FIXED_ENTRY(MEMBLT_R2_ORDER, 2, UNSIGNED_FIELD,
Common.cacheIndex)
));
#endif
/****************************************************************************/
// MEM3BLT_R2_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_3C, NUM_MEM3BLT_FIELDS,
DC_STRUCT16(
ETABLE_FIXED_ENTRY(MEM3BLT_R2_ORDER, 2, UNSIGNED_FIELD,
Common.cacheId),
ETABLE_FIXED_COORDS_ENTRY(MEM3BLT_R2_ORDER, 2, SIGNED_FIELD,
Common.nLeftRect),
ETABLE_FIXED_COORDS_ENTRY(MEM3BLT_R2_ORDER, 2, SIGNED_FIELD,
Common.nTopRect),
ETABLE_FIXED_COORDS_ENTRY(MEM3BLT_R2_ORDER, 2, SIGNED_FIELD,
Common.nWidth),
ETABLE_FIXED_COORDS_ENTRY(MEM3BLT_R2_ORDER, 2, SIGNED_FIELD,
Common.nHeight),
ETABLE_FIXED_ENTRY(MEM3BLT_R2_ORDER, 1, UNSIGNED_FIELD,
Common.bRop),
ETABLE_FIXED_COORDS_ENTRY(MEM3BLT_R2_ORDER, 2, SIGNED_FIELD,
Common.nXSrc),
ETABLE_FIXED_COORDS_ENTRY(MEM3BLT_R2_ORDER, 2, SIGNED_FIELD,
Common.nYSrc),
ETABLE_FIXED_ENTRY(MEM3BLT_R2_ORDER, 3, UNSIGNED_FIELD, BackColor),
ETABLE_FIXED_ENTRY(MEM3BLT_R2_ORDER, 3, UNSIGNED_FIELD, ForeColor),
ETABLE_FIXED_ENTRY(MEM3BLT_R2_ORDER, 1, SIGNED_FIELD, BrushOrgX),
ETABLE_FIXED_ENTRY(MEM3BLT_R2_ORDER, 1, SIGNED_FIELD, BrushOrgY),
ETABLE_FIXED_ENTRY(MEM3BLT_R2_ORDER, 1, UNSIGNED_FIELD, BrushStyle),
ETABLE_FIXED_ENTRY(MEM3BLT_R2_ORDER, 1, UNSIGNED_FIELD, BrushHatch),
ETABLE_FIXED_ENTRY(MEM3BLT_R2_ORDER, 7, UNSIGNED_FIELD, BrushExtra),
ETABLE_FIXED_ENTRY(MEM3BLT_R2_ORDER, 2, UNSIGNED_FIELD,
Common.cacheIndex)
));
/****************************************************************************/
// FAST_GLYPH_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_FG, NUM_FAST_GLYPH_FIELDS,
DC_STRUCT15(
ETABLE_DATA_ENTRY(FAST_GLYPH_ORDER, 1, UNSIGNED_FIELD, cacheId),
ETABLE_DATA_ENTRY(FAST_GLYPH_ORDER, 2, UNSIGNED_FIELD, fDrawing),
ETABLE_DATA_ENTRY(FAST_GLYPH_ORDER, 3, UNSIGNED_FIELD, BackColor),
ETABLE_DATA_ENTRY(FAST_GLYPH_ORDER, 3, UNSIGNED_FIELD, ForeColor),
ETABLE_FIXED_COORDS_ENTRY(FAST_GLYPH_ORDER, 2, SIGNED_FIELD, BkLeft),
ETABLE_FIXED_COORDS_ENTRY(FAST_GLYPH_ORDER, 2, SIGNED_FIELD, BkTop),
ETABLE_FIXED_COORDS_ENTRY(FAST_GLYPH_ORDER, 2, SIGNED_FIELD, BkRight),
ETABLE_FIXED_COORDS_ENTRY(FAST_GLYPH_ORDER, 2, SIGNED_FIELD, BkBottom),
ETABLE_FIXED_COORDS_ENTRY(FAST_GLYPH_ORDER, 2, SIGNED_FIELD, OpLeft),
ETABLE_FIXED_COORDS_ENTRY(FAST_GLYPH_ORDER, 2, SIGNED_FIELD, OpTop),
ETABLE_FIXED_COORDS_ENTRY(FAST_GLYPH_ORDER, 2, SIGNED_FIELD, OpRight),
ETABLE_FIXED_COORDS_ENTRY(FAST_GLYPH_ORDER, 2, SIGNED_FIELD, OpBottom),
ETABLE_FIXED_COORDS_ENTRY(FAST_GLYPH_ORDER, 2, SIGNED_FIELD, x),
ETABLE_FIXED_COORDS_ENTRY(FAST_GLYPH_ORDER, 2, SIGNED_FIELD, y),
ETABLE_VARIABLE_ENTRY(FAST_GLYPH_ORDER, 1, UNSIGNED_FIELD,
variableBytes, glyphData)
));
/****************************************************************************/
// ELLIPSE_SC_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_EC, NUM_ELLIPSE_SC_FIELDS,
DC_STRUCT7(
ETABLE_FIXED_COORDS_ENTRY(ELLIPSE_SC_ORDER, 2, SIGNED_FIELD, LeftRect),
ETABLE_FIXED_COORDS_ENTRY(ELLIPSE_SC_ORDER, 2, SIGNED_FIELD, TopRect),
ETABLE_FIXED_COORDS_ENTRY(ELLIPSE_SC_ORDER, 2, SIGNED_FIELD, RightRect),
ETABLE_FIXED_COORDS_ENTRY(ELLIPSE_SC_ORDER, 2, SIGNED_FIELD, BottomRect),
ETABLE_FIXED_ENTRY(ELLIPSE_SC_ORDER, 1, UNSIGNED_FIELD, ROP2),
ETABLE_FIXED_ENTRY(ELLIPSE_SC_ORDER, 1, UNSIGNED_FIELD, FillMode),
ETABLE_DATA_ENTRY(ELLIPSE_SC_ORDER, 3, UNSIGNED_FIELD, Color)
));
/****************************************************************************/
// ELLIPSE_CB_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_EB, NUM_ELLIPSE_CB_FIELDS,
DC_STRUCT13(
ETABLE_FIXED_COORDS_ENTRY(ELLIPSE_CB_ORDER, 2, SIGNED_FIELD, LeftRect),
ETABLE_FIXED_COORDS_ENTRY(ELLIPSE_CB_ORDER, 2, SIGNED_FIELD, TopRect),
ETABLE_FIXED_COORDS_ENTRY(ELLIPSE_CB_ORDER, 2, SIGNED_FIELD, RightRect),
ETABLE_FIXED_COORDS_ENTRY(ELLIPSE_CB_ORDER, 2, SIGNED_FIELD, BottomRect),
ETABLE_FIXED_ENTRY(ELLIPSE_CB_ORDER, 1, UNSIGNED_FIELD, ROP2),
ETABLE_FIXED_ENTRY(ELLIPSE_CB_ORDER, 1, UNSIGNED_FIELD, FillMode),
ETABLE_DATA_ENTRY(ELLIPSE_CB_ORDER, 3, UNSIGNED_FIELD, BackColor),
ETABLE_DATA_ENTRY(ELLIPSE_CB_ORDER, 3, UNSIGNED_FIELD, ForeColor),
ETABLE_FIXED_ENTRY(ELLIPSE_CB_ORDER, 1, SIGNED_FIELD, BrushOrgX),
ETABLE_FIXED_ENTRY(ELLIPSE_CB_ORDER, 1, SIGNED_FIELD, BrushOrgY),
ETABLE_FIXED_ENTRY(ELLIPSE_CB_ORDER, 1, UNSIGNED_FIELD, BrushStyle),
ETABLE_FIXED_ENTRY(ELLIPSE_CB_ORDER, 1, UNSIGNED_FIELD, BrushHatch),
ETABLE_DATA_ENTRY(ELLIPSE_CB_ORDER, 7, UNSIGNED_FIELD, BrushExtra)
));
/****************************************************************************/
// (Glyph)INDEX_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_GI, NUM_INDEX_FIELDS,
DC_STRUCT22(
ETABLE_DATA_ENTRY(INDEX_ORDER, 1, UNSIGNED_FIELD, cacheId),
ETABLE_DATA_ENTRY(INDEX_ORDER, 1, UNSIGNED_FIELD, flAccel),
ETABLE_DATA_ENTRY(INDEX_ORDER, 1, UNSIGNED_FIELD, ulCharInc),
ETABLE_DATA_ENTRY(INDEX_ORDER, 1, UNSIGNED_FIELD, fOpRedundant),
ETABLE_DATA_ENTRY(INDEX_ORDER, 3, UNSIGNED_FIELD, BackColor),
ETABLE_DATA_ENTRY(INDEX_ORDER, 3, UNSIGNED_FIELD, ForeColor),
ETABLE_FIXED_ENTRY(INDEX_ORDER, 2, SIGNED_FIELD, BkLeft),
ETABLE_FIXED_ENTRY(INDEX_ORDER, 2, SIGNED_FIELD, BkTop),
ETABLE_FIXED_ENTRY(INDEX_ORDER, 2, SIGNED_FIELD, BkRight),
ETABLE_FIXED_ENTRY(INDEX_ORDER, 2, SIGNED_FIELD, BkBottom),
ETABLE_FIXED_ENTRY(INDEX_ORDER, 2, SIGNED_FIELD, OpLeft),
ETABLE_FIXED_ENTRY(INDEX_ORDER, 2, SIGNED_FIELD, OpTop),
ETABLE_FIXED_ENTRY(INDEX_ORDER, 2, SIGNED_FIELD, OpRight),
ETABLE_FIXED_ENTRY(INDEX_ORDER, 2, SIGNED_FIELD, OpBottom),
ETABLE_FIXED_ENTRY(INDEX_ORDER, 1, SIGNED_FIELD, BrushOrgX),
ETABLE_FIXED_ENTRY(INDEX_ORDER, 1, SIGNED_FIELD, BrushOrgY),
ETABLE_FIXED_ENTRY(INDEX_ORDER, 1, UNSIGNED_FIELD, BrushStyle),
ETABLE_FIXED_ENTRY(INDEX_ORDER, 1, UNSIGNED_FIELD, BrushHatch),
ETABLE_DATA_ENTRY (INDEX_ORDER, 7, UNSIGNED_FIELD, BrushExtra),
ETABLE_FIXED_ENTRY(INDEX_ORDER, 2, SIGNED_FIELD, x),
ETABLE_FIXED_ENTRY(INDEX_ORDER, 2, SIGNED_FIELD, y),
ETABLE_VARIABLE_ENTRY(INDEX_ORDER, 1, UNSIGNED_FIELD,
variableBytes, arecs)
));
#ifdef DRAW_NINEGRID
/****************************************************************************/
// DRAWNINEGRID_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_NG, NUM_DRAWNINEGRID_FIELDS,
DC_STRUCT5(
ETABLE_FIXED_COORDS_ENTRY(DRAWNINEGRID_ORDER, 2, SIGNED_FIELD, srcLeft),
ETABLE_FIXED_COORDS_ENTRY(DRAWNINEGRID_ORDER, 2, SIGNED_FIELD, srcTop),
ETABLE_FIXED_COORDS_ENTRY(DRAWNINEGRID_ORDER, 2, SIGNED_FIELD, srcRight),
ETABLE_FIXED_COORDS_ENTRY(DRAWNINEGRID_ORDER, 2, SIGNED_FIELD, srcBottom),
ETABLE_FIXED_ENTRY (DRAWNINEGRID_ORDER, 2, UNSIGNED_FIELD, bitmapId)
));
/****************************************************************************/
// MULTI_DRAWNINEGRID_ORDER
/****************************************************************************/
DC_CONST_DATA_ARRAY(INT_FMT_FIELD, etable_MG, NUM_MULTI_DRAWNINEGRID_FIELDS,
DC_STRUCT7(
ETABLE_FIXED_COORDS_ENTRY(MULTI_DRAWNINEGRID_ORDER, 2, SIGNED_FIELD, srcLeft),
ETABLE_FIXED_COORDS_ENTRY(MULTI_DRAWNINEGRID_ORDER, 2, SIGNED_FIELD, srcTop),
ETABLE_FIXED_COORDS_ENTRY(MULTI_DRAWNINEGRID_ORDER, 2, SIGNED_FIELD, srcRight),
ETABLE_FIXED_COORDS_ENTRY(MULTI_DRAWNINEGRID_ORDER, 2, SIGNED_FIELD, srcBottom),
ETABLE_FIXED_ENTRY (MULTI_DRAWNINEGRID_ORDER, 2, UNSIGNED_FIELD, bitmapId),
ETABLE_FIXED_ENTRY (MULTI_DRAWNINEGRID_ORDER, 1, UNSIGNED_FIELD, nDeltaEntries),
ETABLE_LONG_VARIABLE_ENTRY (MULTI_DRAWNINEGRID_ORDER, 1, UNSIGNED_FIELD, codedDeltaList, Deltas)
));
#endif
#ifdef DC_DEBUG
/****************************************************************************/
// Primary order information table. Used to make sure params passed into
// OE2 functions make sense.
/****************************************************************************/
typedef struct
{
PINT_FMT_FIELD pFieldTable;
unsigned NumFields;
unsigned MaxSize;
} OE2_PRIMARY_ORDER_ATTRIBUTES;
#ifdef DRAW_NINEGRID
DC_CONST_DATA_ARRAY(OE2_PRIMARY_ORDER_ATTRIBUTES, OE2OrdAttr, TS_MAX_ORDERS,
DC_STRUCT32(
DC_STRUCT3(NULL, NUM_DSTBLT_FIELDS, MAX_DSTBLT_FIELD_SIZE), // direct-encode order
DC_STRUCT3(NULL, NUM_PATBLT_FIELDS, MAX_PATBLT_FIELD_SIZE), // direct-encode order
DC_STRUCT3(etable_SB, NUM_SCRBLT_FIELDS, MAX_SCRBLT_FIELD_SIZE),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(etable_NG, NUM_DRAWNINEGRID_FIELDS, MAX_DRAWNINEGRID_FIELD_SIZE),
DC_STRUCT3(etable_MG, NUM_MULTI_DRAWNINEGRID_FIELDS, MAX_MULTI_DRAWNINEGRID_FIELD_SIZE),
DC_STRUCT3(NULL, NUM_LINETO_FIELDS, MAX_LINETO_FIELD_SIZE), // direct-encode order
DC_STRUCT3(NULL, NUM_OPAQUERECT_FIELDS, MAX_OPAQUERECT_FIELD_SIZE), // direct-encode order
DC_STRUCT3(etable_SV, NUM_SAVEBITMAP_FIELDS, MAX_SAVEBITMAP_FIELD_SIZE),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, NUM_MEMBLT_FIELDS, MAX_MEMBLT_FIELD_SIZE), // etable_MC not used (fast fath)
DC_STRUCT3(etable_3C, NUM_MEM3BLT_FIELDS, MAX_MEM3BLT_FIELD_SIZE),
DC_STRUCT3(NULL, NUM_MULTI_DSTBLT_FIELDS, MAX_MULTI_DSTBLT_FIELD_SIZE), // direct-encode order
DC_STRUCT3(NULL, NUM_MULTI_PATBLT_FIELDS, MAX_MULTI_PATBLT_FIELD_SIZE), // direct-encode order
DC_STRUCT3(etable_MS, NUM_MULTI_SCRBLT_FIELDS, MAX_MULTI_SCRBLT_FIELD_SIZE),
DC_STRUCT3(NULL, NUM_MULTI_OPAQUERECT_FIELDS, MAX_MULTI_OPAQUERECT_FIELD_SIZE), // direct-encode order
DC_STRUCT3(etable_FI, NUM_FAST_INDEX_FIELDS, MAX_FAST_INDEX_FIELD_SIZE),
DC_STRUCT3(etable_CG, NUM_POLYGON_SC_FIELDS, MAX_POLYGON_SC_FIELD_SIZE),
DC_STRUCT3(etable_BG, NUM_POLYGON_CB_FIELDS, MAX_POLYGON_CB_FIELD_SIZE),
DC_STRUCT3(NULL, NUM_POLYLINE_FIELDS, MAX_POLYLINE_FIELD_SIZE), // direct-encode order
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(etable_FG, NUM_FAST_GLYPH_FIELDS, MAX_FAST_GLYPH_FIELD_SIZE),
DC_STRUCT3(etable_EC, NUM_ELLIPSE_SC_FIELDS, MAX_ELLIPSE_SC_FIELD_SIZE),
DC_STRUCT3(etable_EB, NUM_ELLIPSE_CB_FIELDS, MAX_ELLIPSE_CB_FIELD_SIZE),
DC_STRUCT3(etable_GI, NUM_INDEX_FIELDS, MAX_INDEX_FIELD_SIZE),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, 0, 0)));
#else
DC_CONST_DATA_ARRAY(OE2_PRIMARY_ORDER_ATTRIBUTES, OE2OrdAttr, TS_MAX_ORDERS,
DC_STRUCT32(
DC_STRUCT3(NULL, NUM_DSTBLT_FIELDS, MAX_DSTBLT_FIELD_SIZE), // direct-encode order
DC_STRUCT3(NULL, NUM_PATBLT_FIELDS, MAX_PATBLT_FIELD_SIZE), // direct-encode order
DC_STRUCT3(etable_SB, NUM_SCRBLT_FIELDS, MAX_SCRBLT_FIELD_SIZE),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, NUM_LINETO_FIELDS, MAX_LINETO_FIELD_SIZE), // direct-encode order
DC_STRUCT3(NULL, NUM_OPAQUERECT_FIELDS, MAX_OPAQUERECT_FIELD_SIZE), // direct-encode order
DC_STRUCT3(etable_SV, NUM_SAVEBITMAP_FIELDS, MAX_SAVEBITMAP_FIELD_SIZE),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, NUM_MEMBLT_FIELDS, MAX_MEMBLT_FIELD_SIZE), // etable_MC not used (fast fath)
DC_STRUCT3(etable_3C, NUM_MEM3BLT_FIELDS, MAX_MEM3BLT_FIELD_SIZE),
DC_STRUCT3(NULL, NUM_MULTI_DSTBLT_FIELDS, MAX_MULTI_DSTBLT_FIELD_SIZE), // direct-encode order
DC_STRUCT3(NULL, NUM_MULTI_PATBLT_FIELDS, MAX_MULTI_PATBLT_FIELD_SIZE), // direct-encode order
DC_STRUCT3(etable_MS, NUM_MULTI_SCRBLT_FIELDS, MAX_MULTI_SCRBLT_FIELD_SIZE),
DC_STRUCT3(NULL, NUM_MULTI_OPAQUERECT_FIELDS, MAX_MULTI_OPAQUERECT_FIELD_SIZE), // direct-encode order
DC_STRUCT3(etable_FI, NUM_FAST_INDEX_FIELDS, MAX_FAST_INDEX_FIELD_SIZE),
DC_STRUCT3(etable_CG, NUM_POLYGON_SC_FIELDS, MAX_POLYGON_SC_FIELD_SIZE),
DC_STRUCT3(etable_BG, NUM_POLYGON_CB_FIELDS, MAX_POLYGON_CB_FIELD_SIZE),
DC_STRUCT3(NULL, NUM_POLYLINE_FIELDS, MAX_POLYLINE_FIELD_SIZE), // direct-encode order
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(etable_FG, NUM_FAST_GLYPH_FIELDS, MAX_FAST_GLYPH_FIELD_SIZE),
DC_STRUCT3(etable_EC, NUM_ELLIPSE_SC_FIELDS, MAX_ELLIPSE_SC_FIELD_SIZE),
DC_STRUCT3(etable_EB, NUM_ELLIPSE_CB_FIELDS, MAX_ELLIPSE_CB_FIELD_SIZE),
DC_STRUCT3(etable_GI, NUM_INDEX_FIELDS, MAX_INDEX_FIELD_SIZE),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, 0, 0),
DC_STRUCT3(NULL, 0, 0)));
#endif
#endif // DC_DEBUG