Commit 6e1c296e authored by Alexandre Julliard's avatar Alexandre Julliard

include: Make the CURRENT_STACK16 and CURRENT_DS macros available globally.

parent 97825b9c
......@@ -169,9 +169,6 @@ extern THHOOK *pThhook DECLSPEC_HIDDEN;
(((offset)+(size) <= pModule->mapping_size) ? \
(memcpy( buffer, (const char *)pModule->mapping + (offset), (size) ), TRUE) : FALSE)
#define CURRENT_STACK16 ((STACK16FRAME*)MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved)))
#define CURRENT_DS (CURRENT_STACK16->ds)
/* push bytes on the 16-bit stack of a thread; return a segptr to the first pushed byte */
static inline SEGPTR stack16_push( int size )
{
......
......@@ -1276,7 +1276,7 @@ void WINAPI __regs_K32Thk1632Epilog( CONTEXT *context )
if ( code[5] == 0xFF && code[6] == 0x55 && code[7] == 0xFC
&& code[13] == 0x66 && code[14] == 0xCB)
{
STACK16FRAME *frame16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
STACK16FRAME *frame16 = CURRENT_STACK16;
char *stack16 = (char *)(frame16 + 1);
DWORD argSize = frame16->ebp - (DWORD)stack16;
char *stack32 = (char *)frame16->frame32 - argSize;
......
......@@ -718,15 +718,15 @@ BOOL16 WINAPI TimerCount16( TIMERINFO *pTimerInfo )
*/
BOOL16 WINAPI SystemHeapInfo16( SYSHEAPINFO *pHeapInfo )
{
STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
HANDLE16 oldDS = stack16->ds;
HANDLE16 oldDS = CURRENT_DS;
WORD user = LoadLibrary16( "USER.EXE" );
WORD gdi = LoadLibrary16( "GDI.EXE" );
stack16->ds = user;
CURRENT_DS = user;
pHeapInfo->wUserFreePercent = (int)LocalCountFree16() * 100 / LocalHeapSize16();
stack16->ds = gdi;
CURRENT_DS = gdi;
pHeapInfo->wGDIFreePercent = (int)LocalCountFree16() * 100 / LocalHeapSize16();
stack16->ds = oldDS;
CURRENT_DS = oldDS;
pHeapInfo->hUserSegment = user;
pHeapInfo->hGDISegment = gdi;
FreeLibrary16( user );
......
......@@ -2092,7 +2092,6 @@ static LRESULT combo_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam,
static void edit_lock_buffer( HWND hwnd )
{
STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
HLOCAL16 hloc16 = GetWindowWord( hwnd, GWW_HANDLE16 );
HANDLE16 oldDS;
HLOCAL hloc32;
......@@ -2101,8 +2100,8 @@ static void edit_lock_buffer( HWND hwnd )
if (!hloc16) return;
if (!(hloc32 = (HLOCAL)wow_handlers32.edit_proc( hwnd, EM_GETHANDLE, 0, 0, FALSE ))) return;
oldDS = stack16->ds;
stack16->ds = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );
oldDS = CURRENT_DS;
CURRENT_DS = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );
size = LocalSize16(hloc16);
if (LocalReAlloc( hloc32, size, LMEM_MOVEABLE ))
{
......@@ -2112,13 +2111,11 @@ static void edit_lock_buffer( HWND hwnd )
LocalUnlock( hloc32 );
LocalUnlock16( hloc16 );
}
stack16->ds = oldDS;
CURRENT_DS = oldDS;
}
static void edit_unlock_buffer( HWND hwnd )
{
STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
HLOCAL16 hloc16 = GetWindowWord( hwnd, GWW_HANDLE16 );
HANDLE16 oldDS;
HLOCAL hloc32;
......@@ -2128,8 +2125,8 @@ static void edit_unlock_buffer( HWND hwnd )
if (!(hloc32 = (HLOCAL)wow_handlers32.edit_proc( hwnd, EM_GETHANDLE, 0, 0, FALSE ))) return;
size = LocalSize( hloc32 );
oldDS = stack16->ds;
stack16->ds = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );
oldDS = CURRENT_DS;
CURRENT_DS = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );
if (LocalReAlloc16( hloc16, size, LMEM_MOVEABLE ))
{
char *text = LocalLock( hloc32 );
......@@ -2138,7 +2135,7 @@ static void edit_unlock_buffer( HWND hwnd )
LocalUnlock( hloc32 );
LocalUnlock16( hloc16 );
}
stack16->ds = oldDS;
CURRENT_DS = oldDS;
}
static HLOCAL16 edit_get_handle( HWND hwnd )
......@@ -2146,7 +2143,6 @@ static HLOCAL16 edit_get_handle( HWND hwnd )
CHAR *textA;
UINT alloc_size;
HLOCAL hloc;
STACK16FRAME* stack16;
HANDLE16 oldDS;
HLOCAL16 hloc16 = GetWindowWord( hwnd, GWW_HANDLE16 );
......@@ -2155,13 +2151,12 @@ static HLOCAL16 edit_get_handle( HWND hwnd )
if (!(hloc = (HLOCAL)wow_handlers32.edit_proc( hwnd, EM_GETHANDLE, 0, 0, FALSE ))) return 0;
alloc_size = LocalSize( hloc );
stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
oldDS = stack16->ds;
stack16->ds = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );
oldDS = CURRENT_DS;
CURRENT_DS = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );
if (!LocalHeapSize16())
{
if (!LocalInit16(stack16->ds, 0, GlobalSize16(stack16->ds)))
if (!LocalInit16(CURRENT_DS, 0, GlobalSize16(CURRENT_DS)))
{
ERR("could not initialize local heap\n");
goto done;
......@@ -2187,15 +2182,14 @@ static HLOCAL16 edit_get_handle( HWND hwnd )
SetWindowWord( hwnd, GWW_HANDLE16, hloc16 );
done:
stack16->ds = oldDS;
CURRENT_DS = oldDS;
return hloc16;
}
static void edit_set_handle( HWND hwnd, HLOCAL16 hloc16 )
{
STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
HINSTANCE16 hInstance = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );
HANDLE16 oldDS = stack16->ds;
HANDLE16 oldDS = CURRENT_DS;
HLOCAL hloc32;
INT count;
CHAR *text;
......@@ -2203,7 +2197,7 @@ static void edit_set_handle( HWND hwnd, HLOCAL16 hloc16 )
if (!(GetWindowLongW( hwnd, GWL_STYLE ) & ES_MULTILINE)) return;
if (!hloc16) return;
stack16->ds = hInstance;
CURRENT_DS = hInstance;
count = LocalSize16(hloc16);
text = MapSL(LocalLock16(hloc16));
if ((hloc32 = LocalAlloc(LMEM_MOVEABLE, count)))
......@@ -2213,8 +2207,7 @@ static void edit_set_handle( HWND hwnd, HLOCAL16 hloc16 )
LocalUnlock16(hloc16);
SetWindowWord( hwnd, GWW_HANDLE16, hloc16 );
}
stack16->ds = oldDS;
CURRENT_DS = oldDS;
if (hloc32) wow_handlers32.edit_proc( hwnd, EM_SETHANDLE, (WPARAM)hloc32, 0, FALSE );
}
......@@ -2223,13 +2216,12 @@ static void edit_destroy_handle( HWND hwnd )
HLOCAL16 hloc16 = GetWindowWord( hwnd, GWW_HANDLE16 );
if (hloc16)
{
STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
HANDLE16 oldDS = stack16->ds;
HANDLE16 oldDS = CURRENT_DS;
stack16->ds = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );
CURRENT_DS = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );
while (LocalUnlock16(hloc16)) ;
LocalFree16(hloc16);
stack16->ds = oldDS;
CURRENT_DS = oldDS;
SetWindowWord( hwnd, GWW_HANDLE16, 0 );
}
}
......
......@@ -1394,11 +1394,10 @@ DWORD WINAPI GetTabbedTextExtent16( HDC16 hdc, LPCSTR lpstr, INT16 count,
*/
DWORD WINAPI UserSeeUserDo16(WORD wReqType, WORD wParam1, WORD wParam2, WORD wParam3)
{
STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
HANDLE16 oldDS = stack16->ds;
HANDLE16 oldDS = CURRENT_DS;
DWORD ret = (DWORD)-1;
stack16->ds = USER_HeapSel;
CURRENT_DS = USER_HeapSel;
switch (wReqType)
{
case USUD_LOCALALLOC:
......@@ -1419,7 +1418,7 @@ DWORD WINAPI UserSeeUserDo16(WORD wReqType, WORD wParam1, WORD wParam2, WORD wPa
default:
WARN("wReqType %04x (unknown)\n", wReqType);
}
stack16->ds = oldDS;
CURRENT_DS = oldDS;
return ret;
}
......@@ -1787,32 +1786,31 @@ UINT16 WINAPI RealizePalette16( HDC16 hdc )
*/
WORD WINAPI GetFreeSystemResources16( WORD resType )
{
STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
HANDLE16 oldDS = stack16->ds;
HANDLE16 oldDS = CURRENT_DS;
int userPercent, gdiPercent;
switch(resType)
{
case GFSR_USERRESOURCES:
stack16->ds = USER_HeapSel;
CURRENT_DS = USER_HeapSel;
userPercent = (int)LocalCountFree16() * 100 / LocalHeapSize16();
gdiPercent = 100;
stack16->ds = oldDS;
CURRENT_DS = oldDS;
break;
case GFSR_GDIRESOURCES:
stack16->ds = gdi_inst;
CURRENT_DS = gdi_inst;
gdiPercent = (int)LocalCountFree16() * 100 / LocalHeapSize16();
userPercent = 100;
stack16->ds = oldDS;
CURRENT_DS = oldDS;
break;
case GFSR_SYSTEMRESOURCES:
stack16->ds = USER_HeapSel;
CURRENT_DS = USER_HeapSel;
userPercent = (int)LocalCountFree16() * 100 / LocalHeapSize16();
stack16->ds = gdi_inst;
CURRENT_DS = gdi_inst;
gdiPercent = (int)LocalCountFree16() * 100 / LocalHeapSize16();
stack16->ds = oldDS;
CURRENT_DS = oldDS;
break;
default:
......
......@@ -456,8 +456,7 @@ HWND16 WINAPI GetParent16( HWND16 hwnd )
*/
BOOL16 WINAPI IsWindow16( HWND16 hwnd )
{
STACK16FRAME *frame = MapSL( (SEGPTR)NtCurrentTeb()->WOW32Reserved );
frame->es = USER_HeapSel;
CURRENT_STACK16->es = USER_HeapSel;
/* don't use WIN_Handle32 here, we don't care about the full handle */
return IsWindow( HWND_32(hwnd) );
}
......
......@@ -23,6 +23,7 @@
#include <windef.h>
#include <winbase.h>
#include <winnls.h>
#include <winternl.h>
#include <wine/windef16.h>
#include <pshpack1.h>
......@@ -561,4 +562,7 @@ BOOL16 WINAPI WritePrivateProfileSection16(LPCSTR,LPCSTR,LPCSTR);
BOOL16 WINAPI WritePrivateProfileStruct16(LPCSTR,LPCSTR,LPVOID,UINT16,LPCSTR);
BOOL16 WINAPI WriteProfileSection16(LPCSTR,LPCSTR);
#define CURRENT_STACK16 ((STACK16FRAME *)MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved))
#define CURRENT_DS (CURRENT_STACK16->ds)
#endif /* __WINE_WINE_WINBASE16_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment