Replaced most uses of the auto-generated glue code by explicit calls
to WOWCallback16Ex.
diff --git a/objects/dc.c b/objects/dc.c
index 4be1034..ae9d254 100644
--- a/objects/dc.c
+++ b/objects/dc.c
@@ -33,10 +33,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(dc);
-/* ### start build ### */
-extern WORD CALLBACK GDI_CallTo16_word_wwll(FARPROC16,WORD,WORD,LONG,LONG);
-/* ### stop build ### */
-
static BOOL DC_DeleteObject( HGDIOBJ handle, void *obj );
static const struct gdi_obj_funcs dc_funcs =
@@ -1147,14 +1143,24 @@
/* relay function to call the 16-bit DC hook proc */
static BOOL16 WINAPI call_dc_hook16( HDC16 hdc16, WORD code, DWORD data, LPARAM lParam )
{
+ WORD args[6];
+ DWORD ret;
FARPROC16 proc = NULL;
HDC hdc = HDC_32( hdc16 );
DC *dc = DC_GetDCPtr( hdc );
+
if (!dc) return FALSE;
proc = dc->hookProc;
GDI_ReleaseObj( hdc );
if (!proc) return FALSE;
- return GDI_CallTo16_word_wwll( proc, hdc16, code, data, lParam );
+ args[5] = hdc16;
+ args[4] = code;
+ args[3] = HIWORD(data);
+ args[2] = LOWORD(data);
+ args[1] = HIWORD(lParam);
+ args[0] = LOWORD(lParam);
+ WOWCallback16Ex( (DWORD)proc, WCB16_PASCAL, sizeof(args), args, &ret );
+ return LOWORD(ret);
}
/***********************************************************************
diff --git a/objects/font.c b/objects/font.c
index 63fac1b..636199e 100644
--- a/objects/font.c
+++ b/objects/font.c
@@ -132,10 +132,6 @@
{ SYMBOL_CHARSET, CP_SYMBOL, FS(31)},
};
-/* ### start build ### */
-extern WORD CALLBACK FONT_CallTo16_word_llwl(FONTENUMPROC16,LONG,LONG,WORD,LONG);
-/* ### stop build ### */
-
/***********************************************************************
* LOGFONT conversion functions.
*/
@@ -522,13 +518,24 @@
if( pfe->lpLogFontParam->lfCharSet == DEFAULT_CHARSET ||
pfe->lpLogFontParam->lfCharSet == plf->elfLogFont.lfCharSet )
{
+ WORD args[7];
+ DWORD result;
+
FONT_EnumLogFontExWTo16(plf, pfe->lpLogFont);
FONT_NewTextMetricExWTo16(ptm, pfe->lpTextMetric);
pfe->dwFlags |= ENUM_CALLED;
GDI_ReleaseObj( pfe->hdc ); /* release the GDI lock */
- ret = FONT_CallTo16_word_llwl( pfe->lpEnumFunc, pfe->segLogFont, pfe->segTextMetric,
- (UINT16)fType, (LPARAM)pfe->lpData );
+ args[6] = SELECTOROF(pfe->segLogFont);
+ args[5] = OFFSETOF(pfe->segLogFont);
+ args[4] = SELECTOROF(pfe->segTextMetric);
+ args[3] = OFFSETOF(pfe->segTextMetric);
+ args[2] = fType;
+ args[1] = HIWORD(pfe->lpData);
+ args[0] = LOWORD(pfe->lpData);
+ WOWCallback16Ex( (DWORD)pfe->lpEnumFunc, WCB16_PASCAL, sizeof(args), args, &result );
+ ret = LOWORD(result);
+
/* get the lock again and make sure the DC is still valid */
dc = DC_GetDCPtr( pfe->hdc );
if (!dc || dc != pfe->dc || dc->physDev != pfe->physDev)
diff --git a/objects/metafile.c b/objects/metafile.c
index 1499c37..9fd5f9a 100644
--- a/objects/metafile.c
+++ b/objects/metafile.c
@@ -75,9 +75,6 @@
#define MFHEADERSIZE (sizeof(METAHEADER))
#define MFVERSION 0x300
-/* ### start build ### */
-extern WORD CALLBACK MF_CallTo16_word_wllwl(MFENUMPROC16,WORD,LONG,LONG,WORD,LONG);
-/* ### stop build ### */
/******************************************************************
* MF_AddHandle
@@ -634,6 +631,7 @@
HPEN hPen;
HBRUSH hBrush;
HFONT hFont;
+ WORD args[8];
BOOL16 result = TRUE, loaded = FALSE;
TRACE("(%p, %04x, %p, %08lx)\n", hdc, hmf, lpEnumFunc, lpData);
@@ -661,20 +659,31 @@
/* loop through metafile records */
+ args[7] = hdc16;
+ args[6] = SELECTOROF(spht);
+ args[5] = OFFSETOF(spht);
+ args[4] = seg + (HIWORD(offset) << __AHSHIFT);
+ args[3] = LOWORD(offset);
+ args[2] = mh->mtNoObjects;
+ args[1] = HIWORD(lpData);
+ args[0] = LOWORD(lpData);
+
while (offset < (mh->mtSize * 2))
{
+ DWORD ret;
+
mr = (METARECORD *)((char *)mh + offset);
- if (!MF_CallTo16_word_wllwl( lpEnumFunc, hdc16, spht,
- MAKESEGPTR( seg + (HIWORD(offset) << __AHSHIFT), LOWORD(offset) ),
- mh->mtNoObjects, (LONG)lpData ))
+ WOWCallback16Ex( (DWORD)lpEnumFunc, WCB16_PASCAL, sizeof(args), args, &ret );
+ if (!LOWORD(ret))
{
result = FALSE;
break;
}
-
offset += (mr->rdSize * 2);
+ args[4] = seg + (HIWORD(offset) << __AHSHIFT);
+ args[3] = LOWORD(offset);
}
SelectObject(hdc, hBrush);