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 */