summaryrefslogtreecommitdiffstats
path: root/src/libuemf/uemf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libuemf/uemf.c')
-rw-r--r--src/libuemf/uemf.c273
1 files changed, 150 insertions, 123 deletions
diff --git a/src/libuemf/uemf.c b/src/libuemf/uemf.c
index 1d417dece..3180c757c 100644
--- a/src/libuemf/uemf.c
+++ b/src/libuemf/uemf.c
@@ -16,11 +16,11 @@
/*
File: uemf.c
-Version: 0.0.28
-Date: 04-APR-2014
+Version: 0.0.30
+Date: 20-MAR-2015
Author: David Mathog, Biology Division, Caltech
email: mathog@caltech.edu
-Copyright: 2014 David Mathog and California Institute of Technology (Caltech)
+Copyright: 2015 David Mathog and California Institute of Technology (Caltech)
*/
#ifdef __cplusplus
@@ -199,7 +199,7 @@ definitions are not needed in end user code, so they are here rather than in uem
// this one may also be used A=Msk,B=MskBmi and F=cbMsk
#define SET_CB_FROM_PXBMI(A,B,C,D,E,F) /* A=Px, B=Bmi, C=cbImage, D=cbImage4, E=cbBmi, F=cbPx */ \
if(A){\
- if(!B)return(NULL); /* size is derived from U_BIMAPINFO, but NOT from its size field, go figure*/ \
+ if(!B)return(NULL); /* size is derived from U_BITMAPINFO, but NOT from its size field, go figure*/ \
C = F;\
D = UP4(C); /* pixel array might not be a multiples of 4 bytes*/ \
E = sizeof(U_BITMAPINFOHEADER) + 4 * get_real_color_count((const char *) &(B->bmiHeader)); /* bmiheader + colortable*/ \
@@ -851,7 +851,7 @@ int get_real_color_icount(
\brief Get the DIB parameters from the BMI of the record for use by DBI_to_RGBA()
\return BI_Compression Enumeration. For anything other than U_BI_RGB values other than px may not be valid.
- \param pEmr pointer to EMR record that has a U_BITMAPINFO and bitmap
+ \param record pointer to EMR record that has a U_BITMAPINFO and bitmap
\param offBitsSrc Offset to the bitmap
\param offBmiSrc Offset to the U_BITMAPINFO
\param px pointer to DIB pixel array in pEmr
@@ -863,7 +863,7 @@ int get_real_color_icount(
\param invert If DIB rows are in opposite order from RGBA rows
*/
int get_DIB_params(
- void *pEmr,
+ const char *record,
uint32_t offBitsSrc,
uint32_t offBmiSrc,
const char **px,
@@ -875,7 +875,7 @@ int get_DIB_params(
uint32_t *invert
){
uint32_t bic;
- PU_BITMAPINFO Bmi = (PU_BITMAPINFO)((char *)pEmr + offBmiSrc);
+ PU_BITMAPINFO Bmi = (PU_BITMAPINFO)(record + offBmiSrc);
PU_BITMAPINFOHEADER Bmih = &(Bmi->bmiHeader);
/* if biCompression is not U_BI_RGB some or all of the following might not hold real values */
bic = Bmih->biCompression;
@@ -903,7 +903,7 @@ int get_DIB_params(
*numCt = Bmih->biSizeImage;
*ct = NULL;
}
- *px = (char *)((char *)pEmr + offBitsSrc);
+ *px = record + offBitsSrc;
return(bic);
}
@@ -1611,6 +1611,26 @@ U_RECTL rectl_set(
}
/**
+ \brief Set rect and rectl objects from Upper Left and Lower Right corner points.
+ \param array array of rectangles
+ \param index array entry to fill, numbered from 0
+ \param ul upper left corner of rectangle
+ \param lr lower right corner of rectangle
+*/
+void rectli_set(
+ PU_RECTL array,
+ int index,
+ U_POINTL ul,
+ U_POINTL lr
+ ){
+ PU_RECTL rct = &(array[index]);
+ rct->left = ul.x;
+ rct->top = ul.y;
+ rct->right = lr.x;
+ rct->bottom = lr.y;
+}
+
+/**
\brief Set sizel objects with X,Y values.
\param x X coordinate
\param y Y coordinate
@@ -2192,7 +2212,7 @@ U_RGNDATAHEADER rgndataheader_set(
rdh.dwSize = U_RDH_OBJSIZE;
rdh.iType = U_RDH_RECTANGLES;
rdh.nCount = nCount;
- rdh.nRgnSize = nCount * sizeof(U_RECTL); // Size in bytes of retangle array
+ rdh.nRgnSize = nCount * sizeof(U_RECTL); // Size in bytes of rectangle array
rdh.rclBounds = rclBounds;
return(rdh);
}
@@ -2857,7 +2877,7 @@ by end user code and to further that end prototypes are NOT provided and they ar
// Functions with the same form starting with U_EMRPOLYBEZIER_set
-char *U_EMR_CORE1(uint32_t iType, U_RECTL rclBounds, const uint32_t cptl, const U_POINTL *points){
+char *U_EMR_CORE1_set(uint32_t iType, U_RECTL rclBounds, const uint32_t cptl, const U_POINTL *points){
char *record;
int cbPoints;
int irecsize;
@@ -2876,7 +2896,7 @@ char *U_EMR_CORE1(uint32_t iType, U_RECTL rclBounds, const uint32_t cptl, const
}
// Functions with the same form starting with U_EMR_POLYPOLYLINE
-char *U_EMR_CORE2(uint32_t iType, U_RECTL rclBounds, const uint32_t nPolys, const uint32_t *aPolyCounts,const uint32_t cptl, const U_POINTL *points){
+char *U_EMR_CORE2_set(uint32_t iType, U_RECTL rclBounds, const uint32_t nPolys, const uint32_t *aPolyCounts,const uint32_t cptl, const U_POINTL *points){
char *record;
int cbPolys,cbPoints,off;
int irecsize;
@@ -2899,7 +2919,7 @@ char *U_EMR_CORE2(uint32_t iType, U_RECTL rclBounds, const uint32_t nPolys, cons
}
// Functions with the same form starting with U_EMR_SETMAPMODE_set
-char *U_EMR_CORE3(uint32_t iType, uint32_t iMode){
+char *U_EMR_CORE3_set(uint32_t iType, uint32_t iMode){
char *record;
int irecsize;
@@ -2914,7 +2934,7 @@ char *U_EMR_CORE3(uint32_t iType, uint32_t iMode){
}
// Functions taking a single U_RECT or U_RECTL, starting with U_EMRELLIPSE_set, also U_EMRFILLPATH,
-char *U_EMR_CORE4(uint32_t iType, U_RECTL rclBox){
+char *U_EMR_CORE4_set(uint32_t iType, U_RECTL rclBox){
char *record;
int irecsize;
@@ -2930,7 +2950,7 @@ char *U_EMR_CORE4(uint32_t iType, U_RECTL rclBox){
}
// Functions with the same form starting with U_EMRSETMETARGN_set
-char *U_EMR_CORE5(uint32_t iType){
+char *U_EMR_CORE5_set(uint32_t iType){
char *record;
int irecsize = 8;
@@ -2943,7 +2963,7 @@ char *U_EMR_CORE5(uint32_t iType){
}
// Functions with the same form starting with U_EMRPOLYBEZIER16_set
-char *U_EMR_CORE6(uint32_t iType, U_RECTL rclBounds, const uint32_t cpts, const U_POINT16 *points){
+char *U_EMR_CORE6_set(uint32_t iType, U_RECTL rclBounds, const uint32_t cpts, const U_POINT16 *points){
char *record;
int cbPoints,cbPoints4,off;
int irecsize;
@@ -2970,7 +2990,7 @@ char *U_EMR_CORE6(uint32_t iType, U_RECTL rclBounds, const uint32_t cpts, const
// Functions that take a single struct argument which contains two uint32_t, starting with U_EMRSETWINDOWEXTEX_set
// these all pass two 32 bit ints and are cast by the caller to U_PAIR
-char *U_EMR_CORE7(uint32_t iType, U_PAIR pair){
+char *U_EMR_CORE7_set(uint32_t iType, U_PAIR pair){
char *record;
int irecsize = sizeof(U_EMRGENERICPAIR);
@@ -2984,7 +3004,7 @@ char *U_EMR_CORE7(uint32_t iType, U_PAIR pair){
}
// For U_EMREXTTEXTOUTA and U_EMREXTTEXTOUTW
-char *U_EMR_CORE8(
+char *U_EMR_CORE8_set(
uint32_t iType,
U_RECTL rclBounds, // Bounding rectangle in device units
uint32_t iGraphicsMode, // Graphics mode Enumeration
@@ -3033,7 +3053,7 @@ char *U_EMR_CORE8(
}
// Functions that take a rect and a pair of points, starting with U_EMRARC_set
-char *U_EMR_CORE9(uint32_t iType, U_RECTL rclBox, U_POINTL ptlStart, U_POINTL ptlEnd){
+char *U_EMR_CORE9_set(uint32_t iType, U_RECTL rclBox, U_POINTL ptlStart, U_POINTL ptlEnd){
char *record;
int irecsize = sizeof(U_EMRARC);
@@ -3049,7 +3069,7 @@ char *U_EMR_CORE9(uint32_t iType, U_RECTL rclBox, U_POINTL ptlStart, U_POINTL pt
}
// Functions with the same form starting with U_EMR_POLYPOLYLINE16
-char *U_EMR_CORE10(uint32_t iType, U_RECTL rclBounds, const uint32_t nPolys, const uint32_t *aPolyCounts,const uint32_t cpts, const U_POINT16 *points){
+char *U_EMR_CORE10_set(uint32_t iType, U_RECTL rclBounds, const uint32_t nPolys, const uint32_t *aPolyCounts,const uint32_t cpts, const U_POINT16 *points){
char *record;
int cbPoints,cbPolys,off;
int irecsize;
@@ -3072,25 +3092,27 @@ char *U_EMR_CORE10(uint32_t iType, U_RECTL rclBounds, const uint32_t nPolys, con
}
// common code for U_EMRINVERTRGN and U_EMRPAINTRGN,
-char *U_EMR_CORE11(uint32_t iType, PU_RGNDATA RgnData){
+char *U_EMR_CORE11_set(uint32_t iType, PU_RGNDATA RgnData){
char *record;
int irecsize;
- int cbRgns,cbRgns4,off;
+ int cbRgns,cbRgns4,rds,rds4,off;
if(!RgnData)return(NULL);
cbRgns = ((PU_RGNDATAHEADER) RgnData)->nRgnSize;
cbRgns4 = UP4(cbRgns);
- irecsize = sizeof(U_EMRINVERTRGN) + cbRgns4 - sizeof(U_RGNDATAHEADER); // core + array - overlap
- record = malloc(irecsize);
+ rds = sizeof(U_RGNDATAHEADER) + cbRgns;
+ rds4 = UP4(rds);
+ irecsize = sizeof(U_EMRINVERTRGN) - sizeof(U_RECTL) + cbRgns4; // core + array - overlap of one rectL
+ record = malloc(irecsize);
if(record){
((PU_EMR) record)->iType = iType;
((PU_EMR) record)->nSize = irecsize;
((PU_EMRINVERTRGN) record)->rclBounds = ((PU_RGNDATAHEADER) RgnData)->rclBounds;
- ((PU_EMRINVERTRGN) record)->cbRgnData = cbRgns;
- off = irecsize - cbRgns4;
- memcpy(record + off, RgnData, cbRgns);
- off += cbRgns;
- if(cbRgns < cbRgns4){ memset(record + off,0, cbRgns4 - cbRgns); } // clear any unused bytes
+ ((PU_EMRINVERTRGN) record)->cbRgnData = rds;
+ off = sizeof(U_EMRINVERTRGN) - sizeof(U_RGNDATA);
+ memcpy(record + off, RgnData, rds);
+ off += rds;
+ if(rds < rds4){ memset(record + off,0, rds4 - rds); } // clear any unused bytes
}
return(record);
}
@@ -3274,7 +3296,7 @@ char *U_EMRPOLYBEZIER_set(
const uint32_t cptl,
const U_POINTL *points
){
- return(U_EMR_CORE1(U_EMR_POLYBEZIER, rclBounds, cptl, points));
+ return(U_EMR_CORE1_set(U_EMR_POLYBEZIER, rclBounds, cptl, points));
}
// U_EMRPOLYGON_set 3
@@ -3290,7 +3312,7 @@ char *U_EMRPOLYGON_set(
const uint32_t cptl,
const U_POINTL *points
){
- return(U_EMR_CORE1(U_EMR_POLYGON, rclBounds, cptl, points));
+ return(U_EMR_CORE1_set(U_EMR_POLYGON, rclBounds, cptl, points));
}
// U_EMRPOLYLINE_set 4
@@ -3306,7 +3328,7 @@ char *U_EMRPOLYLINE_set(
const uint32_t cptl,
const U_POINTL *points
){
- return(U_EMR_CORE1(U_EMR_POLYLINE, rclBounds, cptl, points));
+ return(U_EMR_CORE1_set(U_EMR_POLYLINE, rclBounds, cptl, points));
}
// U_EMRPOLYBEZIERTO_set 5
@@ -3322,7 +3344,7 @@ char *U_EMRPOLYBEZIERTO_set(
const uint32_t cptl,
const U_POINTL *points
){
- return(U_EMR_CORE1(U_EMR_POLYBEZIERTO, rclBounds, cptl, points));
+ return(U_EMR_CORE1_set(U_EMR_POLYBEZIERTO, rclBounds, cptl, points));
}
// U_EMRPOLYLINETO_set 6
@@ -3338,7 +3360,7 @@ char *U_EMRPOLYLINETO_set(
const uint32_t cptl,
const U_POINTL *points
){
- return(U_EMR_CORE1(U_EMR_POLYLINETO, rclBounds, cptl, points));
+ return(U_EMR_CORE1_set(U_EMR_POLYLINETO, rclBounds, cptl, points));
}
// U_EMRPOLYPOLYLINE_set 7
@@ -3358,7 +3380,7 @@ char *U_EMRPOLYPOLYLINE_set(
const uint32_t cptl,
const U_POINTL *points
){
- return(U_EMR_CORE2(U_EMR_POLYPOLYLINE, rclBounds, nPolys, aPolyCounts,cptl, points));
+ return(U_EMR_CORE2_set(U_EMR_POLYPOLYLINE, rclBounds, nPolys, aPolyCounts,cptl, points));
}
// U_EMRPOLYPOLYGON_set 8
@@ -3378,7 +3400,7 @@ char *U_EMRPOLYPOLYGON_set(
const uint32_t cptl,
const U_POINTL *points
){
- return(U_EMR_CORE2(U_EMR_POLYPOLYGON, rclBounds, nPolys, aPolyCounts,cptl, points));
+ return(U_EMR_CORE2_set(U_EMR_POLYPOLYGON, rclBounds, nPolys, aPolyCounts,cptl, points));
}
// U_EMRSETWINDOWEXTEX_set 9
@@ -3393,7 +3415,7 @@ char *U_EMRSETWINDOWEXTEX_set(
U_PAIR temp;
temp.x = szlExtent.cx;
temp.y = szlExtent.cy;
- return(U_EMR_CORE7(U_EMR_SETWINDOWEXTEX, temp));
+ return(U_EMR_CORE7_set(U_EMR_SETWINDOWEXTEX, temp));
}
// U_EMRSETWINDOWORGEX_set 10
@@ -3405,7 +3427,7 @@ char *U_EMRSETWINDOWEXTEX_set(
char *U_EMRSETWINDOWORGEX_set(
const U_POINTL ptlOrigin
){
- return(U_EMR_CORE7(U_EMR_SETWINDOWORGEX, ptlOrigin)); // U_PAIR and U_POINTL are the same thing
+ return(U_EMR_CORE7_set(U_EMR_SETWINDOWORGEX, ptlOrigin)); // U_PAIR and U_POINTL are the same thing
}
// U_EMRSETVIEWPORTEXTEX_set 11
@@ -3420,7 +3442,7 @@ char *U_EMRSETVIEWPORTEXTEX_set(
U_PAIR temp;
temp.x = szlExtent.cx;
temp.y = szlExtent.cy;
- return(U_EMR_CORE7(U_EMR_SETVIEWPORTEXTEX, temp));
+ return(U_EMR_CORE7_set(U_EMR_SETVIEWPORTEXTEX, temp));
}
// U_EMRSETVIEWPORTORGEX_set 12
@@ -3432,7 +3454,7 @@ char *U_EMRSETVIEWPORTEXTEX_set(
char *U_EMRSETVIEWPORTORGEX_set(
const U_POINTL ptlOrigin
){
- return(U_EMR_CORE7(U_EMR_SETVIEWPORTORGEX, ptlOrigin)); // U_PAIR and U_POINTL are the same thing
+ return(U_EMR_CORE7_set(U_EMR_SETVIEWPORTORGEX, ptlOrigin)); // U_PAIR and U_POINTL are the same thing
}
// U_EMRSETBRUSHORGEX_set 13
@@ -3444,7 +3466,7 @@ char *U_EMRSETVIEWPORTORGEX_set(
char *U_EMRSETBRUSHORGEX_set(
const U_POINTL ptlOrigin
){
- return(U_EMR_CORE7(U_EMR_SETBRUSHORGEX, *((PU_PAIR) & ptlOrigin)));
+ return(U_EMR_CORE7_set(U_EMR_SETBRUSHORGEX, *((PU_PAIR) & ptlOrigin)));
}
// U_EMREOF_set 14
@@ -3544,7 +3566,7 @@ char *U_EMRSETMAPPERFLAGS_set(void){
char *U_EMRSETMAPMODE_set(
const uint32_t iMode
){
- return(U_EMR_CORE3(U_EMR_SETMAPMODE, iMode));
+ return(U_EMR_CORE3_set(U_EMR_SETMAPMODE, iMode));
}
// U_EMRSETBKMODE_set 18
@@ -3556,7 +3578,7 @@ char *U_EMRSETMAPMODE_set(
char *U_EMRSETBKMODE_set(
const uint32_t iMode
){
- return(U_EMR_CORE3(U_EMR_SETBKMODE, iMode));
+ return(U_EMR_CORE3_set(U_EMR_SETBKMODE, iMode));
}
// U_EMRSETPOLYFILLMODE_set 19
@@ -3568,7 +3590,7 @@ char *U_EMRSETBKMODE_set(
char *U_EMRSETPOLYFILLMODE_set(
const uint32_t iMode
){
- return(U_EMR_CORE3(U_EMR_SETPOLYFILLMODE, iMode));
+ return(U_EMR_CORE3_set(U_EMR_SETPOLYFILLMODE, iMode));
}
// U_EMRSETROP2_set 20
@@ -3580,7 +3602,7 @@ char *U_EMRSETPOLYFILLMODE_set(
char *U_EMRSETROP2_set(
const uint32_t iMode
){
- return(U_EMR_CORE3(U_EMR_SETROP2, iMode));
+ return(U_EMR_CORE3_set(U_EMR_SETROP2, iMode));
}
// U_EMRSETSTRETCHBLTMODE_set 21
@@ -3592,7 +3614,7 @@ char *U_EMRSETROP2_set(
char *U_EMRSETSTRETCHBLTMODE_set(
const uint32_t iMode
){
- return(U_EMR_CORE3(U_EMR_SETSTRETCHBLTMODE, iMode));
+ return(U_EMR_CORE3_set(U_EMR_SETSTRETCHBLTMODE, iMode));
}
// U_EMRSETTEXTALIGN_set 22
@@ -3604,7 +3626,7 @@ char *U_EMRSETSTRETCHBLTMODE_set(
char *U_EMRSETTEXTALIGN_set(
const uint32_t iMode
){
- return(U_EMR_CORE3(U_EMR_SETTEXTALIGN, iMode));
+ return(U_EMR_CORE3_set(U_EMR_SETTEXTALIGN, iMode));
}
// U_EMRSETCOLORADJUSTMENT_set 23
@@ -3638,7 +3660,7 @@ char *U_EMRSETCOLORADJUSTMENT_set(
char *U_EMRSETTEXTCOLOR_set(
const U_COLORREF crColor
){
- return(U_EMR_CORE3(U_EMR_SETTEXTCOLOR, *(uint32_t *) &crColor));
+ return(U_EMR_CORE3_set(U_EMR_SETTEXTCOLOR, *(uint32_t *) &crColor));
}
// U_EMRSETBKCOLOR_set 25
@@ -3650,7 +3672,7 @@ char *U_EMRSETTEXTCOLOR_set(
char *U_EMRSETBKCOLOR_set(
const U_COLORREF crColor
){
- return(U_EMR_CORE3(U_EMR_SETBKCOLOR, *(uint32_t *) &crColor));
+ return(U_EMR_CORE3_set(U_EMR_SETBKCOLOR, *(uint32_t *) &crColor));
}
// U_EMROFFSETCLIPRGN_set 26
@@ -3662,7 +3684,7 @@ char *U_EMRSETBKCOLOR_set(
char *U_EMROFFSETCLIPRGN_set(
const U_POINTL ptl
){
- return(U_EMR_CORE7(U_EMR_OFFSETCLIPRGN, ptl));
+ return(U_EMR_CORE7_set(U_EMR_OFFSETCLIPRGN, ptl));
}
// U_EMRMOVETOEX_set 27
@@ -3674,7 +3696,7 @@ char *U_EMROFFSETCLIPRGN_set(
char *U_EMRMOVETOEX_set(
const U_POINTL ptl
){
- return(U_EMR_CORE7(U_EMR_MOVETOEX, ptl));
+ return(U_EMR_CORE7_set(U_EMR_MOVETOEX, ptl));
}
// U_EMRSETMETARGN_set 28
@@ -3683,7 +3705,7 @@ char *U_EMRMOVETOEX_set(
\return pointer to U_EMR_SETMETARGN record, or NULL on error.
*/
char *U_EMRSETMETARGN_set(void){
- return(U_EMR_CORE5(U_EMR_SETMETARGN));
+ return(U_EMR_CORE5_set(U_EMR_SETMETARGN));
}
// U_EMREXCLUDECLIPRECT_set 29
@@ -3695,7 +3717,7 @@ char *U_EMRSETMETARGN_set(void){
char *U_EMREXCLUDECLIPRECT_set(
const U_RECTL rclClip
){
- return(U_EMR_CORE4(U_EMR_EXCLUDECLIPRECT,rclClip));
+ return(U_EMR_CORE4_set(U_EMR_EXCLUDECLIPRECT,rclClip));
}
// U_EMRINTERSECTCLIPRECT_set 30
@@ -3707,7 +3729,7 @@ char *U_EMREXCLUDECLIPRECT_set(
char *U_EMRINTERSECTCLIPRECT_set(
const U_RECTL rclClip
){
- return(U_EMR_CORE4(U_EMR_INTERSECTCLIPRECT,rclClip));
+ return(U_EMR_CORE4_set(U_EMR_INTERSECTCLIPRECT,rclClip));
}
// U_EMRSCALEVIEWPORTEXTEX_set 31
@@ -3725,7 +3747,7 @@ char *U_EMRSCALEVIEWPORTEXTEX_set(
const int32_t yNum,
const int32_t yDenom
){
- return(U_EMR_CORE4(U_EMR_SCALEVIEWPORTEXTEX,(U_RECTL){xNum,xDenom,yNum,yDenom}));
+ return(U_EMR_CORE4_set(U_EMR_SCALEVIEWPORTEXTEX,(U_RECTL){xNum,xDenom,yNum,yDenom}));
}
@@ -3744,7 +3766,7 @@ char *U_EMRSCALEWINDOWEXTEX_set(
const int32_t yNum,
const int32_t yDenom
){
- return(U_EMR_CORE4(U_EMR_SCALEWINDOWEXTEX,(U_RECTL){xNum,xDenom,yNum,yDenom}));
+ return(U_EMR_CORE4_set(U_EMR_SCALEWINDOWEXTEX,(U_RECTL){xNum,xDenom,yNum,yDenom}));
}
// U_EMRSAVEDC_set 33
@@ -3753,7 +3775,7 @@ char *U_EMRSCALEWINDOWEXTEX_set(
\return pointer to U_EMR_SAVEDC record, or NULL on error.
*/
char *U_EMRSAVEDC_set(void){
- return(U_EMR_CORE5(U_EMR_SAVEDC));
+ return(U_EMR_CORE5_set(U_EMR_SAVEDC));
}
// U_EMRRESTOREDC_set 34
@@ -3765,7 +3787,7 @@ char *U_EMRSAVEDC_set(void){
char *U_EMRRESTOREDC_set(
const int32_t iRelative
){
- return(U_EMR_CORE3(U_EMR_RESTOREDC, (uint32_t) iRelative));
+ return(U_EMR_CORE3_set(U_EMR_RESTOREDC, (uint32_t) iRelative));
}
// U_EMRSETWORLDTRANSFORM_set 35
@@ -3952,7 +3974,7 @@ char *U_EMRANGLEARC_set(
char *U_EMRELLIPSE_set(
const U_RECTL rclBox
){
- return(U_EMR_CORE4(U_EMR_ELLIPSE,rclBox));
+ return(U_EMR_CORE4_set(U_EMR_ELLIPSE,rclBox));
}
// U_EMRRECTANGLE_set 43
@@ -3964,7 +3986,7 @@ char *U_EMRELLIPSE_set(
char *U_EMRRECTANGLE_set(
const U_RECTL rclBox
){
- return(U_EMR_CORE4(U_EMR_RECTANGLE,rclBox));
+ return(U_EMR_CORE4_set(U_EMR_RECTANGLE,rclBox));
}
// U_EMRROUNDRECT_set 44
@@ -4005,7 +4027,7 @@ char *U_EMRARC_set(
const U_POINTL ptlStart,
const U_POINTL ptlEnd
){
- return(U_EMR_CORE9(U_EMR_ARC,rclBox, ptlStart, ptlEnd));
+ return(U_EMR_CORE9_set(U_EMR_ARC,rclBox, ptlStart, ptlEnd));
}
// U_EMRCHORD_set 46
@@ -4021,7 +4043,7 @@ char *U_EMRCHORD_set(
const U_POINTL ptlStart,
const U_POINTL ptlEnd
){
- return(U_EMR_CORE9(U_EMR_CHORD,rclBox, ptlStart, ptlEnd));
+ return(U_EMR_CORE9_set(U_EMR_CHORD,rclBox, ptlStart, ptlEnd));
}
// U_EMRPIE_set 47
@@ -4037,7 +4059,7 @@ char *U_EMRPIE_set(
const U_POINTL ptlStart,
const U_POINTL ptlEnd
){
- return(U_EMR_CORE9(U_EMR_PIE,rclBox, ptlStart, ptlEnd));
+ return(U_EMR_CORE9_set(U_EMR_PIE,rclBox, ptlStart, ptlEnd));
}
// U_EMRSELECTPALETTE_set 48
@@ -4049,7 +4071,7 @@ char *U_EMRPIE_set(
char *U_EMRSELECTPALETTE_set(
const uint32_t ihPal
){
- return(U_EMR_CORE3(U_EMR_SELECTPALETTE, ihPal));
+ return(U_EMR_CORE3_set(U_EMR_SELECTPALETTE, ihPal));
}
// U_EMRCREATEPALETTE_set 49
@@ -4124,7 +4146,7 @@ char *U_EMRRESIZEPALETTE_set(
const uint32_t ihPal,
const uint32_t cEntries
){
- return(U_EMR_CORE7(U_EMR_RESIZEPALETTE, (U_PAIR){ihPal,cEntries}));
+ return(U_EMR_CORE7_set(U_EMR_RESIZEPALETTE, (U_PAIR){ihPal,cEntries}));
}
// U_EMRREALIZEPALETTE_set 52
@@ -4133,7 +4155,7 @@ char *U_EMRRESIZEPALETTE_set(
\return pointer to U_EMR_REALIZEPALETTE record, or NULL on error.
*/
char *U_EMRREALIZEPALETTE_set(void){
- return(U_EMR_CORE5(U_EMR_REALIZEPALETTE));
+ return(U_EMR_CORE5_set(U_EMR_REALIZEPALETTE));
}
// U_EMREXTFLOODFILL_set 53
@@ -4173,7 +4195,7 @@ char *U_EMREXTFLOODFILL_set(
char *U_EMRLINETO_set(
const U_POINTL ptl
){
- return(U_EMR_CORE7(U_EMR_LINETO, ptl));
+ return(U_EMR_CORE7_set(U_EMR_LINETO, ptl));
}
// U_EMRARCTO_set 55
@@ -4192,7 +4214,7 @@ char *U_EMRARCTO_set(
U_POINTL ptlStart,
U_POINTL ptlEnd
){
- return(U_EMR_CORE9(U_EMR_ARCTO,rclBox, ptlStart, ptlEnd));
+ return(U_EMR_CORE9_set(U_EMR_ARCTO,rclBox, ptlStart, ptlEnd));
}
// U_EMRPOLYDRAW_set 56
@@ -4216,7 +4238,7 @@ char *U_EMRPOLYDRAW_set(
if(!cptl || !aptl || !abTypes)return(NULL);
cbPoints = cptl * sizeof(U_POINTL); // space for aptl
- cbAbTypes = cptl; // number of abTypes (also size, 1 byte each)
+ cbAbTypes = cptl; // number of abTypes (same array size, 1 byte each)
cbAbTypes4 = UP4(cbAbTypes); // space for abTypes
irecsize = sizeof(U_EMRPOLYDRAW) + cbPoints + cbAbTypes4 - sizeof(U_POINTL) - 1;
record = malloc(irecsize);
@@ -4244,7 +4266,7 @@ char *U_EMRPOLYDRAW_set(
char *U_EMRSETARCDIRECTION_set(
const uint32_t iArcDirection
){
- return(U_EMR_CORE3(U_EMR_SETARCDIRECTION, iArcDirection));
+ return(U_EMR_CORE3_set(U_EMR_SETARCDIRECTION, iArcDirection));
}
// U_EMRSETMITERLIMIT_set 58
@@ -4256,7 +4278,7 @@ char *U_EMRSETARCDIRECTION_set(
char *U_EMRSETMITERLIMIT_set(
const uint32_t eMiterLimit
){
- return(U_EMR_CORE3(U_EMR_SETMITERLIMIT, eMiterLimit));
+ return(U_EMR_CORE3_set(U_EMR_SETMITERLIMIT, eMiterLimit));
}
@@ -4266,7 +4288,7 @@ char *U_EMRSETMITERLIMIT_set(
\return pointer to U_EMR_BEGINPATH record, or NULL on error.
*/
char *U_EMRBEGINPATH_set(void){
- return(U_EMR_CORE5(U_EMR_BEGINPATH));
+ return(U_EMR_CORE5_set(U_EMR_BEGINPATH));
}
// U_EMRENDPATH_set 60
@@ -4275,7 +4297,7 @@ char *U_EMRBEGINPATH_set(void){
\return pointer to U_EMR_ENDPATH record, or NULL on error.
*/
char *U_EMRENDPATH_set(void){
- return(U_EMR_CORE5(U_EMR_ENDPATH));
+ return(U_EMR_CORE5_set(U_EMR_ENDPATH));
}
// U_EMRCLOSEFIGURE_set 61
@@ -4284,7 +4306,7 @@ char *U_EMRENDPATH_set(void){
\return pointer to U_EMR_CLOSEFIGURE record, or NULL on error.
*/
char *U_EMRCLOSEFIGURE_set(void){
- return(U_EMR_CORE5(U_EMR_CLOSEFIGURE));
+ return(U_EMR_CORE5_set(U_EMR_CLOSEFIGURE));
}
// U_EMRFILLPATH_set 62
@@ -4298,7 +4320,7 @@ char *U_EMRCLOSEFIGURE_set(void){
char *U_EMRFILLPATH_set(
const U_RECTL rclBox
){
- return(U_EMR_CORE4(U_EMR_FILLPATH,rclBox));
+ return(U_EMR_CORE4_set(U_EMR_FILLPATH,rclBox));
}
// U_EMRSTROKEANDFILLPATH_set 63
@@ -4314,7 +4336,7 @@ char *U_EMRFILLPATH_set(
char *U_EMRSTROKEANDFILLPATH_set(
const U_RECTL rclBox
){
- return(U_EMR_CORE4(U_EMR_STROKEANDFILLPATH,rclBox));
+ return(U_EMR_CORE4_set(U_EMR_STROKEANDFILLPATH,rclBox));
}
// U_EMRSTROKEPATH_set 64
@@ -4328,7 +4350,7 @@ char *U_EMRSTROKEANDFILLPATH_set(
char *U_EMRSTROKEPATH_set(
const U_RECTL rclBox
){
- return(U_EMR_CORE4(U_EMR_STROKEPATH,rclBox));
+ return(U_EMR_CORE4_set(U_EMR_STROKEPATH,rclBox));
}
// U_EMRFLATTENPATH_set 65
@@ -4337,7 +4359,7 @@ char *U_EMRSTROKEPATH_set(
\return pointer to U_EMR_FLATTENPATH record, or NULL on error.
*/
char *U_EMRFLATTENPATH_set(void){
- return(U_EMR_CORE5(U_EMR_FLATTENPATH));
+ return(U_EMR_CORE5_set(U_EMR_FLATTENPATH));
}
// U_EMRWIDENPATH_set 66
@@ -4346,7 +4368,7 @@ char *U_EMRFLATTENPATH_set(void){
\return pointer to U_EMR_WIDENPATH record, or NULL on error.
*/
char *U_EMRWIDENPATH_set(void){
- return(U_EMR_CORE5(U_EMR_WIDENPATH));
+ return(U_EMR_CORE5_set(U_EMR_WIDENPATH));
}
// U_EMRSELECTCLIPPATH_set 67
@@ -4358,7 +4380,7 @@ char *U_EMRWIDENPATH_set(void){
char *U_EMRSELECTCLIPPATH_set(
const uint32_t iMode
){
- return(U_EMR_CORE3(U_EMR_SELECTCLIPPATH, iMode));
+ return(U_EMR_CORE3_set(U_EMR_SELECTCLIPPATH, iMode));
}
// U_EMRABORTPATH_set 68
@@ -4367,7 +4389,7 @@ char *U_EMRSELECTCLIPPATH_set(
\return pointer to U_EMR_ABORTPATH record, or NULL on error.
*/
char *U_EMRABORTPATH_set(void){
- return(U_EMR_CORE5(U_EMR_ABORTPATH));
+ return(U_EMR_CORE5_set(U_EMR_ABORTPATH));
}
// U_EMRUNDEF69 69
@@ -4416,23 +4438,25 @@ char *U_EMRFILLRGN_set(
){
char *record;
int irecsize;
- int cbRgns,cbRgns4,off;
+ int cbRgns,cbRgns4,rds,rds4,off;
if(!RgnData)return(NULL);
cbRgns = ((PU_RGNDATAHEADER) RgnData)->nRgnSize;
- cbRgns4 = UP4(cbRgns);
- irecsize = sizeof(U_EMRFILLRGN) + cbRgns4 - sizeof(U_RGNDATAHEADER); // core + array - overlap
+ cbRgns4 = UP4(cbRgns);
+ rds = sizeof(U_RGNDATAHEADER) + cbRgns;
+ rds4 = UP4(rds);
+ irecsize = sizeof(U_EMRFILLRGN) - sizeof(U_RECTL) + cbRgns4; // core + array - overlap of one rectL
record = malloc(irecsize);
if(record){
((PU_EMR) record)->iType = U_EMR_FILLRGN;
((PU_EMR) record)->nSize = irecsize;
- ((PU_EMRFILLRGN) record)->rclBounds = rclBounds; // or ??? ((PU_RGNDATAHEADER) RgnData)->rclBounds;
- ((PU_EMRFILLRGN) record)->cbRgnData = cbRgns;
+ ((PU_EMRFILLRGN) record)->rclBounds = rclBounds;
+ ((PU_EMRFILLRGN) record)->cbRgnData = rds;
((PU_EMRFILLRGN) record)->ihBrush = ihBrush;
- off = irecsize - cbRgns4;
- memcpy(record + off, RgnData, cbRgns);
- off += cbRgns;
- if(cbRgns4 > cbRgns){ memset(record + off,0,cbRgns4-cbRgns); } // clear any unused bytes
+ off = sizeof(U_EMRFILLRGN) - sizeof(U_RGNDATA);
+ memcpy(record + off, RgnData, rds);
+ off += rds;
+ if(rds < rds4){ memset(record + off,0, rds4 - rds); } // clear any unused bytes
}
return(record);
}
@@ -4455,24 +4479,26 @@ char *U_EMRFRAMERGN_set(
){
char *record;
int irecsize;
- int cbRgns,cbRgns4,off;
+ int cbRgns,cbRgns4,rds,rds4,off;
if(!RgnData)return(NULL);
cbRgns = ((PU_RGNDATAHEADER) RgnData)->nRgnSize;
- cbRgns4 = UP4(cbRgns);
- irecsize = sizeof(U_EMRFRAMERGN) + cbRgns4 - sizeof(U_RGNDATAHEADER); // core + array - overlap
+ cbRgns4 = UP4(cbRgns);
+ rds = sizeof(U_RGNDATAHEADER) + cbRgns;
+ rds4 = UP4(rds);
+ irecsize = sizeof(U_EMRFRAMERGN) - sizeof(U_RECTL) + cbRgns4; // core + array - overlap of one rectL
record = malloc(irecsize);
if(record){
((PU_EMR) record)->iType = U_EMR_FRAMERGN;
((PU_EMR) record)->nSize = irecsize;
- ((PU_EMRFRAMERGN) record)->rclBounds = rclBounds; // or ??? ((PU_RGNDATAHEADER) RgnData)->rclBounds;
- ((PU_EMRFRAMERGN) record)->cbRgnData = cbRgns;
+ ((PU_EMRFRAMERGN) record)->rclBounds = rclBounds;
+ ((PU_EMRFRAMERGN) record)->cbRgnData = rds;
((PU_EMRFRAMERGN) record)->ihBrush = ihBrush;
((PU_EMRFRAMERGN) record)->szlStroke = szlStroke;
- off = irecsize - cbRgns4;
- memcpy(record + off, RgnData, cbRgns);
- off += cbRgns;
- if(cbRgns4 > cbRgns){ memset(record + off,0,cbRgns4-cbRgns); } // clear any unused bytes
+ off = sizeof(U_EMRFRAMERGN) - sizeof(U_RGNDATA);
+ memcpy(record + off, RgnData, rds);
+ off += rds;
+ if(rds < rds4){ memset(record + off,0, rds4 - rds); } // clear any unused bytes
}
return(record);
}
@@ -4486,7 +4512,7 @@ char *U_EMRFRAMERGN_set(
char *U_EMRINVERTRGN_set(
const PU_RGNDATA RgnData
){
- return(U_EMR_CORE11(U_EMR_INVERTRGN, RgnData));
+ return(U_EMR_CORE11_set(U_EMR_INVERTRGN, RgnData));
}
// U_EMRPAINTRGN_set 74
@@ -4498,7 +4524,7 @@ char *U_EMRINVERTRGN_set(
char *U_EMRPAINTRGN_set(
const PU_RGNDATA RgnData
){
- return(U_EMR_CORE11(U_EMR_PAINTRGN, RgnData));
+ return(U_EMR_CORE11_set(U_EMR_PAINTRGN, RgnData));
}
// U_EMREXTSELECTCLIPRGN_set 75
@@ -4514,22 +4540,24 @@ char *U_EMREXTSELECTCLIPRGN_set(
){
char *record;
int irecsize;
- int cbRgns,cbRgns4,off;
+ int cbRgns,cbRgns4,rds,rds4,off;
if(!RgnData)return(NULL);
cbRgns = ((PU_RGNDATAHEADER) RgnData)->nRgnSize;
- cbRgns4 = UP4(cbRgns);
- irecsize = sizeof(U_EMREXTSELECTCLIPRGN) + cbRgns4 - sizeof(U_RGNDATAHEADER); // core + array - overlap
+ cbRgns4 = UP4(cbRgns);
+ rds = sizeof(U_RGNDATAHEADER) + cbRgns;
+ rds4 = UP4(rds);
+ irecsize = sizeof(U_EMREXTSELECTCLIPRGN) - sizeof(U_RECTL) + cbRgns4; // core + array - overlap of one rectL
record = malloc(irecsize);
if(record){
((PU_EMR) record)->iType = U_EMR_EXTSELECTCLIPRGN;
((PU_EMR) record)->nSize = irecsize;
- ((PU_EMREXTSELECTCLIPRGN) record)->cbRgnData = cbRgns;
+ ((PU_EMREXTSELECTCLIPRGN) record)->cbRgnData = rds;
((PU_EMREXTSELECTCLIPRGN) record)->iMode = iMode;
- off = irecsize - cbRgns4;
- memcpy(record + off, RgnData, cbRgns);
- off += cbRgns;
- if(cbRgns4 > cbRgns){ memset(record + off,0,cbRgns4-cbRgns); } // clear any unused bytes
+ off = sizeof(U_EMREXTSELECTCLIPRGN) - sizeof(U_RGNDATA);
+ memcpy(record + off, RgnData, rds);
+ off += rds;
+ if(rds < rds4){ memset(record + off,0, rds4 - rds); } // clear any unused bytes
}
return(record);
}
@@ -4568,7 +4596,6 @@ char *U_EMRBITBLT_set(
int cbImage,cbImage4,cbBmi,off;
SET_CB_FROM_PXBMI(Px,Bmi,cbImage,cbImage4,cbBmi,cbPx);
-
irecsize = sizeof(U_EMRBITBLT) + cbBmi + cbImage4;
record = malloc(irecsize);
if(record){
@@ -4933,7 +4960,7 @@ char *U_EMREXTTEXTOUTA_set(
const U_FLOAT eyScale,
const PU_EMRTEXT emrtext
){
- return(U_EMR_CORE8(U_EMR_EXTTEXTOUTA,rclBounds, iGraphicsMode, exScale, eyScale,emrtext));
+ return(U_EMR_CORE8_set(U_EMR_EXTTEXTOUTA,rclBounds, iGraphicsMode, exScale, eyScale,emrtext));
}
// U_EMREXTTEXTOUTW_set 84
@@ -4953,7 +4980,7 @@ char *U_EMREXTTEXTOUTW_set(
const U_FLOAT eyScale,
const PU_EMRTEXT emrtext
){
- return(U_EMR_CORE8(U_EMR_EXTTEXTOUTW,rclBounds, iGraphicsMode, exScale, eyScale,emrtext));
+ return(U_EMR_CORE8_set(U_EMR_EXTTEXTOUTW,rclBounds, iGraphicsMode, exScale, eyScale,emrtext));
}
// U_EMRPOLYBEZIER16_set 85
@@ -4969,7 +4996,7 @@ char *U_EMRPOLYBEZIER16_set(
const uint32_t cpts,
const U_POINT16 *points
){
- return(U_EMR_CORE6(U_EMR_POLYBEZIER16, rclBounds, cpts, points));
+ return(U_EMR_CORE6_set(U_EMR_POLYBEZIER16, rclBounds, cpts, points));
}
// U_EMRPOLYGON16_set 86
@@ -4985,7 +5012,7 @@ char *U_EMRPOLYGON16_set(
const uint32_t cpts,
const U_POINT16 *points
){
- return(U_EMR_CORE6(U_EMR_POLYGON16, rclBounds, cpts, points));
+ return(U_EMR_CORE6_set(U_EMR_POLYGON16, rclBounds, cpts, points));
}
// U_EMRPOLYLINE16_set 87
@@ -5001,7 +5028,7 @@ char *U_EMRPOLYLINE16_set(
const uint32_t cpts,
const U_POINT16 *points
){
- return(U_EMR_CORE6(U_EMR_POLYLINE16, rclBounds, cpts, points));
+ return(U_EMR_CORE6_set(U_EMR_POLYLINE16, rclBounds, cpts, points));
}
// U_EMRPOLYBEZIERTO16_set 88
@@ -5017,7 +5044,7 @@ char *U_EMRPOLYBEZIERTO16_set(
const uint32_t cpts,
const U_POINT16 *points
){
- return(U_EMR_CORE6(U_EMR_POLYBEZIERTO16, rclBounds, cpts, points));
+ return(U_EMR_CORE6_set(U_EMR_POLYBEZIERTO16, rclBounds, cpts, points));
}
// U_EMRPOLYLINETO16_set 89
@@ -5033,7 +5060,7 @@ char *U_EMRPOLYLINETO16_set(
const uint32_t cpts,
const U_POINT16 *points
){
- return(U_EMR_CORE6(U_EMR_POLYLINETO16, rclBounds, cpts, points));
+ return(U_EMR_CORE6_set(U_EMR_POLYLINETO16, rclBounds, cpts, points));
}
// U_EMRPOLYPOLYLINE16_set 90
@@ -5053,7 +5080,7 @@ char *U_EMRPOLYPOLYLINE16_set(
const uint32_t cpts,
const U_POINT16 *points
){
- return(U_EMR_CORE10(U_EMR_POLYPOLYLINE16, rclBounds, nPolys, aPolyCounts,cpts, points));
+ return(U_EMR_CORE10_set(U_EMR_POLYPOLYLINE16, rclBounds, nPolys, aPolyCounts,cpts, points));
}
// U_EMRPOLYPOLYGON16_set 91
@@ -5073,7 +5100,7 @@ char *U_EMRPOLYPOLYGON16_set(
const uint32_t cpts,
const U_POINT16 *points
){
- return(U_EMR_CORE10(U_EMR_POLYPOLYGON16, rclBounds, nPolys, aPolyCounts,cpts, points));
+ return(U_EMR_CORE10_set(U_EMR_POLYPOLYGON16, rclBounds, nPolys, aPolyCounts,cpts, points));
}
@@ -5098,7 +5125,7 @@ char *U_EMRPOLYDRAW16_set(
if(!cpts || !aptl || !abTypes)return(NULL);
cbPoints = cpts * sizeof(U_POINT16); // space for aptl
- cbAbTypes = cpts; // number of abTypes (also size, 1 byte each)
+ cbAbTypes = cpts; // number of abTypes (same array size, 1 byte each)
cbAbTypes4 = UP4(cbAbTypes); // space for abTypes
irecsize = sizeof(U_EMRPOLYDRAW16) + cbPoints + cbAbTypes4 - sizeof(U_POINT16) - 1;
record = malloc(irecsize);
@@ -5242,7 +5269,7 @@ char *U_EMREXTCREATEPEN_set(
char *U_EMRSETICMMODE_set(
const uint32_t iMode
){
- return(U_EMR_CORE3(U_EMR_SETICMMODE, iMode));
+ return(U_EMR_CORE3_set(U_EMR_SETICMMODE, iMode));
}
// U_EMRCREATECOLORSPACE_set 99
@@ -5280,7 +5307,7 @@ char *U_EMRCREATECOLORSPACE_set(
char *U_EMRSETCOLORSPACE_set(
const uint32_t ihCS
){
- return(U_EMR_CORE3(U_EMR_SETCOLORSPACE, ihCS));
+ return(U_EMR_CORE3_set(U_EMR_SETCOLORSPACE, ihCS));
}
// U_EMRDELETECOLORSPACE_set 101
@@ -5292,7 +5319,7 @@ char *U_EMRSETCOLORSPACE_set(
char *U_EMRDELETECOLORSPACE_set(
const uint32_t ihCS
){
- return(U_EMR_CORE3(U_EMR_DELETECOLORSPACE, ihCS));
+ return(U_EMR_CORE3_set(U_EMR_DELETECOLORSPACE, ihCS));
}
// U_EMRGLSRECORD_set 102 Not implemented
@@ -5428,7 +5455,7 @@ char *U_EMRALPHABLEND_set(
\param iMode Mirroring Enumeration
*/
char *U_EMRSETLAYOUT_set(uint32_t iMode){
- return(U_EMR_CORE3(U_EMR_SETLAYOUT, iMode));
+ return(U_EMR_CORE3_set(U_EMR_SETLAYOUT, iMode));
}
// U_EMRTRANSPARENTBLT_set 116