summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/libuemf/uwmf.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/3rdparty/libuemf/uwmf.h2677
1 files changed, 2677 insertions, 0 deletions
diff --git a/src/3rdparty/libuemf/uwmf.h b/src/3rdparty/libuemf/uwmf.h
new file mode 100644
index 0000000..529232c
--- /dev/null
+++ b/src/3rdparty/libuemf/uwmf.h
@@ -0,0 +1,2677 @@
+/**
+ @file uwmf.h
+
+ @brief Structures, definitions, and function prototypes for WMF files.
+
+ WMF file Record structure information has been derived from Mingw and Wine header files, and from
+ Microsoft's WMF Information pdf, release date July 5,2012, link from here:
+
+ http://msdn2.microsoft.com/en-us/library/cc250370.aspx
+
+ If the direct link fails the document may be found
+ by searching for: "[MS-WMF]: Windows Metafile Format"
+
+ *********************************** IMPORTANT!!! **********************************************
+ WMF is a 16 bit file type that has some 32 bit integers embedded in it. In
+ a few cases these 32 bit fields are not aligned in the structures defined in uwmf.h, but
+ in most cases they are. So when creating the individual WMF records the functions in
+ uwmf.c can usually use a regular assignment operation for the 32 bit fields. However, once the
+ records are part of a WMF file in memory there is no guaranty that any 32 bit type will be correctly
+ aligned. Similarly, many WMF structures contain embedded other structures which would "naturally"
+ be passed by pointer, but since their alignment may not be what malloc() would have created for that
+ type, the outcome of that operation is not defined by the C standard. (Per Eric Sosman, section
+ 6.3.2.3p7 of the standard.)
+
+ For this reason, the _print, _swap and any read operations must pass structures with unknown alignment
+ as a (char *), and pull out the data using memcpy() or some equivalent
+ that will not segfault when it tries to read a 32 bit value that is not aligned
+ on a 4 byte boundary. Failure to do so will result in nonportable code. You have been warned!
+
+ Problem areas:
+ The Size16_4 field of all WMF records may NOT be assumed to 4 byte aligned.
+ DIB's U_BITMAPINFOHEADER 32 bit fields may not be aligned.
+ *********************************** IMPORTANT!!! **********************************************
+
+*/
+
+/*
+File: uwmf.h
+Version: 0.0.13
+Date: 26-JAN-2016
+Author: David Mathog, Biology Division, Caltech
+email: mathog@caltech.edu
+Copyright: 2016 David Mathog and California Institute of Technology (Caltech)
+*/
+
+#ifndef _UWMF_
+#define _UWMF_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+#include "uemf.h" /* many structures/defs in common, pull in the EMF ones as a basis */
+#include "uemf_utf.h"
+#include "uwmf_endian.h"
+
+
+/** HighWater Enumeration not in WMF manual
+ @{
+*/
+#define U_HIGHWATER_READ 0x00000000 //!< nondestructive read of highwater value
+#define U_HIGHWATER_CLEAR 0xFFFFFFFF //!< destructive read, value is reset to 0
+/** @} */
+
+
+
+
+// ***********************************************************************************
+// Value Enumerations and other predefined constants, alphabetical order by group
+
+/* RecordType Enumeration WMF manual 2.1.1.1 */
+/** WMF manual 2.1.1.1
+ \brief WMR Record types
+*/
+enum U_WMR_TYPES{
+ U_WMR_EOF, //!< 0x0000 U_WMREOF record
+ U_WMR_SETBKCOLOR, //!< 0x0201 U_WMRSETBKCOLOR record
+ U_WMR_SETBKMODE, //!< 0x0102 U_WMRSETBKMODE record
+ U_WMR_SETMAPMODE, //!< 0x0103 U_WMRSETMAPMODE record
+ U_WMR_SETROP2, //!< 0x0104 U_WMRSETROP2 record
+ U_WMR_SETRELABS, //!< 0x0105 U_WMRSETRELABS record
+ U_WMR_SETPOLYFILLMODE, //!< 0x0106 U_WMRSETPOLYFILLMODE record
+ U_WMR_SETSTRETCHBLTMODE, //!< 0x0107 U_WMRSETSTRETCHBLTMODE record
+ U_WMR_SETTEXTCHAREXTRA, //!< 0x0108 U_WMRSETTEXTCHAREXTRA record
+ U_WMR_SETTEXTCOLOR, //!< 0x0209 U_WMRSETTEXTCOLOR record
+ U_WMR_SETTEXTJUSTIFICATION, //!< 0x020A U_WMRSETTEXTJUSTIFICATION record
+ U_WMR_SETWINDOWORG, //!< 0x020B U_WMRSETWINDOWORG record
+ U_WMR_SETWINDOWEXT, //!< 0x020C U_WMRSETWINDOWEXT record
+ U_WMR_SETVIEWPORTORG, //!< 0x020D U_WMRSETVIEWPORTORG record
+ U_WMR_SETVIEWPORTEXT, //!< 0x020E U_WMRSETVIEWPORTEXT record
+ U_WMR_OFFSETWINDOWORG, //!< 0x020F U_WMROFFSETWINDOWORG record
+ U_WMR_SCALEWINDOWEXT, //!< 0x0410 U_WMRSCALEWINDOWEXT record
+ U_WMR_OFFSETVIEWPORTORG, //!< 0x0211 U_WMROFFSETVIEWPORTORG record
+ U_WMR_SCALEVIEWPORTEXT, //!< 0x0412 U_WMRSCALEVIEWPORTEXT record
+ U_WMR_LINETO, //!< 0x0213 U_WMRLINETO record
+ U_WMR_MOVETO, //!< 0x0214 U_WMRMOVETO record
+ U_WMR_EXCLUDECLIPRECT, //!< 0x0415 U_WMREXCLUDECLIPRECT record
+ U_WMR_INTERSECTCLIPRECT, //!< 0x0416 U_WMRINTERSECTCLIPRECT record
+ U_WMR_ARC, //!< 0x0817 U_WMRARC record
+ U_WMR_ELLIPSE, //!< 0x0418 U_WMRELLIPSE record
+ U_WMR_FLOODFILL, //!< 0x0419 U_WMRFLOODFILL record
+ U_WMR_PIE, //!< 0x081A U_WMRPIE record
+ U_WMR_RECTANGLE, //!< 0x041B U_WMRRECTANGLE record
+ U_WMR_ROUNDRECT, //!< 0x061C U_WMRROUNDRECT record
+ U_WMR_PATBLT, //!< 0x061D U_WMRPATBLT record
+ U_WMR_SAVEDC, //!< 0x001E U_WMRSAVEDC record
+ U_WMR_SETPIXEL, //!< 0x041F U_WMRSETPIXEL record
+ U_WMR_OFFSETCLIPRGN, //!< 0x0220 U_WMROFFSETCLIPRGN record
+ U_WMR_TEXTOUT, //!< 0x0521 U_WMRTEXTOUT record
+ U_WMR_BITBLT, //!< 0x0922 U_WMRBITBLT record
+ U_WMR_STRETCHBLT, //!< 0x0B23 U_WMRSTRETCHBLT record
+ U_WMR_POLYGON, //!< 0x0324 U_WMRPOLYGON record
+ U_WMR_POLYLINE, //!< 0x0325 U_WMRPOLYLINE record
+ U_WMR_ESCAPE, //!< 0x0626 U_WMRESCAPE record
+ U_WMR_RESTOREDC, //!< 0x0127 U_WMRRESTOREDC record
+ U_WMR_FILLREGION, //!< 0x0228 U_WMRFILLREGION record
+ U_WMR_FRAMEREGION, //!< 0x0429 U_WMRFRAMEREGION record
+ U_WMR_INVERTREGION, //!< 0x012A U_WMRINVERTREGION record
+ U_WMR_PAINTREGION, //!< 0x012B U_WMRPAINTREGION record
+ U_WMR_SELECTCLIPREGION, //!< 0x012C U_WMRSELECTCLIPREGION record
+ U_WMR_SELECTOBJECT, //!< 0x012D U_WMRSELECTOBJECT record
+ U_WMR_SETTEXTALIGN, //!< 0x012E U_WMRSETTEXTALIGN record
+ U_WMR_DRAWTEXT, //!< 0x062F U_WMRDRAWTEXT record
+ U_WMR_CHORD, //!< 0x0830 U_WMRCHORD record
+ U_WMR_SETMAPPERFLAGS, //!< 0x0231 U_WMRSETMAPPERFLAGS record
+ U_WMR_EXTTEXTOUT, //!< 0x0A32 U_WMREXTTEXTOUT record
+ U_WMR_SETDIBTODEV, //!< 0x0D33 U_WMRSETDIBTODEV record
+ U_WMR_SELECTPALETTE, //!< 0x0234 U_WMRSELECTPALETTE record
+ U_WMR_REALIZEPALETTE, //!< 0x0035 U_WMRREALIZEPALETTE record
+ U_WMR_ANIMATEPALETTE, //!< 0x0436 U_WMRANIMATEPALETTE record
+ U_WMR_SETPALENTRIES, //!< 0x0037 U_WMRSETPALENTRIES record
+ U_WMR_POLYPOLYGON, //!< 0x0538 U_WMRPOLYPOLYGON record
+ U_WMR_RESIZEPALETTE, //!< 0x0139 U_WMRRESIZEPALETTE record
+ U_WMR_3A, //!< 0x003A U_WMR3A record
+ U_WMR_3B, //!< 0x003B U_WMR3B record
+ U_WMR_3C, //!< 0x003C U_WMR3C record
+ U_WMR_3D, //!< 0x003D U_WMR3D record
+ U_WMR_3E, //!< 0x003E U_WMR3E record
+ U_WMR_3F, //!< 0x003F U_WMR3F record
+ U_WMR_DIBBITBLT, //!< 0x0940 U_WMRDIBBITBLT record
+ U_WMR_DIBSTRETCHBLT, //!< 0x0B41 U_WMRDIBSTRETCHBLT record
+ U_WMR_DIBCREATEPATTERNBRUSH, //!< 0x0142 U_WMRDIBCREATEPATTERNBRUSH record
+ U_WMR_STRETCHDIB, //!< 0x0F43 U_WMRSTRETCHDIB record
+ U_WMR_44, //!< 0x0044 U_WMR44 record
+ U_WMR_45, //!< 0x0045 U_WMR45 record
+ U_WMR_46, //!< 0x0046 U_WMR46 record
+ U_WMR_47, //!< 0x0047 U_WMR47 record
+ U_WMR_EXTFLOODFILL, //!< 0x0548 U_WMREXTFLOODFILL record
+ U_WMR_49, //!< 0x0049 U_WMR49 record
+ U_WMR_4A, //!< 0x004A U_WMR4A record
+ U_WMR_4B, //!< 0x004B U_WMR4B record
+ U_WMR_4C, //!< 0x014C U_WMR4C record
+ U_WMR_4D, //!< 0x014D U_WMR4D record
+ U_WMR_4E, //!< 0x004E U_WMR4E record
+ U_WMR_4F, //!< 0x004F U_WMR4F record
+ U_WMR_50, //!< 0x0050 U_WMR50 record
+ U_WMR_51, //!< 0x0051 U_WMR51 record
+ U_WMR_52, //!< 0x0052 U_WMR52 record
+ U_WMR_53, //!< 0x0053 U_WMR53 record
+ U_WMR_54, //!< 0x0054 U_WMR54 record
+ U_WMR_55, //!< 0x0055 U_WMR55 record
+ U_WMR_56, //!< 0x0056 U_WMR56 record
+ U_WMR_57, //!< 0x0057 U_WMR57 record
+ U_WMR_58, //!< 0x0058 U_WMR58 record
+ U_WMR_59, //!< 0x0059 U_WMR59 record
+ U_WMR_5A, //!< 0x005A U_WMR5A record
+ U_WMR_5B, //!< 0x005B U_WMR5B record
+ U_WMR_5C, //!< 0x005C U_WMR5C record
+ U_WMR_5D, //!< 0x005D U_WMR5D record
+ U_WMR_5E, //!< 0x005E U_WMR5E record
+ U_WMR_5F, //!< 0x005F U_WMR5F record
+ U_WMR_60, //!< 0x0060 U_WMR60 record
+ U_WMR_61, //!< 0x0061 U_WMR61 record
+ U_WMR_62, //!< 0x0062 U_WMR62 record
+ U_WMR_63, //!< 0x0063 U_WMR63 record
+ U_WMR_64, //!< 0x0064 U_WMR64 record
+ U_WMR_65, //!< 0x0065 U_WMR65 record
+ U_WMR_66, //!< 0x0066 U_WMR66 record
+ U_WMR_67, //!< 0x0067 U_WMR67 record
+ U_WMR_68, //!< 0x0068 U_WMR68 record
+ U_WMR_69, //!< 0x0069 U_WMR69 record
+ U_WMR_6A, //!< 0x006A U_WMR6A record
+ U_WMR_6B, //!< 0x006B U_WMR6B record
+ U_WMR_6C, //!< 0x006C U_WMR6C record
+ U_WMR_6D, //!< 0x006D U_WMR6D record
+ U_WMR_6E, //!< 0x006E U_WMR6E record
+ U_WMR_6F, //!< 0x006F U_WMR6F record
+ U_WMR_70, //!< 0x0070 U_WMR70 record
+ U_WMR_71, //!< 0x0071 U_WMR71 record
+ U_WMR_72, //!< 0x0072 U_WMR72 record
+ U_WMR_73, //!< 0x0073 U_WMR73 record
+ U_WMR_74, //!< 0x0074 U_WMR74 record
+ U_WMR_75, //!< 0x0075 U_WMR75 record
+ U_WMR_76, //!< 0x0076 U_WMR76 record
+ U_WMR_77, //!< 0x0077 U_WMR77 record
+ U_WMR_78, //!< 0x0078 U_WMR78 record
+ U_WMR_79, //!< 0x0079 U_WMR79 record
+ U_WMR_7A, //!< 0x007A U_WMR7A record
+ U_WMR_7B, //!< 0x007B U_WMR7B record
+ U_WMR_7C, //!< 0x007C U_WMR7C record
+ U_WMR_7D, //!< 0x007D U_WMR7D record
+ U_WMR_7E, //!< 0x007E U_WMR7E record
+ U_WMR_7F, //!< 0x007F U_WMR7F record
+ U_WMR_80, //!< 0x0080 U_WMR80 record
+ U_WMR_81, //!< 0x0081 U_WMR81 record
+ U_WMR_82, //!< 0x0082 U_WMR82 record
+ U_WMR_83, //!< 0x0083 U_WMR83 record
+ U_WMR_84, //!< 0x0084 U_WMR84 record
+ U_WMR_85, //!< 0x0085 U_WMR85 record
+ U_WMR_86, //!< 0x0086 U_WMR86 record
+ U_WMR_87, //!< 0x0087 U_WMR87 record
+ U_WMR_88, //!< 0x0088 U_WMR88 record
+ U_WMR_89, //!< 0x0089 U_WMR89 record
+ U_WMR_8A, //!< 0x008A U_WMR8A record
+ U_WMR_8B, //!< 0x008B U_WMR8B record
+ U_WMR_8C, //!< 0x008C U_WMR8C record
+ U_WMR_8D, //!< 0x008D U_WMR8D record
+ U_WMR_8E, //!< 0x008E U_WMR8E record
+ U_WMR_8F, //!< 0x008F U_WMR8F record
+ U_WMR_90, //!< 0x0090 U_WMR90 record
+ U_WMR_91, //!< 0x0091 U_WMR91 record
+ U_WMR_92, //!< 0x0092 U_WMR92 record
+ U_WMR_93, //!< 0x0093 U_WMR93 record
+ U_WMR_94, //!< 0x0094 U_WMR94 record
+ U_WMR_95, //!< 0x0095 U_WMR95 record
+ U_WMR_96, //!< 0x0096 U_WMR96 record
+ U_WMR_97, //!< 0x0097 U_WMR97 record
+ U_WMR_98, //!< 0x0098 U_WMR98 record
+ U_WMR_99, //!< 0x0099 U_WMR99 record
+ U_WMR_9A, //!< 0x009A U_WMR9A record
+ U_WMR_9B, //!< 0x009B U_WMR9B record
+ U_WMR_9C, //!< 0x009C U_WMR9C record
+ U_WMR_9D, //!< 0x009D U_WMR9D record
+ U_WMR_9E, //!< 0x009E U_WMR9E record
+ U_WMR_9F, //!< 0x009F U_WMR9F record
+ U_WMR_A0, //!< 0x00A0 U_WMRA0 record
+ U_WMR_A1, //!< 0x00A1 U_WMRA1 record
+ U_WMR_A2, //!< 0x00A2 U_WMRA2 record
+ U_WMR_A3, //!< 0x00A3 U_WMRA3 record
+ U_WMR_A4, //!< 0x00A4 U_WMRA4 record
+ U_WMR_A5, //!< 0x00A5 U_WMRA5 record
+ U_WMR_A6, //!< 0x00A6 U_WMRA6 record
+ U_WMR_A7, //!< 0x00A7 U_WMRA7 record
+ U_WMR_A8, //!< 0x00A8 U_WMRA8 record
+ U_WMR_A9, //!< 0x00A9 U_WMRA9 record
+ U_WMR_AA, //!< 0x00AA U_WMRAA record
+ U_WMR_AB, //!< 0x00AB U_WMRAB record
+ U_WMR_AC, //!< 0x00AC U_WMRAC record
+ U_WMR_AD, //!< 0x00AD U_WMRAD record
+ U_WMR_AE, //!< 0x00AE U_WMRAE record
+ U_WMR_AF, //!< 0x00AF U_WMRAF record
+ U_WMR_B0, //!< 0x00B0 U_WMRB0 record
+ U_WMR_B1, //!< 0x00B1 U_WMRB1 record
+ U_WMR_B2, //!< 0x00B2 U_WMRB2 record
+ U_WMR_B3, //!< 0x00B3 U_WMRB3 record
+ U_WMR_B4, //!< 0x00B4 U_WMRB4 record
+ U_WMR_B5, //!< 0x00B5 U_WMRB5 record
+ U_WMR_B6, //!< 0x00B6 U_WMRB6 record
+ U_WMR_B7, //!< 0x00B7 U_WMRB7 record
+ U_WMR_B8, //!< 0x00B8 U_WMRB8 record
+ U_WMR_B9, //!< 0x00B9 U_WMRB9 record
+ U_WMR_BA, //!< 0x00BA U_WMRBA record
+ U_WMR_BB, //!< 0x00BB U_WMRBB record
+ U_WMR_BC, //!< 0x00BC U_WMRBC record
+ U_WMR_BD, //!< 0x00BD U_WMRBD record
+ U_WMR_BE, //!< 0x00BE U_WMRBE record
+ U_WMR_BF, //!< 0x00BF U_WMRBF record
+ U_WMR_C0, //!< 0x00C0 U_WMRC0 record
+ U_WMR_C1, //!< 0x00C1 U_WMRC1 record
+ U_WMR_C2, //!< 0x00C2 U_WMRC2 record
+ U_WMR_C3, //!< 0x00C3 U_WMRC3 record
+ U_WMR_C4, //!< 0x00C4 U_WMRC4 record
+ U_WMR_C5, //!< 0x00C5 U_WMRC5 record
+ U_WMR_C6, //!< 0x00C6 U_WMRC6 record
+ U_WMR_C7, //!< 0x00C7 U_WMRC7 record
+ U_WMR_C8, //!< 0x00C8 U_WMRC8 record
+ U_WMR_C9, //!< 0x00C9 U_WMRC9 record
+ U_WMR_CA, //!< 0x00CA U_WMRCA record
+ U_WMR_CB, //!< 0x00CB U_WMRCB record
+ U_WMR_CC, //!< 0x00CC U_WMRCC record
+ U_WMR_CD, //!< 0x00CD U_WMRCD record
+ U_WMR_CE, //!< 0x00CE U_WMRCE record
+ U_WMR_CF, //!< 0x00CF U_WMRCF record
+ U_WMR_D0, //!< 0x00D0 U_WMRD0 record
+ U_WMR_D1, //!< 0x00D1 U_WMRD1 record
+ U_WMR_D2, //!< 0x00D2 U_WMRD2 record
+ U_WMR_D3, //!< 0x00D3 U_WMRD3 record
+ U_WMR_D4, //!< 0x00D4 U_WMRD4 record
+ U_WMR_D5, //!< 0x00D5 U_WMRD5 record
+ U_WMR_D6, //!< 0x00D6 U_WMRD6 record
+ U_WMR_D7, //!< 0x00D7 U_WMRD7 record
+ U_WMR_D8, //!< 0x00D8 U_WMRD8 record
+ U_WMR_D9, //!< 0x00D9 U_WMRD9 record
+ U_WMR_DA, //!< 0x00DA U_WMRDA record
+ U_WMR_DB, //!< 0x00DB U_WMRDB record
+ U_WMR_DC, //!< 0x00DC U_WMRDC record
+ U_WMR_DD, //!< 0x00DD U_WMRDD record
+ U_WMR_DE, //!< 0x00DE U_WMRDE record
+ U_WMR_DF, //!< 0x00DF U_WMRDF record
+ U_WMR_E0, //!< 0x00E0 U_WMRE0 record
+ U_WMR_E1, //!< 0x00E1 U_WMRE1 record
+ U_WMR_E2, //!< 0x00E2 U_WMRE2 record
+ U_WMR_E3, //!< 0x00E3 U_WMRE3 record
+ U_WMR_E4, //!< 0x00E4 U_WMRE4 record
+ U_WMR_E5, //!< 0x00E5 U_WMRE5 record
+ U_WMR_E6, //!< 0x00E6 U_WMRE6 record
+ U_WMR_E7, //!< 0x00E7 U_WMRE7 record
+ U_WMR_E8, //!< 0x00E8 U_WMRE8 record
+ U_WMR_E9, //!< 0x00E9 U_WMRE9 record
+ U_WMR_EA, //!< 0x00EA U_WMREA record
+ U_WMR_EB, //!< 0x00EB U_WMREB record
+ U_WMR_EC, //!< 0x00EC U_WMREC record
+ U_WMR_ED, //!< 0x00ED U_WMRED record
+ U_WMR_EE, //!< 0x00EE U_WMREE record
+ U_WMR_EF, //!< 0x00EF U_WMREF record
+ U_WMR_DELETEOBJECT, //!< 0x01F0 U_WMRDELETEOBJECT record
+ U_WMR_F1, //!< 0x00F1 U_WMRF1 record
+ U_WMR_F2, //!< 0x00F2 U_WMRF2 record
+ U_WMR_F3, //!< 0x00F3 U_WMRF3 record
+ U_WMR_F4, //!< 0x00F4 U_WMRF4 record
+ U_WMR_F5, //!< 0x00F5 U_WMRF5 record
+ U_WMR_F6, //!< 0x00F6 U_WMRF6 record
+ U_WMR_CREATEPALETTE, //!< 0x00F7 U_WMRCREATEPALETTE record
+ U_WMR_F8 , //!< 0x00F8 U_WMRF8 record
+ U_WMR_CREATEPATTERNBRUSH, //!< 0x01F9 U_WMRCREATEPATTERNBRUSH record
+ U_WMR_CREATEPENINDIRECT, //!< 0x02FA U_WMRCREATEPENINDIRECT record
+ U_WMR_CREATEFONTINDIRECT, //!< 0x02FB U_WMRCREATEFONTINDIRECT record
+ U_WMR_CREATEBRUSHINDIRECT, //!< 0x02FC U_WMRCREATEBRUSHINDIRECT record
+ U_WMR_CREATEBITMAPINDIRECT, //!< 0x02FD U_WMRCREATEBITMAPINDIRECT record
+ U_WMR_CREATEBITMAP, //!< 0x06FE U_WMRCREATEBITMAP record
+ U_WMR_CREATEREGION, //!< 0x06FF U_WMRCREATEREGION record
+};
+#define U_WMR_MIN 0 //!< Minimum U_WMR_ value.
+#define U_WMR_MAX 255 //!< Maximum U_WMR_ value.
+#define U_WMR_MASK 0xFF //!< Mask for enumerator (lower) byte
+#define U_WMR_INVALID 0xFFFFFFFF //!< Indicates "Not a valid U_WMR_* value"
+
+
+/** BinaryRasterOperation Enumeration WMF manual 2.1.1.2
+
+ Same as U_EMF_EMRSETROP2 in uemf.h
+*/
+
+/** BitCount Enumeration WMF manual 2.1.1.3
+ \defgroup U_WMF_AltBitCount_Qualifiers WMF Alternate names for the values under EMF Bitcount Enumeration in uemf.h
+ @{
+*/
+#define BI_BITCOUNT_0 U_BCBM_EXPLICIT //!< Derived from JPG or PNG compressed image or ?
+#define BI_BITCOUNT_1 U_BCBM_MONOCHROME //!< 2 colors. bmiColors array has two entries
+#define BI_BITCOUNT_2 U_BCBM_COLOR4 //!< 2^4 colors. bmiColors array has 16 entries
+#define BI_BITCOUNT_3 U_BCBM_COLOR8 //!< 2^8 colors. bmiColors array has 256 entries
+#define BI_BITCOUNT_4 U_BCBM_COLOR16 //!< 2^16 colors. bmiColors is not used. Pixels are 5 bits B,G,R with 1 unused bit
+#define BI_BITCOUNT_5 U_BCBM_COLOR24 //!< 2^24 colors. bmiColors is not used. Pixels are U_RGBTRIPLE.
+#define BI_BITCOUNT_6 U_BCBM_COLOR32 //!< 2^32 colors. bmiColors is not used. Pixels are U_RGBQUAD.
+/** @} */
+
+/* BrushStyle Enumeration WMF manual 2.1.1.4
+ Same as "EMF LB_Style Enumeration" in uemf.h
+*/
+
+/* CharacterSet Enumeration WMF manual 2.1.1.5
+ Same as "EMF LF_CharSet Enumeration" in uemf.h
+*/
+
+/** ColorUsage Enumeration WMF manual 2.1.1.6
+ For cUsage fields in various DIB related records.
+ \defgroup U_WMF_Extra_iUsageSrc_Qualifiers WMF Extra DIBColors Enumeration
+ WMF is the same as "EMF DIBColors Enumeration" in uemf.h, except it also supports
+ this one extra value.
+ @{
+*/
+#define U_DIB_PAL_INDICES 2 //!< No color table, pixels are logical palette indices.
+/** @} */
+
+/** Compression Enumeration WMF manual 2.1.1.7
+ Same as "EMF BI_Compression Enumeration" in uemf.h with these additions
+ \defgroup U_WMF_EXTRA_BITMAPINFOHEADER_biCompression_Qualifiers WMF Extra BI_Compression Enumerations, none are implemented
+ @{
+*/
+#define U_BI_CMYK 0x000B //!< CMYK uncompressed
+#define U_BI_CMYKRLE8 0x000C //!< CMYK RLE8 compression
+#define U_BI_CMYKRLE4 = 0x000D //!< CMYK RLE4 compression
+/** @} */
+
+/* FamilyFont Enumeration WMF manual 2.1.1.8
+ Only used in a PitchAndFamily object, defined there
+*/
+
+/* FloodFill Enumeration WMF manual 2.1.1.9
+ Same as "EMF FloodFill Enumeration" in uemf.h
+*/
+
+/* FontQuality Enumeration WMF manual 2.1.1.10
+ Same as "EMF LF_Quality Enumeration" in uemf.h
+*/
+
+/* GamutMappingIntent Enumeration WMF manual 2.1.1.11
+ Same as "EMF LCS_Intent Enumeration" in uemf.h
+*/
+
+/* HatchStyle Enumeration WMF manual 2.1.1.12
+ Same as "EMF HatchStyle Enumeration" in uemf.h
+*/
+
+/* Layout Enumeration WMF manual 2.1.1.13
+ Same as "EMF Mirroring Enumeration" in uemf.h
+*/
+
+/** LogicalColorSpace Enumeration WMF manual 2.1.1.14
+ Not used presently, applies in BitmapV4Header
+ @{
+*/
+/* U_LCS_CALIBRATED_RGB is defined in uemf.h under LCS_CSType Enumeration, WMF manual also defines it, but do not replicate define.
+#define U_LCS_CALIBRATED_RGB 0x00000000 //!< calibrated RGB
+*/
+#define U_LCS_sRGB 0x73524742 //!< ASCII for "sRGB"
+#define U_LCS_WINDOWS_COLOR_SPACE 0x57696E20 //!< ASCII for "Win "
+/** @} */
+
+/* LogicalColorSpaceV5 Enumeration WMF manual 2.1.1.15
+ Same as "EMF Profile Enumeration" in uemf.h
+*/
+
+/* MapMode Enumeration WMF manual 2.1.1.16
+ Same as "EMF MapMode Enumeration" in uemf.h
+*/
+
+/** MetaFilesEscape Enumeration WMF manual 2.1.1.17
+ \defgroup U_WMF_MFEscape_Qualifiers WMF Metafile Escape record types
+ For U_WMRESCAPE eFunc field
+ @{
+*/
+#define U_MFE_NEWFRAME 0x0001 //!< NEWFRAME escape type
+#define U_MFE_ABORTDOC 0x0002 //!< ABORTDOC escape type
+#define U_MFE_NEXTBAND 0x0003 //!< NEXTBAND escape type
+#define U_MFE_SETCOLORTABLE 0x0004 //!< SETCOLORTABLE escape type
+#define U_MFE_GETCOLORTABLE 0x0005 //!< GETCOLORTABLE escape type
+#define U_MFE_FLUSHOUT 0x0006 //!< FLUSHOUT escape type
+#define U_MFE_DRAFTMODE 0x0007 //!< DRAFTMODE escape type
+#define U_MFE_QUERYESCSUPPORT 0x0008 //!< QUERYESCSUPPORT escape type
+#define U_MFE_SETABORTPROC 0x0009 //!< SETABORTPROC escape type
+#define U_MFE_STARTDOC 0x000A //!< STARTDOC escape type
+#define U_MFE_ENDDOC 0x000B //!< ENDDOC escape type
+#define U_MFE_GETPHYSPAGESIZE 0x000C //!< GETPHYSPAGESIZE escape type
+#define U_MFE_GETPRINTINGOFFSET 0x000D //!< GETPRINTINGOFFSET escape type
+#define U_MFE_GETSCALINGFACTOR 0x000E //!< GETSCALINGFACTOR escape type
+#define U_MFE_META_ESCAPE_ENHANCED_METAFILE 0x000F //!< META_ESCAPE_ENHANCED_METAFILE escape type
+#define U_MFE_SETPENWIDTH 0x0010 //!< SETPENWIDTH escape type
+#define U_MFE_SETCOPYCOUNT 0x0011 //!< SETCOPYCOUNT escape type
+#define U_MFE_SETPAPERSOURCE 0x0012 //!< SETPAPERSOURCE escape type
+#define U_MFE_PASSTHROUGH 0x0013 //!< PASSTHROUGH escape type
+#define U_MFE_GETTECHNOLOGY 0x0014 //!< GETTECHNOLOGY escape type
+#define U_MFE_SETLINECAP 0x0015 //!< SETLINECAP escape type
+#define U_MFE_SETLINEJOIN 0x0016 //!< SETLINEJOIN escape type
+#define U_MFE_SETMITERLIMIT 0x0017 //!< SETMITERLIMIT escape type
+#define U_MFE_BANDINFO 0x0018 //!< BANDINFO escape type
+#define U_MFE_DRAWPATTERNRECT 0x0019 //!< DRAWPATTERNRECT escape type
+#define U_MFE_GETVECTORPENSIZE 0x001A //!< GETVECTORPENSIZE escape type
+#define U_MFE_GETVECTORBRUSHSIZE 0x001B //!< GETVECTORBRUSHSIZE escape type
+#define U_MFE_ENABLEDUPLEX 0x001C //!< ENABLEDUPLEX escape type
+#define U_MFE_GETSETPAPERBINS 0x001D //!< GETSETPAPERBINS escape type
+#define U_MFE_GETSETPRINTORIENT 0x001E //!< GETSETPRINTORIENT escape type
+#define U_MFE_ENUMPAPERBINS 0x001F //!< ENUMPAPERBINS escape type
+#define U_MFE_SETDIBSCALING 0x0020 //!< SETDIBSCALING escape type
+#define U_MFE_EPSPRINTING 0x0021 //!< EPSPRINTING escape type
+#define U_MFE_ENUMPAPERMETRICS 0x0022 //!< ENUMPAPERMETRICS escape type
+#define U_MFE_GETSETPAPERMETRICS 0x0023 //!< GETSETPAPERMETRICS escape type
+#define U_MFE_POSTSCRIPT_DATA 0x0025 //!< POSTSCRIPT_DATA escape type
+#define U_MFE_POSTSCRIPT_IGNORE 0x0026 //!< POSTSCRIPT_IGNORE escape type
+#define U_MFE_GETDEVICEUNITS 0x002A //!< GETDEVICEUNITS escape type
+#define U_MFE_GETEXTENDEDTEXTMETRICS 0x0100 //!< GETEXTENDEDTEXTMETRICS escape type
+#define U_MFE_GETPAIRKERNTABLE 0x0102 //!< GETPAIRKERNTABLE escape type
+#define U_MFE_EXTTEXTOUT 0x0200 //!< EXTTEXTOUT escape type
+#define U_MFE_GETFACENAME 0x0201 //!< GETFACENAME escape type
+#define U_MFE_DOWNLOADFACE 0x0202 //!< DOWNLOADFACE escape type
+#define U_MFE_METAFILE_DRIVER 0x0801 //!< METAFILE_DRIVER escape type
+#define U_MFE_QUERYDIBSUPPORT 0x0C01 //!< QUERYDIBSUPPORT escape type
+#define U_MFE_BEGIN_PATH 0x1000 //!< BEGIN_PATH escape type
+#define U_MFE_CLIP_TO_PATH 0x1001 //!< CLIP_TO_PATH escape type
+#define U_MFE_END_PATH 0x1002 //!< END_PATH escape type
+#define U_MFE_OPEN_CHANNEL 0x100E //!< OPEN_CHANNEL escape type
+#define U_MFE_DOWNLOADHEADER 0x100F //!< DOWNLOADHEADER escape type
+#define U_MFE_CLOSE_CHANNEL 0x1010 //!< CLOSE_CHANNEL escape type
+#define U_MFE_POSTSCRIPT_PASSTHROUGH 0x1013 //!< POSTSCRIPT_PASSTHROUGH escape type
+#define U_MFE_ENCAPSULATED_POSTSCRIPT 0x1014 //!< ENCAPSULATED_POSTSCRIPT escape type
+#define U_MFE_POSTSCRIPT_IDENTIFY 0x1015 //!< POSTSCRIPT_IDENTIFY escape type
+#define U_MFE_POSTSCRIPT_INJECTION 0x1016 //!< POSTSCRIPT_INJECTION escape type
+#define U_MFE_CHECKJPEGFORMAT 0x1017 //!< CHECKJPEGFORMAT escape type
+#define U_MFE_CHECKPNGFORMAT 0x1018 //!< CHECKPNGFORMAT escape type
+#define U_MFE_GET_PS_FEATURESETTING 0x1019 //!< GET_PS_FEATURESETTING escape type
+#define U_MFE_MXDC_ESCAPE 0x101A //!< MXDC_ESCAPE escape type
+#define U_MFE_SPCLPASSTHROUGH2 0x11D8 //!< SPCLPASSTHROUGH2 escape type
+/** @} */
+
+/** MetafileType Enumeration WMF manual 2.1.1.18
+ @{
+*/
+#define U_MEMORYMETAFILE 0x0001 //!< memory metafile (never used by libUWMF)
+#define U_DISKMETAFILE 0x0002 //!< disk metafile (always used by libUWMF)
+/** @} */
+
+/** MetafileVersion Enumeration WMF manual 2.1.1.19
+ @{
+*/
+
+#define U_METAVERSION100 0x0100 //!< DIBs not allowed
+#define U_METAVERSION300 0x0300 //!< DIBs allowed
+/** @} */
+
+/* MixMode Enumeration WMF manual 2.1.1.20
+ Same as "EMF BackgroundMode Enumeration" in uemf.h
+*/
+
+/* OutPrecision Enumeration WMF manual 2.1.1.21
+ Same as "EMF LF_OutPrecision Enumeration" in uemf.h
+*/
+
+/** PaletteEntryFlag Enumeration WMF manual 2.1.1.22
+ @{
+*/
+#define U_PC_RESERVED 0x01 //!< used for animation
+#define U_PC_EXPLICIT 0x02 //!< low order word is palette index
+#define U_PC_NOCOLLAPSE 0x04 //!< store as new color in palette, do not match to existing color
+/** @} */
+
+/** PenStyle Enumeration WMF manual 2.1.1.23
+ Same as "EMF PenStyle Enumeration" in uemf.h,
+ EXCEPT no values >0xFFFF are used, in particular there is no U_PS_GEOMETRIC (ie, all are U_PS_COSMETIC).
+ Apparently because there is no U_PS_GEOMETRIC, U_PS_JOIN* and U_PS_ENDCAP* are also ignored by XP SP3 Preview
+ (which defaults to a rounded cap) and PowerPoint 2003 (which defaults to square cap). The behavior
+ was the same when escape records for JOIN and ENDCAP are used. Bottom line, WMF line formatting seems
+ to be very hit and miss from application to application.
+*/
+
+/* PitchFont Enumeration WMF manual 2.1.1.24
+ These are only used in PitchAndFamily object, defined there.
+*/
+
+/* PolyFillMode Enumeration WMF manual 2.1.1.25
+ These are the first two emtries in "EMF PolygonFillMode Enumeration" in uemf.h
+
+*/
+
+/** PostScriptCap Enumeration WMF manual 2.1.1.26
+ These are used in Escape Cap
+ @{
+*/
+#define U_WPS_CAP_NOTSET -2
+#define U_WPS_CAP_FLAT 0
+#define U_WPS_CAP_ROUND 1
+#define U_WPS_CAP_SQUARE 2
+/** @} */
+
+/* PostScriptClipping Enumeration WMF manual 2.1.1.27
+ PostFeatureSetting Enumeration WMF manual 2.1.1.28
+
+ These are used by postscript drivers, not supported by libUWEMF.
+*/
+
+/** PostScrioptJoin Enumeration WMF manual 2.1.1.29
+ These are used in Escape Cap
+ @{
+*/
+#define U_WPS_JOIN_NOTSET -2
+#define U_WPS_JOIN_MITER 0
+#define U_WPS_JOIN_ROUND 1
+#define U_WPS_JOIN_BEVEL 2
+/** @} */
+
+/* StretchMode Enumeration WMF manual 2.1.1.30
+ Same as "EMF StretchMode Enumeration" in uemf.h
+
+*/
+
+/* TernaryRasterOperation Enumeration WMF manual 2.1.1.31
+ Same as "EMF Ternary Raster Operation Enumeration" in uemf.h
+ Only partially supported in libUWMF.h
+*/
+
+/* ClipPrecision Flags WMF manual 2.1.2.1
+ Same as "EMF LF_ClipPrecision Enumeration" in uemf.h
+*/
+
+/* ExtTextOutOptions Flags WMF manual 2.1.2.2
+ These are a subset of "EMF ExtTextOutOptions Enumeration" in uemf.h
+
+ Not defined for WMF: U_ETO_NONE, U_ETO_GRAYED, U_ETO_NORECT,
+ U_ETO_SMALL_CHARS,U_ETO_IGNORELANGUAGE,U_ETO_REVERSE_INDEX_MAP
+
+ Defined for WMF: U_ETO_OPAQUE, U_ETO_CLIPPED, U_ETO_GLYPH_INDEX,
+ U_ETO_RTLREADING,_ETO_NUMERICSLOCAL,U_ETO_NUMERICSLATIN,
+ U_ETO_PDY
+*/
+
+/* TextAlignment Enumeration WMF manual 2.1.2.3
+ VertialTextAlignment Enumeration WMF manual 2.1.2.4
+ These are both in "EMF TextAlignment Enumeration" in uemf.h
+*/
+
+
+
+// ***************************************************************************
+// Miscellaneous Values
+/* TextAlignmentMode Flags WMF manual 2.1.2.3
+ VerticalTextAlignmentMode Flags WMF manual 2.1.2.4
+ Same as "EMF TextAlignment Enumeration" in uemf.h
+*/
+
+/** \defgroup U_WMF_MinimumRecord_sizes WMF Size in bytes of core record types.
+
+ The size of the object/record is USUALLY not the same
+ as the sizeof() of the corresponding struct, so in general it is unsafe to use sizeof() with this code.
+
+ Always use the U_SIZE_x instead!!!!
+
+ Note that some records may actually be much, much longer than their minimum size as they include strings,
+ bitmaps, and such.
+
+ Documentation for each value is:
+ + = same as struct size
+ or
+ X = different from struct size
+ followed by
+ Number (sizeof(struct) == size of the struct in bytes.)
+
+ @{
+*/
+#define U_SIZE_PAIRF 8 /**< + 8 this might be different on 64 bit platform */
+#define U_SIZE_COLORREF 4 /**< + 4 */
+#define U_SIZE_BRUSH 8 /**< + 8 */
+#define U_SIZE_FONT 19 /**< X 20 */
+#define U_SIZE_FONT_CORE 18 /**< X 20 Like U_FONT, but minus the FaceName part */
+#define U_SIZE_PLTNTRY 4 /**< + 4 */
+#define U_SIZE_PALETTE 8 /**< + 8 */
+#define U_SIZE_PEN 10 /**< + 10 */
+#define U_SIZE_POINT16 4 /**< + 4 */
+#define U_SIZE_RECT16 8 /**< + 8 */
+#define U_SIZE_REGION 20 /**< X 22 20 is minums the variable part */
+#define U_SIZE_BITMAP16 10 /**< + 10 */
+#define U_SIZE_BITMAPCOREHEADER 12 /**< + 12 */
+// also defined in uemf.h, avoid redefining. Same value in both places, of course.
+// # define U_SIZE_BITMAPINFOHEADER 40 /**< + 40 */
+#define U_SIZE_BITMAPV4HEADER 108 /**< ? 108 not tested */
+#define U_SIZE_BITMAPV5HEADER 124 /**< ? 124 not tested */
+#define U_SIZE_WLOGBRUSH 8 /**< + 8 */
+#define U_SIZE_POLYPOLYGON 4 /**< + 4 */
+#define U_SIZE_SCAN 8 /**< + 8 */
+#define U_SIZE_METARECORD 6 /**< X 8 */
+#define U_SIZE_WMRPLACEABLE 22 /**< X 24 */
+#define U_SIZE_WMRHEADER 18 /**< X 20 */
+#define U_SIZE_WMREOF 6 /**< X 8 */
+#define U_SIZE_WMRSETRELABS 6 /**< X 8 */
+#define U_SIZE_WMRSAVEDC 6 /**< X 8 */
+#define U_SIZE_WMRRESTOREDC 8 /**< * 8 */
+#define U_SIZE_WMRREALIZEPALETTE 6 /**< X 8 */
+#define U_SIZE_WMRSETBKCOLOR 10 /**< X 12 */
+#define U_SIZE_WMRSETTEXTCOLOR 10 /**< X 12 */
+#define U_SIZE_WMRSETBKMODE 8 /**< X 12 last 2 bytes are optional */
+#define U_SIZE_WMRSETROP2 8 /**< X 12 last 2 bytes are optional */
+#define U_SIZE_WMRSETPOLYFILLMODE 8 /**< X 12 last 2 bytes are optional */
+#define U_SIZE_WMRSETSTRETCHBLTMODE 8 /**< X 12 last 2 bytes are optional */
+#define U_SIZE_WMRSETTEXTALIGN 8 /**< X 12 last 2 bytes are optional */
+#define U_SIZE_WMRSETMAPMODE 8 /**< + 8 */
+#define U_SIZE_WMRSETTEXTCHAREXTRA 8 /**< + 8 */
+#define U_SIZE_WMRSETTEXTJUSTIFICATION 10 /**< X 12 */
+#define U_SIZE_WMRSETWINDOWORG 10 /**< X 12 */
+#define U_SIZE_WMRSETWINDOWEXT 10 /**< X 12 */
+#define U_SIZE_WMRSETVIEWPORTORG 10 /**< X 12 */
+#define U_SIZE_WMRSETVIEWPORTEXT 10 /**< X 12 */
+#define U_SIZE_WMROFFSETWINDOWORG 10 /**< X 12 */
+#define U_SIZE_WMROFFSETVIEWPORTORG 10 /**< X 12 */
+#define U_SIZE_WMRLINETO 10 /**< X 12 */
+#define U_SIZE_WMRMOVETO 10 /**< X 12 */
+#define U_SIZE_WMROFFSETCLIPRGN 10 /**< X 12 */
+#define U_SIZE_WMRSCALEWINDOWEXT 14 /**< X 16 */
+#define U_SIZE_WMRSCALEVIEWPORTEXT 14 /**< X 16 */
+#define U_SIZE_WMREXCLUDECLIPRECT 14 /**< X 16 */
+#define U_SIZE_WMRINTERSECTCLIPRECT 14 /**< X 16 */
+#define U_SIZE_WMRARC 22 /**< X 24 */
+#define U_SIZE_WMRELLIPSE 14 /**< X 16 */
+#define U_SIZE_WMRRECTANGLE 14 /**< X 16 */
+#define U_SIZE_WMRFLOODFILL 16 /**< + 16 */
+#define U_SIZE_WMREXTFLOODFILL 16 /**< + 16 */
+#define U_SIZE_WMRSETPIXEL 14 /**< X 16 */
+#define U_SIZE_WMRPIE 22 /**< X 24 */
+#define U_SIZE_WMRCHORD 22 /**< X 24 */
+#define U_SIZE_WMRROUNDRECT 18 /**< X 20 */
+#define U_SIZE_WMRPATBLT 18 /**< X 20 */
+#define U_SIZE_WMRTEXTOUT 8 /**< X 12 (not including String,y,x) */
+#define U_SIZE_WMRBITBLT_NOPX 24 /**< + 24 */
+#define U_SIZE_WMRBITBLT_PX 22 /**< X 32 */
+#define U_SIZE_WMRSTRETCHBLT_NOPX 28 /**< + 28 */
+#define U_SIZE_WMRSTRETCHBLT_PX 26 /**< X 36 */
+#define U_SIZE_WMRPOLYGON 10 /**< X 12 */
+#define U_SIZE_WMRPOLYLINE 10 /**< X 12 */
+#define U_SIZE_WMRESCAPE 10 /**< X 12 Data field could be completely absent */
+#define U_SIZE_WMRFILLREGION 10 /**< X 12 */
+#define U_SIZE_WMRFRAMEREGION 14 /**< X 16 */
+#define U_SIZE_WMRINVERTREGION 8 /**< + 8 */
+#define U_SIZE_WMRPAINTREGION 8 /**< + 8 */
+#define U_SIZE_WMRSELECTCLIPREGION 8 /**< + 8 */
+#define U_SIZE_WMRSELECTOBJECT 8 /**< + 8 */
+#define U_SIZE_WMRSELECTPALETTE 8 /**< + 8 */
+#define U_SIZE_WMRRESIZEPALETTE 8 /**< + 8 */
+#define U_SIZE_WMRDELETEOBJECT 8 /**< + 8 */
+#define U_SIZE_WMRDRAWTEXT 6 /**< X 8 */
+#define U_SIZE_WMRCREATEBITMAPINDIRECT 6 /**< X 8 */
+#define U_SIZE_WMRCREATEBITMAP 6 /**< X 8 */
+#define U_SIZE_WMRSETMAPPERFLAGS 10 /**< X 12 */
+#define U_SIZE_WMREXTTEXTOUT 14 /**< X 16 */
+#define U_SIZE_WMRSETDIBTODEV 22 /**< X 28 */
+#define U_SIZE_WMRANIMATEPALETTE 14 /**< X 16 */
+#define U_SIZE_WMRSETPALENTRIES 14 /**< X 16 */
+#define U_SIZE_WMRCREATEPALETTE 14 /**< X 16 */
+#define U_SIZE_WMRPOLYPOLYGON 10 /**< X 12 */
+#define U_SIZE_WMRDIBBITBLT_NOPX 24 /**< + 24 */
+#define U_SIZE_WMRDIBBITBLT_PX 22 /**< X 24 */
+#define U_SIZE_WMRDIBSTRETCHBLT_NOPX 28 /**< + 28 */
+#define U_SIZE_WMRDIBSTRETCHBLT_PX 26 /**< X 28 */
+#define U_SIZE_WMRDIBCREATEPATTERNBRUSH 10 /**< X 12 */
+#define U_SIZE_WMRSTRETCHDIB 28 /**< X 32 */
+#define U_SIZE_WMRCREATEPATTERNBRUSH 6 /**< X 8 */
+#define U_SIZE_WMRCREATEPENINDIRECT 16 /**< + 16 */
+#define U_SIZE_WMRCREATEFONTINDIRECT 26 /**< X 28 */
+#define U_SIZE_WMRCREATEBRUSHINDIRECT 14 /**< X 16 */
+#define U_SIZE_WMRCREATEREGION 26 /**< X 28 */
+#define U_SIZE_WMRCREATEREGION_CORE 24 /**< X 28 Like U_SIZE_WMRCREATEREGION minus the variable part */
+/** @} */
+
+
+// ***************************************************************************
+// Macros
+
+/** \defgroup U_WMF_Common_macros WMF Common Macros
+Because Size16_4 may not be aligned no tests should dereference it directly from a pointer.
+in NOPX tests cast causes uint8_t to promote to uint32_t, without it c++ compiler complains about
+comparison of int with unsigned int
+ @{
+*/
+#define U_TEST_NOPX2(A,B) (A == (uint32_t) (B + 3)) //!< A is Size16_4 (extracted and aligned), B = xb true if no bitmap associated with the structure, used with some BLT records.
+#define U_TEST_NOPXB(A,B) (A/2 == (uint32_t) (B + 3)) //!< A is Size16_4 (extracted and aligned)*2, B = xb, true if no bitmap associated with the structure, used with some BLT records.
+#define U_WMRTYPE(A) (((U_METARECORD *)A)->iType) //!< Get iType from U_WMR* record.
+#define U_WMRXB(A) (((U_METARECORD *)A)->xb) //!< Get xb from U_WMR* record.
+#define U_WMR_XB_FROM_TYPE(A) ((uint8_t) (U_wmr_values(A)>>8)) //!< Get xb from type value.
+#define U_U16(A) (*(uint16_t *)&A) //!< interpret a 16 bit type as uint16_t.
+#define U_P16(A) ( (uint16_t *)&A) //!< pass any 16 bit type as a pointer to a uint16_t.
+#define U_PP16(A) ( (uint16_t *) A) //!< pass any pointer to a 16 bit type as a pointer to a uint16_t.
+
+/** @} */
+
+/* ************************************************************
+ WMF structures OTHER than those corresponding to complete U_WMR_* records
+ ************************************************************ */
+
+/** Brush Object WMF manual 2.2.1.1
+
+ Documentation is muddy, bColor and bHatch fields have different meanings depending on
+ the value of bStyle. Unclear if bHatch bytes are present in some cases from the
+ documentation.
+
+ style Color Data
+ U_BS_SOLID ColorRef Object Not used (bytes present???)
+ U_BS_NULL ignored ignored (bytes present???).
+ U_BS_PATTERN ignored Bitmap16 object holding patern
+ U_BS_DIBPATTERNPT ColorUsage Enum DIB object
+ U_BS_HATCHED ColorRef Object HatchStyle Enumeration
+*/
+typedef struct {
+ uint16_t Style; //!< BrushStyle Enumeration
+ U_COLORREF Color; //!< Brush Color value, 32 bit value is not aligned.
+ uint8_t Data[1]; //!< Brush pattern information, variable size and format
+} U_BRUSH;
+
+
+/** Font Object WMF manual 2.2.1.2
+ Warning, only pass by pointer, passing by value will will truncate in Facename!
+*/
+typedef struct {
+ int16_t Height; //!< Height in Logical units
+ int16_t Width; //!< Average Width in Logical units
+ int16_t Escapement; //!< Angle in 0.1 degrees betweem escapement vector and X axis
+ int16_t Orientation; //!< Angle in 0.1 degrees between baseline and X axis
+ int16_t Weight; //!< LF_Weight Enumeration
+ uint8_t Italic; //!< LF_Italic Enumeration
+ uint8_t Underline; //!< LF_Underline Enumeration
+ uint8_t StrikeOut; //!< LF_StrikeOut Enumeration
+ uint8_t CharSet; //!< LF_CharSet Enumeration
+ uint8_t OutPrecision; //!< LF_OutPrecision Enumeration
+ uint8_t ClipPrecision; //!< LF_ClipPrecision Enumeration
+ uint8_t Quality; //!< LF_Quality Enumeration
+ uint8_t PitchAndFamily; //!< LF_PitchAndFamily Enumeration
+ uint8_t FaceName[1]; //!< Name of font. ANSI Latin1, null terminated.
+} U_FONT;
+
+/** PaletteEntry Object WMF manual 2.2.2.13
+ Note, NOT compatiable with U_LOGPLTNTRY
+ Out of PDF order because needed for next struture.
+*/
+typedef struct {
+ uint8_t Value; //!< 0 or PaletteEntryFlag Enumeration
+ uint8_t Blue; //!< Palette entry Blue Intensity
+ uint8_t Green; //!< Palette entry Green Intensity
+ uint8_t Red; //!< Palette entry Red Intensity
+} U_PLTNTRY;
+
+/** Palette Object WMF manual 2.2.1.3
+ NOT Same as "EMF LogPalette Object" in uemf.h because Palette Entries have reversed colors.
+ Values for palVersion are expanded
+
+ Start must be 0x0300 (as for EMF) with U_WMRCREATEPALETTE but is an offset
+ for U_WMRSETPALENTRIES and U_ANIMATEPALETTE
+*/
+typedef struct {
+ uint16_t Start; //!< Either 0x0300 or an offset into the Palette table
+ uint16_t NumEntries; //!< Number of U_LOGPLTNTRY objects
+ U_PLTNTRY PalEntries[1]; //!< Array of PaletteEntry Objects
+} U_PALETTE;
+
+/** Pen Object WMF manual 2.2.1.4
+*/
+typedef struct {
+ uint16_t Style; //!< PenStyle Enumeration
+ uint16_t Widthw[2]; //!< reassemble/store the Pen Width in object dimensions using Widthw, the 32 bit value is not aligned
+ U_COLORREF Color; //!< Pen Color, the 32 bit value is not aligned.
+} U_PEN;
+
+/** Rect Object WMF manual 2.2.2.18
+ \brief Coordinates of the upper left, lower right corner.
+ Note that the coordinate system is 0,0 in the upper left corner
+ of the screen an N,M in the lower right corner.
+ Microsoft name: RECT Object COLLIDES with EMF Rect Object.
+
+ This one is out of order because it is needed early.
+*/
+typedef struct {
+ int16_t left; //!< left coordinate
+ int16_t top; //!< top coordinate
+ int16_t right; //!< right coordinate
+ int16_t bottom; //!< bottom coordinate
+} U_RECT16;
+
+#define U_RCL16_DEF (U_RECT16){0,0,-1,-1} //!< Use this when no bounds are needed.
+
+/** Region Object WMF manual 2.2.1.5
+*/
+typedef struct {
+ uint16_t ignore1; //!< unused value
+ uint16_t Type; //!< must be 0x0006.
+ uint16_t ignore2; //!< unused value
+ int16_t Size; //!< aScans in bytes + regions size in bytes (size of this header plus all U_SCAN objects?)
+ int16_t sCount; //!< number of scanlines in region
+ int16_t sMax; //!< largest number of points in any scan
+ U_RECT16 sRect; //!< bounding rectangle
+ uint16_t aScans[1]; //!< series of appended U_SCAN objects
+} U_REGION;
+
+/** Bitmap16 Object WMF manual 2.2.2.1
+
+ The U_BITMAP16 core is always followed by
+ uint8_t Bits[1]; //!< bitmap pixel data. Bytes contained = (((Width * BitsPixel + 15) >> 4) << 1) * Height
+ Note that in U_WMRCREATEPATTERNBRUSH Bits is always [4].
+
+*/
+typedef struct {
+ int16_t Type; //!< "bitmap type" MS PDF does not define this field beyond this.
+ int16_t Width; //!< bitmap width in pixels.
+ int16_t Height; //!< bitmap height in scan lines.
+ int16_t WidthBytes; //!< bytes per scan line.
+ uint8_t Planes; //!< must be 1.
+ uint8_t BitsPixel; //!< number of adjacent color bits on each plane (R bits + G bits + B bits ????)
+} U_BITMAP16;
+
+/** BitmapCoreHeader Object WMF manual 2.2.2.2
+*/
+typedef struct {
+ uint16_t Size_4[2]; //!< size of U_BITMAPCOREHEADER in bytes.
+ uint16_t Width; //!< DIB width in pixels.
+ uint16_t Height; //!< DIB height in pixels.
+ uint16_t Planes; //!< must be 1
+ uint16_t BitCount; //!< Pixel Format (BitCount Enumeration)
+} U_BITMAPCOREHEADER;
+
+
+/** BitmapInfoHeader Object WMF manual 2.2.2.3
+ Same as "EMF BITMAPINFOHEADER Object" in uemf.h
+ use U_BITMAPINFOHEADER
+*/
+
+//! \cond
+/** BitmapV4Header Object WMF manual 2.2.2.4
+*/
+typedef struct {
+ uint32_t bV4Size;
+ int32_t bV4Width;
+ int32_t bV4Height;
+ uint16_t bV4Planes;
+ uint16_t bV4BitCount;
+ uint32_t bV4Compression;
+ uint32_t bV4SizeImage;
+ int32_t bV4XPelsPerMeter;
+ int32_t bV4YPelsPerMeter;
+ uint32_t bV4ClrUsed;
+ uint32_t bV4ClrImportant;
+ uint32_t bV4RedMask;
+ uint32_t bV4GreenMask;
+ uint32_t bV4BlueMask;
+ uint32_t bV4AlphaMask;
+ uint32_t bV4CSType;
+ U_CIEXYZTRIPLE bV4EndPoints;
+ uint32_t bV4GammaRed;
+ uint32_t bV4GammaGreen;
+ uint32_t bV4GammaBlue;
+} U_BITMAPV4HEADER; //!< For ?
+
+
+/** BitmapV5Header Object WMF manual 2.2.2.5
+*/
+typedef struct {
+ uint32_t bV5Size;
+ int32_t bV5Width;
+ int32_t bV5Height;
+ uint16_t bV5Planes;
+ uint16_t bV5BitCount;
+ uint32_t bV5Compression;
+ uint32_t bV5SizeImage;
+ int32_t bV5XPelsPerMeter;
+ int32_t bV5YPelsPerMeter;
+ uint32_t bV5ClrUsed;
+ uint32_t bV5ClrImportant;
+ uint32_t bV5RedMask;
+ uint32_t bV5GreenMask;
+ uint32_t bV5BlueMask;
+ uint32_t bV5AlphaMask;
+ uint32_t bV5CSType;
+ U_CIEXYZTRIPLE bV5Endpoints;
+ uint32_t bV5GammaRed;
+ uint32_t bV5GammaGreen;
+ uint32_t bV5GammaBlue;
+ uint32_t bV5Intent;
+ uint32_t bV5ProfileData;
+ uint32_t bV5ProfileSize;
+ uint32_t bV5Reserved;
+} U_BITMAPV5HEADER; //!< For ?
+//! \endcond
+
+
+
+/** CIEXYZ Object WMF manual 2.2.2.6
+ Same as "EMF CIEXYZ Object" in uemf.h
+*/
+
+/** CIEXYZTriple Object WMF manual 2.2.2.7
+ Same as "EMF CIEXYZTRIPLE Object" in uemf.h
+*/
+
+/** ColorRef Object WMF manual 2.2.2.8
+ Same as "EMF COLORREF Object" in uemf.h
+*/
+
+/** DeviceIndependentBitmap Object WMF manual 2.2.2.9
+This "object" has an organization, but not one that can be easily expressed with a C struct. It consists of
+three parts, all of which have variable size:
+
+ DIBHeaderInfo BitmapCoreHeader or BitmapInfoHeader Object
+ Colors Array of RGBQuad Objects or uint16_t that make a color table, as determined from the DIBHeaderInfo field.
+ BitMapBuffer Array of bytes containing the image.
+
+*/
+
+/** WLogBrush Object WMF manual 2.2.2.10
+ Not compatible with EMF LogBrush object!
+
+ style Color Hatch
+ U_BS_SOLID ColorRef Object Not used (bytes present???)
+ U_BS_NULL ignored ignored (bytes present???).
+ U_BS_PATTERN ignored not used (Action is not strictly defined)
+ U_BS_DIBPATTERN ignored not used (Action is not strictly defined)
+ U_BS_DIBPATTERNPT ignored not used (Action is not strictly defined)
+ U_BS_HATCHED ColorRef Object HatchStyle Enumeration
+*/
+typedef struct {
+ uint16_t Style; //!< BrushStyle Enumeration
+ U_COLORREF Color; //!< Brush Color value, 32 bit value is not aligned.
+ uint16_t Hatch; //!< HatchStyle Enumeration
+} U_WLOGBRUSH;
+
+/* LogColorSpace Object WMF manual 2.2.2.11
+ Same as "EMF LOGCOLORSPACEA Object" in uemf.h
+ use U_LOGCOLORSPACEA
+*/
+
+/* LogColorSpaceW Object WMF manual 2.2.2.12
+ Same as "EMF LOGCOLORSPACEW Object" in uemf.h
+ use U_LOGCOLORSPACEW
+*/
+
+
+/* PaletteEntry Object WMF manual 2.2.2.13
+ moved up before Palette Object */
+
+/* PitchAndFamily Enumerations WMF manual 2.2.2.14
+ Same as "EMF LF_PitchAndFamily Enumeration" in uemf.h
+*/
+
+/* PointL Object WMF manual 2.2.2.15
+ Same as "EMF Point Object" in uemf.h
+*/
+
+/* PointS Object WMF manual 2.2.2.16
+ Same as "EMF POINTS Object" in uemf.h
+*/
+
+/* PolyPolygon Object WMF manual 2.2.2.17 */
+/** WMF manual 2.2.2.17
+
+ There is an array "aPoints" of uint16_t after aPolyCounts that holds the coordinates.
+
+ Presumably it is in order [x1,y1],[x2,y2],etc. The documentation does not say, it might have
+ y then x.
+
+ aPoints starts at aPolyCounts[nPolys]
+*/
+typedef struct {
+ uint16_t nPolys; //!< Number of polygons
+ uint16_t aPolyCounts[1]; //!< Number of points in each polygon (sequential)
+} U_POLYPOLYGON;
+
+/* Rect Object WMF manual 2.2.2.18
+ This one is out of order, had to be created much earlier than this
+*/
+
+/* RectL Object WMF manual 2.2.2.19
+ Same as "EMF RECT Object" in uemf.h
+*/
+
+/* RGBQuad Object WMF manual 2.2.2.20
+ Same as "EMF RGBQUAD Object" in uemf.h
+*/
+
+/** Scan Object WMF manual 2.2.2.21 */
+/** WMF manual 2.2.2.21
+
+ Mandatory field "count2" must follow ScanLines, but it cannot be placed into the struct because
+ ScanLines has variable size. "count2" is
+ an uint16_t value which must have the same value as count.
+*/
+typedef struct {
+ uint16_t count; //!< Number of entries in the ScanLines array
+ uint16_t top; //!< Y coordinate of the top scanline
+ uint16_t bottom; //!< Y coordinate of the bottom scanline
+ uint16_t ScanLines[1]; //!< Array of 16 bit left/right pairs
+} U_SCAN;
+
+/** SizeL Object WMF manual 2.2.2.22
+ Same as "EMF SIZEL Object" in uemf.h
+*/
+
+
+/** First three fields of MOST WMF records (not WMR_HEADER and WMR_PLACEABLE!)
+
+ This Sshould only used for accessing size and type fields.
+ It is NOT used as a prefix like U_EMR in uemf.h because it may cause alignment issues.
+ Microsoft name: WMF Object
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+} U_METARECORD;
+
+/** WMF manual 2.3.2.3 META_PLACEABLE
+ If present this must immediately precede the header.
+ It is not enumerated as an WMR record type.
+ This only ever occurs at the start of a WMF file, so the two uint32_t values will always be aligned.
+*/
+typedef struct {
+ uint32_t Key; //!< MUST be 0x9AC6CDD7
+ uint16_t HWmf; //!< 0. (Always. Manual says total number of 16bit words in record, but no examples found like that)
+ U_RECT16 Dst; //!< Destination bounding box in logical units
+ uint16_t Inch; //!< Logical units/inch (convention if not specified: 1440 logical units/inch)
+ uint32_t Reserved; //!< must be 0
+ uint16_t Checksum; //!< Checksum of preceding 10 16 bit values
+} U_WMRPLACEABLE;
+
+/** WMF manual 2.3.2.2 META_HEADER
+*/
+typedef struct {
+ uint8_t iType; //!< RecordType Enumeration, must be 1
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t Size16w; //!< Total number of 16bit words in record
+ uint16_t version; //!< Metafile version Enumeration
+ uint16_t Sizew[2]; //!< reassemble/store the Size (16 bit words in entire file) using Sizew, the 32 bit value is not aligned
+ uint16_t nObjects; //!< Total number of brushes, pens, and other graphics objects defined in this file
+ uint32_t maxSize; //!< Largest record in file, in number of 16bit words (This uint32_t is aligned)
+ uint16_t nMembers; //!< Unused, should be 0
+} U_WMRHEADER;
+
+
+// ***********************************************************************************
+// The following structures correspond to U_WMR_# records
+
+/* Index 00 U_WMREOF WMF manual 2.3.2.1 META_EOF */
+/** WMF manual 2.3.2.1 META_EOF
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+} U_WMREOF,
+ U_WMRSETRELABS, //!< WMF manual 2.3.5.21
+ U_WMRSAVEDC, //!< WMF manual 2.3.5.11
+ U_WMRREALIZEPALETTE; //!< WMF manual 2.3.5.8
+
+/* Index 01 U_WMRSETBKCOLOR WMF manual 2.3.5.14 */
+/** WMF manual 2.3.5.14
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ U_COLORREF Color; //!< Color value, the 32 bit value is not aligned.
+} U_WMRSETBKCOLOR,
+ U_WMRSETTEXTCOLOR; //!< WMF manual 2.3.5.26
+
+/* Index 02 U_WMRSETBKMODE WMF manual 2.3.5.15 */
+/** WMF manual 2.3.5.15
+mode = MixMode Enumeration.
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t Mode; //!< Various Enumeraton.
+ uint16_t Reserved; //!< Ignore (ALSO OPTIONAL - FIELD MAY NOT BE PRESENT!!!!)
+} U_WMRSETBKMODE,
+ U_WMRSETPOLYFILLMODE, //!< WMF manual 2.3.5.20 Mode = PolyFillMode Enumeration.
+ U_WMRSETROP2, //!< WMF manual 2.3.5.22 Binary Raster Operation Enumeration.
+ U_WMRSETSTRETCHBLTMODE, //!< WMF manual 2.3.5.23 Mode = StretchMode Enumeration
+ U_WMRSETTEXTALIGN; //!< WMF manual 2.3.5.24 Mode = TextAlignment Enumeration.
+
+/* Index 03 U_WMRSETMAPMODE WMF manual 2.3.5.17 */
+/** WMF manual 2.3.5.17
+Mode = MapMode Enumeration.
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t Mode; //!< Various Enumeraton and other
+} U_WMRSETMAPMODE,
+ U_WMRSETTEXTCHAREXTRA; //!< WMF manual 2.3.5.25, Mode = Extra space in logical units to add to each character
+
+/* Index 04 U_WMRSETROP2 WMF manual 2.3.5.22 See Index 02 */
+
+/* Index 05 U_WMRSETRELABS WMF manual 2.3.5.21 See Index 00*/
+
+/* Index 06 U_WMRSETPOLYFILLMODE WMF manual 2.3.5.20 See Index 02
+ Index 07 U_WMRSETSTRETCHBLTMODE WMF manual 2.3.5.23 */
+
+/* Index 08 U_WMRSETTEXTCHAREXTRA WMF manual 2.3.5.25 See Index 03*/
+
+/* Index 09 U_WMRSETTEXTCOLOR WMF manual 2.3.5.26 see Index 01 */
+
+/* Index 0A U_WMRSETTEXTJUSTIFICATION WMF manual 2.3.5.27 */
+/** WMF manual 2.3.5.27
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t Count; //!< Number of space characters in the line
+ uint16_t Extra; //!< Number of extra space characters to add to the line
+} U_WMRSETTEXTJUSTIFICATION;
+
+/* Index 0B U_WMRSETWINDOWORG WMF manual 2.3.5.31
+ Index 0C U_WMRSETWINDOWEXT WMF manual 2.3.5.30
+ Index 0D U_WMRSETVIEWPORTORG WMF manual 2.3.5.29
+ Index 0E U_WMRSETVIEWPORTEXT WMF manual 2.3.5.28
+ Index 0F U_WMROFFSETWINDOWORG WMF manual 2.3.5.7
+ Index 0F U_WMROFFSETVIEWPORTORG WMF manual 2.3.5.6
+ Index 13 U_WMRLINETO WMF manual 2.3.3.10
+ Index 14 U_WMRMOVETO WMF manual 2.3.3.4
+ Index 20 U_WMROFFSETCLIPRGN WMF manual 2.3.5.5
+*/
+/** WMF manual 2.3.5.31
+Window X,Y origin
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ int16_t y; //!< Y value (note order!)
+ int16_t x; //!< X value
+} U_WMRSETWINDOWORG,
+ U_WMRSETWINDOWEXT, //!< WMF manual 2.3.5.30, Window X,Y extent
+ U_WMRSETVIEWPORTORG, //!< WMF manual 2.3.5.29, Viewport X,Y origin
+ U_WMRSETVIEWPORTEXT, //!< WMF manual 2.3.5.28, Viewport X,Y extent
+ U_WMROFFSETWINDOWORG, //!< WMF manual 2.3.5.7, Window X,Y offset in device units
+ U_WMROFFSETVIEWPORTORG, //!< WMF manual 2.3.5.6, Viewport X,Y offset in device units
+ U_WMRLINETO, //!< WMF manual 2.3.3.10, Endpoint X,Y in logical units
+ U_WMRMOVETO, //!< WMF manual 2.3.3.4, Destination X,Y in logical units
+ U_WMROFFSETCLIPRGN; //!< WMF manual 2.3.5.5, Y offset in logical units
+
+/* Index 10 U_WMRSCALEWINDOWEXT WMF manual 2.3.5.13
+ Index 12 U_WMRSCALEVIEWPORTEXT WMF manual 2.3.5.12
+*/
+/** WMF manual 2.3.5.13
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ int16_t yDenom; //!< Y denominator
+ int16_t yNum; //!< Y numerator
+ int16_t xDenom; //!< X denominator
+ int16_t xNum; //!< X numerator
+} U_WMRSCALEWINDOWEXT,
+ U_WMRSCALEVIEWPORTEXT; //!< WMF manual 2.3.5.12
+
+/* Index 11 U_WMROFFSETVIEWPORTORG WMF manual 2.3.5.6 see Index 0B */
+
+/* Index 12 U_WMRSCALEVIEWPORTEXT WMF manual 2.3.5.12 see Index 10 */
+
+/* Index 13 U_WMRLINETO WMF manual 2.3.3.10 see index 0B
+ Index 14 U_WMRMOVETO WMF manual 2.3.5.4 */
+
+/* Index 15 U_WMREXCLUDECLIPRECT WMF manual 2.3.5.2
+ Index 16 U_WMRINTERSECTCLIPRECT WMF manual 2.3.5.3
+*/
+/** WMF manual 2.3.5.2
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ int16_t Bottom; //!< Coordinates in logical units
+ int16_t Right; //!< Coordinates in logical units
+ int16_t Top; //!< Coordinates in logical units
+ int16_t Left; //!< Coordinates in logical units
+} U_WMREXCLUDECLIPRECT,
+ U_WMRINTERSECTCLIPRECT; //!< WMF manual 2.3.5.3
+
+/* Index 17 U_WMRARC WMF manual 2.3.3.1 */
+/** WMF manual 2.3.3.1
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ int16_t yEndArc; //!< Coordinates in logical units
+ int16_t xEndArc; //!< Coordinates in logical units
+ int16_t yStartArc; //!< Coordinates in logical units
+ int16_t xStartArc; //!< Coordinates in logical units
+ int16_t Bottom; //!< Coordinates in logical units
+ int16_t Right; //!< Coordinates in logical units
+ int16_t Top; //!< Coordinates in logical units
+ int16_t Left; //!< Coordinates in logical units
+} U_WMRARC;
+
+/* Index 18 U_WMRELLIPSE WMF manual 2.3.3.3
+ Index 1B U_WMRRECTANGLE WMF manual 2.3.3.17
+*/
+/** WMF manual 2.3.3.3
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ int16_t Bottom; //!< Coordinates in logical units
+ int16_t Right; //!< Coordinates in logical units
+ int16_t Top; //!< Coordinates in logical units
+ int16_t Left; //!< Coordinates in logical units
+} U_WMRELLIPSE,
+ U_WMRRECTANGLE; //!< WMF manual 2.3.3.17
+
+/* Index 19 U_WMRFLOODFILL WMF manual 2.3.3.7
+ Index 48 U_WMREXTFLOODFILL WMF manual 2.3.3.4
+*/
+/** WMF manual 2.3.3.7
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ int16_t Mode; //!< FloodFill Enumeration
+ U_COLORREF Color; //!< Color
+ int16_t y; //!< Y
+ int16_t x; //!< X
+} U_WMRFLOODFILL,
+ U_WMREXTFLOODFILL; //!< WMF manual 2.3.3.7
+
+/* Index 1A U_WMRPIE WMF manual 2.3.3.13
+ Index 30 U_WMRCHORD WMF manual 2.3.3.2
+*/
+/** WMF manual 2.3.3.13
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ int16_t yRadial2; //!< in logical units
+ int16_t xRadial2; //!< in logical units
+ int16_t yRadial1; //!< in logical units
+ int16_t xRadial1; //!< in logical units
+ int16_t Bottom; //!< in logical units
+ int16_t Right; //!< in logical units
+ int16_t Top; //!< in logical units
+ int16_t Left; //!< in logical units
+} U_WMRPIE,
+ U_WMRCHORD; //!< WMF manual 2.3.3.2
+
+/* Index 1B U_WMRRECTANGLE WMF manual 2.3.3.17 See Index 18 */
+
+/* Index 1C U_WMRROUNDRECT WMF manual 2.3.3.18 */
+/** WMF manual 2.3.3.18
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ int16_t Height; //!< in logical units (rounded corner)
+ int16_t Width; //!< in logical units (rounded corner)
+ int16_t Bottom; //!< in logical units
+ int16_t Right; //!< in logical units
+ int16_t Top; //!< in logical units
+ int16_t Left; //!< in logical units
+} U_WMRROUNDRECT;
+
+/* Index 1D U_WMRPATBLT WMF manual 2.3.3.12
+*/
+/** WMF manual 2.3.3.12
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t rop3w[2]; //!< reassemble/store the rop3 Ternary raster operation using rop3w, as the 32 bit value is not aligned
+ int16_t Height; //!< in logical units (of Rect to Fill)
+ int16_t Width; //!< in logical units (of Rect to Fill)
+ int16_t yDst; //!< in logical units (UL corner to fill)
+ int16_t xDst; //!< in logical units (UL corner to fill)
+} U_WMRPATBLT;
+
+/* Index 1E U_WMRSAVEDC WMF manual 2.3.5.11 See Index 00*/
+
+/* Index 1F U_WMRSETPIXEL WMF manual 2.3.3.19 */
+/** WMF manual 2.3.3.19
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ U_COLORREF Color; //!< Color
+ int16_t y; //!< Y
+ int16_t x; //!< X
+} U_WMRSETPIXEL;
+
+/* Index 20 U_WMROFFSETCLIPRGN WMF manual 2.3.5.5 See Index 0B*/
+
+/* Index 21 U_WMRTEXTOUT WMF manual 2.3.3.20
+*/
+/** WMF manual 2.3.3.20
+Also part of the record, following String, and so at variable positions:
+
+int16_t y; start position
+
+int16_t x; start position
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ int16_t Length; //!< Stringlength in bytes
+ uint8_t String; //!< String to write, storage area must be 2n bytes.
+} U_WMRTEXTOUT;
+
+/* Index 22 U_WMRBITBLT WMF manual 2.3.1.1
+*/
+/** WMF manual 2.3.1.1
+
+ This is a variable structure the core/invariant part extends to xSrc.
+
+ if RecordSize == ((xb) + 3) then there is no bitmap and use the _NOPX form, otherwise use the _PX form
+ Use Macro U_TEST_NOPX2
+
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t rop3w[2]; //!< reassemble/store the Ternary raster operation rop3 value using rop3w, the 32 bit value is not aligned.
+ int16_t ySrc; //!< in logical units (UL corner of Src rect)
+ int16_t xSrc; //!< in logical units (UL corner of Src rect)
+ int16_t ignore; //!< ignore
+ int16_t Height; //!< in logical units (of Src and Dst rects)
+ int16_t Width; //!< in logical units (of Src and Dst rects)
+ int16_t yDst; //!< in logical units (UL corner of Dst rect)
+ int16_t xDst; //!< in logical units (UL corner of Dst rect)
+} U_WMRBITBLT_NOPX;
+
+/** WMF manual 2.3.1.1
+
+ This is a variable structure the core/invariant part extends to xSrc.
+
+ if RecordSize == ((xb) + 3) then there is no bitmap and use the _NOPX form, otherwise use the _PX form
+ Use Macro U_TEST_NOPX2
+
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t rop3w[2]; //!< reassemble/store the Ternary raster operation rop3 value using rop3w, the 32 bit value is not aligned.
+ int16_t ySrc; //!< in logical units (UL corner of Src rect)
+ int16_t xSrc; //!< in logical units (UL corner of Src rect)
+ int16_t Height; //!< in logical units (of Src and Dst rects)
+ int16_t Width; //!< in logical units (of Src and Dst rects)
+ int16_t yDst; //!< in logical units (UL corner of Dst rect)
+ int16_t xDst; //!< in logical units (UL corner of Dst rect)
+ U_BITMAP16 bitmap; //!< Src bitmap
+} U_WMRBITBLT_PX;
+
+
+/* Index 23 U_WMRSTRETCHBLT WMF manual 2.3.1.5 */
+/** WMF manual 2.3.1.5
+
+ This is a variable structure the core/invariant part extends to xSrc.
+
+ if RecordSize == ((xb) + 3) then there is no bitmap and use the _NOPX form, otherwise use the _PX form
+ Use Macro U_TEST_NOPX2.
+*/
+
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t rop3w[2]; //!< reassemble/store the Ternary raster operation rop3 value using rop3w, the 32 bit value is not aligned.
+ int16_t hSrc; //!< Height in logical units of Src rect
+ int16_t wSrc; //!< Wdith in logical units of Dst rect
+ int16_t ySrc; //!< in logical units (UL corner of Src rect)
+ int16_t xSrc; //!< in logical units (UL corner of Src rect)
+ int16_t ignore; //!< ignored
+ int16_t hDst; //!< Height in logical units of Dst rect
+ int16_t wDst; //!< Wdith in logical units of Dst rect
+ int16_t yDst; //!< in logical units (UL corner of Dst rect)
+ int16_t xDst; //!< in logical units (UL corner of Dst rect)
+} U_WMRSTRETCHBLT_NOPX;
+
+
+/* Index 23 U_WMRSTRETCHBLT WMF manual 2.3.1.5 */
+/** WMF manual 2.3.1.5
+
+ This is a variable structure the core/invariant part extends to xSrc.
+
+ if RecordSize == ((xb) + 3) then there is no bitmap and use the _NOPX form, otherwise use the _PX form
+ Use Macro U_TEST_NOPX2.
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t rop3w[2]; //!< reassemble/store the Ternary raster operation rop3 value using rop3w, the 32 bit value is not aligned.
+ int16_t hSrc; //!< Height in logical units of Src rect
+ int16_t wSrc; //!< Wdith in logical units of Dst rect
+ int16_t ySrc; //!< in logical units (UL corner of Src rect)
+ int16_t xSrc; //!< in logical units (UL corner of Src rect)
+ int16_t hDst; //!< Height in logical units of Dst rect
+ int16_t wDst; //!< Wdith in logical units of Dst rect
+ int16_t yDst; //!< in logical units (UL corner of Dst rect)
+ int16_t xDst; //!< in logical units (UL corner of Dst rect)
+ U_BITMAP16 bitmap; //!< Src bitmap
+} U_WMRSTRETCHBLT_PX;
+
+/* Index 24 U_WMRPOLYGON WMF manual 2.3.3.15
+ Index 25 U_WMRPOLYLINE WMF manual 2.3.3.14
+*/
+/** WMF manual 2.3.3.15
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ int16_t nPoints; //!< Number of points in aPoints
+ U_POINT16 aPoints[1]; //!< Array of points
+} U_WMRPOLYGON,
+ U_WMRPOLYLINE; //!< WMF manual 2.3.3.14
+
+/* Index 26 U_WMRESCAPE WMF manual 2.3.6.1 */
+/** WMF manual 2.3.6.1
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t eFunc; //!< Escape function
+ uint16_t nBytes; //!< bytes in the data array
+ uint8_t Data[1]; //!< data array
+} U_WMRESCAPE;
+
+/* Index 27 U_WMRRESTOREDC WMF manual 2.3.5.10 */
+/** WMF manual 2.3.5.10
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ int16_t DC; //!< DC to restore (negative is relative to current, positive is absolute)
+} U_WMRRESTOREDC;
+
+/* Index 28 U_WMRFILLREGION WMF manual 2.3.3.6 */
+/** WMF manual 2.3.3.6
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t Region; //!< Index of region to fill in object table
+ uint16_t Brush; //!< Index of brush to use in object table
+} U_WMRFILLREGION;
+
+/* Index 29 U_WMRFRAMEREGION WMF manual 2.3.3.8 */
+/** WMF manual 2.3.3.8
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t Region; //!< Index of region to frame in object table
+ uint16_t Brush; //!< Index of brush to use in frame in object table
+ int16_t Height; //!< in logical units (of frame)
+ int16_t Width; //!< in logical units (of frame)
+} U_WMRFRAMEREGION;
+
+/* Index 2A U_WMRINVERTREGION WMF manual 2.3.3.9
+ Index 2B U_WMRPAINTREGION WMF manual 2.3.3.11
+ Index 2C U_WMRSELECTCLIPREGION WMF manual 2.3.4.9
+ Index 2D U_WMRSELECTOBJECT WMF manual 2.3.4.10
+ Index 34 U_WMRSELECTPALETTE WMF manual 2.3.4.11
+ Index 39 U_WMRRESIZEPALETTE WMF manual 2.3.5.9
+ Index F0 U_WMRDELETEOBJECT WMF manual 2.3.4.7
+*/
+/** WMF manual 2.3.3.9
+invert region
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t index; //!< (usually) index of region/object in object table
+} U_WMRINVERTREGION,
+ U_WMRPAINTREGION, //!< WMF manual 2.3.3.11, paint region
+ U_WMRSELECTCLIPREGION, //!< WMF manual 2.3.4.9, select as clip region
+ U_WMRSELECTOBJECT, //!< WMF manual 2.3.4.10, select object
+ U_WMRSELECTPALETTE, //!< WMF manual 2.3.4.11, select palette object
+ U_WMRRESIZEPALETTE, //!< WMF manual 2.3.5.9, resize the system palette to "index"
+ U_WMRDELETEOBJECT; //!< WMF manual 2.3.4.7, delete object
+
+/* Index 2E U_WMRSETTEXTALIGN WMF manual 2.3.5.24 See Index 02 */
+
+/* Index 2F U_WMRDRAWTEXT in GDI and Wine, not documented in WMF manual.
+ Index FE U_WMRCREATEBITMAP in GDI and Wine, not documented in WMF manual.
+ Index FD U_WMRCREATEBITMAPINDIRECT in GDI and Wine, not documented in WMF manual.
+
+ no documentation found, this part of these records, at least, must be correct */
+/** in GDI and Wine, not documented in WMF manual.
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+} U_WMRDRAWTEXT,
+ U_WMRCREATEBITMAPINDIRECT, //!< in GDI and Wine, not documented in WMF manual.
+ U_WMRCREATEBITMAP; //!< in GDI and Wine, not documented in WMF manual.
+
+/* Index 30 U_WMRCHORD WMF manual 2.3.3.2 See Index 1A */
+
+/* Index 31 U_WMRSETMAPPERFLAGS WMF manual 2.3.5.18 */
+/** WMF manual 2.3.5.18
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t valuew[2]; //!< if 1 bit set font mapper selects only matching aspect fonts. reassemble/store the value using valuew, the 32 bit value is not aligned.
+} U_WMRSETMAPPERFLAGS;
+
+/* Index 32 U_WMREXTTEXTOUT WMF manual 2.3.3.5
+*/
+/** WMF manual 2.3.3.5
+
+ Variable size record. Optional fields which follow the struct fields are:
+
+ U_RECT16 Rect; Only present when U_ETO_OPAQUE or U_ETO_CLIPPED bits are set in Opts
+ uint8_t String; String to write, storage area must be 2n bytes.
+ int16_t Dx; Kerning information. Must have same number of entries as Length.
+ Dx is present when
+ 2*Size16_4[2] -14 - 2*((Length + 1)/2)) - 8*(Opts & (U_ETO_OPAQUE | U_ETO_CLIPPED)) == 2*Length
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ int16_t y; //!< in logical units (draw point)
+ int16_t x; //!< in logical units (draw point)
+ int16_t Length; //!< Stringlength in bytes
+ uint16_t Opts; //!< ExtTextOutOptions Flags
+} U_WMREXTTEXTOUT;
+
+/* Index 33 U_WMRSETDIBTODEV WMF manual 2.3.1.4 */
+/** WMF manual 2.3.1.4
+
+ Constant part of record is shown. It is followed by a DeviceIndependentBitmap Object
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t cUsage; //!< ColorUsage Enumeration
+ uint16_t ScanCount; //!< Number of scan lines in Src
+ uint16_t StartScan; //!< First Scan line in Src
+ int16_t ySrc; //!< in logical units (UL corner of Src rect)
+ int16_t xSrc; //!< in logical units (UL corner of Src rect)
+ int16_t Height; //!< in logical units (of Src and Dst)
+ int16_t Width; //!< in logical units (of Src and Dst)
+ int16_t yDst; //!< in logical units (UL corner of Dst rect)
+ int16_t xDst; //!< in logical units (UL corner of Dst rect)
+ uint8_t dib[1]; //!< DeviceIndependentBitmap object
+} U_WMRSETDIBTODEV;
+
+/* Index 34 U_WMRSELECTPALETTE WMF manual 2.3.4.11 See Index 2A */
+
+/* Index 35 U_WMRREALIZEPALETTE WMF manual 2.3.5.8 See Index 00 */
+
+/* Index 36 U_WMRANIMATEPALETTE WMF manual 2.3.5.1
+ Index 37 U_WMRSETPALENTRIES WMF manual 2.3.5.19
+ Index F7 U_WMRCREATEPALETTE WMF manual 2.3.4.3
+*/
+/** WMF manual 2.3.5.1
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ U_PALETTE Palette; //!< Palette object
+} U_WMRANIMATEPALETTE,
+ U_WMRSETPALENTRIES, //!< WMF manual 2.3.5.19
+ U_WMRCREATEPALETTE; //!< WMF manual 2.3.4.3
+
+/* Index 38 U_WMRPOLYPOLYGON WMF manual 2.3.3.16 */
+/** WMF manual 2.3.3.16
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ U_POLYPOLYGON PPolygon; //!< PolyPolygon object (size is variable!)
+} U_WMRPOLYPOLYGON;
+
+/* Index 39 U_WMRRESIZEPALETTE WMF manual 2.3.5.9 See Index 2A */
+
+/* Index 40 U_WMRDIBBITBLT WMF manual 2.3.1.2
+*/
+/** WMF manual 2.3.1.2
+
+ The PX form is a variable structure the core/invariant part extends to xDst, and that is
+ followed by a DeviceInvariantBitmap object which starts at "dib".
+ The NOPX form is a constant structure.
+
+ if RecordSize == ((xb) + 3) then there is no bitmap and use the _NOPX form, otherwise use the _PX form
+ Use Macro U_TEST_NOPX2.
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t rop3w[2]; //!< reassemble/store the Ternary raster operation rop3 value using rop3w, the 32 bit value is not aligned.
+ int16_t ySrc; //!< in logical units (UL corner of Src rect)
+ int16_t xSrc; //!< in logical units (UL corner of Src rect)
+ uint16_t ignore; //!< ignore
+ int16_t Height; //!< in logical units (of Src and Dst)
+ int16_t Width; //!< in logical units (of Src and Dst)
+ int16_t yDst; //!< in logical units (UL corner of Dst rect)
+ int16_t xDst; //!< in logical units (UL corner of Dst rect)
+} U_WMRDIBBITBLT_NOPX;
+
+/** WMF manual 2.3.1.2
+
+ The PX form is a variable structure the core/invariant part extends to xDst, and that is
+ followed by a DeviceInvariantBitmap object which starts at "dib".
+ The NOPX form is a constant structure.
+
+ if RecordSize == ((xb) + 3) then there is no bitmap and use the _NOPX form, otherwise use the _PX form
+ Use Macro U_TEST_NOPX2.
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t rop3w[2]; //!< reassemble/store the Ternary raster operation rop3 value using rop3w, the 32 bit value is not aligned.
+ int16_t ySrc; //!< in logical units (UL corner of Src rect)
+ int16_t xSrc; //!< in logical units (UL corner of Src rect)
+ int16_t Height; //!< in logical units (of Src and Dst)
+ int16_t Width; //!< in logical units (of Src and Dst)
+ int16_t yDst; //!< in logical units (UL corner of Dst rect)
+ int16_t xDst; //!< in logical units (UL corner of Dst rect)
+ uint8_t dib[1]; //!< DeviceIndependentBitmap object
+} U_WMRDIBBITBLT_PX;
+
+/* Index 41 U_WMRDIBSTRETCHBLT WMF manual 2.3.1.3 */
+/** WMF manual 2.3.1.3
+
+ The PX form is a variable structure the core/invariant part extends to xDst, and that is
+ followed by a DeviceInvariantBitmap object which starts at "dib".
+ The NOPX form is a constant structure.
+
+ if RecordSize == ((xb) + 3) then there is no bitmap and use the _NOPX form, otherwise use the _PX form
+ Use Macro U_TEST_NOPX2.
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t rop3w[2]; //!< reassemble/store the Ternary raster operation rop3 value using rop3w, the 32 bit value is not aligned.
+ int16_t hSrc; //!< in logical units (of Src)
+ int16_t wSrc; //!< in logical units (of Src)
+ int16_t ySrc; //!< in logical units (UL corner of Src rect)
+ int16_t xSrc; //!< in logical units (UL corner of Src rect)
+ uint16_t ignore; //!< ignore
+ int16_t hDst; //!< in logical units (of Dst)
+ int16_t wDst; //!< in logical units (of Dst)
+ int16_t yDst; //!< in logical units (UL corner of Dst rect)
+ int16_t xDst; //!< in logical units (UL corner of Dst rect)
+} U_WMRDIBSTRETCHBLT_NOPX;
+
+/** WMF manual 2.3.1.3
+
+ The PX form is a variable structure the core/invariant part extends to xDst, and that is
+ followed by a DeviceInvariantBitmap object which starts at "dib".
+ The NOPX form is a constant structure.
+
+ if RecordSize == ((xb) + 3) then there is no bitmap and use the _NOPX form, otherwise use the _PX form
+ Use Macro U_TEST_NOPX2.
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t rop3w[2]; //!< reassemble/store the Ternary raster operation rop3 value using rop3w, the 32 bit value is not aligned.
+ int16_t hSrc; //!< in logical units (of Src)
+ int16_t wSrc; //!< in logical units (of Src)
+ int16_t ySrc; //!< in logical units (UL corner of Src rect)
+ int16_t xSrc; //!< in logical units (UL corner of Src rect)
+ int16_t hDst; //!< in logical units (of Dst)
+ int16_t wDst; //!< in logical units (of Dst)
+ int16_t yDst; //!< in logical units (UL corner of Dst rect)
+ int16_t xDst; //!< in logical units (UL corner of Dst rect)
+ uint8_t dib[1]; //!< DeviceIndependentBitmap object
+} U_WMRDIBSTRETCHBLT_PX;
+
+
+/* Index 42 U_WMRDIBCREATEPATTERNBRUSH WMF manual 2.3.4.8
+*/
+/** WMF manual 2.3.4.8
+
+ style cUsage Brush created
+ U_BS_SOLID like U_BS_DIBPATTERNPT
+ U_BS_NULL like U_BS_DIBPATTERNPT
+ U_BS_HATCHED like U_BS_DIBPATTERNPT
+ U_BS_DIBPATTERNPT ColorUsage enumer. U_BS_DIBPATTERNPT brush from DIB in Src
+ U_BS_PATTERN ColorUsage enumer. U_BS_PATTERN brush from Bitmap16 object in Src
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t Style; //!< BrushStyle Enumeration
+ uint16_t cUsage; //!< See table above
+ uint8_t Src[1]; //!< DeviceIndependentBitmap or Bitmap16 object
+} U_WMRDIBCREATEPATTERNBRUSH;
+
+/* Index 43 U_WMRSTRETCHDIB WMF manual 2.3.1.6 */
+/** WMF manual 2.3.1.6
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ uint16_t rop3w[2]; //!< reassemble/store the Ternary raster operation rop3 value using rop3w, the 32 bit value is not aligned.
+ uint16_t cUsage; //!< ColorUsage Enumeration
+ int16_t hSrc; //!< in logical units (of Src)
+ int16_t wSrc; //!< in logical units (of Src)
+ int16_t ySrc; //!< in logical units (UL corner of Src rect)
+ int16_t xSrc; //!< in logical units (UL corner of Src rect)
+ int16_t hDst; //!< in logical units (of Dst)
+ int16_t wDst; //!< in logical units (of Dst)
+ int16_t yDst; //!< in logical units (UL corner of Dst rect)
+ int16_t xDst; //!< in logical units (UL corner of Dst rect)
+ uint8_t dib[1]; //!< DeviceIndependentBitmap object
+} U_WMRSTRETCHDIB;
+
+/* Index 48 U_WMREXTFLOODFILL WMF manual 2.3.3.4 See Index 19*/
+/* Index 4C U_WMR4C */
+/* Index 4D U_WMR4D */
+/* Index 4F U_WMR4F */
+/* Index 50 U_WMR50 */
+/* Index 52 U_WMR52 */
+/* Index 5E U_WMR5E */
+/* Index 5F U_WMR5F */
+/* Index 60 U_WMR60 */
+/* Index 61 U_WMR61 */
+/* Index 62 U_WMR62 */
+/* Index 63 U_WMR63 */
+/* Index 64 U_WMR64 */
+/* Index 65 U_WMR65 */
+/* Index 66 U_WMR66 */
+/* Index 67 U_WMR67 */
+/* Index 68 U_WMR68 */
+/* Index 69 U_WMR69 */
+/* Index 6A U_WMR6A */
+/* Index 6B U_WMR6B */
+/* Index 6C U_WMR6C */
+/* Index 6D U_WMR6D */
+/* Index 6E U_WMR6E */
+/* Index 6F U_WMR6F */
+/* Index 70 U_WMR70 */
+/* Index 71 U_WMR71 */
+/* Index 72 U_WMR72 */
+/* Index 73 U_WMR73 */
+/* Index 74 U_WMR74 */
+/* Index 75 U_WMR75 */
+/* Index 76 U_WMR76 */
+/* Index 77 U_WMR77 */
+/* Index 78 U_WMR78 */
+/* Index 79 U_WMR79 */
+/* Index 7A U_WMR7A */
+/* Index 7B U_WMR7B */
+/* Index 7C U_WMR7C */
+/* Index 7D U_WMR7D */
+/* Index 7E U_WMR7E */
+/* Index 7F U_WMR7F */
+/* Index 80 U_WMR80 */
+/* Index 81 U_WMR81 */
+/* Index 82 U_WMR82 */
+/* Index 83 U_WMR83 */
+/* Index 84 U_WMR84 */
+/* Index 85 U_WMR85 */
+/* Index 86 U_WMR86 */
+/* Index 87 U_WMR87 */
+/* Index 88 U_WMR88 */
+/* Index 89 U_WMR89 */
+/* Index 8A U_WMR8A */
+/* Index 8B U_WMR8B */
+/* Index 8C U_WMR8C */
+/* Index 8D U_WMR8D */
+/* Index 8E U_WMR8E */
+/* Index 8F U_WMR8F */
+/* Index 90 U_WMR90 */
+/* Index 91 U_WMR91 */
+/* Index 92 U_WMR92 */
+/* Index 93 U_WMR93 */
+/* Index 94 U_WMR94 */
+/* Index 95 U_WMR95 */
+/* Index 96 U_WMR96 */
+/* Index 97 U_WMR97 */
+/* Index 98 U_WMR98 */
+/* Index 99 U_WMR99 */
+/* Index 9A U_WMR9A */
+/* Index 9B U_WMR9B */
+/* Index 9C U_WMR9C */
+/* Index 9D U_WMR9D */
+/* Index 9E U_WMR9E */
+/* Index 9F U_WMR9F */
+/* Index A0 U_WMRA0 */
+/* Index A1 U_WMRA1 */
+/* Index A2 U_WMRA2 */
+/* Index A3 U_WMRA3 */
+/* Index A4 U_WMRA4 */
+/* Index A5 U_WMRA5 */
+/* Index A6 U_WMRA6 */
+/* Index A7 U_WMRA7 */
+/* Index A8 U_WMRA8 */
+/* Index A9 U_WMRA9 */
+/* Index AA U_WMRAA */
+/* Index AB U_WMRAB */
+/* Index AC U_WMRAC */
+/* Index AD U_WMRAD */
+/* Index AE U_WMRAE */
+/* Index AF U_WMRAF */
+/* Index B0 U_WMRB0 */
+/* Index B1 U_WMRB1 */
+/* Index B2 U_WMRB2 */
+/* Index B3 U_WMRB3 */
+/* Index B4 U_WMRB4 */
+/* Index B5 U_WMRB5 */
+/* Index B6 U_WMRB6 */
+/* Index B7 U_WMRB7 */
+/* Index B8 U_WMRB8 */
+/* Index B9 U_WMRB9 */
+/* Index BA U_WMRBA */
+/* Index BB U_WMRBB */
+/* Index BC U_WMRBC */
+/* Index BD U_WMRBD */
+/* Index BE U_WMRBE */
+/* Index BF U_WMRBF */
+/* Index C0 U_WMRC0 */
+/* Index C1 U_WMRC1 */
+/* Index C2 U_WMRC2 */
+/* Index C3 U_WMRC3 */
+/* Index C4 U_WMRC4 */
+/* Index C5 U_WMRC5 */
+/* Index C6 U_WMRC6 */
+/* Index C7 U_WMRC7 */
+/* Index C8 U_WMRC8 */
+/* Index C9 U_WMRC9 */
+/* Index CA U_WMRCA */
+/* Index CB U_WMRCB */
+/* Index CC U_WMRCC */
+/* Index CD U_WMRCD */
+/* Index CE U_WMRCE */
+/* Index CF U_WMRCF */
+/* Index D0 U_WMRD0 */
+/* Index D1 U_WMRD1 */
+/* Index D2 U_WMRD2 */
+/* Index D3 U_WMRD3 */
+/* Index D4 U_WMRD4 */
+/* Index D5 U_WMRD5 */
+/* Index D6 U_WMRD6 */
+/* Index D7 U_WMRD7 */
+/* Index D8 U_WMRD8 */
+/* Index D9 U_WMRD9 */
+/* Index DA U_WMRDA */
+/* Index DB U_WMRDB */
+/* Index DC U_WMRDC */
+/* Index DD U_WMRDD */
+/* Index DE U_WMRDE */
+/* Index DF U_WMRDF */
+/* Index E0 U_WMRE0 */
+/* Index E1 U_WMRE1 */
+/* Index E2 U_WMRE2 */
+/* Index E3 U_WMRE3 */
+/* Index E4 U_WMRE4 */
+/* Index E5 U_WMRE5 */
+/* Index E6 U_WMRE6 */
+/* Index E7 U_WMRE7 */
+/* Index E8 U_WMRE8 */
+/* Index E9 U_WMRE9 */
+/* Index EA U_WMREA */
+/* Index EB U_WMREB */
+/* Index EC U_WMREC */
+/* Index ED U_WMRED */
+/* Index EE U_WMREE */
+/* Index EF U_WMREF */
+/* Index F0 U_WMRDELETEOBJECT WMF manual 2.3.4.7 See Index 2A */
+/* Index F1 U_WMRF1 */
+/* Index F2 U_WMRF2 */
+/* Index F3 U_WMRF3 */
+/* Index F4 U_WMRF4 */
+/* Index F5 U_WMRF5 */
+
+/* Index F7 U_WMRCREATEPALETTE WMF manual 2.3.4.3 See Index 36*/
+
+/* Index F8 U_WMRF8 */
+/* Index F9 U_WMRCREATEPATTERNBRUSH WMF manual 2.3.4.4 */
+/** WMF manual 2.3.4.4
+
+ WARNING - U_WMRCREATEPATTERNBRUSH has been declared obsolete and application support is spotty -
+ use U_WMRDIBCREATEPATTERNBRUSH instead.
+
+ This record is peculiar...
+
+ After the core structure there is:
+
+ A truncated U_BITMAP16. Only the first 14 bytes are present, and the last 4 bytes (bits section) are ignored.
+ 18 zero bytes (reserved)
+ A pattern. The pattern is a byte array whose size is set by the fields in the U_BITMAP16 structure as follows:
+
+ (((Width * BitsPixel + 15) >> 4) << 1) * Height
+
+ brush created has style U_BS_PATTERN.
+
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+} U_WMRCREATEPATTERNBRUSH;
+
+/* Index FA U_WMRCREATEPENINDIRECT WMF manual 2.3.4.5 */
+/** WMF manual 2.3.4.5
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ U_PEN pen; //!< Pen Object
+} U_WMRCREATEPENINDIRECT;
+
+/* Index FB U_WMRCREATEFONTINDIRECT WMF manual 2.3.4.2 */
+/** WMF manual 2.3.4.2
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ U_FONT font; //!< Font Object
+} U_WMRCREATEFONTINDIRECT;
+
+/* Index FC U_WMRCREATEBRUSHINDIRECT WMF manual 2.3.4.1 */
+/** WMF manual 2.3.4.1
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ U_WLOGBRUSH brush; //!< WLogBrush Object
+} U_WMRCREATEBRUSHINDIRECT;
+
+/* Index FD U_WMRCREATEBITMAPINDIRECT in GDI and Wine, not in WMF manual, see index 2F */
+
+/* Index FE U_WMRCREATEBITMAP in GDI and Wine, not in WMF manual, see index 2F */
+
+/* Index FF U_WMRCREATEREGION WMF manual 2.3.4.6 */
+/** WMF manual 2.3.4.6
+*/
+typedef struct {
+ uint16_t Size16_4[2]; //!< Total number of 16bit words in record
+ uint8_t iType; //!< RecordType Enumeration
+ uint8_t xb; //!< Extra high order byte associated with record type
+ U_REGION region; //!< Region Object
+} U_WMRCREATEREGION;
+
+
+
+// ************************************************************************************************
+// Utility function structures
+
+/**
+ Storage for keeping track of properties of the growing WMF file as records are added.
+*/
+typedef struct {
+ FILE *fp; //!< Open file
+ size_t allocated; //!< Size of the buffer
+ size_t used; //!< Amount consumed
+ uint32_t records; //!< Number of records already contained
+ uint16_t ignore; //!< size padding,not used
+ uint32_t PalEntries; //!< Number of PalEntries (set from U_EMREOF)
+ uint32_t chunk; //!< Number of bytes to add when more space is needed
+ char *buf; //!< Buffer for constructing the EMF in memory
+ uint32_t largest; //!< Largest record size, in bytes (used by WMF, not by EMF)
+ uint32_t sumObjects; //!< Number of objects appended (used by WMF, not by EMF) [ also see wmf_highwater() ]
+} WMFTRACK;
+
+/**
+ The various create functions need a place to put their handles, these are stored in the table below.
+ We don't actually do anything much with these handles, that is up to whatever program finally plays back the WMF, but
+ we do need to keep track of the numbers so that they are not accidentally reused. (Also WMF files have rules
+ about how object handles must be numbered, for instance, the lowest possible number must always be used. These
+ are different from EMF object handles.) This structure is used for staying in conformance with these rules.
+
+ There are no stock objects in WMF files.
+*/
+typedef struct {
+ uint32_t *table; //!< Array Buffer for constructing the WMF in memory
+ size_t allocated; //!< Slots in the buffer
+ size_t chunk; //!< Number to add if a realloc is required
+ uint32_t lolimit; //!< Lowest unoccupied table slot, may be a hole created by a deleteobject.
+ uint32_t hilimit; //!< Highest table slot occupied (currently)
+ uint32_t peak; //!< Highest table slot occupied (ever)
+} WMFHANDLES;
+
+//! \cond
+// ************************************************************************************************
+// Prototypes (_set first, then _get)
+char *wmr_dup(const char *wmr);
+int wmf_start(const char *name, uint32_t initsize, uint32_t chunksize, WMFTRACK **wt);
+int uwmf_free(WMFTRACK **wt);
+int wmf_finish(WMFTRACK *wt);
+int wmf_append(U_METARECORD *rec, WMFTRACK *wt, int freerec);
+int wmf_header_append(U_METARECORD *rec,WMFTRACK *et, int freerec);
+int wmf_readdata(const char *filename, char **contents, size_t*length);
+#define wmf_fopen emf_fopen
+int wmf_highwater(uint32_t setval);
+int wmf_htable_create(uint32_t initsize, uint32_t chunksize, WMFHANDLES **wht);
+int wmf_htable_delete(uint32_t *ih, WMFHANDLES *wht);
+int wmf_htable_insert(uint32_t *ih, WMFHANDLES *wht);
+int wmf_htable_free(WMFHANDLES **wht);
+int16_t U_16_checksum(int16_t *buf, int count);
+int16_t *dx16_set( int32_t height, uint32_t weight, uint32_t members);
+uint32_t U_wmr_properties(uint32_t type);
+
+uint32_t U_wmr_size(const U_METARECORD *record);
+uint32_t U_wmr_values(int idx);
+const char *U_wmr_names(int idx);
+const char *U_wmr_escnames(int idx);
+
+void U_sanerect16(U_RECT16 rc, double *left, double *top, double *right, double *bottom);
+
+
+U_FONT *U_FONT_set(int16_t Height, int16_t Width, int16_t Escapement, int16_t Orientation,
+ int16_t Weight, uint8_t Italic, uint8_t Underline, uint8_t StrikeOut,
+ uint8_t CharSet, uint8_t OutPrecision, uint8_t ClipPrecision,
+ uint8_t Quality, uint8_t PitchAndFamily, char *FaceName);
+U_PLTNTRY U_PLTNTRY_set(U_COLORREF Color);
+U_PALETTE *U_PLTENTRY_set(uint16_t Start, uint16_t NumEntries, U_PLTNTRY *Entries);
+U_PEN U_PEN_set(uint16_t Style, uint16_t Width, U_COLORREF Color);
+U_RECT16 U_RECT16_set(U_POINT16 ul,U_POINT16 lr);
+U_BITMAP16 *U_BITMAP16_set(const int16_t Type, const int16_t Width, const int16_t Height,
+ const int16_t LineN, const uint8_t BitsPixel, const char *Bits);
+U_SCAN *U_SCAN_set(uint16_t count, uint16_t top, uint16_t bottom, uint16_t *ScanLines);
+U_REGION *U_REGION_set(int16_t Size, int16_t sCount, int16_t sMax, U_RECT16 sRect, uint16_t *aScans);
+U_WLOGBRUSH U_WLOGBRUSH_set(uint16_t Style, U_COLORREF Color, uint16_t Hatch);
+U_PAIRF *U_PAIRF_set(float x, float y);
+
+char *wdeleteobject_set(uint32_t *ihObject, WMFHANDLES *wht);
+char *wselectobject_set(uint32_t ihObject, WMFHANDLES *wht );
+char *wcreatepenindirect_set(uint32_t *ihPen, WMFHANDLES *wht, U_PEN pen);
+char *wcreatebrushindirect_set(uint32_t *ihBrush, WMFHANDLES *wht, U_WLOGBRUSH lb);
+char *wcreatedibpatternbrush_srcdib_set(uint32_t *ihBrush, WMFHANDLES *wht,
+ uint32_t iUsage, const U_BITMAPINFO *Bmi, uint32_t cbPx, const char *Px);
+char *wcreatedibpatternbrush_srcbm16_set(uint32_t *ihBrush, WMFHANDLES *wht,
+ uint32_t iUsage, const U_BITMAP16 *Bm16);
+char *wcreatepatternbrush_set(uint32_t *ihBrush, WMFHANDLES *wht, U_BITMAP16 *Bm16, char *Pattern);
+char *wcreatefontindirect_set(uint32_t *ihFont, WMFHANDLES *wht, U_FONT *uf);
+char *wcreatepalette_set(uint32_t *ihPal, WMFHANDLES *wht, U_PALETTE *up);
+char *wsetpaletteentries_set(uint32_t *ihPal, WMFHANDLES *wht, const U_PALETTE *Palletes);
+char *wcreateregion_set(uint32_t *ihReg, WMFHANDLES *wht, const U_REGION *Region);
+char *wbegin_path_set(void);
+char *wend_path_set(void);
+char *wlinecap_set(int32_t Type);
+char *wlinejoin_set(int32_t Type);
+char *wmiterlimit_set(int32_t limit);
+
+
+char *U_WMRHEADER_set(U_PAIRF *size,unsigned int dpi);
+char *U_WMREOF_set(void);
+char *U_WMRSETBKCOLOR_set(U_COLORREF Color);
+char *U_WMRSETBKMODE_set(uint16_t Mode);
+char *U_WMRSETMAPMODE_set(uint16_t Mode);
+char *U_WMRSETROP2_set(uint16_t Mode);
+char *U_WMRSETRELABS_set(void);
+char *U_WMRSETPOLYFILLMODE_set(uint16_t Mode);
+char *U_WMRSETSTRETCHBLTMODE_set(uint16_t Mode);
+char *U_WMRSETTEXTCHAREXTRA_set(uint16_t Mode);
+char *U_WMRSETTEXTCOLOR_set(U_COLORREF Color);
+char *U_WMRSETTEXTJUSTIFICATION_set(uint16_t Count, uint16_t Extra);
+char *U_WMRSETWINDOWORG_set(U_POINT16 coord);
+char *U_WMRSETWINDOWEXT_set(U_POINT16 extent);
+char *U_WMRSETVIEWPORTORG_set(U_POINT16 coord);
+char *U_WMRSETVIEWPORTEXT_set(U_POINT16 extent);
+char *U_WMROFFSETWINDOWORG_set(U_POINT16 offset);
+char *U_WMRSCALEWINDOWEXT_set(U_POINT16 Denom, U_POINT16 Num);
+char *U_WMROFFSETVIEWPORTORG_set(U_POINT16 offset);
+char *U_WMRSCALEVIEWPORTEXT_set(U_POINT16 Denom, U_POINT16 Num);
+char *U_WMRLINETO_set(U_POINT16 coord);
+char *U_WMRMOVETO_set(U_POINT16 coord);
+char *U_WMREXCLUDECLIPRECT_set(U_RECT16 rect);
+char *U_WMRINTERSECTCLIPRECT_set(U_RECT16 rect);
+char *U_WMRARC_set(U_POINT16 StartArc, U_POINT16 EndArc, U_RECT16 rect);
+char *U_WMRELLIPSE_set(U_RECT16 rect);
+char *U_WMRFLOODFILL_set(uint16_t Mode, U_COLORREF Color, U_POINT16 coord);
+char *U_WMRPIE_set(U_POINT16 Radial1, U_POINT16 Radial2, U_RECT16 rect);
+char *U_WMRRECTANGLE_set(U_RECT16 rect);
+char *U_WMRROUNDRECT_set(int16_t Width, int16_t Height, U_RECT16 rect);
+char *U_WMRPATBLT_set(U_POINT16 Dst, U_POINT16 cwh, uint32_t dwRop3);
+char *U_WMRSAVEDC_set(void);
+char *U_WMRSETPIXEL_set(U_COLORREF Color, U_POINT16 coord);
+char *U_WMROFFSETCLIPRGN_set(U_POINT16 offset);
+char *U_WMRTEXTOUT_set(U_POINT16 Dst, char *string);
+char *U_WMRBITBLT_set(U_POINT16 Dst, U_POINT16 cwh, U_POINT16 Src,
+ uint32_t dwRop3, const U_BITMAP16 *Bm16);
+char *U_WMRSTRETCHBLT_set(U_POINT16 Dst, U_POINT16 cDst, U_POINT16 Src,
+ U_POINT16 cSrc, uint32_t dwRop3, const U_BITMAP16 *Bm16);
+char *U_WMRPOLYGON_set(uint16_t Length, const U_POINT16 * Data);
+char *U_WMRPOLYLINE_set(uint16_t Length, const U_POINT16 * Data);
+char *U_WMRESCAPE_set(uint16_t Escape, uint16_t Length, const void *Data);
+char *U_WMRRESTOREDC_set(int16_t DC);
+char *U_WMRFILLREGION_set(uint16_t Region, uint16_t Brush);
+char *U_WMRFRAMEREGION_set(uint16_t Region, uint16_t Brush, int16_t Height, int16_t Width);
+char *U_WMRINVERTREGION_set(uint16_t Region);
+char *U_WMRPAINTREGION_set(uint16_t Region);
+char *U_WMRSELECTCLIPREGION_set(uint16_t Region);
+char *U_WMRSELECTOBJECT_set(uint16_t object);
+char *U_WMRSETTEXTALIGN_set(uint16_t Mode);
+char *U_WMRDRAWTEXT_set(void); /* in GDI and Wine, not in WMF manual. */
+char *U_WMRCHORD_set(U_POINT16 Radial1, U_POINT16 Radial2, U_RECT16 rect);
+char *U_WMRSETMAPPERFLAGS_set(uint32_t Mode);
+char *U_WMREXTTEXTOUT_set(U_POINT16 Dst, int16_t Length, uint16_t Opts, const char *string, int16_t *dx, U_RECT16 rect);
+char *U_WMRSETDIBTODEV_set(void);
+char *U_WMRSELECTPALETTE_set(uint16_t Palette);
+char *U_WMRREALIZEPALETTE_set(void);
+char *U_WMRANIMATEPALETTE_set(U_PALETTE *Palette);
+char *U_WMRSETPALENTRIES_set(const U_PALETTE *Palette);
+char *U_WMRPOLYPOLYGON_set(const uint16_t, const uint16_t *aPolyCounts, const U_POINT16 * points);
+char *U_WMRRESIZEPALETTE_set(uint16_t Palette);
+char *U_WMR3A_set(void);
+char *U_WMR3B_set(void);
+char *U_WMR3C_set(void);
+char *U_WMR3D_set(void);
+char *U_WMR3E_set(void);
+char *U_WMR3F_set(void);
+char *U_WMRDIBBITBLT_set(U_POINT16 Dst, U_POINT16 cwh, U_POINT16 Src,
+ uint32_t dwRop3, const U_BITMAPINFO * Bmi, uint32_t cbPx, const char *Px);
+char *U_WMRDIBSTRETCHBLT_set(U_POINT16 Dst, U_POINT16 cDst, U_POINT16 Src,
+ U_POINT16 cSrc, uint32_t dwRop3, const U_BITMAPINFO *Bmi, uint32_t cbPx, const char *Px);
+char *U_WMRDIBCREATEPATTERNBRUSH_set(const uint16_t Style, const uint16_t iUsage,
+ const U_BITMAPINFO *Bmi, uint32_t cbPx, const char *Px, const U_BITMAP16 *Bm16);
+char *U_WMRSTRETCHDIB_set(U_POINT16 Dest, U_POINT16 cDest, U_POINT16 Src, U_POINT16 cSrc,
+ const uint16_t cUsage, uint32_t dwRop3, const U_BITMAPINFO *Bmi, uint32_t cbPx, const char *Px);
+char *U_WMR44_set(void);
+char *U_WMR45_set(void);
+char *U_WMR46_set(void);
+char *U_WMR47_set(void);
+char *U_WMREXTFLOODFILL_set(uint16_t Mode, U_COLORREF Color, U_POINT16 coord);
+char *U_WMR49_set(void);
+char *U_WMR4A_set(void);
+char *U_WMR4B_set(void);
+char *U_WMR4C_set(void);
+char *U_WMR4D_set(void);
+char *U_WMR4E_set(void);
+char *U_WMR4F_set(void);
+char *U_WMR50_set(void);
+char *U_WMR51_set(void);
+char *U_WMRABORTDOC_set(void);
+char *U_WMR53_set(void);
+char *U_WMR54_set(void);
+char *U_WMR55_set(void);
+char *U_WMR56_set(void);
+char *U_WMR57_set(void);
+char *U_WMR58_set(void);
+char *U_WMR59_set(void);
+char *U_WMR5A_set(void);
+char *U_WMR5B_set(void);
+char *U_WMR5C_set(void);
+char *U_WMR5D_set(void);
+char *U_WMR5E_set(void);
+char *U_WMR5F_set(void);
+char *U_WMR60_set(void);
+char *U_WMR61_set(void);
+char *U_WMR62_set(void);
+char *U_WMR63_set(void);
+char *U_WMR64_set(void);
+char *U_WMR65_set(void);
+char *U_WMR66_set(void);
+char *U_WMR67_set(void);
+char *U_WMR68_set(void);
+char *U_WMR69_set(void);
+char *U_WMR6A_set(void);
+char *U_WMR6B_set(void);
+char *U_WMR6C_set(void);
+char *U_WMR6D_set(void);
+char *U_WMR6E_set(void);
+char *U_WMR6F_set(void);
+char *U_WMR70_set(void);
+char *U_WMR71_set(void);
+char *U_WMR72_set(void);
+char *U_WMR73_set(void);
+char *U_WMR74_set(void);
+char *U_WMR75_set(void);
+char *U_WMR76_set(void);
+char *U_WMR77_set(void);
+char *U_WMR78_set(void);
+char *U_WMR79_set(void);
+char *U_WMR7A_set(void);
+char *U_WMR7B_set(void);
+char *U_WMR7C_set(void);
+char *U_WMR7D_set(void);
+char *U_WMR7E_set(void);
+char *U_WMR7F_set(void);
+char *U_WMR80_set(void);
+char *U_WMR81_set(void);
+char *U_WMR82_set(void);
+char *U_WMR83_set(void);
+char *U_WMR84_set(void);
+char *U_WMR85_set(void);
+char *U_WMR86_set(void);
+char *U_WMR87_set(void);
+char *U_WMR88_set(void);
+char *U_WMR89_set(void);
+char *U_WMR8A_set(void);
+char *U_WMR8B_set(void);
+char *U_WMR8C_set(void);
+char *U_WMR8D_set(void);
+char *U_WMR8E_set(void);
+char *U_WMR8F_set(void);
+char *U_WMR90_set(void);
+char *U_WMR91_set(void);
+char *U_WMR92_set(void);
+char *U_WMR93_set(void);
+char *U_WMR94_set(void);
+char *U_WMR95_set(void);
+char *U_WMR96_set(void);
+char *U_WMR97_set(void);
+char *U_WMR98_set(void);
+char *U_WMR99_set(void);
+char *U_WMR9A_set(void);
+char *U_WMR9B_set(void);
+char *U_WMR9C_set(void);
+char *U_WMR9D_set(void);
+char *U_WMR9E_set(void);
+char *U_WMR9F_set(void);
+char *U_WMRA0_set(void);
+char *U_WMRA1_set(void);
+char *U_WMRA2_set(void);
+char *U_WMRA3_set(void);
+char *U_WMRA4_set(void);
+char *U_WMRA5_set(void);
+char *U_WMRA6_set(void);
+char *U_WMRA7_set(void);
+char *U_WMRA8_set(void);
+char *U_WMRA9_set(void);
+char *U_WMRAA_set(void);
+char *U_WMRAB_set(void);
+char *U_WMRAC_set(void);
+char *U_WMRAD_set(void);
+char *U_WMRAE_set(void);
+char *U_WMRAF_set(void);
+char *U_WMRB0_set(void);
+char *U_WMRB1_set(void);
+char *U_WMRB2_set(void);
+char *U_WMRB3_set(void);
+char *U_WMRB4_set(void);
+char *U_WMRB5_set(void);
+char *U_WMRB6_set(void);
+char *U_WMRB7_set(void);
+char *U_WMRB8_set(void);
+char *U_WMRB9_set(void);
+char *U_WMRBA_set(void);
+char *U_WMRBB_set(void);
+char *U_WMRBC_set(void);
+char *U_WMRBD_set(void);
+char *U_WMRBE_set(void);
+char *U_WMRBF_set(void);
+char *U_WMRC0_set(void);
+char *U_WMRC1_set(void);
+char *U_WMRC2_set(void);
+char *U_WMRC3_set(void);
+char *U_WMRC4_set(void);
+char *U_WMRC5_set(void);
+char *U_WMRC6_set(void);
+char *U_WMRC7_set(void);
+char *U_WMRC8_set(void);
+char *U_WMRC9_set(void);
+char *U_WMRCA_set(void);
+char *U_WMRCB_set(void);
+char *U_WMRCC_set(void);
+char *U_WMRCD_set(void);
+char *U_WMRCE_set(void);
+char *U_WMRCF_set(void);
+char *U_WMRD0_set(void);
+char *U_WMRD1_set(void);
+char *U_WMRD2_set(void);
+char *U_WMRD3_set(void);
+char *U_WMRD4_set(void);
+char *U_WMRD5_set(void);
+char *U_WMRD6_set(void);
+char *U_WMRD7_set(void);
+char *U_WMRD8_set(void);
+char *U_WMRD9_set(void);
+char *U_WMRDA_set(void);
+char *U_WMRDB_set(void);
+char *U_WMRDC_set(void);
+char *U_WMRDD_set(void);
+char *U_WMRDE_set(void);
+char *U_WMRDF_set(void);
+char *U_WMRE0_set(void);
+char *U_WMRE1_set(void);
+char *U_WMRE2_set(void);
+char *U_WMRE3_set(void);
+char *U_WMRE4_set(void);
+char *U_WMRE5_set(void);
+char *U_WMRE6_set(void);
+char *U_WMRE7_set(void);
+char *U_WMRE8_set(void);
+char *U_WMRE9_set(void);
+char *U_WMREA_set(void);
+char *U_WMREB_set(void);
+char *U_WMREC_set(void);
+char *U_WMRED_set(void);
+char *U_WMREE_set(void);
+char *U_WMREF_set(void);
+char *U_WMRDELETEOBJECT_set(uint16_t object);
+char *U_WMRF1_set(void);
+char *U_WMRF2_set(void);
+char *U_WMRF3_set(void);
+char *U_WMRF4_set(void);
+char *U_WMRF5_set(void);
+char *U_WMRF6_set(void);
+char *U_WMRCREATEPALETTE_set(U_PALETTE *Palette);
+char *U_WMRF8_set(void);
+char *U_WMRCREATEPATTERNBRUSH_set(U_BITMAP16 *Bm16, char *Pattern);
+char *U_WMRCREATEPENINDIRECT_set(U_PEN pen);
+char *U_WMRCREATEFONTINDIRECT_set(U_FONT *font);
+char *U_WMRCREATEBRUSHINDIRECT_set(U_WLOGBRUSH brush);
+char *U_WMRCREATEBITMAPINDIRECT_set(void); /* in GDI and Wine, not in WMF manual. */
+char *U_WMRCREATEBITMAP_set(void); /* in GDI and Wine, not in WMF manual. */
+char *U_WMRCREATEREGION_set(const U_REGION *region);
+
+int16_t *dx16_get( int32_t height, uint32_t weight, uint32_t members);
+size_t U_WMRRECSAFE_get(const char *contents, const char *blimit);
+int wmfheader_get(const char *contents, const char *blimit, U_WMRPLACEABLE *Placeable, U_WMRHEADER *Header);
+int wmr_arc_points(U_RECT16 rclBox, U_POINT16 ArcStart, U_POINT16 ArcEnd,
+ int *f1, int f2, U_PAIRF *center, U_PAIRF *start, U_PAIRF *end, U_PAIRF *size );
+void U_BITMAPINFOHEADER_get(const char *Bmih, uint32_t *Size, int32_t *Width, int32_t *Height,
+ uint32_t *Planes, uint32_t *BitCount, uint32_t *Compression, uint32_t *SizeImage,
+ int32_t *XPelsPerMeter, int32_t *YPelsPerMeter, uint32_t *ClrUsed, uint32_t *ClrImportant);
+void U_BITMAPCOREHEADER_get(const char *BmiCh, uint32_t *Size, int32_t *Width, int32_t *Height, int32_t *BitCount);
+int wget_DIB_params(const char *dib, const char **px, const U_RGBQUAD **ct, uint32_t *numCt,
+ int32_t *width, int32_t *height, int32_t *colortype, int32_t *invert);
+int U_WMREOF_get(const char *contents);
+int U_WMRSETBKCOLOR_get(const char *contents, U_COLORREF *Color);
+int U_WMRSETBKMODE_get(const char *contents, uint16_t *Mode);
+int U_WMRSETMAPMODE_get(const char *contents, uint16_t *Mode);
+int U_WMRSETROP2_get(const char *contents, uint16_t *Mode);
+int U_WMRSETRELABS_get(const char *contents);
+int U_WMRSETPOLYFILLMODE_get(const char *contents, uint16_t *Mode);
+int U_WMRSETSTRETCHBLTMODE_get(const char *contents, uint16_t *Mode);
+int U_WMRSETTEXTCHAREXTRA_get(const char *contents, uint16_t *Mode);
+int U_WMRSETTEXTCOLOR_get(const char *contents, U_COLORREF *Color);
+int U_WMRSETTEXTJUSTIFICATION_get(const char *contents, uint16_t *Count, uint16_t *Extra);
+int U_WMRSETWINDOWORG_get(const char *contents, U_POINT16 * coord);
+int U_WMRSETWINDOWEXT_get(const char *contents, U_POINT16 * extent);
+int U_WMRSETVIEWPORTORG_get(const char *contents, U_POINT16 * coord);
+int U_WMRSETVIEWPORTEXT_get(const char *contents, U_POINT16 * extent);
+int U_WMROFFSETWINDOWORG_get(const char *contents, U_POINT16 * offset);
+int U_WMRSCALEWINDOWEXT_get(const char *contents, U_POINT16 * Denom, U_POINT16 * Num);
+int U_WMROFFSETVIEWPORTORG_get(const char *contents, U_POINT16 * offset);
+int U_WMRSCALEVIEWPORTEXT_get(const char *contents, U_POINT16 * Denom, U_POINT16 * Num);
+int U_WMRLINETO_get(const char *contents, U_POINT16 * coord);
+int U_WMRMOVETO_get(const char *contents, U_POINT16 * coord);
+int U_WMREXCLUDECLIPRECT_get(const char *contents, U_RECT16 * rect);
+int U_WMRINTERSECTCLIPRECT_get(const char *contents, U_RECT16 * rect);
+int U_WMRARC_get(const char *contents, U_POINT16 * StartArc, U_POINT16 * EndArc, U_RECT16 * rect);
+int U_WMRELLIPSE_get(const char *contents, U_RECT16 * rect);
+int U_WMRFLOODFILL_get(const char *contents, uint16_t *Mode, U_COLORREF *Color, U_POINT16 * coord);
+int U_WMRPIE_get(const char *contents, U_POINT16 * Radial1, U_POINT16 * Radial2, U_RECT16 * rect);
+int U_WMRRECTANGLE_get(const char *contents, U_RECT16 * rect);
+int U_WMRROUNDRECT_get(const char *contents, int16_t *Width, int16_t *Height, U_RECT16 * rect);
+int U_WMRPATBLT_get(const char *contents, U_POINT16 * Dst, U_POINT16 * cwh, uint32_t *dwRop3);
+int U_WMRSAVEDC_get(const char *contents);
+int U_WMRSETPIXEL_get(const char *contents, U_COLORREF *Color, U_POINT16 * coord);
+int U_WMROFFSETCLIPRGN_get(const char *contents, U_POINT16 * offset);
+int U_WMRTEXTOUT_get(const char *contents, U_POINT16 * Dst, int16_t *Length, const char **string);
+int U_WMRBITBLT_get(const char *contents, U_POINT16 * Dst, U_POINT16 * cwh, U_POINT16 * Src, uint32_t *dwRop3, U_BITMAP16 *Bm16, const char **px);
+int U_WMRSTRETCHBLT_get(const char *contents, U_POINT16 * Dst, U_POINT16 * cDst, U_POINT16 * Src, U_POINT16 * cSrc, uint32_t *dwRop3, U_BITMAP16 *Bm16, const char **px);
+int U_WMRPOLYGON_get(const char *contents, uint16_t *Length, const char **Data);
+int U_WMRPOLYLINE_get(const char *contents, uint16_t *Length, const char **Data);
+int U_WMRESCAPE_get(const char *contents, uint16_t *Escape, uint16_t *Length, const char **Data);
+int U_WMRRESTOREDC_get(const char *contents, int16_t *DC);
+int U_WMRFILLREGION_get(const char *contents, uint16_t *Region, uint16_t *Brush);
+int U_WMRFRAMEREGION_get(const char *contents, uint16_t *Region, uint16_t *Brush, int16_t *Height, int16_t *Width);
+int U_WMRINVERTREGION_get(const char *contents, uint16_t *Region);
+int U_WMRPAINTREGION_get(const char *contents, uint16_t *Region);
+int U_WMRSELECTCLIPREGION_get(const char *contents, uint16_t *Region);
+int U_WMRSELECTOBJECT_get(const char *contents, uint16_t *Object);
+int U_WMRSETTEXTALIGN_get(const char *contents, uint16_t *Mode);
+int U_WMRDRAWTEXT_get(void); /* in GDI and Wine, not in WMF manual. */
+int U_WMRCHORD_get(const char *contents, U_POINT16 * Radial1, U_POINT16 * Radial2, U_RECT16 * rect);
+int U_WMRSETMAPPERFLAGS_get(const char *contents, uint32_t *Mode);
+int U_WMREXTTEXTOUT_get(const char *contents, U_POINT16 * Dst, int16_t *Length, uint16_t *Opts, const char **string, const int16_t **dx, U_RECT16 * rect);
+int U_WMRSETDIBTODEV_get(const char *contents, U_POINT16 * Dst, U_POINT16 * cwh, U_POINT16 * Src, uint16_t *cUsage, uint16_t *ScanCount, uint16_t *StartScan, const char **dib);
+int U_WMRSELECTPALETTE_get(const char *contents, uint16_t *Palette);
+int U_WMRREALIZEPALETTE_get(const char *contents);
+int U_WMRANIMATEPALETTE_get(const char *contents, U_PALETTE *Palette, const char **PalEntries);
+int U_WMRSETPALENTRIES_get(const char *contents, U_PALETTE *Palette, const char **PalEntries);
+int U_WMRPOLYPOLYGON_get(const char *contents, uint16_t *nPolys, const uint16_t **aPolyCounts, const char **Points);
+int U_WMRRESIZEPALETTE_get(const char *contents, uint16_t *Palette);
+int U_WMR3A_get(void);
+int U_WMR3B_get(void);
+int U_WMR3C_get(void);
+int U_WMR3D_get(void);
+int U_WMR3E_get(void);
+int U_WMR3F_get(void);
+int U_WMRDIBBITBLT_get(const char *contents, U_POINT16 * Dst, U_POINT16 * cwh, U_POINT16 * Src, uint32_t *dwRop3, const char **dib);
+int U_WMRDIBSTRETCHBLT_get(const char *contents, U_POINT16 * Dst, U_POINT16 * cDst, U_POINT16 * Src, U_POINT16 * cSrc, uint32_t *dwRop3, const char **dib);
+int U_WMRDIBCREATEPATTERNBRUSH_get(const char *contents, uint16_t *Style, uint16_t *cUsage, const char **Bm16, const char **dib);
+int U_WMRSTRETCHDIB_get(const char *contents, U_POINT16 * Dst, U_POINT16 * cDst, U_POINT16 * Src, U_POINT16 * cSrc, uint16_t *cUsage, uint32_t *dwRop3, const char **dib);
+int U_WMR44_get(void);
+int U_WMR45_get(void);
+int U_WMR46_get(void);
+int U_WMR47_get(void);
+int U_WMREXTFLOODFILL_get(const char *contents, uint16_t *Mode, U_COLORREF *Color, U_POINT16 * coord);
+int U_WMR49_get(void);
+int U_WMR4A_get(void);
+int U_WMR4B_get(void);
+int U_WMR4C_get(void);
+int U_WMR4D_get(void);
+int U_WMR4E_get(void);
+int U_WMR4F_get(void);
+int U_WMR50_get(void);
+int U_WMR51_get(void);
+int U_WMRABORTDOC_get(void);
+int U_WMR53_get(void);
+int U_WMR54_get(void);
+int U_WMR55_get(void);
+int U_WMR56_get(void);
+int U_WMR57_get(void);
+int U_WMR58_get(void);
+int U_WMR59_get(void);
+int U_WMR5A_get(void);
+int U_WMR5B_get(void);
+int U_WMR5C_get(void);
+int U_WMR5D_get(void);
+int U_WMR5E_get(void);
+int U_WMR5F_get(void);
+int U_WMR60_get(void);
+int U_WMR61_get(void);
+int U_WMR62_get(void);
+int U_WMR63_get(void);
+int U_WMR64_get(void);
+int U_WMR65_get(void);
+int U_WMR66_get(void);
+int U_WMR67_get(void);
+int U_WMR68_get(void);
+int U_WMR69_get(void);
+int U_WMR6A_get(void);
+int U_WMR6B_get(void);
+int U_WMR6C_get(void);
+int U_WMR6D_get(void);
+int U_WMR6E_get(void);
+int U_WMR6F_get(void);
+int U_WMR70_get(void);
+int U_WMR71_get(void);
+int U_WMR72_get(void);
+int U_WMR73_get(void);
+int U_WMR74_get(void);
+int U_WMR75_get(void);
+int U_WMR76_get(void);
+int U_WMR77_get(void);
+int U_WMR78_get(void);
+int U_WMR79_get(void);
+int U_WMR7A_get(void);
+int U_WMR7B_get(void);
+int U_WMR7C_get(void);
+int U_WMR7D_get(void);
+int U_WMR7E_get(void);
+int U_WMR7F_get(void);
+int U_WMR80_get(void);
+int U_WMR81_get(void);
+int U_WMR82_get(void);
+int U_WMR83_get(void);
+int U_WMR84_get(void);
+int U_WMR85_get(void);
+int U_WMR86_get(void);
+int U_WMR87_get(void);
+int U_WMR88_get(void);
+int U_WMR89_get(void);
+int U_WMR8A_get(void);
+int U_WMR8B_get(void);
+int U_WMR8C_get(void);
+int U_WMR8D_get(void);
+int U_WMR8E_get(void);
+int U_WMR8F_get(void);
+int U_WMR90_get(void);
+int U_WMR91_get(void);
+int U_WMR92_get(void);
+int U_WMR93_get(void);
+int U_WMR94_get(void);
+int U_WMR95_get(void);
+int U_WMR96_get(void);
+int U_WMR97_get(void);
+int U_WMR98_get(void);
+int U_WMR99_get(void);
+int U_WMR9A_get(void);
+int U_WMR9B_get(void);
+int U_WMR9C_get(void);
+int U_WMR9D_get(void);
+int U_WMR9E_get(void);
+int U_WMR9F_get(void);
+int U_WMRA0_get(void);
+int U_WMRA1_get(void);
+int U_WMRA2_get(void);
+int U_WMRA3_get(void);
+int U_WMRA4_get(void);
+int U_WMRA5_get(void);
+int U_WMRA6_get(void);
+int U_WMRA7_get(void);
+int U_WMRA8_get(void);
+int U_WMRA9_get(void);
+int U_WMRAA_get(void);
+int U_WMRAB_get(void);
+int U_WMRAC_get(void);
+int U_WMRAD_get(void);
+int U_WMRAE_get(void);
+int U_WMRAF_get(void);
+int U_WMRB0_get(void);
+int U_WMRB1_get(void);
+int U_WMRB2_get(void);
+int U_WMRB3_get(void);
+int U_WMRB4_get(void);
+int U_WMRB5_get(void);
+int U_WMRB6_get(void);
+int U_WMRB7_get(void);
+int U_WMRB8_get(void);
+int U_WMRB9_get(void);
+int U_WMRBA_get(void);
+int U_WMRBB_get(void);
+int U_WMRBC_get(void);
+int U_WMRBD_get(void);
+int U_WMRBE_get(void);
+int U_WMRBF_get(void);
+int U_WMRC0_get(void);
+int U_WMRC1_get(void);
+int U_WMRC2_get(void);
+int U_WMRC3_get(void);
+int U_WMRC4_get(void);
+int U_WMRC5_get(void);
+int U_WMRC6_get(void);
+int U_WMRC7_get(void);
+int U_WMRC8_get(void);
+int U_WMRC9_get(void);
+int U_WMRCA_get(void);
+int U_WMRCB_get(void);
+int U_WMRCC_get(void);
+int U_WMRCD_get(void);
+int U_WMRCE_get(void);
+int U_WMRCF_get(void);
+int U_WMRD0_get(void);
+int U_WMRD1_get(void);
+int U_WMRD2_get(void);
+int U_WMRD3_get(void);
+int U_WMRD4_get(void);
+int U_WMRD5_get(void);
+int U_WMRD6_get(void);
+int U_WMRD7_get(void);
+int U_WMRD8_get(void);
+int U_WMRD9_get(void);
+int U_WMRDA_get(void);
+int U_WMRDB_get(void);
+int U_WMRDC_get(void);
+int U_WMRDD_get(void);
+int U_WMRDE_get(void);
+int U_WMRDF_get(void);
+int U_WMRE0_get(void);
+int U_WMRE1_get(void);
+int U_WMRE2_get(void);
+int U_WMRE3_get(void);
+int U_WMRE4_get(void);
+int U_WMRE5_get(void);
+int U_WMRE6_get(void);
+int U_WMRE7_get(void);
+int U_WMRE8_get(void);
+int U_WMRE9_get(void);
+int U_WMREA_get(void);
+int U_WMREB_get(void);
+int U_WMREC_get(void);
+int U_WMRED_get(void);
+int U_WMREE_get(void);
+int U_WMREF_get(void);
+int U_WMRDELETEOBJECT_get(const char *contents, uint16_t *Object);
+int U_WMRF1_get(void);
+int U_WMRF2_get(void);
+int U_WMRF3_get(void);
+int U_WMRF4_get(void);
+int U_WMRF5_get(void);
+int U_WMRF6_get(void);
+int U_WMRCREATEPALETTE_get(const char *contents, U_PALETTE *Palette, const char **PalEntries);
+int U_WMRF8_get(void);
+int U_WMRCREATEPATTERNBRUSH_get(const char *contents, U_BITMAP16 *Bm16, int *pasize, const char **Pattern);
+int U_WMRCREATEPENINDIRECT_get(const char *contents, U_PEN *pen);
+int U_WMRCREATEFONTINDIRECT_get(const char *contents, const char **font);
+int U_WMRCREATEBRUSHINDIRECT_get(const char *contents, const char **brush);
+int U_WMRCREATEBITMAPINDIRECT_get(void);
+int U_WMRCREATEBITMAP_get(void);
+int U_WMRCREATEREGION_get(const char *contents, const char **Region);
+//! \endcond
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _UWMF_ */