Replaced most uses of the auto-generated glue code by explicit calls
to WOWCallback16Ex.
This commit is contained in:
parent
84c48b957b
commit
7e92c9af7b
|
@ -44,6 +44,7 @@
|
||||||
|
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
#include "winnt.h"
|
#include "winnt.h"
|
||||||
|
#include "wownt32.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "wine/winbase16.h"
|
#include "wine/winbase16.h"
|
||||||
#include "wine/winuser16.h"
|
#include "wine/winuser16.h"
|
||||||
|
@ -1270,9 +1271,6 @@ static void EDIT_CalcLineWidth_SL(EDITSTATE *es)
|
||||||
* the string under examination (we can decide this for ourselves).
|
* the string under examination (we can decide this for ourselves).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
/* ### start build ### */
|
|
||||||
extern WORD CALLBACK EDIT_CallTo16_word_lwww(EDITWORDBREAKPROC16,SEGPTR,WORD,WORD,WORD);
|
|
||||||
/* ### stop build ### */
|
|
||||||
static INT EDIT_CallWordBreakProc(EDITSTATE *es, INT start, INT index, INT count, INT action)
|
static INT EDIT_CallWordBreakProc(EDITSTATE *es, INT start, INT index, INT count, INT action)
|
||||||
{
|
{
|
||||||
INT ret, iWndsLocks;
|
INT ret, iWndsLocks;
|
||||||
|
@ -1285,13 +1283,20 @@ static INT EDIT_CallWordBreakProc(EDITSTATE *es, INT start, INT index, INT count
|
||||||
HGLOBAL16 hglob16;
|
HGLOBAL16 hglob16;
|
||||||
SEGPTR segptr;
|
SEGPTR segptr;
|
||||||
INT countA;
|
INT countA;
|
||||||
|
WORD args[5];
|
||||||
|
DWORD result;
|
||||||
|
|
||||||
countA = WideCharToMultiByte(CP_ACP, 0, es->text + start, count, NULL, 0, NULL, NULL);
|
countA = WideCharToMultiByte(CP_ACP, 0, es->text + start, count, NULL, 0, NULL, NULL);
|
||||||
hglob16 = GlobalAlloc16(GMEM_MOVEABLE | GMEM_ZEROINIT, countA);
|
hglob16 = GlobalAlloc16(GMEM_MOVEABLE | GMEM_ZEROINIT, countA);
|
||||||
segptr = K32WOWGlobalLock16(hglob16);
|
segptr = K32WOWGlobalLock16(hglob16);
|
||||||
WideCharToMultiByte(CP_ACP, 0, es->text + start, count, MapSL(segptr), countA, NULL, NULL);
|
WideCharToMultiByte(CP_ACP, 0, es->text + start, count, MapSL(segptr), countA, NULL, NULL);
|
||||||
ret = (INT)EDIT_CallTo16_word_lwww(es->word_break_proc16,
|
args[4] = SELECTOROF(segptr);
|
||||||
segptr, index, countA, action);
|
args[3] = OFFSETOF(segptr);
|
||||||
|
args[2] = index;
|
||||||
|
args[1] = countA;
|
||||||
|
args[0] = action;
|
||||||
|
WOWCallback16Ex((DWORD)es->word_break_proc16, WCB16_PASCAL, sizeof(args), args, &result);
|
||||||
|
ret = LOWORD(result);
|
||||||
GlobalUnlock16(hglob16);
|
GlobalUnlock16(hglob16);
|
||||||
GlobalFree16(hglob16);
|
GlobalFree16(hglob16);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@ Makefile
|
||||||
dispdib.spec.c
|
dispdib.spec.c
|
||||||
gdi.exe.spec.c
|
gdi.exe.spec.c
|
||||||
gdi32.dll.dbg.c
|
gdi32.dll.dbg.c
|
||||||
gdi32.dll.glue.c
|
|
||||||
gdi32.spec.c
|
gdi32.spec.c
|
||||||
gdi32.spec.def
|
gdi32.spec.def
|
||||||
version.res
|
version.res
|
||||||
|
|
|
@ -62,8 +62,6 @@ C_SRCS16 = \
|
||||||
RC_SRCS = version.rc
|
RC_SRCS = version.rc
|
||||||
RC_SRCS16 = version16.rc
|
RC_SRCS16 = version16.rc
|
||||||
|
|
||||||
EXTRA_OBJS = $(MODULE).glue.o
|
|
||||||
|
|
||||||
SUBDIRS = tests
|
SUBDIRS = tests
|
||||||
|
|
||||||
EXTRASUBDIRS = \
|
EXTRASUBDIRS = \
|
||||||
|
|
|
@ -30,11 +30,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(gdi);
|
||||||
#define HGDIOBJ_32(handle16) ((HGDIOBJ)(ULONG_PTR)(handle16))
|
#define HGDIOBJ_32(handle16) ((HGDIOBJ)(ULONG_PTR)(handle16))
|
||||||
#define HGDIOBJ_16(handle32) ((HGDIOBJ16)(ULONG_PTR)(handle32))
|
#define HGDIOBJ_16(handle32) ((HGDIOBJ16)(ULONG_PTR)(handle32))
|
||||||
|
|
||||||
/* ### start build ### */
|
|
||||||
extern WORD CALLBACK GDI_CallTo16_word_ll(FARPROC16,LONG,LONG);
|
|
||||||
extern WORD CALLBACK GDI_CallTo16_word_wwl(FARPROC16,WORD,WORD,LONG);
|
|
||||||
/* ### stop build ### */
|
|
||||||
|
|
||||||
struct callback16_info
|
struct callback16_info
|
||||||
{
|
{
|
||||||
FARPROC16 proc;
|
FARPROC16 proc;
|
||||||
|
@ -45,7 +40,13 @@ struct callback16_info
|
||||||
static void CALLBACK linedda_callback( INT x, INT y, LPARAM param )
|
static void CALLBACK linedda_callback( INT x, INT y, LPARAM param )
|
||||||
{
|
{
|
||||||
const struct callback16_info *info = (struct callback16_info *)param;
|
const struct callback16_info *info = (struct callback16_info *)param;
|
||||||
GDI_CallTo16_word_wwl( info->proc, x, y, info->param );
|
WORD args[4];
|
||||||
|
|
||||||
|
args[3] = x;
|
||||||
|
args[2] = y;
|
||||||
|
args[1] = HIWORD(info->param);
|
||||||
|
args[0] = LOWORD(info->param);
|
||||||
|
WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* callback for EnumObjects16 */
|
/* callback for EnumObjects16 */
|
||||||
|
@ -55,16 +56,21 @@ static INT CALLBACK enum_pens_callback( void *ptr, LPARAM param )
|
||||||
LOGPEN *pen = ptr;
|
LOGPEN *pen = ptr;
|
||||||
LOGPEN16 pen16;
|
LOGPEN16 pen16;
|
||||||
SEGPTR segptr;
|
SEGPTR segptr;
|
||||||
INT ret;
|
DWORD ret;
|
||||||
|
WORD args[4];
|
||||||
|
|
||||||
pen16.lopnStyle = pen->lopnStyle;
|
pen16.lopnStyle = pen->lopnStyle;
|
||||||
pen16.lopnWidth.x = pen->lopnWidth.x;
|
pen16.lopnWidth.x = pen->lopnWidth.x;
|
||||||
pen16.lopnWidth.y = pen->lopnWidth.y;
|
pen16.lopnWidth.y = pen->lopnWidth.y;
|
||||||
pen16.lopnColor = pen->lopnColor;
|
pen16.lopnColor = pen->lopnColor;
|
||||||
segptr = MapLS( &pen16 );
|
segptr = MapLS( &pen16 );
|
||||||
ret = GDI_CallTo16_word_ll( info->proc, segptr, info->param );
|
args[3] = SELECTOROF(segptr);
|
||||||
|
args[2] = OFFSETOF(segptr);
|
||||||
|
args[1] = HIWORD(info->param);
|
||||||
|
args[0] = LOWORD(info->param);
|
||||||
|
WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, &ret );
|
||||||
UnMapLS( segptr );
|
UnMapLS( segptr );
|
||||||
return ret;
|
return LOWORD(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* callback for EnumObjects16 */
|
/* callback for EnumObjects16 */
|
||||||
|
@ -74,13 +80,18 @@ static INT CALLBACK enum_brushes_callback( void *ptr, LPARAM param )
|
||||||
LOGBRUSH *brush = ptr;
|
LOGBRUSH *brush = ptr;
|
||||||
LOGBRUSH16 brush16;
|
LOGBRUSH16 brush16;
|
||||||
SEGPTR segptr;
|
SEGPTR segptr;
|
||||||
INT ret;
|
DWORD ret;
|
||||||
|
WORD args[4];
|
||||||
|
|
||||||
brush16.lbStyle = brush->lbStyle;
|
brush16.lbStyle = brush->lbStyle;
|
||||||
brush16.lbColor = brush->lbColor;
|
brush16.lbColor = brush->lbColor;
|
||||||
brush16.lbHatch = brush->lbHatch;
|
brush16.lbHatch = brush->lbHatch;
|
||||||
segptr = MapLS( &brush16 );
|
segptr = MapLS( &brush16 );
|
||||||
ret = GDI_CallTo16_word_ll( info->proc, segptr, info->param );
|
args[3] = SELECTOROF(segptr);
|
||||||
|
args[2] = OFFSETOF(segptr);
|
||||||
|
args[1] = HIWORD(info->param);
|
||||||
|
args[0] = LOWORD(info->param);
|
||||||
|
WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, &ret );
|
||||||
UnMapLS( segptr );
|
UnMapLS( segptr );
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -214,9 +214,6 @@ BOOL16 WINAPI QueryAbort16(HDC16 hdc16, INT16 reserved)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ### start build ### */
|
|
||||||
extern WORD CALLBACK PRTDRV_CallTo16_word_ww(FARPROC16,WORD,WORD);
|
|
||||||
/* ### stop build ### */
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* call_abort_proc16
|
* call_abort_proc16
|
||||||
|
@ -229,7 +226,16 @@ static BOOL CALLBACK call_abort_proc16( HDC hdc, INT code )
|
||||||
if (!dc) return FALSE;
|
if (!dc) return FALSE;
|
||||||
proc16 = dc->pAbortProc16;
|
proc16 = dc->pAbortProc16;
|
||||||
GDI_ReleaseObj( hdc );
|
GDI_ReleaseObj( hdc );
|
||||||
if (proc16) return PRTDRV_CallTo16_word_ww( (FARPROC16)proc16, HDC_16(hdc), code );
|
if (proc16)
|
||||||
|
{
|
||||||
|
WORD args[2];
|
||||||
|
DWORD ret;
|
||||||
|
|
||||||
|
args[1] = HDC_16(hdc);
|
||||||
|
args[0] = code;
|
||||||
|
WOWCallback16Ex( (DWORD)proc16, WCB16_PASCAL, sizeof(args), args, &ret );
|
||||||
|
return LOWORD(ret);
|
||||||
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ Makefile
|
||||||
comm.spec.c
|
comm.spec.c
|
||||||
kernel.res
|
kernel.res
|
||||||
kernel32.dll.dbg.c
|
kernel32.dll.dbg.c
|
||||||
kernel32.dll.glue.c
|
|
||||||
kernel32.spec.c
|
kernel32.spec.c
|
||||||
kernel32.spec.def
|
kernel32.spec.def
|
||||||
krnl386.exe.spec.c
|
krnl386.exe.spec.c
|
||||||
|
|
|
@ -41,8 +41,6 @@ RC_SRCS16 = \
|
||||||
MC_SRCS = \
|
MC_SRCS = \
|
||||||
messages/winerr_enu.mc
|
messages/winerr_enu.mc
|
||||||
|
|
||||||
EXTRA_OBJS = $(MODULE).glue.o
|
|
||||||
|
|
||||||
SUBDIRS = tests
|
SUBDIRS = tests
|
||||||
EXTRASUBDIRS = messages nls
|
EXTRASUBDIRS = messages nls
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include "wine/winbase16.h"
|
#include "wine/winbase16.h"
|
||||||
#include "winternl.h"
|
#include "winternl.h"
|
||||||
|
#include "wownt32.h"
|
||||||
#include "module.h"
|
#include "module.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
@ -73,9 +74,6 @@ BOOL WINAPI UTRegister( HMODULE hModule, LPSTR lpsz16BITDLL,
|
||||||
|
|
||||||
VOID WINAPI UTUnRegister( HMODULE hModule );
|
VOID WINAPI UTUnRegister( HMODULE hModule );
|
||||||
|
|
||||||
/* ### start build ### */
|
|
||||||
extern LONG CALLBACK UTTHUNK_CallTo16_long_ll(FARPROC16,LONG,LONG);
|
|
||||||
/* ### stop build ### */
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* UTGlue16 (KERNEL.666) (KERNEL Wine-specific export)
|
* UTGlue16 (KERNEL.666) (KERNEL Wine-specific export)
|
||||||
|
@ -108,6 +106,7 @@ static DWORD WINAPI UTGlue32( FARPROC16 target, LPVOID lpBuff, DWORD dwUserDefin
|
||||||
SEGPTR segBuff, *segptrList = NULL;
|
SEGPTR segBuff, *segptrList = NULL;
|
||||||
INT i, nList = 0;
|
INT i, nList = 0;
|
||||||
DWORD retv;
|
DWORD retv;
|
||||||
|
WORD args[4];
|
||||||
|
|
||||||
/* Convert arguments to SEGPTRs */
|
/* Convert arguments to SEGPTRs */
|
||||||
|
|
||||||
|
@ -133,7 +132,11 @@ static DWORD WINAPI UTGlue32( FARPROC16 target, LPVOID lpBuff, DWORD dwUserDefin
|
||||||
|
|
||||||
/* Call 16-bit routine */
|
/* Call 16-bit routine */
|
||||||
|
|
||||||
retv = UTTHUNK_CallTo16_long_ll( target, segBuff, dwUserDefined );
|
args[3] = SELECTOROF(segBuff);
|
||||||
|
args[2] = OFFSETOF(segBuff);
|
||||||
|
args[1] = HIWORD(dwUserDefined);
|
||||||
|
args[0] = LOWORD(dwUserDefined);
|
||||||
|
WOWCallback16Ex( (DWORD)target, WCB16_PASCAL, sizeof(args), args, &retv );
|
||||||
|
|
||||||
/* Free temporary selectors */
|
/* Free temporary selectors */
|
||||||
|
|
||||||
|
@ -264,16 +267,21 @@ BOOL WINAPI UTRegister( HMODULE hModule, LPSTR lpsz16BITDLL,
|
||||||
{
|
{
|
||||||
SEGPTR callback = MapLS( &ut->ut16 );
|
SEGPTR callback = MapLS( &ut->ut16 );
|
||||||
SEGPTR segBuff = MapLS( lpBuff );
|
SEGPTR segBuff = MapLS( lpBuff );
|
||||||
|
WORD args[4];
|
||||||
|
DWORD ret;
|
||||||
|
|
||||||
if ( !UTTHUNK_CallTo16_long_ll( init16, callback, segBuff ) )
|
args[3] = SELECTOROF(callback);
|
||||||
|
args[2] = OFFSETOF(callback);
|
||||||
|
args[1] = SELECTOROF(segBuff);
|
||||||
|
args[0] = OFFSETOF(segBuff);
|
||||||
|
WOWCallback16Ex( (DWORD)init16, WCB16_PASCAL, sizeof(args), args, &ret );
|
||||||
|
UnMapLS( segBuff );
|
||||||
|
UnMapLS( callback );
|
||||||
|
if (!ret)
|
||||||
{
|
{
|
||||||
UnMapLS( segBuff );
|
|
||||||
UnMapLS( callback );
|
|
||||||
UTUnRegister( hModule );
|
UTUnRegister( hModule );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
UnMapLS( segBuff );
|
|
||||||
UnMapLS( callback );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return 32-bit thunk */
|
/* Return 32-bit thunk */
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
Makefile
|
Makefile
|
||||||
msvfw32.dll.dbg.c
|
msvfw32.dll.dbg.c
|
||||||
msvfw32.dll.glue.c
|
|
||||||
msvfw32.spec.c
|
msvfw32.spec.c
|
||||||
msvfw32.spec.def
|
msvfw32.spec.def
|
||||||
msvideo.spec.c
|
msvideo.spec.c
|
||||||
|
|
|
@ -17,8 +17,6 @@ C_SRCS = \
|
||||||
C_SRCS16 = \
|
C_SRCS16 = \
|
||||||
msvideo16.c
|
msvideo16.c
|
||||||
|
|
||||||
EXTRA_OBJS16 = $(MODULE).glue.o
|
|
||||||
|
|
||||||
@MAKE_DLL_RULES@
|
@MAKE_DLL_RULES@
|
||||||
|
|
||||||
### Dependencies:
|
### Dependencies:
|
||||||
|
|
|
@ -31,9 +31,6 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(msvideo);
|
WINE_DEFAULT_DEBUG_CHANNEL(msvideo);
|
||||||
|
|
||||||
/* ### start build ### */
|
|
||||||
extern LONG CALLBACK MSVIDEO_CallTo16_long_lwwll(FARPROC16, LONG, WORD, WORD, LONG, LONG);
|
|
||||||
/* ### stop build ### */
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DrawDibOpen [MSVIDEO.102]
|
* DrawDibOpen [MSVIDEO.102]
|
||||||
|
@ -682,6 +679,7 @@ static LRESULT CALLBACK IC_Callback3216(HIC hic, HDRVR hdrv, UINT msg, DWORD l
|
||||||
{
|
{
|
||||||
WINE_HIC* whic;
|
WINE_HIC* whic;
|
||||||
LRESULT ret = 0;
|
LRESULT ret = 0;
|
||||||
|
WORD args[8];
|
||||||
|
|
||||||
whic = MSVIDEO_GetHicPtr(hic);
|
whic = MSVIDEO_GetHicPtr(hic);
|
||||||
if (whic)
|
if (whic)
|
||||||
|
@ -692,9 +690,16 @@ static LRESULT CALLBACK IC_Callback3216(HIC hic, HDRVR hdrv, UINT msg, DWORD l
|
||||||
lp2 = (DWORD)MapLS((void*)lp2);
|
lp2 = (DWORD)MapLS((void*)lp2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
args[7] = HIWORD(hic);
|
||||||
|
args[6] = LOWORD(hic);
|
||||||
|
args[5] = HDRVR_16(whic->hdrv);
|
||||||
|
args[4] = msg;
|
||||||
|
args[3] = HIWORD(lp1);
|
||||||
|
args[2] = LOWORD(lp1);
|
||||||
|
args[1] = HIWORD(lp2);
|
||||||
|
args[0] = LOWORD(lp2);
|
||||||
|
WOWCallback16Ex( (DWORD)whic->driverproc16, WCB16_PASCAL, sizeof(args), args, &ret );
|
||||||
|
|
||||||
ret = MSVIDEO_CallTo16_long_lwwll((FARPROC16)whic->driverproc16,
|
|
||||||
HIC_16(hic), HDRVR_16(whic->hdrv), msg, lp1, lp2);
|
|
||||||
switch (msg)
|
switch (msg)
|
||||||
{
|
{
|
||||||
case DRV_OPEN:
|
case DRV_OPEN:
|
||||||
|
@ -732,8 +737,19 @@ LRESULT VFWAPI ICSendMessage16(HIC16 hic, UINT16 msg, DWORD lParam1, DWORD lPara
|
||||||
/* we've got a 16 bit driver proc... call it directly */
|
/* we've got a 16 bit driver proc... call it directly */
|
||||||
if (whic->driverproc16)
|
if (whic->driverproc16)
|
||||||
{
|
{
|
||||||
ret = MSVIDEO_CallTo16_long_lwwll((FARPROC16)whic->driverproc16,
|
WORD args[8];
|
||||||
(LONG)whic->hdrv, HIC_16(hic), msg, lParam1, lParam2);
|
|
||||||
|
/* FIXME: original code was passing hdrv first and hic second */
|
||||||
|
/* but this doesn't match what IC_Callback3216 does */
|
||||||
|
args[7] = HIWORD(hic);
|
||||||
|
args[6] = LOWORD(hic);
|
||||||
|
args[5] = HDRVR_16(whic->hdrv);
|
||||||
|
args[4] = msg;
|
||||||
|
args[3] = HIWORD(lParam1);
|
||||||
|
args[2] = LOWORD(lParam1);
|
||||||
|
args[1] = HIWORD(lParam2);
|
||||||
|
args[0] = LOWORD(lParam2);
|
||||||
|
WOWCallback16Ex( (DWORD)whic->driverproc16, WCB16_PASCAL, sizeof(args), args, &ret );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
Makefile
|
Makefile
|
||||||
setupapi.dll.dbg.c
|
setupapi.dll.dbg.c
|
||||||
setupapi.dll.glue.c
|
|
||||||
setupapi.res
|
setupapi.res
|
||||||
setupapi.spec.c
|
setupapi.spec.c
|
||||||
setupapi.spec.def
|
setupapi.spec.def
|
||||||
|
|
|
@ -24,8 +24,6 @@ C_SRCS = \
|
||||||
|
|
||||||
RC_SRCS= setupapi.rc
|
RC_SRCS= setupapi.rc
|
||||||
|
|
||||||
EXTRA_OBJS = $(MODULE).glue.o
|
|
||||||
|
|
||||||
@MAKE_DLL_RULES@
|
@MAKE_DLL_RULES@
|
||||||
|
|
||||||
### Dependencies:
|
### Dependencies:
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
#include "winuser.h"
|
#include "winuser.h"
|
||||||
#include "winreg.h"
|
#include "winreg.h"
|
||||||
|
#include "wownt32.h"
|
||||||
#include "setupapi.h"
|
#include "setupapi.h"
|
||||||
#include "setupx16.h"
|
#include "setupx16.h"
|
||||||
#include "setupapi_private.h"
|
#include "setupapi_private.h"
|
||||||
|
@ -32,23 +33,34 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(setupapi);
|
WINE_DEFAULT_DEBUG_CHANNEL(setupapi);
|
||||||
|
|
||||||
/* ### start build ### */
|
|
||||||
extern WORD CALLBACK VCP_CallTo16_word_lwwll(FARPROC16,LPVOID,UINT16,WPARAM,LPARAM,LPARAM);
|
|
||||||
/* ### stop build ### */
|
|
||||||
|
|
||||||
static FARPROC16 VCP_Proc = NULL;
|
static FARPROC16 VCP_Proc = NULL;
|
||||||
static LPARAM VCP_MsgRef = 0;
|
static LPARAM VCP_MsgRef = 0;
|
||||||
|
|
||||||
#define VCP_CALLBACK(obj,msg,wParam,lParam,lParamRef) \
|
|
||||||
(VCP_Proc) ? \
|
|
||||||
VCP_CallTo16_word_lwwll(VCP_Proc, obj,msg,wParam,lParam,lParamRef) : OK;
|
|
||||||
|
|
||||||
static BOOL VCP_opened = FALSE;
|
static BOOL VCP_opened = FALSE;
|
||||||
|
|
||||||
static VCPSTATUS vcp_status;
|
static VCPSTATUS vcp_status;
|
||||||
|
|
||||||
static HINSTANCE SETUPAPI_hInstance;
|
static HINSTANCE SETUPAPI_hInstance;
|
||||||
|
|
||||||
|
static WORD VCP_Callback( LPVOID obj, UINT16 msg, WPARAM16 wParam, LPARAM lParam, LPARAM lParamRef )
|
||||||
|
{
|
||||||
|
WORD args[8];
|
||||||
|
DWORD ret = OK;
|
||||||
|
if (VCP_Proc)
|
||||||
|
{
|
||||||
|
args[7] = HIWORD(obj);
|
||||||
|
args[6] = LOWORD(obj);
|
||||||
|
args[5] = msg;
|
||||||
|
args[4] = wParam;
|
||||||
|
args[3] = HIWORD(lParam);
|
||||||
|
args[2] = LOWORD(lParam);
|
||||||
|
args[1] = HIWORD(lParamRef);
|
||||||
|
args[0] = LOWORD(lParamRef);
|
||||||
|
WOWCallback16Ex( (DWORD)VCP_Proc, WCB16_PASCAL, sizeof(args), args, &ret );
|
||||||
|
}
|
||||||
|
return (WORD)ret;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************** VHSTR management ******************************/
|
/****************************** VHSTR management ******************************/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -234,9 +246,9 @@ RETERR16 VCP_VirtnodeCreate(LPVCPFILESPEC vfsSrc, LPVCPFILESPEC vfsDst, WORD fl,
|
||||||
|
|
||||||
lpvn->vhstrDstFinalName = 0xffff; /* FIXME: what is this ? */
|
lpvn->vhstrDstFinalName = 0xffff; /* FIXME: what is this ? */
|
||||||
|
|
||||||
cbres = VCP_CALLBACK(lpvn, VCPM_NODECREATE, 0, 0, VCP_MsgRef);
|
cbres = VCP_Callback(lpvn, VCPM_NODECREATE, 0, 0, VCP_MsgRef);
|
||||||
lpvn->fl |= VFNL_CREATED;
|
lpvn->fl |= VFNL_CREATED;
|
||||||
cbres = VCP_CALLBACK(lpvn, VCPM_NODEACCEPT, 0, 0, VCP_MsgRef);
|
cbres = VCP_Callback(lpvn, VCPM_NODEACCEPT, 0, 0, VCP_MsgRef);
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
@ -250,7 +262,7 @@ BOOL VCP_VirtnodeDelete(LPVIRTNODE lpvnDel)
|
||||||
{
|
{
|
||||||
if (pvnlist[n] == lpvnDel)
|
if (pvnlist[n] == lpvnDel)
|
||||||
{
|
{
|
||||||
cbres = VCP_CALLBACK(lpvnDel, VCPM_NODEDESTROY, 0, 0, VCP_MsgRef);
|
cbres = VCP_Callback(lpvnDel, VCPM_NODEDESTROY, 0, 0, VCP_MsgRef);
|
||||||
HeapFree(GetProcessHeap(), 0, lpvnDel);
|
HeapFree(GetProcessHeap(), 0, lpvnDel);
|
||||||
pvnlist[n] = NULL;
|
pvnlist[n] = NULL;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -433,15 +445,15 @@ RETERR16 VCP_CheckPaths(void)
|
||||||
LPVIRTNODE lpvn;
|
LPVIRTNODE lpvn;
|
||||||
RETERR16 cbres;
|
RETERR16 cbres;
|
||||||
|
|
||||||
cbres = VCP_CALLBACK(&vcp_status, VCPM_VSTATPATHCHECKSTART, 0, 0, VCP_MsgRef);
|
cbres = VCP_Callback(&vcp_status, VCPM_VSTATPATHCHECKSTART, 0, 0, VCP_MsgRef);
|
||||||
for (n = 0; n < vn_num; n++)
|
for (n = 0; n < vn_num; n++)
|
||||||
{
|
{
|
||||||
lpvn = pvnlist[n];
|
lpvn = pvnlist[n];
|
||||||
if (!lpvn) continue;
|
if (!lpvn) continue;
|
||||||
/* FIXME: check paths of all VIRTNODEs here ! */
|
/* FIXME: check paths of all VIRTNODEs here ! */
|
||||||
cbres = VCP_CALLBACK(&lpvn->vfsDst, VCPM_CHECKPATH, 0, (DWORD)lpvn, VCP_MsgRef);
|
cbres = VCP_Callback(&lpvn->vfsDst, VCPM_CHECKPATH, 0, (DWORD)lpvn, VCP_MsgRef);
|
||||||
}
|
}
|
||||||
cbres = VCP_CALLBACK(&vcp_status, VCPM_VSTATPATHCHECKEND, 0, 0, VCP_MsgRef);
|
cbres = VCP_Callback(&vcp_status, VCPM_VSTATPATHCHECKEND, 0, 0, VCP_MsgRef);
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -452,7 +464,7 @@ RETERR16 VCP_CopyFiles(void)
|
||||||
DWORD n;
|
DWORD n;
|
||||||
LPVIRTNODE lpvn;
|
LPVIRTNODE lpvn;
|
||||||
|
|
||||||
cbres = VCP_CALLBACK(&vcp_status, VCPM_VSTATCOPYSTART, 0, 0, VCP_MsgRef);
|
cbres = VCP_Callback(&vcp_status, VCPM_VSTATCOPYSTART, 0, 0, VCP_MsgRef);
|
||||||
for (n = 0; n < vn_num; n++)
|
for (n = 0; n < vn_num; n++)
|
||||||
{
|
{
|
||||||
lpvn = pvnlist[n];
|
lpvn = pvnlist[n];
|
||||||
|
@ -462,7 +474,7 @@ RETERR16 VCP_CopyFiles(void)
|
||||||
strcpy(fn_dst, VcpExplain16(lpvn, VCPEX_DST_FULL));
|
strcpy(fn_dst, VcpExplain16(lpvn, VCPEX_DST_FULL));
|
||||||
/* FIXME: what is this VCPM_VSTATWRITE here for ?
|
/* FIXME: what is this VCPM_VSTATWRITE here for ?
|
||||||
* I guess it's to signal successful destination file creation */
|
* I guess it's to signal successful destination file creation */
|
||||||
cbres = VCP_CALLBACK(&vcp_status, VCPM_VSTATWRITE, 0, 0, VCP_MsgRef);
|
cbres = VCP_Callback(&vcp_status, VCPM_VSTATWRITE, 0, 0, VCP_MsgRef);
|
||||||
|
|
||||||
/* FIXME: need to do the file copy in small chunks for notifications */
|
/* FIXME: need to do the file copy in small chunks for notifications */
|
||||||
TRACE("copying '%s' to '%s'\n", fn_src, fn_dst);
|
TRACE("copying '%s' to '%s'\n", fn_src, fn_dst);
|
||||||
|
@ -475,12 +487,12 @@ RETERR16 VCP_CopyFiles(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
vcp_status.prgFileRead.dwSoFar++;
|
vcp_status.prgFileRead.dwSoFar++;
|
||||||
cbres = VCP_CALLBACK(&vcp_status, VCPM_VSTATREAD, 0, 0, VCP_MsgRef);
|
cbres = VCP_Callback(&vcp_status, VCPM_VSTATREAD, 0, 0, VCP_MsgRef);
|
||||||
vcp_status.prgFileWrite.dwSoFar++;
|
vcp_status.prgFileWrite.dwSoFar++;
|
||||||
cbres = VCP_CALLBACK(&vcp_status, VCPM_VSTATWRITE, 0, 0, VCP_MsgRef);
|
cbres = VCP_Callback(&vcp_status, VCPM_VSTATWRITE, 0, 0, VCP_MsgRef);
|
||||||
}
|
}
|
||||||
|
|
||||||
cbres = VCP_CALLBACK(&vcp_status, VCPM_VSTATCOPYEND, 0, 0, VCP_MsgRef);
|
cbres = VCP_Callback(&vcp_status, VCPM_VSTATCOPYEND, 0, 0, VCP_MsgRef);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -511,13 +523,13 @@ RETERR16 WINAPI VcpClose16(WORD fl, LPCSTR lpszBackupDest)
|
||||||
TRACE("(%04x, '%s')\n", fl, lpszBackupDest);
|
TRACE("(%04x, '%s')\n", fl, lpszBackupDest);
|
||||||
|
|
||||||
/* FIXME: needs to sort virtnodes in case VCPFL_INSPECIFIEDORDER
|
/* FIXME: needs to sort virtnodes in case VCPFL_INSPECIFIEDORDER
|
||||||
* is not set. This is done by VCP_CALLBACK(VCPM_NODECOMPARE) */
|
* is not set. This is done by VCP_Callback(VCPM_NODECOMPARE) */
|
||||||
|
|
||||||
TRACE("#1\n");
|
TRACE("#1\n");
|
||||||
memset(&vcp_status, 0, sizeof(VCPSTATUS));
|
memset(&vcp_status, 0, sizeof(VCPSTATUS));
|
||||||
/* yes, vcp_status.cbSize is 0 ! */
|
/* yes, vcp_status.cbSize is 0 ! */
|
||||||
TRACE("#2\n");
|
TRACE("#2\n");
|
||||||
cbres = VCP_CALLBACK(&vcp_status, VCPM_VSTATCLOSESTART, 0, 0, VCP_MsgRef);
|
cbres = VCP_Callback(&vcp_status, VCPM_VSTATCLOSESTART, 0, 0, VCP_MsgRef);
|
||||||
TRACE("#3\n");
|
TRACE("#3\n");
|
||||||
|
|
||||||
res = VCP_CheckPaths();
|
res = VCP_CheckPaths();
|
||||||
|
@ -527,7 +539,7 @@ RETERR16 WINAPI VcpClose16(WORD fl, LPCSTR lpszBackupDest)
|
||||||
VCP_CopyFiles();
|
VCP_CopyFiles();
|
||||||
|
|
||||||
TRACE("#5\n");
|
TRACE("#5\n");
|
||||||
cbres = VCP_CALLBACK(&vcp_status, VCPM_VSTATCLOSEEND, 0, 0, VCP_MsgRef);
|
cbres = VCP_Callback(&vcp_status, VCPM_VSTATCLOSEEND, 0, 0, VCP_MsgRef);
|
||||||
TRACE("#6\n");
|
TRACE("#6\n");
|
||||||
VCP_Proc = NULL;
|
VCP_Proc = NULL;
|
||||||
FreeLibrary(SETUPAPI_hInstance);
|
FreeLibrary(SETUPAPI_hInstance);
|
||||||
|
@ -542,20 +554,20 @@ RETERR16 VCP_RenameFiles(void)
|
||||||
DWORD n;
|
DWORD n;
|
||||||
LPVIRTNODE lpvn;
|
LPVIRTNODE lpvn;
|
||||||
|
|
||||||
cbres = VCP_CALLBACK(&vcp_status, VCPM_VSTATRENAMESTART, 0, 0, VCP_MsgRef);
|
cbres = VCP_Callback(&vcp_status, VCPM_VSTATRENAMESTART, 0, 0, VCP_MsgRef);
|
||||||
for (n = 0; n < vn_num; n++)
|
for (n = 0; n < vn_num; n++)
|
||||||
{
|
{
|
||||||
lpvn = pvnlist[n];
|
lpvn = pvnlist[n];
|
||||||
if ((!lpvn) || ((lpvn->fl & VNFL_NODE_TYPE) != VNFL_RENAME)) continue;
|
if ((!lpvn) || ((lpvn->fl & VNFL_NODE_TYPE) != VNFL_RENAME)) continue;
|
||||||
strcpy(fn_src, VcpExplain16(lpvn, VCPEX_SRC_FULL));
|
strcpy(fn_src, VcpExplain16(lpvn, VCPEX_SRC_FULL));
|
||||||
strcpy(fn_dst, VcpExplain16(lpvn, VCPEX_DST_FULL));
|
strcpy(fn_dst, VcpExplain16(lpvn, VCPEX_DST_FULL));
|
||||||
cbres = VCP_CALLBACK(&lpvn->vfsDst, VCPM_FILEOPENOUT, 0, (LPARAM)lpvn, VCP_MsgRef);
|
cbres = VCP_Callback(&lpvn->vfsDst, VCPM_FILEOPENOUT, 0, (LPARAM)lpvn, VCP_MsgRef);
|
||||||
if (!(MoveFileExA(fn_src, fn_dst, MOVEFILE_REPLACE_EXISTING)))
|
if (!(MoveFileExA(fn_src, fn_dst, MOVEFILE_REPLACE_EXISTING)))
|
||||||
res = ERR_VCP_IOFAIL;
|
res = ERR_VCP_IOFAIL;
|
||||||
else
|
else
|
||||||
VCP_VirtnodeDelete(lpvn);
|
VCP_VirtnodeDelete(lpvn);
|
||||||
}
|
}
|
||||||
cbres = VCP_CALLBACK(&vcp_status, VCPM_VSTATRENAMEEND, 0, 0, VCP_MsgRef);
|
cbres = VCP_Callback(&vcp_status, VCPM_VSTATRENAMEEND, 0, 0, VCP_MsgRef);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -744,7 +756,7 @@ RETERR16 WINAPI vcpUICallbackProc16(LPVOID lpvObj, UINT16 uMsg, WPARAM wParam,
|
||||||
case VCPM_VSTATREAD:
|
case VCPM_VSTATREAD:
|
||||||
break;
|
break;
|
||||||
case VCPM_VSTATWRITE:
|
case VCPM_VSTATWRITE:
|
||||||
cbres = VCP_CALLBACK(&vcp_status, VCPM_DISKPREPINFO, 0, 0, VCP_MsgRef);
|
cbres = VCP_Callback(&vcp_status, VCPM_DISKPREPINFO, 0, 0, VCP_MsgRef);
|
||||||
break;
|
break;
|
||||||
case VCPM_VSTATCLOSEEND:
|
case VCPM_VSTATCLOSEEND:
|
||||||
RegCloseKey(hKeyFiles);
|
RegCloseKey(hKeyFiles);
|
||||||
|
|
|
@ -5,6 +5,5 @@ keyboard.spec.c
|
||||||
mouse.spec.c
|
mouse.spec.c
|
||||||
user.exe.spec.c
|
user.exe.spec.c
|
||||||
user32.dll.dbg.c
|
user32.dll.dbg.c
|
||||||
user32.dll.glue.c
|
|
||||||
user32.spec.c
|
user32.spec.c
|
||||||
user32.spec.def
|
user32.spec.def
|
||||||
|
|
|
@ -92,8 +92,6 @@ RC_SRCS16 = \
|
||||||
|
|
||||||
SUBDIRS = tests
|
SUBDIRS = tests
|
||||||
|
|
||||||
EXTRA_OBJS = $(MODULE).glue.o
|
|
||||||
|
|
||||||
EXTRASUBDIRS = \
|
EXTRASUBDIRS = \
|
||||||
$(TOPOBJDIR)/controls \
|
$(TOPOBJDIR)/controls \
|
||||||
$(TOPOBJDIR)/windows \
|
$(TOPOBJDIR)/windows \
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "wingdi.h"
|
#include "wingdi.h"
|
||||||
#include "winuser.h"
|
#include "winuser.h"
|
||||||
#include "winerror.h"
|
#include "winerror.h"
|
||||||
|
#include "wownt32.h"
|
||||||
#include "dde.h"
|
#include "dde.h"
|
||||||
#include "ddeml.h"
|
#include "ddeml.h"
|
||||||
#include "dde/dde_private.h"
|
#include "dde/dde_private.h"
|
||||||
|
@ -88,9 +89,6 @@ static void map3216_conv_context(CONVCONTEXT16* cc16, const CONVCONTEXT* cc32)
|
||||||
cc16->dwSecurity = cc32->dwSecurity;
|
cc16->dwSecurity = cc32->dwSecurity;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ### start build ### */
|
|
||||||
extern LONG CALLBACK WDML_CallTo16_long_llllllll(FARPROC16,LONG,LONG,LONG,LONG,LONG,LONG,LONG,LONG);
|
|
||||||
/* ### stop build ### */
|
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
* WDML_InvokeCallback16
|
* WDML_InvokeCallback16
|
||||||
|
@ -104,6 +102,7 @@ HDDEDATA WDML_InvokeCallback16(PFNCALLBACK pfn, UINT uType, UINT uFmt,
|
||||||
DWORD d1 = 0;
|
DWORD d1 = 0;
|
||||||
HDDEDATA ret;
|
HDDEDATA ret;
|
||||||
CONVCONTEXT16 cc16;
|
CONVCONTEXT16 cc16;
|
||||||
|
WORD args[16];
|
||||||
|
|
||||||
switch (uType)
|
switch (uType)
|
||||||
{
|
{
|
||||||
|
@ -120,8 +119,24 @@ HDDEDATA WDML_InvokeCallback16(PFNCALLBACK pfn, UINT uType, UINT uFmt,
|
||||||
d1 = dwData1;
|
d1 = dwData1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ret = (HDDEDATA)WDML_CallTo16_long_llllllll((FARPROC16)pfn, uType, uFmt, (LONG)hConv,
|
args[15] = HIWORD(uType);
|
||||||
(LONG)hsz1, (LONG)hsz2, (LONG)hdata, d1, dwData2);
|
args[14] = LOWORD(uType);
|
||||||
|
args[13] = HIWORD(uFmt);
|
||||||
|
args[12] = LOWORD(uFmt);
|
||||||
|
args[11] = HIWORD(hConv);
|
||||||
|
args[10] = LOWORD(hConv);
|
||||||
|
args[9] = HIWORD(hsz1);
|
||||||
|
args[8] = LOWORD(hsz1);
|
||||||
|
args[7] = HIWORD(hsz2);
|
||||||
|
args[6] = LOWORD(hsz2);
|
||||||
|
args[5] = HIWORD(hdata);
|
||||||
|
args[4] = LOWORD(hdata);
|
||||||
|
args[3] = HIWORD(d1);
|
||||||
|
args[2] = LOWORD(d1);
|
||||||
|
args[1] = HIWORD(dwData2);
|
||||||
|
args[0] = LOWORD(dwData2);
|
||||||
|
WOWCallback16Ex( (DWORD)pfn, WCB16_PASCAL, sizeof(args), args, (DWORD *)&ret );
|
||||||
|
|
||||||
switch (uType)
|
switch (uType)
|
||||||
{
|
{
|
||||||
case XTYP_CONNECT:
|
case XTYP_CONNECT:
|
||||||
|
|
|
@ -71,10 +71,6 @@ struct hook16_queue_info
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* ### start build ### */
|
|
||||||
extern LONG CALLBACK HOOK_CallTo16_long_wwl(HOOKPROC16,WORD,WORD,LONG);
|
|
||||||
/* ### stop build ### */
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* map_msg_16_to_32
|
* map_msg_16_to_32
|
||||||
|
@ -112,10 +108,17 @@ inline static void map_msg_32_to_16( const MSG *msg32, MSG16 *msg16 )
|
||||||
static LRESULT call_hook_16( INT id, INT code, WPARAM wp, LPARAM lp )
|
static LRESULT call_hook_16( INT id, INT code, WPARAM wp, LPARAM lp )
|
||||||
{
|
{
|
||||||
struct hook16_queue_info *info = QUEUE_Current()->hook16_info;
|
struct hook16_queue_info *info = QUEUE_Current()->hook16_info;
|
||||||
|
WORD args[4];
|
||||||
LRESULT ret;
|
LRESULT ret;
|
||||||
INT prev_id = info->id;
|
INT prev_id = info->id;
|
||||||
info->id = id;
|
info->id = id;
|
||||||
ret = HOOK_CallTo16_long_wwl( info->proc[id - WH_MINHOOK], code, wp, lp );
|
|
||||||
|
args[3] = code;
|
||||||
|
args[2] = wp;
|
||||||
|
args[1] = HIWORD(lp);
|
||||||
|
args[0] = LOWORD(lp);
|
||||||
|
WOWCallback16Ex( (DWORD)info->proc[id - WH_MINHOOK], WCB16_PASCAL, sizeof(args), args, &ret );
|
||||||
|
|
||||||
info->id = prev_id;
|
info->id = prev_id;
|
||||||
|
|
||||||
/* Grrr. While the hook procedure is supposed to have an LRESULT return
|
/* Grrr. While the hook procedure is supposed to have an LRESULT return
|
||||||
|
|
|
@ -30,9 +30,6 @@
|
||||||
/* size of buffer needed to store an atom string */
|
/* size of buffer needed to store an atom string */
|
||||||
#define ATOM_BUFFER_SIZE 256
|
#define ATOM_BUFFER_SIZE 256
|
||||||
|
|
||||||
/* ### start build ### */
|
|
||||||
extern WORD CALLBACK PROP_CallTo16_word_wlw(PROPENUMPROC16,WORD,LONG,WORD);
|
|
||||||
/* ### stop build ### */
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* get_properties
|
* get_properties
|
||||||
|
@ -306,16 +303,28 @@ INT16 WINAPI EnumProps16( HWND16 hwnd, PROPENUMPROC16 func )
|
||||||
{
|
{
|
||||||
char string[ATOM_BUFFER_SIZE];
|
char string[ATOM_BUFFER_SIZE];
|
||||||
SEGPTR segptr = MapLS( string );
|
SEGPTR segptr = MapLS( string );
|
||||||
|
WORD args[4];
|
||||||
|
DWORD result;
|
||||||
|
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
if (list[i].string) /* it was a string originally */
|
if (list[i].string) /* it was a string originally */
|
||||||
{
|
{
|
||||||
if (!GlobalGetAtomNameA( list[i].atom, string, ATOM_BUFFER_SIZE )) continue;
|
if (!GlobalGetAtomNameA( list[i].atom, string, ATOM_BUFFER_SIZE )) continue;
|
||||||
ret = PROP_CallTo16_word_wlw( func, hwnd, segptr, LOWORD(list[i].handle) );
|
args[3] = hwnd;
|
||||||
|
args[2] = SELECTOROF(segptr);
|
||||||
|
args[1] = OFFSETOF(segptr);
|
||||||
|
args[0] = LOWORD(list[i].handle);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ret = PROP_CallTo16_word_wlw( func, hwnd, list[i].atom, LOWORD(list[i].handle) );
|
{
|
||||||
if (!ret) break;
|
args[3] = hwnd;
|
||||||
|
args[2] = 0;
|
||||||
|
args[1] = list[i].atom;
|
||||||
|
args[0] = LOWORD(list[i].handle);
|
||||||
|
}
|
||||||
|
WOWCallback16Ex( (DWORD)func, WCB16_PASCAL, sizeof(args), args, &result );
|
||||||
|
if (!(ret = LOWORD(result))) break;
|
||||||
}
|
}
|
||||||
UnMapLS( segptr );
|
UnMapLS( segptr );
|
||||||
HeapFree( GetProcessHeap(), 0, list );
|
HeapFree( GetProcessHeap(), 0, list );
|
||||||
|
|
|
@ -38,10 +38,6 @@
|
||||||
WORD WINAPI DestroyIcon32(HGLOBAL16, UINT16);
|
WORD WINAPI DestroyIcon32(HGLOBAL16, UINT16);
|
||||||
|
|
||||||
|
|
||||||
/* ### start build ### */
|
|
||||||
extern WORD CALLBACK USER_CallTo16_word_wlw(GRAYSTRINGPROC16,WORD,LONG,WORD);
|
|
||||||
/* ### stop build ### */
|
|
||||||
|
|
||||||
struct gray_string_info
|
struct gray_string_info
|
||||||
{
|
{
|
||||||
GRAYSTRINGPROC16 proc;
|
GRAYSTRINGPROC16 proc;
|
||||||
|
@ -53,7 +49,15 @@ struct gray_string_info
|
||||||
static BOOL CALLBACK gray_string_callback( HDC hdc, LPARAM param, INT len )
|
static BOOL CALLBACK gray_string_callback( HDC hdc, LPARAM param, INT len )
|
||||||
{
|
{
|
||||||
const struct gray_string_info *info = (struct gray_string_info *)param;
|
const struct gray_string_info *info = (struct gray_string_info *)param;
|
||||||
return USER_CallTo16_word_wlw( info->proc, HDC_16(hdc), info->param, len );
|
WORD args[4];
|
||||||
|
DWORD ret;
|
||||||
|
|
||||||
|
args[3] = HDC_16(hdc);
|
||||||
|
args[2] = HIWORD(info->param);
|
||||||
|
args[1] = LOWORD(info->param);
|
||||||
|
args[0] = len;
|
||||||
|
WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, &ret );
|
||||||
|
return LOWORD(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* callback for 16-bit gray string proc with string pointer */
|
/* callback for 16-bit gray string proc with string pointer */
|
||||||
|
@ -63,7 +67,30 @@ static BOOL CALLBACK gray_string_callback_ptr( HDC hdc, LPARAM param, INT len )
|
||||||
char *str = (char *)param;
|
char *str = (char *)param;
|
||||||
|
|
||||||
info = (struct gray_string_info *)(str - offsetof( struct gray_string_info, str ));
|
info = (struct gray_string_info *)(str - offsetof( struct gray_string_info, str ));
|
||||||
return USER_CallTo16_word_wlw( info->proc, HDC_16(hdc), info->param, len );
|
return gray_string_callback( hdc, (LPARAM)info, len );
|
||||||
|
}
|
||||||
|
|
||||||
|
struct draw_state_info
|
||||||
|
{
|
||||||
|
DRAWSTATEPROC16 proc;
|
||||||
|
LPARAM param;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* callback for 16-bit DrawState functions */
|
||||||
|
static BOOL CALLBACK draw_state_callback( HDC hdc, LPARAM lparam, WPARAM wparam, int cx, int cy )
|
||||||
|
{
|
||||||
|
const struct draw_state_info *info = (struct draw_state_info *)lparam;
|
||||||
|
WORD args[6];
|
||||||
|
DWORD ret;
|
||||||
|
|
||||||
|
args[5] = HDC_16(hdc);
|
||||||
|
args[4] = HIWORD(info->param);
|
||||||
|
args[3] = LOWORD(info->param);
|
||||||
|
args[2] = wparam;
|
||||||
|
args[1] = cx;
|
||||||
|
args[0] = cy;
|
||||||
|
WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, &ret );
|
||||||
|
return LOWORD(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -626,6 +653,34 @@ BOOL16 WINAPI InsertMenuItem16( HMENU16 hmenu, UINT16 pos, BOOL16 byposition,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* DrawState (USER.449)
|
||||||
|
*/
|
||||||
|
BOOL16 WINAPI DrawState16( HDC16 hdc, HBRUSH16 hbr, DRAWSTATEPROC16 func, LPARAM ldata,
|
||||||
|
WPARAM16 wdata, INT16 x, INT16 y, INT16 cx, INT16 cy, UINT16 flags )
|
||||||
|
{
|
||||||
|
struct draw_state_info info;
|
||||||
|
UINT opcode = flags & 0xf;
|
||||||
|
|
||||||
|
if (opcode == DST_TEXT || opcode == DST_PREFIXTEXT)
|
||||||
|
{
|
||||||
|
/* make sure DrawStateA doesn't try to use ldata as a pointer */
|
||||||
|
if (!wdata) wdata = strlen( MapSL(ldata) );
|
||||||
|
if (!cx || !cy)
|
||||||
|
{
|
||||||
|
SIZE s;
|
||||||
|
if (!GetTextExtentPoint32A( HDC_32(hdc), MapSL(ldata), wdata, &s )) return FALSE;
|
||||||
|
if (!cx) cx = s.cx;
|
||||||
|
if (!cy) cy = s.cy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
info.proc = func;
|
||||||
|
info.param = ldata;
|
||||||
|
return DrawStateA( HDC_32(hdc), HBRUSH_32(hbr), draw_state_callback,
|
||||||
|
(LPARAM)&info, wdata, x, y, cx, cy, flags );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* CreateIconFromResourceEx (USER.450)
|
* CreateIconFromResourceEx (USER.450)
|
||||||
*
|
*
|
||||||
|
|
|
@ -30,10 +30,6 @@
|
||||||
|
|
||||||
static HWND16 hwndSysModal;
|
static HWND16 hwndSysModal;
|
||||||
|
|
||||||
/* ### start build ### */
|
|
||||||
extern WORD CALLBACK WIN_CallTo16_word_wl(WNDENUMPROC16,WORD,LONG);
|
|
||||||
/* ### stop build ### */
|
|
||||||
|
|
||||||
struct wnd_enum_info
|
struct wnd_enum_info
|
||||||
{
|
{
|
||||||
WNDENUMPROC16 proc;
|
WNDENUMPROC16 proc;
|
||||||
|
@ -44,7 +40,14 @@ struct wnd_enum_info
|
||||||
static BOOL CALLBACK wnd_enum_callback( HWND hwnd, LPARAM param )
|
static BOOL CALLBACK wnd_enum_callback( HWND hwnd, LPARAM param )
|
||||||
{
|
{
|
||||||
const struct wnd_enum_info *info = (struct wnd_enum_info *)param;
|
const struct wnd_enum_info *info = (struct wnd_enum_info *)param;
|
||||||
return WIN_CallTo16_word_wl( info->proc, HWND_16(hwnd), info->param );
|
WORD args[3];
|
||||||
|
DWORD ret;
|
||||||
|
|
||||||
|
args[2] = HWND_16(hwnd);
|
||||||
|
args[1] = HIWORD(info->param);
|
||||||
|
args[0] = LOWORD(info->param);
|
||||||
|
WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, &ret );
|
||||||
|
return LOWORD(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* convert insert after window handle to 32-bit */
|
/* convert insert after window handle to 32-bit */
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
Makefile
|
Makefile
|
||||||
winaspi.spec.c
|
winaspi.spec.c
|
||||||
wnaspi32.dll.dbg.c
|
wnaspi32.dll.dbg.c
|
||||||
wnaspi32.dll.glue.c
|
|
||||||
wnaspi32.spec.c
|
wnaspi32.spec.c
|
||||||
wnaspi32.spec.def
|
wnaspi32.spec.def
|
||||||
|
|
|
@ -16,8 +16,6 @@ C_SRCS = \
|
||||||
C_SRCS16 = \
|
C_SRCS16 = \
|
||||||
winaspi16.c
|
winaspi16.c
|
||||||
|
|
||||||
EXTRA_OBJS16 = $(MODULE).glue.o
|
|
||||||
|
|
||||||
@MAKE_DLL_RULES@
|
@MAKE_DLL_RULES@
|
||||||
|
|
||||||
### Dependencies:
|
### Dependencies:
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
#include "wine/windef16.h"
|
#include "wine/windef16.h"
|
||||||
#include "winreg.h"
|
#include "winreg.h"
|
||||||
|
#include "wownt32.h"
|
||||||
#include "aspi.h"
|
#include "aspi.h"
|
||||||
#include "winescsi.h"
|
#include "winescsi.h"
|
||||||
#include "wine/winaspi.h"
|
#include "wine/winaspi.h"
|
||||||
|
@ -48,10 +49,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(aspi);
|
||||||
* 3) Only linux supported so far
|
* 3) Only linux supported so far
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* ### start build ### */
|
|
||||||
extern LONG CALLBACK ASPI_CallTo16_long_l(FARPROC16,SEGPTR);
|
|
||||||
/* ### stop build ### */
|
|
||||||
|
|
||||||
#ifdef linux
|
#ifdef linux
|
||||||
|
|
||||||
static ASPI_DEVICE_INFO *ASPI_open_devices = NULL;
|
static ASPI_DEVICE_INFO *ASPI_open_devices = NULL;
|
||||||
|
@ -381,12 +378,12 @@ ASPI_ExecScsiCmd(DWORD ptrPRB, UINT16 mode)
|
||||||
{
|
{
|
||||||
SEGPTR spPRB = MapLS(lpPRB);
|
SEGPTR spPRB = MapLS(lpPRB);
|
||||||
|
|
||||||
ASPI_CallTo16_long_l(lpPRB->SRB_PostProc, spPRB);
|
WOWCallback16((DWORD)lpPRB->SRB_PostProc, spPRB);
|
||||||
UnMapLS(spPRB);
|
UnMapLS(spPRB);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ASPI_WIN16:
|
case ASPI_WIN16:
|
||||||
ASPI_CallTo16_long_l(lpPRB->SRB_PostProc, ptrPRB);
|
WOWCallback16((DWORD)lpPRB->SRB_PostProc, ptrPRB);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -449,7 +446,7 @@ DWORD ASPI_SendASPICommand(DWORD ptrSRB, UINT16 mode)
|
||||||
if (ASPIChainFunc)
|
if (ASPIChainFunc)
|
||||||
{
|
{
|
||||||
/* This is not the post proc, it's the chain proc this time */
|
/* This is not the post proc, it's the chain proc this time */
|
||||||
DWORD ret = ASPI_CallTo16_long_l(ASPIChainFunc, ptrSRB);
|
DWORD ret = WOWCallback16((DWORD)ASPIChainFunc, ptrSRB);
|
||||||
if (ret)
|
if (ret)
|
||||||
{
|
{
|
||||||
lpSRB->inquiry.SRB_Status = SS_INVALID_SRB;
|
lpSRB->inquiry.SRB_Status = SS_INVALID_SRB;
|
||||||
|
@ -545,4 +542,3 @@ DWORD WINAPI GetASPIDLLVersion16()
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ Makefile
|
||||||
mmsystem.spec.c
|
mmsystem.spec.c
|
||||||
sound.spec.c
|
sound.spec.c
|
||||||
winmm.dll.dbg.c
|
winmm.dll.dbg.c
|
||||||
winmm.dll.glue.c
|
|
||||||
winmm.spec.c
|
winmm.spec.c
|
||||||
winmm.spec.def
|
winmm.spec.def
|
||||||
winmm_res.res
|
winmm_res.res
|
||||||
|
|
|
@ -27,8 +27,6 @@ C_SRCS16 = \
|
||||||
|
|
||||||
RC_SRCS = winmm_res.rc
|
RC_SRCS = winmm_res.rc
|
||||||
|
|
||||||
EXTRA_OBJS16 = $(MODULE).glue.o
|
|
||||||
|
|
||||||
SUBDIRS = tests
|
SUBDIRS = tests
|
||||||
|
|
||||||
@MAKE_DLL_RULES@
|
@MAKE_DLL_RULES@
|
||||||
|
|
|
@ -26,16 +26,13 @@
|
||||||
#include "wine/winbase16.h"
|
#include "wine/winbase16.h"
|
||||||
#include "winreg.h"
|
#include "winreg.h"
|
||||||
#include "winver.h"
|
#include "winver.h"
|
||||||
|
#include "wownt32.h"
|
||||||
#include "winemm.h"
|
#include "winemm.h"
|
||||||
#include "digitalv.h"
|
#include "digitalv.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(winmm);
|
WINE_DEFAULT_DEBUG_CHANNEL(winmm);
|
||||||
|
|
||||||
/* ### start build ### */
|
|
||||||
extern WORD CALLBACK MMDRV_CallTo16_word_wwlll(FARPROC16,WORD,WORD,LONG,LONG,LONG);
|
|
||||||
/* ### stop build ### */
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* MMDRV_Callback [internal]
|
* MMDRV_Callback [internal]
|
||||||
*/
|
*/
|
||||||
|
@ -44,11 +41,21 @@ static void MMDRV_Callback(LPWINE_MLD mld, HDRVR hDev, UINT uMsg, DWORD dwParam
|
||||||
TRACE("CB (*%08lx)(%p %08x %08lx %08lx %08lx\n",
|
TRACE("CB (*%08lx)(%p %08x %08lx %08lx %08lx\n",
|
||||||
mld->dwCallback, hDev, uMsg, mld->dwClientInstance, dwParam1, dwParam2);
|
mld->dwCallback, hDev, uMsg, mld->dwClientInstance, dwParam1, dwParam2);
|
||||||
|
|
||||||
if (!mld->bFrom32 && (mld->dwFlags & DCB_TYPEMASK) == DCB_FUNCTION) {
|
if (!mld->bFrom32 && (mld->dwFlags & DCB_TYPEMASK) == DCB_FUNCTION)
|
||||||
|
{
|
||||||
|
WORD args[8];
|
||||||
/* 16 bit func, call it */
|
/* 16 bit func, call it */
|
||||||
TRACE("Function (16 bit) !\n");
|
TRACE("Function (16 bit) !\n");
|
||||||
MMDRV_CallTo16_word_wwlll((FARPROC16)mld->dwCallback, HDRVR_16(hDev), uMsg,
|
|
||||||
mld->dwClientInstance, dwParam1, dwParam2);
|
args[7] = HDRVR_16(hDev);
|
||||||
|
args[6] = uMsg;
|
||||||
|
args[5] = HIWORD(mld->dwClientInstance);
|
||||||
|
args[4] = LOWORD(mld->dwClientInstance);
|
||||||
|
args[3] = HIWORD(dwParam1);
|
||||||
|
args[2] = LOWORD(dwParam1);
|
||||||
|
args[1] = HIWORD(dwParam2);
|
||||||
|
args[0] = LOWORD(dwParam2);
|
||||||
|
WOWCallback16Ex( mld->dwCallback, WCB16_PASCAL, sizeof(args), args, NULL );
|
||||||
} else {
|
} else {
|
||||||
DriverCallback(mld->dwCallback, mld->dwFlags, hDev, uMsg,
|
DriverCallback(mld->dwCallback, mld->dwFlags, hDev, uMsg,
|
||||||
mld->dwClientInstance, dwParam1, dwParam2);
|
mld->dwClientInstance, dwParam1, dwParam2);
|
||||||
|
@ -1729,7 +1736,19 @@ static void CALLBACK MMDRV_WaveOut_Callback(HDRVR hDev, UINT uMsg, DWORD dwInst
|
||||||
static LRESULT MMDRV_CallMMDrvFunc16(FARPROC16 fp16, WORD dev, WORD msg, LONG instance,
|
static LRESULT MMDRV_CallMMDrvFunc16(FARPROC16 fp16, WORD dev, WORD msg, LONG instance,
|
||||||
LONG lp1, LONG lp2)
|
LONG lp1, LONG lp2)
|
||||||
{
|
{
|
||||||
return MMDRV_CallTo16_word_wwlll(fp16, dev, msg, instance, lp1, lp2);
|
WORD args[8];
|
||||||
|
DWORD ret;
|
||||||
|
|
||||||
|
args[7] = dev;
|
||||||
|
args[6] = msg;
|
||||||
|
args[5] = HIWORD(instance);
|
||||||
|
args[4] = LOWORD(instance);
|
||||||
|
args[3] = HIWORD(lp1);
|
||||||
|
args[2] = LOWORD(lp1);
|
||||||
|
args[1] = HIWORD(lp2);
|
||||||
|
args[0] = LOWORD(lp2);
|
||||||
|
WOWCallback16Ex( (DWORD)fp16, WCB16_PASCAL, sizeof(args), args, &ret );
|
||||||
|
return LOWORD(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include "mmsystem.h"
|
#include "mmsystem.h"
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
#include "winternl.h"
|
#include "winternl.h"
|
||||||
|
#include "wownt32.h"
|
||||||
|
|
||||||
#include "wine/winuser16.h"
|
#include "wine/winuser16.h"
|
||||||
#include "winemm.h"
|
#include "winemm.h"
|
||||||
|
@ -46,11 +47,6 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(mmsys);
|
WINE_DEFAULT_DEBUG_CHANNEL(mmsys);
|
||||||
|
|
||||||
/* ### start build ### */
|
|
||||||
extern LONG CALLBACK MMSYSTEM_CallTo16_long_l (FARPROC16,LONG);
|
|
||||||
extern LONG CALLBACK MMSYSTEM_CallTo16_long_lwll (LPMMIOPROC16,LONG,WORD,LONG,LONG);
|
|
||||||
/* ### stop build ### */
|
|
||||||
|
|
||||||
static WINE_MMTHREAD* WINMM_GetmmThread(HANDLE16);
|
static WINE_MMTHREAD* WINMM_GetmmThread(HANDLE16);
|
||||||
static LPWINE_DRIVER DRIVER_OpenDriver16(LPCSTR, LPCSTR, LPARAM);
|
static LPWINE_DRIVER DRIVER_OpenDriver16(LPCSTR, LPCSTR, LPARAM);
|
||||||
static LRESULT DRIVER_CloseDriver16(HDRVR16, LPARAM, LPARAM);
|
static LRESULT DRIVER_CloseDriver16(HDRVR16, LPARAM, LPARAM);
|
||||||
|
@ -2115,7 +2111,7 @@ void WINAPI WINE_mmThreadEntryPoint(DWORD _pmt)
|
||||||
TRACE("[20-%p]\n", lpMMThd->hThread);
|
TRACE("[20-%p]\n", lpMMThd->hThread);
|
||||||
lpMMThd->dwStatus = 0x20;
|
lpMMThd->dwStatus = 0x20;
|
||||||
if (lpMMThd->fpThread) {
|
if (lpMMThd->fpThread) {
|
||||||
MMSYSTEM_CallTo16_long_l(lpMMThd->fpThread, lpMMThd->dwThreadPmt);
|
WOWCallback16((DWORD)lpMMThd->fpThread, lpMMThd->dwThreadPmt);
|
||||||
}
|
}
|
||||||
lpMMThd->dwStatus = 0x30;
|
lpMMThd->dwStatus = 0x30;
|
||||||
TRACE("[30-%p]\n", lpMMThd->hThread);
|
TRACE("[30-%p]\n", lpMMThd->hThread);
|
||||||
|
@ -2644,6 +2640,7 @@ static LRESULT MMIO_Callback16(SEGPTR cb16, LPMMIOINFO lpmmioinfo, UINT uMessage
|
||||||
MMIOINFO16 mmioInfo16;
|
MMIOINFO16 mmioInfo16;
|
||||||
SEGPTR segmmioInfo16;
|
SEGPTR segmmioInfo16;
|
||||||
LPARAM lp1 = lParam1, lp2 = lParam2;
|
LPARAM lp1 = lParam1, lp2 = lParam2;
|
||||||
|
WORD args[7];
|
||||||
|
|
||||||
memset(&mmioInfo16, 0, sizeof(MMIOINFO16));
|
memset(&mmioInfo16, 0, sizeof(MMIOINFO16));
|
||||||
mmioInfo16.lDiskOffset = lpmmioinfo->lDiskOffset;
|
mmioInfo16.lDiskOffset = lpmmioinfo->lDiskOffset;
|
||||||
|
@ -2654,10 +2651,16 @@ static LRESULT MMIO_Callback16(SEGPTR cb16, LPMMIOINFO lpmmioinfo, UINT uMessage
|
||||||
/* map (lParam1, lParam2) into (lp1, lp2) 32=>16 */
|
/* map (lParam1, lParam2) into (lp1, lp2) 32=>16 */
|
||||||
if ((result = MMIO_Map32To16(uMessage, &lp1, &lp2)) != MMSYSERR_NOERROR)
|
if ((result = MMIO_Map32To16(uMessage, &lp1, &lp2)) != MMSYSERR_NOERROR)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
segmmioInfo16 = MapLS(&mmioInfo16);
|
segmmioInfo16 = MapLS(&mmioInfo16);
|
||||||
|
args[6] = HIWORD(segmmioInfo16);
|
||||||
result = MMSYSTEM_CallTo16_long_lwll((LPMMIOPROC16)cb16, segmmioInfo16, uMessage, lp1, lp2);
|
args[5] = LOWORD(segmmioInfo16);
|
||||||
|
args[4] = uMessage;
|
||||||
|
args[3] = HIWORD(lp1);
|
||||||
|
args[2] = LOWORD(lp1);
|
||||||
|
args[1] = HIWORD(lp2);
|
||||||
|
args[0] = LOWORD(lp2);
|
||||||
|
WOWCallback16Ex( cb16, WCB16_PASCAL, sizeof(args), args, &result );
|
||||||
UnMapLS(segmmioInfo16);
|
UnMapLS(segmmioInfo16);
|
||||||
MMIO_UnMap32To16(uMessage, lParam1, lParam2, lp1, lp2);
|
MMIO_UnMap32To16(uMessage, lParam1, lParam2, lp1, lp2);
|
||||||
|
|
||||||
|
|
|
@ -63,8 +63,12 @@ WORD WINAPI WOWHandle16(HANDLE,WOW_HANDLE_TYPE);
|
||||||
/* under Wine use the kernel functions directly so we don't have to import wow32 */
|
/* under Wine use the kernel functions directly so we don't have to import wow32 */
|
||||||
HANDLE WINAPI K32WOWHandle32(WORD,WOW_HANDLE_TYPE);
|
HANDLE WINAPI K32WOWHandle32(WORD,WOW_HANDLE_TYPE);
|
||||||
WORD WINAPI K32WOWHandle16(HANDLE,WOW_HANDLE_TYPE);
|
WORD WINAPI K32WOWHandle16(HANDLE,WOW_HANDLE_TYPE);
|
||||||
|
DWORD WINAPI K32WOWCallback16(DWORD,DWORD);
|
||||||
|
BOOL WINAPI K32WOWCallback16Ex(DWORD,DWORD,DWORD,LPVOID,LPDWORD);
|
||||||
#define WOWHandle32 K32WOWHandle32
|
#define WOWHandle32 K32WOWHandle32
|
||||||
#define WOWHandle16 K32WOWHandle16
|
#define WOWHandle16 K32WOWHandle16
|
||||||
|
#define WOWCallback16 K32WOWCallback16
|
||||||
|
#define WOWCallback16Ex K32WOWCallback16Ex
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __WINESRC__
|
#ifdef __WINESRC__
|
||||||
|
|
16
objects/dc.c
16
objects/dc.c
|
@ -33,10 +33,6 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(dc);
|
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 BOOL DC_DeleteObject( HGDIOBJ handle, void *obj );
|
||||||
|
|
||||||
static const struct gdi_obj_funcs dc_funcs =
|
static const struct gdi_obj_funcs dc_funcs =
|
||||||
|
@ -1147,14 +1143,24 @@ BOOL WINAPI SetDCHook( HDC hdc, DCHOOKPROC hookProc, DWORD dwHookData )
|
||||||
/* relay function to call the 16-bit DC hook proc */
|
/* relay function to call the 16-bit DC hook proc */
|
||||||
static BOOL16 WINAPI call_dc_hook16( HDC16 hdc16, WORD code, DWORD data, LPARAM lParam )
|
static BOOL16 WINAPI call_dc_hook16( HDC16 hdc16, WORD code, DWORD data, LPARAM lParam )
|
||||||
{
|
{
|
||||||
|
WORD args[6];
|
||||||
|
DWORD ret;
|
||||||
FARPROC16 proc = NULL;
|
FARPROC16 proc = NULL;
|
||||||
HDC hdc = HDC_32( hdc16 );
|
HDC hdc = HDC_32( hdc16 );
|
||||||
DC *dc = DC_GetDCPtr( hdc );
|
DC *dc = DC_GetDCPtr( hdc );
|
||||||
|
|
||||||
if (!dc) return FALSE;
|
if (!dc) return FALSE;
|
||||||
proc = dc->hookProc;
|
proc = dc->hookProc;
|
||||||
GDI_ReleaseObj( hdc );
|
GDI_ReleaseObj( hdc );
|
||||||
if (!proc) return FALSE;
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
|
|
@ -132,10 +132,6 @@ static CHARSETINFO FONT_tci[MAXTCIINDEX] = {
|
||||||
{ SYMBOL_CHARSET, CP_SYMBOL, FS(31)},
|
{ 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.
|
* LOGFONT conversion functions.
|
||||||
*/
|
*/
|
||||||
|
@ -522,13 +518,24 @@ static INT FONT_EnumInstance16( LPENUMLOGFONTEXW plf, NEWTEXTMETRICEXW *ptm,
|
||||||
if( pfe->lpLogFontParam->lfCharSet == DEFAULT_CHARSET ||
|
if( pfe->lpLogFontParam->lfCharSet == DEFAULT_CHARSET ||
|
||||||
pfe->lpLogFontParam->lfCharSet == plf->elfLogFont.lfCharSet )
|
pfe->lpLogFontParam->lfCharSet == plf->elfLogFont.lfCharSet )
|
||||||
{
|
{
|
||||||
|
WORD args[7];
|
||||||
|
DWORD result;
|
||||||
|
|
||||||
FONT_EnumLogFontExWTo16(plf, pfe->lpLogFont);
|
FONT_EnumLogFontExWTo16(plf, pfe->lpLogFont);
|
||||||
FONT_NewTextMetricExWTo16(ptm, pfe->lpTextMetric);
|
FONT_NewTextMetricExWTo16(ptm, pfe->lpTextMetric);
|
||||||
pfe->dwFlags |= ENUM_CALLED;
|
pfe->dwFlags |= ENUM_CALLED;
|
||||||
GDI_ReleaseObj( pfe->hdc ); /* release the GDI lock */
|
GDI_ReleaseObj( pfe->hdc ); /* release the GDI lock */
|
||||||
|
|
||||||
ret = FONT_CallTo16_word_llwl( pfe->lpEnumFunc, pfe->segLogFont, pfe->segTextMetric,
|
args[6] = SELECTOROF(pfe->segLogFont);
|
||||||
(UINT16)fType, (LPARAM)pfe->lpData );
|
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 */
|
/* get the lock again and make sure the DC is still valid */
|
||||||
dc = DC_GetDCPtr( pfe->hdc );
|
dc = DC_GetDCPtr( pfe->hdc );
|
||||||
if (!dc || dc != pfe->dc || dc->physDev != pfe->physDev)
|
if (!dc || dc != pfe->dc || dc->physDev != pfe->physDev)
|
||||||
|
|
|
@ -75,9 +75,6 @@ typedef struct
|
||||||
#define MFHEADERSIZE (sizeof(METAHEADER))
|
#define MFHEADERSIZE (sizeof(METAHEADER))
|
||||||
#define MFVERSION 0x300
|
#define MFVERSION 0x300
|
||||||
|
|
||||||
/* ### start build ### */
|
|
||||||
extern WORD CALLBACK MF_CallTo16_word_wllwl(MFENUMPROC16,WORD,LONG,LONG,WORD,LONG);
|
|
||||||
/* ### stop build ### */
|
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
* MF_AddHandle
|
* MF_AddHandle
|
||||||
|
@ -634,6 +631,7 @@ BOOL16 WINAPI EnumMetaFile16( HDC16 hdc16, HMETAFILE16 hmf,
|
||||||
HPEN hPen;
|
HPEN hPen;
|
||||||
HBRUSH hBrush;
|
HBRUSH hBrush;
|
||||||
HFONT hFont;
|
HFONT hFont;
|
||||||
|
WORD args[8];
|
||||||
BOOL16 result = TRUE, loaded = FALSE;
|
BOOL16 result = TRUE, loaded = FALSE;
|
||||||
|
|
||||||
TRACE("(%p, %04x, %p, %08lx)\n", hdc, hmf, lpEnumFunc, lpData);
|
TRACE("(%p, %04x, %p, %08lx)\n", hdc, hmf, lpEnumFunc, lpData);
|
||||||
|
@ -661,20 +659,31 @@ BOOL16 WINAPI EnumMetaFile16( HDC16 hdc16, HMETAFILE16 hmf,
|
||||||
|
|
||||||
/* loop through metafile records */
|
/* 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))
|
while (offset < (mh->mtSize * 2))
|
||||||
{
|
{
|
||||||
|
DWORD ret;
|
||||||
|
|
||||||
mr = (METARECORD *)((char *)mh + offset);
|
mr = (METARECORD *)((char *)mh + offset);
|
||||||
|
|
||||||
if (!MF_CallTo16_word_wllwl( lpEnumFunc, hdc16, spht,
|
WOWCallback16Ex( (DWORD)lpEnumFunc, WCB16_PASCAL, sizeof(args), args, &ret );
|
||||||
MAKESEGPTR( seg + (HIWORD(offset) << __AHSHIFT), LOWORD(offset) ),
|
if (!LOWORD(ret))
|
||||||
mh->mtNoObjects, (LONG)lpData ))
|
|
||||||
{
|
{
|
||||||
result = FALSE;
|
result = FALSE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
offset += (mr->rdSize * 2);
|
offset += (mr->rdSize * 2);
|
||||||
|
args[4] = seg + (HIWORD(offset) << __AHSHIFT);
|
||||||
|
args[3] = LOWORD(offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
SelectObject(hdc, hBrush);
|
SelectObject(hdc, hBrush);
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "wine/winbase16.h"
|
#include "wine/winbase16.h"
|
||||||
#include "wingdi.h"
|
#include "wingdi.h"
|
||||||
#include "winuser.h"
|
#include "winuser.h"
|
||||||
|
#include "wownt32.h"
|
||||||
#include "mmddk.h"
|
#include "mmddk.h"
|
||||||
#include "wine/mmsystem16.h"
|
#include "wine/mmsystem16.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
@ -53,9 +54,6 @@ static LPWINE_DRIVER lpDrvItemList = NULL;
|
||||||
* problem as long as FreeLibrary is not working correctly)
|
* problem as long as FreeLibrary is not working correctly)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* ### start build ### */
|
|
||||||
extern LONG CALLBACK DRIVER_CallTo16_long_lwwll(FARPROC16,LONG,WORD,WORD,LONG,LONG);
|
|
||||||
/* ### stop build ### */
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* LoadStartupDrivers [internal]
|
* LoadStartupDrivers [internal]
|
||||||
|
@ -120,10 +118,22 @@ static LPWINE_DRIVER DRIVER_FindFromHDrvr16(HDRVR16 hDrvr)
|
||||||
static LRESULT inline DRIVER_SendMessage(LPWINE_DRIVER lpDrv, UINT16 msg,
|
static LRESULT inline DRIVER_SendMessage(LPWINE_DRIVER lpDrv, UINT16 msg,
|
||||||
LPARAM lParam1, LPARAM lParam2)
|
LPARAM lParam1, LPARAM lParam2)
|
||||||
{
|
{
|
||||||
|
WORD args[8];
|
||||||
|
LRESULT ret;
|
||||||
|
|
||||||
TRACE("Before CallDriverProc proc=%p driverID=%08lx wMsg=%04x p1=%08lx p2=%08lx\n",
|
TRACE("Before CallDriverProc proc=%p driverID=%08lx wMsg=%04x p1=%08lx p2=%08lx\n",
|
||||||
lpDrv->lpDrvProc, lpDrv->dwDriverID, msg, lParam1, lParam2);
|
lpDrv->lpDrvProc, lpDrv->dwDriverID, msg, lParam1, lParam2);
|
||||||
return DRIVER_CallTo16_long_lwwll((FARPROC16)lpDrv->lpDrvProc, lpDrv->dwDriverID,
|
|
||||||
lpDrv->hDriver16, msg, lParam1, lParam2);
|
args[7] = HIWORD(lpDrv->dwDriverID);
|
||||||
|
args[6] = LOWORD(lpDrv->dwDriverID);
|
||||||
|
args[5] = lpDrv->hDriver16;
|
||||||
|
args[4] = msg;
|
||||||
|
args[3] = HIWORD(lParam1);
|
||||||
|
args[2] = LOWORD(lParam1);
|
||||||
|
args[1] = HIWORD(lParam2);
|
||||||
|
args[0] = LOWORD(lParam2);
|
||||||
|
WOWCallback16Ex( (DWORD)lpDrv->lpDrvProc, WCB16_PASCAL, sizeof(args), args, &ret );
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
|
@ -60,23 +60,6 @@ WINE_DECLARE_DEBUG_CHANNEL(nonclient);
|
||||||
HPALETTE (WINAPI *pfnGDISelectPalette)(HDC hdc, HPALETTE hpal, WORD bkgnd ) = NULL;
|
HPALETTE (WINAPI *pfnGDISelectPalette)(HDC hdc, HPALETTE hpal, WORD bkgnd ) = NULL;
|
||||||
UINT (WINAPI *pfnGDIRealizePalette)(HDC hdc) = NULL;
|
UINT (WINAPI *pfnGDIRealizePalette)(HDC hdc) = NULL;
|
||||||
|
|
||||||
/* ### start build ### */
|
|
||||||
extern WORD CALLBACK PAINTING_CallTo16_word_wlwww(DRAWSTATEPROC16,WORD,LONG,WORD,WORD,WORD);
|
|
||||||
/* ### stop build ### */
|
|
||||||
|
|
||||||
struct draw_state_info
|
|
||||||
{
|
|
||||||
DRAWSTATEPROC16 proc;
|
|
||||||
LPARAM param;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* callback for 16-bit DrawState functions */
|
|
||||||
static BOOL CALLBACK draw_state_callback( HDC hdc, LPARAM lparam, WPARAM wparam, int cx, int cy )
|
|
||||||
{
|
|
||||||
const struct draw_state_info *info = (struct draw_state_info *)lparam;
|
|
||||||
return PAINTING_CallTo16_word_wlwww( info->proc, HDC_16(hdc), info->param, wparam, cx, cy );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* add_paint_count
|
* add_paint_count
|
||||||
|
@ -1409,34 +1392,6 @@ BOOL WINAPI DrawStateW(HDC hdc, HBRUSH hbr,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* DrawState (USER.449)
|
|
||||||
*/
|
|
||||||
BOOL16 WINAPI DrawState16( HDC16 hdc, HBRUSH16 hbr, DRAWSTATEPROC16 func, LPARAM ldata,
|
|
||||||
WPARAM16 wdata, INT16 x, INT16 y, INT16 cx, INT16 cy, UINT16 flags )
|
|
||||||
{
|
|
||||||
struct draw_state_info info;
|
|
||||||
UINT opcode = flags & 0xf;
|
|
||||||
|
|
||||||
if (opcode == DST_TEXT || opcode == DST_PREFIXTEXT)
|
|
||||||
{
|
|
||||||
/* make sure DrawStateA doesn't try to use ldata as a pointer */
|
|
||||||
if (!wdata) wdata = strlen( MapSL(ldata) );
|
|
||||||
if (!cx || !cy)
|
|
||||||
{
|
|
||||||
SIZE s;
|
|
||||||
if (!GetTextExtentPoint32A( HDC_32(hdc), MapSL(ldata), wdata, &s )) return FALSE;
|
|
||||||
if (!cx) cx = s.cx;
|
|
||||||
if (!cy) cy = s.cy;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
info.proc = func;
|
|
||||||
info.param = ldata;
|
|
||||||
return DrawStateA( HDC_32(hdc), HBRUSH_32(hbr), draw_state_callback,
|
|
||||||
(LPARAM)&info, wdata, x, y, cx, cy, flags );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* SelectPalette (Not a Windows API)
|
* SelectPalette (Not a Windows API)
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue