winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
August 2006
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
5 participants
746 discussions
Start a n
N
ew thread
H. Verbeet : d3d8: Improve shader handle management.
by Alexandre Julliard
28 Aug '06
28 Aug '06
Module: wine Branch: master Commit: 4a48e38e7da34bb5834f89a91a51b3e5d5b76d86 URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=4a48e38e7da34bb5834f89a…
Author: H. Verbeet <hverbeet(a)gmail.com> Date: Sun Aug 27 22:07:09 2006 +0200 d3d8: Improve shader handle management. --- dlls/d3d8/d3d8_private.h | 12 ++++++- dlls/d3d8/device.c | 80 ++++++++++++++++++++++++++++------------------ dlls/d3d8/directx.c | 2 + 3 files changed, 61 insertions(+), 33 deletions(-) diff --git a/dlls/d3d8/d3d8_private.h b/dlls/d3d8/d3d8_private.h index 6c8a519..b3af102 100644 --- a/dlls/d3d8/d3d8_private.h +++ b/dlls/d3d8/d3d8_private.h @@ -37,7 +37,7 @@ #include "ddraw.h" #include "wine/wined3d_interface.h" /* Device caps */ -#define MAX_SHADERS 64 +#define INITIAL_SHADER_HANDLE_TABLE_SIZE 64 /* CreateVertexShader can return > 0xFFFF */ #define VS_HIGHESTFIXEDFXF 0xF0000000 @@ -162,6 +162,9 @@ extern const IDirect3DDevice8Vtbl Direct /***************************************************************************** * IDirect3DDevice8 implementation structure */ + +typedef void * shader_handle; + struct IDirect3DDevice8Impl { /* IUnknown fields */ @@ -169,7 +172,11 @@ struct IDirect3DDevice8Impl LONG ref; /* But what about baseVertexIndex in state blocks? hmm... it may be a better idea to pass this to wined3d */ IWineD3DDevice *WineD3DDevice; - IDirect3DVertexShader8Impl *vShaders[MAX_SHADERS]; + DWORD shader_handle_table_size; + DWORD allocated_shader_handles; + shader_handle *shader_handles; + shader_handle *free_shader_handles; + /* FIXME: Move *baseVertexIndex somewhere sensible like wined3d */ UINT baseVertexIndex; }; @@ -531,6 +538,7 @@ struct IDirect3DVertexShader8Impl { const IDirect3DVertexShader8Vtbl *lpVtbl; LONG ref; + shader_handle *handle; IWineD3DVertexShader *wineD3DVertexShader; }; diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index 1d12290..6997df7 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -36,6 +36,31 @@ #include "d3d8_private.h" WINE_DEFAULT_DEBUG_CHANNEL(d3d8); +/* Shader handle functions */ +static shader_handle *alloc_shader_handle(IDirect3DDevice8Impl *This) { + if (This->free_shader_handles) { + /* Use a free handle */ + shader_handle *handle = This->free_shader_handles; + This->free_shader_handles = *handle; + return handle; + } + if (!(This->allocated_shader_handles < This->shader_handle_table_size)) { + /* Grow the table */ + DWORD new_size = This->shader_handle_table_size + (This->shader_handle_table_size >> 1); + shader_handle *new_handles = HeapReAlloc(GetProcessHeap(), 0, This->shader_handles, new_size * sizeof(shader_handle)); + if (!new_handles) return NULL; + This->shader_handles = new_handles; + This->shader_handle_table_size = new_size; + } + + return &This->shader_handles[This->allocated_shader_handles++]; +} + +static void free_shader_handle(IDirect3DDevice8Impl *This, shader_handle *handle) { + *handle = This->free_shader_handles; + This->free_shader_handles = handle; +} + /* IDirect3D IUnknown parts follow: */ static HRESULT WINAPI IDirect3DDevice8Impl_QueryInterface(LPDIRECT3DDEVICE8 iface,REFIID riid,LPVOID *ppobj) { @@ -1082,17 +1107,18 @@ static HRESULT WINAPI IDirect3DDevice8Im *ppShader = 0; } else { /* TODO: Store the VS declarations locally so that they can be derefferenced with a value higher than VS_HIGHESTFIXEDFXF */ - DWORD i = 0; - while(This->vShaders[i] != NULL && i < MAX_SHADERS) ++i; - if (MAX_SHADERS == i) { - FIXME("(%p) : Number of shaders exceeds the maximum number of possible shaders\n", This); + shader_handle *handle = alloc_shader_handle(This); + if (!handle) { + ERR("Failed to allocate shader handle\n"); + IDirect3DVertexShader8_Release((IUnknown *)object); hrc = E_OUTOFMEMORY; } else { - This->vShaders[i] = object; - *ppShader = i + VS_HIGHESTFIXEDFXF + 1; + object->handle = handle; + *handle = object; + *ppShader = (handle - This->shader_handles) + VS_HIGHESTFIXEDFXF + 1; } } - TRACE("(%p) : returning %p\n", This, object); + TRACE("(%p) : returning %p (handle %#lx)\n", This, object, *ppShader); return hrc; } @@ -1110,11 +1136,11 @@ static HRESULT WINAPI IDirect3DDevice8Im IWineD3DDevice_SetVertexShader(This->WineD3DDevice, NULL); } else { TRACE("Setting shader\n"); - if (MAX_SHADERS <= pShader - (VS_HIGHESTFIXEDFXF + 1)) { + if (This->allocated_shader_handles <= pShader - (VS_HIGHESTFIXEDFXF + 1)) { FIXME("(%p) : Number of shaders exceeds the maximum number of possible shaders\n", This); hrc = D3DERR_INVALIDCALL; } else { - IDirect3DVertexShader8Impl *shader = This->vShaders[pShader - (VS_HIGHESTFIXEDFXF + 1)]; + IDirect3DVertexShader8Impl *shader = This->shader_handles[pShader - (VS_HIGHESTFIXEDFXF + 1)]; hrc = IWineD3DDevice_SetVertexShader(This->WineD3DDevice, 0 == shader ? NULL : shader->wineD3DVertexShader); } } @@ -1132,16 +1158,10 @@ static HRESULT WINAPI IDirect3DDevice8Im hrc = IWineD3DDevice_GetVertexShader(This->WineD3DDevice, &pShader); if (D3D_OK == hrc) { if(0 != pShader) { - DWORD i = 0; - hrc = IWineD3DVertexShader_GetParent(pShader, (IUnknown **)ppShader); + IDirect3DVertexShader8Impl *d3d8_shader; + hrc = IWineD3DVertexShader_GetParent(pShader, (IUnknown **)&d3d8_shader); IWineD3DVertexShader_Release(pShader); - while(This->vShaders[i] != (IDirect3DVertexShader8Impl *)ppShader && i < MAX_SHADERS) ++i; - if (i < MAX_SHADERS) { - *ppShader = i + VS_HIGHESTFIXEDFXF + 1; - } else { - WARN("(%p) : Couldn't find math for shader %p in d3d7 shadres list\n", This, (IDirect3DVertexShader8Impl *)ppShader); - *ppShader = 0; - } + *ppShader = (d3d8_shader->handle - This->shader_handles) + (VS_HIGHESTFIXEDFXF + 1); } else { WARN("(%p) : The shader has been set to NULL\n", This); @@ -1152,29 +1172,27 @@ static HRESULT WINAPI IDirect3DDevice8Im } else { WARN("(%p) : Call to IWineD3DDevice_GetVertexShader failed %lu (device %p)\n", This, hrc, This->WineD3DDevice); } - TRACE("(%p) : returning %p\n", This, (IDirect3DVertexShader8 *)*ppShader); + TRACE("(%p) : returning %#lx\n", This, *ppShader); return hrc; } static HRESULT WINAPI IDirect3DDevice8Impl_DeleteVertexShader(LPDIRECT3DDEVICE8 iface, DWORD pShader) { IDirect3DDevice8Impl *This = (IDirect3DDevice8Impl *)iface; - HRESULT hrc = D3D_OK; - TRACE("(%p) Relay\n", This); - if (pShader <= VS_HIGHESTFIXEDFXF) { - WARN("(%p) : Caller passed a shader below the value of VS_HIGHESTFIXEDFXF\n", This); - hrc = D3DERR_INVALIDCALL; - } else if (MAX_SHADERS <= pShader - (VS_HIGHESTFIXEDFXF + 1)) { - FIXME("(%p) : Caller passed a shader greater than the maximum number of shaders\n", This); - hrc = D3DERR_INVALIDCALL; + + TRACE("(%p) : pShader %#lx\n", This, pShader); + + if (pShader <= VS_HIGHESTFIXEDFXF || This->allocated_shader_handles <= pShader - (VS_HIGHESTFIXEDFXF + 1)) { + ERR("(%p) : Trying to delete an invalid handle\n", This); + return D3DERR_INVALIDCALL; } else { - IDirect3DVertexShader8Impl *shader = This->vShaders[pShader - (VS_HIGHESTFIXEDFXF + 1)]; + shader_handle *handle = &This->shader_handles[pShader - (VS_HIGHESTFIXEDFXF + 1)]; + IDirect3DVertexShader8Impl *shader = *handle; while(IUnknown_Release((IUnknown *)shader)); - This->vShaders[pShader - (VS_HIGHESTFIXEDFXF + 1)] = NULL; - hrc = D3D_OK; + free_shader_handle(This, handle); } - return hrc; + return D3D_OK; } static HRESULT WINAPI IDirect3DDevice8Impl_SetVertexShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register, CONST void* pConstantData, DWORD ConstantCount) { diff --git a/dlls/d3d8/directx.c b/dlls/d3d8/directx.c index be4f8c9..c5e7094 100644 --- a/dlls/d3d8/directx.c +++ b/dlls/d3d8/directx.c @@ -311,6 +311,8 @@ static HRESULT WINAPI IDirect3D8Impl_Cre object->lpVtbl = &Direct3DDevice8_Vtbl; object->ref = 1; + object->shader_handles = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, INITIAL_SHADER_HANDLE_TABLE_SIZE * sizeof(shader_handle)); + object->shader_handle_table_size = INITIAL_SHADER_HANDLE_TABLE_SIZE; *ppReturnedDeviceInterface = (IDirect3DDevice8 *)object; /* Allocate an associated WineD3DDevice object */
1
0
0
0
Ivan Gyurdiev : wined3d: Add support for A16B16G16R16F and A32B32G32R32F texture formats.
by Alexandre Julliard
28 Aug '06
28 Aug '06
Module: wine Branch: master Commit: bda6d092a53b05ef778623f4786f940e3f17b965 URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=bda6d092a53b05ef778623f…
Author: Ivan Gyurdiev <ivg231(a)gmail.com> Date: Sat Aug 26 22:34:03 2006 -0400 wined3d: Add support for A16B16G16R16F and A32B32G32R32F texture formats. --- dlls/wined3d/directx.c | 23 +++++++++++++++++++++-- dlls/wined3d/utils.c | 4 ++-- include/wine/wined3d_gl.h | 13 +++++++++++++ 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index a7d3e1a..c413175 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -576,6 +576,12 @@ #undef USE_GL_FUNC } else if (strcmp(ThisExtn, "GL_ARB_texture_env_dot3") == 0) { TRACE_(d3d_caps)(" FOUND: ARB Dot3 support\n"); gl_info->supported[ARB_TEXTURE_ENV_DOT3] = TRUE; + } else if (strcmp(ThisExtn, "GL_ARB_texture_float") == 0) { + TRACE_(d3d_caps)(" FOUND: ARB Float texture support\n"); + gl_info->supported[ARB_TEXTURE_FLOAT] = TRUE; + } else if (strcmp(ThisExtn, "GL_ARB_half_float_pixel") == 0) { + TRACE_(d3d_caps)(" FOUND: ARB Half-float pixel support\n"); + gl_info->supported[ARB_HALF_FLOAT_PIXEL] = TRUE; } else if (strcmp(ThisExtn, "GL_ARB_texture_border_clamp") == 0) { TRACE_(d3d_caps)(" FOUND: ARB Texture border clamp support\n"); gl_info->supported[ARB_TEXTURE_BORDER_CLAMP] = TRUE; @@ -1639,6 +1645,21 @@ static HRESULT WINAPI IWineD3DImpl_Check } } + if (GL_SUPPORT(ARB_TEXTURE_FLOAT)) { + + BOOL half_pixel_support = GL_SUPPORT(ARB_HALF_FLOAT_PIXEL); + + switch (CheckFormat) { + case D3DFMT_A16B16G16R16F: + if (!half_pixel_support) break; + case D3DFMT_A32B32G32R32F: + TRACE_(d3d_caps)("[OK]\n"); + return WINED3D_OK; + default: + break; /* Avoid compiler warnings */ + } + } + /* This format is nothing special and it is supported perfectly. * However, ati and nvidia driver on windows do not mark this format * supported(tested with the dxCapsViewer) and pretending to @@ -1729,10 +1750,8 @@ static HRESULT WINAPI IWineD3DImpl_Check */ case WINED3DFMT_R16F: case WINED3DFMT_G16R16F: - case WINED3DFMT_A16B16G16R16F: case WINED3DFMT_R32F: case WINED3DFMT_G32R32F: - case WINED3DFMT_A32B32G32R32F: case WINED3DFMT_CxV8U8: TRACE_(d3d_caps)("[FAILED]\n"); /* Enable when implemented */ return WINED3DERR_NOTAVAILABLE; diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index 48b18bd..372fdb1 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -49,13 +49,13 @@ static const PixelFormatDesc formats[] = /* IEEE formats */ {WINED3DFMT_R32F ,0x0 ,0x0 ,0x0 ,0x0 ,4 ,FALSE ,0 ,0 ,0 }, {WINED3DFMT_G32R32F ,0x0 ,0x0 ,0x0 ,0x0 ,8 ,FALSE ,0 ,0 ,0 }, - {WINED3DFMT_A32B32G32R32F,0x0 ,0x0 ,0x0 ,0x0 ,16 ,FALSE ,0 ,0 ,0 }, + {WINED3DFMT_A32B32G32R32F,0x0 ,0x0 ,0x0 ,0x0 ,16 ,FALSE ,GL_RGBA32F_ARB ,GL_RGBA ,GL_FLOAT }, /* Hmm? */ {WINED3DFMT_CxV8U8 ,0x0 ,0x0 ,0x0 ,0x0 ,2 ,FALSE ,0 ,0 ,0 }, /* Float */ {WINED3DFMT_R16F ,0x0 ,0x0 ,0x0 ,0x0 ,2 ,FALSE ,0 ,0 ,0 }, {WINED3DFMT_G16R16F ,0x0 ,0x0 ,0x0 ,0x0 ,4 ,FALSE ,0 ,0 ,0 }, - {WINED3DFMT_A16B16G16R16F,0x0 ,0x0 ,0x0 ,0x0 ,8 ,FALSE ,0 ,0 ,0 }, + {WINED3DFMT_A16B16G16R16F,0x0 ,0x0 ,0x0 ,0x0 ,8 ,FALSE ,GL_RGBA16F_ARB ,GL_RGBA ,GL_HALF_FLOAT_ARB }, /* Palettized formats */ {WINED3DFMT_A8P8 ,0x0000ff00 ,0x0 ,0x0 ,0x0 ,2 ,FALSE ,0 ,0 ,0 }, {WINED3DFMT_P8 ,0x0 ,0x0 ,0x0 ,0x0 ,1 ,FALSE ,GL_COLOR_INDEX8_EXT ,GL_COLOR_INDEX ,GL_UNSIGNED_BYTE }, diff --git a/include/wine/wined3d_gl.h b/include/wine/wined3d_gl.h index 0aa41e3..36e9a20 100644 --- a/include/wine/wined3d_gl.h +++ b/include/wine/wined3d_gl.h @@ -473,6 +473,17 @@ #define GL_EXT_texture_env_dot3 1 #define GL_DOT3_RGB_EXT 0x8740 #define GL_DOT3_RGBA_EXT 0x8741 #endif +/* GL_ARB_texture_float */ +#ifndef GL_ARB_texture_float +#define GL_ARB_texture_float 1 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGBA16F_ARB 0x881A +#endif +/* GL_ARB_half_float_pixel */ +#ifndef GL_ARB_half_float_pixel +#define GL_ARB_half_float_pixel +#define GL_HALF_FLOAT_ARB 0x140B +#endif /* GL_ARB_vertex_program */ #ifndef GL_ARB_vertex_program #define GL_ARB_vertex_program 1 @@ -1407,6 +1418,8 @@ typedef enum _GL_SupportedExt { ARB_TEXTURE_ENV_ADD, ARB_TEXTURE_ENV_COMBINE, ARB_TEXTURE_ENV_DOT3, + ARB_TEXTURE_FLOAT, + ARB_HALF_FLOAT_PIXEL, ARB_TEXTURE_BORDER_CLAMP, ARB_TEXTURE_MIRRORED_REPEAT, ARB_VERTEX_PROGRAM,
1
0
0
0
Hwang YunSong(=?UTF-8?Q?=ED=99=A9=EC=9C=A4=EC=84=B1?=) : msi: Updated Korean resource.
by Alexandre Julliard
28 Aug '06
28 Aug '06
Module: wine Branch: master Commit: aec5bc33f65314a43b736c203fb69d9aa146272c URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=aec5bc33f65314a43b736c2…
Author: Hwang YunSong(황윤성) <hys545(a)dreamwiz.com> Date: Mon Aug 28 08:50:59 2006 +0900 msi: Updated Korean resource. --- dlls/msi/msi_Ko.rc | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/dlls/msi/msi_Ko.rc b/dlls/msi/msi_Ko.rc index 8885c08..3628e45 100644 --- a/dlls/msi/msi_Ko.rc +++ b/dlls/msi/msi_Ko.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE { - 4 "The specified installation package could not be opened. Please check the file path and try again." + 4 " ������ ��ġ ��Ű���� �� �� �����ϴ�. ���� ��θ� Ȯ���ϰ� �ٽ� �õ��Ͻʽÿ�." 5 "%s ��θ� ã���� �����ϴ�" 9 "��ũ %s ����" 10 "������ �Ű�����"
1
0
0
0
Eric Pouech : dbghelp: Removed stabs dump facility now that we have it ( for PE files) in winedump.
by Alexandre Julliard
28 Aug '06
28 Aug '06
Module: wine Branch: master Commit: b039c3abd4dc0ad28d8eb0a1bfe4aa6bfd75f3f1 URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=b039c3abd4dc0ad28d8eb0a…
Author: Eric Pouech <eric.pouech(a)wanadoo.fr> Date: Sun Aug 27 08:50:46 2006 +0200 dbghelp: Removed stabs dump facility now that we have it (for PE files) in winedump. --- dlls/dbghelp/stabs.c | 36 ------------------------------------ 1 files changed, 0 insertions(+), 36 deletions(-) diff --git a/dlls/dbghelp/stabs.c b/dlls/dbghelp/stabs.c index e94bd71..534e1b0 100644 --- a/dlls/dbghelp/stabs.c +++ b/dlls/dbghelp/stabs.c @@ -1266,42 +1266,6 @@ BOOL stabs_parse(struct module* module, } } -#if 0 - const char* defs[] = {"","","","", /* 00 */ - "","","","", /* 08 */ - "","","","", /* 10 */ - "","","","", /* 18 */ - "gsym","","fun","stsym", /* 20 */ - "lcsym","main","rosym","", /* 28 */ - "","","","", /* 30 */ - "","","opt","", /* 38 */ - "rsym","","sline","", /* 40 */ - "","","","", /* 48 */ - "","","","", /* 50 */ - "","","","", /* 58 */ - "","","so","", /* 60 */ - "","","","", /* 68 */ - "","","","", /* 70 */ - "","","","", /* 78 */ - "lsym","bincl","sol","", /* 80 */ - "","","","", /* 88 */ - "","","","", /* 90 */ - "","","","", /* 98 */ - "psym","eincl","","", /* a0 */ - "","","","", /* a8 */ - "","","","", /* b0 */ - "","","","", /* b8 */ - "lbrac","excl","","", /* c0 */ - "","","","", /* c8 */ - "","","","", /* d0 */ - "","","","", /* d8 */ - "rbrac","","","", /* e0 */ - }; - - FIXME("Got %s<%u> %u/%ld (%s)\n", - defs[stab_ptr->n_type / 2], stab_ptr->n_type, stab_ptr->n_desc, stab_ptr->n_value, debugstr_a(ptr)); -#endif - switch (stab_ptr->n_type) { case N_GSYM:
1
0
0
0
Eric Pouech : winedump: Added -G option to dump raw stabs information from PE files.
by Alexandre Julliard
28 Aug '06
28 Aug '06
Module: wine Branch: master Commit: c2f1240a53f05467d086a5dc5ecd236889a7fe17 URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=c2f1240a53f05467d086a5d…
Author: Eric Pouech <eric.pouech(a)wanadoo.fr> Date: Sun Aug 27 08:50:46 2006 +0200 winedump: Added -G option to dump raw stabs information from PE files. --- tools/winedump/debug.c | 113 ++++++++++++++++++++++++++++++++++++++++ tools/winedump/main.c | 6 ++ tools/winedump/pe.c | 32 +++++++++++ tools/winedump/winedump.h | 3 + tools/winedump/winedump.man.in | 3 + 5 files changed, 157 insertions(+), 0 deletions(-) diff --git a/tools/winedump/debug.c b/tools/winedump/debug.c index 07ae75c..8d24a17 100644 --- a/tools/winedump/debug.c +++ b/tools/winedump/debug.c @@ -582,3 +582,116 @@ void dump_frame_pointer_omission(unsigne /* FPO is used to describe nonstandard stack frames */ printf("FIXME: FPO (frame pointer omission) debug symbol dumping not implemented yet.\n"); } + +struct stab_nlist +{ + union + { + char* n_name; + struct stab_nlist* n_next; + long n_strx; + } n_un; + unsigned char n_type; + char n_other; + short n_desc; + unsigned long n_value; +}; + +static const char* stabs_defs[] = { + NULL,NULL,NULL,NULL, /* 00 */ + NULL,NULL,NULL,NULL, /* 08 */ + NULL,NULL,NULL,NULL, /* 10 */ + NULL,NULL,NULL,NULL, /* 18 */ + "GSYM","FNAME","FUN","STSYM", /* 20 */ + "LCSYM","MAIN","ROSYM","PC", /* 28 */ + NULL,"NSYMS","NOMAP",NULL, /* 30 */ + "OBJ",NULL,"OPT",NULL, /* 38 */ + "RSYM","M2C","SLINE","DSLINE", /* 40 */ + "BSLINE","DEFD","FLINE",NULL, /* 48 */ + "EHDECL",NULL,"CATCH",NULL, /* 50 */ + NULL,NULL,NULL,NULL, /* 58 */ + "SSYM","ENDM","SO",NULL, /* 60 */ + NULL,NULL,NULL,NULL, /* 68 */ + NULL,NULL,NULL,NULL, /* 70 */ + NULL,NULL,NULL,NULL, /* 78 */ + "LSYM","BINCL","SOL",NULL, /* 80 */ + NULL,NULL,NULL,NULL, /* 88 */ + NULL,NULL,NULL,NULL, /* 90 */ + NULL,NULL,NULL,NULL, /* 98 */ + "PSYM","EINCL","ENTRY",NULL, /* a0 */ + NULL,NULL,NULL,NULL, /* a8 */ + NULL,NULL,NULL,NULL, /* b0 */ + NULL,NULL,NULL,NULL, /* b8 */ + "LBRAC","EXCL","SCOPE",NULL, /* c0 */ + NULL,NULL,NULL,NULL, /* c8 */ + NULL,NULL,NULL,NULL, /* d0 */ + NULL,NULL,NULL,NULL, /* d8 */ + "RBRAC","BCOMM","ECOMM",NULL, /* e0 */ + "ECOML","WITH",NULL,NULL, /* e8 */ + "NBTEXT","NBDATA","NBBSS","NBSTS", /* f0 */ + "NBLCS",NULL,NULL,NULL /* f8 */ +}; + +void dump_stabs(const void* pv_stabs, unsigned szstabs, const char* stabstr, unsigned szstr) +{ + int i; + int nstab; + const char* ptr; + char* stabbuff; + unsigned int stabbufflen; + const struct stab_nlist* stab_ptr = pv_stabs; + const char* strs_end; + char n_buffer[16]; + + nstab = szstabs / sizeof(struct stab_nlist); + strs_end = stabstr + szstr; + + /* + * Allocate a buffer into which we can build stab strings for cases + * where the stab is continued over multiple lines. + */ + stabbufflen = 65536; + stabbuff = malloc(stabbufflen); + + stabbuff[0] = '\0'; + + printf("#Sym n_type n_othr n_desc n_value n_strx String\n"); + + for (i = 0; i < nstab; i++, stab_ptr++) + { + ptr = stabstr + stab_ptr->n_un.n_strx; + if ((ptr > strs_end) || (ptr + strlen(ptr) > strs_end)) + { + ptr = "[[*** bad string ***]]"; + } + else if (ptr[strlen(ptr) - 1] == '\\') + { + /* + * Indicates continuation. Append this to the buffer, and go onto the + * next record. Repeat the process until we find a stab without the + * '/' character, as this indicates we have the whole thing. + */ + unsigned len = strlen(ptr); + if (strlen(stabbuff) + len > stabbufflen) + { + stabbufflen += 65536; + stabbuff = realloc(stabbuff, stabbufflen); + } + strncat(stabbuff, ptr, len - 1); + continue; + } + else if (stabbuff[0] != '\0') + { + strcat(stabbuff, ptr); + ptr = stabbuff; + } + if ((stab_ptr->n_type & 1) || !stabs_defs[stab_ptr->n_type / 2]) + sprintf(n_buffer, "<0x%02x>", stab_ptr->n_type); + else + sprintf(n_buffer, "%-6s", stabs_defs[stab_ptr->n_type / 2]); + printf("%4d %s %-8x % 6d %-8lx %-6lx %s\n", + i, n_buffer, stab_ptr->n_other, stab_ptr->n_desc, stab_ptr->n_value, + stab_ptr->n_un.n_strx, ptr); + } + free(stabbuff); +} diff --git a/tools/winedump/main.c b/tools/winedump/main.c index 8d90187..36a105b 100644 --- a/tools/winedump/main.c +++ b/tools/winedump/main.c @@ -192,6 +192,11 @@ static void do_dumpsect (const char* arg globals.dumpsect = arg; } +static void do_rawdebug (void) +{ + globals.do_debug = 1; +} + static void do_dumpall(void) { globals.do_dumpheader = 1; @@ -228,6 +233,7 @@ static const struct my_option option_tab {"dump", DUMP, 0, do_dump, "dump <mod> Dumps the content of the module (dll, exe...) named <mod>"}, {"-C", DUMP, 0, do_symdmngl, "-C Turns on symbol demangling"}, {"-f", DUMP, 0, do_dumphead, "-f Dumps file header information"}, + {"-G", DUMP, 0, do_rawdebug, "-G Dumps raw debug information"}, {"-j", DUMP, 1, do_dumpsect, "-j sect_name Dumps only the content of section sect_name (import, export, debug, resource, tls)"}, {"-x", DUMP, 0, do_dumpall, "-x Dumps everything"}, {"emf", EMF, 0, do_dumpemf, "emf Dumps an Enhanced Meta File"}, diff --git a/tools/winedump/pe.c b/tools/winedump/pe.c index da55f63..22b243e 100644 --- a/tools/winedump/pe.c +++ b/tools/winedump/pe.c @@ -1076,6 +1076,36 @@ static void dump_dir_resource(void) printf( "\n\n" ); } +static void dump_debug(void) +{ + const char* stabs = NULL; + unsigned szstabs = 0; + const char* stabstr = NULL; + unsigned szstr = 0; + unsigned i; + const IMAGE_SECTION_HEADER* sectHead; + + sectHead = (const IMAGE_SECTION_HEADER*) + ((const char*)PE_nt_headers + sizeof(DWORD) + + sizeof(IMAGE_FILE_HEADER) + PE_nt_headers->FileHeader.SizeOfOptionalHeader); + + for (i = 0; i < PE_nt_headers->FileHeader.NumberOfSections; i++, sectHead++) + { + if (!strcmp((const char *)sectHead->Name, ".stab")) + { + stabs = RVA(sectHead->VirtualAddress, sectHead->Misc.VirtualSize); + szstabs = sectHead->Misc.VirtualSize; + } + if (!strncmp((const char *)sectHead->Name, ".stabstr", 8)) + { + stabstr = RVA(sectHead->VirtualAddress, sectHead->Misc.VirtualSize); + szstr = sectHead->Misc.VirtualSize; + } + } + if (stabs && stabstr) + dump_stabs(stabs, szstabs, stabstr, szstr); +} + void pe_dump(const void* pmt) { int all = (globals.dumpsect != NULL) && strcmp(globals.dumpsect, "ALL") == 0; @@ -1118,6 +1148,8 @@ #if 0 dump_dir_reloc(); #endif } + if (globals.do_debug) + dump_debug(); } typedef struct _dll_symbol { diff --git a/tools/winedump/winedump.h b/tools/winedump/winedump.h index 93de9a8..f12b618 100644 --- a/tools/winedump/winedump.h +++ b/tools/winedump/winedump.h @@ -123,6 +123,7 @@ typedef struct __globals /* Options: dump mode */ int do_demangle; /* -d */ int do_dumpheader; /* -f */ + int do_debug; /* -G == 1, -g == 2 */ /* Option arguments: spec mode */ int start_ordinal; /* -s */ @@ -238,6 +239,8 @@ void ne_dump( const void *exe void le_dump( const void *exe, size_t exe_size ); void mdmp_dump( void ); +void dump_stabs(const void* pv_stabs, unsigned szstabs, const char* stabstr, unsigned szstr); + FILE *open_file (const char *name, const char *ext, const char *mode); #ifdef __GNUC__ diff --git a/tools/winedump/winedump.man.in b/tools/winedump/winedump.man.in index 19fd8de..f1b2e9e 100644 --- a/tools/winedump/winedump.man.in +++ b/tools/winedump/winedump.man.in @@ -80,6 +80,9 @@ Dumps everything. This command prints all available information about the file. You may wish to pipe the output through more/less or into a file, since a lot of output will be produced. +.IP \fB-G\fR +Dumps contents of debug section if any (for now, only stabs +information is supported). .PP .B Spec mode: .IP \fI<dll>\fR
1
0
0
0
Eric Pouech : winedbg: Native dbghelp generate long basic types, so handle them too.
by Alexandre Julliard
28 Aug '06
28 Aug '06
Module: wine Branch: master Commit: 9766dd1a5f56ecc3673bdcf6abe2aae638ec18e6 URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=9766dd1a5f56ecc3673bdcf…
Author: Eric Pouech <eric.pouech(a)wanadoo.fr> Date: Sun Aug 27 08:50:33 2006 +0200 winedbg: Native dbghelp generate long basic types, so handle them too. --- programs/winedbg/memory.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/programs/winedbg/memory.c b/programs/winedbg/memory.c index dc87175..cab1327 100644 --- a/programs/winedbg/memory.c +++ b/programs/winedbg/memory.c @@ -324,10 +324,12 @@ static void print_typed_basic(const stru switch (bt) { case btInt: + case btLong: if (!be_cpu->fetch_integer(lvalue, size, TRUE, &val_int)) return; dbg_printf("%s", wine_dbgstr_longlong(val_int)); break; case btUInt: + case btULong: if (!be_cpu->fetch_integer(lvalue, size, FALSE, &val_int)) return; dbg_printf("%s", wine_dbgstr_longlong(val_int)); break;
1
0
0
0
Jacek Caban : mshtml: Added IDM_UNDERLINE implementation.
by Alexandre Julliard
28 Aug '06
28 Aug '06
Module: wine Branch: master Commit: fd79923100ea4eabae1ad32aff38778f763ad864 URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=fd79923100ea4eabae1ad32…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Sun Aug 27 16:01:45 2006 +0200 mshtml: Added IDM_UNDERLINE implementation. --- dlls/mshtml/olecmd.c | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-) diff --git a/dlls/mshtml/olecmd.c b/dlls/mshtml/olecmd.c index 8da3ea2..d66b2f0 100644 --- a/dlls/mshtml/olecmd.c +++ b/dlls/mshtml/olecmd.c @@ -379,6 +379,16 @@ static HRESULT exec_italic(HTMLDocument return S_OK; } +static HRESULT exec_underline(HTMLDocument *This) +{ + TRACE("(%p)\n", This); + + if(This->nscontainer) + do_ns_command(This->nscontainer, "cmd_underline", NULL); + + return S_OK; +} + static HRESULT exec_browsemode(HTMLDocument *This) { WARN("(%p)\n", This); @@ -748,6 +758,10 @@ static HRESULT WINAPI OleCommandTarget_E if(pvaIn || pvaOut) FIXME("unsupported arguments\n"); return exec_italic(This); + case IDM_UNDERLINE: + if(pvaIn || pvaOut) + FIXME("unsupported arguments\n"); + return exec_underline(This); case IDM_BROWSEMODE: if(pvaIn || pvaOut) FIXME("unsupported arguments\n");
1
0
0
0
Jacek Caban : mshtml: Added IDM_ITALIC implementation.
by Alexandre Julliard
28 Aug '06
28 Aug '06
Module: wine Branch: master Commit: 9fb9ca0d5d4f7b6adbef1180887d8798ef180b23 URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=9fb9ca0d5d4f7b6adbef118…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Sun Aug 27 16:01:25 2006 +0200 mshtml: Added IDM_ITALIC implementation. --- dlls/mshtml/olecmd.c | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-) diff --git a/dlls/mshtml/olecmd.c b/dlls/mshtml/olecmd.c index 81de774..8da3ea2 100644 --- a/dlls/mshtml/olecmd.c +++ b/dlls/mshtml/olecmd.c @@ -369,6 +369,16 @@ static HRESULT exec_bold(HTMLDocument *T return S_OK; } +static HRESULT exec_italic(HTMLDocument *This) +{ + TRACE("(%p)\n", This); + + if(This->nscontainer) + do_ns_command(This->nscontainer, "cmd_italic", NULL); + + return S_OK; +} + static HRESULT exec_browsemode(HTMLDocument *This) { WARN("(%p)\n", This); @@ -734,6 +744,10 @@ static HRESULT WINAPI OleCommandTarget_E if(pvaIn || pvaOut) FIXME("unsupported arguments\n"); return exec_bold(This); + case IDM_ITALIC: + if(pvaIn || pvaOut) + FIXME("unsupported arguments\n"); + return exec_italic(This); case IDM_BROWSEMODE: if(pvaIn || pvaOut) FIXME("unsupported arguments\n");
1
0
0
0
Jacek Caban : mshtml: Added IDM_FONTNAME implementation.
by Alexandre Julliard
28 Aug '06
28 Aug '06
Module: wine Branch: master Commit: 5f9078040a248a5af5def3072cc942335f12f74e URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=5f9078040a248a5af5def30…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Sun Aug 27 16:01:06 2006 +0200 mshtml: Added IDM_FONTNAME implementation. --- dlls/mshtml/mshtml_private.h | 1 dlls/mshtml/nsembed.c | 18 ++++++++ dlls/mshtml/olecmd.c | 93 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 112 insertions(+), 0 deletions(-) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 99de822..b9eb7d3 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -312,6 +312,7 @@ PRUint32 nsAString_GetData(const nsAStri void nsAString_Finish(nsAString*); nsIInputStream *create_nsstream(const char*,PRInt32); +nsICommandParams *create_nscommand_params(void); BSCallback *create_bscallback(HTMLDocument*,IMoniker*); HRESULT start_binding(BSCallback*); diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c index 4fabad7..1089164 100644 --- a/dlls/mshtml/nsembed.c +++ b/dlls/mshtml/nsembed.c @@ -40,6 +40,7 @@ #define NS_WEBBROWSER_CONTRACTID "@mozil #define NS_PROFILE_CONTRACTID "@mozilla.org/profile/manager;1" #define NS_MEMORY_CONTRACTID "@mozilla.org/xpcom/memory-service;1" #define NS_STRINGSTREAM_CONTRACTID "@mozilla.org/io/string-input-stream;1" +#define NS_COMMANDPARAMS_CONTRACTID "@mozilla.org/embedcomp/command-params;1" #define APPSTARTUP_TOPIC "app-startup" @@ -447,6 +448,23 @@ nsIInputStream *create_nsstream(const ch return (nsIInputStream*)ret; } +nsICommandParams *create_nscommand_params(void) +{ + nsICommandParams *ret = NULL; + nsresult nsres; + + if(!pCompMgr) + return NULL; + + nsres = nsIComponentManager_CreateInstanceByContractID(pCompMgr, + NS_COMMANDPARAMS_CONTRACTID, NULL, &IID_nsICommandParams, + (void**)&ret); + if(NS_FAILED(nsres)) + ERR("Could not get nsICommandParams\n"); + + return ret; +} + void close_gecko() { TRACE("()\n"); diff --git a/dlls/mshtml/olecmd.c b/dlls/mshtml/olecmd.c index 9b17502..81de774 100644 --- a/dlls/mshtml/olecmd.c +++ b/dlls/mshtml/olecmd.c @@ -26,6 +26,7 @@ #define COBJMACROS #include "windef.h" #include "winbase.h" #include "winuser.h" +#include "winnls.h" #include "ole2.h" #include "shlguid.h" #include "mshtmdid.h" @@ -268,6 +269,96 @@ static void do_ns_command(NSContainer *T nsICommandManager_Release(cmdmgr); } +static nsresult get_ns_command_state(NSContainer *This, const char *cmd, nsICommandParams *nsparam) +{ + nsICommandManager *cmdmgr; + nsIInterfaceRequestor *iface_req; + nsresult nsres; + + nsres = nsIWebBrowser_QueryInterface(This->webbrowser, + &IID_nsIInterfaceRequestor, (void**)&iface_req); + if(NS_FAILED(nsres)) { + ERR("Could not get nsIInterfaceRequestor: %08lx\n", nsres); + return nsres; + } + + nsres = nsIInterfaceRequestor_GetInterface(iface_req, &IID_nsICommandManager, + (void**)&cmdmgr); + nsIInterfaceRequestor_Release(iface_req); + if(NS_FAILED(nsres)) { + ERR("Could not get nsICommandManager: %08lx\n", nsres); + return nsres; + } + + nsres = nsICommandManager_GetCommandState(cmdmgr, cmd, NULL, nsparam); + if(NS_FAILED(nsres)) + ERR("GetCommandState(%s) failed: %08lx\n", debugstr_a(cmd), nsres); + + nsICommandManager_Release(cmdmgr); + return nsres; +} + +static HRESULT exec_fontname(HTMLDocument *This, VARIANT *in, VARIANT *out) +{ + TRACE("(%p)->(%p %p)\n", This, in, out); + + if(!This->nscontainer) + return E_FAIL; + + if(in) { + nsICommandParams *nsparam = create_nscommand_params(); + char *stra; + DWORD len; + + if(V_VT(in) != VT_BSTR) { + FIXME("Unsupported vt=%d\n", V_VT(out)); + return E_INVALIDARG; + } + + len = WideCharToMultiByte(CP_ACP, 0, V_BSTR(in), -1, NULL, 0, NULL, NULL); + stra = mshtml_alloc(len); + WideCharToMultiByte(CP_ACP, 0, V_BSTR(in), -1, stra, -1, NULL, NULL); + nsICommandParams_SetCStringValue(nsparam, "state_attribute", stra); + mshtml_free(stra); + + do_ns_command(This->nscontainer, "cmd_fontFace", nsparam); + + nsICommandParams_Release(nsparam); + } + + if(out) { + nsICommandParams *nsparam; + LPWSTR strw; + char *stra; + DWORD len; + nsresult nsres; + + if(V_VT(out) != VT_BSTR) { + FIXME("Unsupported vt=%d\n", V_VT(out)); + return E_INVALIDARG; + } + + nsparam = create_nscommand_params(); + + nsres = get_ns_command_state(This->nscontainer, "cmd_fontFace", nsparam); + if(NS_FAILED(nsres)) + return S_OK; + + nsICommandParams_GetCStringValue(nsparam, "state_attribute", &stra); + nsICommandParams_Release(nsparam); + + len = MultiByteToWideChar(CP_ACP, 0, stra, -1, NULL, 0); + strw = mshtml_alloc(len*sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, stra, -1, strw, -1); + nsfree(stra); + + V_BSTR(out) = SysAllocString(strw); + mshtml_free(strw); + } + + return S_OK; +} + static HRESULT exec_bold(HTMLDocument *This) { TRACE("(%p)\n", This); @@ -637,6 +728,8 @@ static HRESULT WINAPI OleCommandTarget_E return OLECMDERR_E_NOTSUPPORTED; }else if(IsEqualGUID(&CGID_MSHTML, pguidCmdGroup)) { switch(nCmdID) { + case IDM_FONTNAME: + return exec_fontname(This, pvaIn, pvaOut); case IDM_BOLD: if(pvaIn || pvaOut) FIXME("unsupported arguments\n");
1
0
0
0
James Hawkins : msi: Add a stub implementation of the VolumeCostList control.
by Alexandre Julliard
28 Aug '06
28 Aug '06
Module: wine Branch: master Commit: 80225d53b945caa68b58f4f67cd9c512ebacbcc7 URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=80225d53b945caa68b58f4f…
Author: James Hawkins <truiken(a)gmail.com> Date: Fri Aug 25 15:42:28 2006 -0700 msi: Add a stub implementation of the VolumeCostList control. --- dlls/msi/dialog.c | 19 +++++++++++++++++++ 1 files changed, 19 insertions(+), 0 deletions(-) diff --git a/dlls/msi/dialog.c b/dlls/msi/dialog.c index 96c8d07..465af05 100644 --- a/dlls/msi/dialog.c +++ b/dlls/msi/dialog.c @@ -141,6 +141,7 @@ static const WCHAR szGroupBox[] = { 'G', static const WCHAR szListBox[] = { 'L','i','s','t','B','o','x',0 }; static const WCHAR szDirectoryCombo[] = { 'D','i','r','e','c','t','o','r','y','C','o','m','b','o',0 }; static const WCHAR szDirectoryList[] = { 'D','i','r','e','c','t','o','r','y','L','i','s','t',0 }; +static const WCHAR szVolumeCostList[] = { 'V','o','l','u','m','e','C','o','s','t','L','i','s','t',0 }; static UINT msi_dialog_checkbox_handler( msi_dialog *, msi_control *, WPARAM ); static void msi_dialog_checkbox_sync_state( msi_dialog *, msi_control * ); @@ -2040,6 +2041,23 @@ static UINT msi_dialog_directory_list( m return ERROR_SUCCESS; } +/******************** VolumeCost List ***************************************/ + +static UINT msi_dialog_volumecost_list( msi_dialog *dialog, MSIRECORD *rec ) +{ + msi_control *control; + DWORD style; + + style = LVS_REPORT | WS_VSCROLL | WS_HSCROLL | LVS_SHAREIMAGELISTS | + LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | + WS_CHILD | WS_TABSTOP | WS_GROUP; + control = msi_dialog_add_control( dialog, rec, WC_LISTVIEWW, style ); + if (!control) + return ERROR_FUNCTION_FAILED; + + return ERROR_SUCCESS; +} + static const struct control_handler msi_dialog_handler[] = { { szText, msi_dialog_text_control }, @@ -2060,6 +2078,7 @@ static const struct control_handler msi_ { szListBox, msi_dialog_list_box }, { szDirectoryCombo, msi_dialog_directory_combo }, { szDirectoryList, msi_dialog_directory_list }, + { szVolumeCostList, msi_dialog_volumecost_list }, }; #define NUM_CONTROL_TYPES (sizeof msi_dialog_handler/sizeof msi_dialog_handler[0])
1
0
0
0
← Newer
1
2
3
4
5
6
7
8
...
75
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Results per page:
10
25
50
100
200