Use MapLS/UnMapLS instead of SEGPTR_* macros.
diff --git a/dlls/msvideo/msvideo_main.c b/dlls/msvideo/msvideo_main.c
index 7021e52..82045eb 100644
--- a/dlls/msvideo/msvideo_main.c
+++ b/dlls/msvideo/msvideo_main.c
@@ -20,7 +20,6 @@
#include "vfw16.h"
#include "wine/winbase16.h"
#include "debugtools.h"
-#include "heap.h"
#include "stackframe.h"
DEFAULT_DEBUG_CHANNEL(msvideo);
@@ -220,19 +219,20 @@
HIC MSVIDEO_OpenFunc(DWORD fccType, DWORD fccHandler, UINT wMode, FARPROC lpfnHandler, BOOL bFrom32) {
char type[5],handler[5],codecname[20];
HIC16 hic;
- ICOPEN* icopen = SEGPTR_NEW(ICOPEN);
+ ICOPEN icopen;
+ SEGPTR seg_icopen;
WINE_HIC *whic;
memcpy(type,&fccType,4);type[4]=0;
memcpy(handler,&fccHandler,4);handler[4]=0;
TRACE("(%s,%s,%d,%p,%d)\n",type,handler,wMode,lpfnHandler,bFrom32?32:16);
-
- icopen->fccType = fccType;
- icopen->fccHandler = fccHandler;
- icopen->dwSize = sizeof(ICOPEN);
- icopen->dwFlags = wMode;
-
- sprintf(codecname,"%s.%s",type,handler);
+
+ icopen.fccType = fccType;
+ icopen.fccHandler = fccHandler;
+ icopen.dwSize = sizeof(ICOPEN);
+ icopen.dwFlags = wMode;
+
+ sprintf(codecname,"%s.%s",type,handler);
hic = GlobalAlloc16(GHND,sizeof(WINE_HIC));
if (!hic)
@@ -253,7 +253,9 @@
/* return value is not checked */
MSVIDEO_SendMessage(hic,DRV_ENABLE,0L,0L,bFrom32);
- whic->hdrv = MSVIDEO_SendMessage(hic,DRV_OPEN,0,(LPARAM)(SEGPTR_GET(icopen)),FALSE);
+ seg_icopen = MapLS( &icopen );
+ whic->hdrv = MSVIDEO_SendMessage(hic,DRV_OPEN,0,seg_icopen,FALSE);
+ UnMapLS( seg_icopen );
if (whic->hdrv == 0) {
WARN("DRV_OPEN failed for hic 0x%08lx\n",(DWORD)hic);
GlobalFree16(hic);
@@ -504,26 +506,28 @@
LPBITMAPINFOHEADER lpbiPrev, LPVOID lpPrev) {
DWORD ret;
- ICCOMPRESS *iccmp = SEGPTR_NEW(ICCOMPRESS);
+ ICCOMPRESS iccmp;
+ SEGPTR seg_iccmp;
- TRACE("(0x%08lx,%ld,%p,%p,%p,%p,...)\n",(DWORD)hic,dwFlags,lpbiOutput,lpData,lpbiInput,lpBits);
+ TRACE("(0x%08lx,%ld,%p,%p,%p,%p,...)\n",(DWORD)hic,dwFlags,lpbiOutput,lpData,lpbiInput,lpBits);
- iccmp->dwFlags = dwFlags;
+ iccmp.dwFlags = dwFlags;
- iccmp->lpbiOutput = lpbiOutput;
- iccmp->lpOutput = lpData;
- iccmp->lpbiInput = lpbiInput;
- iccmp->lpInput = lpBits;
+ iccmp.lpbiOutput = lpbiOutput;
+ iccmp.lpOutput = lpData;
+ iccmp.lpbiInput = lpbiInput;
+ iccmp.lpInput = lpBits;
- iccmp->lpckid = lpckid;
- iccmp->lpdwFlags = lpdwFlags;
- iccmp->lFrameNum = lFrameNum;
- iccmp->dwFrameSize = dwFrameSize;
- iccmp->dwQuality = dwQuality;
- iccmp->lpbiPrev = lpbiPrev;
- iccmp->lpPrev = lpPrev;
- ret = ICSendMessage16(hic,ICM_COMPRESS,(DWORD)SEGPTR_GET(iccmp),sizeof(ICCOMPRESS));
- SEGPTR_FREE(iccmp);
+ iccmp.lpckid = lpckid;
+ iccmp.lpdwFlags = lpdwFlags;
+ iccmp.lFrameNum = lFrameNum;
+ iccmp.dwFrameSize = dwFrameSize;
+ iccmp.dwQuality = dwQuality;
+ iccmp.lpbiPrev = lpbiPrev;
+ iccmp.lpPrev = lpPrev;
+ seg_iccmp = MapLS( &iccmp );
+ ret = ICSendMessage16(hic,ICM_COMPRESS,seg_iccmp,sizeof(ICCOMPRESS));
+ UnMapLS( seg_iccmp );
return ret;
}
@@ -560,23 +564,23 @@
* _ICDecompress [MSVIDEO.230]
*/
DWORD VFWAPIV ICDecompress16(HIC16 hic, DWORD dwFlags, LPBITMAPINFOHEADER lpbiFormat,
- LPVOID lpData, LPBITMAPINFOHEADER lpbi, LPVOID lpBits) {
-
- ICDECOMPRESS *icd = SEGPTR_NEW(ICDECOMPRESS);
+ LPVOID lpData, LPBITMAPINFOHEADER lpbi, LPVOID lpBits)
+{
+ ICDECOMPRESS icd;
+ SEGPTR segptr;
DWORD ret;
TRACE("(0x%08lx,%ld,%p,%p,%p,%p)\n",(DWORD)hic,dwFlags,lpbiFormat,lpData,lpbi,lpBits);
- icd->dwFlags = dwFlags;
- icd->lpbiInput = lpbiFormat;
- icd->lpInput = lpData;
- icd->lpbiOutput = lpbi;
- icd->lpOutput = lpBits;
- icd->ckid = 0;
-
- ret = ICSendMessage16(hic,ICM_DECOMPRESS,(DWORD)SEGPTR_GET(icd),sizeof(ICDECOMPRESS));
-
- SEGPTR_FREE(icd);
+ icd.dwFlags = dwFlags;
+ icd.lpbiInput = lpbiFormat;
+ icd.lpInput = lpData;
+ icd.lpbiOutput = lpbi;
+ icd.lpOutput = lpBits;
+ icd.ckid = 0;
+ segptr = MapLS( &icd );
+ ret = ICSendMessage16(hic,ICM_DECOMPRESS,segptr,sizeof(ICDECOMPRESS));
+ UnMapLS( segptr );
return ret;
}
@@ -996,6 +1000,7 @@
UINT16 msg;
UINT16 cb;
LPWORD lpData;
+ SEGPTR segData;
LRESULT ret;
UINT16 i;
@@ -1006,7 +1011,7 @@
msg = VA_ARG16(valist, UINT16);
cb = VA_ARG16(valist, UINT16);
- lpData = SEGPTR_ALLOC(cb);
+ lpData = HeapAlloc( GetProcessHeap(), 0, cb );
TRACE("0x%08lx, %u, %u, ...)\n",(DWORD)hic,msg,cb);
@@ -1015,9 +1020,10 @@
}
VA_END16(valist);
- ret = ICSendMessage16(hic, msg, (DWORD)(SEGPTR_GET(lpData)), (DWORD)cb);
-
- SEGPTR_FREE(lpData);
+ segData = MapLS( lpData );
+ ret = ICSendMessage16(hic, msg, segData, (DWORD)cb);
+ UnMapLS( segData );
+ HeapFree( GetProcessHeap(), 0, lpData );
return ret;
}
@@ -1089,30 +1095,31 @@
DWORD dwScale) /* [in] */
{
DWORD ret;
- ICDRAWBEGIN16* icdb = SEGPTR_NEW(ICDRAWBEGIN16); /* SEGPTR for mapper to deal with */
+ ICDRAWBEGIN16 icdb;
+ SEGPTR seg_icdb;
TRACE("(0x%08lx,%ld,0x%08lx,0x%08lx,0x%08lx,%u,%u,%u,%u,%p,%u,%u,%u,%u,%ld,%ld)\n",
(DWORD)hic, dwFlags, (DWORD)hpal, (DWORD)hwnd, (DWORD)hdc, xDst, yDst, dxDst, dyDst,
lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale);
- icdb->dwFlags = dwFlags;
- icdb->hpal = hpal;
- icdb->hwnd = hwnd;
- icdb->hdc = hdc;
- icdb->xDst = xDst;
- icdb->yDst = yDst;
- icdb->dxDst = dxDst;
- icdb->dyDst = dyDst;
- icdb->lpbi = lpbi; /* Keep this as SEGPTR for the mapping code to deal with */
- icdb->xSrc = xSrc;
- icdb->ySrc = ySrc;
- icdb->dxSrc = dxSrc;
- icdb->dySrc = dySrc;
- icdb->dwRate = dwRate;
- icdb->dwScale = dwScale;
-
- ret = (DWORD)ICSendMessage16(hic,ICM_DRAW_BEGIN,(DWORD)SEGPTR_GET(icdb),sizeof(ICDRAWBEGIN16));
- SEGPTR_FREE(icdb);
+ icdb.dwFlags = dwFlags;
+ icdb.hpal = hpal;
+ icdb.hwnd = hwnd;
+ icdb.hdc = hdc;
+ icdb.xDst = xDst;
+ icdb.yDst = yDst;
+ icdb.dxDst = dxDst;
+ icdb.dyDst = dyDst;
+ icdb.lpbi = lpbi; /* Keep this as SEGPTR for the mapping code to deal with */
+ icdb.xSrc = xSrc;
+ icdb.ySrc = ySrc;
+ icdb.dxSrc = dxSrc;
+ icdb.dySrc = dySrc;
+ icdb.dwRate = dwRate;
+ icdb.dwScale = dwScale;
+ seg_icdb = MapLS( &icdb );
+ ret = (DWORD)ICSendMessage16(hic,ICM_DRAW_BEGIN,seg_icdb,sizeof(ICDRAWBEGIN16));
+ UnMapLS( seg_icdb );
return ret;
}
@@ -1144,16 +1151,20 @@
DWORD cbData,
LONG lTime)
{
- ICDRAW* icd = SEGPTR_NEW(ICDRAW); /* SEGPTR for mapper to deal with */
+ DWORD ret;
+ ICDRAW icd;
+ SEGPTR seg_icd;
- TRACE("(0x%08lx,0x%08lx,%p,%p,%ld,%ld)\n",(DWORD)hic,dwFlags,lpFormat,lpData,cbData,lTime);
- icd->dwFlags = dwFlags;
- icd->lpFormat = lpFormat;
- icd->lpData = lpData;
- icd->cbData = cbData;
- icd->lTime = lTime;
-
- return ICSendMessage16(hic,ICM_DRAW,(DWORD)SEGPTR_GET(icd),sizeof(ICDRAW));
+ TRACE("(0x%08lx,0x%08lx,%p,%p,%ld,%ld)\n",(DWORD)hic,dwFlags,lpFormat,lpData,cbData,lTime);
+ icd.dwFlags = dwFlags;
+ icd.lpFormat = lpFormat;
+ icd.lpData = lpData;
+ icd.cbData = cbData;
+ icd.lTime = lTime;
+ seg_icd = MapLS( &icd );
+ ret = ICSendMessage16(hic,ICM_DRAW,seg_icd,sizeof(ICDRAW));
+ UnMapLS( seg_icd );
+ return ret;
}
/***********************************************************************
diff --git a/dlls/oleaut32/ole2disp.c b/dlls/oleaut32/ole2disp.c
index 72a4108..fba8760 100644
--- a/dlls/oleaut32/ole2disp.c
+++ b/dlls/oleaut32/ole2disp.c
@@ -8,6 +8,7 @@
#include <string.h>
+#include "wine/windef16.h"
#include "ole2.h"
#include "oleauto.h"
#include "windef.h"
@@ -16,7 +17,6 @@
#include "wingdi.h"
#include "winuser.h"
-#include "heap.h"
#include "ole2disp.h"
#include "olectl.h"
@@ -33,8 +33,8 @@
*/
static BSTR16 BSTR_AllocBytes(int n)
{
- void *ptr = SEGPTR_ALLOC(n);
- return (BSTR16)SEGPTR_GET(ptr);
+ void *ptr = HeapAlloc( GetProcessHeap(), 0, n );
+ return (BSTR16)MapLS(ptr);
}
/******************************************************************************
@@ -42,7 +42,9 @@
*/
static void BSTR_Free(BSTR16 in)
{
- SEGPTR_FREE( MapSL((SEGPTR)in) );
+ void *ptr = MapSL( (SEGPTR)in );
+ UnMapLS( (SEGPTR)in );
+ HeapFree( GetProcessHeap(), 0, ptr );
}
/******************************************************************************
diff --git a/dlls/user/msg16.c b/dlls/user/msg16.c
index 29c1941..c0873a8 100644
--- a/dlls/user/msg16.c
+++ b/dlls/user/msg16.c
@@ -6,7 +6,6 @@
#include "wine/winuser16.h"
#include "winerror.h"
-#include "heap.h"
#include "hook.h"
#include "message.h"
#include "spy.h"
@@ -34,25 +33,24 @@
/* first the WH_CALLWNDPROC hook */
if (HOOK_IsHooked( WH_CALLWNDPROC ))
{
- CWPSTRUCT16 *cwp;
+ CWPSTRUCT16 cwp;
+ SEGPTR seg_cwp;
- if ((cwp = SEGPTR_NEW(CWPSTRUCT16)))
+ cwp.hwnd = hwnd16;
+ cwp.message = msg;
+ cwp.wParam = wparam;
+ cwp.lParam = lparam;
+ seg_cwp = MapLS( &cwp );
+ HOOK_CallHooks16( WH_CALLWNDPROC, HC_ACTION, 1, seg_cwp );
+ UnMapLS( seg_cwp );
+ if (cwp.hwnd != hwnd16)
{
- cwp->hwnd = hwnd16;
- cwp->message = msg;
- cwp->wParam = wparam;
- cwp->lParam = lparam;
- HOOK_CallHooks16( WH_CALLWNDPROC, HC_ACTION, 1, SEGPTR_GET(cwp) );
- if (cwp->hwnd != hwnd16)
- {
- hwnd16 = cwp->hwnd;
- hwnd = WIN_Handle32( hwnd16 );
- }
- msg = cwp->message;
- wparam = cwp->wParam;
- lparam = cwp->lParam;
- SEGPTR_FREE( cwp );
+ hwnd16 = cwp.hwnd;
+ hwnd = WIN_Handle32( hwnd16 );
}
+ msg = cwp.message;
+ wparam = cwp.wParam;
+ lparam = cwp.lParam;
}
if (!(winproc = (WNDPROC16)GetWindowLong16( hwnd16, GWL_WNDPROC ))) return 0;
diff --git a/dlls/user/property.c b/dlls/user/property.c
index a91c744..2cf3b42 100644
--- a/dlls/user/property.c
+++ b/dlls/user/property.c
@@ -10,7 +10,6 @@
#include "wingdi.h"
#include "wine/winuser16.h"
#include "wine/server.h"
-#include "heap.h"
/* size of buffer needed to store an atom string */
#define ATOM_BUFFER_SIZE 256
@@ -289,19 +288,20 @@
if (list)
{
- char *string = SEGPTR_ALLOC( ATOM_BUFFER_SIZE );
+ char string[ATOM_BUFFER_SIZE];
+ SEGPTR segptr = MapLS( string );
for (i = 0; i < count; i++)
{
if (list[i].string) /* it was a string originally */
{
if (!GlobalGetAtomNameA( list[i].atom, string, ATOM_BUFFER_SIZE )) continue;
- ret = PROP_CallTo16_word_wlw( func, hwnd, SEGPTR_GET(string), list[i].handle );
+ ret = PROP_CallTo16_word_wlw( func, hwnd, segptr, list[i].handle );
}
else
ret = PROP_CallTo16_word_wlw( func, hwnd, list[i].atom, list[i].handle );
if (!ret) break;
}
- SEGPTR_FREE( string );
+ UnMapLS( segptr );
HeapFree( GetProcessHeap(), 0, list );
}
return ret;
diff --git a/graphics/win16drv/brush.c b/graphics/win16drv/brush.c
index 48cbb4c..2ef65f2 100644
--- a/graphics/win16drv/brush.c
+++ b/graphics/win16drv/brush.c
@@ -6,7 +6,6 @@
#include <stdlib.h>
#include "win16drv.h"
-#include "heap.h"
#include "debugtools.h"
DEFAULT_DEBUG_CHANNEL(win16drv);
@@ -32,7 +31,7 @@
{
nSize = PRTDRV_RealizeObject (physDev->segptrPDEVICE, DRVOBJ_BRUSH,
&lBrush16, 0, 0);
- physDev->BrushInfo = SEGPTR_ALLOC( nSize );
+ physDev->BrushInfo = HeapAlloc( GetProcessHeap(), 0, nSize );
}
diff --git a/graphics/win16drv/font.c b/graphics/win16drv/font.c
index 5ebe6e1..921cb38 100644
--- a/graphics/win16drv/font.c
+++ b/graphics/win16drv/font.c
@@ -10,7 +10,6 @@
#include "wine/winbase16.h"
#include "win16drv.h"
#include "font.h"
-#include "heap.h"
#include "gdi.h"
#include "debugtools.h"
@@ -97,12 +96,12 @@
if( physDev->FontInfo &&
HeapSize( GetProcessHeap(), 0, physDev->FontInfo ) < nSize )
{
- SEGPTR_FREE( physDev->FontInfo );
+ HeapFree( GetProcessHeap(), 0, physDev->FontInfo );
physDev->FontInfo = NULL;
}
if( !physDev->FontInfo )
- physDev->FontInfo = SEGPTR_ALLOC( nSize );
+ physDev->FontInfo = HeapAlloc( GetProcessHeap(), 0, nSize );
nSize = PRTDRV_RealizeObject(physDev->segptrPDEVICE, DRVOBJ_FONT,
diff --git a/graphics/win16drv/init.c b/graphics/win16drv/init.c
index 7730cfc..d561a8a 100644
--- a/graphics/win16drv/init.c
+++ b/graphics/win16drv/init.c
@@ -13,7 +13,6 @@
#include "win16drv.h"
#include "gdi.h"
#include "bitmap.h"
-#include "heap.h"
#include "font.h"
#include "debugtools.h"
diff --git a/graphics/win16drv/pen.c b/graphics/win16drv/pen.c
index 6f315fa..ecca11b 100644
--- a/graphics/win16drv/pen.c
+++ b/graphics/win16drv/pen.c
@@ -5,7 +5,6 @@
*/
#include "win16drv.h"
-#include "heap.h"
#include "debugtools.h"
DEFAULT_DEBUG_CHANNEL(win16drv);
@@ -35,7 +34,7 @@
{
nSize = PRTDRV_RealizeObject (physDev->segptrPDEVICE, DRVOBJ_PEN,
&lPen16, 0, 0);
- physDev->PenInfo = SEGPTR_ALLOC( nSize );
+ physDev->PenInfo = HeapAlloc( GetProcessHeap(), 0, nSize );
}
nSize = PRTDRV_RealizeObject(physDev->segptrPDEVICE, DRVOBJ_PEN,
diff --git a/graphics/win16drv/prtdrv.c b/graphics/win16drv/prtdrv.c
index d664bd8..62987dc 100644
--- a/graphics/win16drv/prtdrv.c
+++ b/graphics/win16drv/prtdrv.c
@@ -13,7 +13,6 @@
#include "wine/winbase16.h"
#include "winuser.h"
#include "win16drv.h"
-#include "heap.h"
#include "debugtools.h"
#include "bitmap.h"
@@ -253,8 +252,8 @@
pLPD = FindPrinterDriverFromName((char *)lpDeviceName);
if (pLPD != NULL) {
LONG lP5;
- DeviceCaps *lP1;
- LPSTR lP3,lP4;
+ DeviceCaps devcaps;
+ SEGPTR lP1, lP3,lP4;
WORD wP2;
if (!pLPD->fn[FUNC_ENABLE]) {
@@ -263,30 +262,25 @@
}
if (wStyle == INITPDEVICE)
- lP1 = (DeviceCaps*)lpDevInfo;/* 16 bit segmented ptr already */
+ lP1 = (SEGPTR)lpDevInfo;/* 16 bit segmented ptr already */
else
- lP1 = SEGPTR_NEW(DeviceCaps);
+ lP1 = MapLS(&devcaps);
wP2 = wStyle;
- /* SEGPTR_STRDUP handles NULL like a charm ... */
- lP3 = SEGPTR_STRDUP(lpDestDevType);
- lP4 = SEGPTR_STRDUP(lpOutputFile);
+ /* MapLS handles NULL like a charm ... */
+ lP3 = MapLS(lpDestDevType);
+ lP4 = MapLS(lpOutputFile);
lP5 = (LONG)lpData;
- wRet = PRTDRV_CallTo16_word_lwlll(pLPD->fn[FUNC_ENABLE],
- (wStyle==INITPDEVICE)?(SEGPTR)lP1:SEGPTR_GET(lP1),
- wP2,
- SEGPTR_GET(lP3),
- SEGPTR_GET(lP4),
- lP5);
- SEGPTR_FREE(lP3);
- SEGPTR_FREE(lP4);
+ wRet = PRTDRV_CallTo16_word_lwlll(pLPD->fn[FUNC_ENABLE], lP1, wP2, lP3, lP4, lP5);
+ UnMapLS(lP3);
+ UnMapLS(lP4);
/* Get the data back */
if (lP1 != 0 && wStyle != INITPDEVICE) {
- memcpy(lpDevInfo,lP1,sizeof(DeviceCaps));
- SEGPTR_FREE(lP1);
+ memcpy(lpDevInfo,&devcaps,sizeof(DeviceCaps));
+ UnMapLS(lP1);
}
}
TRACE("return %x\n", wRet);
@@ -308,8 +302,7 @@
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
{
- LONG lP1, lP4;
- LPBYTE lP2;
+ SEGPTR lP1, lP2, lP4;
if (pLPD->fn[FUNC_ENUMDFONTS] == NULL) {
WARN("Not supported by driver\n");
@@ -317,16 +310,11 @@
}
lP1 = (SEGPTR)lpDestDev;
- if(lpFaceName)
- lP2 = SEGPTR_STRDUP(lpFaceName);
- else
- lP2 = NULL;
+ lP2 = MapLS(lpFaceName);
lP4 = (LONG)lpClientData;
- wRet = PRTDRV_CallTo16_word_llll( pLPD->fn[FUNC_ENUMDFONTS],
- lP1, SEGPTR_GET(lP2),
- (LONG)lpCallbackFunc,lP4);
- if(lpFaceName)
- SEGPTR_FREE(lP2);
+ wRet = PRTDRV_CallTo16_word_llll( pLPD->fn[FUNC_ENUMDFONTS], lP1, lP2,
+ (LONG)lpCallbackFunc,lP4);
+ UnMapLS(lP2);
} else
WARN("Failed to find device\n");
@@ -395,11 +383,8 @@
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
{
- LONG lP1, lP5, lP6, lP7;
- LPPOINT16 lP4;
- LPRECT16 lP8;
+ LONG lP1, lP4, lP5, lP6, lP7, lP8;
WORD wP2, wP3;
- int nSize;
if (pLPD->fn[FUNC_OUTPUT] == NULL)
{
WARN("Not supported by driver\n");
@@ -409,11 +394,9 @@
lP1 = lpDestDev;
wP2 = wStyle;
wP3 = wCount;
- nSize = sizeof(POINT16) * wCount;
- lP4 = (LPPOINT16 )SEGPTR_ALLOC(nSize);
- memcpy(lP4,points,nSize);
- lP5 = SEGPTR_GET( lpPen );
- lP6 = SEGPTR_GET( lpBrush );
+ lP4 = MapLS( points );
+ lP5 = MapLS( lpPen );
+ lP6 = MapLS( lpBrush );
lP7 = lpDrawMode;
if (hClipRgn)
@@ -432,41 +415,39 @@
if( clip->rdh.nCount == 0 )
{
wRet = PRTDRV_CallTo16_word_lwwlllll(pLPD->fn[FUNC_OUTPUT],
- lP1, wP2, wP3,
- SEGPTR_GET(lP4),
+ lP1, wP2, wP3, lP4,
lP5, lP6, lP7,
(SEGPTR) NULL);
}
else
{
RECT *pRect;
- lP8 = SEGPTR_NEW(RECT16);
+ RECT16 r16;
+ lP8 = MapLS(&r16);
for(pRect = (RECT *)clip->Buffer;
pRect < (RECT *)clip->Buffer + clip->rdh.nCount; pRect++)
{
- CONV_RECT32TO16( pRect, lP8 );
+ CONV_RECT32TO16( pRect, &r16 );
- TRACE("rect = %d,%d - %d,%d\n",
- lP8->left, lP8->top, lP8->right, lP8->bottom );
+ TRACE("rect = %d,%d - %d,%d\n", r16.left, r16.top, r16.right, r16.bottom );
wRet = PRTDRV_CallTo16_word_lwwlllll(pLPD->fn[FUNC_OUTPUT],
- lP1, wP2, wP3,
- SEGPTR_GET(lP4),
- lP5, lP6, lP7,
- SEGPTR_GET(lP8));
+ lP1, wP2, wP3, lP4,
+ lP5, lP6, lP7, lP8);
}
- SEGPTR_FREE(lP8);
+ UnMapLS(lP8);
}
HeapFree( GetProcessHeap(), 0, clip );
}
else
{
wRet = PRTDRV_CallTo16_word_lwwlllll(pLPD->fn[FUNC_OUTPUT],
- lP1, wP2, wP3,
- SEGPTR_GET(lP4),
+ lP1, wP2, wP3, lP4,
lP5, lP6, lP7, (SEGPTR) NULL);
}
- SEGPTR_FREE(lP4);
+ UnMapLS( lP4 );
+ UnMapLS( lP5 );
+ UnMapLS( lP6 );
}
TRACE("PRTDRV_Output return %d\n", wRet);
return wRet;
@@ -489,8 +470,6 @@
{
LONG lP1, lP3, lP4, lP5;
WORD wP2;
- LPBYTE lpBuf = NULL;
- unsigned int nSize;
if (pLPD->fn[FUNC_REALIZEOBJECT] == NULL)
{
@@ -500,51 +479,15 @@
lP1 = lpDestDev;
wP2 = wStyle;
-
- switch ((INT16)wStyle)
- {
- case DRVOBJ_BRUSH:
- nSize = sizeof (LOGBRUSH16);
- break;
- case DRVOBJ_FONT:
- nSize = sizeof(LOGFONT16);
- break;
- case DRVOBJ_PEN:
- nSize = sizeof(LOGPEN16);
- break;
-
- case -DRVOBJ_BRUSH:
- case -DRVOBJ_FONT:
- case -DRVOBJ_PEN:
- nSize = -1;
- break;
-
- case DRVOBJ_PBITMAP:
- default:
- WARN("Object type %d not supported\n", wStyle);
- nSize = 0;
-
- }
-
- if(nSize != -1)
- {
- lpBuf = SEGPTR_ALLOC(nSize);
- memcpy(lpBuf, lpInObj, nSize);
- lP3 = SEGPTR_GET(lpBuf);
- }
- else
- lP3 = SEGPTR_GET( lpInObj );
-
- lP4 = SEGPTR_GET( lpOutObj );
-
+ lP3 = MapLS( lpInObj );
+ lP4 = MapLS( lpOutObj );
lP5 = lpTextXForm;
TRACE("Calling Realize %08lx %04x %08lx %08lx %08lx\n",
lP1, wP2, lP3, lP4, lP5);
dwRet = PRTDRV_CallTo16_long_lwlll(pLPD->fn[FUNC_REALIZEOBJECT],
lP1, wP2, lP3, lP4, lP5);
- if(lpBuf)
- SEGPTR_FREE(lpBuf);
-
+ UnMapLS( lP3 );
+ UnMapLS( lP4 );
}
TRACE("return %x\n", dwRet);
return dwRet;
@@ -572,7 +515,7 @@
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
{
LONG lP1,lP6, lP11, lP12, lP13;
- LPRECT16 lP14;
+ SEGPTR lP14;
WORD wP2, wP3, wP4, wP5, wP7, wP8, wP9, wP10;
if (pLPD->fn[FUNC_STRETCHBLT] == NULL)
@@ -591,22 +534,15 @@
wP9 = wSrcXext;
wP10 = wSrcYext;
lP11 = Rop3;
- lP12 = SEGPTR_GET( lpBrush );
+ lP12 = MapLS( lpBrush );
lP13 = lpDrawMode;
- if (lpClipRect != NULL)
- {
- lP14 = SEGPTR_NEW(RECT16);
- memcpy(lP14,lpClipRect,sizeof(RECT16));
-
- }
- else
- lP14 = 0L;
+ lP14 = MapLS(lpClipRect);
wRet = PRTDRV_CallTo16_word_lwwwwlwwwwllll(pLPD->fn[FUNC_STRETCHBLT],
lP1, wP2, wP3, wP4, wP5,
lP6, wP7, wP8, wP9, wP10,
- lP11, lP12, lP13,
- SEGPTR_GET(lP14));
- SEGPTR_FREE(lP14);
+ lP11, lP12, lP13, lP14);
+ UnMapLS(lP12);
+ UnMapLS(lP14);
TRACE("Called StretchBlt ret %d\n",wRet);
}
return wRet;
@@ -625,12 +561,9 @@
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
{
- LONG lP1, lP7, lP8, lP9, lP10;
- LPSTR lP5;
- LPRECT16 lP4,lP11;
+ LONG lP1, lP4, lP5, lP7, lP8, lP9, lP10, lP11;
WORD wP2, wP3, wP12;
INT16 iP6;
- unsigned int nSize = -1;
if (pLPD->fn[FUNC_EXTTEXTOUT] == NULL)
{
@@ -641,56 +574,30 @@
lP1 = lpDestDev;
wP2 = wDestXOrg;
wP3 = wDestYOrg;
-
- if (lpClipRect != NULL) {
- lP4 = SEGPTR_NEW(RECT16);
- TRACE("Adding lpClipRect\n");
- memcpy(lP4,lpClipRect,sizeof(RECT16));
- } else
- lP4 = 0L;
-
- if (lpString != NULL) {
- nSize = strlen(lpString);
- if (nSize>abs(wCount))
- nSize = abs(wCount);
- lP5 = SEGPTR_ALLOC(nSize+1);
- TRACE("Adding lpString (nSize is %d)\n",nSize);
- memcpy(lP5,lpString,nSize);
- *((char *)lP5 + nSize) = '\0';
- } else
- lP5 = 0L;
-
+ lP4 = MapLS( lpClipRect );
+ lP5 = MapLS( lpString );
iP6 = wCount;
/* This should be realized by the driver, so in 16bit data area */
- lP7 = SEGPTR_GET( lpFontInfo );
+ lP7 = MapLS( lpFontInfo );
lP8 = lpDrawMode;
lP9 = lpTextXForm;
if (lpCharWidths != NULL)
FIXME("Char widths not supported\n");
lP10 = 0;
-
- if (lpOpaqueRect != NULL) {
- lP11 = SEGPTR_NEW(RECT16);
- TRACE("Adding lpOpaqueRect\n");
- memcpy(lP11,lpOpaqueRect,sizeof(RECT16));
- } else
- lP11 = 0L;
-
+ lP11 = MapLS( lpOpaqueRect );
wP12 = wOptions;
- TRACE("Calling ExtTextOut 0x%lx 0x%x 0x%x %p\n",
- lP1, wP2, wP3, lP4);
- TRACE("%*s 0x%x 0x%lx 0x%lx\n",
- nSize,lP5, iP6, lP7, lP8);
- TRACE("0x%lx 0x%lx %p 0x%x\n",
+ TRACE("Calling ExtTextOut 0x%lx 0x%x 0x%x 0x%lx\n", lP1, wP2, wP3, lP4);
+ TRACE("%s 0x%x 0x%lx 0x%lx\n", lpString, iP6, lP7, lP8);
+ TRACE("0x%lx 0x%lx 0x%lx 0x%x\n",
lP9, lP10, lP11, wP12);
- dwRet = PRTDRV_CallTo16_long_lwwllwlllllw(pLPD->fn[FUNC_EXTTEXTOUT],
- lP1, wP2, wP3,
- SEGPTR_GET(lP4),
- SEGPTR_GET(lP5), iP6, lP7,
- lP8, lP9, lP10,
- SEGPTR_GET(lP11), wP12);
+ dwRet = PRTDRV_CallTo16_long_lwwllwlllllw(pLPD->fn[FUNC_EXTTEXTOUT], lP1, wP2, wP3,
+ lP4, lP5, iP6, lP7, lP8, lP9, lP10, lP11, wP12);
+ UnMapLS( lP4 );
+ UnMapLS( lP5 );
+ UnMapLS( lP7 );
+ UnMapLS( lP11 );
}
TRACE("return %lx\n", dwRet);
return dwRet;
@@ -800,9 +707,8 @@
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
{
- LONG lP1, lP5, lP6, lP7;
- LPWORD lP2;
- WORD wP3, wP4, i;
+ LONG lP1, lP2, lP5, lP6, lP7;
+ WORD wP3, wP4;
if (pLPD->fn[FUNC_GETCHARWIDTH] == NULL)
{
@@ -811,21 +717,18 @@
}
lP1 = lpDestDev;
- lP2 = SEGPTR_ALLOC( (wLastChar - wFirstChar + 1) * sizeof(WORD) );
+ lP2 = MapLS( lpBuffer );
wP3 = wFirstChar;
wP4 = wLastChar;
- lP5 = SEGPTR_GET( lpFontInfo );
+ lP5 = MapLS( lpFontInfo );
lP6 = lpDrawMode;
lP7 = lpTextXForm;
wRet = PRTDRV_CallTo16_word_llwwlll(pLPD->fn[FUNC_GETCHARWIDTH],
- lP1, SEGPTR_GET(lP2), wP3,
- wP4, lP5, lP6, lP7 );
+ lP1, lP2, wP3, wP4, lP5, lP6, lP7 );
- for(i = 0; i <= wLastChar - wFirstChar; i++)
- lpBuffer[i] = (INT) lP2[i];
-
- SEGPTR_FREE(lP2);
+ UnMapLS( lP2 );
+ UnMapLS( lP5 );
}
return wRet;
}
@@ -840,10 +743,8 @@
DWORD dwMode)
{
LOADED_PRINTER_DRIVER *pLPD = LoadPrinterDriver(lpszDriver);
- LPDEVMODEA lpSegOut = NULL, lpSegIn = NULL;
- LPSTR lpSegDevice, lpSegPort, lpSegProfile;
+ SEGPTR lpSegOut, lpSegIn, lpSegDevice, lpSegPort, lpSegProfile;
INT16 wRet;
- WORD wOutSize = 0, wInSize = 0;
if(!pLPD) return -1;
@@ -851,42 +752,19 @@
WARN("No EXTDEVICEMODE\n");
return -1;
}
- lpSegDevice = SEGPTR_STRDUP(lpszDevice);
- lpSegPort = SEGPTR_STRDUP(lpszPort);
- lpSegProfile = SEGPTR_STRDUP(lpszProfile);
- if(lpdmOutput) {
- /* We don't know how big this will be so we call the driver's
- ExtDeviceMode to find out */
- wOutSize = PRTDRV_CallTo16_word_wwlllllw(
- pLPD->fn[FUNC_EXTDEVICEMODE], hwnd, pLPD->hInst, 0,
- SEGPTR_GET(lpSegDevice), SEGPTR_GET(lpSegPort), 0,
- SEGPTR_GET(lpSegProfile), 0 );
- lpSegOut = SEGPTR_ALLOC(wOutSize);
- }
- if(lpdmInput) {
- /* This time we get the information from the fields */
- wInSize = lpdmInput->dmSize + lpdmInput->dmDriverExtra;
- lpSegIn = SEGPTR_ALLOC(wInSize);
- memcpy(lpSegIn, lpdmInput, wInSize);
- }
- wRet = PRTDRV_CallTo16_word_wwlllllw( pLPD->fn[FUNC_EXTDEVICEMODE],
- hwnd, pLPD->hInst,
- SEGPTR_GET(lpSegOut),
- SEGPTR_GET(lpSegDevice),
- SEGPTR_GET(lpSegPort),
- SEGPTR_GET(lpSegIn),
- SEGPTR_GET(lpSegProfile),
- dwMode );
- if(lpSegOut) {
- memcpy(lpdmOutput, lpSegOut, wOutSize);
- SEGPTR_FREE(lpSegOut);
- }
- if(lpSegIn) {
- SEGPTR_FREE(lpSegIn);
- }
- SEGPTR_FREE(lpSegDevice);
- SEGPTR_FREE(lpSegPort);
- SEGPTR_FREE(lpSegProfile);
+ lpSegDevice = MapLS(lpszDevice);
+ lpSegPort = MapLS(lpszPort);
+ lpSegProfile = MapLS(lpszProfile);
+ lpSegOut = MapLS(lpdmOutput);
+ lpSegIn = MapLS(lpdmInput);
+ wRet = PRTDRV_CallTo16_word_wwlllllw( pLPD->fn[FUNC_EXTDEVICEMODE], hwnd, pLPD->hInst,
+ lpSegOut, lpSegDevice, lpSegPort, lpSegIn,
+ lpSegProfile, dwMode );
+ UnMapLS(lpSegOut);
+ UnMapLS(lpSegIn);
+ UnMapLS(lpSegDevice);
+ UnMapLS(lpSegPort);
+ UnMapLS(lpSegProfile);
return wRet;
}
@@ -902,10 +780,8 @@
LPSTR lpszOutput, LPDEVMODEA lpDevMode)
{
LOADED_PRINTER_DRIVER *pLPD = LoadPrinterDriver(lpszDriver);
- LPVOID lpSegdm = NULL, lpSegOut = NULL;
- LPSTR lpSegDevice, lpSegPort;
+ SEGPTR lpSegdm, lpSegOut, lpSegDevice, lpSegPort;
DWORD dwRet;
- INT OutputSize;
TRACE("%s,%s,%s,%d,%p,%p\n", lpszDriver, lpszDevice, lpszPort,
fwCapability, lpszOutput, lpDevMode);
@@ -916,107 +792,15 @@
WARN("No DEVICECAPABILITES\n");
return -1;
}
- lpSegDevice = SEGPTR_STRDUP(lpszDevice);
- lpSegPort = SEGPTR_STRDUP(lpszPort);
-
- if(lpDevMode) {
- lpSegdm = SEGPTR_ALLOC(lpDevMode->dmSize + lpDevMode->dmDriverExtra);
- memcpy(lpSegdm, lpDevMode, lpDevMode->dmSize +
- lpDevMode->dmDriverExtra);
- }
-
- dwRet = PRTDRV_CallTo16_long_llwll(
- pLPD->fn[FUNC_DEVICECAPABILITIES],
- SEGPTR_GET(lpSegDevice), SEGPTR_GET(lpSegPort),
- fwCapability, 0, SEGPTR_GET(lpSegdm) );
-
- if(dwRet == -1) return -1;
-
- switch(fwCapability) {
- case DC_BINADJUST:
- case DC_COLLATE:
- case DC_COLORDEVICE:
- case DC_COPIES:
- case DC_DRIVER:
- case DC_DUPLEX:
- case DC_EMF_COMPLIANT:
- case DC_EXTRA:
- case DC_FIELDS:
- case DC_MANUFACTURER:
- case DC_MAXEXTENT:
- case DC_MINEXTENT:
- case DC_MODEL:
- case DC_ORIENTATION:
- case DC_PRINTERMEM:
- case DC_PRINTRATEUNIT:
- case DC_SIZE:
- case DC_TRUETYPE:
- case DC_VERSION:
- OutputSize = 0;
- break;
-
- case DC_BINNAMES:
- OutputSize = 24 * dwRet;
- break;
-
- case DC_BINS:
- case DC_PAPERS:
- OutputSize = sizeof(WORD) * dwRet;
- break;
-
- case DC_DATATYPE_PRODUCED:
- OutputSize = dwRet;
- FIXME("%ld DataTypes supported. Don't know how long to make buffer!\n",
- dwRet);
- break;
-
- case DC_ENUMRESOLUTIONS:
- OutputSize = 2 * sizeof(LONG) * dwRet;
- break;
-
- case DC_FILEDEPENDENCIES:
- case DC_MEDIAREADY:
- case DC_PAPERNAMES:
- OutputSize = 64 * dwRet;
- break;
-
- case DC_NUP:
- OutputSize = sizeof(DWORD) * dwRet;
- break;
-
- case DC_PAPERSIZE:
- OutputSize = sizeof(POINT16) * dwRet;
- break;
-
- case DC_PERSONALITY:
- OutputSize = 32 * dwRet;
- break;
-
- default:
- FIXME("Unsupported capability %d\n", fwCapability);
- OutputSize = 0;
- break;
- }
-
- if(OutputSize && lpszOutput) {
- lpSegOut = SEGPTR_ALLOC(OutputSize);
- dwRet = PRTDRV_CallTo16_long_llwll(
- pLPD->fn[FUNC_DEVICECAPABILITIES],
- SEGPTR_GET(lpSegDevice),
- SEGPTR_GET(lpSegPort),
- fwCapability,
- SEGPTR_GET(lpSegOut),
- SEGPTR_GET(lpSegdm) );
- memcpy(lpszOutput, lpSegOut, OutputSize);
- SEGPTR_FREE(lpSegOut);
- }
-
- if(lpSegdm) {
- memcpy(lpDevMode, lpSegdm, lpDevMode->dmSize +
- lpDevMode->dmDriverExtra);
- SEGPTR_FREE(lpSegdm);
- }
- SEGPTR_FREE(lpSegDevice);
- SEGPTR_FREE(lpSegPort);
+ lpSegDevice = MapLS(lpszDevice);
+ lpSegPort = MapLS(lpszPort);
+ lpSegdm = MapLS(lpDevMode);
+ lpSegOut = MapLS(lpszOutput);
+ dwRet = PRTDRV_CallTo16_long_llwll( pLPD->fn[FUNC_DEVICECAPABILITIES],
+ lpSegDevice, lpSegPort, fwCapability, lpSegOut, lpSegdm );
+ UnMapLS(lpSegOut);
+ UnMapLS(lpSegdm);
+ UnMapLS(lpSegDevice);
+ UnMapLS(lpSegPort);
return dwRet;
}
diff --git a/loader/module.c b/loader/module.c
index c507a4c..b49e28b 100644
--- a/loader/module.c
+++ b/loader/module.c
@@ -804,13 +804,13 @@
{
args++;
arglen = strlen(args);
- cmdline = SEGPTR_ALLOC( 2 + arglen );
+ cmdline = HeapAlloc( GetProcessHeap(), 0, 2 + arglen );
cmdline[0] = (BYTE)arglen;
strcpy( cmdline + 1, args );
}
else
{
- cmdline = SEGPTR_ALLOC( 2 );
+ cmdline = HeapAlloc( GetProcessHeap(), 0, 2 );
cmdline[0] = cmdline[1] = 0;
}
@@ -819,22 +819,22 @@
if (SearchPathA( NULL, name, ".exe", sizeof(buffer), buffer, NULL ))
{
LOADPARAMS16 params;
- WORD *showCmd = SEGPTR_ALLOC( 2*sizeof(WORD) );
+ WORD showCmd[2];
showCmd[0] = 2;
showCmd[1] = nCmdShow;
params.hEnvironment = 0;
- params.cmdLine = SEGPTR_GET(cmdline);
- params.showCmd = SEGPTR_GET(showCmd);
+ params.cmdLine = MapLS( cmdline );
+ params.showCmd = MapLS( showCmd );
params.reserved = 0;
ret = LoadModule16( buffer, ¶ms );
-
- SEGPTR_FREE( showCmd );
- SEGPTR_FREE( cmdline );
+ UnMapLS( params.cmdLine );
+ UnMapLS( params.showCmd );
}
else ret = GetLastError();
+ HeapFree( GetProcessHeap(), 0, cmdline );
if (name != lpCmdLine) HeapFree( GetProcessHeap(), 0, name );
if (ret == 21) /* 32-bit module */
diff --git a/objects/font.c b/objects/font.c
index 3bbcea1..33120b6 100644
--- a/objects/font.c
+++ b/objects/font.c
@@ -10,8 +10,8 @@
#include <assert.h>
#include "winerror.h"
#include "winnls.h"
+#include "wine/unicode.h"
#include "font.h"
-#include "heap.h"
#include "options.h"
#include "debugtools.h"
#include "gdi.h"
@@ -694,31 +694,23 @@
if (enum_func)
{
- LPNEWTEXTMETRICEX16 lptm16 = SEGPTR_ALLOC( sizeof(NEWTEXTMETRICEX16) );
- if( lptm16 )
- {
- LPENUMLOGFONTEX16 lplf16 = SEGPTR_ALLOC( sizeof(ENUMLOGFONTEX16) );
- if( lplf16 )
- {
- fontEnum16 fe16;
- LOGFONTW lfW;
- FONT_LogFont16ToW(plf, &lfW);
+ NEWTEXTMETRICEX16 tm16;
+ ENUMLOGFONTEX16 lf16;
+ fontEnum16 fe16;
+ LOGFONTW lfW;
+ FONT_LogFont16ToW(plf, &lfW);
- fe16.lpLogFontParam = plf;
- fe16.lpEnumFunc = efproc;
- fe16.lpData = lParam;
-
- fe16.lpTextMetric = lptm16;
- fe16.lpLogFont = lplf16;
- fe16.segTextMetric = SEGPTR_GET(lptm16);
- fe16.segLogFont = SEGPTR_GET(lplf16);
+ fe16.lpLogFontParam = plf;
+ fe16.lpEnumFunc = efproc;
+ fe16.lpData = lParam;
+ fe16.lpTextMetric = &tm16;
+ fe16.lpLogFont = &lf16;
+ fe16.segTextMetric = MapLS( &tm16 );
+ fe16.segLogFont = MapLS( &lf16 );
- retVal = enum_func( hDC, &lfW, FONT_EnumInstance16,
- (LPARAM)&fe16 );
- SEGPTR_FREE(lplf16);
- }
- SEGPTR_FREE(lptm16);
- }
+ retVal = enum_func( hDC, &lfW, FONT_EnumInstance16, (LPARAM)&fe16 );
+ UnMapLS( fe16.segTextMetric );
+ UnMapLS( fe16.segLogFont );
}
return retVal;
}
diff --git a/objects/gdiobj.c b/objects/gdiobj.c
index bdea0f3..3cdbd33 100644
--- a/objects/gdiobj.c
+++ b/objects/gdiobj.c
@@ -19,7 +19,6 @@
#include "bitmap.h"
#include "brush.h"
#include "font.h"
-#include "heap.h"
#include "local.h"
#include "palette.h"
#include "pen.h"
@@ -873,8 +872,9 @@
};
INT16 i, retval = 0;
- LOGPEN16 *pen;
- LOGBRUSH16 *brush = NULL;
+ LOGPEN16 pen;
+ LOGBRUSH16 brush;
+ SEGPTR segptr;
TRACE("%04x %d %08lx %08lx\n",
hdc, nObjType, (DWORD)lpEnumFunc, lParam );
@@ -882,47 +882,44 @@
{
case OBJ_PEN:
/* Enumerate solid pens */
- if (!(pen = SEGPTR_NEW(LOGPEN16))) break;
+ segptr = MapLS( &pen );
for (i = 0; i < sizeof(solid_colors)/sizeof(solid_colors[0]); i++)
{
- pen->lopnStyle = PS_SOLID;
- pen->lopnWidth.x = 1;
- pen->lopnWidth.y = 0;
- pen->lopnColor = solid_colors[i];
- retval = GDI_CallTo16_word_ll( lpEnumFunc, SEGPTR_GET(pen), lParam );
- TRACE("solid pen %08lx, ret=%d\n",
- solid_colors[i], retval);
+ pen.lopnStyle = PS_SOLID;
+ pen.lopnWidth.x = 1;
+ pen.lopnWidth.y = 0;
+ pen.lopnColor = solid_colors[i];
+ retval = GDI_CallTo16_word_ll( lpEnumFunc, segptr, lParam );
+ TRACE("solid pen %08lx, ret=%d\n", solid_colors[i], retval);
if (!retval) break;
}
- SEGPTR_FREE(pen);
+ UnMapLS( segptr );
break;
case OBJ_BRUSH:
/* Enumerate solid brushes */
- if (!(brush = SEGPTR_NEW(LOGBRUSH16))) break;
+ segptr = MapLS( &brush );
for (i = 0; i < sizeof(solid_colors)/sizeof(solid_colors[0]); i++)
{
- brush->lbStyle = BS_SOLID;
- brush->lbColor = solid_colors[i];
- brush->lbHatch = 0;
- retval = GDI_CallTo16_word_ll( lpEnumFunc, SEGPTR_GET(brush), lParam );
- TRACE("solid brush %08lx, ret=%d\n",
- solid_colors[i], retval);
+ brush.lbStyle = BS_SOLID;
+ brush.lbColor = solid_colors[i];
+ brush.lbHatch = 0;
+ retval = GDI_CallTo16_word_ll( lpEnumFunc, segptr, lParam );
+ TRACE("solid brush %08lx, ret=%d\n", solid_colors[i], retval);
if (!retval) break;
}
/* Now enumerate hatched brushes */
if (retval) for (i = HS_HORIZONTAL; i <= HS_DIAGCROSS; i++)
{
- brush->lbStyle = BS_HATCHED;
- brush->lbColor = RGB(0,0,0);
- brush->lbHatch = i;
- retval = GDI_CallTo16_word_ll( lpEnumFunc, SEGPTR_GET(brush), lParam );
- TRACE("hatched brush %d, ret=%d\n",
- i, retval);
+ brush.lbStyle = BS_HATCHED;
+ brush.lbColor = RGB(0,0,0);
+ brush.lbHatch = i;
+ retval = GDI_CallTo16_word_ll( lpEnumFunc, segptr, lParam );
+ TRACE("hatched brush %d, ret=%d\n", i, retval);
if (!retval) break;
}
- SEGPTR_FREE(brush);
+ UnMapLS( segptr );
break;
default:
diff --git a/scheduler/syslevel.c b/scheduler/syslevel.c
index 4647e19..9d849e8 100644
--- a/scheduler/syslevel.c
+++ b/scheduler/syslevel.c
@@ -8,7 +8,6 @@
#include <sys/types.h>
#include "ntddk.h"
#include "syslevel.h"
-#include "heap.h"
#include "stackframe.h"
#include "debugtools.h"
@@ -33,12 +32,13 @@
*/
SEGPTR WINAPI GetpWin16Lock16(void)
{
+ static SYSLEVEL *w16Mutex;
static SEGPTR segpWin16Mutex;
+
if (!segpWin16Mutex)
{
- SYSLEVEL **w16Mutex = SEGPTR_ALLOC(sizeof(SYSLEVEL *));
- *w16Mutex = &Win16Mutex;
- segpWin16Mutex = SEGPTR_GET(w16Mutex);
+ w16Mutex = &Win16Mutex;
+ segpWin16Mutex = MapLS( &w16Mutex );
}
return segpWin16Mutex;
}
diff --git a/windows/class.c b/windows/class.c
index ddc7cb6..8e10d0c 100644
--- a/windows/class.c
+++ b/windows/class.c
@@ -24,7 +24,6 @@
#include "wingdi.h"
#include "wine/winuser16.h"
#include "wine/unicode.h"
-#include "heap.h"
#include "win.h"
#include "user.h"
#include "controls.h"
@@ -45,6 +44,7 @@
INT cbClsExtra; /* Class extra bytes */
INT cbWndExtra; /* Window extra bytes */
LPWSTR menuName; /* Default menu name (Unicode followed by ASCII) */
+ SEGPTR segMenuName; /* Default menu name as SEGPTR */
struct tagDCE *dce; /* Class DCE (if CS_CLASSDC) */
HINSTANCE hInstance; /* Module that created the task */
HICON hIcon; /* Default icon */
@@ -163,6 +163,20 @@
/***********************************************************************
+ * CLASS_GetMenuName16
+ *
+ * Get the menu name as a SEGPTR.
+ */
+inline static SEGPTR CLASS_GetMenuName16( CLASS *classPtr )
+{
+ if (!HIWORD(classPtr->menuName)) return (SEGPTR)classPtr->menuName;
+ if (!classPtr->segMenuName)
+ classPtr->segMenuName = MapLS( CLASS_GetMenuNameA(classPtr) );
+ return classPtr->segMenuName;
+}
+
+
+/***********************************************************************
* CLASS_GetMenuNameW
*
* Get the menu name as a Unicode string.
@@ -180,12 +194,14 @@
*/
static void CLASS_SetMenuNameA( CLASS *classPtr, LPCSTR name )
{
- if (HIWORD(classPtr->menuName)) SEGPTR_FREE( classPtr->menuName );
+ UnMapLS( classPtr->segMenuName );
+ classPtr->segMenuName = 0;
+ if (HIWORD(classPtr->menuName)) HeapFree( GetProcessHeap(), 0, classPtr->menuName );
if (HIWORD(name))
{
DWORD lenA = strlen(name) + 1;
DWORD lenW = MultiByteToWideChar( CP_ACP, 0, name, lenA, NULL, 0 );
- classPtr->menuName = SEGPTR_ALLOC( lenA + lenW*sizeof(WCHAR) );
+ classPtr->menuName = HeapAlloc( GetProcessHeap(), 0, lenA + lenW*sizeof(WCHAR) );
MultiByteToWideChar( CP_ACP, 0, name, lenA, classPtr->menuName, lenW );
memcpy( classPtr->menuName + lenW, name, lenA );
}
@@ -200,12 +216,14 @@
*/
static void CLASS_SetMenuNameW( CLASS *classPtr, LPCWSTR name )
{
- if (HIWORD(classPtr->menuName)) SEGPTR_FREE( classPtr->menuName );
+ UnMapLS( classPtr->segMenuName );
+ classPtr->segMenuName = 0;
+ if (HIWORD(classPtr->menuName)) HeapFree( GetProcessHeap(), 0, classPtr->menuName );
if (HIWORD(name))
{
DWORD lenW = strlenW(name) + 1;
DWORD lenA = WideCharToMultiByte( CP_ACP, 0, name, lenW, NULL, 0, NULL, NULL );
- classPtr->menuName = SEGPTR_ALLOC( lenA + lenW*sizeof(WCHAR) );
+ classPtr->menuName = HeapAlloc( GetProcessHeap(), 0, lenA + lenW*sizeof(WCHAR) );
memcpy( classPtr->menuName, name, lenW*sizeof(WCHAR) );
WideCharToMultiByte( CP_ACP, 0, name, lenW,
(char *)(classPtr->menuName + lenW), lenA, NULL, NULL );
@@ -245,6 +263,7 @@
GlobalDeleteAtom( classPtr->atomName );
WINPROC_FreeProc( classPtr->winprocA, WIN_PROC_CLASS );
WINPROC_FreeProc( classPtr->winprocW, WIN_PROC_CLASS );
+ UnMapLS( classPtr->segMenuName );
HeapFree( GetProcessHeap(), 0, classPtr->menuName );
HeapFree( GetProcessHeap(), 0, classPtr );
return TRUE;
@@ -789,8 +808,10 @@
release_class_ptr( class );
return ret;
case GCL_MENUNAME:
- ret = GetClassLongA( hwnd, offset );
- return (LONG)SEGPTR_GET( (void *)ret );
+ if (!(class = get_class_ptr( hwnd, FALSE ))) return 0;
+ ret = (LONG)CLASS_GetMenuName16( class );
+ release_class_ptr( class );
+ return ret;
default:
return GetClassLongA( hwnd, offset );
}
@@ -1094,9 +1115,7 @@
wc->hCursor = classPtr->hCursor;
wc->hbrBackground = classPtr->hbrBackground;
wc->lpszClassName = name;
- wc->lpszMenuName = (SEGPTR)CLASS_GetMenuNameA( classPtr );
- if (HIWORD(wc->lpszMenuName)) /* Make it a SEGPTR */
- wc->lpszMenuName = SEGPTR_GET( (LPSTR)wc->lpszMenuName );
+ wc->lpszMenuName = CLASS_GetMenuName16( classPtr );
return TRUE;
}
@@ -1206,10 +1225,8 @@
wc->hCursor = classPtr->hCursor;
wc->hbrBackground = classPtr->hbrBackground;
wc->lpszClassName = (SEGPTR)0;
- wc->lpszMenuName = (SEGPTR)CLASS_GetMenuNameA( classPtr );
- if (HIWORD(wc->lpszMenuName)) /* Make it a SEGPTR */
- wc->lpszMenuName = SEGPTR_GET( (LPSTR)wc->lpszMenuName );
- wc->lpszClassName = name;
+ wc->lpszMenuName = CLASS_GetMenuName16( classPtr );
+ wc->lpszClassName = name;
/* We must return the atom of the class here instead of just TRUE. */
return atom;
diff --git a/windows/dialog.c b/windows/dialog.c
index d86b66b..f0d77b6 100644
--- a/windows/dialog.c
+++ b/windows/dialog.c
@@ -42,10 +42,10 @@
INT16 y;
INT16 cx;
INT16 cy;
- UINT id;
+ UINT id;
LPCSTR className;
LPCSTR windowName;
- LPVOID data;
+ LPCVOID data;
} DLG_CONTROL_INFO;
/* Dialog template */
@@ -296,26 +296,21 @@
p += strlen(p) + 1;
}
- if (*p)
- {
- /* Additional CTLDATA available for this control. */
- info->data = SEGPTR_ALLOC(*p);
- memcpy( info->data, p + 1, *p );
- }
+ if (*p) info->data = p + 1;
else info->data = NULL;
p += *p + 1;
if(int_id)
- TRACE(" %s %04x %d, %d, %d, %d, %d, %08lx, %08lx\n",
+ TRACE(" %s %04x %d, %d, %d, %d, %d, %08lx, %p\n",
info->className, LOWORD(info->windowName),
info->id, info->x, info->y, info->cx, info->cy,
- info->style, (DWORD)SEGPTR_GET(info->data) );
+ info->style, info->data );
else
- TRACE(" %s '%s' %d, %d, %d, %d, %d, %08lx, %08lx\n",
+ TRACE(" %s '%s' %d, %d, %d, %d, %d, %08lx, %p\n",
info->className, info->windowName,
info->id, info->x, info->y, info->cx, info->cy,
- info->style, (DWORD)SEGPTR_GET(info->data) );
+ info->style, info->data );
return p;
}
@@ -414,7 +409,7 @@
DPRINTF("\n");
TRACE(" END\n" );
}
- info->data = (LPVOID)(p + 1);
+ info->data = p + 1;
p += GET_WORD(p) / sizeof(WORD);
}
else info->data = NULL;
@@ -444,6 +439,8 @@
if (!win32)
{
HINSTANCE16 instance;
+ SEGPTR segptr;
+
template = DIALOG_GetControl16( template, &info );
if (HIWORD(info.className) && !strcmp( info.className, "EDIT") &&
!(GetWindowLongW( hwnd, GWL_STYLE ) & DS_LOCALEDIT))
@@ -462,6 +459,7 @@
}
else instance = (HINSTANCE16)hInst;
+ segptr = MapLS( info.data );
hwndCtrl = WIN_Handle32( CreateWindowEx16( info.exStyle | WS_EX_NOPARENTNOTIFY,
info.className, info.windowName,
info.style | WS_CHILD,
@@ -470,9 +468,8 @@
MulDiv(info.cx, dlgInfo->xBaseUnit, 4),
MulDiv(info.cy, dlgInfo->yBaseUnit, 8),
WIN_Handle16(hwnd), (HMENU16)info.id,
- instance, (LPVOID)SEGPTR_GET(info.data) ));
-
- if (info.data) SEGPTR_FREE(info.data);
+ instance, (LPVOID)segptr ));
+ UnMapLS( segptr );
}
else
{
@@ -493,7 +490,7 @@
MulDiv(info.cx, dlgInfo->xBaseUnit, 4),
MulDiv(info.cy, dlgInfo->yBaseUnit, 8),
hwnd, (HMENU)info.id,
- hInst, info.data );
+ hInst, (LPVOID)info.data );
}
if (!hwndCtrl) return FALSE;
diff --git a/windows/mdi.c b/windows/mdi.c
index e6469a8..db2137e 100644
--- a/windows/mdi.c
+++ b/windows/mdi.c
@@ -544,24 +544,21 @@
}
else
{
- MDICREATESTRUCT16 *cs16;
- LPSTR title, cls;
+ MDICREATESTRUCT16 cs16;
+ SEGPTR title, cls, seg_cs16;
WIN_ReleaseWndPtr( wndParent );
- cs16 = SEGPTR_NEW(MDICREATESTRUCT16);
- STRUCT32_MDICREATESTRUCT32Ato16( cs, cs16 );
- title = SEGPTR_STRDUP( cs->szTitle );
- cls = SEGPTR_STRDUP( cs->szClass );
- cs16->szTitle = SEGPTR_GET(title);
- cs16->szClass = SEGPTR_GET(cls);
-
+ STRUCT32_MDICREATESTRUCT32Ato16( cs, &cs16 );
+ cs16.szTitle = title = MapLS( cs->szTitle );
+ cs16.szClass = cls = MapLS( cs->szClass );
+ seg_cs16 = MapLS( &cs16 );
hwnd = WIN_Handle32( CreateWindow16( cs->szClass, cs->szTitle, style,
- cs16->x, cs16->y, cs16->cx, cs16->cy,
+ cs16.x, cs16.y, cs16.cx, cs16.cy,
WIN_Handle16(parent), (HMENU)wIDmenu,
- cs16->hOwner, (LPVOID)SEGPTR_GET(cs16) ));
- SEGPTR_FREE( title );
- SEGPTR_FREE( cls );
- SEGPTR_FREE( cs16 );
+ cs16.hOwner, (LPVOID)seg_cs16 ));
+ UnMapLS( seg_cs16 );
+ UnMapLS( title );
+ UnMapLS( cls );
}
/* MDI windows are WS_CHILD so they won't be activated by CreateWindow */