diff options
Diffstat (limited to 'src/libuemf/uemf.h')
| -rw-r--r-- | src/libuemf/uemf.h | 180 |
1 files changed, 159 insertions, 21 deletions
diff --git a/src/libuemf/uemf.h b/src/libuemf/uemf.h index a792a65de..53426cb55 100644 --- a/src/libuemf/uemf.h +++ b/src/libuemf/uemf.h @@ -95,11 +95,11 @@ these WMF enumerations is by referencing the following table: /* File: uemf.h -Version: 0.0.27 -Date: 28-MAR-2014 +Version: 0.0.31 +Date: 23-APR-2015 Author: David Mathog, Biology Division, Caltech email: mathog@caltech.edu -Copyright: 2014 David Mathog and California Institute of Technology (Caltech) +Copyright: 2015 David Mathog and California Institute of Technology (Caltech) */ #ifndef _UEMF_ @@ -167,6 +167,9 @@ extern "C" { /** Solaris 8 has problems with round/roundf, just use this everywhere */ #define U_ROUND(A) ( (A) > 0 ? floor((A)+0.5) : ( (A) < 0 ? -floor(-(A)+0.5) : (A) ) ) +#define MAKE_MIN_PTR(A,B) ( A < B ? A : B) +#define IS_MEM_UNSAFE(A,B,C) ( (int8_t *)(A) > (int8_t *)(C) ? 1 : ((int8_t *)(C) - (int8_t *)(A) >= (int)(B) ? 0 : 1 )) //!< Return 1 when a region of memory starting at A of B bytes extends beyond pointer C + /** @} */ @@ -1799,7 +1802,7 @@ typedef struct { //!< In MS documentation this is Log *PU_PATTERN; //!< EMF manual 2.2.12 /** - \brief For U_LOGFONT_PANOSE elfLogFont field + \brief For U_LOGFONT elfLogFont field EMF manual 2.2.13, Microsoft name: LogFont Object */ @@ -2075,6 +2078,9 @@ typedef struct { // *********************************************************************************** // The following have U_EMR_# records. They are ordered by their record index, not by EMF manual position. +// records which are documented but not implemented +#define U_SIZE_EMRNOTIMPLEMENTED 2048 + /* Index 1 */ /** \brief The first U_ENHMETARECORD record in the metafile. @@ -2117,6 +2123,8 @@ typedef struct { U_SIZEL szlMicrometers; //!< Size of the display device in micrometer } U_EMRHEADER, *PU_EMRHEADER; //!< EMF manual 2.2.9 +#define U_SIZE_EMRHEADER sizeof(U_EMRHEADER) // modern EMF files, for _really_ old ones the _MIN size applies +#define U_SIZE_EMRHEADER_MIN (U_SIZE_EMRHEADER - sizeof(U_CBPXLFMT) - sizeof(U_OFFPXLFMT) - sizeof(uint32_t) - sizeof(U_SIZEL)) /* Index 2,3,4,5,6 */ /** EMF manual 2.3.5.16 @@ -2137,6 +2145,11 @@ typedef struct { *PU_EMRPOLYBEZIERTO, //!< EMF manual 2.3.5.18 *PU_EMRPOLYLINETO; //!< EMF manual 2.3.5.26 +#define U_SIZE_EMRPOLYBEZIER (sizeof(U_EMR) + sizeof(U_RECTL) + sizeof(U_NUM_POINTL) ) +#define U_SIZE_EMRPOLYGON U_SIZE_EMRPOLYBEZIER +#define U_SIZE_EMRPOLYLINE U_SIZE_EMRPOLYBEZIER +#define U_SIZE_EMRPOLYBEZIERTO U_SIZE_EMRPOLYBEZIER +#define U_SIZE_EMRPOLYLINETO U_SIZE_EMRPOLYBEZIER /* Index 7,8 */ /** EMF manual 2.3.5.30 @@ -2153,6 +2166,8 @@ typedef struct { U_EMRPOLYPOLYGON, //!< EMF manual 2.3.5.28 *PU_EMRPOLYPOLYLINE, //!< EMF manual 2.3.5.30 *PU_EMRPOLYPOLYGON; //!< EMF manual 2.3.5.28 +#define U_SIZE_EMRPOLYPOLYLINE (sizeof(U_EMR) + sizeof(U_RECTL) + sizeof(U_NUM_POLYCOUNTS) + sizeof(U_POLYCOUNTS)) +#define U_SIZE_EMRPOLYPOLYGON U_SIZE_EMRPOLYPOLYLINE /* Index 9,11 (numbers interleave with next one) */ /** EMF manual 2.3.11.30 @@ -2164,6 +2179,8 @@ typedef struct { U_EMRSETVIEWPORTEXTEX, //!< EMF manual manual 2.3.11.28 *PU_EMRSETWINDOWEXTEX, //!< EMF manual manual 2.3.11.30 *PU_EMRSETVIEWPORTEXTEX; //!< EMF manual manual 2.3.11.28 +#define U_SIZE_EMRSETWINDOWEXTEX (sizeof(U_EMRSETWINDOWEXTEX )) +#define U_SIZE_EMRSETVIEWPORTEXTEX (sizeof(U_EMRSETVIEWPORTEXTEX)) /* Index 10,12,13 */ /** EMF manual 2.3.11.31 @@ -2177,7 +2194,9 @@ typedef struct { *PU_EMRSETWINDOWORGEX, //!< EMF manual 2.3.11.31 *PU_EMRSETVIEWPORTORGEX, //!< EMF manual 2.3.11.29 *PU_EMRSETBRUSHORGEX; //!< EMF manual 2.3.11.12 - +#define U_SIZE_EMRSETWINDOWORGEX (sizeof(U_EMRSETWINDOWORGEX )) +#define U_SIZE_EMRSETVIEWPORTORGEX (sizeof(U_EMRSETVIEWPORTORGEX)) +#define U_SIZE_EMRSETBRUSHORGEX (sizeof(U_EMRSETBRUSHORGEX )) /* Index 14 */ /** EMF manual 3.2.4.1 @@ -2197,6 +2216,7 @@ typedef struct { U_OFFPLENTRIES offPalEntries; //!< Offset in bytes to array of palette entries } U_EMREOF, *PU_EMREOF; //!< EMF manual 3.2.4.1 +#define U_SIZE_EMREOF (sizeof(U_EMREOF)) /* Index 15 */ /** EMF manual 2.3.5.36 @@ -2207,6 +2227,7 @@ typedef struct { U_COLORREF crColor; //!< Pixel color } U_EMRSETPIXELV, *PU_EMRSETPIXELV; //!< EMF manual 2.3.5.36 +#define U_SIZE_EMRSETPIXELV (sizeof(U_EMRSETPIXELV)) /* Index 16 */ /** EMF manual 2.3.11.20 @@ -2216,6 +2237,7 @@ typedef struct { uint32_t dwFlags; //!< must be 1 } U_EMRSETMAPPERFLAGS, *PU_EMRSETMAPPERFLAGS; //!< EMF manual 2.3.11.20 +#define U_SIZE_EMRSETMAPPERFLAGS (sizeof(U_EMRSETMAPPERFLAGS)) /* Index 17,18,19,20,21,22,67,98,115 */ @@ -2243,6 +2265,16 @@ typedef struct { *PU_EMRSETICMMODE, //!< EMF manual 2.3.11.14 ICMMode Enumeration *PU_EMRSETLAYOUT; //!< EMF manual 2.3.11.17 Mirroring Enumeration +#define U_SIZE_EMRSETMAPMODE (sizeof(U_EMRSETMAPMODE )) +#define U_SIZE_EMRSETBKMODE (sizeof(U_EMRSETBKMODE )) +#define U_SIZE_EMRSETPOLYFILLMODE (sizeof(U_EMRSETPOLYFILLMODE )) +#define U_SIZE_EMRSETROP2 (sizeof(U_EMRSETROP2 )) +#define U_SIZE_EMRSETSTRETCHBLTMODE (sizeof(U_EMRSETSTRETCHBLTMODE)) +#define U_SIZE_EMRSETTEXTALIGN (sizeof(U_EMRSETTEXTALIGN )) +#define U_SIZE_EMRSELECTCLIPPATH (sizeof(U_EMRSELECTCLIPPATH )) +#define U_SIZE_EMRSETICMMODE (sizeof(U_EMRSETICMMODE )) +#define U_SIZE_EMRSETLAYOUT (sizeof(U_EMRSETLAYOUT )) + /* Index 23 */ /** EMF manual 2.3.11.13 */ @@ -2251,6 +2283,7 @@ typedef struct { U_COLORADJUSTMENT ColorAdjustment; //!< Color Adjustment } U_EMRSETCOLORADJUSTMENT, *PU_EMRSETCOLORADJUSTMENT; //!< EMF manual 2.3.11.13 +#define U_SIZE_EMRSETCOLORADJUSTMENT (sizeof(U_EMRSETCOLORADJUSTMENT)) /* Index 24, 25 */ /** EMF manual 2.3.11.26 @@ -2262,6 +2295,8 @@ typedef struct { U_EMRSETBKCOLOR, //!< EMF manual 2.3.11.10 *PU_EMRSETTEXTCOLOR, //!< EMF manual 2.3.11.26 *PU_EMRSETBKCOLOR; //!< EMF manual 2.3.11.10 +#define U_SIZE_EMRSETTEXTCOLOR (sizeof(U_EMRSETTEXTCOLOR)) +#define U_SIZE_EMRSETBKCOLOR (sizeof(U_EMRSETBKCOLOR )) /* Index 26 */ /** EMF manual 2.3.2.4 @@ -2271,6 +2306,7 @@ typedef struct { U_POINTL ptlOffset; //!< Clipping region } U_EMROFFSETCLIPRGN, *PU_EMROFFSETCLIPRGN; //!< EMF manual 2.3.2.4 +#define U_SIZE_EMROFFSETCLIPRGN (sizeof(U_EMROFFSETCLIPRGN)) /* Index 27, 54 */ /** @@ -2284,6 +2320,8 @@ typedef struct { U_EMRLINETO, //!< EMF manual 2.3.5.13 *PU_EMRMOVETOEX, //!< EMF manual 2.3.11.4 *PU_EMRLINETO; //!< EMF manual 2.3.5.13 +#define U_SIZE_EMRMOVETOEX (sizeof(U_EMRMOVETOEX)) +#define U_SIZE_EMRLINETO (sizeof(U_EMRLINETO )) /* Index 28,33,52,59,60,61,65,66,68 */ /** EMF manual 2.3.2 @@ -2309,6 +2347,15 @@ typedef struct { *PU_EMRFLATTENPATH, //!< EMF manual 2.3.10 *PU_EMRWIDENPATH, //!< EMF manual 2.3.10 *PU_EMRABORTPATH; //!< EMF manual 2.3.10 +#define U_SIZE_EMRSETMETARGN (sizeof(U_EMRSETMETARGN )) +#define U_SIZE_EMRSAVEDC (sizeof(U_EMRSAVEDC )) +#define U_SIZE_EMRREALIZEPALETTE (sizeof(U_EMRREALIZEPALETTE)) +#define U_SIZE_EMRBEGINPATH (sizeof(U_EMRBEGINPATH )) +#define U_SIZE_EMRENDPATH (sizeof(U_EMRENDPATH )) +#define U_SIZE_EMRCLOSEFIGURE (sizeof(U_EMRCLOSEFIGURE )) +#define U_SIZE_EMRFLATTENPATH (sizeof(U_EMRFLATTENPATH )) +#define U_SIZE_EMRWIDENPATH (sizeof(U_EMRWIDENPATH )) +#define U_SIZE_EMRABORTPATH (sizeof(U_EMRABORTPATH )) /* Index 29,30 */ /** EMF manual 2.3.2.1 @@ -2320,6 +2367,8 @@ typedef struct { U_EMRINTERSECTCLIPRECT, //!< EMF manual 2.3.2.3 *PU_EMREXCLUDECLIPRECT, //!< EMF manual 2.3.2.1 *PU_EMRINTERSECTCLIPRECT; //!< EMF manual 2.3.2.3 +#define U_SIZE_EMREXCLUDECLIPRECT (sizeof(U_EMREXCLUDECLIPRECT )) +#define U_SIZE_EMRINTERSECTCLIPRECT (sizeof(U_EMRINTERSECTCLIPRECT )) /* Index 31,32 */ /** EMF manual 2.3.11.7 @@ -2334,6 +2383,8 @@ typedef struct { U_EMRSCALEWINDOWEXTEX, //!< EMF manual 2.3.11.8 *PU_EMRSCALEVIEWPORTEXTEX, //!< EMF manual 2.3.11.7 *PU_EMRSCALEWINDOWEXTEX; //!< EMF manual 2.3.11.8 +#define U_SIZE_EMRSCALEVIEWPORTEXTEX (sizeof(U_EMRSCALEVIEWPORTEXTEX)) +#define U_SIZE_EMRSCALEWINDOWEXTEX (sizeof(U_EMRSCALEWINDOWEXTEX )) /* Index 33 (see 28) */ @@ -2345,6 +2396,7 @@ typedef struct { int32_t iRelative; //!< DC to restore. -1 is preceding } U_EMRRESTOREDC, *PU_EMRRESTOREDC; //!< EMF manual 2.3.11.6 +#define U_SIZE_EMRRESTOREDC (sizeof(U_EMRRESTOREDC)) /* Index 35 */ /** EMF manual 2.3.12.2 @@ -2354,6 +2406,7 @@ typedef struct { U_XFORM xform; //!< Transform } U_EMRSETWORLDTRANSFORM, *PU_EMRSETWORLDTRANSFORM; //!< EMF manual 2.3.12.2 +#define U_SIZE_EMRSETWORLDTRANSFORM (sizeof(U_EMRSETWORLDTRANSFORM)) /* Index 36 */ /** EMF manual 2.3.12.1 @@ -2364,6 +2417,7 @@ typedef struct { uint32_t iMode; //!< ModifyWorldTransformMode Enumeration } U_EMRMODIFYWORLDTRANSFORM, *PU_EMRMODIFYWORLDTRANSFORM; //!< EMF manual 2.3.12.1 +#define U_SIZE_EMRMODIFYWORLDTRANSFORM (sizeof(U_EMRMODIFYWORLDTRANSFORM)) /* Index 37,40 */ /** EMF manual 2.3.8.3 @@ -2375,6 +2429,8 @@ typedef struct { U_EMRSELECTOBJECT, //!< EMF manual 2.3.8.5 *PU_EMRDELETEOBJECT, //!< EMF manual 2.3.8.3 *PU_EMRSELECTOBJECT; //!< EMF manual 2.3.8.5 +#define U_SIZE_EMRDELETEOBJECT (sizeof(U_EMRDELETEOBJECT)) +#define U_SIZE_EMRSELECTOBJECT (sizeof(U_EMRSELECTOBJECT)) /* Index 38 */ /** EMF manual 2.3.7.7 @@ -2385,6 +2441,7 @@ typedef struct { U_LOGPEN lopn; //!< Pen properties } U_EMRCREATEPEN, *PU_EMRCREATEPEN; //!< EMF manual 2.3.7.7 +#define U_SIZE_EMRCREATEPEN (sizeof(U_EMRCREATEPEN)) /* Index 39 */ /** EMF manual 2.3.7.1 @@ -2395,6 +2452,7 @@ typedef struct { U_LOGBRUSH lb; //!< Brush properties } U_EMRCREATEBRUSHINDIRECT, *PU_EMRCREATEBRUSHINDIRECT; //!< EMF manual 2.3.7.1 +#define U_SIZE_EMRCREATEBRUSHINDIRECT (sizeof(U_EMRCREATEBRUSHINDIRECT)) /* Index 40 see 37 */ @@ -2409,6 +2467,7 @@ typedef struct { U_FLOAT eSweepAngle; //!< Sweep angle in degrees } U_EMRANGLEARC, *PU_EMRANGLEARC; //!< EMF manual 2.3.5.1 +#define U_SIZE_EMRANGLEARC (sizeof(U_EMRANGLEARC)) /* Index 42,43 */ /** EMF manual 2.3.5.5 @@ -2420,6 +2479,8 @@ typedef struct { U_EMRRECTANGLE, //!< EMF manual 2.3.5.5 *PU_EMRELLIPSE, //!< EMF manual 2.3.5.5 *PU_EMRRECTANGLE; //!< EMF manual 2.3.5.34 +#define U_SIZE_EMRELLIPSE (sizeof(U_EMRELLIPSE )) +#define U_SIZE_EMRRECTANGLE (sizeof(U_EMRRECTANGLE)) /* Index 44 */ /** EMF manual 2.3.5.35 @@ -2430,6 +2491,7 @@ typedef struct { U_SIZEL szlCorner; //!< W & H in logical units of ellipse used to round corner } U_EMRROUNDRECT, *PU_EMRROUNDRECT; //!< EMF manual 2.3.5.35 +#define U_SIZE_EMRROUNDRECT (sizeof(U_EMRROUNDRECT)) /* Index 45, 46 ,47, 55 */ /** EMF manual 2.3.5.2 @@ -2447,6 +2509,10 @@ typedef struct { *PU_EMRCHORD, //!< EMF manual 2.3.5.4 *PU_EMRPIE, //!< EMF manual 2.3.5.15 *PU_EMRARCTO; //!< EMF manual 2.3.5.3 +#define U_SIZE_EMRARC (sizeof(U_EMRARC )) +#define U_SIZE_EMRCHORD (sizeof(U_EMRCHORD)) +#define U_SIZE_EMRPIE (sizeof(U_EMRPIE )) +#define U_SIZE_EMRARCTO (sizeof(U_EMRARCTO)) /* Index 48 */ /** EMF manual 2.3.8.6 @@ -2456,6 +2522,7 @@ typedef struct { uint32_t ihPal; //!< Index of a Palette object in the EMF object table } U_EMRSELECTPALETTE, *PU_EMRSELECTPALETTE; //!< EMF manual 2.3.8.6 +#define U_SIZE_EMRSELECTPALETTE (sizeof(U_EMRSELECTPALETTE)) /* Index 49 */ /** EMF manual 2.3.7.6 @@ -2466,6 +2533,7 @@ typedef struct { U_LOGPALETTE lgpl; //!< Palette properties } U_EMRCREATEPALETTE, *PU_EMRCREATEPALETTE; //!< EMF manual 2.3.7.6 +#define U_SIZE_EMRCREATEPALETTE (sizeof(U_EMRCREATEPALETTE)) /* Index 50 */ /** EMF manual 2.3.8.8 @@ -2478,6 +2546,7 @@ typedef struct { U_LOGPLTNTRY aPalEntries[1]; //!< Values to set with } U_EMRSETPALETTEENTRIES, *PU_EMRSETPALETTEENTRIES; //!< EMF manual 2.3.8.8 +#define U_SIZE_EMRSETPALETTEENTRIES (sizeof(U_EMR) + 2*sizeof(uint32_t) + sizeof(U_NUM_LOGPLTNTRY)) /* Index 51 */ /** EMF manual 2.3.8.4 @@ -2488,6 +2557,7 @@ typedef struct { uint32_t cEntries; //!< Number to expand or truncate the Palette entry list to. } U_EMRRESIZEPALETTE, *PU_EMRRESIZEPALETTE; //!< EMF manual 2.3.8.4 +#define U_SIZE_EMRRESIZEPALETTE (sizeof(U_EMRRESIZEPALETTE)) /* Index 52 (see 28) */ @@ -2501,22 +2571,26 @@ typedef struct { uint32_t iMode; //!< FloodFill Enumeration } U_EMREXTFLOODFILL, *PU_EMREXTFLOODFILL; //!< EMF manual 2.3.5.6 +#define U_SIZE_EMREXTFLOODFILL (sizeof(U_EMREXTFLOODFILL)) /* Index 54 (see 27) */ /* Index 55 (see 45) */ /* Index 56 */ -/** EMF manual 2.3.5.20 +/** EMF manual 2.3.5.20 + + followed by + uint8_t abTypes[1]; //!< Array of Point Enumeration */ typedef struct { U_EMR emr; //!< U_EMR U_RECTL rclBounds; //!< Bounding rectangle in device units U_NUM_POINTL cptl; //!< Number of U_POINTL objects U_POINTL aptl[1]; //!< Array of U_POINTL objects - uint8_t abTypes[1]; //!< Array of Point Enumeration } U_EMRPOLYDRAW, *PU_EMRPOLYDRAW; //!< EMF manual 2.3.5.20 +#define U_SIZE_EMRPOLYDRAW (sizeof(U_EMR) + sizeof(U_RECTL) + sizeof(U_NUM_POINTL)) /* Index 57 */ /** EMF manual 2.3.11.9 @@ -2526,6 +2600,7 @@ typedef struct { uint32_t iArcDirection; //!< ArcDirection Enumeration } U_EMRSETARCDIRECTION, *PU_EMRSETARCDIRECTION; //!< EMF manual 2.3.11.9 +#define U_SIZE_EMRSETARCDIRECTION (sizeof(U_EMRSETARCDIRECTION)) /* Index 58 */ /** EMF manual 2.3.11.21 @@ -2538,6 +2613,7 @@ typedef struct { uint32_t eMiterLimit; //!< Miter limit (max value of mitered length / line width) } U_EMRSETMITERLIMIT, *PU_EMRSETMITERLIMIT; //!< EMF manual 2.3.11.21 +#define U_SIZE_EMRSETMITERLIMIT (sizeof(U_EMRSETMITERLIMIT)) /* Index 59,60,61 (see 28) */ @@ -2553,6 +2629,9 @@ typedef struct { *PU_EMRFILLPATH, //!< EMF manual 2.3.5.9 *PU_EMRSTROKEANDFILLPATH, //!< EMF manual 2.3.5.38 *PU_EMRSTROKEPATH; //!< EMF manual 2.3.5.39 +#define U_SIZE_EMRFILLPATH (sizeof(U_EMRFILLPATH )) +#define U_SIZE_EMRSTROKEANDFILLPATH (sizeof(U_EMRSTROKEANDFILLPATH)) +#define U_SIZE_EMRSTROKEPATH (sizeof(U_EMRSTROKEPATH )) /* Index 65,66 (see 28) */ /* Index 67 (see 17) */ @@ -2569,6 +2648,7 @@ typedef struct { uint8_t Data[1]; //!< Comment (any binary data, interpretation is program specific) } U_EMRCOMMENT, *PU_EMRCOMMENT; //!< EMF manual 2.3.3.1, AKA GDICOMMENT +#define U_SIZE_EMRCOMMENT (sizeof(U_EMR) + sizeof(U_CBDATA)) /* variant comment types */ /** EMF manual 2.3.3.2 @@ -2580,6 +2660,7 @@ typedef struct { uint8_t Data[1]; //!< EMF Plus record } U_EMRCOMMENT_EMFPLUS, *PU_EMRCOMMENT_EMFPLUS; //!< EMF manual 2.3.3.2, EMF Plus comment +#define U_SIZE_EMRCOMMENT_EMFPLUS (sizeof(U_EMR) + sizeof(U_CBDATA) + sizeof(uint32_t)) /** EMF manual 2.3.3.3 */ @@ -2591,6 +2672,7 @@ typedef struct { uint8_t Data[1]; //!< EMF Spool records } U_EMRCOMMENT_SPOOL, *PU_EMRCOMMENT_SPOOL; //!< EMF manual 2.3.3.3, EMF Spool comment +#define U_SIZE_EMRCOMMENT_SPOOL (sizeof(U_EMR) + sizeof(U_CBDATA) + 2*sizeof(uint32_t)) /** EMF manual 2.3.3.4 */ @@ -2602,9 +2684,11 @@ typedef struct { uint8_t Data[1]; //!< Public comment data } U_EMRCOMMENT_PUBLIC, *PU_EMRCOMMENT_PUBLIC; //!< EMF manual 2.3.3.4, EMF Public comment +#define U_SIZE_EMRCOMMENT_PUBLIC (sizeof(U_EMR) + sizeof(U_CBDATA) + 2*sizeof(uint32_t)) /* Index 71 */ -/** EMF manual 2.3.5.10 +/** EMF manual 2.3.5.10 + followed by a variable number of U_RECTLs */ typedef struct { U_EMR emr; //!< U_EMR @@ -2614,6 +2698,7 @@ typedef struct { U_RGNDATA RgnData[1]; //!< Variable size U_RGNDATA structure } U_EMRFILLRGN, *PU_EMRFILLRGN; //!< EMF manual 2.3.5.10 +#define U_SIZE_EMRFILLRGN (sizeof(U_EMR) + sizeof(U_RECTL) + sizeof(U_CBRGNDATA) + sizeof(uint32_t)) /* Index 72 */ /** EMF manual 2.3.5.11 @@ -2627,6 +2712,7 @@ typedef struct { U_RGNDATA RgnData[1]; //!< Variable size U_RGNDATA structure } U_EMRFRAMERGN, *PU_EMRFRAMERGN; //!< EMF manual 2.3.5.11 +#define U_SIZE_EMRFRAMERGN (sizeof(U_EMR) + sizeof(U_RECTL) + sizeof(U_CBRGNDATA) + sizeof(uint32_t) + sizeof(U_SIZEL)) /* Index 73,74 */ /** EMF manual 2.3.11.3 @@ -2640,6 +2726,8 @@ typedef struct { U_EMRPAINTRGN, //!< EMF manual 2.3.5.14 *PU_EMRINVERTRGN, //!< EMF manual 2.3.11.3 *PU_EMRPAINTRGN; //!< EMF manual 2.3.5.14 +#define U_SIZE_EMRINVERTRGN (sizeof(U_EMR) + sizeof(U_RECTL) + sizeof(U_CBRGNDATA)) +#define U_SIZE_EMRPAINTRGN U_SIZE_EMRINVERTRGN /* Index 75 */ /** EMF manual 2.3.2.2 @@ -2651,6 +2739,7 @@ typedef struct { U_RGNDATA RgnData[1]; //!< Variable size U_RGNDATA structure } U_EMREXTSELECTCLIPRGN, *PU_EMREXTSELECTCLIPRGN; //!< EMF manual 2.3.2.2 +#define U_SIZE_EMREXTSELECTCLIPRGN (sizeof(U_EMR) + sizeof(U_CBRGNDATA) + sizeof(uint32_t)) /* Index 76 */ /** EMF manual 2.3.1.2 @@ -2672,6 +2761,7 @@ typedef struct { //!< Record may include optional bitmapbuffer } U_EMRBITBLT, *PU_EMRBITBLT; //!< EMF manual 2.3.1.2 +#define U_SIZE_EMRBITBLT (sizeof(U_EMRBITBLT)) /* Index 77 */ /** EMF manual 2.3.1.6 @@ -2694,6 +2784,7 @@ typedef struct { //!< Record may include optional bitmapbuffer } U_EMRSTRETCHBLT, *PU_EMRSTRETCHBLT; //!< EMF manual 2.3.1.6 +#define U_SIZE_EMRSTRETCHBLT (sizeof(U_EMRSTRETCHBLT)) /* Index 78 */ /** EMF manual 2.3.1.3 @@ -2721,6 +2812,7 @@ typedef struct { //!< Record may include optional Source and mask bitmapbuffers } U_EMRMASKBLT, *PU_EMRMASKBLT; //!< EMF manual 2.3.1.3 +#define U_SIZE_EMRMASKBLT (sizeof(U_EMRMASKBLT)) /* Index 79 */ /** EMF manual 2.3.1.4 @@ -2747,6 +2839,7 @@ typedef struct { //!< Record may include optional Source and mask bitmapbuffers } U_EMRPLGBLT, *PU_EMRPLGBLT; //!< EMF manual 2.3.1.4 +#define U_SIZE_EMRPLGBLT (sizeof(U_EMRPLGBLT)) /* Index 80 */ /** EMF manual 2.3.1.5 @@ -2767,6 +2860,7 @@ typedef struct { //!< Record may includes optional bitmapbuffer } U_EMRSETDIBITSTODEVICE, *PU_EMRSETDIBITSTODEVICE; //!< EMF manual 2.3.1.5 +#define U_SIZE_EMRSETDIBITSTODEVICE (sizeof(U_EMRSETDIBITSTODEVICE)) /* Index 81 */ /** EMF manual 2.3.1.7 @@ -2787,6 +2881,7 @@ typedef struct { //!< Record may includes optional bitmapbuffer } U_EMRSTRETCHDIBITS, *PU_EMRSTRETCHDIBITS; //!< EMF manual 2.3.1.7 +#define U_SIZE_EMRSTRETCHDIBITS (sizeof(U_EMRSTRETCHDIBITS)) /* Index 82 */ /** EMF manual 2.3.7.8 @@ -2797,6 +2892,8 @@ typedef struct { U_LOGFONT_PANOSE elfw; //!< Font parameters, either U_LOGFONT or U_LOGFONT_PANOSE, the latter is bigger so use that type here } U_EMREXTCREATEFONTINDIRECTW, *PU_EMREXTCREATEFONTINDIRECTW; //!< EMF manual 2.3.7.8 +#define U_SIZE_EMREXTCREATEFONTINDIRECTW_LOGFONT_PANOSE (sizeof(U_EMR) + 4 + sizeof(U_LOGFONT_PANOSE)) +#define U_SIZE_EMREXTCREATEFONTINDIRECTW_LOGFONT (sizeof(U_EMR) + 4 + sizeof(U_LOGFONT)) /* Index 83,84 */ /** EMF manual 2.3.5.7 @@ -2820,6 +2917,8 @@ typedef struct { U_EMREXTTEXTOUTW, //!< EMF manual 2.3.5.8 *PU_EMREXTTEXTOUTA, //!< EMF manual 2.3.5.7 *PU_EMREXTTEXTOUTW; //!< EMF manual 2.3.5.8 +#define U_SIZE_EMREXTTEXTOUTA (sizeof(U_EMREXTTEXTOUTA)) +#define U_SIZE_EMREXTTEXTOUTW (sizeof(U_EMREXTTEXTOUTW)) /* Index 85,86,87,88,89 */ /** EMF manual 2.3.5.17 @@ -2839,9 +2938,16 @@ typedef struct { *PU_EMRPOLYLINE16, //!< EMF manual 2.3.5.25 *PU_EMRPOLYBEZIERTO16, //!< EMF manual 2.3.5.19 *PU_EMRPOLYLINETO16; //!< EMF manual 2.3.5.27 - +#define U_SIZE_EMRPOLYBEZIER16 (sizeof(U_EMR) + sizeof(U_RECTL) + sizeof(U_NUM_POINT16)) +#define U_SIZE_EMRPOLYGON16 U_SIZE_EMRPOLYBEZIER16 +#define U_SIZE_EMRPOLYLINE16 U_SIZE_EMRPOLYBEZIER16 +#define U_SIZE_EMRPOLYBEZIERTO16 U_SIZE_EMRPOLYBEZIER16 +#define U_SIZE_EMRPOLYLINETO16 U_SIZE_EMRPOLYBEZIER16 /* Index 90,91 */ -/** EMF manual 2.3.5.31 +/** EMF manual 2.3.5.31 + + followed by + U_POINT16 apts[1]; //!< array of point16 */ typedef struct { U_EMR emr; //!< U_EMR @@ -2849,24 +2955,28 @@ typedef struct { U_NUM_POLYCOUNTS nPolys; //!< Number of elements in aPolyCounts U_NUM_POINT16 cpts; //!< Total number of points (over all poly) U_POLYCOUNTS aPolyCounts[1]; //!< Number of points in each poly (sequential) -// This will appear somewhere but is not really part of the core structure. -// U_POINT16 apts[1]; //!< array of point16 } U_EMRPOLYPOLYLINE16, U_EMRPOLYPOLYGON16, //!< EMF manual 2.3.5.29 *PU_EMRPOLYPOLYLINE16, //!< EMF manual 2.3.5.31 *PU_EMRPOLYPOLYGON16; //!< EMF manual 2.3.5.29 +#define U_SIZE_EMRPOLYPOLYLINE16 (sizeof(U_EMR) + sizeof(U_RECTL) + sizeof(U_NUM_POLYCOUNTS) + sizeof(U_NUM_POINT16)) +#define U_SIZE_EMRPOLYPOLYGON16 U_SIZE_EMRPOLYPOLYLINE16 /* Index 92 */ -/** EMF manual 2.3.5.21 +/** EMF manual 2.3.5.21 + + followed by + uint8_t abTypes[1]; //!< Array of Point Enumeration + */ typedef struct { U_EMR emr; //!< U_EMR U_RECTL rclBounds; //!< Bounding rectangle in device units U_NUM_POINT16 cpts; //!< Total number of points (over all poly) U_POINT16 apts[1]; //!< array of points - uint8_t abTypes[1]; //!< Array of Point Enumeration } U_EMRPOLYDRAW16, *PU_EMRPOLYDRAW16; //!< EMF manual 2.3.5.21 +#define U_SIZE_EMRPOLYDRAW16 (sizeof(U_EMR) + sizeof(U_RECTL) + sizeof(U_NUM_POINT16)) /* Index 93 */ /** EMF manual 2.3.7.5 @@ -2882,6 +2992,7 @@ typedef struct { //!< Record may include optional DIB bitmapbuffer } U_EMRCREATEMONOBRUSH, *PU_EMRCREATEMONOBRUSH; //!< EMF manual 2.3.7.5 +#define U_SIZE_EMRCREATEMONOBRUSH (sizeof(U_EMRCREATEMONOBRUSH)) /* Index 94 */ /** EMF manual 2.3.7.4 @@ -2897,6 +3008,7 @@ typedef struct { //!< Record may include optional DIB bitmapbuffer } U_EMRCREATEDIBPATTERNBRUSHPT, *PU_EMRCREATEDIBPATTERNBRUSHPT; //!< EMF manual 2.3.7.4 +#define U_SIZE_EMRCREATEDIBPATTERNBRUSHPT (sizeof(U_EMRCREATEDIBPATTERNBRUSHPT)) /* Index 95 */ /** EMF manual 2.3.7.9 @@ -2912,6 +3024,7 @@ typedef struct { //!< Record may include optional DIB bitmap } U_EMREXTCREATEPEN, *PU_EMREXTCREATEPEN; //!< EMF manual 2.3.7.9 +#define U_SIZE_EMREXTCREATEPEN (sizeof(U_EMREXTCREATEPEN)) /* Index 96.97 */ /** EMF manual 2.3.5.32 @@ -2928,6 +3041,8 @@ typedef struct { U_EMRPOLYTEXTOUTW, //!< EMF manual 2.3.5.33 *PU_EMRPOLYTEXTOUTA, //!< EMF manual 2.3.5.32 *PU_EMRPOLYTEXTOUTW; //!< EMF manual 2.3.5.33 +#define U_SIZE_EMRPOLYTEXTOUTA (sizeof(U_EMR) + sizeof(U_RECTL) + sizeof(uint32_t) + 2*sizeof(U_FLOAT) + sizeof(U_NUM_EMRTEXT)) +#define U_SIZE_EMRPOLYTEXTOUTW U_SIZE_EMRPOLYTEXTOUTA /* Index 98 (see 17) */ @@ -2940,6 +3055,7 @@ typedef struct { U_LOGCOLORSPACEA lcs; //!< ColorSpace parameters } U_EMRCREATECOLORSPACE, *PU_EMRCREATECOLORSPACE; //!< EMF manual 2.3.7.2 +#define U_SIZE_EMRCREATECOLORSPACE (sizeof(U_EMRCREATECOLORSPACE)) /* Index 100,101 */ /** EMF manual 2.3.8.2 @@ -2951,6 +3067,8 @@ typedef struct { U_EMRSETCOLORSPACE, //!< EMF manual 2.3.8.7 *PU_EMRDELETECOLORSPACE, //!< EMF manual 2.3.8.2 *PU_EMRSETCOLORSPACE; //!< EMF manual 2.3.8.7 +#define U_SIZE_EMRDELETECOLORSPACE (sizeof(U_EMRDELETECOLORSPACE)) +#define U_SIZE_EMRSETCOLORSPACE (sizeof(U_EMRSETCOLORSPACE )) /* Index 102 */ /** EMF manual 2.3.9.2 @@ -2961,6 +3079,7 @@ typedef struct { U_DATA Data[1]; //!< OpenGL data } U_EMRGLSRECORD, *PU_EMRGLSRECORD; //!< EMF manual 2.3.9.2 +#define U_SIZE_EMRGLSRECORD (sizeof(U_EMRGLSRECORD)) /* Index 103 */ /** EMF manual 2.3.9.1 @@ -2972,6 +3091,7 @@ typedef struct { U_DATA Data[1]; //!< OpenGL data } U_EMRGLSBOUNDEDRECORD, *PU_EMRGLSBOUNDEDRECORD; //!< EMF manual 2.3.9.1 +#define U_SIZE_EMRGLSBOUNDEDRECORD (sizeof(U_EMR) + sizeof(U_RECTL) + sizeof(U_CBDATA)) /* Index 104 */ /** EMF manual 2.3.11.5 @@ -2981,6 +3101,7 @@ typedef struct { U_PIXELFORMATDESCRIPTOR pfd; //!< PixelFormatDescriptor } U_EMRPIXELFORMAT, *PU_EMRPIXELFORMAT; //!< EMF manual 2.3.11.5 +#define U_SIZE_EMRPIXELFORMAT (sizeof(U_EMRPIXELFORMAT)) /* Index 105 */ /** EMF manual 2.3.6.1 @@ -2991,6 +3112,7 @@ typedef struct { U_DATA Data[1]; //!< Data to send } U_EMRDRAWESCAPE, *PU_EMRDRAWESCAPE; //!< EMF manual 2.3.6.1 +#define U_SIZE_EMRDRAWESCAPE (sizeof(U_EMR) + sizeof(U_CBDATA)) /* Index 106 */ /** EMF manual 2.3.6.2 @@ -3001,6 +3123,7 @@ typedef struct { U_DATA Data[1]; //!< Data to send } U_EMREXTESCAPE, *PU_EMREXTESCAPE; //!< EMF manual 2.3.6.2 +#define U_SIZE_EMREXTESCAPE (sizeof(U_EMR) + sizeof(U_CBDATA)) /* Index 107 (not implemented ) */ @@ -3020,22 +3143,26 @@ typedef struct { //!< uint32_t TextString; text to output (fuOptions & ETO_SMALL_CHARS ? 8 bit : 16 bit) } U_EMRSMALLTEXTOUT, *PU_EMRSMALLTEXTOUT; //!< EMF manual 2.3.5.37 +#define U_SIZE_EMRSMALLTEXTOUT (sizeof(U_EMRSMALLTEXTOUT)) /* Index 109 (not implemented ) EMF manual 2.3.11.2 */ /* Index 110 */ -/** EMF manual 2.3.6.3 +/** EMF manual 2.3.6.3 + + followed by + uint8_t Data[1]; //!< Data for printer driver */ typedef struct { U_EMR emr; //!< U_EMR U_CBDATA cbDriver; //!< Number of bytes in driver name (note, BYTES, not CHARACTERS) U_CBDATA cbData; //!< Number of bytes in data uint16_t Driver[1]; //!< Driver name in uint16_t characters, null terminated - uint8_t Data[1]; //!< Data for printer driver } U_EMRNAMEDESCAPE, *PU_EMRNAMEDESCAPE; //!< EMF manual 2.3.6.3 +#define U_SIZE_EMRNAMEDESCAPE (sizeof(U_EMRNAMEDESCAPE)) /* Index 111-113 (not implemented ) EMF manual 2.3.8.1 @@ -3064,6 +3191,7 @@ typedef struct { //!< Record may include optional DIB bitmap } U_EMRALPHABLEND, *PU_EMRALPHABLEND; //!< EMF manual 2.3.1.1 +#define U_SIZE_EMRALPHABLEND (sizeof(U_EMRALPHABLEND)) /* Index 115 (see 17) */ @@ -3088,11 +3216,16 @@ typedef struct { //!< Record may includes optional bitmapbuffer } U_EMRTRANSPARENTBLT, *PU_EMRTRANSPARENTBLT; //!< EMF manual 2.3.1.8 +#define U_SIZE_EMRTRANSPARENTBLT (sizeof(U_EMRTRANSPARENTBLT)) /* Index 117 (not a defined U_EMR record type ) */ /* Index 118 */ -/** EMF manual 2.3.5.12 +/** EMF manual 2.3.5.12 + + followed by + U_TRIVERTEX TriVert[1]; Array of TriVertex objects + uint32_t GradObj[1]; Array of gradient objects (each has 2 or 3 indices into TriVert array) */ typedef struct { U_EMR emr; //!< U_EMR @@ -3100,11 +3233,9 @@ typedef struct { U_NUM_TRIVERTEX nTriVert; //!< Number of TriVertex objects U_NUM_GRADOBJ nGradObj; //!< Number of gradient triangle/rectangle objects uint32_t ulMode; //!< Gradientfill Enumeration (determines Triangle/Rectangle) -//parts that are required but which are not included in the core structure -// U_TRIVERTEX TriVert[1]; Array of TriVertex objects -// uint32_t GradObj[1]; Array of gradient objects (each has 2 or 3 indices into TriVert array) } U_EMRGRADIENTFILL, *PU_EMRGRADIENTFILL; //!< EMF manual 2.3.5.12 +#define U_SIZE_EMRGRADIENTFILL (sizeof(U_EMRGRADIENTFILL)) /* Index 119,120 (not implemented ) EMF manual 2.3.11.18 @@ -3123,6 +3254,7 @@ typedef struct { uint8_t Data[1]; //!< Data of size cbName+cbData: Name in UTF16 then color profile data } U_EMRCOLORMATCHTOTARGETW, *PU_EMRCOLORMATCHTOTARGETW; //!< EMF manual 2.3.11.1 +#define U_SIZE_EMRCOLORMATCHTOTARGETW (sizeof(U_EMR) + 2*sizeof(uint32_t) + sizeof(U_CBNAME) + sizeof(U_CBDATA)) /* Index 122 */ /** EMF manual 2.3.7.3 @@ -3136,6 +3268,10 @@ typedef struct { uint8_t Data[1]; //!< (Optional, dwFlags & 1) color profile data } U_EMRCREATECOLORSPACEW, *PU_EMRCREATECOLORSPACEW; //!< EMF manual 2.3.7.3 +#define U_SIZE_EMRCREATECOLORSPACEW (sizeof(U_EMR) + 2*sizeof(uint32_t) + sizeof(U_LOGCOLORSPACEW) + sizeof(U_CBDATA)) + +// records which are not documented, so we have no idea what to do with them +#define U_SIZE_EMRUNDEFINED 2048 // ************************************************************************************************ // Utility function structures @@ -3207,7 +3343,7 @@ int get_real_color_count(const char *Bmih); int get_real_color_icount(int Colors, int BitCount, int Width, int Height); int RGBA_to_DIB(char **px, uint32_t *cbPx, PU_RGBQUAD *ct, int *numCt, const char *rgba_px, int w, int h, int stride, uint32_t colortype, int use_ct, int invert); -int get_DIB_params( void *pEmr, uint32_t offBitsSrc, uint32_t offBmiSrc, +int get_DIB_params( const char *record, uint32_t offBitsSrc, uint32_t offBmiSrc, const char **px, const U_RGBQUAD **ct, uint32_t *numCt, uint32_t *width, uint32_t *height, uint32_t *colortype, uint32_t *invert ); int DIB_to_RGBA(const char *px, const U_RGBQUAD *ct, int numCt, @@ -3237,6 +3373,7 @@ int emf_htable_free(EMFHANDLES **eht); #define htable_free emf_htable_free U_RECTL rectl_set(U_POINTL ul, U_POINTL lr); +void rectli_set(PU_RECTL array, int index, U_POINTL ul, U_POINTL lr); U_SIZEL sizel_set(int32_t x, int32_t y); U_POINTL point32_set(int32_t x, int32_t y); #define point_set point32_set @@ -3463,6 +3600,7 @@ char *U_EMRSMALLTEXTOUT_set(const U_POINTL Dest, const U_NUM_STR cChars, const u // U_EMRSETICMPROFILEA_set 112 Not implemented // U_EMRSETICMPROFILEW_set 113 Not implemented + char *U_EMRALPHABLEND_set(const U_RECTL rclBounds, const U_POINTL Dest, const U_POINTL cDest, const U_POINTL Src, const U_POINTL cSrc, const U_XFORM xformSrc, const U_COLORREF crBkColorSrc, const uint32_t iUsageSrc, |
