wine
12 years agocomctl32: Use GetWindowLong to check for scrollbar.
Daniel Jelinski [Fri, 21 Sep 2012 19:58:43 +0000 (21:58 +0200)] 
comctl32: Use GetWindowLong to check for scrollbar.

dwStyle is updated only in WM_STYLECHANGED, which is not sent
when displaying and hiding scrollbars.

12 years agoieframe: Recognize the CGID_ShellDocView command group.
Dmitry Timoshkov [Fri, 28 Sep 2012 11:51:24 +0000 (20:51 +0900)] 
ieframe: Recognize the CGID_ShellDocView command group.

12 years agoMark all lexers as never-interactive.
Alexandre Julliard [Mon, 1 Oct 2012 10:19:25 +0000 (12:19 +0200)] 
Mark all lexers as never-interactive.

12 years agouser32: Always flush window surfaces in PeekMessage, even with PM_NOYIELD.
Alexandre Julliard [Mon, 1 Oct 2012 10:12:53 +0000 (12:12 +0200)] 
user32: Always flush window surfaces in PeekMessage, even with PM_NOYIELD.

12 years agogdi32: Correctly map the 256-level bitmap to the 5, 17 and 65-level bitmaps.
Huw Davies [Mon, 1 Oct 2012 09:47:17 +0000 (10:47 +0100)] 
gdi32: Correctly map the 256-level bitmap to the 5, 17 and 65-level bitmaps.

12 years agoddraw: Properly release the ddraw reference when the last interface is released in...
Henri Verbeet [Mon, 1 Oct 2012 09:05:23 +0000 (11:05 +0200)] 
ddraw: Properly release the ddraw reference when the last interface is released in ddraw_surface_release_iface().

12 years agowined3d: Just return the surface from wined3d_device_get_depth_stencil().
Henri Verbeet [Mon, 1 Oct 2012 09:05:22 +0000 (11:05 +0200)] 
wined3d: Just return the surface from wined3d_device_get_depth_stencil().

12 years agowined3d: Just return the surface from wined3d_device_get_render_target().
Henri Verbeet [Mon, 1 Oct 2012 09:05:21 +0000 (11:05 +0200)] 
wined3d: Just return the surface from wined3d_device_get_render_target().

12 years agod3d10: Implement d3d10_effect_rasterizer_variable_GetRasterizerState().
Henri Verbeet [Mon, 1 Oct 2012 09:05:20 +0000 (11:05 +0200)] 
d3d10: Implement d3d10_effect_rasterizer_variable_GetRasterizerState().

12 years agod3d10: Implement d3d10_effect_depth_stencil_variable_GetDepthStencilState().
Henri Verbeet [Mon, 1 Oct 2012 09:05:19 +0000 (11:05 +0200)] 
d3d10: Implement d3d10_effect_depth_stencil_variable_GetDepthStencilState().

12 years agodwrite: Forward CreateRenderingParams() to CreateMonitorRenderingParams() with primar...
Nikolay Sivov [Mon, 1 Oct 2012 05:35:00 +0000 (09:35 +0400)] 
dwrite: Forward CreateRenderingParams() to CreateMonitorRenderingParams() with primary monitor.

12 years agodwrite: Stub for CreateMonitorRenderingParams().
Nikolay Sivov [Mon, 1 Oct 2012 05:29:35 +0000 (09:29 +0400)] 
dwrite: Stub for CreateMonitorRenderingParams().

12 years agodwrite: Store render params properties and implement accessing methods.
Nikolay Sivov [Mon, 1 Oct 2012 05:11:44 +0000 (09:11 +0400)] 
dwrite: Store render params properties and implement accessing methods.

12 years agodwrite: Stub for IDWriteRenderingParams.
Nikolay Sivov [Mon, 1 Oct 2012 05:05:38 +0000 (09:05 +0400)] 
dwrite: Stub for IDWriteRenderingParams.

12 years agomlang: Rename IMultiLanguage3 method implementation functions to match interface...
Nikolay Sivov [Sun, 30 Sep 2012 05:53:43 +0000 (09:53 +0400)] 
mlang: Rename IMultiLanguage3 method implementation functions to match interface name.

12 years agomlang: Move GetStrCodePages() to IMLangFontLink2 and forward to it.
Nikolay Sivov [Sun, 30 Sep 2012 05:44:05 +0000 (09:44 +0400)] 
mlang: Move GetStrCodePages() to IMLangFontLink2 and forward to it.

12 years agomlang: Move GetCharCodePages() to IMLangFontLink2 and forward to it.
Nikolay Sivov [Sun, 30 Sep 2012 05:33:39 +0000 (09:33 +0400)] 
mlang: Move GetCharCodePages() to IMLangFontLink2 and forward to it.

12 years agomlang: Move CodePageToCodePages() to IMLangFontLink2 and forward to it.
Nikolay Sivov [Sun, 30 Sep 2012 05:25:50 +0000 (09:25 +0400)] 
mlang: Move CodePageToCodePages() to IMLangFontLink2 and forward to it.

12 years agoshell32/tests: Improve the shell_execute{_ex}() tracing.
Francois Gouget [Mon, 1 Oct 2012 01:30:47 +0000 (03:30 +0200)] 
shell32/tests: Improve the shell_execute{_ex}() tracing.

12 years agoAssorted spelling fixes.
Francois Gouget [Mon, 1 Oct 2012 01:30:06 +0000 (03:30 +0200)] 
Assorted spelling fixes.

12 years agoshlwapi: Implement PathCreateFromUrlAlloc().
Francois Gouget [Mon, 1 Oct 2012 01:29:55 +0000 (03:29 +0200)] 
shlwapi: Implement PathCreateFromUrlAlloc().

12 years agontdll: Init retv to FALSE so in case of exception the trace shows the failure.
Christian Costa [Sat, 29 Sep 2012 20:29:11 +0000 (22:29 +0200)] 
ntdll: Init retv to FALSE so in case of exception the trace shows the failure.

12 years agontoskrnl.exe: Add TRACEs to IoCreateDriver and IoDelete driver.
Christian Costa [Sat, 29 Sep 2012 20:28:24 +0000 (22:28 +0200)] 
ntoskrnl.exe: Add TRACEs to IoCreateDriver and IoDelete driver.

12 years agontoskrnl.exe: Add stub for MmMapLockedPagesSpecifyCache.
Christian Costa [Sat, 29 Sep 2012 20:28:16 +0000 (22:28 +0200)] 
ntoskrnl.exe: Add stub for MmMapLockedPagesSpecifyCache.

12 years agontoskrnl.exe: Add stub for MmProbeAndLockPages.
Christian Costa [Sat, 29 Sep 2012 20:28:08 +0000 (22:28 +0200)] 
ntoskrnl.exe: Add stub for MmProbeAndLockPages.

12 years agontoskrnl.exe: Add stub for MmUnlockPages.
Christian Costa [Sat, 29 Sep 2012 20:28:00 +0000 (22:28 +0200)] 
ntoskrnl.exe: Add stub for MmUnlockPages.

12 years agogdi32: Make dibdrv_wgl{Describe,Set}PixelFormat() static.
Francois Gouget [Sat, 29 Sep 2012 16:02:40 +0000 (18:02 +0200)] 
gdi32: Make dibdrv_wgl{Describe,Set}PixelFormat() static.

12 years agoinclude: Fix a typo in the declaration of PCUZZTSTR.
Francois Gouget [Sat, 29 Sep 2012 16:02:36 +0000 (18:02 +0200)] 
include: Fix a typo in the declaration of PCUZZTSTR.

12 years agojscript: Make regexp_match() static.
Francois Gouget [Sat, 29 Sep 2012 16:02:28 +0000 (18:02 +0200)] 
jscript: Make regexp_match() static.

12 years agooleaut2: Pass up errors on typelib writeout (Coverity).
Marcus Meissner [Sat, 29 Sep 2012 15:58:54 +0000 (17:58 +0200)] 
oleaut2: Pass up errors on typelib writeout (Coverity).

12 years agodmusic: Fix a copy and paste error.
Sven Baars [Sat, 29 Sep 2012 15:01:54 +0000 (17:01 +0200)] 
dmusic: Fix a copy and paste error.

12 years agoRelease 1.5.14. wine-1.5.14
Alexandre Julliard [Fri, 28 Sep 2012 18:25:58 +0000 (20:25 +0200)] 
Release 1.5.14.

12 years agod3dcompiler: Parse array indexing expressions.
Matteo Bruni [Fri, 28 Sep 2012 15:22:41 +0000 (17:22 +0200)] 
d3dcompiler: Parse array indexing expressions.

12 years agod3dcompiler: Parse struct typedefs.
Matteo Bruni [Fri, 28 Sep 2012 15:22:40 +0000 (17:22 +0200)] 
d3dcompiler: Parse struct typedefs.

12 years agod3dcompiler: Parse struct dereferences.
Matteo Bruni [Fri, 28 Sep 2012 15:22:39 +0000 (17:22 +0200)] 
d3dcompiler: Parse struct dereferences.

12 years agod3dcompiler: Fix freeing function.
Matteo Bruni [Fri, 28 Sep 2012 15:22:38 +0000 (17:22 +0200)] 
d3dcompiler: Fix freeing function.

12 years agogdiplus: Reuse an existing image stream in GdipImageSelectActiveFrame.
Dmitry Timoshkov [Fri, 28 Sep 2012 01:15:39 +0000 (10:15 +0900)] 
gdiplus: Reuse an existing image stream in GdipImageSelectActiveFrame.

12 years agohhctrl.ocx: Get rid of no longer needed hack.
Jacek Caban [Fri, 28 Sep 2012 12:21:25 +0000 (14:21 +0200)] 
hhctrl.ocx: Get rid of no longer needed hack.

12 years agowbemprox: Implement Win32_ComputerSystem.Domain.
Hans Leidekker [Fri, 28 Sep 2012 11:39:04 +0000 (13:39 +0200)] 
wbemprox: Implement Win32_ComputerSystem.Domain.

12 years agowbemprox: Implement Win32_BIOS.Version.
Hans Leidekker [Fri, 28 Sep 2012 11:38:34 +0000 (13:38 +0200)] 
wbemprox: Implement Win32_BIOS.Version.

12 years agowbemprox: Add support for WbemAdministrativeLocator.
Hans Leidekker [Fri, 28 Sep 2012 11:38:05 +0000 (13:38 +0200)] 
wbemprox: Add support for WbemAdministrativeLocator.

12 years agoinclude: Add wbemprov.idl.
Hans Leidekker [Fri, 28 Sep 2012 11:37:43 +0000 (13:37 +0200)] 
include: Add wbemprov.idl.

12 years agowbemprox: Implement IWbemServices::ExecMethod.
Hans Leidekker [Fri, 28 Sep 2012 11:37:21 +0000 (13:37 +0200)] 
wbemprox: Implement IWbemServices::ExecMethod.

12 years agovbscript: Fixed copy&paste typo in invoke_builtin.
Jacek Caban [Fri, 28 Sep 2012 10:48:46 +0000 (12:48 +0200)] 
vbscript: Fixed copy&paste typo in invoke_builtin.

12 years agovbscript: Added StrReverse implementation.
Jacek Caban [Fri, 28 Sep 2012 09:49:48 +0000 (11:49 +0200)] 
vbscript: Added StrReverse implementation.

12 years agovbscript: Added Now() implementation.
Jacek Caban [Fri, 28 Sep 2012 09:49:30 +0000 (11:49 +0200)] 
vbscript: Added Now() implementation.

12 years agocmd: Reuse common string constants.
Frédéric Delanoy [Fri, 28 Sep 2012 09:13:16 +0000 (11:13 +0200)] 
cmd: Reuse common string constants.

12 years agocmd: Spelling fixes.
Frédéric Delanoy [Fri, 28 Sep 2012 09:13:15 +0000 (11:13 +0200)] 
cmd: Spelling fixes.

12 years agodmusic: Check returned value of GetPortCaps.
Christian Costa [Fri, 28 Sep 2012 06:59:36 +0000 (08:59 +0200)] 
dmusic: Check returned value of GetPortCaps.

12 years agoiphlpapi: Set DhcpEnabled to TRUE for all interfaces.
Qian Hong [Thu, 27 Sep 2012 15:14:32 +0000 (23:14 +0800)] 
iphlpapi: Set DhcpEnabled to TRUE for all interfaces.

12 years agodwrite: Added IDWriteTextLayout stub.
Nikolay Sivov [Fri, 28 Sep 2012 08:13:17 +0000 (12:13 +0400)] 
dwrite: Added IDWriteTextLayout stub.

12 years agomlang: Mode CodePagesToCodePage() code to IMLangFontLink2 and forward to it.
Nikolay Sivov [Thu, 27 Sep 2012 18:48:37 +0000 (22:48 +0400)] 
mlang: Mode CodePagesToCodePage() code to IMLangFontLink2 and forward to it.

12 years agomlang: Move GetFontCodePages() code to IMLangFontLink2 and forward to it.
Nikolay Sivov [Thu, 27 Sep 2012 18:41:51 +0000 (22:41 +0400)] 
mlang: Move GetFontCodePages() code to IMLangFontLink2 and forward to it.

12 years agomlang: Use proper interface call instead of implementation function.
Nikolay Sivov [Thu, 27 Sep 2012 18:34:21 +0000 (22:34 +0400)] 
mlang: Use proper interface call instead of implementation function.

12 years agomlang: Forward ConvertStringFromUnicode() to IMultiLanguage3 implementation.
Nikolay Sivov [Thu, 27 Sep 2012 18:28:09 +0000 (22:28 +0400)] 
mlang: Forward ConvertStringFromUnicode() to IMultiLanguage3 implementation.

12 years agomlang: Forward GetLcidFromRfc1766() to IMultiLanguage3 implementation.
Nikolay Sivov [Thu, 27 Sep 2012 18:24:31 +0000 (22:24 +0400)] 
mlang: Forward GetLcidFromRfc1766() to IMultiLanguage3 implementation.

12 years agod3dx9: Improve traces for D3DXSHMultiply2/3().
Rico Schüller [Fri, 28 Sep 2012 06:43:40 +0000 (08:43 +0200)] 
d3dx9: Improve traces for D3DXSHMultiply2/3().

12 years agod3dx9: Use float functions in D3DXMatrixRotationAxis().
Rico Schüller [Fri, 28 Sep 2012 06:43:30 +0000 (08:43 +0200)] 
d3dx9: Use float functions in D3DXMatrixRotationAxis().

12 years agod3dx9: Improve D3DXMatrixAffineTransformation().
Rico Schüller [Fri, 28 Sep 2012 06:43:26 +0000 (08:43 +0200)] 
d3dx9: Improve D3DXMatrixAffineTransformation().

12 years agod3dx9: Improve D3DXMatrixAffineTransformation2D().
Rico Schüller [Fri, 28 Sep 2012 06:43:18 +0000 (08:43 +0200)] 
d3dx9: Improve D3DXMatrixAffineTransformation2D().

12 years agod3dx9: Use float function in D3DXFresnelTerm().
Rico Schüller [Fri, 28 Sep 2012 06:43:14 +0000 (08:43 +0200)] 
d3dx9: Use float function in D3DXFresnelTerm().

12 years agod3dx9: Use float function in D3DXPlaneNormalize().
Rico Schüller [Fri, 28 Sep 2012 06:43:04 +0000 (08:43 +0200)] 
d3dx9: Use float function in D3DXPlaneNormalize().

12 years agowined3d: Set more accurate limits for SM4 shaders.
Henri Verbeet [Thu, 27 Sep 2012 23:06:56 +0000 (01:06 +0200)] 
wined3d: Set more accurate limits for SM4 shaders.

12 years agowined3d: Unify GLSL input / output variable naming.
Henri Verbeet [Thu, 27 Sep 2012 23:06:55 +0000 (01:06 +0200)] 
wined3d: Unify GLSL input / output variable naming.

12 years agowinex11: Use the first active CRTC as primary if no primary is explicitly set.
Henri Verbeet [Thu, 27 Sep 2012 23:06:54 +0000 (01:06 +0200)] 
winex11: Use the first active CRTC as primary if no primary is explicitly set.

12 years agowinex11: Handle a NULL cursor clipping rect the same as a fullscreen rect.
Henri Verbeet [Thu, 27 Sep 2012 23:06:53 +0000 (01:06 +0200)] 
winex11: Handle a NULL cursor clipping rect the same as a fullscreen rect.

We want to avoid ungrabbing the clipping window if "fullscreen clipping" is
enabled.

12 years agowinex11: Fullscreen windows are never maximized.
Henri Verbeet [Thu, 27 Sep 2012 23:06:52 +0000 (01:06 +0200)] 
winex11: Fullscreen windows are never maximized.

Some window managers incorrectly set maximized state on fullscreen windows.

12 years agontoskrnl.exe: Add partial stub for IoFreeMdl.
Christian Costa [Thu, 27 Sep 2012 21:12:36 +0000 (23:12 +0200)] 
ntoskrnl.exe: Add partial stub for IoFreeMdl.

12 years agontoskrnl.exe: Improve IoAllocateMdl stub.
Christian Costa [Thu, 27 Sep 2012 21:12:28 +0000 (23:12 +0200)] 
ntoskrnl.exe: Improve IoAllocateMdl stub.

12 years agoole32/tests: Use IUnknown_Release instead of deprecated WdtpInterfacePointer_UserFree.
André Hentschel [Thu, 27 Sep 2012 18:32:25 +0000 (20:32 +0200)] 
ole32/tests: Use IUnknown_Release instead of deprecated WdtpInterfacePointer_UserFree.

12 years agogdiplus: Take into account font substitution in GdipCreateFontFromLogfont.
Dmitry Timoshkov [Thu, 27 Sep 2012 06:52:29 +0000 (15:52 +0900)] 
gdiplus: Take into account font substitution in GdipCreateFontFromLogfont.

12 years agogdiplus: Take into account font substitution in GdipCreateFontFamilyFromName.
Dmitry Timoshkov [Thu, 27 Sep 2012 06:52:18 +0000 (15:52 +0900)] 
gdiplus: Take into account font substitution in GdipCreateFontFamilyFromName.

12 years agogdiplus: Move font substitution test into a separate function.
Dmitry Timoshkov [Thu, 27 Sep 2012 06:52:07 +0000 (15:52 +0900)] 
gdiplus: Move font substitution test into a separate function.

12 years agouser32: Add tests for UpdateLayeredWindowIndirect and fix the behavior of the ULW_EX_...
Alexandre Julliard [Thu, 27 Sep 2012 15:16:21 +0000 (17:16 +0200)] 
user32: Add tests for UpdateLayeredWindowIndirect and fix the behavior of the ULW_EX_NORESIZE flag.

12 years agovbscript: Added MonthName implementation.
Jacek Caban [Thu, 27 Sep 2012 11:11:08 +0000 (13:11 +0200)] 
vbscript: Added MonthName implementation.

12 years agovbscript: Added WeekDayName implementation.
Jacek Caban [Thu, 27 Sep 2012 11:10:49 +0000 (13:10 +0200)] 
vbscript: Added WeekDayName implementation.

12 years agoimm32: Properly separate the IME UI window and the thread default IME window.
Aric Stewart [Thu, 27 Sep 2012 14:42:54 +0000 (09:42 -0500)] 
imm32: Properly separate the IME UI window and the thread default IME window.

12 years agogdi32: Enumerate a default charset if no other valid charset was found.
Alexandre Julliard [Thu, 27 Sep 2012 11:07:01 +0000 (13:07 +0200)] 
gdi32: Enumerate a default charset if no other valid charset was found.

12 years agogdi32: Allow GetCharABCWidths on all scalable fonts, not just TrueType ones.
Alexandre Julliard [Wed, 26 Sep 2012 20:42:28 +0000 (22:42 +0200)] 
gdi32: Allow GetCharABCWidths on all scalable fonts, not just TrueType ones.

12 years agoinclude/d3dx9math.inl: Use float functions.
Rico Schüller [Thu, 27 Sep 2012 10:14:53 +0000 (12:14 +0200)] 
include/d3dx9math.inl: Use float functions.

12 years agod3dx9: Use float functions in D3DXQuaternionExp().
Rico Schüller [Thu, 27 Sep 2012 10:14:49 +0000 (12:14 +0200)] 
d3dx9: Use float functions in D3DXQuaternionExp().

12 years agod3dx9: Use float functions in D3DXQuaternionRotationMatrix().
Rico Schüller [Thu, 27 Sep 2012 10:14:23 +0000 (12:14 +0200)] 
d3dx9: Use float functions in D3DXQuaternionRotationMatrix().

12 years agod3dx9: Use float functions in D3DXQuaternionLn().
Rico Schüller [Thu, 27 Sep 2012 10:14:18 +0000 (12:14 +0200)] 
d3dx9: Use float functions in D3DXQuaternionLn().

12 years agomsvcp80: Use LoadLibraryA as msvcp90 might not yet or ever be loaded.
Ričardas Barkauskas [Wed, 26 Sep 2012 20:27:49 +0000 (23:27 +0300)] 
msvcp80: Use LoadLibraryA as msvcp90 might not yet or ever be loaded.

12 years agodxgi/tests: Test IDXGISwapChain_CreateSwapchain and IDXGISwapChain_GetDesc a bit.
Ričardas Barkauskas [Wed, 26 Sep 2012 17:46:37 +0000 (20:46 +0300)] 
dxgi/tests: Test IDXGISwapChain_CreateSwapchain and IDXGISwapChain_GetDesc a bit.

12 years agoinclude: Added uiautomationcoreapi.h.
Jacek Caban [Thu, 27 Sep 2012 10:20:41 +0000 (12:20 +0200)] 
include: Added uiautomationcoreapi.h.

12 years agowined3d: Introduce a separate function to retrieve the GLSL variable prefix.
Henri Verbeet [Wed, 26 Sep 2012 20:34:04 +0000 (22:34 +0200)] 
wined3d: Introduce a separate function to retrieve the GLSL variable prefix.

12 years agowined3d: wined3d_device_set_software_vertex_processing() never fails.
Henri Verbeet [Wed, 26 Sep 2012 20:34:03 +0000 (22:34 +0200)] 
wined3d: wined3d_device_set_software_vertex_processing() never fails.

12 years agowined3d: Just return the texture from wined3d_device_get_texture().
Henri Verbeet [Wed, 26 Sep 2012 20:34:02 +0000 (22:34 +0200)] 
wined3d: Just return the texture from wined3d_device_get_texture().

12 years agod3d10: Implement d3d10_effect_blend_variable_GetBlendState().
Henri Verbeet [Wed, 26 Sep 2012 20:34:01 +0000 (22:34 +0200)] 
d3d10: Implement d3d10_effect_blend_variable_GetBlendState().

12 years agod3d10: Use a union to store effect variable data instead of a void pointer.
Henri Verbeet [Wed, 26 Sep 2012 20:34:00 +0000 (22:34 +0200)] 
d3d10: Use a union to store effect variable data instead of a void pointer.

12 years agod3dcompiler: Handle simple struct initializers.
Matteo Bruni [Wed, 26 Sep 2012 17:22:35 +0000 (19:22 +0200)] 
d3dcompiler: Handle simple struct initializers.

12 years agod3dcompiler: Store the pointer to the struct field in the dereference node.
Matteo Bruni [Wed, 26 Sep 2012 17:22:34 +0000 (19:22 +0200)] 
d3dcompiler: Store the pointer to the struct field in the dereference node.

12 years agod3dcompiler: Also free the list itself in free_instr_list().
Matteo Bruni [Wed, 26 Sep 2012 17:22:33 +0000 (19:22 +0200)] 
d3dcompiler: Also free the list itself in free_instr_list().

12 years agod3dcompiler: Parse structure declarations.
Matteo Bruni [Wed, 26 Sep 2012 17:22:32 +0000 (19:22 +0200)] 
d3dcompiler: Parse structure declarations.

12 years agod3dcompiler: Move variables declaration to a separate function.
Matteo Bruni [Wed, 26 Sep 2012 17:22:31 +0000 (19:22 +0200)] 
d3dcompiler: Move variables declaration to a separate function.

12 years agowinmm: The "open new ..." MCI string command sets an empty OPEN_ELEMENT.
Jörg Höhle [Thu, 20 Sep 2012 14:48:17 +0000 (16:48 +0200)] 
winmm: The "open new ..." MCI string command sets an empty OPEN_ELEMENT.

12 years agocmd: Display 'set' sort ordering correctly.
Jason Edmeades [Tue, 25 Sep 2012 22:16:54 +0000 (23:16 +0100)] 
cmd: Display 'set' sort ordering correctly.

12 years agocmd: Echo back command with whitespace removed first.
Jason Edmeades [Tue, 25 Sep 2012 21:05:03 +0000 (22:05 +0100)] 
cmd: Echo back command with whitespace removed first.

12 years agocmd: Support for ^ character at end of line.
Jason Edmeades [Tue, 25 Sep 2012 20:02:09 +0000 (21:02 +0100)] 
cmd: Support for ^ character at end of line.

Based on a patch by John Chow.