/**
@file uwmf_endian.c
@brief Functions for converting WMF records between Big Endian and Little Endian byte orders.
*/
/*
File: uwmf_endian.c
Version: 0.1.5
Date: 28-MAY-2015
Author: David Mathog, Biology Division, Caltech
email: mathog@caltech.edu
Copyright: 2015 David Mathog and California Institute of Technology (Caltech)
*/
#ifdef __cplusplus
extern "C" {
#endif
#include <stdlib.h>
#include <stdio.h>
#include <stddef.h> /* for offsetof() */
#include <string.h>
#include "uwmf.h"
#include "uwmf_endian.h"
// hide almost everything in this file from Doxygen
//! \cond
/* Prototypes for functions used here and defined in uemf_endian.c, but which are not supposed
to be used in end user code. */
void U_swap2(void *ul, unsigned int count);
void U_swap4(void *ul, unsigned int count);
void bitmapinfo_swap(char *Bmi);
/* **********************************************************************************************
These functions Swap standard objects used in the WMR records.
The low level ones do not append EOL.
*********************************************************************************************** */
/**
\brief Swap U_BITMAP16 object
\param b U_BITMAP16 object
*/
void bitmap16_swap(
char *b
){
U_swap2(b,4); /* Type, Width, Height, WidthBytes */
/* Planes and BitsPixel are bytes, so no swap needed */
/* Bits[] pixel data should already be in order */
}
/**
\brief Swap a U_BRUSH object.
\param b U_BRUSH object.
style bColor bHatch
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
*/
void brush_swap(
char *b,
int torev
){
int Style;
if(torev){ Style = *(uint16_t *)(b + offsetof(U_BRUSH,Style)); }
U_swap2(b + offsetof(U_BRUSH,Style),1);
if(!torev){ Style = *(uint16_t *)(b + offsetof(U_BRUSH,Style)); }
/* Color is already in the right order */
switch(Style){
case U_BS_SOLID:
/* no/ignored data field */
break;
case U_BS_NULL:
/* no/ignored data field */
break;
case U_BS_PATTERN:
bitmap16_swap(b + offsetof(U_BRUSH,Data));
break;
case U_BS_DIBPATTERNPT:
bitmapinfo_swap(b + offsetof(U_BRUSH,Data));
break;
case U_BS_HATCHED:
/* no/ignored data field */
break;
}
}
/**
\brief Swap a U_FONT object from pointer.
\param lf U_FONT object
*/
void font_swap(
char *f
){
U_swap2(f + offsetof(U_FONT,Height),5); /*Height, Width, Escapement, Orientation, Weight */
/* Other fields are single bytes */
}
/**
\brief Swap a pointer to a U_PALETTE object.
\param lp Pointer to a U_PALETTE object.
*/
void palette_swap(
char *p
){
U_swap2(p + offsetof(U_PALETTE,Start),2); /* Start, NumEntries*/
/* PalEntries[1] is byte ordered, so no need to swap */
}
/**
\brief Swap a U_PEN object.
\param p U_PEN object
*/
void pen_swap(
char *p
){
U_swap2(p + offsetof(U_PEN,Style),3); /* Style,Widthw[0],Widthw[1] */
/* Color already in order */
}
/* there are no
void rect16_ltrb_swap()
void rect16_brtl_swap()
because rectangles are swapped using U_swap2 as an array of 4 int16 values.
*/
/**
\brief Swap U_REGION object
\param rect U_REGION object
\param torev
PARTIAL IMPLEMENTATION
*/
void region_swap(
char *reg,
int torev
){
int Size;
if(torev){ Size = *(int16_t *)(reg + offsetof(U_REGION,Size)); }
U_swap2(reg,10); /* ignore1 through sRrect*/
if(!torev){ Size = *(int16_t *)(reg + offsetof(U_REGION,Size)); }
U_swap2(reg + U_SIZE_REGION, (Size - U_SIZE_REGION)/2); /* aScans */
}
/**
\brief Swap U_BITMAPCOREHEADER object
\param ch U_BITMAPCOREHEADER object
*/
void bitmapcoreheader_swap(
char *ch
){
U_swap4(ch + offsetof(U_BITMAPCOREHEADER,Size_4), 1); /* Size_4, may not be aligned */
U_swap2(ch + offsetof(U_BITMAPCOREHEADER,Width),4); /* Width, Height, Planes, BitCount, */
}
/** LogBrushW Object WMF PDF 2.2.2.10
\brief Swap a U_WLOGBRUSH object.
\param lb U_WLOGBRUSH 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
*/
void wlogbrush_swap(
char *lb
){
U_swap2(lb + offsetof(U_WLOGBRUSH,Style),1);
/* Color is already in order */
U_swap2(lb + offsetof(U_WLOGBRUSH,Hatch),1);
}
/**
\brief Swap U_POLYPOLY object from pointer
\param pp PU_POLYPOLY object
*/
void polypolygon_swap(
char *pp,
int torev
){
int i,totPoints;
uint16_t nPolys;
uint16_t *aPolyCounts;
if(torev){ nPolys = *(uint16_t *)(pp + offsetof(U_POLYPOLYGON, nPolys)); }
U_swap2(pp + offsetof(U_POLYPOLYGON, nPolys),1);
if(!torev){ nPolys = *(uint16_t *)(pp + offsetof(U_POLYPOLYGON, nPolys)); }
aPolyCounts = (uint16_t *)(pp + offsetof(U_POLYPOLYGON, aPolyCounts));
if(torev){
for(totPoints=0,i=0;i<nPolys; i++){ totPoints += aPolyCounts[i]; }
}
U_swap2(aPolyCounts,nPolys);
if(!torev){
for(totPoints=0,i=0;i<nPolys; i++){ totPoints += aPolyCounts[i]; }
}
U_swap2(&(aPolyCounts[nPolys]),2*totPoints); /* 2 coords/ point */
}
/**
\brief Swap U_SCAN object
\param pp U_SCAN object
*/
void scan_swap(
char *sc,
int torev
){
int count;
if(torev){ count = *(uint16_t *)sc; }
U_swap2(sc,3); /*count, top, bottom */
if(!torev){ count = *(uint16_t *)sc; }
U_swap2(sc + offsetof(U_SCAN,ScanLines),count);
}
/**
\brief Swap a summary of a DIB header
A DIB header in an WMF may be either a BitmapCoreHeader or BitmapInfoHeader.
\param dh void pointer to DIB header
*/
void dibheader_swap(
char *dh,
int torev
){
int Size;
memcpy(&Size, dh, 4); /* may not be aligned */
if(!torev)U_swap4(&Size,1);
if(Size == 0xC){
bitmapcoreheader_swap(dh);
}
else {
bitmapinfo_swap(dh);
}
}
/**
\brief Swap WMF header object
\param head uint8_t pointer to header
\returns size of entire header structure
If the header is preceded by a placeable struture, Swap that as well.
*/
int wmfheader_swap(
char *contents,
int torev
){
uint32_t Key,Size16w;
int size=0;
Key=*(uint32_t *)(contents + offsetof(U_WMRPLACEABLE,Key));
if(!torev)U_swap4(&Key,1);
if(Key == 0x9AC6CDD7){
U_swap4(contents + offsetof(U_WMRPLACEABLE,Key ),1);
U_swap2(contents + offsetof(U_WMRPLACEABLE,HWmf ),1);
U_swap2(contents + offsetof(U_WMRPLACEABLE,Dst ),4);
U_swap2(contents + offsetof(U_WMRPLACEABLE,Inch ),1);
U_swap4(contents + offsetof(U_WMRPLACEABLE,Reserved),1);
U_swap2(contents + offsetof(U_WMRPLACEABLE,Checksum),1);
contents += U_SIZE_WMRPLACEABLE;
size += U_SIZE_WMRPLACEABLE;
}
if(torev){ Size16w = *(uint16_t *)(contents + offsetof(U_WMRHEADER,Size16w)); }
U_swap2(contents + offsetof(U_WMRHEADER,Size16w),2);/* Size16w, Version */
if(!torev){ Size16w = *(uint16_t *)(contents + offsetof(U_WMRHEADER,Size16w)); }
U_swap4(contents + offsetof(U_WMRHEADER,Sizew ),1);/* Sizew */
U_swap2(contents + offsetof(U_WMRHEADER,nObjects),1);/* nObjects */
U_swap4(contents + offsetof(U_WMRHEADER,maxSize ),1);/* maxSize */
U_swap2(contents + offsetof(U_WMRHEADER,nMembers),1);/* nMembers */
size += 2*Size16w;
return(size);
}
/* **********************************************************************************************
These functions contain shared code used by various U_WMR*_Swap functions. These should NEVER be called
by end user code and to further that end prototypes are NOT provided and they are hidden from Doxygen.
*********************************************************************************************** */
/* Size16 EVERY record type should call this, directly or indirectly*/
void U_WMRCORE_SIZE16_swap(char *record, int torev){
UNUSED_PARAMETER(torev);
U_swap4(record, 1); /* Size16_4 is at offset 0 in U_METARECORD */
}
/* Size16, move to data, Single 32bit followed by array of N16 U_POINT16 */
void U_WMRCORE_U32_N16_swap(char *record, int N16, int torev){
int off=U_SIZE_METARECORD;
U_WMRCORE_SIZE16_swap(record, torev);
U_swap4(record + off, 1); off+=4;
U_swap2(record + off, N16);
}
/* Single 16bit nPoints followed by array of nPoints U_POINT16 */
void U_WMRCORE_U16_N16_swap(char *record, int torev){
int nPoints;
U_WMRCORE_SIZE16_swap(record, torev);
if(torev){ nPoints = *(uint16_t *)(record + offsetof(U_WMRPOLYGON,nPoints)); }
U_swap2(record + offsetof(U_WMRPOLYGON,nPoints), 1);
if(!torev){ nPoints = *(uint16_t *)(record + offsetof(U_WMRPOLYGON,nPoints)); }
U_swap2(record + offsetof(U_WMRPOLYGON,aPoints), 2*nPoints);
}
/* all records that specify palette objects */
void U_WMRCORE_PALETTE_swap(char *record, int torev){
UNUSED_PARAMETER(torev);
U_WMRCORE_SIZE16_swap(record, torev);
palette_swap(record + offsetof(U_WMRANIMATEPALETTE,Palette));
}
/* all records that have N int16 values, unconditionally swapped */
void U_WMRCORE_N16_swap(char *record, int N16, int torev){
U_WMRCORE_SIZE16_swap(record, torev);
U_swap2(record+U_SIZE_METARECORD, N16);
}
/* like floodfill */
void U_WMRCORE_U16_CR_2U16_swap(char *record, int torev){
int off = U_SIZE_METARECORD;
U_WMRCORE_SIZE16_swap(record, torev);
U_swap2(record+off, 1); off += 2 + sizeof(U_COLORREF);
U_swap2(record+off, 2);
}
/* **********************************************************************************************
These are the core WMR functions, each creates a particular type of record.
All return these records via a char* pointer, which is NULL if the call failed.
They are listed in order by the corresponding U_EMR_* index number.
*********************************************************************************************** */
/**
\brief Swap a pointer to a U_WMR_whatever record which has not been implemented.
\param name name of this type of record
\param contents pointer to a buffer holding all EMR records
\param recnum number of this record in contents
\param off offset to this record in contents
*/
void U_WMRNOTIMPLEMENTED_swap(char *record, int torev){
U_WMRCORE_SIZE16_swap(record, torev);
}
void U_WMREOF_swap(char *record, int torev){
U_WMRCORE_SIZE16_swap(record, torev);
}
void U_WMRSETBKCOLOR_swap(char *record, int torev){
U_WMRCORE_SIZE16_swap(record, torev);
}
void U_WMRSETBKMODE_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,1,torev);
}
void U_WMRSETMAPMODE_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,1,torev);
}
void U_WMRSETROP2_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,1,torev);
}
void U_WMRSETRELABS_swap(char *record, int torev){
U_WMRCORE_SIZE16_swap(record, torev);
}
void U_WMRSETPOLYFILLMODE_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,1,torev);
}
void U_WMRSETSTRETCHBLTMODE_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,1,torev);
}
void U_WMRSETTEXTCHAREXTRA_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,1,torev);
}
void U_WMRSETTEXTCOLOR_swap(char *record, int torev){
U_WMRCORE_SIZE16_swap(record, torev);
}
void U_WMRSETTEXTJUSTIFICATION_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,2,torev);
}
void U_WMRSETWINDOWORG_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,2,torev);
}
void U_WMRSETWINDOWEXT_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,2,torev);
}
void U_WMRSETVIEWPORTORG_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,2,torev);
}
void U_WMRSETVIEWPORTEXT_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,2,torev);
}
void U_WMROFFSETWINDOWORG_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,2,torev);
}
void U_WMRSCALEWINDOWEXT_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,4,torev);
}
void U_WMROFFSETVIEWPORTORG_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,2,torev);
}
void U_WMRSCALEVIEWPORTEXT_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,4,torev);
}
void U_WMRLINETO_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,2,torev);
}
void U_WMRMOVETO_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,2,torev);
}
void U_WMREXCLUDECLIPRECT_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,4,torev);
}
void U_WMRINTERSECTCLIPRECT_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,4,torev);
}
void U_WMRARC_swap(char *record, int torev){
U_WMRCORE_N16_swap(record, 8, torev);
}
void U_WMRELLIPSE_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,4,torev);
}
void U_WMRFLOODFILL_swap(char *record, int torev){
U_WMRCORE_U16_CR_2U16_swap(record, torev);
}
void U_WMRPIE_swap(char *record, int torev){
U_WMRCORE_N16_swap(record, 8, torev);
}
void U_WMRRECTANGLE_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,4,torev);
}
void U_WMRROUNDRECT_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,6,torev);
}
void U_WMRPATBLT_swap(char *record, int torev){
U_WMRCORE_U32_N16_swap(record,4,torev);
}
void U_WMRSAVEDC_swap(char *record, int torev){
U_WMRCORE_SIZE16_swap(record, torev);
}
void U_WMRSETPIXEL_swap(char *record, int torev){
int off = U_SIZE_METARECORD + sizeof(U_COLORREF);
U_WMRCORE_SIZE16_swap(record, torev);
U_swap2(record+off, 2);
}
void U_WMROFFSETCLIPRGN_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,2,torev);
}
void U_WMRTEXTOUT_swap(char *record, int torev){
int L2;
if(torev){ L2 = *(int16_t *)(record + U_SIZE_METARECORD); } /* Length field */
U_WMRCORE_N16_swap(record,1,torev); /* Length */
if(!torev){ L2 = *(int16_t *)(record + U_SIZE_METARECORD); } /* Length field */
/* string is in bytes, do not swap that */
U_swap2(record + U_SIZE_WMRTEXTOUT + L2, 2); /* y,x */
}
void U_WMRBITBLT_swap(char *record, int torev){
uint32_t Size16;
uint8_t xb;
memcpy(&Size16, record + offsetof(U_METARECORD,Size16_4), 4);
if(!torev)U_swap4(&Size16,1);
xb = *(uint8_t *)(record + offsetof(U_METARECORD,xb));
if(U_TEST_NOPX2(Size16,xb)){ /* no bitmap */
U_WMRCORE_U32_N16_swap(record,7,torev);
}
else { /* yes bitmap */
U_WMRCORE_U32_N16_swap(record,6,torev);
bitmap16_swap(record + offsetof(U_WMRBITBLT_PX,bitmap));
}
}
void U_WMRSTRETCHBLT_swap(char *record, int torev){
uint32_t Size16;
uint8_t xb;
memcpy(&Size16, record + offsetof(U_METARECORD,Size16_4), 4);
if(!torev)U_swap4(&Size16,1);
xb = *(uint8_t *)(record + offsetof(U_METARECORD,xb));
if(U_TEST_NOPX2(Size16,xb)){ /* no bitmap */
U_WMRCORE_U32_N16_swap(record,9,torev);
}
else { /* yes bitmap */
U_WMRCORE_U32_N16_swap(record,8,torev);
bitmap16_swap(record + offsetof(U_WMRSTRETCHBLT_PX,bitmap));
}
}
void U_WMRPOLYGON_swap(char *record, int torev){
U_WMRCORE_U16_N16_swap(record, torev);
}
void U_WMRPOLYLINE_swap(char *record, int torev){
U_WMRCORE_U16_N16_swap(record, torev);
}
void U_WMRESCAPE_swap(char *record, int torev){
uint16_t eFunc;
if(torev){ eFunc = *(uint16_t *)(record + offsetof(U_WMRESCAPE,eFunc)); }
U_WMRCORE_N16_swap(record,2,torev);
if(!torev){ eFunc = *(uint16_t *)(record + offsetof(U_WMRESCAPE,eFunc)); }
/* Handle data swapping for three types only, anything else end user code must handle */
if((eFunc == U_MFE_SETLINECAP) || (eFunc == U_MFE_SETLINEJOIN) || (eFunc == U_MFE_SETMITERLIMIT)){
U_swap4(record + offsetof(U_WMRESCAPE, Data),1);
}
}
void U_WMRRESTOREDC_swap(char *record, int torev){
U_WMRCORE_SIZE16_swap(record, torev);
}
void U_WMRFILLREGION_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,2,torev);
}
void U_WMRFRAMEREGION_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,4,torev);
}
void U_WMRINVERTREGION_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,1,torev);
}
void U_WMRPAINTREGION_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,1,torev);
}
void U_WMRSELECTCLIPREGION_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,1,torev);
}
void U_WMRSELECTOBJECT_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,1,torev);
}
void U_WMRSETTEXTALIGN_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,1,torev);
}
void U_WMRDRAWTEXT_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRCHORD_swap(char *record, int torev){
U_WMRCORE_N16_swap(record, 8, torev);
}
void U_WMRSETMAPPERFLAGS_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,1,torev);
}
void U_WMREXTTEXTOUT_swap(char *record, int torev){
int off,Length,Len2,Opts;
U_swap4(record + offsetof(U_WMREXTTEXTOUT,Size16_4),1);
if(torev){
Length = *(int16_t *)( record + offsetof(U_WMREXTTEXTOUT,Length));
Opts = *(uint16_t *)(record + offsetof(U_WMREXTTEXTOUT,Opts));
}
U_swap2(record + offsetof(U_WMREXTTEXTOUT,y), 4); /* y,x,Length,Opts*/
if(!torev){
Length = *(int16_t *)( record + offsetof(U_WMREXTTEXTOUT,Length));
Opts = *(uint16_t *)(record + offsetof(U_WMREXTTEXTOUT,Opts));
}
off = U_SIZE_WMREXTTEXTOUT;
if(Opts & (U_ETO_OPAQUE | U_ETO_CLIPPED)){
U_swap2(record + off,4); off += 8;
}
Len2 = (Length & 1 ? Length + 1 : Length);
off += Len2; /* no need to swap string, it is a byte array */
U_swap2(record+off,Length); /* swap the dx array */
}
void U_WMRSETDIBTODEV_swap(char *record, int torev){
U_WMRCORE_N16_swap(record, 9, torev);
dibheader_swap(record + offsetof(U_WMRSETDIBTODEV,dib), torev);
}
void U_WMRSELECTPALETTE_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,1,torev);
}
void U_WMRREALIZEPALETTE_swap(char *record, int torev){
U_WMRCORE_SIZE16_swap(record, torev);
}
void U_WMRANIMATEPALETTE_swap(char *record, int torev){
U_WMRCORE_PALETTE_swap(record, torev);
}
void U_WMRSETPALENTRIES_swap(char *record, int torev){
U_WMRCORE_PALETTE_swap(record, torev);
}
void U_WMRPOLYPOLYGON_swap(char *record, int torev){
U_WMRCORE_SIZE16_swap(record, torev);
polypolygon_swap(record + offsetof(U_WMRPOLYPOLYGON,PPolygon), torev);
}
void U_WMRRESIZEPALETTE_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,1,torev);
}
void U_WMR3A_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR3B_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR3C_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR3D_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR3E_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR3F_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRDIBBITBLT_swap(char *record, int torev){
uint32_t Size16;
uint8_t xb;
memcpy(&Size16, record + offsetof(U_METARECORD,Size16_4), 4);
if(!torev)U_swap4(&Size16,1);
xb = *(uint8_t *)(record + offsetof(U_METARECORD,xb));
if(U_TEST_NOPX2(Size16,xb)){ /* no bitmap */
U_WMRCORE_U32_N16_swap(record,7,torev);
}
else { /* yes bitmap */
U_WMRCORE_U32_N16_swap(record,6,torev);
dibheader_swap(record + offsetof(U_WMRDIBBITBLT_PX,dib), torev);
}
}
void U_WMRDIBSTRETCHBLT_swap(char *record, int torev){
uint32_t Size16;
uint8_t xb;
memcpy(&Size16, record + offsetof(U_METARECORD,Size16_4), 4);
if(!torev)U_swap4(&Size16,1);
xb = *(uint8_t *)(record + offsetof(U_METARECORD,xb));
if(U_TEST_NOPX2(Size16,xb)){ /* no bitmap */
U_WMRCORE_U32_N16_swap(record,9,torev);
}
else { /* yes bitmap */
U_WMRCORE_U32_N16_swap(record,8,torev);
dibheader_swap(record + offsetof(U_WMRDIBSTRETCHBLT_PX,dib), torev);
}
}
void U_WMRDIBCREATEPATTERNBRUSH_swap(char *record, int torev){
int Style;
if(torev){ Style = *(uint16_t *)(record + offsetof(U_WMRDIBCREATEPATTERNBRUSH,Style)); }
U_WMRCORE_N16_swap(record,2,torev); /* Style and cUsage */
if(!torev){ Style = *(uint16_t *)(record + offsetof(U_WMRDIBCREATEPATTERNBRUSH,Style)); }
if(Style == U_BS_PATTERN){
bitmap16_swap(record + offsetof(U_WMRDIBCREATEPATTERNBRUSH,Src));
}
else {
dibheader_swap(record + offsetof(U_WMRDIBCREATEPATTERNBRUSH,Src), torev);
}
}
void U_WMRSTRETCHDIB_swap(char *record, int torev){
UNUSED_PARAMETER(torev);
U_WMRCORE_U32_N16_swap(record,9,torev);
dibheader_swap(record + offsetof(U_WMRSTRETCHDIB,dib), torev);
}
void U_WMR44_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR45_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR46_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR47_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMREXTFLOODFILL_swap(char *record, int torev){
U_WMRCORE_U16_CR_2U16_swap(record, torev);
}
void U_WMR49_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR4A_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR4B_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR4C_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR4D_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR4E_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR4F_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR50_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR51_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR52_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR53_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR54_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR55_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR56_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR57_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR58_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR59_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR5A_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR5B_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR5C_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR5D_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR5E_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR5F_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR60_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR61_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR62_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR63_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR64_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR65_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR66_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR67_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR68_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR69_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR6A_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR6B_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR6C_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR6D_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR6E_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR6F_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR70_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR71_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR72_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR73_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR74_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR75_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR76_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR77_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR78_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR79_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR7A_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR7B_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR7C_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR7D_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR7E_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR7F_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR80_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR81_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR82_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR83_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR84_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR85_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR86_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR87_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR88_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR89_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR8A_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR8B_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR8C_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR8D_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR8E_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR8F_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR90_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR91_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR92_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR93_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR94_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR95_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR96_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR97_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR98_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR99_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR9A_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR9B_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR9C_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR9D_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR9E_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMR9F_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRA0_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRA1_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRA2_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRA3_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRA4_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRA5_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRA6_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRA7_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRA8_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRA9_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRAA_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRAB_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRAC_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRAD_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRAE_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRAF_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRB0_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRB1_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRB2_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRB3_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRB4_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRB5_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRB6_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRB7_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRB8_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRB9_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRBA_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRBB_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRBC_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRBD_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRBE_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRBF_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRC0_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRC1_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRC2_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRC3_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRC4_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRC5_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRC6_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRC7_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRC8_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRC9_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRCA_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRCB_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRCC_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRCD_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRCE_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRCF_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRD0_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRD1_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRD2_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRD3_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRD4_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRD5_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRD6_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRD7_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRD8_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRD9_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRDA_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRDB_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRDC_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRDD_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRDE_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRDF_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRE0_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRE1_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRE2_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRE3_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRE4_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRE5_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRE6_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRE7_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRE8_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRE9_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMREA_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMREB_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMREC_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRED_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMREE_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMREF_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRDELETEOBJECT_swap(char *record, int torev){
U_WMRCORE_N16_swap(record,1,torev);
}
void U_WMRF1_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRF2_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRF3_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRF4_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRF5_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRF6_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRCREATEPALETTE_swap(char *record, int torev){
U_WMRCORE_PALETTE_swap(record, torev);
}
void U_WMRF8_swap(char *record, int torev){
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRCREATEPATTERNBRUSH_swap(char *record, int torev){
U_WMRCORE_SIZE16_swap(record, torev);
bitmap16_swap(record + U_SIZE_METARECORD);
/* pattern array byte order already correct? */
}
void U_WMRCREATEPENINDIRECT_swap(char *record, int torev){
U_WMRCORE_SIZE16_swap(record, torev);
pen_swap(record + offsetof(U_WMRCREATEPENINDIRECT,pen));
}
void U_WMRCREATEFONTINDIRECT_swap(char *record, int torev){
U_WMRCORE_SIZE16_swap(record, torev);
font_swap(record + offsetof(U_WMRCREATEFONTINDIRECT,font));
}
void U_WMRCREATEBRUSHINDIRECT_swap(char *record, int torev){
U_WMRCORE_SIZE16_swap(record, torev);
wlogbrush_swap(record + offsetof(U_WMRCREATEBRUSHINDIRECT,brush));
}
void U_WMRCREATEBITMAPINDIRECT_swap(char *record, int torev){ /* in Wine, not in WMF PDF */
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRCREATEBITMAP_swap(char *record, int torev){ /* in Wine, not in WMF PDF */
U_WMRNOTIMPLEMENTED_swap(record, torev);
}
void U_WMRCREATEREGION_swap(char *record, int torev){
U_WMRCORE_SIZE16_swap(record, torev);
region_swap(record + offsetof(U_WMRCREATEREGION,region), torev);
}
//! \endcond
/**
\brief Convert an entire WMF in memory from Big Endian to Little Endian (or vice versa).
\return 0 on failure, 1 on success
\param contents pointer to the buffer holding the entire EMF in memory
\param length number of bytes in the buffer
\param torev 1 for native to reversed, 0 for reversed to native
\param onerec 1 if this is operating on a single record instead of an entire file
Normally this would be called immediately before writing the data to a file
or immediately after reading the data from a file.
*/
int U_wmf_endian(char *contents, size_t length, int torev, int onerec){
size_t off=0;
uint32_t OK, Size16;
uint8_t iType;
char *record;
int recnum;
int offset=0;
record = contents;
if(!onerec){
off = wmfheader_swap(record,torev); fflush(stdout); /* WMF header is not a normal record, handle it separately */
record += off;
offset = off;
}
OK = 1;
recnum = 1; /* used when debugging */
while(OK){
if(record > contents + length){ return(0); } // this is most likely a corrupt WMF
memcpy(&Size16, record + offsetof(U_METARECORD,Size16_4), 4); /* This may not be aligned */
if(!torev){ U_swap4(&Size16,1); }
iType = *(uint8_t *)(record + offsetof(U_METARECORD,iType));
//printf("DEBUG U_wmf_endian before switch record:%d offset:%d type:%d name:%s Size16:%d\n",recnum,offset,iType,U_wmr_names(iType),Size16);fflush(stdout);
switch (iType)
{
case U_WMR_EOF: U_WMREOF_swap(record, torev); OK=0; break;
case U_WMR_SETBKCOLOR: U_WMRSETBKCOLOR_swap(record, torev); break;
case U_WMR_SETBKMODE: U_WMRSETBKMODE_swap(record, torev); break;
case U_WMR_SETMAPMODE: U_WMRSETMAPMODE_swap(record, torev); break;
case U_WMR_SETROP2: U_WMRSETROP2_swap(record, torev); break;
case U_WMR_SETRELABS: U_WMRSETRELABS_swap(record, torev); break;
case U_WMR_SETPOLYFILLMODE: U_WMRSETPOLYFILLMODE_swap(record, torev); break;
case U_WMR_SETSTRETCHBLTMODE: U_WMRSETSTRETCHBLTMODE_swap(record, torev); break;
case U_WMR_SETTEXTCHAREXTRA: U_WMRSETTEXTCHAREXTRA_swap(record, torev); break;
case U_WMR_SETTEXTCOLOR: U_WMRSETTEXTCOLOR_swap(record, torev); break;
case U_WMR_SETTEXTJUSTIFICATION: U_WMRSETTEXTJUSTIFICATION_swap(record, torev); break;
case U_WMR_SETWINDOWORG: U_WMRSETWINDOWORG_swap(record, torev); break;
case U_WMR_SETWINDOWEXT: U_WMRSETWINDOWEXT_swap(record, torev); break;
case U_WMR_SETVIEWPORTORG: U_WMRSETVIEWPORTORG_swap(record, torev); break;
case U_WMR_SETVIEWPORTEXT: U_WMRSETVIEWPORTEXT_swap(record, torev); break;
case U_WMR_OFFSETWINDOWORG: U_WMROFFSETWINDOWORG_swap(record, torev); break;
case U_WMR_SCALEWINDOWEXT: U_WMRSCALEWINDOWEXT_swap(record, torev); break;
case U_WMR_OFFSETVIEWPORTORG: U_WMROFFSETVIEWPORTORG_swap(record, torev); break;
case U_WMR_SCALEVIEWPORTEXT: U_WMRSCALEVIEWPORTEXT_swap(record, torev); break;
case U_WMR_LINETO: U_WMRLINETO_swap(record, torev); break;
case U_WMR_MOVETO: U_WMRMOVETO_swap(record, torev); break;
case U_WMR_EXCLUDECLIPRECT: U_WMREXCLUDECLIPRECT_swap(record, torev); break;
case U_WMR_INTERSECTCLIPRECT: U_WMRINTERSECTCLIPRECT_swap(record, torev); break;
case U_WMR_ARC: U_WMRARC_swap(record, torev); break;
case U_WMR_ELLIPSE: U_WMRELLIPSE_swap(record, torev); break;
case U_WMR_FLOODFILL: U_WMRFLOODFILL_swap(record, torev); break;
case U_WMR_PIE: U_WMRPIE_swap(record, torev); break;
case U_WMR_RECTANGLE: U_WMRRECTANGLE_swap(record, torev); break;
case U_WMR_ROUNDRECT: U_WMRROUNDRECT_swap(record, torev); break;
case U_WMR_PATBLT: U_WMRPATBLT_swap(record, torev); break;
case U_WMR_SAVEDC: U_WMRSAVEDC_swap(record, torev); break;
case U_WMR_SETPIXEL: U_WMRSETPIXEL_swap(record, torev); break;
case U_WMR_OFFSETCLIPRGN: U_WMROFFSETCLIPRGN_swap(record, torev); break;
case U_WMR_TEXTOUT: U_WMRTEXTOUT_swap(record, torev); break;
case U_WMR_BITBLT: U_WMRBITBLT_swap(record, torev); break;
case U_WMR_STRETCHBLT: U_WMRSTRETCHBLT_swap(record, torev); break;
case U_WMR_POLYGON: U_WMRPOLYGON_swap(record, torev); break;
case U_WMR_POLYLINE: U_WMRPOLYLINE_swap(record, torev); break;
case U_WMR_ESCAPE: U_WMRESCAPE_swap(record, torev); break;
case U_WMR_RESTOREDC: U_WMRRESTOREDC_swap(record, torev); break;
case U_WMR_FILLREGION: U_WMRFILLREGION_swap(record, torev); break;
case U_WMR_FRAMEREGION: U_WMRFRAMEREGION_swap(record, torev); break;
case U_WMR_INVERTREGION: U_WMRINVERTREGION_swap(record, torev); break;
case U_WMR_PAINTREGION: U_WMRPAINTREGION_swap(record, torev); break;
case U_WMR_SELECTCLIPREGION: U_WMRSELECTCLIPREGION_swap(record, torev); break;
case U_WMR_SELECTOBJECT: U_WMRSELECTOBJECT_swap(record, torev); break;
case U_WMR_SETTEXTALIGN: U_WMRSETTEXTALIGN_swap(record, torev); break;
case U_WMR_DRAWTEXT: U_WMRDRAWTEXT_swap(record, torev); break;
case U_WMR_CHORD: U_WMRCHORD_swap(record, torev); break;
case U_WMR_SETMAPPERFLAGS: U_WMRSETMAPPERFLAGS_swap(record, torev); break;
case U_WMR_EXTTEXTOUT: U_WMREXTTEXTOUT_swap(record, torev); break;
case U_WMR_SETDIBTODEV: U_WMRSETDIBTODEV_swap(record, torev); break;
case U_WMR_SELECTPALETTE: U_WMRSELECTPALETTE_swap(record, torev); break;
case U_WMR_REALIZEPALETTE: U_WMRREALIZEPALETTE_swap(record, torev); break;
case U_WMR_ANIMATEPALETTE: U_WMRANIMATEPALETTE_swap(record, torev); break;
case U_WMR_SETPALENTRIES: U_WMRSETPALENTRIES_swap(record, torev); break;
case U_WMR_POLYPOLYGON: U_WMRPOLYPOLYGON_swap(record, torev); break;
case U_WMR_RESIZEPALETTE: U_WMRRESIZEPALETTE_swap(record, torev); break;
case U_WMR_3A: U_WMR3A_swap(record, torev); break;
case U_WMR_3B: U_WMR3B_swap(record, torev); break;
case U_WMR_3C: U_WMR3C_swap(record, torev); break;
case U_WMR_3D: U_WMR3D_swap(record, torev); break;
case U_WMR_3E: U_WMR3E_swap(record, torev); break;
case U_WMR_3F: U_WMR3F_swap(record, torev); break;
case U_WMR_DIBBITBLT: U_WMRDIBBITBLT_swap(record, torev); break;
case U_WMR_DIBSTRETCHBLT: U_WMRDIBSTRETCHBLT_swap(record, torev); break;
case U_WMR_DIBCREATEPATTERNBRUSH: U_WMRDIBCREATEPATTERNBRUSH_swap(record, torev); break;
case U_WMR_STRETCHDIB: U_WMRSTRETCHDIB_swap(record, torev); break;
case U_WMR_44: U_WMR44_swap(record, torev); break;
case U_WMR_45: U_WMR45_swap(record, torev); break;
case U_WMR_46: U_WMR46_swap(record, torev); break;
case U_WMR_47: U_WMR47_swap(record, torev); break;
case U_WMR_EXTFLOODFILL: U_WMREXTFLOODFILL_swap(record, torev); break;
case U_WMR_49: U_WMR49_swap(record, torev); break;
case U_WMR_4A: U_WMR4A_swap(record, torev); break;
case U_WMR_4B: U_WMR4B_swap(record, torev); break;
case U_WMR_4C: U_WMR4C_swap(record, torev); break;
case U_WMR_4D: U_WMR4D_swap(record, torev); break;
case U_WMR_4E: U_WMR4E_swap(record, torev); break;
case U_WMR_4F: U_WMR4F_swap(record, torev); break;
case U_WMR_50: U_WMR50_swap(record, torev); break;
case U_WMR_51: U_WMR51_swap(record, torev); break;
case U_WMR_52: U_WMR52_swap(record, torev); break;
case U_WMR_53: U_WMR53_swap(record, torev); break;
case U_WMR_54: U_WMR54_swap(record, torev); break;
case U_WMR_55: U_WMR55_swap(record, torev); break;
case U_WMR_56: U_WMR56_swap(record, torev); break;
case U_WMR_57: U_WMR57_swap(record, torev); break;
case U_WMR_58: U_WMR58_swap(record, torev); break;
case U_WMR_59: U_WMR59_swap(record, torev); break;
case U_WMR_5A: U_WMR5A_swap(record, torev); break;
case U_WMR_5B: U_WMR5B_swap(record, torev); break;
case U_WMR_5C: U_WMR5C_swap(record, torev); break;
case U_WMR_5D: U_WMR5D_swap(record, torev); break;
case U_WMR_5E: U_WMR5E_swap(record, torev); break;
case U_WMR_5F: U_WMR5F_swap(record, torev); break;
case U_WMR_60: U_WMR60_swap(record, torev); break;
case U_WMR_61: U_WMR61_swap(record, torev); break;
case U_WMR_62: U_WMR62_swap(record, torev); break;
case U_WMR_63: U_WMR63_swap(record, torev); break;
case U_WMR_64: U_WMR64_swap(record, torev); break;
case U_WMR_65: U_WMR65_swap(record, torev); break;
case U_WMR_66: U_WMR66_swap(record, torev); break;
case U_WMR_67: U_WMR67_swap(record, torev); break;
case U_WMR_68: U_WMR68_swap(record, torev); break;
case U_WMR_69: U_WMR69_swap(record, torev); break;
case U_WMR_6A: U_WMR6A_swap(record, torev); break;
case U_WMR_6B: U_WMR6B_swap(record, torev); break;
case U_WMR_6C: U_WMR6C_swap(record, torev); break;
case U_WMR_6D: U_WMR6D_swap(record, torev); break;
case U_WMR_6E: U_WMR6E_swap(record, torev); break;
case U_WMR_6F: U_WMR6F_swap(record, torev); break;
case U_WMR_70: U_WMR70_swap(record, torev); break;
case U_WMR_71: U_WMR71_swap(record, torev); break;
case U_WMR_72: U_WMR72_swap(record, torev); break;
case U_WMR_73: U_WMR73_swap(record, torev); break;
case U_WMR_74: U_WMR74_swap(record, torev); break;
case U_WMR_75: U_WMR75_swap(record, torev); break;
case U_WMR_76: U_WMR76_swap(record, torev); break;
case U_WMR_77: U_WMR77_swap(record, torev); break;
case U_WMR_78: U_WMR78_swap(record, torev); break;
case U_WMR_79: U_WMR79_swap(record, torev); break;
case U_WMR_7A: U_WMR7A_swap(record, torev); break;
case U_WMR_7B: U_WMR7B_swap(record, torev); break;
case U_WMR_7C: U_WMR7C_swap(record, torev); break;
case U_WMR_7D: U_WMR7D_swap(record, torev); break;
case U_WMR_7E: U_WMR7E_swap(record, torev); break;
case U_WMR_7F: U_WMR7F_swap(record, torev); break;
case U_WMR_80: U_WMR80_swap(record, torev); break;
case U_WMR_81: U_WMR81_swap(record, torev); break;
case U_WMR_82: U_WMR82_swap(record, torev); break;
case U_WMR_83: U_WMR83_swap(record, torev); break;
case U_WMR_84: U_WMR84_swap(record, torev); break;
case U_WMR_85: U_WMR85_swap(record, torev); break;
case U_WMR_86: U_WMR86_swap(record, torev); break;
case U_WMR_87: U_WMR87_swap(record, torev); break;
case U_WMR_88: U_WMR88_swap(record, torev); break;
case U_WMR_89: U_WMR89_swap(record, torev); break;
case U_WMR_8A: U_WMR8A_swap(record, torev); break;
case U_WMR_8B: U_WMR8B_swap(record, torev); break;
case U_WMR_8C: U_WMR8C_swap(record, torev); break;
case U_WMR_8D: U_WMR8D_swap(record, torev); break;
case U_WMR_8E: U_WMR8E_swap(record, torev); break;
case U_WMR_8F: U_WMR8F_swap(record, torev); break;
case U_WMR_90: U_WMR90_swap(record, torev); break;
case U_WMR_91: U_WMR91_swap(record, torev); break;
case U_WMR_92: U_WMR92_swap(record, torev); break;
case U_WMR_93: U_WMR93_swap(record, torev); break;
case U_WMR_94: U_WMR94_swap(record, torev); break;
case U_WMR_95: U_WMR95_swap(record, torev); break;
case U_WMR_96: U_WMR96_swap(record, torev); break;
case U_WMR_97: U_WMR97_swap(record, torev); break;
case U_WMR_98: U_WMR98_swap(record, torev); break;
case U_WMR_99: U_WMR99_swap(record, torev); break;
case U_WMR_9A: U_WMR9A_swap(record, torev); break;
case U_WMR_9B: U_WMR9B_swap(record, torev); break;
case U_WMR_9C: U_WMR9C_swap(record, torev); break;
case U_WMR_9D: U_WMR9D_swap(record, torev); break;
case U_WMR_9E: U_WMR9E_swap(record, torev); break;
case U_WMR_9F: U_WMR9F_swap(record, torev); break;
case U_WMR_A0: U_WMRA0_swap(record, torev); break;
case U_WMR_A1: U_WMRA1_swap(record, torev); break;
case U_WMR_A2: U_WMRA2_swap(record, torev); break;
case U_WMR_A3: U_WMRA3_swap(record, torev); break;
case U_WMR_A4: U_WMRA4_swap(record, torev); break;
case U_WMR_A5: U_WMRA5_swap(record, torev); break;
case U_WMR_A6: U_WMRA6_swap(record, torev); break;
case U_WMR_A7: U_WMRA7_swap(record, torev); break;
case U_WMR_A8: U_WMRA8_swap(record, torev); break;
case U_WMR_A9: U_WMRA9_swap(record, torev); break;
case U_WMR_AA: U_WMRAA_swap(record, torev); break;
case U_WMR_AB: U_WMRAB_swap(record, torev); break;
case U_WMR_AC: U_WMRAC_swap(record, torev); break;
case U_WMR_AD: U_WMRAD_swap(record, torev); break;
case U_WMR_AE: U_WMRAE_swap(record, torev); break;
case U_WMR_AF: U_WMRAF_swap(record, torev); break;
case U_WMR_B0: U_WMRB0_swap(record, torev); break;
case U_WMR_B1: U_WMRB1_swap(record, torev); break;
case U_WMR_B2: U_WMRB2_swap(record, torev); break;
case U_WMR_B3: U_WMRB3_swap(record, torev); break;
case U_WMR_B4: U_WMRB4_swap(record, torev); break;
case U_WMR_B5: U_WMRB5_swap(record, torev); break;
case U_WMR_B6: U_WMRB6_swap(record, torev); break;
case U_WMR_B7: U_WMRB7_swap(record, torev); break;
case U_WMR_B8: U_WMRB8_swap(record, torev); break;
case U_WMR_B9: U_WMRB9_swap(record, torev); break;
case U_WMR_BA: U_WMRBA_swap(record, torev); break;
case U_WMR_BB: U_WMRBB_swap(record, torev); break;
case U_WMR_BC: U_WMRBC_swap(record, torev); break;
case U_WMR_BD: U_WMRBD_swap(record, torev); break;
case U_WMR_BE: U_WMRBE_swap(record, torev); break;
case U_WMR_BF: U_WMRBF_swap(record, torev); break;
case U_WMR_C0: U_WMRC0_swap(record, torev); break;
case U_WMR_C1: U_WMRC1_swap(record, torev); break;
case U_WMR_C2: U_WMRC2_swap(record, torev); break;
case U_WMR_C3: U_WMRC3_swap(record, torev); break;
case U_WMR_C4: U_WMRC4_swap(record, torev); break;
case U_WMR_C5: U_WMRC5_swap(record, torev); break;
case U_WMR_C6: U_WMRC6_swap(record, torev); break;
case U_WMR_C7: U_WMRC7_swap(record, torev); break;
case U_WMR_C8: U_WMRC8_swap(record, torev); break;
case U_WMR_C9: U_WMRC9_swap(record, torev); break;
case U_WMR_CA: U_WMRCA_swap(record, torev); break;
case U_WMR_CB: U_WMRCB_swap(record, torev); break;
case U_WMR_CC: U_WMRCC_swap(record, torev); break;
case U_WMR_CD: U_WMRCD_swap(record, torev); break;
case U_WMR_CE: U_WMRCE_swap(record, torev); break;
case U_WMR_CF: U_WMRCF_swap(record, torev); break;
case U_WMR_D0: U_WMRD0_swap(record, torev); break;
case U_WMR_D1: U_WMRD1_swap(record, torev); break;
case U_WMR_D2: U_WMRD2_swap(record, torev); break;
case U_WMR_D3: U_WMRD3_swap(record, torev); break;
case U_WMR_D4: U_WMRD4_swap(record, torev); break;
case U_WMR_D5: U_WMRD5_swap(record, torev); break;
case U_WMR_D6: U_WMRD6_swap(record, torev); break;
case U_WMR_D7: U_WMRD7_swap(record, torev); break;
case U_WMR_D8: U_WMRD8_swap(record, torev); break;
case U_WMR_D9: U_WMRD9_swap(record, torev); break;
case U_WMR_DA: U_WMRDA_swap(record, torev); break;
case U_WMR_DB: U_WMRDB_swap(record, torev); break;
case U_WMR_DC: U_WMRDC_swap(record, torev); break;
case U_WMR_DD: U_WMRDD_swap(record, torev); break;
case U_WMR_DE: U_WMRDE_swap(record, torev); break;
case U_WMR_DF: U_WMRDF_swap(record, torev); break;
case U_WMR_E0: U_WMRE0_swap(record, torev); break;
case U_WMR_E1: U_WMRE1_swap(record, torev); break;
case U_WMR_E2: U_WMRE2_swap(record, torev); break;
case U_WMR_E3: U_WMRE3_swap(record, torev); break;
case U_WMR_E4: U_WMRE4_swap(record, torev); break;
case U_WMR_E5: U_WMRE5_swap(record, torev); break;
case U_WMR_E6: U_WMRE6_swap(record, torev); break;
case U_WMR_E7: U_WMRE7_swap(record, torev); break;
case U_WMR_E8: U_WMRE8_swap(record, torev); break;
case U_WMR_E9: U_WMRE9_swap(record, torev); break;
case U_WMR_EA: U_WMREA_swap(record, torev); break;
case U_WMR_EB: U_WMREB_swap(record, torev); break;
case U_WMR_EC: U_WMREC_swap(record, torev); break;
case U_WMR_ED: U_WMRED_swap(record, torev); break;
case U_WMR_EE: U_WMREE_swap(record, torev); break;
case U_WMR_EF: U_WMREF_swap(record, torev); break;
case U_WMR_DELETEOBJECT: U_WMRDELETEOBJECT_swap(record, torev); break;
case U_WMR_F1: U_WMRF1_swap(record, torev); break;
case U_WMR_F2: U_WMRF2_swap(record, torev); break;
case U_WMR_F3: U_WMRF3_swap(record, torev); break;
case U_WMR_F4: U_WMRF4_swap(record, torev); break;
case U_WMR_F5: U_WMRF5_swap(record, torev); break;
case U_WMR_F6: U_WMRF6_swap(record, torev); break;
case U_WMR_CREATEPALETTE: U_WMRCREATEPALETTE_swap(record, torev); break;
case U_WMR_F8: U_WMRF8_swap(record, torev); break;
case U_WMR_CREATEPATTERNBRUSH: U_WMRCREATEPATTERNBRUSH_swap(record, torev); break;
case U_WMR_CREATEPENINDIRECT: U_WMRCREATEPENINDIRECT_swap(record, torev); break;
case U_WMR_CREATEFONTINDIRECT: U_WMRCREATEFONTINDIRECT_swap(record, torev); break;
case U_WMR_CREATEBRUSHINDIRECT: U_WMRCREATEBRUSHINDIRECT_swap(record, torev); break;
case U_WMR_CREATEBITMAPINDIRECT: U_WMRCREATEBITMAPINDIRECT_swap(record, torev); break;
case U_WMR_CREATEBITMAP: U_WMRCREATEBITMAP_swap(record, torev); break;
case U_WMR_CREATEREGION: U_WMRCREATEREGION_swap(record, torev); break;
default: U_WMRNOTIMPLEMENTED_swap(record, torev); break;
} //end of switch
if(onerec)break;
record += 2*Size16;
offset += 2*Size16;
recnum++;
} //end of while
return(1);
}
#ifdef __cplusplus
}
#endif