diff -Nru wine-staging-1.7.46~ubuntu14.10.1/ANNOUNCE wine-staging-1.7.47~ubuntu14.10.1/ANNOUNCE --- wine-staging-1.7.46~ubuntu14.10.1/ANNOUNCE 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/ANNOUNCE 2015-07-12 05:36:18.000000000 +0000 @@ -1,17 +1,17 @@ -The Wine development release 1.7.46 is now available. +The Wine development release 1.7.47 is now available. What's new in this release (see below for details): - - Improvements in the BITS file transfer service. - - Still more progress on DirectWrite implementation. - - Support for shared user data on 64-bit. - - Various C++ runtime improvements. - - Some more support for the 64-bit ARM platform. + - Text drawing in Direct2D. + - Support for the new thread pool API. + - Toolbar state saving. + - Beginnings of an implementation for proper HID support. + - Support for file objects in device drivers. - Various bug fixes. The source is available from the following locations: - http://prdownloads.sourceforge.net/wine/wine-1.7.46.tar.bz2 - http://mirrors.ibiblio.org/wine/source/1.7/wine-1.7.46.tar.bz2 + http://prdownloads.sourceforge.net/wine/wine-1.7.47.tar.bz2 + http://mirrors.ibiblio.org/wine/source/1.7/wine-1.7.47.tar.bz2 Binary packages for various distributions will be available from: @@ -27,421 +27,432 @@ ---------------------------------------------------------------- -Bugs fixed in 1.7.46 (total 67): +Bugs fixed in 1.7.47 (total 48): - 6316 MYOB V13 prints a blank page - 15564 BlogJet: typing text and account signup don't work - 16196 Back and Forward buttons in Google Sketchup's 3D Warehouse do nothing - 16885 Yahoo Messenger 8/9 menu invisible, 'X' box hotspot in wrong place - 19648 Lotus Organizer 97 - No text on tabs - 19695 Gox Box window loses focus when list box is expanded - 20927 MYOB version 6 crashes when printing - 22085 Roller Coaster Tycoon can't change the screen resolution - 23148 Lotus Freelance Graphics 2.1 reports a C runtime error and exits - 24823 Miranda IM crashes with a modern contact list plugin - 26656 Cherry-SMS desktop app crashes / shows no country code - 26791 backtraces broken on gcc 4.7 - 28148 Neuro Hunter: certain effects are invisible - 28189 regsvr32: No usage in wineconsole - 29929 Demo installer stuck at program folder selection - 30805 Graphical glitch in the menu of Medieval total war - 30873 BMFont crashes on visualise option or save bitmap font as - 31228 "A simple IOCP Server/Client Class" locks up in GetMessage - 31694 A ton of 'error loading char 255 - bad news!' errors when compiling wine with newer Freetype - 31757 Adobe Application Manager 6.x/7.x download fails with error code A12E5 (winhttp request headers missing byte range) - 32127 Oblivion Launcher crash on start - 32214 Shaiya Online (MMORPG, Aeria Games) crashes on startup - 32550 Points2Grid crashes on calculation - 33831 AliWangwang hangs before login - 33849 Multiple 64-bit kernel drivers crash on access to KI_USER_SHARED_DATA range (0xfffff78000000000) (Tages DRM, Comodo Backup) - 34112 Skilors Grooveshark Downloader installer crashes - 34357 TaxAct 2012 and 2013 crash on startup - 34406 Finale Notepad 2012 doesn't copy/create user files on program start - 34843 Garmin BaseCamp 4.1.2 fails due to unimplemented gdiplus.GdipCreateRegionRgnData - 35537 Easy Bridge version 4.0.2 installer crashes - 35540 Netgear Powerline 3.1: desktop shortcut blank - 35775 Multiple Realarcade installers crash on startup due to IFile::PutAttributes method stub - 35949 Starcraft Campaign Editor does not highlight links in triggers on hover - 36192 valgrind shows a definite leak in mmdevapi/tests/capture.c - 36235 valgrind shows 3 leaks in amstream/tests/amstream.c - 36318 valgrind shows a leak in quartz/tests/filtermapper.c - 36321 valgrind shows a possible leak in quartz/tests/referenceclock.c - 36324 valgrind shows a leak in rpcrt4/tests/ndr_marshall.c - 36555 valgrind shows a definite leak in amstream/tests/amstream.c - 36780 Tomb Raider III (steam) crashes - 36916 Command and Conquer Tiberium Wars Demo reports 'Please make sure you have DirectX 9.0 or higher installed.' - 36953 Galactic Civilizations II: stars not rendered - 37303 Change of paper size in print dialog do not update DEVMODE dmFormName member - 37307 Urban Assault black screen when using software renderer (incorrect device enumeration order) - 37403 Regedit: Wrong default registry key is selected - 37502 Naturosoft Pro fails on startup with 'Run-time error 445: Object doesn't support this action' (needs richedit:ITextRange_fnExpand method implementation) - 37767 IOCTL_DVD_READ_STRUCTURE expects the wrong size of output buffer for some requests - 38114 Steam client doesn't allow to install games in different locations (needs kernel32.GetVolumePathName implementation) - 38364 AutoPatcher Updater 1.4.x needs IFileSystem3::GetSpecialFolder() - 38411 3DMark05 v1.30 crashes during system info scan (needs support for 'Win32_Process' WMI class 'WorkingSetSize' property) - 38470 __chkstk not implemented on ARM - 38517 Winhttprequest doesn't keep user logged in - 38525 Winhttprequest follows redirects to wrong url - 38624 jre-8u45-windows-i586.exe installer exits silently (needs advapi32.dll GetWindowsAccountDomainSid stub) - 38638 Bad text encoding output in regsvr32 console output - 38645 QQ 6.x crashes after open the qqzone tab (webkit crash) - 38691 Dia Portable 0.97 crashes on startup in libcairo-2 - 38695 valgrind shows uninitialized memory in dlls/gdi32/freetype.c:WineEngInit() (win64) - 38713 Link failure due to use of libunwind in ntdll - 38719 64-bit ARM Windows applications from Windows SDK for Windows 10 crash when accessing TEB/PEB members (AArch64 platform specific register X18 must be reserved for TEB) - 38739 valgrind shows a possible leak in ole32/tests/usrmarshal.c - 38747 msvcrt.dll does not implement _getwch, _getwche, and _ungetwch - 38752 Foobar2000 UPnP/DLNA media server hangs on exit - 38758 SlingPlayer 1.x installers fail - 38764 Improper device request/IRP handling causes heap corruption in wineserver - 38769 Additional AES algorithms in schannel break wine build - 38783 64bit msys32 crashes on unimplemented RtlCopyMemory + 3077 WeatherScope: Right mouse button stuck + 6955 Multiple games need software vertex blending implementation (NOLF2, Divinity 2, Dark Age of Camelot, Warhammer Online, PSU:AOTI) + 9210 3DMark06 doesn't recognize Pixel Shaders 2.0 + 11499 sound effects not played correctly Battlefield 1942 + 15924 VT Trader freezes during login + 17402 Battlefield 2 runs unplayably slow (and mission loading takes longer) on ATi with GLSL + 17597 CharmTale2 crashes when releasing mshtml + 22384 DbgHelp doesn't support DWARF-2 on Mac OS X + 22579 Outlook Express does not show menu bar + 22782 Battlefield 1942: missing some textures inside vehicles + 24850 Explorer++ resets custom toolbar buttons on each startup + 25289 Civilization 4: fails with 'error loading shader libraries' unless native d3dx9_26 is used + 26262 No video output in Commandos - Behind Enemy lines + 27286 Source Insight: Crashes when jumping to function definition. + 28125 Microsoft 'ctfmon.exe' crashes on unimplemented function msctf.dll.TF_InitMlngInfo + 28875 NullDC 1.0.4 (Dreamcast emulator) crashes when starting system (shader 'register' keyword used at global scope) + 29326 Magicka crashes on audio init with winealsa.drv + 29636 QQ International crashes after login + 30686 Word 2010 Pro Plus adds spaces before umlauts + 31001 SecureCRT: could not write to the host key database file + 31156 Skyrim does not work with ENB + 31391 anarchy online game crashing after login + 33907 Civilization 4: missing some sound (could not read file) + 34945 AppleWin 1.23.0: CPU usage is very high when should be minimal + 35192 Multiple Adobe applications crash on unimplemented function KERNEL32.dll.CreateThreadpool (Vista+ API)(Lightroom 5.x, Creative Cloud) + 35789 Morrowind random crashes during game play. + 36164 valgrind shows an unitialized variable in programs/cmd/tests/batch.c + 36171 valgrind shows several leaks in winmm/waveform.c + 36194 valgrind shows some possible leaks in mmdevapi/tests/dependency.c + 36236 valgrind shows a leak in comctl32/tests/propsheet.c + 36265 valgrind shows a couple leaks in dmband/tests/dmband.c + 36270 valgrind shows several leaks in dmcompos/tests/dmcompos.c + 36271 valgrind shows several leaks in dmime/tests/dmime.c + 36273 valgrind shows several leaks in dmstyle/tests/dmstyle.c + 36357 valgrind shows a leak in dswave/tests/dswave.c + 36364 valgrind shows a few leaks in ieframe/tests/intshcut.c + 36837 Steam fallout new vegas error + 37306 Multiple applications trying to use Vista+ Thread Pool Timer API crash on startup with Wine configured as Vista or higher ('CreateThreadpoolTimer')(64-bit ApexDC 1.6.0, Watchtower Library 2014) + 38474 Quake Live launcher fails to start + 38492 vcrun2008 does not install via Winetricks under Kubuntu 15.04. Works in Kubuntu 14.04. + 38493 Steam steamwebhelper based on CEF 41.x crashes in Win7 mode (needs Kernel32.SetFileCompletionNotificationModes) + 38510 STDU (Scientific and Technical Documentation Utility) Viewer v1.6.375 crashes when opening PDF file (typelib information for marshaller from registry-free COM server) + 38660 NUMA Explorer crashes on unimplemented function KERNEL32.dll.GetNumaProcessorNode + 38714 64-bit ARM Windows applications from Windows SDK for Windows 10 crash in entry (loader needs to set/randomize security cookie for PE modules) + 38796 dwrite analyzer test crashes on my system + 38822 FotoSketcher Portable 3.00 reports 'Exception externe C06D007F' on startup when running as 'Windows Vista' or higher (wants UxTheme.dll 'DrawThemeTextEx') + 38832 Painting artifacts when moving a window that clips its children + 38864 Microsoft Lync Basic 2013 (MS Office 15.0) installer crashes ---------------------------------------------------------------- -Changes since 1.7.45: +Changes since 1.7.46: -Akihiro Sagawa (1): - winetest: Add SystemPreferredUILanguages to the log. +Aaryaman Vasishta (4): + d3drm/tests: Add test for IDirect3DRM*::CreateDeviceFromClipper. + d3drm: Fix function signature for IDirect3DRM3::CreateDeviceFromSurface. + d3drm/tests: Add test for IDirect3DRM*::CreateDeviceFromSurface. + d3drm/tests: Add test for IDirect3DRM*::CreateDeviceFromD3D. + +Alex Henrie (1): + cmd: Consistently wrap lines to 75 characters. + +Alexandre Julliard (8): + msvcirt/tests: Fix comparison with EOL. + include: Add ddk/ prefix when including ddk headers. + server: Pass the device client pointer as part of the IRP parameters. + server: Queue an IRP_MJ_CREATE request on file creation. + server: Queue an IRP_MJ_CLOSE request on file destruction. + ntoskrnl: Implement creation and destruction of file objects. + server: Pass the file instead of the device pointer in all IRP requests. + ntoskrnl: Forward IRP_MJ_CREATE and IRP_MJ_CLOSE requests to the loaded driver. + +Alistair Leslie-Hughes (2): + d3drm: Add DllCanUnloadNow, DllGetClassObject stubs. + gdiplus: GdipConvertToEmfPlus parameter succ is optional. + +André Hentschel (2): + ntdll: Silence warning about TAPE_GetStatus when sys/mtio.h is not available. + ntdll: Randomize security cookie when available. + +Aric Stewart (17): + hid: Implement HidP_GetCaps. + hid: Implement HidP_GetButtonCaps. + hid: Implement HidP_GetValueCaps. + hid: Implement HidP_GetUsages. + hid: Implement HidP_GetUsageValue. + hid: Implement HidP_InitializeReportForID. + hid: Implement HidD_GetPreparsedData and HidD_FreePreparsedData. + hid: Implement HidD_GetInputReport. + hid: Implement HidD_GetAttributes. + hid: Implement HidP_MaxUsageListLength. + hid: Implement HidP_GetScaledUsageValue. + wine.inf: Add Dev Class for HID devices. + include: Add ddk/hidport.h. + include: New ddk/hidtypes.h include file. + include: Add HID_XFER_PACKET and HID_REVISION to hidclass.h. + include: Add IRP_MJ_POWER minor function codes. + hidclass.sys: Add hidclass.sys. + +Austin English (2): + davclnt: Add stub dll. + d3d11: Add a stub for D3D11CreateDeviceAndSwapChain. + +Bernhard Übelacker (8): + msi/tests: Test MsiSourceListEnumMediaDisks with volumeLabel and diskPrompt as NULL. + msi: Remove shortcut which calls RegEnumValueW with value and val_count as NULL. + mpr/tests: Add tests for WNetCachePassword and friends. + mpr: Call RegEnumValueA with valid value parameter. + dwrite: Call RegEnumValueW with value and val_count parameters. + regedit: Call RegEnumValueW with value and val_count parameters. + oleview: Call RegEnumValueW with value and val_count parameters. + advapi32: Fail in RegEnumValue on missing value or val_count parameters. + +Damjan Jovanovic (1): + ole32: Convey the Alt button state to the drop target. + +Daniel Lehman (3): + msvcp90: Copy name in _Getctype (Valgrind). + msvcp90: Make argument to _Locinfo__Getdays/months const. + msvcp110: Add export for facet dtor. + +Dmitry Timoshkov (3): + user32/tests: Add some tests to show that WS_CLIPCHILDREN doesn't exclude children from update region. + winex11: Don't call ExcludeUpdateRgn for a window with WS_CLIPCHILDREN style. + ole32: Accept STG_E_UNIMPLEMENTEDFUNCTION when ILockBytes implementation doesn't support locking. -Alex Henrie (2): - riched20: Fix link notification conditions and add tests. - user32: Send BM_SETCHECK before WM_CAPTURECHANGED and add tests. - -Alexandre Julliard (1): - d3dcompiler_43: Add a helper function for register token to avoid compiler warnings. - -Alistair Leslie-Hughes (8): - scrrun: Implement ITextStream Close. - d3dcompiler_46: Add stub dll. - d3dcompiler_47: Add stub dll. - dpnet: Correct adding components in Duplicate. - d3dcompiler: Share the source with d3dcompiler_46. - d3dcompiler: Rename d3dcompiler_43_main.c to main.c. - d3dcompiler: Share the source with d3dcompiler_47. - dpnet: Don't return partially initialized object. - -Andrew Eikum (4): - xaudio2_7: Move object creation to avoid forward declaration. - xaudio2_7: Simplify object creation. - xaudio2_7: Wrap long lines. - include: Upgrade interface definitions to XAudio2 2.8. - -André Hentschel (7): - include: Rename 64-bit PState to 32-bit Cpsr on ARM64. - ntdll: Implement RtlCaptureContext on ARM64. - ntdll: Fix CONTEXT_ARM in RtlCaptureContext. - winebuild: Create stubs for ARM64. - ntdll: Set platform register x18 to TEB on ARM64. - ntdll: Set TPIDRURW inline on ARM. - include: Add IMAGE_LOAD_CONFIG_DIRECTORY64 definition. - -Aric Stewart (4): - include: Add ddk/hidclass.h. - include: Add ddk/hidpi.h. - hid: Break HidD functions out into their own module. - hid: Translate HidD_ functions to their IOCTLs. - -Bernhard Übelacker (2): - comctl32/tests: Free memory used by property sheet page (Valgrind). - advapi32: Fix RegEnumValueW when enumerating long values. - -Bruno Jesus (6): - dmband: Don't fake success on IDirectMusicUtils_IPersistStream_ParseReference. - dmime: Don't fake success on IDirectMusicUtils_IPersistStream_ParseReference. - ws2_32/tests: Add UDP select() test for unbound socket. - ws2_32: Trace accepted socket. - ws2_32: Add a helper to get socket type. - ws2_32: UDP sockets can write data even when unbound. - -Daniel Lehman (1): - msvcp90: Set _Locimp vtable in _Locimp ctors (Valgrind). - -Dmitry Timoshkov (1): - gdiplus: Implement GdipCreateRegionRgnData. - -Erich Hoover (7): - ntdll: Fix IOCTL_DVD_READ_STRUCTURE expected output size. - kernel32: Implement GetVolumePathName. - kernel32/tests: Convert GetVolumePathName tests into a list. - kernel32/tests: Add a bunch more GetVolumePathName tests. - kernel32: Handle semi-DOS paths in GetVolumePathName. - kernel32: Handle bogus DOS paths in GetVolumePathName. - kernel32: Handle device paths in GetVolumePathName. - -Gerald Pfeifer (2): - winedbg: Avoid "uninitialized variable" compiler warning in types_extract_as_longlong. - oleaut32: Fix indentation in test_safearray. - -Hans Leidekker (24): - qmgr: Use winhttp for HTTP transfers instead of wininet. - qmgr: Add a stub implementation of IBackgroundCopyJobHttpOptions. - qmgr: Implement IBackgroundCopyJobHttpOptions::SetSecurityFlags and IBackgroundCopyJobHttpOptions::GetSecurityFlags. - qmgr: Implement IBackgroundCopyJobHttpOptions::SetCustomHeaders and IBackgroundCopyJobHttpOptions::GetCustomHeaders. - qmgr: Implement IBackgroundCopyJob::SetCredentials and IBackgroundCopyJob::RemoveCredentials. - qmgr: Implement IBackgroundCopyJob::Cancel. - qmgr: Don't inline transitionJobState. - qmgr/tests: Add tests. - winhttp: Store credentials set with WinHttpSetCredentials separately from username and password set through options. - winhttp: Improve parsing of cookie values. - winhttp: Correctly handle relative redirect paths. - winhttp: Keep the session open in the request object. - advapi32/tests: Add tests to show that reading the SACL requires a special privilege. - winhttp/tests: Fix a test failure on win2k. - winhttp: Fix handling of the headers length parameter in WinHttpAddRequestHeaders and WinHttpSendRequest. - msi/tests: Fix test failures on win2k3. - msi: Open database cabinet streams through the streams implementation. - wbemprox: Fix some memory leaks (Coverity). - wbemprox: Implement Win32_OperatingSystem.Primary. - wbemprox: Implement Win32_Process.WorkingSetSize. - winhttp: Fix a couple of corner cases in header processing. - winhttp: Coalesce cookie headers. - winhttp: Perform a case sensitive match on cookie names. - winhttp: Store cookies in reverse order. +Gerald Pfeifer (1): + widl: Fix indentation in the EXPR_ADDRESSOF case in resolve_expression. + +Hans Leidekker (1): + msi/tests: Avoid test failures on win2k3. Henri Verbeet (10): - wined3d: Use surface_get_rect() in wined3d_surface_update_overlay(). - wined3d: Implement SM4 discard in the GLSL shader backend. - d2d1: Fix the ID2D1Factory::CreatePathGeometry() declaration. - d2d1: Implement d2d_factory_CreatePathGeometry(). - d2d1: Implement d2d_path_geometry_Open(). - d2d1: Implement d2d_geometry_sink_AddLine(). - d2d1: Implement d2d_geometry_sink_AddQuadraticBezier(). - d2d1: Implement d2d_geometry_sink_AddBezier(). - d2d1: Implement d2d_text_renderer_DrawGlyphRun(). - d3d10core: Translate d3d10 usage to wined3d usage for buffers. - -Hugh McMaster (7): - regsvr32: Move /i command line code to a separate function. - regsvr32: Convert if-else block to switch statement. - net: WriteFile should output the number of bytes in the char array, not the length of the WCHAR array. - regsvr32: Convert codebase to Unicode. - regsvr32: Add WriteFile fallback if WriteConsole fails. - regsvr32: Make Dll* exports WINAPI. - regsvr32: Clean up and update comments to reflect changes to the codebase. - -Huw D. M. Davies (7): - oleaut32/tests: Add broken behaviour on Win 2003. - user32/tests: Add some optional messages for Win XP. - user32/tests: Try to fix the test failures on Win 2k. - gdi32/tests: Fix Courier test on Arabic locales. - gdi32/tests: Japanese Win 7 uses MS Shell Dlg as its default GUI font. - Revert "advapi32: Fix RegEnumValueW when enumerating long values.". - shell32/tests: Don't leave behind open explorer windows. - -Iván Matellanes (9): - msvcirt: Add implementation of streambuf::sgetc. - msvcirt: Add implementation of streambuf::sputc. - msvcirt: Print error messages in unimplemented functions. - msvcirt: Add implementation of streambuf::xsgetn. - msvcirt: Add implementation of streambuf::xsputn. - msvcirt: Add implementation of streambuf::sgetn/sputn. - msvcirt: Add implementation of streambuf::snextc. - msvcirt: Add implementation of streambuf::sbumpc. - msvcirt: Add implementation of streambuf::stossc. - -Jacek Caban (18): - scrrun: Added IFile::put_Attributes imeplementation. - wininet: Get rid of no longer needed read_chunked field. - wininet: Don't pass BLOCKING_WAITALL to NETCON_recv in netconn_read. - secur32: Added support for a few more algorithms in schannel_get_cipher_algid. - secur32: Use gnutls_cipher_get_block_size to get cupher block size. - secur32: Fixed compilation on with gnutls. - secur32: Fixed compilation on very old gnutls versions. - mshtml: Use test.winehq.org over http in img_onload tests. - wininet: Get rid of unneeded MSG_WAITALL support in NETCON_recv. - wininet: Don't use blocking_mode_t in netconn.c. - mshtml: Added IHTMLXMLHttpRequest::onreadystatechange property implementation. - wininet: Call set_socket_blocking always and only when needed. - wininet: Cache blocking state in netconn_t. - urlmon/tests: Skip https tests on platforms that don't support them. - msscript.ocx: Added stub DLL. - msscript.ocx: Added typelib. - msscript.ocx: Added DLL registration implementation. - msscript.ocx: Added ScriptControl class factory. - -Jared Smudde (1): - winhlp32: Move Always on top to Options. - -Ken Thomases (12): - configure: Only check for libunwind.h on OS X. - dbghelp: Fix STABS support for 64-bit on OS X. - dbghelp: Eliminate an unnecessary parameter from macho_load_debug_info(). - dbghelp: Fix a leak of the Mach-O module structure by adding a module_remove callback. - dbghelp: Enable enumerating and loading 64-bit Mach-O modules. - dbghelp: Remove the unused arch_size field of struct macho_file_map. - dbghelp: Use existing IMAGE_NO_MAP constant instead of redundant MACHO_NO_MAP. - dbghelp: Move the macho_file_map structure into image_file_map. - dbghelp: For Mach-O, keep the module file mapped for as long as the module is tracked. - dbghelp: Implement the image_private.h functions for Mach-O modules. - dbghelp: Add partial support for version 3 of DWARF CIEs which are generated by Clang/LLVM. - dbghelp: Parse the DWARF information in Mach-O modules. - -Marcus Meissner (3): - shlwapi: Add missing braces (Coverity). - oledb32: Free memory on error exit (Coverity). - kernel32: GetCurrentDirectoryW gets characters, not bytes. - -Matteo Bruni (9): - wined3d: Handle per-vertex point size in the GLSL FFP replacement. - wined3d: Cleanup and simplify texture sampling code generation. - wined3d: Drop WINED3D_RS_TEXTUREPERSPECTIVE handling. - wined3d: Make use of the EXT_BLEND_SUBTRACT flag. - d3dcompiler: Handle redefining an intrinsic function as a user-defined function. - d3dcompiler: Handle writemask in make_assignment(). - d3dcompiler: Parse ": register()" syntax. - wined3d: Drop unused gl_info parameter from shader_glsl_ffp_vertex_lighting(). - wined3d: Don't flag WINED3D_SHADER_CONST_FFP_PROJ on transformed <-> untransformed vdecl change. - -Michael Müller (7): - wininet: Use random names when caching very long urls. - advapi32/tests: Add tests for GetWindowsAccountDomainSid. - advapi32: Add initial implementation for GetWindowsAccountDomainSid. - fltlib: Add stub for FilterLoad. - wininet/tests: Add tests for overriding host header. - rpcrt4: Fix arguments of HttpAddRequestHeaders. - wininet: Fix arguments of HttpAddRequestHeaders. - -Michael Stefaniuc (25): - dmband: Pass the object instead of the iface to helpers. - dmband: Use the generic DirectMusicObject implementation for DMBand. - dmband/tests: Add IPersistStream tests for DMBandTrack. - dmcompos/tests: Add IPersistStream tests for DM*Track. + d2d1: Implement d2d_d3d_render_target_DrawGlyphRun(). + d2d1: Implement d2d_text_renderer_IsPixelSnappingDisabled(). + d2d1: Implement d2d_text_renderer_GetCurrentTransform(). + d2d1: Implement d2d_text_renderer_GetPixelsPerDip(). + include: Add Direct2D error codes to winerror.h. + d2d1: Only allow path geometries to be opened once. + d2d1: Implement d2d_geometry_sink_BeginFigure() and d2d_geometry_sink_EndFigure(). + d2d1: Implement d2d_path_geometry_GetFigureCount(). + d2d1: Implement d2d_path_geometry_GetSegmentCount(). + d2d1: Implement d2d_d3d_render_target_DrawText(). + +Hugh McMaster (1): + wineconsole: Add HKCU registry entries for Insert Mode. + +Huw D. M. Davies (15): + comctl32: Add helpers to set the button text. + comctl32: Add a helper to free button text. + comctl32: Don't leak button text. + comctl32: Implement toolbar saving. + comctl32: The number of buttons is set by the first TBN_RESTORE notification. + comctl32: All negative entries in the toolbar save state are special cases. + comctl32: Reset the string and lparam fields between notifications. + riched20: Free the script cache when updating the default style. + comctl32: Set the default separator width when notifying a -ve cmd id. + comctl32: Implement the legacy notifications during restore. + dwrite/tests: Add tests for GetGdiCompatibleMetrics. + comctl32/tests: Extra WM_PAINT messages are occasionally sent on Vista and Win 7. + shell32/tests: Win XP splits the args if there are spaces in the path. + shell32/tests: Win 2k doesn't cope with spaces in the path. + shell32: Fix threading model for the Known Folder Manager and Shell Link objects. + +Iván Matellanes (6): + msvcirt: Add implementation of streambuf::pbackfail. + msvcirt: Add implementation of streambuf::sputbackc. + msvcirt: Add implementation of streambuf::dbp. + msvcirt: Add stub of class ios. + msvcirt/tests: Add initial tests for ios. + msvcirt: Implement ios constructors and assignment. + +Jacek Caban (12): + user32: Limit number of hooks called recursively. + mshtml: Initialize output paramter before test call. + vbscript: Treat empty regexp pattern the same way as NULL pattern. + msscript.ocx: Added IScriptControl stub implementation. + mshtml: Added support for binding XHR events. + wincrypt.h: Added some missing constants. + secur32: Added SECPKG_ATTR_SUPPORTED_ALGS tests. + mshtml: Added nsIIOService::NewChannelFromURI2 semi-stub implementation. + msscript.ocx: Added support for IDispatch functions. + dvdmedia.h: Added AMINTERLACE_* defines. + wincodec.idl: Added missing GUID_WICPixelFormat32bpp* declarations. + shdocvw: Call DisableThreadLibraryCalls in DllMain. + +Józef Kucia (4): + wined3d: Show fixme about unimplemented vertex processing once. + wined3d: Implement vertex blending in glsl_vertex_pipe. + wined3d: Implement normals transformation for vertex blending. + d3d9/tests: Add basic tests for vertex blending. + +Ken Thomases (4): + dbghelp: Fix mapping of DWARF register numbers on x86 OS X. + dbghelp: Don't parse the DWARF info from Mach-O files if we were requested to only provide public symbols. + dbghelp: Add support for loading an external DWARF debug info file associated with a Mach-O module. + Revert "configure: Prefer stabs debug info on Mac OS.". + +Matteo Bruni (12): + wined3d: Fix GLSL backend with non-GLSL vertex and pixel pipeline combination. + wined3d: Replace an open-coded implementation of LIST_FOR_EACH_ENTRY_SAFE. + wined3d: Fix NP2 fixups in GLSL fragment FFP replacement. + wined3d: Improve NP2 fixups in GLSL PS texture sampling code. + wined3d: Don't hardcode WINED3DPTEXTURECAPS_NONPOW2CONDITIONAL cap flag. + wined3d: Use a lookup table to select the sampler function name. + wined3d: Use a core-compatible GL format for ATI2N. + wined3d: Use the correct texture coordinates in swapchain_blit() in the non-glBlitFramebuffer, NP2 case. + wined3d: Add a setting for the maximum OpenGL version to use. + wined3d: Use GLSL 1.50 on core contexts. + d3d9/tests: Add a test for UpdateTexture. + d3d8/tests: Add a test for UpdateTexture. + +Michael Müller (3): + msvcrt/tests: Add additional tests for atof / strtod functions. + kernel32/tests: Add tests for GetNumaProcessorNode. + kernel32: Implement GetNumaProcessorNode. + +Michael Stefaniuc (78): + dmstyle: Move struct definitions to the files that need them. + dmstyle: Remove unused DirectMusicMelodyFormulationTrack stuff. + dmcompos: COM cleanup for IDirectMusicTrack8 of DMChordMapTrack. + dmcompos: Remove the extraneous IUnknown from DMChordMapTrack. + dmcompos: Use the generic IPersistStream for DMChordMapTrack. + dmcompos: COM cleanup for IDirectMusicTrack8 of DMSignPostTrack. + dmcompos: Remove the extraneous IUnknown from DMSignPostTrack. + dmcompos: Use the generic IPersistStream for DMSignPostTrack. + dmcompos: Mark IPersistStream_Save of DMSignPostTrack as a stub. + dmband: Add missing TRACE to QI. + dmusic: Remove old and ugly COM macros. + dmstyle: Implement the E_NOTIMPL methods of IDirectMusicTrack8. + dmstyle/tests: Add some basic DirectMusicTrack8 tests. + dmstyle: COM cleanup for IDirectMusicTrack8 of DMMuteTrack. + dmstyle: Remove the extraneous IUnknown from DMMuteTrack. + dmstyle: Use the generic IPersistStream for DMMuteTrack. + dmstyle: COM cleanup for IDirectMusicTrack8 of DMAuditionTrack. + dmstyle: Remove the extraneous IUnknown from DMAuditionTrack. + dmstyle: Use the generic IPersistStream for DMAuditionTrack. + dmstyle: COM cleanup for IDirectMusicTrack8 of DMMotifTrack. + dmstyle: Remove the extraneous IUnknown from DMMotifTrack. + dmstyle: Use the generic IPersistStream for DMMotifTrack. + kernel32/tests: The result of a comparison is already a BOOL. + explorer: Print the debug string and not the pointer to it. + riched20: Print the debug string and not the pointer to it. + dmstyle: Pass objects instead of ifaces to helpers. + dmstyle: COM cleanup for IDirectMusicTrack8 of DMCommandTrack. + dmstyle: Remove the extraneous IUnknown from DMCommandTrack. + dmstyle: Use the generic IPersistStream for DMCommandTrack. + dmstyle: COM cleanup for IDirectMusicTrack8 of DMChordTrack. + dmstyle: Remove the extraneous IUnknown from DMChordTrack. + dmstyle: Use the generic IPersistStream for DMChordTrack. + dmstyle: COM cleanup for IDirectMusicTrack8 of DMStyleTrack. + dmstyle: Remove the extraneous IUnknown from DMStyleTrack. + dmstyle: Use the generic IPersistStream for DMStyleTrack. + dmstyle: Mark IPersistStream_Save() as stub. dmime: Pass objects instead of ifaces to helpers. - dmime: Remove unused arguments from helper functions. - dmime: Use the generic DirectMusicObject implementation for DMSegment. - dmime: Use the generic DMObject implementation for DMAudioPathConfig. - dmime: Get rid of the extra pointer to a DMUS_OBJECTDESC. - dmime: Use the generic DMObject implementation for DMGraph. - dmime/tests: Add IPersistStream tests for DM*Track. - dmstyle/tests: Add IPersistStream tests for DM*Track. - dmband: IsParamSupported method doesn't crashes on NULL. - dmband: Implement the E_NOTIMPL methods of IDirectMusicTrack8. - dmband/tests: Add some basic IDirectMusicTrack8 tests. - dmcompos: IsParamSupported of DMChordMapTrack doesn't crashes on NULL. - dmcompos: Implement the E_NOTIMPL methods of IDirectMusicTrack8. - dmcompos/tests: Add some basic IDirectMusicTrack8 tests. - dmcompos: Move struct definitions to the files that need them. - dmime: Move struct definitions to the files that need them. - dmband: Pass objects instead of ifaces to helpers. - dmband: COM cleanup for IDirectMusicTrack8. - dmband: Remove the extraneous IUnknown from DMBandTrack. - dmband: Use the generic IPersistStream implementation from dmobject. - dmstyle: IsParamSupported method doesn't crashes on NULL. - -Mohamed Mediouni (1): - ntdll: Multiply r4 with the word size in ARM for __chkstk. - -Nikolay Sivov (50): - regedit: Make it possible for save/restore position on tree root. - msxml3: Handle SafeArrayAccessData() failure in load() (Coverity). - dwrite/tests: Test to show that GetCurrentTransform/GetPixelsPerDip are not really used from Draw(). - dwrite: Fix splitted range length, initial test for GetMetrics(). - dwrite: Check format directions in CreateEllipsisTrimmingSign(). - dwrite: Initial implementation of Draw() for trimming sign. - dwrite: Call GetCount() once when looking for family name. - dwrite: Fix the way drawing effects are reported for inline objects. - ole32: Marshal HDC as remotable handle. - ole32: Marshal HICON as remotable handle. - dwrite: Validate format property values. - ole32: Marshal HBRUSH as remotable handle. - oleaut32/tests: Test that user memory functions are not called. - riched20: Improve tracing for unimplemented range methods. - riched20: Implement Expand for tomStory case. - riched20/tests: Some more EM_SETSEL tests. - riched20/tests: Remove explicit todo flag values from static test data. - ole32: Fix a typo in argument name. - dwrite/tests: Initial test for GetLineMetrics(). - dwrite/tests: Initial test for GetBaseline(). - riched20: Improve tracing for unimplemented selection methods. - comctl32/monthcal: Fix title to use properly localized year/month format. - dwrite: Set cluster length together with other metrics. - dwrite: Actually set isWhitespace for space clusters. - dwrite: Count last cluster length too when building a line. - kernel32: Export RtlCopyMemory(). - ole32/tests: Fix source buffer leak (Valgrind). - amstream: Get rid of some casts by using proper iface types. - amstream/tests: Get rid of global stream pointer that we don't really need. - amstream: Release pins and streams array on instance release (Valgrind). - gdi32/freetype: Properly handle loading of FT_Long-sized types (Valgrind). - ieframe/tests: Fix some leaks (Valgrind). - oleaut32/tests: Fix stub buffer leak (Valgrind). - dwrite: Forward GetRecommendedRenderingMode() to newer method. - dwrite: Store character spacing layout settings. - quartz/tests: Get rid of some casts. - dwrite: Set line baseline/height from font metrics. - dwrite/tests: Show that line baseline is relative to this line. - dwrite: Set baseline origin Y for reported runs. - dwrite: Call SetFillMode() once per run. - amstream: Implement IDirectDrawStreamSample_GetSurface(). - amstream: Keep stream reference when creating sample. - amstream: Implement GetDirectDraw(). - amstream: Forward IUnknown methods to IAMMediaStream for streams. - qmgr: Simplify string duplication using a helper. - qmgr: Simplify GetProgress() with a structure copy. - amstream: Create a surface if it wasn't provided in CreateSample(). - dmsynth: Cleanup IDirectMusicSynth8 creation helper. - dwrite: Properly reduce glyph count of effective run. - dwrite: Fix clustermap shifting for effective run. - -Olivier F. R. Dierick (1): - kernel32: Implement SetFileCompletionNotificationModes as a stub. - -Piotr Caban (15): - msvcrt: Open console input handle with write permission so SetConsoleMode can work on it. - msvcp60: Sync spec files. - msvcrt: Write directly to the console in _putwch. - msvcrt: Fix return value of _cputs. - msvcrt: Fix return value of cputws. - msvcrt: Add _getwch implementation. - msvcrt: Add _getwche implementation. - msvcrt: Add _ungetwch implementation. - msvcr120: Add ___lc_locale_name_func implementation. - msvcp110: Use ___lc_locale_name_func in _Getctype. - msvcp110: Use ___lc_locale_name_func in _Getdateorder. - msvcp110: Fix _Collvec structure layout. - wininet: Improve handling of long URLs in CreateUrlCacheEntry function. - msvcr110: Add __crtGetLocaleInfoEx implementation. - msvcrt: Cache locale string to LCID conversion results. - -Qian Hong (2): - include: Remove duplicate macro definition in shellapi.h. - winemenubuilder: Fix copy and paste error. - -Sebastian Lackner (14): - server: Delay destruction of file object in set_irp_result. - ntoskrnl: Add initial code to emulate memory access to USER_SHARED_DATA on x86_64. - ntoskrnl: Add emulation for 'mov Ob, AL' and 'mov Ovqp, rAX' instruction. - ntoskrnl: Add emulation for 'movzx {Eb,Ew}, Gv' instruction. - kernel32/tests: Add a lot of picky GetVolumePathName tests. - kernel32/tests: Add GetVolumePathNameW tests. - ntoskrnl: Use SIZE_T to store 64-bit offset to USER_SHARED_DATA page. - advapi32/tests: Explicitly check return value of GetTokenInformation. - windowscodecs/tests: Fix test condition which is always true. - windowscodecs: Distinguish interface pointer and implementation pointer. - qcap: Distinguish interface pointer and implementation pointer for base filter. - quartz: Distinguish interface pointer and implementation pointer in multiple interfaces. - ntdll: NtMapViewOfSection should fail if both addr_ptr and zero_bits is set. - ntdll: Implement support for AT_ROUND_TO_PAGE flag in NtMapViewOfSection. - -Thomas Faber (2): - dimm.idl: Add IActiveIMMMessagePumpOwner. - msimtf: Add stub implementation for IActiveIMMMessagePumpOwner. - -Thomas Faller (2): - cmd: Fix invalid memory access. - cmd: Fix invalid "else if" execution. - -YongHao Hu (6): - msvcp110: Add tr2_sys__File_size implementation and test. - msvcp110: Add tr2_sys__Equivalent implementation and test. - msvcp110: Add tr2_sys__Current_get implementation and test. - msvcp110: Add tr2_sys__Current_set implementation and test. - msvcp110: Add tr2_sys__Make_dir implementation and test. - msvcp110: Add tr2_sys__Remove_dir implementation and test. - -Zhenbo Li (1): - mshtml/tests: Added IHTMLXMLHttpRequest tests. + dmime: DMMarkerTrack doesn't have IDirectMusicTrack8. + dmime: DMTimeSigTrack doesn't have IDirectMusicTrack8. + dmime/tests: Deal with DMTrack objects without IDirectMusicTrack8. + dmime: COM cleanup for IDirectMusicTrack of DMMarkerTrack. + dmime: Remove the extraneous IUnknown from DMMarkerTrack. + dmime: Use the generic IPersistStream for DMMarkerTrack. + dmime: COM cleanup for IDirectMusicTrack of DMTimeSigTrack. + dmime: Remove the extraneous IUnknown from DMTimeSigTrack. + dmime: Use the generic IPersistStream for DMTimeSigTrack. + dmstyle/tests: Remove skips wrongly copied from the dmime tests. + dmime: Implement the E_NOTIMPL methods of IDMTrack8 for DMSeqTrack. + dmime: Implement the E_NOTIMPL methods of IDMTrack8 for DMSysExTrack. + dmime: COM cleanup for IDirectMusicTrack of DMSeqTrack. + dmime: Remove the extraneous IUnknown from DMSeqTrack. + dmime: Use the generic IPersistStream for DMSeqTrack. + dmime: COM cleanup for IDirectMusicTrack of DMSysExTrack. + dmime: Remove the extraneous IUnknown from DMSysExTrack. + dmime: Use the generic IPersistStream for DMSysExTrack. + dmime: Implement the E_NOTIMPL methods in DMLyricsTrack. + dmime: COM cleanup for IDirectMusicTrack of DMLyricsTrack. + dmime: Remove the extraneous IUnknown from DMLyricsTrack. + dmime: Use the generic IPersistStream for DMLyricsTrack. + dmime: Implement the E_NOTIMPL methods in DMParamControlTrack. + dmime: COM cleanup for IDirectMusicTrack of DMParamControlTrack. + dmime: Remove the extraneous IUnknown from DMParamControlTrack. + dmime: Use the generic IPersistStream for DMParamControlTrack. + dmime: Implement the E_NOTIMPL methods in DMWaveTrack. + dmime: COM cleanup for IDirectMusicTrack of DMWaveTrack. + dmime: Remove the extraneous IUnknown from DMWaveTrack. + dmime: Use the generic IPersistStream for DMWaveTrack. + dmime: Implement the remaining E_NOTIMPL methods of IDirectMusicTrack8. + dmime/tests: Add some basic IDirectMusicTrack8 tests. + dmime: COM cleanup for IDirectMusicTrack of DMSegTriggerTrack. + dmime: Remove the extraneous IUnknown from DMSegTriggerTrack. + dmime: Use the generic IPersistStream for DMSegTriggerTrack. + dmime: COM cleanup for IDirectMusicTrack of DMTempoTrack. + dmime: Remove the extraneous IUnknown from DMTempoTrack. + dmime: Use the generic IPersistStream for DMTempoTrack. + dmsynth: Remove a now unused macro. + dmstyle: Remove an unused variable. + dmstyle: Remove a not very useful macro. + +Nikolay Sivov (37): + user32: Added stubs for ShutdownBlockReasonCreate/ShutdownBlockReasonDestroy. + gdiplus: Check GetMetadataFormat() return value (Coverity). + ole32: Handle EnumElements() failure (Coverity). + shell32: Fix memory leak on NULL return length (Coverity). + winecfg: Fix a leak when applying drive changes (Coverity). + winecfg: Fix string buffer length for override settings (Valgrind). + oleaut32: Use context redirects when creating typelib marshaler proxy/stub. + gdi32: Add a separate helper to load FT_Short values (Coverity). + kernel32: Simplify the way EnumCalendarInfo vs EnumCalendarInfoEx are handled internally. + kernel32: Implement EnumCalendarInfoExEx(). + qmgr: Fix WINHTTP_OPTION_CONTEXT_VALUE data pointer (Coverity). + dwrite: Update current line count when adding metrics for new line. + dwrite: Fix number of clusters effective run is built on. + dwrite: Clip range length to text length when updating breakpoints. + dwrite: Always set canWrapLineAfter for last cluster. + gdi32: Clarify offsets and sizes in vdmx table lookup code. + dwrite: Initial layout GetMetrics() implementation. + dwrite: Add last cluster width to line width. + uxtheme: Partial implementation of DrawThemeTextEx. + dwrite: Store layout width/height directly in metrics structure. + dwrite: Reset calculated text height before updating it. + dwrite: Remove separate line count layout field. + dwrite: Make it possible to set text alignment on created layout. + dwrite: Implement leading and trailing text alignment modes. + dwrite: Implement paragraph alignment. + dwrite/tests: Test that pair kerning affects shaping. + shell32: Handle string-to-guid conversion errors (Coverity). + gdiplus: Remove always true condition (Coverity). + shell32/tests: Try harder to close Open With window. + dwrite: Remove a couple of useless checks. + dwrite: Implement centered text alignment. + dwrite: Implement GetPanose(). + dwrite/tests: Extend GetGdiCompatibleMetrics() test to test DWRITE_FONT_METRICS1 as well. + dwrite: Implement GetGdiCompatibleMetrics(). + dwrite: Implement SetReadingDirection() for layout. + dwrite: Fix alignment shifts in RTL case. + dwrite: Properly set run origin in DWRITE_READING_DIRECTION_RIGHT_TO_LEFT case. + +Olivier F. R. Dierick (2): + kernel32: Fail gracefully in K32EnumProcessModules with NULL pointer. + psapi/tests: Add test for EnumProcessModules with NULL pointer. + +Piotr Caban (4): + msvcirt: Fix ostrstream::ostrstream() constructor stub. + msvcrt: Add ismbblead_l implementation. + msvcrt: Add _mbscat_s_l implementation. + msvcirt: Fix leak in ~ios and ios::init implementation. + +Sebastian Lackner (51): + msvcrt: Set *end to NULL when strtod is called with NULL pointer string. + windowscodecs: Distinguish interface and implementation pointer for IcnsEncoder. + windowscodecs: Fix build failure on OSX. + ntdll: Implement TpSimpleTryPost and basic threadpool infrastructure. + ntdll: Implement TpSetPoolMaxThreads. + ntdll: Implement TpSetPoolMinThreads. + ntdll: Implement threadpool cleanup group functions. + ntdll/tests: Add tests for TpAllocCleanupGroup and related functions. + ntdll: Implement threadpool work item functions. + ntdll/tests: Add basic tests for threadpool work items. + ntdll/tests: Add threadpool scheduler tests for work items. + ntdll: Add support for threadpool group cancel callback. + ntdll/tests: Add tests for threadpool group cancel callback. + ntdll: Add support for threadpool finalization callback. + ntdll: Implement threadpool RaceDll environment variable. + ntdll: Implement instance objects and the TpCallbackMayRunLong function. + ntdll: Implement TpCallbackLeaveCriticalSectionOnCompletion. + ntdll: Implement TpCallbackReleaseMutexOnCompletion. + ntdll: Implement TpCallbackReleaseSemaphoreOnCompletion. + ntdll/tests: Add tests for TpCallbackReleaseSemaphoreOnCompletion and finalization callback. + ntdll: Implement TpCallbackSetEventOnCompletion. + ntdll: Implement TpCallbackUnloadDllOnCompletion. + ntdll: Implement TpDisassociateCallback and add a separate group completion event. + ntdll/tests: Add tests for TpDisassociateCallback. + ntdll: Implement TpAllocTimer and TpReleaseTimer. + ntdll: Implement threadpool timer queues. + ntdll/tests: Add basic tests for threadpool timer functions. + ntdll/tests: Add tests for threadpool timer merging. + kernel32: Forward threadpool cleanup group functions to ntdll. + kernel32: Forward threadpool work functions to ntdll. + kernel32: Forward threadpool timer functions to ntdll. + kernel32: Forward threadpool instance functions to ntdll. + kernel32: Forward remaining threadpool functions to ntdll. + kernel32/tests: Fix leak of threadpool object. + ntdll: Implement TpAllocWait and TpReleaseWait. + ntdll: Implement threadpool wait queues. + ntdll: Implement TpSetWait and TpWaitForWait. + ntdll/tests: Add basic tests for threadpool wait objects. + ntdll/tests: Add threadpool wait tests with more than 63 objects. + ntdll: Try to merge threadpool wait queue buckets if possible. + kernel32: Forward threadpool wait functions to ntdll. + ntdll: Add missing calls to RtlExitUserThread. + ntdll/tests: Add tests for RtlCompressBuffer. + ntdll: Implement semi-stub for LZNT1 compression in RtlCompressBuffer. + ntdll/tests: Add tests for RtlGetCompressionWorkSpaceSize. + ntdll: Implement semi-stub for RtlGetCompressionWorkSpaceSize. + ntdll: Implement RtlDecompressFragment. + ntdll/tests: Add tests for RtlDecompressBuffer. + ntdll/tests: Add tests for RtlDecompressFragment. + user32/tests: Add tests for calling GetKeyState from thread without message queue. + server: Add fallback to desktop keystate in get_key_state wineserver call. + +Thomas Faber (7): + shell32/tests: Do not leak shell folder references. + shell32: Add missing parameter check in ISF_Desktop_fnQueryInterface. + shell32: Use QueryInterface in FolderView_GetFolder. + shell32/tests: Remove a misleading test. + shell32/tests: Fix an ok() print. + shell32/tests: Destroy shell view windows. + shell32/tests: Test that shell view windows reference their shell view. + +Vincent Povirk (3): + winex11.drv: Track external changes to _NET_WM_STATE in net_wm_state. + ole32: Add a storage test using a custom ILockBytes. + ole32: Use grfLocksSupported to decide when LockRegion is implemented. + +YongHao Hu (3): + msvcp110: Add tr2_sys__Copy_file implementation and test. + msvcp110: Add tr2_sys__Rename implementation and test. + msvcp110: Add tr2_sys__Statvfs implementation and test. + +Zhenbo Li (5): + mshtml: Add IHTMLXMLHttpRequestFactory::create() method implementation. + mshtml: Add IHTMLXMLHttpRequest:open() method implementation. + mshtml: Add IHTMLXMLHttpRequest::readyState property implementation. + mshtml/tests: Wait for the document to be completely loaded. + mshtml: Add IHTMLXMLHttpRequest::send() method implementation. -- Alexandre Julliard diff -Nru wine-staging-1.7.46~ubuntu14.10.1/configure wine-staging-1.7.47~ubuntu14.10.1/configure --- wine-staging-1.7.46~ubuntu14.10.1/configure 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/configure 2015-07-12 05:36:18.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for Wine 1.7.46. +# Generated by GNU Autoconf 2.69 for Wine 1.7.47. # # Report bugs to . # @@ -580,8 +580,8 @@ # Identity of this package. PACKAGE_NAME='Wine' PACKAGE_TARNAME='wine' -PACKAGE_VERSION='1.7.46' -PACKAGE_STRING='Wine 1.7.46' +PACKAGE_VERSION='1.7.47' +PACKAGE_STRING='Wine 1.7.47' PACKAGE_BUGREPORT='wine-devel@winehq.org' PACKAGE_URL='http://www.winehq.org' @@ -1022,6 +1022,7 @@ enable_d3dx9_42 enable_d3dx9_43 enable_d3dxof +enable_davclnt enable_dbgeng enable_dbghelp enable_dciman32 @@ -1078,6 +1079,7 @@ enable_hal enable_hhctrl_ocx enable_hid +enable_hidclass_sys enable_hlink enable_hnetcfg enable_httpapi @@ -2039,7 +2041,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Wine 1.7.46 to adapt to many kinds of systems. +\`configure' configures Wine 1.7.47 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -2108,7 +2110,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Wine 1.7.46:";; + short | recursive ) echo "Configuration of Wine 1.7.47:";; esac cat <<\_ACEOF @@ -2304,7 +2306,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Wine configure 1.7.46 +Wine configure 1.7.47 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2822,7 +2824,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Wine $as_me 1.7.46, which was +It was created by Wine $as_me 1.7.47, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -14164,33 +14166,7 @@ for ac_flag in $CFLAGS; do case $ac_flag in - -g) case $host_os in - darwin*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -gstabs+" >&5 -$as_echo_n "checking whether the compiler supports -gstabs+... " >&6; } -if ${ac_cv_cflags__gstabsp+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_wine_try_cflags_saved=$CFLAGS -CFLAGS="$CFLAGS -gstabs+" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(int argc, char **argv) { return 0; } -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_cflags__gstabsp=yes -else - ac_cv_cflags__gstabsp=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -CFLAGS=$ac_wine_try_cflags_saved -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cflags__gstabsp" >&5 -$as_echo "$ac_cv_cflags__gstabsp" >&6; } -if test "x$ac_cv_cflags__gstabsp" = xyes; then : - EXTRACFLAGS="$EXTRACFLAGS -gstabs+" -fi ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -gdwarf-2" >&5 + -g) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -gdwarf-2" >&5 $as_echo_n "checking whether the compiler supports -gdwarf-2... " >&6; } if ${ac_cv_cflags__gdwarf_2+:} false; then : $as_echo_n "(cached) " >&6 @@ -14215,7 +14191,7 @@ if test "x$ac_cv_cflags__gdwarf_2" = xyes; then : EXTRACFLAGS="$EXTRACFLAGS -gdwarf-2" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -gstrict-dwarf" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -gstrict-dwarf" >&5 $as_echo_n "checking whether the compiler supports -gstrict-dwarf... " >&6; } if ${ac_cv_cflags__gstrict_dwarf+:} false; then : $as_echo_n "(cached) " >&6 @@ -14240,7 +14216,6 @@ if test "x$ac_cv_cflags__gstrict_dwarf" = xyes; then : EXTRACFLAGS="$EXTRACFLAGS -gstrict-dwarf" fi ;; - esac ;; esac done @@ -17223,6 +17198,7 @@ wine_fn_config_dll d3dx9_43 enable_d3dx9_43 wine_fn_config_dll d3dxof enable_d3dxof clean,implib wine_fn_config_test dlls/d3dxof/tests d3dxof_test +wine_fn_config_dll davclnt enable_davclnt wine_fn_config_dll dbgeng enable_dbgeng implib wine_fn_config_dll dbghelp enable_dbghelp implib wine_fn_config_dll dciman32 enable_dciman32 implib @@ -17316,6 +17292,7 @@ wine_fn_config_dll hal enable_hal wine_fn_config_dll hhctrl.ocx enable_hhctrl_ocx clean,implib,po htmlhelp wine_fn_config_dll hid enable_hid implib +wine_fn_config_dll hidclass.sys enable_hidclass_sys implib hidclass wine_fn_config_dll hlink enable_hlink clean,implib wine_fn_config_test dlls/hlink/tests hlink_test wine_fn_config_dll hnetcfg enable_hnetcfg clean @@ -18531,7 +18508,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Wine $as_me 1.7.46, which was +This file was extended by Wine $as_me 1.7.47, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -18602,7 +18579,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -Wine config.status 1.7.46 +Wine config.status 1.7.47 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/configure.ac wine-staging-1.7.47~ubuntu14.10.1/configure.ac --- wine-staging-1.7.46~ubuntu14.10.1/configure.ac 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/configure.ac 2015-07-12 05:36:18.000000000 +0000 @@ -1839,14 +1839,11 @@ CFLAGS=$saved_CFLAGS - dnl On Darwin, prefer stabs; everywhere else, default to dwarf-2 debug info + dnl Default to dwarf-2 debug info for ac_flag in $CFLAGS; do case $ac_flag in - -g) case $host_os in - darwin*) WINE_TRY_CFLAGS([-gstabs+]) ;; - *) WINE_TRY_CFLAGS([-gdwarf-2]) - WINE_TRY_CFLAGS([-gstrict-dwarf]) ;; - esac ;; + -g) WINE_TRY_CFLAGS([-gdwarf-2]) + WINE_TRY_CFLAGS([-gstrict-dwarf]) ;; esac done @@ -2897,6 +2894,7 @@ WINE_CONFIG_DLL(d3dx9_43) WINE_CONFIG_DLL(d3dxof,,[clean,implib]) WINE_CONFIG_TEST(dlls/d3dxof/tests) +WINE_CONFIG_DLL(davclnt) WINE_CONFIG_DLL(dbgeng,,[implib]) WINE_CONFIG_DLL(dbghelp,,[implib]) WINE_CONFIG_DLL(dciman32,,[implib]) @@ -2990,6 +2988,7 @@ WINE_CONFIG_DLL(hal) WINE_CONFIG_DLL(hhctrl.ocx,,[clean,implib,po],[htmlhelp]) WINE_CONFIG_DLL(hid,,[implib]) +WINE_CONFIG_DLL(hidclass.sys,,[implib],[hidclass]) WINE_CONFIG_DLL(hlink,,[clean,implib]) WINE_CONFIG_TEST(dlls/hlink/tests) WINE_CONFIG_DLL(hnetcfg,,[clean]) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/debian/bzr-builder.manifest wine-staging-1.7.47~ubuntu14.10.1/debian/bzr-builder.manifest --- wine-staging-1.7.46~ubuntu14.10.1/debian/bzr-builder.manifest 2015-06-28 17:36:08.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/debian/bzr-builder.manifest 2015-07-12 06:20:43.000000000 +0000 @@ -1,3 +1,3 @@ -# bzr-builder format 0.4 deb-version 1.7.46 -lp:wine revid:git-v1:ae6efa469bfaecade30e160d195d607bdcdcc6ae -merge compholio-release-package lp:wine-compholio revid:git-v1:8d92e1177f7dc5ef4e9846fb1e47be2670e33306 +# bzr-builder format 0.4 deb-version 1.7.47 +lp:wine revid:git-v1:744f7b69bf4692265588e10650090ca2f5129ccd +merge compholio-release-package lp:wine-compholio revid:git-v1:cd4db49a7412ab06c72e247ac090ab8c5816b6fd diff -Nru wine-staging-1.7.46~ubuntu14.10.1/debian/changelog wine-staging-1.7.47~ubuntu14.10.1/debian/changelog --- wine-staging-1.7.46~ubuntu14.10.1/debian/changelog 2015-06-28 17:36:08.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/debian/changelog 2015-07-12 06:20:43.000000000 +0000 @@ -1,8 +1,28 @@ -wine-staging (1.7.46~ubuntu14.10.1) utopic; urgency=low +wine-staging (1.7.47~ubuntu14.10.1) utopic; urgency=low * Auto build. - -- Sebastian Lackner Sun, 28 Jun 2015 17:36:08 +0000 + -- Sebastian Lackner Sun, 12 Jul 2015 06:20:43 +0000 + +wine-staging (1.7.47) unstable; urgency=low + * Added patch to silence repeated winhttp "no support on this platform" + message. + * Added patch to silence repeated wbemprox "timeout not supported" fixme. + * Added patch to increase buffer size in widl/typegen.c to avoid buffer + overflow. + * Revert security cookie patch causing regression in multiple applications. + * Added patch to use GLX_MESA_query_renderer extension to get more exact GPU + infos. + * Added initial set of patches for multithreaded vcomp implementation. + * Added patch to avoid dereferencing NULL pointer for fonts without VDMX. + * Removed patch to implement kernel32.GetNumaProcessorNode (accepted + upstream). + * Removed patch to initialize *end with NULL on failure in msvcrt.strtod + (accepted upstream). + * Removed patchset for new Threadpool implementation (accepted upstream). + * Partially removed patches for RtlDecompressBuffer implementation (accepted + upstream). + -- Sebastian Lackner Sun, 12 Jul 2015 04:12:43 +0200 wine-staging (1.7.46) unstable; urgency=low * Add reference to upstream bug report for various patchsets. diff -Nru wine-staging-1.7.46~ubuntu14.10.1/debian/control wine-staging-1.7.47~ubuntu14.10.1/debian/control --- wine-staging-1.7.46~ubuntu14.10.1/debian/control 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/debian/control 2015-07-12 05:53:31.000000000 +0000 @@ -37,6 +37,7 @@ libmpg123-dev, libncurses5-dev | libncurses-dev, libopenal-dev (>= 1:1.12) | ubuntu-desktop (<< 1.207), + libosmesa6-dev, libpcap-dev, libpng12-dev, libpulse-dev, diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/advapi32/registry.c wine-staging-1.7.47~ubuntu14.10.1/dlls/advapi32/registry.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/advapi32/registry.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/advapi32/registry.c 2015-07-12 05:36:18.000000000 +0000 @@ -1912,8 +1912,8 @@ TRACE("(%p,%d,%p,%p,%p,%p,%p,%p)\n", hkey, index, value, val_count, reserved, type, data, count ); - /* NT only checks count, not val_count */ - if ((data && !count) || reserved) return ERROR_INVALID_PARAMETER; + if ((data && !count) || reserved || !value || !val_count) + return ERROR_INVALID_PARAMETER; if (!(hkey = get_special_root_hkey( hkey, 0 ))) return ERROR_INVALID_HANDLE; total_size = info_size + (MAX_PATH + 1) * sizeof(WCHAR); @@ -1997,8 +1997,8 @@ TRACE("(%p,%d,%p,%p,%p,%p,%p,%p)\n", hkey, index, value, val_count, reserved, type, data, count ); - /* NT only checks count, not val_count */ - if ((data && !count) || reserved) return ERROR_INVALID_PARAMETER; + if ((data && !count) || reserved || !value || !val_count) + return ERROR_INVALID_PARAMETER; if (!(hkey = get_special_root_hkey( hkey, 0 ))) return ERROR_INVALID_HANDLE; total_size = info_size + (MAX_PATH + 1) * sizeof(WCHAR); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/advapi32/tests/registry.c wine-staging-1.7.47~ubuntu14.10.1/dlls/advapi32/tests/registry.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/advapi32/tests/registry.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/advapi32/tests/registry.c 2015-07-12 05:36:18.000000000 +0000 @@ -643,6 +643,32 @@ ok( !strcmp( value, "Test" ), "value is '%s' instead of Test\n", value ); ok( !strcmp( data, "foobar" ), "data is '%s' instead of foobar\n", data ); + if (pRegGetValueA) /* avoid a crash on Windows 2000 */ + { + /* no value and no val_count parameter */ + data_count = 20; + type = 1234; + strcpy( data, "xxxxxxxxxx" ); + res = RegEnumValueA( test_key, 0, NULL, NULL, NULL, &type, (BYTE*)data, &data_count ); + ok( res == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", res ); + + /* no value parameter */ + val_count = 20; + data_count = 20; + type = 1234; + strcpy( data, "xxxxxxxxxx" ); + res = RegEnumValueA( test_key, 0, NULL, &val_count, NULL, &type, (BYTE*)data, &data_count ); + ok( res == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", res ); + + /* no val_count parameter */ + data_count = 20; + type = 1234; + strcpy( value, "xxxxxxxxxx" ); + strcpy( data, "xxxxxxxxxx" ); + res = RegEnumValueA( test_key, 0, value, NULL, NULL, &type, (BYTE*)data, &data_count ); + ok( res == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", res ); + } + /* Unicode tests */ SetLastError(0xdeadbeef); @@ -710,6 +736,32 @@ ok( !memcmp( valueW, testW, sizeof(testW) ), "value is not 'Test'\n" ); ok( !memcmp( dataW, foobarW, sizeof(foobarW) ), "data is not 'foobar'\n" ); + if (pRegGetValueA) /* avoid a crash on Windows 2000 */ + { + /* no valueW and no val_count parameter */ + data_count = 20; + type = 1234; + memcpy( dataW, xxxW, sizeof(xxxW) ); + res = RegEnumValueW( test_key, 0, NULL, NULL, NULL, &type, (BYTE*)dataW, &data_count ); + ok( res == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", res ); + + /* no valueW parameter */ + val_count = 20; + data_count = 20; + type = 1234; + memcpy( dataW, xxxW, sizeof(xxxW) ); + res = RegEnumValueW( test_key, 0, NULL, &val_count, NULL, &type, (BYTE*)dataW, &data_count ); + ok( res == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", res ); + + /* no val_count parameter */ + data_count = 20; + type = 1234; + memcpy( valueW, xxxW, sizeof(xxxW) ); + memcpy( dataW, xxxW, sizeof(xxxW) ); + res = RegEnumValueW( test_key, 0, valueW, NULL, NULL, &type, (BYTE*)dataW, &data_count ); + ok( res == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", res ); + } + cleanup: RegDeleteKeyA(test_key, ""); RegCloseKey(test_key); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/comctl32/tests/button.c wine-staging-1.7.47~ubuntu14.10.1/dlls/comctl32/tests/button.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/comctl32/tests/button.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/comctl32/tests/button.c 2015-07-12 05:36:18.000000000 +0000 @@ -316,6 +316,7 @@ { WM_PAINT, sent }, { WM_NCPAINT, sent|defwinproc|optional }, /* FIXME: Wine sends it */ { WM_ERASEBKGND, sent|defwinproc|optional }, + { WM_PAINT, sent|optional }, { 0 } }; @@ -363,6 +364,7 @@ { WM_PAINT, sent }, { WM_NCPAINT, sent|optional }, /* FIXME: Wine sends it */ { WM_ERASEBKGND, sent|defwinproc|optional }, + { WM_PAINT, sent|optional }, { 0 } }; @@ -424,6 +426,7 @@ { { BM_SETCHECK, sent }, { WM_APP, sent|wparam|lparam, 0, 0 }, + { WM_PAINT, sent|optional }, { 0 } }; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/comctl32/tests/toolbar.c wine-staging-1.7.47~ubuntu14.10.1/dlls/comctl32/tests/toolbar.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/comctl32/tests/toolbar.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/comctl32/tests/toolbar.c 2015-07-12 05:36:18.000000000 +0000 @@ -54,6 +54,40 @@ { 0 } }; +static const struct message save_parent_seq[] = { + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_SAVE, -1 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_SAVE, 0 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_SAVE, 1 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_SAVE, 2 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_SAVE, 3 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_SAVE, 4 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_SAVE, 5 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_SAVE, 6 }, + { 0 } +}; + +static const struct message restore_parent_seq[] = { + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_RESTORE, -1 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_RESTORE, 0 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_RESTORE, 1 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_RESTORE, 2 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_RESTORE, 3 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_RESTORE, 4 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_RESTORE, 5 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_RESTORE, 6 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_RESTORE, 7 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_RESTORE, 8 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_RESTORE, 9 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_RESTORE, 0xa }, + { WM_NOTIFY, sent|id, 0, 0, TBN_BEGINADJUST }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_GETBUTTONINFOA, 0 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_GETBUTTONINFOA, 1 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_GETBUTTONINFOA, 2 }, + { WM_NOTIFY, sent|id|custdraw, 0, 0, TBN_GETBUTTONINFOA, 3 }, + { WM_NOTIFY, sent|id, 0, 0, TBN_ENDADJUST }, + { 0 } +}; + #define DEFINE_EXPECT(func) \ static BOOL expect_ ## func = FALSE, called_ ## func = FALSE @@ -93,6 +127,8 @@ p->iString = nString; } +static void *alloced_str; + static LRESULT parent_wnd_notify(LPARAM lParam) { NMHDR *hdr = (NMHDR *)lParam; @@ -133,6 +169,135 @@ compare(nmdisp->dwMask, g_dwExpectedDispInfoMask, "%x"); ok(nmdisp->pszText == NULL, "pszText is not NULL\n"); break; + case TBN_SAVE: + { + NMTBSAVE *save = (NMTBSAVE *)lParam; + if (save->iItem == -1) + { + save->cbData = save->cbData * 2 + 11 * sizeof(DWORD); + save->pData = HeapAlloc( GetProcessHeap(), 0, save->cbData ); + save->pData[0] = 0xcafe; + save->pCurrent = save->pData + 1; + } + else + { + save->pCurrent[0] = 0xcafe0000 + save->iItem; + save->pCurrent++; + } + + /* Add on 5 more pseudo buttons. */ + if (save->iItem == save->cButtons - 1) + { + save->pCurrent[0] = 0xffffffff; + save->pCurrent[1] = 0xcafe0007; + save->pCurrent[2] = 0xfffffffe; + save->pCurrent[3] = 0xcafe0008; + save->pCurrent[4] = 0x80000000; + save->pCurrent[5] = 0xcafe0009; + save->pCurrent[6] = 0x7fffffff; + save->pCurrent[7] = 0xcafe000a; + save->pCurrent[8] = 0x100; + save->pCurrent[9] = 0xcafe000b; + } + + /* Return value is ignored */ + return 1; + } + case TBN_RESTORE: + { + NMTBRESTORE *restore = (NMTBRESTORE *)lParam; + + if (restore->iItem == -1) + { + ok( restore->cButtons == 25, "got %d\n", restore->cButtons ); + ok( *restore->pCurrent == 0xcafe, "got %08x\n", *restore->pCurrent ); + /* Skip the last one */ + restore->cButtons = 11; + restore->pCurrent++; + /* BytesPerRecord is ignored */ + restore->cbBytesPerRecord = 10; + } + else + { + ok( *restore->pCurrent == 0xcafe0000 + restore->iItem, "got %08x\n", *restore->pCurrent ); + if (restore->iItem < 7 || restore->iItem == 10) + { + ok( restore->tbButton.iBitmap == -1, "got %08x\n", restore->tbButton.iBitmap ); + if (restore->iItem < 7) + ok( restore->tbButton.idCommand == restore->iItem * 2 + 1, "%d: got %08x\n", restore->iItem, restore->tbButton.idCommand ); + else + ok( restore->tbButton.idCommand == 0x7fffffff, "%d: got %08x\n", restore->iItem, restore->tbButton.idCommand ); + ok( restore->tbButton.fsState == 0, "%d: got %02x\n", restore->iItem, restore->tbButton.fsState ); + ok( restore->tbButton.fsStyle == 0, "%d: got %02x\n", restore->iItem, restore->tbButton.fsStyle ); + } + else + { + ok( restore->tbButton.iBitmap == 8, "got %08x\n", restore->tbButton.iBitmap ); + ok( restore->tbButton.idCommand == 0, "%d: got %08x\n", restore->iItem, restore->tbButton.idCommand ); + if (restore->iItem == 7) + ok( restore->tbButton.fsState == 0, "%d: got %02x\n", restore->iItem, restore->tbButton.fsState ); + else + ok( restore->tbButton.fsState == TBSTATE_HIDDEN, "%d: got %02x\n", restore->iItem, restore->tbButton.fsState ); + ok( restore->tbButton.fsStyle == BTNS_SEP, "%d: got %02x\n", restore->iItem, restore->tbButton.fsStyle ); + } + + ok( restore->tbButton.dwData == 0, "got %08lx\n", restore->tbButton.dwData ); + ok( restore->tbButton.iString == 0, "got %08lx\n", restore->tbButton.iString ); + + restore->tbButton.iBitmap = 0; + restore->tbButton.fsState = TBSTATE_ENABLED; + restore->tbButton.fsStyle = 0; + restore->tbButton.dwData = restore->iItem; + + if (restore->iItem == 0) + { + restore->tbButton.iString = (INT_PTR)HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, 8 ); + strcpy( (char *)restore->tbButton.iString, "foo" ); + } + else if (restore->iItem == 1) + restore->tbButton.iString = 2; + else + restore->tbButton.iString = -1; + + restore->pCurrent++; + /* Altering cButtons after the 1st call makes no difference. */ + restore->cButtons--; + } + + /* Returning non-zero from the 1st call aborts the restore, + otherwise the return value is ignored. */ + if (restore->iItem == -1) return 0; + return 1; + } + case TBN_GETBUTTONINFOA: + { + NMTOOLBARA *tb = (NMTOOLBARA *)lParam; + tb->tbButton.iBitmap = 0; + tb->tbButton.fsState = 0; + tb->tbButton.fsStyle = 0; + tb->tbButton.dwData = 0; + ok( tb->cchText == 128, "got %d\n", tb->cchText ); + switch (tb->iItem) + { + case 0: + tb->tbButton.idCommand = 7; + alloced_str = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, 8 ); + strcpy( alloced_str, "foo" ); + tb->tbButton.iString = (INT_PTR)alloced_str; + return 1; + case 1: + tb->tbButton.idCommand = 9; + tb->tbButton.iString = 0; + /* tb->pszText is ignored */ + strcpy( tb->pszText, "foo" ); + return 1; + case 2: + tb->tbButton.idCommand = 11; + tb->tbButton.iString = 3; + return 1; + } + return 0; + } } return 0; } @@ -148,7 +313,31 @@ if (defwndproc_counter) msg.flags |= defwinproc; msg.wParam = wParam; msg.lParam = lParam; - if (message == WM_NOTIFY && lParam) msg.id = ((NMHDR*)lParam)->code; + if (message == WM_NOTIFY && lParam) + { + msg.id = ((NMHDR*)lParam)->code; + switch (msg.id) + { + case TBN_SAVE: + { + NMTBSAVE *save = (NMTBSAVE *)lParam; + msg.stage = save->iItem; + } + break; + case TBN_RESTORE: + { + NMTBRESTORE *restore = (NMTBRESTORE *)lParam; + msg.stage = restore->iItem; + } + break; + case TBN_GETBUTTONINFOA: + { + NMTOOLBARA *tb = (NMTOOLBARA *)lParam; + msg.stage = tb->iItem; + } + break; + } + } /* log system messages, except for painting */ if (message < WM_USER && @@ -2079,6 +2268,101 @@ } +static void test_save(void) +{ + HWND wnd = NULL; + TBSAVEPARAMSW params; + static const WCHAR subkey[] = {'S','o','f','t','w','a','r','e','\\','W','i','n','e','T','e','s','t',0}; + static const WCHAR value[] = {'t','o','o','l','b','a','r','t','e','s','t',0}; + LONG res; + HKEY key; + BYTE data[100]; + DWORD size = sizeof(data), type, i, count; + TBBUTTON tb; + static const TBBUTTON more_btns[2] = + { + {0, 11, TBSTATE_HIDDEN, BTNS_BUTTON, {0}, 0, -1}, + {0, 13, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, -1} + }; + static const DWORD expect[] = {0xcafe, 1, 0xcafe0000, 3, 0xcafe0001, 5, 0xcafe0002, 7, 0xcafe0003, + 9, 0xcafe0004, 11, 0xcafe0005, 13, 0xcafe0006, 0xffffffff, 0xcafe0007, + 0xfffffffe, 0xcafe0008, 0x80000000, 0xcafe0009, 0x7fffffff, 0xcafe000a, + 0x100, 0xcafe000b}; + static const TBBUTTON expect_btns[] = + { + {0, 1, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, + {0, 3, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 1, 2}, + {0, 5, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 2, 0}, + {0, 7, 0, BTNS_BUTTON, {0}, 0, (INT_PTR)"foo"}, + {0, 9, 0, BTNS_BUTTON, {0}, 0, 0}, + {0, 11, 0, BTNS_BUTTON, {0}, 0, 3}, + {0, 13, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 6, 0}, + {0, 0, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 7, 0}, + {0, 0, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 8, 0}, + {0, 0, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 9, 0}, + {0, 0x7fffffff, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0xa, 0}, + }; + + params.hkr = HKEY_CURRENT_USER; + params.pszSubKey = subkey; + params.pszValueName = value; + + rebuild_toolbar_with_buttons( &wnd ); + SendMessageW( wnd, TB_ADDBUTTONSW, sizeof(more_btns) / sizeof(more_btns[0]), (LPARAM)more_btns ); + + flush_sequences(sequences, NUM_MSG_SEQUENCES); + res = SendMessageW( wnd, TB_SAVERESTOREW, TRUE, (LPARAM)¶ms ); + ok( res, "saving failed\n" ); + ok_sequence(sequences, PARENT_SEQ_INDEX, save_parent_seq, "save", FALSE); + DestroyWindow( wnd ); + + res = RegOpenKeyW( HKEY_CURRENT_USER, subkey, &key ); + ok( !res, "got %08x\n", res ); + res = RegQueryValueExW( key, value, NULL, &type, data, &size ); + ok( !res, "got %08x\n", res ); + ok( type == REG_BINARY, "got %08x\n", type ); + ok( size == sizeof(expect), "got %08x\n", size ); + ok( !memcmp( data, expect, size ), "mismatch\n" ); + + RegCloseKey( key ); + + wnd = NULL; + rebuild_toolbar( &wnd ); + + flush_sequences(sequences, NUM_MSG_SEQUENCES); + res = SendMessageW( wnd, TB_SAVERESTOREW, FALSE, (LPARAM)¶ms ); + ok( res, "restoring failed\n" ); + ok_sequence(sequences, PARENT_SEQ_INDEX, restore_parent_seq, "restore", FALSE); + count = SendMessageW( wnd, TB_BUTTONCOUNT, 0, 0 ); + ok( count == sizeof(expect_btns) / sizeof(expect_btns[0]), "got %d\n", count ); + + for (i = 0; i < count; i++) + { + res = SendMessageW( wnd, TB_GETBUTTON, i, (LPARAM)&tb ); + ok( res, "got %d\n", res ); + + ok( tb.iBitmap == expect_btns[i].iBitmap, "%d: got %d\n", i, tb.iBitmap ); + ok( tb.idCommand == expect_btns[i].idCommand, "%d: got %d\n", i, tb.idCommand ); + ok( tb.fsState == expect_btns[i].fsState, "%d: got %02x\n", i, tb.fsState ); + ok( tb.fsStyle == expect_btns[i].fsStyle, "%d: got %02x\n", i, tb.fsStyle ); + ok( tb.dwData == expect_btns[i].dwData, "%d: got %lx\n", i, tb.dwData ); + if (IS_INTRESOURCE(expect_btns[i].iString)) + ok( tb.iString == expect_btns[i].iString, "%d: got %lx\n", i, tb.iString ); + else + ok( !strcmp( (char *)tb.iString, (char *)expect_btns[i].iString ), + "%d: got %s\n", i, (char *)tb.iString ); + + /* In fact the ptr value set in TBN_GETBUTTONINFOA is simply copied */ + if (tb.idCommand == 7) + ok( tb.iString == (INT_PTR)alloced_str, "string not set\n"); + } + + DestroyWindow( wnd ); + RegOpenKeyW( HKEY_CURRENT_USER, subkey, &key ); + RegDeleteValueW( key, value ); + RegCloseKey( key ); +} + START_TEST(toolbar) { WNDCLASSA wc; @@ -2122,6 +2406,7 @@ test_create(); test_TB_GET_SET_EXTENDEDSTYLE(); test_noresize(); + test_save(); PostQuitMessage(0); while(GetMessageA(&msg,0,0,0)) { diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/comctl32/toolbar.c wine-staging-1.7.47~ubuntu14.10.1/dlls/comctl32/toolbar.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/comctl32/toolbar.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/comctl32/toolbar.c 2015-07-12 05:36:18.000000000 +0000 @@ -247,6 +247,8 @@ static void TOOLBAR_CheckImageListIconSize(TOOLBAR_INFO *infoPtr); static void TOOLBAR_TooltipAddTool(const TOOLBAR_INFO *infoPtr, const TBUTTON_INFO *button); static void TOOLBAR_TooltipSetRect(const TOOLBAR_INFO *infoPtr, const TBUTTON_INFO *button); +static LRESULT TOOLBAR_SetButtonInfo(TOOLBAR_INFO *infoPtr, INT Id, + const TBBUTTONINFOW *lptbbi, BOOL isW); static inline int default_top_margin(const TOOLBAR_INFO *infoPtr) @@ -328,6 +330,37 @@ return HIWORD(btnPtr->iString) && btnPtr->iString != -1; } +static void set_string_index( TBUTTON_INFO *btn, INT_PTR str, BOOL unicode ) +{ + if (!IS_INTRESOURCE( str ) && str != -1) + { + if (!TOOLBAR_ButtonHasString( btn )) btn->iString = 0; + + if (unicode) + Str_SetPtrW( (WCHAR **)&btn->iString, (WCHAR *)str ); + else + Str_SetPtrAtoW( (WCHAR **)&btn->iString, (char *)str ); + } + else + { + if (TOOLBAR_ButtonHasString( btn )) Free( (WCHAR *)btn->iString ); + + btn->iString = str; + } +} + +static void set_stringT( TBUTTON_INFO *btn, const WCHAR *str, BOOL unicode ) +{ + if (IS_INTRESOURCE( (DWORD_PTR)str ) || (DWORD_PTR)str == -1) return; + set_string_index( btn, (DWORD_PTR)str, unicode ); +} + +static void free_string( TBUTTON_INFO *btn ) +{ + set_string_index( btn, 0, TRUE ); + +} + /*********************************************************************** * TOOLBAR_CheckStyle * @@ -1817,6 +1850,7 @@ /* insert new buttons data */ for (iButton = 0; iButton < nAddButtons; iButton++) { TBUTTON_INFO *btnPtr = &infoPtr->buttons[iIndex + iButton]; + INT_PTR str; TOOLBAR_DumpTBButton(lpTbb + iButton, fUnicode); @@ -1827,18 +1861,13 @@ btnPtr->fsState = lpTbb[iButton].fsState; btnPtr->fsStyle = lpTbb[iButton].fsStyle; btnPtr->dwData = lpTbb[iButton].dwData; + if (btnPtr->fsStyle & BTNS_SEP) - btnPtr->iString = -1; - else if(!IS_INTRESOURCE(lpTbb[iButton].iString) && lpTbb[iButton].iString != -1) - { - if (fUnicode) - Str_SetPtrW((LPWSTR*)&btnPtr->iString, (LPWSTR)lpTbb[iButton].iString ); - else - Str_SetPtrAtoW((LPWSTR*)&btnPtr->iString, (LPSTR)lpTbb[iButton].iString); - fHasString = TRUE; - } + str = -1; else - btnPtr->iString = lpTbb[iButton].iString; + str = lpTbb[iButton].iString; + set_string_index( btnPtr, str, fUnicode ); + fHasString |= TOOLBAR_ButtonHasString( btnPtr ); TOOLBAR_TooltipAddTool(infoPtr, btnPtr); } @@ -3203,8 +3232,7 @@ if (infoPtr->nNumButtons == 1) { TRACE(" simple delete!\n"); - if (TOOLBAR_ButtonHasString(infoPtr->buttons)) - Free((LPWSTR)infoPtr->buttons[0].iString); + free_string( infoPtr->buttons ); Free (infoPtr->buttons); infoPtr->buttons = NULL; infoPtr->nNumButtons = 0; @@ -3225,8 +3253,7 @@ (infoPtr->nNumButtons - nIndex) * sizeof(TBUTTON_INFO)); } - if (TOOLBAR_ButtonHasString(&oldButtons[nIndex])) - Free((LPWSTR)oldButtons[nIndex].iString); + free_string( oldButtons + nIndex ); Free (oldButtons); } @@ -4046,12 +4073,55 @@ /* helper for TOOLBAR_SaveRestoreW */ static BOOL -TOOLBAR_Save(const TBSAVEPARAMSW *lpSave) +TOOLBAR_Save(TOOLBAR_INFO *infoPtr, const TBSAVEPARAMSW *params) { - FIXME("save to %s %s\n", debugstr_w(lpSave->pszSubKey), - debugstr_w(lpSave->pszValueName)); + NMTBSAVE save; + INT ret, i; + BOOL alloced = FALSE; + HKEY key; - return FALSE; + TRACE( "save to %s %s\n", debugstr_w(params->pszSubKey), debugstr_w(params->pszValueName) ); + + memset( &save, 0, sizeof(save) ); + save.cbData = infoPtr->nNumButtons * sizeof(DWORD); + save.iItem = -1; + save.cButtons = infoPtr->nNumButtons; + save.tbButton.idCommand = -1; + TOOLBAR_SendNotify( &save.hdr, infoPtr, TBN_SAVE ); + + if (!save.pData) + { + save.pData = Alloc( save.cbData ); + if (!save.pData) return FALSE; + alloced = TRUE; + } + if (!save.pCurrent) save.pCurrent = save.pData; + + for (i = 0; i < infoPtr->nNumButtons; i++) + { + save.iItem = i; + save.tbButton.iBitmap = infoPtr->buttons[i].iBitmap; + save.tbButton.idCommand = infoPtr->buttons[i].idCommand; + save.tbButton.fsState = infoPtr->buttons[i].fsState; + save.tbButton.fsStyle = infoPtr->buttons[i].fsStyle; + memset( save.tbButton.bReserved, 0, sizeof(save.tbButton.bReserved) ); + save.tbButton.dwData = infoPtr->buttons[i].dwData; + save.tbButton.iString = infoPtr->buttons[i].iString; + + *save.pCurrent++ = save.tbButton.idCommand; + + TOOLBAR_SendNotify( &save.hdr, infoPtr, TBN_SAVE ); + } + + ret = RegCreateKeyW( params->hkr, params->pszSubKey, &key ); + if (ret == ERROR_SUCCESS) + { + ret = RegSetValueExW( key, params->pszValueName, 0, REG_BINARY, (BYTE *)save.pData, save.cbData ); + RegCloseKey( key ); + } + + if (alloced) Free( save.pData ); + return !ret; } @@ -4063,6 +4133,7 @@ for (i = 0; i < infoPtr->nNumButtons; i++) { + free_string( infoPtr->buttons + i ); TOOLBAR_TooltipDelTool(infoPtr, &infoPtr->buttons[i]); } @@ -4082,6 +4153,7 @@ DWORD dwType; DWORD dwSize = 0; NMTBRESTORE nmtbr; + NMHDR hdr; /* restore toolbar information */ TRACE("restore from %s %s\n", debugstr_w(lpSave->pszSubKey), @@ -4114,30 +4186,30 @@ if (!TOOLBAR_SendNotify(&nmtbr.hdr, infoPtr, TBN_RESTORE)) { - INT i; + INT i, count = nmtbr.cButtons; /* remove all existing buttons as this function is designed to * restore the toolbar to a previously saved state */ TOOLBAR_DeleteAllButtons(infoPtr); - for (i = 0; i < nmtbr.cButtons; i++) + for (i = 0; i < count; i++) { nmtbr.iItem = i; nmtbr.tbButton.iBitmap = -1; nmtbr.tbButton.fsState = 0; nmtbr.tbButton.fsStyle = 0; - nmtbr.tbButton.idCommand = 0; - if (*nmtbr.pCurrent == (DWORD)-1) + nmtbr.tbButton.dwData = 0; + nmtbr.tbButton.iString = 0; + + if (*nmtbr.pCurrent & 0x80000000) { /* separator */ - nmtbr.tbButton.fsStyle = TBSTYLE_SEP; - /* when inserting separators, iBitmap controls its size. - 0 sets default size (width) */ - nmtbr.tbButton.iBitmap = 0; + nmtbr.tbButton.iBitmap = SEPARATOR_WIDTH; + nmtbr.tbButton.idCommand = 0; + nmtbr.tbButton.fsStyle = BTNS_SEP; + if (*nmtbr.pCurrent != (DWORD)-1) + nmtbr.tbButton.fsState = TBSTATE_HIDDEN; } - else if (*nmtbr.pCurrent == (DWORD)-2) - /* hidden button */ - nmtbr.tbButton.fsState = TBSTATE_HIDDEN; else nmtbr.tbButton.idCommand = (int)*nmtbr.pCurrent; @@ -4145,21 +4217,51 @@ TOOLBAR_SendNotify(&nmtbr.hdr, infoPtr, TBN_RESTORE); - /* can't contain real string as we don't know whether - * the client put an ANSI or Unicode string in there */ + /* All returned ptrs and -1 are ignored */ if (!IS_INTRESOURCE(nmtbr.tbButton.iString)) nmtbr.tbButton.iString = 0; TOOLBAR_InsertButtonT(infoPtr, -1, &nmtbr.tbButton, TRUE); } - /* do legacy notifications */ - if (infoPtr->iVersion < 5) + TOOLBAR_SendNotify( &hdr, infoPtr, TBN_BEGINADJUST ); + for (i = 0; ; i++) { - /* FIXME: send TBN_BEGINADJUST */ - FIXME("send TBN_GETBUTTONINFO for each button\n"); - /* FIXME: send TBN_ENDADJUST */ + NMTOOLBARW tb; + TBBUTTONINFOW bi; + WCHAR buf[128]; + UINT code = infoPtr->bUnicode ? TBN_GETBUTTONINFOW : TBN_GETBUTTONINFOA; + INT idx; + + memset( &tb, 0, sizeof(tb) ); + tb.iItem = i; + tb.cchText = sizeof(buf) / sizeof(buf[0]); + tb.pszText = buf; + + /* Use the same struct for both A and W versions since the layout is the same. */ + if (!TOOLBAR_SendNotify( &tb.hdr, infoPtr, code )) + break; + + idx = TOOLBAR_GetButtonIndex( infoPtr, tb.tbButton.idCommand, FALSE ); + if (idx == -1) continue; + + /* tb.pszText is ignored - the string comes from tb.tbButton.iString, which may + be an index or a ptr. Either way it is simply copied. There is no api to change + the string index, so we set it manually. The other properties can be set with SetButtonInfo. */ + free_string( infoPtr->buttons + idx ); + infoPtr->buttons[idx].iString = tb.tbButton.iString; + + memset( &bi, 0, sizeof(bi) ); + bi.cbSize = sizeof(bi); + bi.dwMask = TBIF_IMAGE | TBIF_STATE | TBIF_STYLE | TBIF_LPARAM; + bi.iImage = tb.tbButton.iBitmap; + bi.fsState = tb.tbButton.fsState; + bi.fsStyle = tb.tbButton.fsStyle; + bi.lParam = tb.tbButton.dwData; + + TOOLBAR_SetButtonInfo( infoPtr, tb.tbButton.idCommand, &bi, TRUE ); } + TOOLBAR_SendNotify( &hdr, infoPtr, TBN_ENDADJUST ); /* remove all uninitialised buttons * note: loop backwards to avoid having to fixup i on a @@ -4185,7 +4287,7 @@ if (lpSave == NULL) return 0; if (wParam) - return TOOLBAR_Save(lpSave); + return TOOLBAR_Save(infoPtr, lpSave); else return TOOLBAR_Restore(infoPtr, lpSave); } @@ -4320,15 +4422,8 @@ if (lptbbi->dwMask & TBIF_STYLE) btnPtr->fsStyle = lptbbi->fsStyle; - if ((lptbbi->dwMask & TBIF_TEXT) && ((INT_PTR)lptbbi->pszText != -1)) { - /* iString is index, zero it to make Str_SetPtr succeed */ - if (!TOOLBAR_ButtonHasString(btnPtr)) btnPtr->iString = 0; - - if (isW) - Str_SetPtrW ((LPWSTR *)&btnPtr->iString, lptbbi->pszText); - else - Str_SetPtrAtoW ((LPWSTR *)&btnPtr->iString, (LPSTR)lptbbi->pszText); - } + if (lptbbi->dwMask & TBIF_TEXT) + set_stringT( btnPtr, lptbbi->pszText, isW ); /* save the button rect to see if we need to redraw the whole toolbar */ oldBtnRect = btnPtr->rect; @@ -5213,8 +5308,7 @@ /* delete button data */ for (i = 0; i < infoPtr->nNumButtons; i++) - if (TOOLBAR_ButtonHasString(&infoPtr->buttons[i])) - Free ((LPWSTR)infoPtr->buttons[i].iString); + free_string( infoPtr->buttons + i ); Free (infoPtr->buttons); /* delete strings */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/d2d1/d2d1_private.h wine-staging-1.7.47~ubuntu14.10.1/dlls/d2d1/d2d1_private.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/d2d1/d2d1_private.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/d2d1/d2d1_private.h 2015-07-12 05:36:18.000000000 +0000 @@ -189,11 +189,23 @@ IDWriteRenderingParams *text_rendering_params) DECLSPEC_HIDDEN; struct d2d_state_block *unsafe_impl_from_ID2D1DrawingStateBlock(ID2D1DrawingStateBlock *iface) DECLSPEC_HIDDEN; +enum d2d_geometry_state +{ + D2D_GEOMETRY_STATE_INITIAL = 0, + D2D_GEOMETRY_STATE_ERROR, + D2D_GEOMETRY_STATE_OPEN, + D2D_GEOMETRY_STATE_CLOSED, + D2D_GEOMETRY_STATE_FIGURE, +}; + struct d2d_geometry { ID2D1Geometry ID2D1Geometry_iface; ID2D1GeometrySink ID2D1GeometrySink_iface; LONG refcount; + + enum d2d_geometry_state state; + UINT32 figure_count, segment_count; }; void d2d_path_geometry_init(struct d2d_geometry *geometry) DECLSPEC_HIDDEN; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/d2d1/geometry.c wine-staging-1.7.47~ubuntu14.10.1/dlls/d2d1/geometry.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/d2d1/geometry.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/d2d1/geometry.c 2015-07-12 05:36:18.000000000 +0000 @@ -78,32 +78,82 @@ static void STDMETHODCALLTYPE d2d_geometry_sink_BeginFigure(ID2D1GeometrySink *iface, D2D1_POINT_2F start_point, D2D1_FIGURE_BEGIN figure_begin) { + struct d2d_geometry *geometry = impl_from_ID2D1GeometrySink(iface); + FIXME("iface %p, start_point {%.8e, %.8e}, figure_begin %#x stub!\n", iface, start_point.x, start_point.y, figure_begin); + + if (geometry->state != D2D_GEOMETRY_STATE_OPEN) + { + geometry->state = D2D_GEOMETRY_STATE_ERROR; + return; + } + geometry->state = D2D_GEOMETRY_STATE_FIGURE; + ++geometry->figure_count; + ++geometry->segment_count; } static void STDMETHODCALLTYPE d2d_geometry_sink_AddLines(ID2D1GeometrySink *iface, const D2D1_POINT_2F *points, UINT32 count) { + struct d2d_geometry *geometry = impl_from_ID2D1GeometrySink(iface); + FIXME("iface %p, points %p, count %u stub!\n", iface, points, count); + + if (geometry->state != D2D_GEOMETRY_STATE_FIGURE) + { + geometry->state = D2D_GEOMETRY_STATE_ERROR; + return; + } + + geometry->segment_count += count; } static void STDMETHODCALLTYPE d2d_geometry_sink_AddBeziers(ID2D1GeometrySink *iface, const D2D1_BEZIER_SEGMENT *beziers, UINT32 count) { + struct d2d_geometry *geometry = impl_from_ID2D1GeometrySink(iface); + FIXME("iface %p, beziers %p, count %u stub!\n", iface, beziers, count); + + if (geometry->state != D2D_GEOMETRY_STATE_FIGURE) + { + geometry->state = D2D_GEOMETRY_STATE_ERROR; + return; + } + + geometry->segment_count += count; } static void STDMETHODCALLTYPE d2d_geometry_sink_EndFigure(ID2D1GeometrySink *iface, D2D1_FIGURE_END figure_end) { + struct d2d_geometry *geometry = impl_from_ID2D1GeometrySink(iface); + FIXME("iface %p, figure_end %#x stub!\n", iface, figure_end); + + if (geometry->state != D2D_GEOMETRY_STATE_FIGURE) + { + geometry->state = D2D_GEOMETRY_STATE_ERROR; + return; + } + geometry->state = D2D_GEOMETRY_STATE_OPEN; } static HRESULT STDMETHODCALLTYPE d2d_geometry_sink_Close(ID2D1GeometrySink *iface) { - FIXME("iface %p stub!\n", iface); + struct d2d_geometry *geometry = impl_from_ID2D1GeometrySink(iface); - return E_NOTIMPL; + TRACE("iface %p.\n", iface); + + if (geometry->state != D2D_GEOMETRY_STATE_OPEN) + { + if (geometry->state != D2D_GEOMETRY_STATE_CLOSED) + geometry->state = D2D_GEOMETRY_STATE_ERROR; + return D2DERR_WRONG_STATE; + } + geometry->state = D2D_GEOMETRY_STATE_CLOSED; + + return S_OK; } static void STDMETHODCALLTYPE d2d_geometry_sink_AddLine(ID2D1GeometrySink *iface, D2D1_POINT_2F point) @@ -131,12 +181,32 @@ static void STDMETHODCALLTYPE d2d_geometry_sink_AddQuadraticBeziers(ID2D1GeometrySink *iface, const D2D1_QUADRATIC_BEZIER_SEGMENT *beziers, UINT32 bezier_count) { + struct d2d_geometry *geometry = impl_from_ID2D1GeometrySink(iface); + FIXME("iface %p, beziers %p, bezier_count %u stub!\n", iface, beziers, bezier_count); + + if (geometry->state != D2D_GEOMETRY_STATE_FIGURE) + { + geometry->state = D2D_GEOMETRY_STATE_ERROR; + return; + } + + geometry->segment_count += bezier_count; } static void STDMETHODCALLTYPE d2d_geometry_sink_AddArc(ID2D1GeometrySink *iface, const D2D1_ARC_SEGMENT *arc) { + struct d2d_geometry *geometry = impl_from_ID2D1GeometrySink(iface); + FIXME("iface %p, arc %p stub!\n", iface, arc); + + if (geometry->state != D2D_GEOMETRY_STATE_FIGURE) + { + geometry->state = D2D_GEOMETRY_STATE_ERROR; + return; + } + + ++geometry->segment_count; } struct ID2D1GeometrySinkVtbl d2d_geometry_sink_vtbl = @@ -336,9 +406,14 @@ TRACE("iface %p, sink %p.\n", iface, sink); + if (geometry->state != D2D_GEOMETRY_STATE_INITIAL) + return D2DERR_WRONG_STATE; + *sink = &geometry->ID2D1GeometrySink_iface; ID2D1GeometrySink_AddRef(*sink); + geometry->state = D2D_GEOMETRY_STATE_OPEN; + return S_OK; } @@ -351,16 +426,30 @@ static HRESULT STDMETHODCALLTYPE d2d_path_geometry_GetSegmentCount(ID2D1PathGeometry *iface, UINT32 *count) { - FIXME("iface %p, count %p stub!\n", iface, count); + struct d2d_geometry *geometry = impl_from_ID2D1PathGeometry(iface); - return E_NOTIMPL; + TRACE("iface %p, count %p.\n", iface, count); + + if (geometry->state != D2D_GEOMETRY_STATE_CLOSED) + return D2DERR_WRONG_STATE; + + *count = geometry->segment_count; + + return S_OK; } static HRESULT STDMETHODCALLTYPE d2d_path_geometry_GetFigureCount(ID2D1PathGeometry *iface, UINT32 *count) { - FIXME("iface %p, count %p stub!\n", iface, count); + struct d2d_geometry *geometry = impl_from_ID2D1PathGeometry(iface); - return E_NOTIMPL; + TRACE("iface %p, count %p.\n", iface, count); + + if (geometry->state != D2D_GEOMETRY_STATE_CLOSED) + return D2DERR_WRONG_STATE; + + *count = geometry->figure_count; + + return S_OK; } static const struct ID2D1PathGeometryVtbl d2d_path_geometry_vtbl = diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/d2d1/Makefile.in wine-staging-1.7.47~ubuntu14.10.1/dlls/d2d1/Makefile.in --- wine-staging-1.7.46~ubuntu14.10.1/dlls/d2d1/Makefile.in 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/d2d1/Makefile.in 2015-07-12 05:36:18.000000000 +0000 @@ -1,6 +1,7 @@ MODULE = d2d1.dll IMPORTLIB = d2d1 IMPORTS = d3d10_1 dxguid uuid +DELAYIMPORTS = dwrite C_SRCS = \ bitmap.c \ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/d2d1/render_target.c wine-staging-1.7.47~ubuntu14.10.1/dlls/d2d1/render_target.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/d2d1/render_target.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/d2d1/render_target.c 2015-07-12 05:36:18.000000000 +0000 @@ -44,6 +44,12 @@ a->_32 = tmp._31 * b->_12 + tmp._32 * b->_22 + b->_32; } +static void d2d_point_set(D2D1_POINT_2F *dst, float x, float y) +{ + dst->x = x; + dst->y = y; +} + static void d2d_point_transform(D2D1_POINT_2F *dst, const D2D1_MATRIX_3X2_F *matrix, float x, float y) { dst->x = x * matrix->_11 + y * matrix->_21 + matrix->_31; @@ -798,10 +804,38 @@ const WCHAR *string, UINT32 string_len, IDWriteTextFormat *text_format, const D2D1_RECT_F *layout_rect, ID2D1Brush *brush, D2D1_DRAW_TEXT_OPTIONS options, DWRITE_MEASURING_MODE measuring_mode) { - FIXME("iface %p, string %s, string_len %u, text_format %p, layout_rect %p, " - "brush %p, options %#x, measuring_mode %#x stub!\n", + IDWriteTextLayout *text_layout; + IDWriteFactory *dwrite_factory; + D2D1_POINT_2F origin; + HRESULT hr; + + TRACE("iface %p, string %s, string_len %u, text_format %p, layout_rect %p, " + "brush %p, options %#x, measuring_mode %#x.\n", iface, debugstr_wn(string, string_len), string_len, text_format, layout_rect, brush, options, measuring_mode); + + if (measuring_mode != DWRITE_MEASURING_MODE_NATURAL) + FIXME("Ignoring measuring mode %#x.\n", measuring_mode); + + if (FAILED(hr = DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, + &IID_IDWriteFactory, (IUnknown **)&dwrite_factory))) + { + ERR("Failed to create dwrite factory, hr %#x.\n", hr); + return; + } + + hr = IDWriteFactory_CreateTextLayout(dwrite_factory, string, string_len, text_format, + layout_rect->right - layout_rect->left, layout_rect->bottom - layout_rect->top, &text_layout); + IDWriteFactory_Release(dwrite_factory); + if (FAILED(hr)) + { + ERR("Failed to create text layout, hr %#x.\n", hr); + return; + } + + d2d_point_set(&origin, layout_rect->left, layout_rect->top); + ID2D1RenderTarget_DrawTextLayout(iface, origin, text_layout, brush, options); + IDWriteTextLayout_Release(text_layout); } static void STDMETHODCALLTYPE d2d_d3d_render_target_DrawTextLayout(ID2D1RenderTarget *iface, @@ -826,8 +860,53 @@ D2D1_POINT_2F baseline_origin, const DWRITE_GLYPH_RUN *glyph_run, ID2D1Brush *brush, DWRITE_MEASURING_MODE measuring_mode) { - FIXME("iface %p, baseline_origin {%.8e, %.8e}, glyph_run %p, brush %p, measuring_mode %#x stub!\n", + struct d2d_d3d_render_target *render_target = impl_from_ID2D1RenderTarget(iface); + D2D1_MATRIX_3X2_F *transform, prev_transform; + ID2D1PathGeometry *geometry; + ID2D1GeometrySink *sink; + HRESULT hr; + + TRACE("iface %p, baseline_origin {%.8e, %.8e}, glyph_run %p, brush %p, measuring_mode %#x.\n", iface, baseline_origin.x, baseline_origin.y, glyph_run, brush, measuring_mode); + + if (measuring_mode) + FIXME("Ignoring measuring mode %#x.\n", measuring_mode); + + if (FAILED(hr = ID2D1Factory_CreatePathGeometry(render_target->factory, &geometry))) + { + ERR("Failed to create geometry, hr %#x.\n", hr); + return; + } + + if (FAILED(hr = ID2D1PathGeometry_Open(geometry, &sink))) + { + ERR("Failed to open geometry sink, hr %#x.\n", hr); + ID2D1PathGeometry_Release(geometry); + return; + } + + if (FAILED(hr = IDWriteFontFace_GetGlyphRunOutline(glyph_run->fontFace, glyph_run->fontEmSize, + glyph_run->glyphIndices, glyph_run->glyphAdvances, glyph_run->glyphOffsets, glyph_run->glyphCount, + glyph_run->isSideways, glyph_run->bidiLevel & 1, (IDWriteGeometrySink *)sink))) + { + ERR("Failed to get glyph run outline, hr %#x.\n", hr); + ID2D1GeometrySink_Release(sink); + ID2D1PathGeometry_Release(geometry); + return; + } + + if (FAILED(hr = ID2D1GeometrySink_Close(sink))) + ERR("Failed to close geometry sink, hr %#x.\n", hr); + ID2D1GeometrySink_Release(sink); + + transform = &render_target->drawing_state.transform; + prev_transform = *transform; + transform->_31 += baseline_origin.x * transform->_11 + baseline_origin.y * transform->_21; + transform->_32 += baseline_origin.x * transform->_12 + baseline_origin.y * transform->_22; + ID2D1RenderTarget_FillGeometry(iface, (ID2D1Geometry *)geometry, brush, NULL); + *transform = prev_transform; + + ID2D1PathGeometry_Release(geometry); } static void STDMETHODCALLTYPE d2d_d3d_render_target_SetTransform(ID2D1RenderTarget *iface, @@ -1269,24 +1348,36 @@ static HRESULT STDMETHODCALLTYPE d2d_text_renderer_IsPixelSnappingDisabled(IDWriteTextRenderer *iface, void *ctx, BOOL *disabled) { - FIXME("iface %p, ctx %p, disabled %p stub!\n", iface, ctx, disabled); + struct d2d_draw_text_layout_ctx *context = ctx; - return E_NOTIMPL; + TRACE("iface %p, ctx %p, disabled %p.\n", iface, ctx, disabled); + + *disabled = context->options & D2D1_DRAW_TEXT_OPTIONS_NO_SNAP; + + return S_OK; } static HRESULT STDMETHODCALLTYPE d2d_text_renderer_GetCurrentTransform(IDWriteTextRenderer *iface, void *ctx, DWRITE_MATRIX *transform) { - FIXME("iface %p, ctx %p, transform %p stub!\n", iface, ctx, transform); + struct d2d_d3d_render_target *render_target = impl_from_IDWriteTextRenderer(iface); - return E_NOTIMPL; + TRACE("iface %p, ctx %p, transform %p.\n", iface, ctx, transform); + + ID2D1RenderTarget_GetTransform(&render_target->ID2D1RenderTarget_iface, (D2D1_MATRIX_3X2_F *)transform); + + return S_OK; } static HRESULT STDMETHODCALLTYPE d2d_text_renderer_GetPixelsPerDip(IDWriteTextRenderer *iface, void *ctx, float *ppd) { - FIXME("iface %p, ctx %p, ppd %p stub!\n", iface, ctx, ppd); + struct d2d_d3d_render_target *render_target = impl_from_IDWriteTextRenderer(iface); - return E_NOTIMPL; + TRACE("iface %p, ctx %p, ppd %p.\n", iface, ctx, ppd); + + *ppd = render_target->dpi_y / 96.0f; + + return S_OK; } static HRESULT STDMETHODCALLTYPE d2d_text_renderer_DrawGlyphRun(IDWriteTextRenderer *iface, void *ctx, @@ -1306,7 +1397,7 @@ FIXME("Ignoring glyph run description %p.\n", desc); if (effect) FIXME("Ignoring effect %p.\n", effect); - if (context->options) + if (context->options & ~D2D1_DRAW_TEXT_OPTIONS_NO_SNAP) FIXME("Ignoring options %#x.\n", context->options); TRACE("%s\n", debugstr_wn(desc->string, desc->stringLength)); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/d2d1/tests/d2d1.c wine-staging-1.7.47~ubuntu14.10.1/dlls/d2d1/tests/d2d1.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/d2d1/tests/d2d1.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/d2d1/tests/d2d1.c 2015-07-12 05:36:18.000000000 +0000 @@ -873,10 +873,201 @@ DestroyWindow(window); } +static void test_path_geometry(void) +{ + ID2D1GeometrySink *sink, *tmp_sink; + D2D1_POINT_2F point = {0.0f, 0.0f}; + ID2D1PathGeometry *geometry; + IDXGISwapChain *swapchain; + ID2D1RenderTarget *rt; + ID3D10Device1 *device; + IDXGISurface *surface; + ID2D1Factory *factory; + ULONG refcount; + UINT32 count; + HWND window; + HRESULT hr; + + if (!(device = create_device())) + { + skip("Failed to create device, skipping tests.\n"); + return; + } + window = CreateWindowA("static", "d2d1_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE, + 0, 0, 640, 480, NULL, NULL, NULL, NULL); + swapchain = create_swapchain(device, window, TRUE); + hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); + ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); + rt = create_render_target(surface); + ok(!!rt, "Failed to create render target.\n"); + ID2D1RenderTarget_GetFactory(rt, &factory); + + /* Close() when closed. */ + hr = ID2D1Factory_CreatePathGeometry(factory, &geometry); + ok(SUCCEEDED(hr), "Failed to create path geometry, hr %#x.\n", hr); + hr = ID2D1PathGeometry_GetFigureCount(geometry, &count); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + hr = ID2D1PathGeometry_GetSegmentCount(geometry, &count); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + hr = ID2D1PathGeometry_Open(geometry, &sink); + ok(SUCCEEDED(hr), "Failed to open geometry sink, hr %#x.\n", hr); + hr = ID2D1PathGeometry_GetFigureCount(geometry, &count); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + hr = ID2D1PathGeometry_GetSegmentCount(geometry, &count); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + hr = ID2D1GeometrySink_Close(sink); + ok(SUCCEEDED(hr), "Failed to close geometry sink, hr %#x.\n", hr); + hr = ID2D1PathGeometry_GetFigureCount(geometry, &count); + ok(SUCCEEDED(hr), "Failed to get figure count, hr %#x.\n", hr); + ok(!count, "Got unexpected figure count %u.\n", count); + hr = ID2D1PathGeometry_GetSegmentCount(geometry, &count); + ok(SUCCEEDED(hr), "Failed to get segment count, hr %#x.\n", hr); + ok(!count, "Got unexpected segment count %u.\n", count); + hr = ID2D1GeometrySink_Close(sink); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + ID2D1GeometrySink_Release(sink); + hr = ID2D1PathGeometry_GetFigureCount(geometry, &count); + ok(SUCCEEDED(hr), "Failed to get figure count, hr %#x.\n", hr); + ok(!count, "Got unexpected figure count %u.\n", count); + hr = ID2D1PathGeometry_GetSegmentCount(geometry, &count); + ok(SUCCEEDED(hr), "Failed to get segment count, hr %#x.\n", hr); + ok(!count, "Got unexpected segment count %u.\n", count); + ID2D1PathGeometry_Release(geometry); + + /* Open() when closed. */ + hr = ID2D1Factory_CreatePathGeometry(factory, &geometry); + ok(SUCCEEDED(hr), "Failed to create path geometry, hr %#x.\n", hr); + hr = ID2D1PathGeometry_Open(geometry, &sink); + ok(SUCCEEDED(hr), "Failed to open geometry sink, hr %#x.\n", hr); + hr = ID2D1GeometrySink_Close(sink); + ok(SUCCEEDED(hr), "Failed to close geometry sink, hr %#x.\n", hr); + ID2D1GeometrySink_Release(sink); + hr = ID2D1PathGeometry_Open(geometry, &sink); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + hr = ID2D1PathGeometry_GetFigureCount(geometry, &count); + ok(SUCCEEDED(hr), "Failed to get figure count, hr %#x.\n", hr); + ok(!count, "Got unexpected figure count %u.\n", count); + hr = ID2D1PathGeometry_GetSegmentCount(geometry, &count); + ok(SUCCEEDED(hr), "Failed to get segment count, hr %#x.\n", hr); + ok(!count, "Got unexpected segment count %u.\n", count); + ID2D1PathGeometry_Release(geometry); + + /* Open() when open. */ + hr = ID2D1Factory_CreatePathGeometry(factory, &geometry); + ok(SUCCEEDED(hr), "Failed to create path geometry, hr %#x.\n", hr); + hr = ID2D1PathGeometry_Open(geometry, &sink); + ok(SUCCEEDED(hr), "Failed to open geometry sink, hr %#x.\n", hr); + hr = ID2D1PathGeometry_Open(geometry, &tmp_sink); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + hr = ID2D1GeometrySink_Close(sink); + ok(SUCCEEDED(hr), "Failed to close geometry sink, hr %#x.\n", hr); + ID2D1GeometrySink_Release(sink); + hr = ID2D1PathGeometry_GetFigureCount(geometry, &count); + ok(SUCCEEDED(hr), "Failed to get figure count, hr %#x.\n", hr); + ok(!count, "Got unexpected figure count %u.\n", count); + hr = ID2D1PathGeometry_GetSegmentCount(geometry, &count); + ok(SUCCEEDED(hr), "Failed to get segment count, hr %#x.\n", hr); + ok(!count, "Got unexpected segment count %u.\n", count); + ID2D1PathGeometry_Release(geometry); + + /* BeginFigure() without EndFigure(). */ + hr = ID2D1Factory_CreatePathGeometry(factory, &geometry); + ok(SUCCEEDED(hr), "Failed to create path geometry, hr %#x.\n", hr); + hr = ID2D1PathGeometry_Open(geometry, &sink); + ok(SUCCEEDED(hr), "Failed to open geometry sink, hr %#x.\n", hr); + ID2D1GeometrySink_BeginFigure(sink, point, D2D1_FIGURE_BEGIN_FILLED); + hr = ID2D1GeometrySink_Close(sink); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + ID2D1GeometrySink_EndFigure(sink, D2D1_FIGURE_END_CLOSED); + hr = ID2D1GeometrySink_Close(sink); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + ID2D1GeometrySink_Release(sink); + hr = ID2D1PathGeometry_GetFigureCount(geometry, &count); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + hr = ID2D1PathGeometry_GetSegmentCount(geometry, &count); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + ID2D1PathGeometry_Release(geometry); + + /* EndFigure() without BeginFigure(). */ + hr = ID2D1Factory_CreatePathGeometry(factory, &geometry); + ok(SUCCEEDED(hr), "Failed to create path geometry, hr %#x.\n", hr); + hr = ID2D1PathGeometry_Open(geometry, &sink); + ok(SUCCEEDED(hr), "Failed to open geometry sink, hr %#x.\n", hr); + ID2D1GeometrySink_EndFigure(sink, D2D1_FIGURE_END_CLOSED); + hr = ID2D1GeometrySink_Close(sink); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + ID2D1GeometrySink_Release(sink); + hr = ID2D1PathGeometry_GetFigureCount(geometry, &count); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + hr = ID2D1PathGeometry_GetSegmentCount(geometry, &count); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + ID2D1PathGeometry_Release(geometry); + + /* BeginFigure()/EndFigure() mismatch. */ + hr = ID2D1Factory_CreatePathGeometry(factory, &geometry); + ok(SUCCEEDED(hr), "Failed to create path geometry, hr %#x.\n", hr); + hr = ID2D1PathGeometry_Open(geometry, &sink); + ok(SUCCEEDED(hr), "Failed to open geometry sink, hr %#x.\n", hr); + ID2D1GeometrySink_BeginFigure(sink, point, D2D1_FIGURE_BEGIN_FILLED); + ID2D1GeometrySink_BeginFigure(sink, point, D2D1_FIGURE_BEGIN_FILLED); + ID2D1GeometrySink_EndFigure(sink, D2D1_FIGURE_END_CLOSED); + ID2D1GeometrySink_EndFigure(sink, D2D1_FIGURE_END_CLOSED); + hr = ID2D1GeometrySink_Close(sink); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + ID2D1GeometrySink_EndFigure(sink, D2D1_FIGURE_END_CLOSED); + hr = ID2D1GeometrySink_Close(sink); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + ID2D1GeometrySink_Release(sink); + ID2D1PathGeometry_Release(geometry); + + /* AddLine() outside BeginFigure()/EndFigure(). */ + hr = ID2D1Factory_CreatePathGeometry(factory, &geometry); + ok(SUCCEEDED(hr), "Failed to create path geometry, hr %#x.\n", hr); + hr = ID2D1PathGeometry_Open(geometry, &sink); + ok(SUCCEEDED(hr), "Failed to open geometry sink, hr %#x.\n", hr); + ID2D1GeometrySink_AddLine(sink, point); + hr = ID2D1GeometrySink_Close(sink); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + ID2D1GeometrySink_AddLine(sink, point); + ID2D1GeometrySink_Release(sink); + hr = ID2D1PathGeometry_GetFigureCount(geometry, &count); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + hr = ID2D1PathGeometry_GetSegmentCount(geometry, &count); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#x.\n", hr); + ID2D1PathGeometry_Release(geometry); + + /* Empty figure. */ + hr = ID2D1Factory_CreatePathGeometry(factory, &geometry); + ok(SUCCEEDED(hr), "Failed to create path geometry, hr %#x.\n", hr); + hr = ID2D1PathGeometry_Open(geometry, &sink); + ok(SUCCEEDED(hr), "Failed to open geometry sink, hr %#x.\n", hr); + ID2D1GeometrySink_BeginFigure(sink, point, D2D1_FIGURE_BEGIN_FILLED); + ID2D1GeometrySink_EndFigure(sink, D2D1_FIGURE_END_CLOSED); + hr = ID2D1GeometrySink_Close(sink); + ok(SUCCEEDED(hr), "Failed to close geometry sink, hr %#x.\n", hr); + ID2D1GeometrySink_Release(sink); + hr = ID2D1PathGeometry_GetFigureCount(geometry, &count); + ok(SUCCEEDED(hr), "Failed to get figure count, hr %#x.\n", hr); + ok(count == 1, "Got unexpected figure count %u.\n", count); + hr = ID2D1PathGeometry_GetSegmentCount(geometry, &count); + ok(SUCCEEDED(hr), "Failed to get segment count, hr %#x.\n", hr); + ok(count == 1, "Got unexpected segment count %u.\n", count); + ID2D1PathGeometry_Release(geometry); + + ID2D1RenderTarget_Release(rt); + refcount = ID2D1Factory_Release(factory); + ok(!refcount, "Factory has %u references left.\n", refcount); + IDXGISurface_Release(surface); + IDXGISwapChain_Release(swapchain); + ID3D10Device1_Release(device); + DestroyWindow(window); +} + START_TEST(d2d1) { test_clip(); test_state_block(); test_color_brush(); test_bitmap_brush(); + test_path_geometry(); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/d3d11/d3d11_main.c wine-staging-1.7.47~ubuntu14.10.1/dlls/d3d11/d3d11_main.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/d3d11/d3d11_main.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/d3d11/d3d11_main.c 2015-07-12 05:36:18.000000000 +0000 @@ -54,3 +54,15 @@ flags, feature_levels, levels, sdk_version, device, feature_level, context); return E_OUTOFMEMORY; } + +HRESULT WINAPI D3D11CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D_DRIVER_TYPE driver_type, + HMODULE swrast, UINT flags, const D3D_FEATURE_LEVEL *feature_levels, UINT levels, + UINT sdk_version, const DXGI_SWAP_CHAIN_DESC *swapchain_desc, IDXGISwapChain **swapchain, + ID3D11Device **device, D3D_FEATURE_LEVEL *feature_level, ID3D11DeviceContext **immediate_context) +{ + FIXME("adapter %p, driver_type %s, swrast %p, flags %#x, feature_levels %p, levels %#x, sdk_version %u, " + "swapchain_desc %p, swapchain %p, device %p, feature_level %p, immediate_context %p stub!\n", + adapter, debug_d3d_driver_type(driver_type), swrast, flags, feature_levels, levels, sdk_version, + swapchain_desc, swapchain, device, feature_level, immediate_context); + return E_NOTIMPL; +} diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/d3d11/d3d11.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/d3d11/d3d11.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/d3d11/d3d11.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/d3d11/d3d11.spec 2015-07-12 05:36:18.000000000 +0000 @@ -3,7 +3,7 @@ @ stub D3D11CoreGetLayeredDeviceSize @ stub D3D11CoreRegisterLayers @ stdcall D3D11CreateDevice(ptr long ptr long ptr long long ptr ptr ptr) -@ stub D3D11CreateDeviceAndSwapChain +@ stdcall D3D11CreateDeviceAndSwapChain(ptr long ptr long ptr long long ptr ptr ptr ptr ptr) @ stub D3DKMTCloseAdapter @ stub D3DKMTCreateAllocation @ stub D3DKMTCreateContext diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/d3d8/tests/visual.c wine-staging-1.7.47~ubuntu14.10.1/dlls/d3d8/tests/visual.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/d3d8/tests/visual.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/d3d8/tests/visual.c 2015-07-12 05:36:18.000000000 +0000 @@ -6345,6 +6345,336 @@ DestroyWindow(window); } +static void test_updatetexture(void) +{ + IDirect3DDevice8 *device; + IDirect3D8 *d3d; + HWND window; + HRESULT hr; + IDirect3DBaseTexture8 *src, *dst; + unsigned int t, i, f, l, x, y, z; + D3DLOCKED_RECT locked_rect; + D3DLOCKED_BOX locked_box; + ULONG refcount; + D3DCAPS8 caps; + D3DCOLOR color; + BOOL ati2n_supported, do_visual_test; + static const struct + { + struct vec3 pos; + struct vec2 texcoord; + } + quad[] = + { + {{-1.0f, -1.0f, 0.0f}, {0.0f, 1.0f}}, + {{-1.0f, 1.0f, 0.0f}, {0.0f, 0.0f}}, + {{ 1.0f, -1.0f, 0.0f}, {1.0f, 1.0f}}, + {{ 1.0f, 1.0f, 0.0f}, {1.0f, 0.0f}}, + }; + static const struct + { + struct vec3 pos; + struct vec3 texcoord; + } + quad_cube_tex[] = + { + {{-1.0f, -1.0f, 0.0f}, {1.0f, -0.5f, 0.5f}}, + {{-1.0f, 1.0f, 0.0f}, {1.0f, 0.5f, 0.5f}}, + {{ 1.0f, -1.0f, 0.0f}, {1.0f, -0.5f, -0.5f}}, + {{ 1.0f, 1.0f, 0.0f}, {1.0f, 0.5f, -0.5f}}, + }; + static const struct + { + UINT src_width, src_height; + UINT dst_width, dst_height; + UINT src_levels, dst_levels; + D3DFORMAT src_format, dst_format; + BOOL broken; + } + tests[] = + { + {8, 8, 8, 8, 0, 0, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 0 */ + {8, 8, 8, 8, 4, 4, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 1 */ + {8, 8, 8, 8, 2, 2, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 2 */ + {8, 8, 8, 8, 1, 1, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 3 */ + {8, 8, 8, 8, 4, 0, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 4 */ + {8, 8, 2, 2, 4, 2, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 5 */ + /* The WARP renderer doesn't handle these cases correctly. */ + {8, 8, 8, 8, 4, 2, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, TRUE}, /* 6 */ + {8, 8, 4, 4, 4, 2, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, TRUE}, /* 7 */ + /* Not clear what happens here on Windows, it doesn't make much sense + * though (on Nvidia it seems to upload the 4x4 surface into the 7x7 + * one or something like that). */ + /* {8, 8, 7, 7, 4, 2, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, */ + {8, 8, 8, 8, 1, 4, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 8 */ + {4, 4, 8, 8, 1, 1, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 9 */ + /* This one causes weird behavior on Windows (it probably writes out + * of the texture memory). */ + /* {8, 8, 4, 4, 1, 1, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, */ + {8, 4, 4, 2, 4, 2, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 10 */ + {8, 4, 2, 4, 4, 2, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 11 */ + {8, 8, 8, 8, 4, 4, D3DFMT_A8R8G8B8, D3DFMT_X8R8G8B8, FALSE}, /* 12 */ + {8, 8, 8, 8, 4, 4, D3DFMT_X8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 13 */ + /* The data is converted correctly on AMD, on Nvidia nothing happens + * (it draws a black quad). */ + {8, 8, 8, 8, 4, 4, D3DFMT_A8R8G8B8, D3DFMT_R5G6B5, TRUE}, /* 14 */ + /* This one doesn't seem to give the expected results on AMD. */ + /* {8, 8, 8, 8, 4, 4, D3DFMT_A8R8G8B8, D3DFMT_Q8W8V8U8, FALSE}, */ + {8, 8, 8, 8, 4, 4, MAKEFOURCC('A','T','I','2'), MAKEFOURCC('A','T','I','2'), FALSE}, /* 15 */ + {8, 8, 8, 8, 4, 2, MAKEFOURCC('A','T','I','2'), MAKEFOURCC('A','T','I','2'), FALSE}, /* 16 */ + {8, 8, 2, 2, 4, 2, MAKEFOURCC('A','T','I','2'), MAKEFOURCC('A','T','I','2'), FALSE}, /* 17 */ + }; + static const struct + { + D3DRESOURCETYPE type; + DWORD fvf; + const void *quad; + unsigned int vertex_size; + DWORD cap; + const char *name; + } + texture_types[] = + { + {D3DRTYPE_TEXTURE, D3DFVF_XYZ | D3DFVF_TEX1, + quad, sizeof(*quad), D3DPTEXTURECAPS_MIPMAP, "2D mipmapped"}, + + {D3DRTYPE_CUBETEXTURE, D3DFVF_XYZ | D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE3(0), + quad_cube_tex, sizeof(*quad_cube_tex), D3DPTEXTURECAPS_CUBEMAP, "Cube"}, + + {D3DRTYPE_VOLUMETEXTURE, D3DFVF_XYZ | D3DFVF_TEX1, + quad, sizeof(*quad), D3DPTEXTURECAPS_VOLUMEMAP, "Volume"} + }; + + window = CreateWindowA("static", "d3d8_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE, + 0, 0, 640, 480, NULL, NULL, NULL, NULL); + d3d = Direct3DCreate8(D3D_SDK_VERSION); + ok(!!d3d, "Failed to create a D3D object.\n"); + if (!(device = create_device(d3d, window, window, TRUE))) + { + skip("Failed to create a D3D device, skipping tests.\n"); + IDirect3D8_Release(d3d); + DestroyWindow(window); + return; + } + + hr = IDirect3DDevice8_GetDeviceCaps(device, &caps); + ok(SUCCEEDED(hr), "Failed to get caps, hr %#x.\n", hr); + + hr = IDirect3DDevice8_SetTextureStageState(device, 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR); + ok(SUCCEEDED(hr), "Failed to set texture filtering state, hr %#x.\n", hr); + hr = IDirect3DDevice8_SetTextureStageState(device, 0, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP); + ok(SUCCEEDED(hr), "Failed to set texture filtering state, hr %#x.\n", hr); + hr = IDirect3DDevice8_SetTextureStageState(device, 0, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP); + ok(SUCCEEDED(hr), "Failed to set texture filtering state, hr %#x.\n", hr); + hr = IDirect3DDevice8_SetTextureStageState(device, 0, D3DTSS_ADDRESSW, D3DTADDRESS_CLAMP); + ok(SUCCEEDED(hr), "Failed to set texture filtering state, hr %#x.\n", hr); + hr = IDirect3DDevice8_SetRenderState(device, D3DRS_LIGHTING, FALSE); + ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); + hr = IDirect3DDevice8_SetTextureStageState(device, 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); + ok(hr == D3D_OK, "Failed to set texture stage state, hr %#x.\n", hr); + hr = IDirect3DDevice8_SetTextureStageState(device, 0, D3DTSS_COLORARG1, D3DTA_TEXTURE); + ok(hr == D3D_OK, "Failed to set texture stage state, hr %#x.\n", hr); + + for (t = 0; t < sizeof(texture_types) / sizeof(*texture_types); ++t) + { + if (!(caps.TextureCaps & texture_types[t].cap)) + { + skip("%s textures not supported, skipping some tests.\n", texture_types[t].name); + continue; + } + + if (FAILED(IDirect3D8_CheckDeviceFormat(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, + D3DFMT_X8R8G8B8, 0, texture_types[t].type, MAKEFOURCC('A','T','I','2')))) + { + skip("%s ATI2N textures are not supported, skipping some tests.\n", texture_types[t].name); + ati2n_supported = FALSE; + } + else + { + ati2n_supported = TRUE; + } + + hr = IDirect3DDevice8_SetVertexShader(device, texture_types[t].fvf); + ok(SUCCEEDED(hr), "Failed to set FVF, hr %#x.\n", hr); + + for (i = 0; i < sizeof(tests) / sizeof(*tests); ++i) + { + if (tests[i].src_format == MAKEFOURCC('A','T','I','2') && !ati2n_supported) + continue; + + switch (texture_types[t].type) + { + case D3DRTYPE_TEXTURE: + hr = IDirect3DDevice8_CreateTexture(device, + tests[i].src_width, tests[i].src_height, + tests[i].src_levels, 0, tests[i].src_format, D3DPOOL_SYSTEMMEM, + (IDirect3DTexture8 **)&src); + ok(SUCCEEDED(hr), "Failed to create texture, hr %#x, case %u, %u.\n", hr, t, i); + hr = IDirect3DDevice8_CreateTexture(device, + tests[i].dst_width, tests[i].dst_height, + tests[i].dst_levels, 0, tests[i].dst_format, D3DPOOL_DEFAULT, + (IDirect3DTexture8 **)&dst); + ok(SUCCEEDED(hr), "Failed to create texture, hr %#x, case %u, %u.\n", hr, t, i); + break; + case D3DRTYPE_CUBETEXTURE: + hr = IDirect3DDevice8_CreateCubeTexture(device, + tests[i].src_width, + tests[i].src_levels, 0, tests[i].src_format, D3DPOOL_SYSTEMMEM, + (IDirect3DCubeTexture8 **)&src); + ok(SUCCEEDED(hr), "Failed to create texture, hr %#x, case %u, %u.\n", hr, t, i); + hr = IDirect3DDevice8_CreateCubeTexture(device, + tests[i].dst_width, + tests[i].dst_levels, 0, tests[i].dst_format, D3DPOOL_DEFAULT, + (IDirect3DCubeTexture8 **)&dst); + ok(SUCCEEDED(hr), "Failed to create texture, hr %#x, case %u, %u.\n", hr, t, i); + break; + case D3DRTYPE_VOLUMETEXTURE: + hr = IDirect3DDevice8_CreateVolumeTexture(device, + tests[i].src_width, tests[i].src_height, tests[i].src_width, + tests[i].src_levels, 0, tests[i].src_format, D3DPOOL_SYSTEMMEM, + (IDirect3DVolumeTexture8 **)&src); + ok(SUCCEEDED(hr), "Failed to create texture, hr %#x, case %u, %u.\n", hr, t, i); + hr = IDirect3DDevice8_CreateVolumeTexture(device, + tests[i].dst_width, tests[i].dst_height, tests[i].dst_width, + tests[i].dst_levels, 0, tests[i].dst_format, D3DPOOL_DEFAULT, + (IDirect3DVolumeTexture8 **)&dst); + ok(SUCCEEDED(hr), "Failed to create texture, hr %#x, case %u, %u.\n", hr, t, i); + break; + default: + trace("Unexpected resource type.\n"); + } + + /* Skip the visual part of the test for ATI2N (laziness) and cases that + * give a different (and unlikely to be useful) result. */ + do_visual_test = (tests[i].src_format == D3DFMT_A8R8G8B8 || tests[i].src_format == D3DFMT_X8R8G8B8) + && tests[i].src_levels != 0 + && tests[i].src_width >= tests[i].dst_width && tests[i].src_height >= tests[i].dst_height + && !(tests[i].src_width > tests[i].src_height && tests[i].dst_width < tests[i].dst_height); + + if (do_visual_test) + { + DWORD *ptr = NULL; + unsigned int width, height, depth, row_pitch = 0, slice_pitch = 0; + + for (f = 0; f < (texture_types[t].type == D3DRTYPE_CUBETEXTURE ? 6 : 1); ++f) + { + width = tests[i].src_width; + height = texture_types[t].type != D3DRTYPE_CUBETEXTURE ? tests[i].src_height : tests[i].src_width; + depth = texture_types[t].type == D3DRTYPE_VOLUMETEXTURE ? width : 1; + + for (l = 0; l < tests[i].src_levels; ++l) + { + switch (texture_types[t].type) + { + case D3DRTYPE_TEXTURE: + hr = IDirect3DTexture8_LockRect((IDirect3DTexture8 *)src, + l, &locked_rect, NULL, 0); + ptr = locked_rect.pBits; + row_pitch = locked_rect.Pitch / sizeof(*ptr); + break; + case D3DRTYPE_CUBETEXTURE: + hr = IDirect3DCubeTexture8_LockRect((IDirect3DCubeTexture8 *)src, + f, l, &locked_rect, NULL, 0); + ptr = locked_rect.pBits; + row_pitch = locked_rect.Pitch / sizeof(*ptr); + break; + case D3DRTYPE_VOLUMETEXTURE: + hr = IDirect3DVolumeTexture8_LockBox((IDirect3DVolumeTexture8 *)src, + l, &locked_box, NULL, 0); + ptr = locked_box.pBits; + row_pitch = locked_box.RowPitch / sizeof(*ptr); + slice_pitch = locked_box.SlicePitch / sizeof(*ptr); + break; + default: + trace("Unexpected resource type.\n"); + } + ok(SUCCEEDED(hr), "Failed to lock texture, hr %#x.\n", hr); + + for (z = 0; z < depth; ++z) + { + for (y = 0; y < height; ++y) + { + for (x = 0; x < width; ++x) + { + ptr[z * slice_pitch + y * row_pitch + x] = 0xff000000 + | (DWORD)(x / (width - 1.0f) * 255.0f) << 16 + | (DWORD)(y / (height - 1.0f) * 255.0f) << 8; + } + } + } + + switch (texture_types[t].type) + { + case D3DRTYPE_TEXTURE: + hr = IDirect3DTexture8_UnlockRect((IDirect3DTexture8 *)src, l); + break; + case D3DRTYPE_CUBETEXTURE: + hr = IDirect3DCubeTexture8_UnlockRect((IDirect3DCubeTexture8 *)src, f, l); + break; + case D3DRTYPE_VOLUMETEXTURE: + hr = IDirect3DVolumeTexture8_UnlockBox((IDirect3DVolumeTexture8 *)src, l); + break; + default: + trace("Unexpected resource type.\n"); + } + ok(SUCCEEDED(hr), "Failed to unlock texture, hr %#x.\n", hr); + + width >>= 1; + if (!width) + width = 1; + height >>= 1; + if (!height) + height = 1; + depth >>= 1; + if (!depth) + depth = 1; + } + } + } + + hr = IDirect3DDevice8_UpdateTexture(device, src, dst); + if (FAILED(hr)) + { + todo_wine ok(SUCCEEDED(hr), "Failed to update texture, hr %#x, case %u, %u.\n", hr, t, i); + IDirect3DBaseTexture8_Release(src); + IDirect3DBaseTexture8_Release(dst); + continue; + } + ok(SUCCEEDED(hr), "Failed to update texture, hr %#x, case %u, %u.\n", hr, t, i); + + if (do_visual_test) + { + hr = IDirect3DDevice8_SetTexture(device, 0, dst); + ok(SUCCEEDED(hr), "Failed to set texture, hr %#x.\n", hr); + + hr = IDirect3DDevice8_Clear(device, 0, NULL, D3DCLEAR_TARGET, 0xff0000ff, 1.0f, 0); + ok(SUCCEEDED(hr), "Failed to clear, hr %#x.\n", hr); + + hr = IDirect3DDevice8_BeginScene(device); + ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x.\n", hr); + hr = IDirect3DDevice8_DrawPrimitiveUP(device, D3DPT_TRIANGLESTRIP, 2, + texture_types[t].quad, texture_types[t].vertex_size); + ok(SUCCEEDED(hr), "Failed to draw, hr %#x.\n", hr); + hr = IDirect3DDevice8_EndScene(device); + ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr); + + color = getPixelColor(device, 320, 240); + ok (color_match(color, 0x007f7f00, 2) || broken(tests[i].broken) + || broken(color == 0xdeadbeec), /* WARP device often just breaks down. */ + "Got unexpected color 0x%08x, case %u, %u.\n", color, t, i); + } + + IDirect3DBaseTexture8_Release(src); + IDirect3DBaseTexture8_Release(dst); + } + } + + refcount = IDirect3DDevice8_Release(device); + ok(!refcount, "Device has %u references left.\n", refcount); + IDirect3D8_Release(d3d); + DestroyWindow(window); +} + static BOOL point_match(IDirect3DDevice8 *device, UINT x, UINT y, UINT r) { D3DCOLOR color; @@ -7610,6 +7940,7 @@ test_negative_fixedfunction_fog(); test_table_fog_zw(); test_signed_formats(); + test_updatetexture(); test_pointsize(); test_multisample_mismatch(); test_texcoordindex(); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/d3d9/tests/visual.c wine-staging-1.7.47~ubuntu14.10.1/dlls/d3d9/tests/visual.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/d3d9/tests/visual.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/d3d9/tests/visual.c 2015-07-12 05:36:18.000000000 +0000 @@ -19077,6 +19077,550 @@ DestroyWindow(window); } +static void test_vertex_blending(void) +{ + IDirect3DDevice9 *device; + IDirect3D9 *d3d; + D3DCAPS9 caps; + D3DCOLOR color; + ULONG refcount; + HWND window; + HRESULT hr; + int i; + + static const D3DMATRIX view_mat = + {{{ + 2.0f / 10.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 2.0f / 10.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f + }}}, + upper_left = + {{{ + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + -4.0f, 4.0f, 0.0f, 1.0f + }}}, + lower_left = + {{{ + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + -4.0f, -4.0f, 0.0f, 1.0f + }}}, + upper_right = + {{{ + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 4.0f, 4.0f, 0.0f, 1.0f + }}}, + lower_right = + {{{ + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 4.0f, -4.0f, 0.0f, 1.0f + }}}; + + static const POINT quad_upper_right_points[] = + { + {576, 48}, {-1, -1}, + }, + quad_upper_right_empty_points[] = + { + {64, 48}, {64, 432}, {576, 432}, {320, 240}, {-1, -1} + }, + quad_center_points[] = + { + {320, 240}, {-1, -1} + }, + quad_center_empty_points[] = + { + {64, 48}, {576, 48}, {64, 432}, {576, 432}, {-1, -1} + }, + quad_upper_center_points[] = + { + {320, 48}, {-1, -1} + }, + quad_upper_center_empty_points[] = + { + {320, 240}, {64, 48}, {576, 48}, {-1, -1} + }, + quad_fullscreen_points[] = + { + {320, 48}, {320, 240}, {64, 48}, {576, 48}, {64, 432}, {576, 432}, {-1, -1} + }, + quad_fullscreen_empty_points[] = + { + {-1, -1} + }; + + static const struct + { + struct + { + struct vec3 position; + struct vec3 blendweights; + } + vertex_data[4]; + const POINT *quad_points; + const POINT *empty_points; + } + tests[] = + { + /* upper right */ + { + {{{-1.0f, -1.0f, 0.0f}, {0.0f, 0.0f, 0.0f}}, + {{-1.0f, 1.0f, 0.0f}, {0.0f, 0.0f, 0.0f}}, + {{ 1.0f, -1.0f, 0.0f}, {0.0f, 0.0f, 0.0f}}, + {{ 1.0f, 1.0f, 0.0f}, {0.0f, 0.0f, 0.0f}}}, + quad_upper_right_points, quad_upper_right_empty_points + }, + /* center */ + { + {{{-1.0f, -1.0f, 0.0f}, {0.25f, 0.25f, 0.25f}}, + {{-1.0f, 1.0f, 0.0f}, {0.25f, 0.25f, 0.25f}}, + {{ 1.0f, -1.0f, 0.0f}, {0.25f, 0.25f, 0.25f}}, + {{ 1.0f, 1.0f, 0.0f}, {0.25f, 0.25f, 0.25f}}}, + quad_center_points, quad_center_empty_points + }, + /* upper center */ + { + {{{-1.0f, -1.0f, 0.0f}, {0.5f, 0.0f, 0.0f}}, + {{-1.0f, 1.0f, 0.0f}, {0.5f, 0.0f, 0.0f}}, + {{ 1.0f, -1.0f, 0.0f}, {0.5f, 0.0f, 0.0f}}, + {{ 1.0f, 1.0f, 0.0f}, {0.5f, 0.0f, 0.0f}}}, + quad_upper_center_points, quad_upper_center_empty_points + }, + /* full screen */ + { + {{{-1.0f, -1.0f, 0.0f}, {0.0f, 1.0f, 0.0f}}, + {{-1.0f, 1.0f, 0.0f}, {1.0f, 0.0f, 0.0f}}, + {{ 1.0f, -1.0f, 0.0f}, {0.0f, 0.0f, 1.0f}}, + {{ 1.0f, 1.0f, 0.0f}, {0.0f, 0.0f, 0.0f}}}, + quad_fullscreen_points, quad_fullscreen_empty_points + } + }; + + window = CreateWindowA("static", "d3d9_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE, + 0, 0, 640, 480, NULL, NULL, NULL, NULL); + d3d = Direct3DCreate9(D3D_SDK_VERSION); + ok(!!d3d, "Failed to create a D3D object.\n"); + if (!(device = create_device(d3d, window, window, TRUE))) + { + skip("Failed to create a D3D device, skipping tests.\n"); + goto done; + } + + hr = IDirect3DDevice9_GetDeviceCaps(device, &caps); + ok(SUCCEEDED(hr), "Failed to get device caps, hr %#x.\n", hr); + if (caps.MaxVertexBlendMatrices < 4) + { + skip("Only %u vertex blend matrices supported, skipping tests.\n", caps.MaxVertexBlendMatrices); + IDirect3DDevice9_Release(device); + goto done; + } + + hr = IDirect3DDevice9_SetRenderState(device, D3DRS_LIGHTING, FALSE); + ok(hr == D3D_OK, "IDirect3DDevice9_SetRenderState returned %08x\n", hr); + + hr = IDirect3DDevice9_SetTransform(device, D3DTS_VIEW, &view_mat); + ok(hr == D3D_OK, "IDirect3DDevice9_SetTransform returned %08x\n", hr); + + hr = IDirect3DDevice9_SetTransform(device, D3DTS_WORLDMATRIX(0), &upper_left); + ok(hr == D3D_OK, "IDirect3DDevice9_SetTransform returned %08x\n", hr); + hr = IDirect3DDevice9_SetTransform(device, D3DTS_WORLDMATRIX(1), &lower_left); + ok(hr == D3D_OK, "IDirect3DDevice9_SetTransform returned %08x\n", hr); + hr = IDirect3DDevice9_SetTransform(device, D3DTS_WORLDMATRIX(2), &lower_right); + ok(hr == D3D_OK, "IDirect3DDevice9_SetTransform returned %08x\n", hr); + hr = IDirect3DDevice9_SetTransform(device, D3DTS_WORLDMATRIX(3), &upper_right); + ok(hr == D3D_OK, "IDirect3DDevice9_SetTransform returned %08x\n", hr); + + hr = IDirect3DDevice9_SetRenderState(device, D3DRS_VERTEXBLEND, D3DVBF_3WEIGHTS); + ok(hr == D3D_OK, "IDirect3DDevice9_SetRenderState failed %08x\n", hr); + + for (i = 0; i < sizeof(tests) / sizeof(tests[0]); ++i) + { + const POINT *point; + + hr = IDirect3DDevice9_Clear(device, 0, NULL, D3DCLEAR_TARGET, 0xff000000, 0.0, 0); + ok(SUCCEEDED(hr), "Failed to clear %08x\n", hr); + + hr = IDirect3DDevice9_BeginScene(device); + ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x.\n", hr); + + hr = IDirect3DDevice9_SetFVF(device, D3DFVF_XYZB3); + ok(SUCCEEDED(hr), "Failed to set FVF, hr %#x.\n", hr); + + hr = IDirect3DDevice9_DrawPrimitiveUP(device, D3DPT_TRIANGLESTRIP, 2, tests[i].vertex_data, 6 * sizeof(float)); + ok(SUCCEEDED(hr), "Failed to draw, hr %#x.\n", hr); + + hr = IDirect3DDevice9_EndScene(device); + ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr); + + hr = IDirect3DDevice9_Present(device, NULL, NULL, NULL, NULL); + ok(hr == D3D_OK, "IDirect3DDevice9_Present failed with %08x\n", hr); + + point = tests[i].quad_points; + while (point->x != -1 && point->y != -1) + { + color = getPixelColor(device, point->x, point->y); + ok(color_match(color, 0x00ffffff, 1), "Expected quad at %dx%d.\n", point->x, point->y); + ++point; + } + + point = tests[i].empty_points; + while (point->x != -1 && point->y != -1) + { + color = getPixelColor(device, point->x, point->y); + ok(color_match(color, 0x00000000, 1), "Unexpected quad at %dx%d.\n", point->x, point->y); + ++point; + } + } + + refcount = IDirect3DDevice9_Release(device); + ok(!refcount, "Device has %u references left.\n", refcount); + +done: + IDirect3D9_Release(d3d); + DestroyWindow(window); +} + +static void test_updatetexture(void) +{ + IDirect3DDevice9 *device; + IDirect3D9 *d3d9; + HWND window; + HRESULT hr; + IDirect3DBaseTexture9 *src, *dst; + unsigned int t, i, f, l, x, y, z; + D3DLOCKED_RECT locked_rect; + D3DLOCKED_BOX locked_box; + ULONG refcount; + D3DCAPS9 caps; + D3DCOLOR color; + BOOL ati2n_supported, do_visual_test; + static const struct + { + struct vec3 pos; + struct vec2 texcoord; + } + quad[] = + { + {{-1.0f, -1.0f, 0.0f}, {0.0f, 1.0f}}, + {{-1.0f, 1.0f, 0.0f}, {0.0f, 0.0f}}, + {{ 1.0f, -1.0f, 0.0f}, {1.0f, 1.0f}}, + {{ 1.0f, 1.0f, 0.0f}, {1.0f, 0.0f}}, + }; + static const struct + { + struct vec3 pos; + struct vec3 texcoord; + } + quad_cube_tex[] = + { + {{-1.0f, -1.0f, 0.0f}, {1.0f, -0.5f, 0.5f}}, + {{-1.0f, 1.0f, 0.0f}, {1.0f, 0.5f, 0.5f}}, + {{ 1.0f, -1.0f, 0.0f}, {1.0f, -0.5f, -0.5f}}, + {{ 1.0f, 1.0f, 0.0f}, {1.0f, 0.5f, -0.5f}}, + }; + static const struct + { + UINT src_width, src_height; + UINT dst_width, dst_height; + UINT src_levels, dst_levels; + D3DFORMAT src_format, dst_format; + BOOL broken; + } + tests[] = + { + {8, 8, 8, 8, 0, 0, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 0 */ + {8, 8, 8, 8, 4, 4, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 1 */ + {8, 8, 8, 8, 2, 2, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 2 */ + {8, 8, 8, 8, 1, 1, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 3 */ + {8, 8, 8, 8, 4, 0, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 4 */ + {8, 8, 2, 2, 4, 2, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 5 */ + /* The WARP renderer doesn't handle these cases correctly. */ + {8, 8, 8, 8, 4, 2, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, TRUE}, /* 6 */ + {8, 8, 4, 4, 4, 2, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, TRUE}, /* 7 */ + /* Not clear what happens here on Windows, it doesn't make much sense + * though (on Nvidia it seems to upload the 4x4 surface into the 7x7 + * one or something like that). */ + /* {8, 8, 7, 7, 4, 2, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, */ + {8, 8, 8, 8, 1, 4, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 8 */ + {4, 4, 8, 8, 1, 1, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 9 */ + /* This one causes weird behavior on Windows (it probably writes out + * of the texture memory). */ + /* {8, 8, 4, 4, 1, 1, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, */ + {8, 4, 4, 2, 4, 2, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 10 */ + {8, 4, 2, 4, 4, 2, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 11 */ + {8, 8, 8, 8, 4, 4, D3DFMT_A8R8G8B8, D3DFMT_X8R8G8B8, FALSE}, /* 12 */ + {8, 8, 8, 8, 4, 4, D3DFMT_X8R8G8B8, D3DFMT_A8R8G8B8, FALSE}, /* 13 */ + /* The data is converted correctly on AMD, on Nvidia nothing happens + * (it draws a black quad). */ + {8, 8, 8, 8, 4, 4, D3DFMT_A8R8G8B8, D3DFMT_R5G6B5, TRUE}, /* 14 */ + /* Here the data is converted on AMD, just copied and "reinterpreted" as + * a 32 bit float on Nvidia (specifically the tested value becomes a + * very small float number which we get as 0 in the test). */ + {8, 8, 8, 8, 4, 4, D3DFMT_A8R8G8B8, D3DFMT_R32F, TRUE}, /* 15 */ + /* This one doesn't seem to give the expected results on AMD. */ + /* {8, 8, 8, 8, 4, 4, D3DFMT_A8R8G8B8, D3DFMT_Q8W8V8U8, FALSE}, */ + {8, 8, 8, 8, 4, 4, MAKEFOURCC('A','T','I','2'), MAKEFOURCC('A','T','I','2'), FALSE}, /* 16 */ + {8, 8, 8, 8, 4, 2, MAKEFOURCC('A','T','I','2'), MAKEFOURCC('A','T','I','2'), FALSE}, /* 17 */ + {8, 8, 2, 2, 4, 2, MAKEFOURCC('A','T','I','2'), MAKEFOURCC('A','T','I','2'), FALSE}, /* 18 */ + }; + static const struct + { + D3DRESOURCETYPE type; + DWORD fvf; + const void *quad; + unsigned int vertex_size; + DWORD cap; + const char *name; + } + texture_types[] = + { + {D3DRTYPE_TEXTURE, D3DFVF_XYZ | D3DFVF_TEX1, + quad, sizeof(*quad), D3DPTEXTURECAPS_MIPMAP, "2D mipmapped"}, + + {D3DRTYPE_CUBETEXTURE, D3DFVF_XYZ | D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE3(0), + quad_cube_tex, sizeof(*quad_cube_tex), D3DPTEXTURECAPS_CUBEMAP, "Cube"}, + + {D3DRTYPE_VOLUMETEXTURE, D3DFVF_XYZ | D3DFVF_TEX1, + quad, sizeof(*quad), D3DPTEXTURECAPS_VOLUMEMAP, "Volume"} + }; + + window = CreateWindowA("static", "d3d9_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE, + 0, 0, 640, 480, NULL, NULL, NULL, NULL); + d3d9 = Direct3DCreate9(D3D_SDK_VERSION); + ok(!!d3d9, "Failed to create a D3D object.\n"); + if (!(device = create_device(d3d9, window, window, TRUE))) + { + skip("Failed to create a D3D device, skipping tests.\n"); + IDirect3D9_Release(d3d9); + DestroyWindow(window); + return; + } + + hr = IDirect3DDevice9_GetDeviceCaps(device, &caps); + ok(SUCCEEDED(hr), "Failed to get caps, hr %#x.\n", hr); + + hr = IDirect3DDevice9_SetSamplerState(device, 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); + ok(SUCCEEDED(hr), "Failed to set texture filtering state, hr %#x.\n", hr); + hr = IDirect3DDevice9_SetSamplerState(device, 0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP); + ok(SUCCEEDED(hr), "Failed to set texture clamping state, hr %#x.\n", hr); + hr = IDirect3DDevice9_SetSamplerState(device, 0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP); + ok(SUCCEEDED(hr), "Failed to set texture clamping state, hr %#x.\n", hr); + hr = IDirect3DDevice9_SetSamplerState(device, 0, D3DSAMP_ADDRESSW, D3DTADDRESS_CLAMP); + ok(SUCCEEDED(hr), "Failed to set texture clamping state, hr %#x.\n", hr); + hr = IDirect3DDevice9_SetRenderState(device, D3DRS_LIGHTING, FALSE); + ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); + hr = IDirect3DDevice9_SetTextureStageState(device, 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); + ok(hr == D3D_OK, "Failed to set texture stage state, hr %#x.\n", hr); + hr = IDirect3DDevice9_SetTextureStageState(device, 0, D3DTSS_COLORARG1, D3DTA_TEXTURE); + ok(hr == D3D_OK, "Failed to set texture stage state, hr %#x.\n", hr); + + for (t = 0; t < sizeof(texture_types) / sizeof(*texture_types); ++t) + { + if (!(caps.TextureCaps & texture_types[t].cap)) + { + skip("%s textures not supported, skipping some tests.\n", texture_types[t].name); + continue; + } + + if (FAILED(IDirect3D9_CheckDeviceFormat(d3d9, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, + D3DFMT_X8R8G8B8, 0, texture_types[t].type, MAKEFOURCC('A','T','I','2')))) + { + skip("%s ATI2N textures are not supported, skipping some tests.\n", texture_types[t].name); + ati2n_supported = FALSE; + } + else + { + ati2n_supported = TRUE; + } + + hr = IDirect3DDevice9_SetFVF(device, texture_types[t].fvf); + ok(SUCCEEDED(hr), "Failed to set FVF, hr %#x.\n", hr); + + for (i = 0; i < sizeof(tests) / sizeof(*tests); ++i) + { + if (tests[i].src_format == MAKEFOURCC('A','T','I','2') && !ati2n_supported) + continue; + + switch (texture_types[t].type) + { + case D3DRTYPE_TEXTURE: + hr = IDirect3DDevice9_CreateTexture(device, + tests[i].src_width, tests[i].src_height, + tests[i].src_levels, 0, tests[i].src_format, D3DPOOL_SYSTEMMEM, + (IDirect3DTexture9 **)&src, NULL); + ok(SUCCEEDED(hr), "Failed to create texture, hr %#x, case %u, %u.\n", hr, t, i); + hr = IDirect3DDevice9_CreateTexture(device, + tests[i].dst_width, tests[i].dst_height, + tests[i].dst_levels, 0, tests[i].dst_format, D3DPOOL_DEFAULT, + (IDirect3DTexture9 **)&dst, NULL); + ok(SUCCEEDED(hr), "Failed to create texture, hr %#x, case %u, %u.\n", hr, t, i); + break; + case D3DRTYPE_CUBETEXTURE: + hr = IDirect3DDevice9_CreateCubeTexture(device, + tests[i].src_width, + tests[i].src_levels, 0, tests[i].src_format, D3DPOOL_SYSTEMMEM, + (IDirect3DCubeTexture9 **)&src, NULL); + ok(SUCCEEDED(hr), "Failed to create texture, hr %#x, case %u, %u.\n", hr, t, i); + hr = IDirect3DDevice9_CreateCubeTexture(device, + tests[i].dst_width, + tests[i].dst_levels, 0, tests[i].dst_format, D3DPOOL_DEFAULT, + (IDirect3DCubeTexture9 **)&dst, NULL); + ok(SUCCEEDED(hr), "Failed to create texture, hr %#x, case %u, %u.\n", hr, t, i); + break; + case D3DRTYPE_VOLUMETEXTURE: + hr = IDirect3DDevice9_CreateVolumeTexture(device, + tests[i].src_width, tests[i].src_height, tests[i].src_width, + tests[i].src_levels, 0, tests[i].src_format, D3DPOOL_SYSTEMMEM, + (IDirect3DVolumeTexture9 **)&src, NULL); + ok(SUCCEEDED(hr), "Failed to create texture, hr %#x, case %u, %u.\n", hr, t, i); + hr = IDirect3DDevice9_CreateVolumeTexture(device, + tests[i].dst_width, tests[i].dst_height, tests[i].dst_width, + tests[i].dst_levels, 0, tests[i].dst_format, D3DPOOL_DEFAULT, + (IDirect3DVolumeTexture9 **)&dst, NULL); + ok(SUCCEEDED(hr), "Failed to create texture, hr %#x, case %u, %u.\n", hr, t, i); + break; + default: + trace("Unexpected resource type.\n"); + } + + /* Skip the visual part of the test for ATI2N (laziness) and cases that + * give a different (and unlikely to be useful) result. */ + do_visual_test = (tests[i].src_format == D3DFMT_A8R8G8B8 || tests[i].src_format == D3DFMT_X8R8G8B8) + && tests[i].src_levels != 0 + && tests[i].src_width >= tests[i].dst_width && tests[i].src_height >= tests[i].dst_height + && !(tests[i].src_width > tests[i].src_height && tests[i].dst_width < tests[i].dst_height); + + if (do_visual_test) + { + DWORD *ptr = NULL; + unsigned int width, height, depth, row_pitch = 0, slice_pitch = 0; + + for (f = 0; f < (texture_types[t].type == D3DRTYPE_CUBETEXTURE ? 6 : 1); ++f) + { + width = tests[i].src_width; + height = texture_types[t].type != D3DRTYPE_CUBETEXTURE ? tests[i].src_height : tests[i].src_width; + depth = texture_types[t].type == D3DRTYPE_VOLUMETEXTURE ? width : 1; + + for (l = 0; l < tests[i].src_levels; ++l) + { + switch (texture_types[t].type) + { + case D3DRTYPE_TEXTURE: + hr = IDirect3DTexture9_LockRect((IDirect3DTexture9 *)src, + l, &locked_rect, NULL, 0); + ptr = locked_rect.pBits; + row_pitch = locked_rect.Pitch / sizeof(*ptr); + break; + case D3DRTYPE_CUBETEXTURE: + hr = IDirect3DCubeTexture9_LockRect((IDirect3DCubeTexture9 *)src, + f, l, &locked_rect, NULL, 0); + ptr = locked_rect.pBits; + row_pitch = locked_rect.Pitch / sizeof(*ptr); + break; + case D3DRTYPE_VOLUMETEXTURE: + hr = IDirect3DVolumeTexture9_LockBox((IDirect3DVolumeTexture9 *)src, + l, &locked_box, NULL, 0); + ptr = locked_box.pBits; + row_pitch = locked_box.RowPitch / sizeof(*ptr); + slice_pitch = locked_box.SlicePitch / sizeof(*ptr); + break; + default: + trace("Unexpected resource type.\n"); + } + ok(SUCCEEDED(hr), "Failed to lock texture, hr %#x.\n", hr); + + for (z = 0; z < depth; ++z) + { + for (y = 0; y < height; ++y) + { + for (x = 0; x < width; ++x) + { + ptr[z * slice_pitch + y * row_pitch + x] = 0xff000000 + | (DWORD)(x / (width - 1.0f) * 255.0f) << 16 + | (DWORD)(y / (height - 1.0f) * 255.0f) << 8; + } + } + } + + switch (texture_types[t].type) + { + case D3DRTYPE_TEXTURE: + hr = IDirect3DTexture9_UnlockRect((IDirect3DTexture9 *)src, l); + break; + case D3DRTYPE_CUBETEXTURE: + hr = IDirect3DCubeTexture9_UnlockRect((IDirect3DCubeTexture9 *)src, f, l); + break; + case D3DRTYPE_VOLUMETEXTURE: + hr = IDirect3DVolumeTexture9_UnlockBox((IDirect3DVolumeTexture9 *)src, l); + break; + default: + trace("Unexpected resource type.\n"); + } + ok(SUCCEEDED(hr), "Failed to unlock texture, hr %#x.\n", hr); + + width >>= 1; + if (!width) + width = 1; + height >>= 1; + if (!height) + height = 1; + depth >>= 1; + if (!depth) + depth = 1; + } + } + } + + hr = IDirect3DDevice9_UpdateTexture(device, src, dst); + if (FAILED(hr)) + { + todo_wine ok(SUCCEEDED(hr), "Failed to update texture, hr %#x, case %u, %u.\n", hr, t, i); + IDirect3DBaseTexture9_Release(src); + IDirect3DBaseTexture9_Release(dst); + continue; + } + ok(SUCCEEDED(hr), "Failed to update texture, hr %#x, case %u, %u.\n", hr, t, i); + + if (do_visual_test) + { + hr = IDirect3DDevice9_SetTexture(device, 0, dst); + ok(SUCCEEDED(hr), "Failed to set texture, hr %#x.\n", hr); + + hr = IDirect3DDevice9_Clear(device, 0, NULL, D3DCLEAR_TARGET, 0xff0000ff, 1.0f, 0); + ok(SUCCEEDED(hr), "Failed to clear, hr %#x.\n", hr); + + hr = IDirect3DDevice9_BeginScene(device); + ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x.\n", hr); + hr = IDirect3DDevice9_DrawPrimitiveUP(device, D3DPT_TRIANGLESTRIP, 2, + texture_types[t].quad, texture_types[t].vertex_size); + ok(SUCCEEDED(hr), "Failed to draw, hr %#x.\n", hr); + hr = IDirect3DDevice9_EndScene(device); + ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr); + + color = getPixelColor(device, 320, 240); + ok (color_match(color, 0x007f7f00, 2) || broken(tests[i].broken) + || broken(color == 0xdeadbeec), /* WARP device often just breaks down. */ + "Got unexpected color 0x%08x, case %u, %u.\n", color, t, i); + } + + IDirect3DBaseTexture9_Release(src); + IDirect3DBaseTexture9_Release(dst); + } + } + refcount = IDirect3DDevice9_Release(device); + ok(!refcount, "Device has %u references left.\n", refcount); + IDirect3D9_Release(d3d9); + DestroyWindow(window); +} + START_TEST(visual) { D3DADAPTER_IDENTIFIER9 identifier; @@ -19192,4 +19736,6 @@ test_signed_formats(); test_multisample_mismatch(); test_texcoordindex(); + test_vertex_blending(); + test_updatetexture(); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/d3drm/d3drm.c wine-staging-1.7.47~ubuntu14.10.1/dlls/d3drm/d3drm.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/d3drm/d3drm.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/d3drm/d3drm.c 2015-07-12 05:36:18.000000000 +0000 @@ -963,10 +963,10 @@ } static HRESULT WINAPI d3drm3_CreateDeviceFromSurface(IDirect3DRM3 *iface, GUID *guid, - IDirectDraw *ddraw, IDirectDrawSurface *backbuffer, IDirect3DRMDevice3 **device) + IDirectDraw *ddraw, IDirectDrawSurface *backbuffer, DWORD flags, IDirect3DRMDevice3 **device) { - FIXME("iface %p, guid %s, ddraw %p, backbuffer %p, device %p partial stub.\n", - iface, debugstr_guid(guid), ddraw, backbuffer, device); + FIXME("iface %p, guid %s, ddraw %p, backbuffer %p, flags %#x, device %p partial stub.\n", + iface, debugstr_guid(guid), ddraw, backbuffer, flags, device); return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown **)device); } @@ -1528,3 +1528,18 @@ return S_OK; } + +HRESULT WINAPI DllCanUnloadNow(void) +{ + return S_FALSE; +} + +HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv) +{ + TRACE("(%s, %s, %p): stub\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv); + + if(!ppv) + return E_INVALIDARG; + + return CLASS_E_CLASSNOTAVAILABLE; +} diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/d3drm/d3drm.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/d3drm/d3drm.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/d3drm/d3drm.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/d3drm/d3drm.spec 2015-07-12 05:36:18.000000000 +0000 @@ -19,5 +19,5 @@ @ stdcall D3DRMVectorScale(ptr ptr float) @ stdcall D3DRMVectorSubtract(ptr ptr ptr) @ stdcall Direct3DRMCreate(ptr) -@ stub DllCanUnloadNow -@ stub DllGetClassObject +@ stdcall -private DllCanUnloadNow() +@ stdcall -private DllGetClassObject(ptr ptr ptr) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/d3drm/tests/d3drm.c wine-staging-1.7.47~ubuntu14.10.1/dlls/d3drm/tests/d3drm.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/d3drm/tests/d3drm.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/d3drm/tests/d3drm.c 2015-07-12 05:36:18.000000000 +0000 @@ -1947,6 +1947,591 @@ IDirect3DRM_Release(d3drm1); } +static HRESULT CALLBACK surface_callback(IDirectDrawSurface *surface, DDSURFACEDESC *desc, void *context) +{ + IDirectDrawSurface **primary = context; + + if (desc->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) + { + *primary = surface; + return DDENUMRET_CANCEL; + } + IDirectDrawSurface_Release(surface); + + return DDENUMRET_OK; +} + +static void test_create_device_from_clipper(void) +{ + DDSCAPS caps = { DDSCAPS_ZBUFFER }; + IDirect3DRM *d3drm1 = NULL; + IDirect3DRM2 *d3drm2 = NULL; + IDirectDraw *ddraw = NULL; + IUnknown *unknown = NULL; + IDirect3DRMDevice2 *device2 = NULL; + IDirect3DDevice2 *d3ddevice2 = NULL; + IDirectDrawClipper *clipper = NULL, *d3drm_clipper = NULL; + IDirectDrawSurface *surface = NULL, *ds = NULL, *d3drm_primary = NULL; + IDirectDrawSurface7 *surface7 = NULL; + DDSURFACEDESC desc, surface_desc; + DWORD expected_flags; + HWND window; + GUID driver = IID_IDirect3DRGBDevice; + HRESULT hr; + ULONG ref1, ref2, ref3, cref1, cref2; + RECT rc; + + window = CreateWindowA("static", "d3drm_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, 500, 400, 0, 0, 0, 0); + GetClientRect(window, &rc); + hr = DirectDrawCreateClipper(0, &clipper, NULL); + ok(hr == DD_OK, "Cannot get IDirectDrawClipper interface (hr = %x).\n", hr); + hr = IDirectDrawClipper_SetHWnd(clipper, 0, window); + ok(hr == DD_OK, "Cannot set HWnd to Clipper (hr = %x).\n", hr); + + hr = Direct3DRMCreate(&d3drm1); + ok(hr == D3DRM_OK, "Cannot get IDirect3DRM interface (hr = %x).\n", hr); + ref1 = get_refcount((IUnknown *)d3drm1); + cref1 = get_refcount((IUnknown *)clipper); + + hr = IDirect3DRM_QueryInterface(d3drm1, &IID_IDirect3DRM2, (void **)&d3drm2); + ok(hr == D3DRM_OK, "Cannot get IDirect3DRM2 interface (hr = %x).\n", hr); + ref2 = get_refcount((IUnknown *)d3drm2); + + hr = IDirect3DRM2_CreateDeviceFromClipper(d3drm2, clipper, &driver, 0, 0, &device2); + todo_wine ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %x.\n", hr); + + /* If NULL is passed for clipper, CreateDeviceFromClipper returns D3DRMERR_BADVALUE */ + hr = IDirect3DRM2_CreateDeviceFromClipper(d3drm2, NULL, &driver, 0, 0, &device2); + todo_wine ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %x.\n", hr); + + hr = IDirect3DRM2_CreateDeviceFromClipper(d3drm2, clipper, &driver, 300, 200, &device2); + ok(hr == D3DRM_OK, "Cannot create IDirect3DRMDevice2 interface (hr = %x).\n", hr); + ref3 = get_refcount((IUnknown *)d3drm1); + todo_wine ok(ref3 > ref1, "expected ref3 > ref1, got ref1 = %u , ref3 = %u.\n", ref1, ref3); + ref3 = get_refcount((IUnknown *)d3drm2); + ok(ref3 == ref2, "expected ref3 == ref2, got ref2 = %u , ref3 = %u.\n", ref2, ref3); + cref2 = get_refcount((IUnknown *)clipper); + todo_wine ok(cref2 > cref1, "expected cref2 > cref1, got cref1 = %u , cref2 = %u.\n", cref1, cref2); + + /* Fetch immediate mode device in order to access render target */ + hr = IDirect3DRMDevice2_GetDirect3DDevice2(device2, &d3ddevice2); + todo_wine ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr); + if (FAILED(hr)) + goto cleanup; + + hr = IDirect3DDevice2_GetRenderTarget(d3ddevice2, &surface); + ok(hr == DD_OK, "Cannot get surface to the render target (hr = %x).\n", hr); + + hr = IDirectDrawSurface_GetClipper(surface, &d3drm_clipper); + ok(hr == DDERR_NOCLIPPERATTACHED, "Expected hr == DDERR_NOCLIPPERATTACHED, got %x.\n", hr); + + /* Check if CreateDeviceFromClipper creates a primary surface and attaches the clipper to it */ + hr = IDirectDrawSurface_QueryInterface(surface, &IID_IDirectDrawSurface7, (void **)&surface7); + ok(hr == DD_OK, "Cannot get IDirectDrawSurface7 interface (hr = %x).\n", hr); + IDirectDrawSurface7_GetDDInterface(surface7, (void **)&unknown); + hr = IUnknown_QueryInterface(unknown, &IID_IDirectDraw, (void **)&ddraw); + ok(hr == DD_OK, "Cannot get IDirectDraw interface (hr = %x).\n", hr); + IUnknown_Release(unknown); + hr = IDirectDraw_EnumSurfaces(ddraw, DDENUMSURFACES_ALL | DDENUMSURFACES_DOESEXIST, + NULL, &d3drm_primary, surface_callback); + ok(hr == DD_OK, "Failed to enumerate surfaces (hr = %x).\n", hr); + ok(d3drm_primary != NULL, "No primary surface was enumerated.\n"); + hr = IDirectDrawSurface_GetClipper(d3drm_primary, &d3drm_clipper); + ok(hr == DD_OK, "Cannot get attached clipper from primary surface (hr = %x).\n", hr); + if (SUCCEEDED(hr)) + { + ok(d3drm_clipper == clipper, "Expected clipper returned == %p, got %p.\n", clipper , d3drm_clipper); + IDirectDrawClipper_Release(d3drm_clipper); + } + if (d3drm_primary) + IDirectDrawSurface_Release(d3drm_primary); + IDirectDrawSurface7_Release(surface7); + IDirectDraw_Release(ddraw); + + /* Check properties of render target and depth surface */ + surface_desc.dwSize = sizeof(surface_desc); + hr = IDirectDrawSurface_GetSurfaceDesc(surface, &surface_desc); + ok(hr == DD_OK, "Cannot get surface desc structure (hr = %x).\n", hr); + + ok((surface_desc.dwWidth == 300) && (surface_desc.dwHeight == 200), "Expected surface dimensions = 300, 200, got %u, %u.\n", + surface_desc.dwWidth, surface_desc.dwHeight); + ok((surface_desc.ddsCaps.dwCaps & (DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE)) == (DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE), + "Expected caps containing %x, got %x.\n", DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE, surface_desc.ddsCaps.dwCaps); + expected_flags = DDSD_PIXELFORMAT | DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PITCH; + ok(surface_desc.dwFlags == expected_flags, "Expected %x for flags, got %x.\n", expected_flags, surface_desc.dwFlags); + + hr = DirectDrawCreate(NULL, &ddraw, NULL); + ok(hr == DD_OK, "Cannot get IDirectDraw interface (hr = %x).\n", hr); + desc.dwSize = sizeof(desc); + hr = IDirectDraw_GetDisplayMode(ddraw, &desc); + ok(hr == DD_OK, "Cannot get IDirectDraw display mode (hr = %x)\n", hr); + ok(desc.ddpfPixelFormat.dwRGBBitCount == surface_desc.ddpfPixelFormat.dwRGBBitCount, "Expected %u bpp, got %u bpp.\n", + surface_desc.ddpfPixelFormat.dwRGBBitCount, desc.ddpfPixelFormat.dwRGBBitCount); + + hr = IDirectDrawSurface_GetAttachedSurface(surface, &caps, &ds); + ok(hr == DD_OK, "Cannot get attached depth surface (hr = %x).\n", hr); + + desc.dwSize = sizeof(desc); + hr = IDirectDrawSurface_GetSurfaceDesc(ds, &desc); + ok(hr == DD_OK, "Cannot get z surface desc structure (hr = %x).\n", hr); + + ok((desc.dwWidth == 300) && (desc.dwHeight == 200), "Expected surface dimensions = 300, 200, got %u, %u.\n", + desc.dwWidth, desc.dwHeight); + ok((desc.ddsCaps.dwCaps & DDSCAPS_ZBUFFER) == DDSCAPS_ZBUFFER, "Expected caps containing %x, got %x.\n", DDSCAPS_ZBUFFER, desc.ddsCaps.dwCaps); + expected_flags = DDSD_ZBUFFERBITDEPTH | DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PITCH; + ok(desc.dwFlags == expected_flags, "Expected %x for flags, got %x.\n", expected_flags, desc.dwFlags); + ok(desc.dwZBufferBitDepth == 16, "Expected 16 for Z buffer bit depth, got %u.\n", desc.dwZBufferBitDepth); + ok(desc.ddpfPixelFormat.dwStencilBitMask == 0, "Expected 0 stencil bits, got %x.\n", desc.ddpfPixelFormat.dwStencilBitMask); + + /* Release old objects and check refcount of device and clipper */ + IDirectDrawSurface_Release(ds); + ds = NULL; + IDirectDrawSurface_Release(surface); + surface = NULL; + IDirect3DDevice2_Release(d3ddevice2); + d3ddevice2 = NULL; + IDirect3DRMDevice2_Release(device2); + ref3 = get_refcount((IUnknown *)d3drm1); + ok(ref1 == ref3, "expected ref1 == ref3, got ref1 = %u, ref3 = %u.\n", ref1, ref3); + ref3 = get_refcount((IUnknown *)d3drm2); + ok(ref3 == ref2, "expected ref3 == ref2, got ref2 = %u , ref3 = %u.\n", ref2, ref3); + cref2 = get_refcount((IUnknown *)clipper); + todo_wine ok(cref1 == cref2, "expected cref1 == cref2, got cref1 = %u, cref2 = %u.\n", cref1, cref2); + + /* Test if render target format follows the screen format */ + hr = IDirectDraw_GetDisplayMode(ddraw, &desc); + ok(hr == DD_OK, "Cannot get IDirectDraw display mode (hr = %x)\n", hr); + hr = IDirectDraw_SetDisplayMode(ddraw, desc.dwWidth, desc.dwHeight, 16); + ok(hr == DD_OK, "Cannot set display mode to 16bpp (hr = %x).\n", hr); + + hr = IDirectDraw_GetDisplayMode(ddraw, &desc); + ok(hr == DD_OK, "Cannot get IDirectDraw display mode (hr = %x)\n", hr); + ok(desc.ddpfPixelFormat.dwRGBBitCount == 16, "Expected 16 bpp, got %u.\n", desc.ddpfPixelFormat.dwRGBBitCount); + + hr = IDirect3DRM2_CreateDeviceFromClipper(d3drm2, clipper, &driver, rc.right, rc.bottom, &device2); + ok(hr == D3DRM_OK, "Cannot create IDirect3DRMDevice2 interface (hr = %x).\n", hr); + + hr = IDirect3DRMDevice2_GetDirect3DDevice2(device2, &d3ddevice2); + todo_wine ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr); + if (FAILED(hr)) + goto cleanup; + + hr = IDirect3DDevice2_GetRenderTarget(d3ddevice2, &surface); + ok(hr == DD_OK, "Cannot get surface to the render target (hr = %x).\n", hr); + + surface_desc.dwSize = sizeof(surface_desc); + hr = IDirectDrawSurface_GetSurfaceDesc(surface, &surface_desc); + ok(hr == DD_OK, "Cannot get surface desc structure (hr = %x).\n", hr); + todo_wine ok(surface_desc.ddpfPixelFormat.dwRGBBitCount == 16, "Expected 16bpp, got %ubpp.\n", + surface_desc.ddpfPixelFormat.dwRGBBitCount); + + hr = IDirectDraw2_RestoreDisplayMode(ddraw); + ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr); + +cleanup: + if (ds) + IDirectDrawSurface_Release(ds); + if (surface) + IDirectDrawSurface_Release(surface); + if (d3ddevice2) + IDirect3DDevice2_Release(d3ddevice2); + if (device2) + IDirect3DRMDevice2_Release(device2); + if (d3drm2) + IDirect3DRM2_Release(d3drm2); + if (d3drm1) + IDirect3DRM_Release(d3drm1); + if (clipper) + IDirectDrawClipper_Release(clipper); + if (ddraw) + IDirectDraw_Release(ddraw); + DestroyWindow(window); +} + +static void test_create_device_from_surface(void) +{ + DDSCAPS caps = { DDSCAPS_ZBUFFER }; + DDSURFACEDESC desc; + IDirectDraw *ddraw = NULL; + IDirect3DRM *d3drm1 = NULL; + IDirect3DRM2 *d3drm2 = NULL; + IDirect3DRMDevice2 *device2 = NULL; + IDirect3DDevice2 *d3ddevice2 = NULL; + IDirectDrawSurface *surface = NULL, *ds = NULL, *d3drm_surface = NULL, *d3drm_ds = NULL; + DWORD expected_flags; + HWND window; + GUID driver = IID_IDirect3DRGBDevice; + ULONG ref1, ref2, ref3, surface_ref1, surface_ref2; + RECT rc; + BOOL use_sysmem_zbuffer = FALSE; + HRESULT hr; + + hr = DirectDrawCreate(NULL, &ddraw, NULL); + ok(hr == DD_OK, "Cannot get IDirectDraw interface (hr = %x).\n", hr); + + window = CreateWindowA("static", "d3drm_test", WS_OVERLAPPEDWINDOW, 0, 0, 300, 200, 0, 0, 0, 0); + GetClientRect(window, &rc); + + hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); + ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); + + hr = Direct3DRMCreate(&d3drm1); + ok(hr == D3DRM_OK, "Cannot get IDirect3DRM interface (hr = %x).\n", hr); + ref1 = get_refcount((IUnknown *)d3drm1); + + hr = IDirect3DRM_QueryInterface(d3drm1, &IID_IDirect3DRM2, (void **)&d3drm2); + ok(hr == D3DRM_OK, "Cannot get IDirect3DRM2 interface (hr = %x).\n", hr); + ref2 = get_refcount((IUnknown *)d3drm2); + + /* Create a surface and use it to create the retained mode device. */ + memset(&desc, 0, sizeof(desc)); + desc.dwSize = sizeof(desc); + desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; + desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; + desc.dwWidth = rc.right; + desc.dwHeight = rc.bottom; + + hr = IDirectDraw_CreateSurface(ddraw, &desc, &surface, NULL); + ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr); + + hr = IDirect3DRM2_CreateDeviceFromSurface(d3drm2, &driver, ddraw, surface, &device2); + todo_wine ok(hr == DDERR_INVALIDCAPS, "Expected hr == DDERR_INVALIDCAPS, got %x.\n", hr); + IDirectDrawSurface_Release(surface); + + desc.ddsCaps.dwCaps |= DDSCAPS_3DDEVICE; + hr = IDirectDraw_CreateSurface(ddraw, &desc, &surface, NULL); + ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr); + surface_ref1 = get_refcount((IUnknown *)surface); + hr = IDirect3DRM2_CreateDeviceFromSurface(d3drm2, &driver, ddraw, surface, &device2); + ok(SUCCEEDED(hr), "Cannot create IDirect3DRMDevice2 interface (hr = %x).\n", hr); + ref3 = get_refcount((IUnknown *)d3drm1); + todo_wine ok(ref3 > ref1, "expected ref3 > ref1, got ref1 = %u , ref3 = %u.\n", ref1, ref3); + ref3 = get_refcount((IUnknown *)d3drm2); + ok(ref3 == ref2, "expected ref3 == ref2, got ref2 = %u , ref3 = %u.\n", ref2, ref3); + surface_ref2 = get_refcount((IUnknown *)surface); + todo_wine ok(surface_ref2 > surface_ref1, "Expected surface_ref2 > surface_ref1, got surface_ref1 = %u, surface_ref2 = %u.\n", + surface_ref1, surface_ref2); + + /* Check if CreateDeviceFromSurface creates a primary surface */ + hr = IDirectDraw_EnumSurfaces(ddraw, DDENUMSURFACES_ALL | DDENUMSURFACES_DOESEXIST, + NULL, &d3drm_surface, surface_callback); + ok(hr == DD_OK, "Failed to enumerate surfaces (hr = %x).\n", hr); + ok(d3drm_surface == NULL, "No primary surface should have enumerated (%p).\n", d3drm_surface); + + hr = IDirect3DRMDevice2_GetDirect3DDevice2(device2, &d3ddevice2); + todo_wine ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr); + if (FAILED(hr)) + goto cleanup; + + hr = IDirect3DDevice2_GetRenderTarget(d3ddevice2, &d3drm_surface); + ok(hr == DD_OK, "Cannot get surface to the render target (hr = %x).\n", hr); + ok(surface == d3drm_surface, "Expected surface returned == %p, got %p.\n", surface, d3drm_surface); + + /* Check properties of attached depth surface */ + hr = IDirectDrawSurface_GetAttachedSurface(d3drm_surface, &caps, &ds); + ok(hr == DD_OK, "Cannot get attached depth surface (hr = %x).\n", hr); + + memset(&desc, 0, sizeof(desc)); + desc.dwSize = sizeof(desc); + hr = IDirectDrawSurface_GetSurfaceDesc(ds, &desc); + ok(hr == DD_OK, "Cannot get z surface desc structure (hr = %x).\n", hr); + + use_sysmem_zbuffer = desc.ddsCaps.dwCaps & DDSCAPS_SYSTEMMEMORY; + ok((desc.dwWidth == rc.right) && (desc.dwHeight == rc.bottom), "Expected surface dimentions = %u, %u, got %u, %u.\n", + rc.right, rc.bottom, desc.dwWidth, desc.dwHeight); + ok(desc.ddsCaps.dwCaps & DDSCAPS_ZBUFFER, "Expected caps containing %x, got %x.\n", DDSCAPS_ZBUFFER, desc.ddsCaps.dwCaps); + expected_flags = DDSD_ZBUFFERBITDEPTH | DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PITCH; + ok(desc.dwFlags == expected_flags, "Expected %x for flags, got %x.\n", expected_flags, desc.dwFlags); + + IDirectDrawSurface_Release(ds); + IDirect3DDevice2_Release(d3ddevice2); + IDirectDrawSurface_Release(d3drm_surface); + if (device2) + { + IDirect3DRMDevice2_Release(device2); + ref3 = get_refcount((IUnknown *)d3drm1); + ok(ref1 == ref3, "expected ref1 == ref3, got ref1 = %u, ref3 = %u.\n", ref1, ref3); + ref3 = get_refcount((IUnknown *)d3drm2); + ok(ref3 == ref2, "expected ref3 == ref2, got ref2 = %u , ref3 = %u.\n", ref2, ref3); + surface_ref2 = get_refcount((IUnknown *)surface); + ok(surface_ref2 == surface_ref1, "Expected surface_ref2 == surface_ref1, got surface_ref1 = %u, surface_ref2 = %u.\n", + surface_ref1, surface_ref2); + hr = IDirectDrawSurface_GetAttachedSurface(surface, &caps, &ds); + ok(hr == DD_OK, "Cannot get attached depth surface (hr = %x).\n", hr); + + /*The render target still holds a reference to ds as the depth surface remains attached to it, so refcount will be 1*/ + ref1 = IDirectDrawSurface_Release(ds); + ok(ref1 == 1, "Expected ref1 == 1, got %u.\n", ref1); + } + ref1 = IDirectDrawSurface_Release(surface); + ok(ref1 == 0, "Expected Render target refcount == 0, got %u.\n", ref1); + + memset(&desc, 0, sizeof(desc)); + desc.dwSize = sizeof(desc); + desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; + desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE; + desc.dwWidth = rc.right; + desc.dwHeight = rc.bottom; + + hr = IDirectDraw_CreateSurface(ddraw, &desc, &surface, NULL); + ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr); + + memset(&desc, 0, sizeof(desc)); + desc.dwSize = sizeof(desc); + desc.dwFlags = DDSD_CAPS | DDSD_ZBUFFERBITDEPTH | DDSD_WIDTH | DDSD_HEIGHT; + desc.ddsCaps.dwCaps = DDSCAPS_ZBUFFER | (use_sysmem_zbuffer ? DDSCAPS_SYSTEMMEMORY : 0); + desc.dwZBufferBitDepth = 16; + desc.dwWidth = rc.right; + desc.dwHeight = rc.bottom; + hr = IDirectDraw_CreateSurface(ddraw, &desc, &ds, NULL); + ok(hr == DD_OK, "Cannot create depth surface (hr = %x).\n", hr); + hr = IDirectDrawSurface_AddAttachedSurface(surface, ds); + ok(SUCCEEDED(hr), "Failed to attach depth buffer, hr %#x.\n", hr); + + hr = IDirect3DRM2_CreateDeviceFromSurface(d3drm2, &driver, ddraw, surface, &device2); + ok(SUCCEEDED(hr), "Cannot create IDirect3DRMDevice2 interface (hr = %x).\n", hr); + + hr = IDirect3DRMDevice2_GetDirect3DDevice2(device2, &d3ddevice2); + todo_wine ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr); + if (FAILED(hr)) + goto cleanup; + + hr = IDirect3DDevice2_GetRenderTarget(d3ddevice2, &d3drm_surface); + ok(hr == DD_OK, "Cannot get surface to the render target (hr = %x).\n", hr); + ok(surface == d3drm_surface, "Expected surface returned == %p, got %p.\n", surface, d3drm_surface); + + /* Check if depth surface matches the one we created */ + hr = IDirectDrawSurface_GetAttachedSurface(d3drm_surface, &caps, &d3drm_ds); + ok(hr == DD_OK, "Cannot get attached depth surface (hr = %x).\n", hr); + ok(ds == d3drm_ds, "Expected depth surface (%p) == surface created internally (%p).\n", ds, d3drm_ds); + + IDirectDrawSurface_Release(d3drm_ds); + IDirectDrawSurface_Release(d3drm_surface); + IDirectDrawSurface_Release(ds); + +cleanup: + if (d3ddevice2) + IDirect3DDevice2_Release(d3ddevice2); + if (device2) + { + IDirect3DRMDevice2_Release(device2); + hr = IDirectDrawSurface_GetAttachedSurface(surface, &caps, &ds); + todo_wine ok(hr == DD_OK, "Cannot get attached depth surface (hr = %x).\n", hr); + if (SUCCEEDED(hr)) + { + /*The render target still holds a reference to ds as the depth surface remains attached to it, so refcount will be 1*/ + ref1 = IDirectDrawSurface_Release(ds); + ok(ref1 == 1, "Expected ref1 == 1, got %u.\n", ref1); + } + } + if (surface) + { + ref1 = IDirectDrawSurface_Release(surface); + ok(ref1 == 0, "Expected Render target refcount == 0, got %u.\n", ref1); + } + if (d3drm2) + IDirect3DRM2_Release(d3drm2); + if (d3drm1) + IDirect3DRM_Release(d3drm1); + if (ddraw) + IDirectDraw_Release(ddraw); + DestroyWindow(window); +} + +static IDirect3DDevice2 *create_device(IDirectDraw2 *ddraw, HWND window, IDirectDrawSurface **ds) +{ + static const DWORD z_depths[] = { 32, 24, 16 }; + IDirectDrawSurface *surface; + IDirect3DDevice2 *device = NULL; + DDSURFACEDESC surface_desc; + IDirect3D2 *d3d; + unsigned int i; + HRESULT hr; + RECT rc; + + GetClientRect(window, &rc); + hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); + ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); + + memset(&surface_desc, 0, sizeof(surface_desc)); + surface_desc.dwSize = sizeof(surface_desc); + surface_desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; + surface_desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE; + surface_desc.dwWidth = rc.right; + surface_desc.dwHeight = rc.bottom; + + hr = IDirectDraw2_CreateSurface(ddraw, &surface_desc, &surface, NULL); + ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr); + + hr = IDirectDraw2_QueryInterface(ddraw, &IID_IDirect3D2, (void **)&d3d); + if (FAILED(hr)) + { + IDirectDrawSurface_Release(surface); + *ds = NULL; + return NULL; + } + + /* We used to use EnumDevices() for this, but it seems + * D3DDEVICEDESC.dwDeviceZBufferBitDepth only has a very casual + * relationship with reality. */ + for (i = 0; i < sizeof(z_depths) / sizeof(*z_depths); ++i) + { + memset(&surface_desc, 0, sizeof(surface_desc)); + surface_desc.dwSize = sizeof(surface_desc); + surface_desc.dwFlags = DDSD_CAPS | DDSD_ZBUFFERBITDEPTH | DDSD_WIDTH | DDSD_HEIGHT; + surface_desc.ddsCaps.dwCaps = DDSCAPS_ZBUFFER; + U2(surface_desc).dwZBufferBitDepth = z_depths[i]; + surface_desc.dwWidth = rc.right; + surface_desc.dwHeight = rc.bottom; + if (FAILED(IDirectDraw2_CreateSurface(ddraw, &surface_desc, ds, NULL))) + continue; + + hr = IDirectDrawSurface_AddAttachedSurface(surface, *ds); + ok(SUCCEEDED(hr), "Failed to attach depth buffer, hr %#x.\n", hr); + if (FAILED(hr)) + { + IDirectDrawSurface_Release(*ds); + continue; + } + + if (SUCCEEDED(IDirect3D2_CreateDevice(d3d, &IID_IDirect3DRGBDevice, surface, &device))) + break; + + IDirectDrawSurface_DeleteAttachedSurface(surface, 0, *ds); + IDirectDrawSurface_Release(*ds); + *ds = NULL; + } + + IDirect3D2_Release(d3d); + IDirectDrawSurface_Release(surface); + return device; +} + +static void test_create_device_from_d3d(void) +{ + IDirectDraw *ddraw1 = NULL; + IDirectDraw2 *ddraw2 = NULL; + IDirect3D2 *d3d2 = NULL; + IDirect3DRM *d3drm1 = NULL; + IDirect3DRM2 *d3drm2 = NULL; + IDirect3DRMDevice2 *device2 = NULL; + IDirect3DDevice2 *d3ddevice2 = NULL, *d3drm_d3ddevice2 = NULL; + IDirectDrawSurface *surface = NULL, *ds = NULL, *d3drm_ds = NULL; + DWORD expected_flags; + DDSCAPS caps = { DDSCAPS_ZBUFFER }; + DDSURFACEDESC desc; + RECT rc; + HWND window; + ULONG ref1, ref2, ref3, device_ref1, device_ref2; + HRESULT hr; + + hr = DirectDrawCreate(NULL, &ddraw1, NULL); + ok(hr == DD_OK, "Cannot get IDirectDraw interface (hr = %x).\n", hr); + + window = CreateWindowA("static", "d3drm_test", WS_OVERLAPPEDWINDOW, 0, 0, 300, 200, 0, 0, 0, 0); + GetClientRect(window, &rc); + + hr = IDirectDraw_QueryInterface(ddraw1, &IID_IDirect3D2, (void **)&d3d2); + ok(hr == DD_OK, "Cannot get IDirect3D2 interface (hr = %x).\n", hr); + hr = IDirectDraw_QueryInterface(ddraw1, &IID_IDirectDraw2, (void **)&ddraw2); + ok(hr == DD_OK, "Cannot get IDirectDraw2 interface (hr = %x).\n", hr); + + /* Create the immediate mode device */ + d3ddevice2 = create_device(ddraw2, window, &ds); + if (d3ddevice2 == NULL) + { + win_skip("Cannot create IM device, skipping tests.\n"); + IDirect3D2_Release(d3d2); + IDirectDraw2_Release(ddraw2); + IDirectDraw_Release(ddraw1); + return; + } + device_ref1 = get_refcount((IUnknown *)d3ddevice2); + + hr = Direct3DRMCreate(&d3drm1); + ok(hr == D3DRM_OK, "Cannot get IDirect3DRM interface (hr = %x).\n", hr); + ref1 = get_refcount((IUnknown *)d3drm1); + + hr = IDirect3DRM_QueryInterface(d3drm1, &IID_IDirect3DRM2, (void **)&d3drm2); + ok(hr == D3DRM_OK, "Cannot get IDirect3DRM2 interface (hr = %x).\n", hr); + ref2 = get_refcount((IUnknown *)d3drm2); + + hr = IDirect3DRM2_CreateDeviceFromD3D(d3drm2, d3d2, d3ddevice2, &device2); + ok(hr == DD_OK, "Failed to create IDirect3DRMDevice2 interface (hr = %x)\n", hr); + ref3 = get_refcount((IUnknown *)d3drm1); + todo_wine ok(ref3 > ref1, "expected ref3 > ref1, got ref1 = %u , ref3 = %u.\n", ref1, ref3); + ref3 = get_refcount((IUnknown *)d3drm2); + ok(ref3 == ref2, "expected ref3 == ref2, got ref2 = %u , ref3 = %u.\n", ref2, ref3); + device_ref2 = get_refcount((IUnknown *)d3ddevice2); + todo_wine ok(device_ref2 > device_ref1, "Expected device_ref2 > device_ref1, got device_ref1 = %u, device_ref2 = %u.\n", device_ref1, device_ref2); + + hr = IDirectDraw_EnumSurfaces(ddraw1, DDENUMSURFACES_ALL | DDENUMSURFACES_DOESEXIST, + NULL, &surface, surface_callback); + ok(hr == DD_OK, "Failed to enumerate surfaces (hr = %x).\n", hr); + ok(surface == NULL, "No primary surface should have enumerated (%p).\n", surface); + + hr = IDirect3DRMDevice2_GetDirect3DDevice2(device2, &d3drm_d3ddevice2); + todo_wine ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr); + if (FAILED(hr)) + goto cleanup; + ok(d3ddevice2 == d3drm_d3ddevice2, "Expected Immediate Mode deivce created == %p, got %p.\n", d3ddevice2, d3drm_d3ddevice2); + + /* Check properties of render target and depth surfaces */ + hr = IDirect3DDevice2_GetRenderTarget(d3drm_d3ddevice2, &surface); + ok(hr == DD_OK, "Cannot get surface to the render target (hr = %x).\n", hr); + + memset(&desc, 0, sizeof(desc)); + desc.dwSize = sizeof(desc); + hr = IDirectDrawSurface_GetSurfaceDesc(surface, &desc); + ok(hr == DD_OK, "Cannot get surface desc structure (hr = %x).\n", hr); + + ok((desc.dwWidth == rc.right) && (desc.dwHeight == rc.bottom), "Expected surface dimentions = %u, %u, got %u, %u.\n", + rc.right, rc.bottom, desc.dwWidth, desc.dwHeight); + ok((desc.ddsCaps.dwCaps & (DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE)) == (DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE), + "Expected caps containing %x, got %x.\n", DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE, desc.ddsCaps.dwCaps); + expected_flags = DDSD_PIXELFORMAT | DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PITCH; + ok(desc.dwFlags == expected_flags, "Expected %x for flags, got %x.\n", expected_flags, desc.dwFlags); + + hr = IDirectDrawSurface_GetAttachedSurface(surface, &caps, &d3drm_ds); + ok(hr == DD_OK, "Cannot get attached depth surface (hr = %x).\n", hr); + ok(ds == d3drm_ds, "Expected depth surface (%p) == surface created internally (%p).\n", ds, d3drm_ds); + + desc.dwSize = sizeof(desc); + hr = IDirectDrawSurface_GetSurfaceDesc(ds, &desc); + ok(hr == DD_OK, "Cannot get z surface desc structure (hr = %x).\n", hr); + + ok((desc.dwWidth == rc.right) && (desc.dwHeight == rc.bottom), "Expected surface dimentions = %u, %u, got %u, %u.\n", + rc.right, rc.bottom, desc.dwWidth, desc.dwHeight); + ok((desc.ddsCaps.dwCaps & DDSCAPS_ZBUFFER) == DDSCAPS_ZBUFFER, "Expected caps containing %x, got %x.\n", DDSCAPS_ZBUFFER, desc.ddsCaps.dwCaps); + expected_flags = DDSD_ZBUFFERBITDEPTH | DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PITCH; + ok(desc.dwFlags == expected_flags, "Expected %x for flags, got %x.\n", expected_flags, desc.dwFlags); + + IDirectDrawSurface_Release(d3drm_ds); + IDirectDrawSurface_Release(ds); + ds = NULL; + IDirectDrawSurface_Release(surface); + IDirect3DDevice2_Release(d3drm_d3ddevice2); +cleanup: + if (ds) + IDirectDrawSurface_Release(ds); + + IDirect3DRMDevice2_Release(device2); + ref3 = get_refcount((IUnknown *)d3drm1); + ok(ref1 == ref3, "expected ref1 == ref3, got ref1 = %u, ref3 = %u.\n", ref1, ref3); + ref3 = get_refcount((IUnknown *)d3drm2); + ok(ref3 == ref2, "expected ref3 == ref2, got ref2 = %u , ref3 = %u.\n", ref2, ref3); + device_ref2 = get_refcount((IUnknown *)d3ddevice2); + ok(device_ref2 == device_ref1, "Expected device_ref2 == device_ref1, got device_ref1 = %u, device_ref2 = %u.\n", device_ref1, device_ref2); + + IDirect3DRM2_Release(d3drm2); + IDirect3DRM_Release(d3drm1); + IDirect3DDevice2_Release(d3ddevice2); + IDirect3D2_Release(d3d2); + IDirectDraw2_Release(ddraw2); + IDirectDraw_Release(ddraw1); + DestroyWindow(window); +} + START_TEST(d3drm) { test_MeshBuilder(); @@ -1964,4 +2549,7 @@ test_frame_mesh_materials(); test_d3drm_qi(); test_frame_qi(); + test_create_device_from_clipper(); + test_create_device_from_surface(); + test_create_device_from_d3d(); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/davclnt/davclnt.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/davclnt/davclnt.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/davclnt/davclnt.spec 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/davclnt/davclnt.spec 2015-07-12 05:36:18.000000000 +0000 @@ -0,0 +1,23 @@ +@ stub DavCancelConnectionsToServer +@ stub DavFreeUsedDiskSpace +@ stub DavGetDiskSpaceUsage +@ stub DavGetTheLockOwnerOfTheFile +@ stub DavInvalidateCache +@ stub DavRegisterAuthCallback +@ stub DavUnregisterAuthCallback +@ stub DllCanUnloadNow +@ stub DllGetClassObject +@ stdcall -private DllMain(long long ptr) +@ stub NPAddConnection3 +@ stub NPAddConnection +@ stub NPCancelConnection +@ stub NPCloseEnum +@ stub NPEnumResource +@ stub NPFormatNetworkName +@ stub NPGetCaps +@ stub NPGetConnection +@ stub NPGetResourceInformation +@ stub NPGetResourceParent +@ stub NPGetUniversalName +@ stub NPGetUser +@ stub NPOpenEnum diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/davclnt/main.c wine-staging-1.7.47~ubuntu14.10.1/dlls/davclnt/main.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/davclnt/main.c 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/davclnt/main.c 2015-07-12 05:36:18.000000000 +0000 @@ -0,0 +1,40 @@ +/* + * WebDav Client + * + * Copyright 2015 Austin English + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "config.h" + +#include + +#include "windef.h" +#include "winbase.h" + +BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) +{ + switch (reason) + { + case DLL_WINE_PREATTACH: + return FALSE; /* prefer native version */ + case DLL_PROCESS_ATTACH: + DisableThreadLibraryCalls(instance); + break; + } + + return TRUE; +} diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/davclnt/Makefile.in wine-staging-1.7.47~ubuntu14.10.1/dlls/davclnt/Makefile.in --- wine-staging-1.7.46~ubuntu14.10.1/dlls/davclnt/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/davclnt/Makefile.in 2015-07-12 05:36:18.000000000 +0000 @@ -0,0 +1,4 @@ +MODULE = davclnt.dll + +C_SRCS = \ + main.c diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/cpu_arm64.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/cpu_arm64.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/cpu_arm64.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/cpu_arm64.c 2015-07-12 05:36:18.000000000 +0000 @@ -150,7 +150,7 @@ } #endif -static unsigned arm64_map_dwarf_register(unsigned regno) +static unsigned arm64_map_dwarf_register(unsigned regno, BOOL eh_frame) { if (regno <= 28) return CV_ARM64_X0 + regno; if (regno == 29) return CV_ARM64_FP; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/cpu_arm.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/cpu_arm.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/cpu_arm.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/cpu_arm.c 2015-07-12 05:36:18.000000000 +0000 @@ -150,7 +150,7 @@ } #endif -static unsigned arm_map_dwarf_register(unsigned regno) +static unsigned arm_map_dwarf_register(unsigned regno, BOOL eh_frame) { if (regno <= 15) return CV_ARM_R0 + regno; if (regno == 128) return CV_ARM_CPSR; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/cpu_i386.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/cpu_i386.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/cpu_i386.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/cpu_i386.c 2015-07-12 05:36:18.000000000 +0000 @@ -513,7 +513,7 @@ return FALSE; } -static unsigned i386_map_dwarf_register(unsigned regno) +static unsigned i386_map_dwarf_register(unsigned regno, BOOL eh_frame) { unsigned reg; @@ -523,8 +523,17 @@ case 1: reg = CV_REG_ECX; break; case 2: reg = CV_REG_EDX; break; case 3: reg = CV_REG_EBX; break; - case 4: reg = CV_REG_ESP; break; - case 5: reg = CV_REG_EBP; break; + case 4: + case 5: +#ifdef __APPLE__ + /* On OS X, DWARF eh_frame uses a different mapping for the registers. It's + apparently the mapping as emitted by GCC, at least at some point in its history. */ + if (eh_frame) + reg = (regno == 4) ? CV_REG_EBP : CV_REG_ESP; + else +#endif + reg = (regno == 4) ? CV_REG_ESP : CV_REG_EBP; + break; case 6: reg = CV_REG_ESI; break; case 7: reg = CV_REG_EDI; break; case 8: reg = CV_REG_EIP; break; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/cpu_ppc.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/cpu_ppc.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/cpu_ppc.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/cpu_ppc.c 2015-07-12 05:36:18.000000000 +0000 @@ -54,7 +54,7 @@ return FALSE; } -static unsigned ppc_map_dwarf_register(unsigned regno) +static unsigned ppc_map_dwarf_register(unsigned regno, BOOL eh_frame) { FIXME("not done\n"); return 0; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/cpu_x86_64.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/cpu_x86_64.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/cpu_x86_64.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/cpu_x86_64.c 2015-07-12 05:36:18.000000000 +0000 @@ -722,7 +722,7 @@ return NULL; } -static unsigned x86_64_map_dwarf_register(unsigned regno) +static unsigned x86_64_map_dwarf_register(unsigned regno, BOOL eh_frame) { unsigned reg; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/dbghelp_private.h wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/dbghelp_private.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/dbghelp_private.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/dbghelp_private.h 2015-07-12 05:36:18.000000000 +0000 @@ -530,7 +530,7 @@ void* (*find_runtime_function)(struct module*, DWORD64 addr); /* dwarf dedicated information */ - unsigned (*map_dwarf_register)(unsigned regno); + unsigned (*map_dwarf_register)(unsigned regno, BOOL eh_frame); /* context related manipulation */ void* (*fetch_context_reg)(CONTEXT* context, unsigned regno, unsigned* size); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/dwarf.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/dwarf.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/dwarf.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/dwarf.c 2015-07-12 05:36:18.000000000 +0000 @@ -649,7 +649,7 @@ FIXME("What the heck map reg 0x%x\n",regno); return 0; } - return dbghelp_current_cpu->map_dwarf_register(regno); + return dbghelp_current_cpu->map_dwarf_register(regno, FALSE); } static enum location_error @@ -2784,7 +2784,7 @@ if (!valid_reg(reg)) break; TRACE("%lx: DW_CFA_offset %s, %ld\n", info->ip, - dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg)), + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, TRUE)), offset); info->state.regs[reg] = offset; info->state.rules[reg] = RULE_CFA_OFFSET; @@ -2796,7 +2796,7 @@ if (!valid_reg(reg)) break; TRACE("%lx: DW_CFA_restore %s\n", info->ip, - dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg))); + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, TRUE))); info->state.rules[reg] = RULE_UNSET; break; } @@ -2843,7 +2843,7 @@ if (!valid_reg(reg)) break; TRACE("%lx: DW_CFA_offset_extended %s, %ld\n", info->ip, - dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg)), + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, TRUE)), offset); info->state.regs[reg] = offset; info->state.rules[reg] = RULE_CFA_OFFSET; @@ -2855,7 +2855,7 @@ if (!valid_reg(reg)) break; TRACE("%lx: DW_CFA_restore_extended %s\n", info->ip, - dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg))); + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, TRUE))); info->state.rules[reg] = RULE_UNSET; break; } @@ -2865,7 +2865,7 @@ if (!valid_reg(reg)) break; TRACE("%lx: DW_CFA_undefined %s\n", info->ip, - dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg))); + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, TRUE))); info->state.rules[reg] = RULE_UNDEFINED; break; } @@ -2875,7 +2875,7 @@ if (!valid_reg(reg)) break; TRACE("%lx: DW_CFA_same_value %s\n", info->ip, - dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg))); + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, TRUE))); info->state.regs[reg] = reg; info->state.rules[reg] = RULE_SAME; break; @@ -2887,8 +2887,8 @@ if (!valid_reg(reg) || !valid_reg(reg2)) break; TRACE("%lx: DW_CFA_register %s == %s\n", info->ip, - dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg)), - dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg2))); + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, TRUE)), + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg2, TRUE))); info->state.regs[reg] = reg2; info->state.rules[reg] = RULE_OTHER_REG; break; @@ -2916,7 +2916,7 @@ if (!valid_reg(reg)) break; TRACE("%lx: DW_CFA_def_cfa %s, %ld\n", info->ip, - dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg)), + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, TRUE)), offset); info->state.cfa_reg = reg; info->state.cfa_offset = offset; @@ -2929,7 +2929,7 @@ if (!valid_reg(reg)) break; TRACE("%lx: DW_CFA_def_cfa_register %s\n", info->ip, - dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg))); + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, TRUE))); info->state.cfa_reg = reg; info->state.cfa_rule = RULE_CFA_OFFSET; break; @@ -2963,7 +2963,7 @@ if (!valid_reg(reg)) break; TRACE("%lx: DW_CFA_%sexpression %s %lx-%lx\n", info->ip, (op == DW_CFA_expression) ? "" : "val_", - dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg)), + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, TRUE)), expr, expr + len); info->state.regs[reg] = expr; info->state.rules[reg] = (op == DW_CFA_expression) ? RULE_EXPRESSION : RULE_VAL_EXPRESSION; @@ -2988,7 +2988,7 @@ /* retrieve a context register from its dwarf number */ static ULONG_PTR get_context_reg(CONTEXT *context, ULONG_PTR dw_reg) { - unsigned regno = dbghelp_current_cpu->map_dwarf_register(dw_reg), sz; + unsigned regno = dbghelp_current_cpu->map_dwarf_register(dw_reg, TRUE), sz; ULONG_PTR* ptr = dbghelp_current_cpu->fetch_context_reg(context, regno, &sz); if (sz != sizeof(ULONG_PTR)) @@ -3003,7 +3003,7 @@ static void set_context_reg(struct cpu_stack_walk* csw, CONTEXT *context, ULONG_PTR dw_reg, ULONG_PTR val, BOOL isdebuggee) { - unsigned regno = dbghelp_current_cpu->map_dwarf_register(dw_reg), sz; + unsigned regno = dbghelp_current_cpu->map_dwarf_register(dw_reg, TRUE), sz; ULONG_PTR* ptr = dbghelp_current_cpu->fetch_context_reg(context, regno, &sz); if (isdebuggee) @@ -3036,8 +3036,8 @@ /* copy a register from one context to another using dwarf number */ static void copy_context_reg(CONTEXT *dstcontext, ULONG_PTR dwregdst, CONTEXT* srccontext, ULONG_PTR dwregsrc) { - unsigned regdstno = dbghelp_current_cpu->map_dwarf_register(dwregdst), szdst; - unsigned regsrcno = dbghelp_current_cpu->map_dwarf_register(dwregsrc), szsrc; + unsigned regdstno = dbghelp_current_cpu->map_dwarf_register(dwregdst, TRUE), szdst; + unsigned regsrcno = dbghelp_current_cpu->map_dwarf_register(dwregsrc, TRUE), szsrc; ULONG_PTR* ptrdst = dbghelp_current_cpu->fetch_context_reg(dstcontext, regdstno, &szdst); ULONG_PTR* ptrsrc = dbghelp_current_cpu->fetch_context_reg(srccontext, regsrcno, &szsrc); @@ -3258,7 +3258,7 @@ TRACE("function %lx/%lx code_align %lu data_align %ld retaddr %s\n", ip, info.ip, info.code_align, info.data_align, - dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(info.retaddr_reg))); + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(info.retaddr_reg, TRUE))); /* if at very beginning of function, return and use default unwinder */ if (ip == info.ip) return FALSE; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/image_private.h wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/image_private.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/image_private.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/image_private.h 2015-07-12 05:36:18.000000000 +0000 @@ -110,10 +110,12 @@ size_t segs_size; size_t segs_start; int fd; + struct image_file_map* dsym; /* the debug symbols file associated with this one */ #ifdef HAVE_MACH_O_LOADER_H macho_mach_header mach_header; const struct load_command* load_commands; + const struct uuid_command* uuid; /* The offset in the file which is this architecture. mach_header was * read from arch_offset. */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/macho_module.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/macho_module.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/macho_module.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/macho_module.c 2015-07-12 05:36:18.000000000 +0000 @@ -24,6 +24,17 @@ #include "config.h" #include "wine/port.h" +#ifdef HAVE_MACH_O_LOADER_H +#include +#define LoadResource mac_LoadResource +#define GetCurrentThread mac_GetCurrentThread +#include +#undef LoadResource +#undef GetCurrentThread +#undef DPRINTF +#endif + +#include #include #include #include @@ -92,6 +103,9 @@ #endif +#define UUID_STRING_LEN 37 /* 16 bytes at 2 hex digits apiece, 4 dashes, and the null terminator */ + + struct macho_module_info { struct image_file_map file_map; @@ -114,6 +128,14 @@ static void macho_unmap_file(struct image_file_map* fmap); +static char* format_uuid(const uint8_t uuid[16], char out[UUID_STRING_LEN]) +{ + sprintf(out, "%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X", + uuid[0], uuid[1], uuid[2], uuid[3], uuid[4], uuid[5], uuid[6], uuid[7], + uuid[8], uuid[9], uuid[10], uuid[11], uuid[12], uuid[13], uuid[14], uuid[15]); + return out; +} + /****************************************************************** * macho_calc_range * @@ -309,16 +331,20 @@ sectname = tmp; } - fmap = &ifm->u.macho; - for (i = 0; i < fmap->num_sections; i++) + while (ifm) { - if (strcmp(fmap->sect[i].section->sectname, sectname) == 0 && - (!segname || strcmp(fmap->sect[i].section->sectname, segname) == 0)) + fmap = &ifm->u.macho; + for (i = 0; i < fmap->num_sections; i++) { - ism->fmap = ifm; - ism->sidx = i; - return TRUE; + if (strcmp(fmap->sect[i].section->sectname, sectname) == 0 && + (!segname || strcmp(fmap->sect[i].section->sectname, segname) == 0)) + { + ism->fmap = ifm; + ism->sidx = i; + return TRUE; + } } + ifm = fmap->dsym; } ism->fmap = NULL; @@ -523,6 +549,18 @@ } /****************************************************************** + * find_uuid + * + * Callback for macho_enum_load_commands. Records the UUID load + * command of a Mach-O file. + */ +static int find_uuid(struct macho_file_map* fmap, const struct load_command* lc, void* user) +{ + fmap->uuid = (const struct uuid_command*)lc; + return 1; +} + +/****************************************************************** * reset_file_map */ static inline void reset_file_map(struct image_file_map* ifm) @@ -530,7 +568,9 @@ struct macho_file_map* fmap = &ifm->u.macho; fmap->fd = -1; + fmap->dsym = NULL; fmap->load_commands = IMAGE_NO_MAP; + fmap->uuid = NULL; fmap->num_sections = 0; fmap->sect = NULL; } @@ -629,6 +669,7 @@ case MH_DYLIB: case MH_DYLINKER: case MH_BUNDLE: + case MH_DSYM: break; default: goto done; @@ -658,6 +699,16 @@ TRACE("segs_start: 0x%08lx, segs_size: 0x%08lx\n", (unsigned long)fmap->segs_start, (unsigned long)fmap->segs_size); + if (macho_enum_load_commands(fmap, LC_UUID, find_uuid, NULL) < 0) + goto done; + if (fmap->uuid) + { + char uuid_string[UUID_STRING_LEN]; + TRACE("UUID %s\n", format_uuid(fmap->uuid->uuid, uuid_string)); + } + else + TRACE("no UUID found\n"); + ret = TRUE; done: if (!ret) @@ -673,19 +724,33 @@ */ static void macho_unmap_file(struct image_file_map* ifm) { + struct image_file_map* cursor; + TRACE("(%p/%d)\n", ifm, ifm->u.macho.fd); - if (ifm->u.macho.fd != -1) + + cursor = ifm; + while (cursor) { - struct image_section_map ism; + struct image_file_map* next; + + if (ifm->u.macho.fd != -1) + { + struct image_section_map ism; - ism.fmap = ifm; - for (ism.sidx = 0; ism.sidx < ifm->u.macho.num_sections; ism.sidx++) - macho_unmap_section(&ism); - - HeapFree(GetProcessHeap(), 0, ifm->u.macho.sect); - macho_unmap_load_commands(&ifm->u.macho); - close(ifm->u.macho.fd); - ifm->u.macho.fd = -1; + ism.fmap = ifm; + for (ism.sidx = 0; ism.sidx < ifm->u.macho.num_sections; ism.sidx++) + macho_unmap_section(&ism); + + HeapFree(GetProcessHeap(), 0, ifm->u.macho.sect); + macho_unmap_load_commands(&ifm->u.macho); + close(ifm->u.macho.fd); + ifm->u.macho.fd = -1; + } + + next = cursor->u.macho.dsym; + if (cursor != ifm) + HeapFree(GetProcessHeap(), 0, cursor); + cursor = next; } } @@ -967,6 +1032,128 @@ } /****************************************************************** + * try_dsym + * + * Try to load a debug symbol file from the given path and check + * if its UUID matches the UUID of an already-mapped file. If so, + * stash the file map in the "dsym" field of the file and return + * TRUE. If it can't be mapped or its UUID doesn't match, return + * FALSE. + */ +static BOOL try_dsym(const WCHAR* path, struct macho_file_map* fmap) +{ + struct image_file_map dsym_ifm; + + if (macho_map_file(path, &dsym_ifm)) + { + char uuid_string[UUID_STRING_LEN]; + + if (dsym_ifm.u.macho.uuid && !memcmp(dsym_ifm.u.macho.uuid->uuid, fmap->uuid->uuid, sizeof(fmap->uuid->uuid))) + { + TRACE("found matching debug symbol file at %s\n", debugstr_w(path)); + fmap->dsym = HeapAlloc(GetProcessHeap(), 0, sizeof(dsym_ifm)); + *fmap->dsym = dsym_ifm; + return TRUE; + } + + TRACE("candidate debug symbol file at %s has wrong UUID %s; ignoring\n", debugstr_w(path), + format_uuid(dsym_ifm.u.macho.uuid->uuid, uuid_string)); + + macho_unmap_file(&dsym_ifm); + } + else + TRACE("couldn't map file at %s\n", debugstr_w(path)); + + return FALSE; +} + +/****************************************************************** + * find_and_map_dsym + * + * Search for a debugging symbols file associated with a module and + * map it. First look for a .dSYM bundle next to the module file + * (e.g. .dSYM/Contents/Resources/DWARF/) + * as produced by dsymutil. Next, look for a .dwarf file next to + * the module file (e.g. .dwarf) as produced by + * "dsymutil --flat". Finally, use Spotlight to search for a + * .dSYM bundle with the same UUID as the module file. + */ +static void find_and_map_dsym(struct module* module) +{ + static const WCHAR dot_dsym[] = {'.','d','S','Y','M',0}; + static const WCHAR dsym_subpath[] = {'/','C','o','n','t','e','n','t','s','/','R','e','s','o','u','r','c','e','s','/','D','W','A','R','F','/',0}; + static const WCHAR dot_dwarf[] = {'.','d','w','a','r','f',0}; + struct macho_file_map* fmap = &module->format_info[DFI_MACHO]->u.macho_info->file_map.u.macho; + const WCHAR* p; + size_t len; + WCHAR* path = NULL; + char uuid_string[UUID_STRING_LEN]; + CFStringRef uuid_cfstring; + CFStringRef query_string; + MDQueryRef query = NULL; + + /* Without a UUID, we can't verify that any debug info file we find corresponds + to this file. Better to have no debug info than incorrect debug info. */ + if (!fmap->uuid) + return; + + if ((p = strrchrW(module->module.LoadedImageName, '/'))) + p++; + else + p = module->module.LoadedImageName; + len = strlenW(module->module.LoadedImageName) + strlenW(dot_dsym) + strlenW(dsym_subpath) + strlenW(p) + 1; + path = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (!path) + return; + strcpyW(path, module->module.LoadedImageName); + strcatW(path, dot_dsym); + strcatW(path, dsym_subpath); + strcatW(path, p); + + if (try_dsym(path, fmap)) + goto found; + + strcpyW(path + strlenW(module->module.LoadedImageName), dot_dwarf); + + if (try_dsym(path, fmap)) + goto found; + + format_uuid(fmap->uuid->uuid, uuid_string); + uuid_cfstring = CFStringCreateWithCString(NULL, uuid_string, kCFStringEncodingASCII); + query_string = CFStringCreateWithFormat(NULL, NULL, CFSTR("com_apple_xcode_dsym_uuids == \"%@\""), uuid_cfstring); + CFRelease(uuid_cfstring); + query = MDQueryCreate(NULL, query_string, NULL, NULL); + CFRelease(query_string); + MDQuerySetMaxCount(query, 1); + if (MDQueryExecute(query, kMDQuerySynchronous) && MDQueryGetResultCount(query) >= 1) + { + MDItemRef item = (MDItemRef)MDQueryGetResultAtIndex(query, 0); + CFStringRef item_path = MDItemCopyAttribute(item, kMDItemPath); + if (item_path) + { + CFIndex item_path_len = CFStringGetLength(item_path); + if (item_path_len + strlenW(dsym_subpath) + strlenW(p) >= len) + { + HeapFree(GetProcessHeap(), 0, path); + len = item_path_len + strlenW(dsym_subpath) + strlenW(p) + 1; + path = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + } + CFStringGetCharacters(item_path, CFRangeMake(0, item_path_len), (UniChar*)path); + strcpyW(path + item_path_len, dsym_subpath); + strcatW(path, p); + CFRelease(item_path); + + if (try_dsym(path, fmap)) + goto found; + } + } + +found: + HeapFree(GetProcessHeap(), 0, path); + if (query) CFRelease(query); +} + +/****************************************************************** * macho_load_debug_info * * Loads Mach-O debugging information from the module image file. @@ -990,6 +1177,15 @@ module->module.SymType = SymExport; + if (!(dbghelp_options & SYMOPT_PUBLICS_ONLY)) + { + find_and_map_dsym(module); + + if (dwarf2_parse(module, module->reloc_delta, NULL /* FIXME: some thunks to deal with ? */, + &module->format_info[DFI_MACHO]->u.macho_info->file_map)) + ret = TRUE; + } + mdi.fmap = fmap; mdi.module = module; pool_init(&mdi.pool, 65536); @@ -1000,11 +1196,17 @@ else if (result < 0) WARN("Couldn't correctly read stabs\n"); - macho_finish_stabs(module, &mdi.ht_symtab); + if (!(dbghelp_options & SYMOPT_PUBLICS_ONLY) && fmap->dsym) + { + mdi.fmap = &fmap->dsym->u.macho; + result = macho_enum_load_commands(mdi.fmap, LC_SYMTAB, macho_parse_symtab, &mdi); + if (result > 0) + ret = TRUE; + else if (result < 0) + WARN("Couldn't correctly read stabs\n"); + } - if (dwarf2_parse(module, module->reloc_delta, NULL /* FIXME: some thunks to deal with ? */, - &module->format_info[DFI_MACHO]->u.macho_info->file_map)) - ret = TRUE; + macho_finish_stabs(module, &mdi.ht_symtab); pool_destroy(&mdi.pool); return ret; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/Makefile.in wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/Makefile.in --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dbghelp/Makefile.in 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dbghelp/Makefile.in 2015-07-12 05:36:18.000000000 +0000 @@ -3,7 +3,7 @@ EXTRADEFS = -D_IMAGEHLP_SOURCE_ -DDLLPREFIX='"$(DLLPREFIX)"' IMPORTS = psapi DELAYIMPORTS = version -EXTRALIBS = $(Z_LIBS) +EXTRALIBS = $(Z_LIBS) $(CORESERVICES_LIBS) $(COREFOUNDATION_LIBS) C_SRCS = \ coff.c \ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmband/bandtrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmband/bandtrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmband/bandtrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmband/bandtrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -45,6 +45,8 @@ { IDirectMusicBandTrack *This = impl_from_IDirectMusicTrack8(iface); + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); + *ret_iface = NULL; if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) || diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmcompos/chordmaptrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmcompos/chordmaptrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmcompos/chordmaptrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmcompos/chordmaptrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -18,139 +18,125 @@ */ #include "dmcompos_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmcompos); -static ULONG WINAPI IDirectMusicChordMapTrack_IUnknown_AddRef (LPUNKNOWN iface); -static ULONG WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface); -static ULONG WINAPI IDirectMusicChordMapTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface); - /***************************************************************************** * IDirectMusicChordMapTrack implementation */ typedef struct IDirectMusicChordMapTrack { - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; + IDirectMusicTrack8 IDirectMusicTrack8_iface; + struct dmobject dmobj; /* IPersistStream only */ LONG ref; - DMUS_OBJECTDESC *pDesc; } IDirectMusicChordMapTrack; -/* IDirectMusicChordMapTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicChordMapTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, UnknownVtbl, iface); - TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); - - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IDirectMusicChordMapTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IDirectMusicChordMapTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IDirectMusicChordMapTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl); - return S_OK; - } - - WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); - return E_NOINTERFACE; -} - -static ULONG WINAPI IDirectMusicChordMapTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); - - TRACE("(%p): AddRef from %d\n", This, ref - 1); - - DMCOMPOS_LockModule(); - - return ref; -} - -static ULONG WINAPI IDirectMusicChordMapTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); - - TRACE("(%p): ReleaseRef to %d\n", This, ref); - - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } - - DMCOMPOS_UnlockModule(); - - return ref; -} - -static const IUnknownVtbl DirectMusicChordMapTrack_Unknown_Vtbl = { - IDirectMusicChordMapTrack_IUnknown_QueryInterface, - IDirectMusicChordMapTrack_IUnknown_AddRef, - IDirectMusicChordMapTrack_IUnknown_Release -}; - /* IDirectMusicChordMapTrack IDirectMusicTrack8 part: */ static inline IDirectMusicChordMapTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface) { - return CONTAINING_RECORD(iface, IDirectMusicChordMapTrack, TrackVtbl); + return CONTAINING_RECORD(iface, IDirectMusicChordMapTrack, IDirectMusicTrack8_iface); } -static HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface); - return IDirectMusicChordMapTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); +static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicChordMapTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); + + *ret_iface = NULL; + + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) || + IsEqualIID(riid, &IID_IDirectMusicTrack8)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; } -static ULONG WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface); - return IDirectMusicChordMapTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); +static ULONG WINAPI IDirectMusicTrack8Impl_AddRef(IDirectMusicTrack8 *iface) +{ + IDirectMusicChordMapTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; } -static ULONG WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface); - return IDirectMusicChordMapTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); +static ULONG WINAPI IDirectMusicTrack8Impl_Release(IDirectMusicTrack8 *iface) +{ + IDirectMusicChordMapTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMCOMPOS_UnlockModule(); + } + + return ref; } -static HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Init(IDirectMusicTrack8 *iface, + IDirectMusicSegment *pSegment) +{ + IDirectMusicChordMapTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay(IDirectMusicTrack8 *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +{ + IDirectMusicChordMapTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay(IDirectMusicTrack8 *iface, void *pStateData) +{ + IDirectMusicChordMapTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pStateData); return S_OK; } -static HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicChordMapTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) +{ + IDirectMusicChordMapTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, void *pParam) +{ + IDirectMusicChordMapTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported(IDirectMusicTrack8 *iface, + REFGUID rguidType) +{ + IDirectMusicChordMapTrack *This = impl_from_IDirectMusicTrack8(iface); TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType)); if (!rguidType) @@ -182,28 +168,38 @@ return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicChordMapTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, + REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicChordMapTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, + void *pStateData, DWORD dwFlags) +{ + IDirectMusicChordMapTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags) +{ + IDirectMusicChordMapTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); return S_OK; @@ -218,100 +214,79 @@ return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Join(IDirectMusicTrack8 *iface, + IDirectMusicTrack *pNewTrack, MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup, + IDirectMusicTrack **ppResultTrack) +{ + IDirectMusicChordMapTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); return S_OK; } -static const IDirectMusicTrack8Vtbl DirectMusicChordMapTrack_Track_Vtbl = { - IDirectMusicChordMapTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicChordMapTrack_IDirectMusicTrack_AddRef, - IDirectMusicChordMapTrack_IDirectMusicTrack_Release, - IDirectMusicChordMapTrack_IDirectMusicTrack_Init, - IDirectMusicChordMapTrack_IDirectMusicTrack_InitPlay, - IDirectMusicChordMapTrack_IDirectMusicTrack_EndPlay, - IDirectMusicChordMapTrack_IDirectMusicTrack_Play, - IDirectMusicChordMapTrack_IDirectMusicTrack_GetParam, - IDirectMusicChordMapTrack_IDirectMusicTrack_SetParam, - IDirectMusicChordMapTrack_IDirectMusicTrack_IsParamSupported, +static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = { + IDirectMusicTrack8Impl_QueryInterface, + IDirectMusicTrack8Impl_AddRef, + IDirectMusicTrack8Impl_Release, + IDirectMusicTrack8Impl_Init, + IDirectMusicTrack8Impl_InitPlay, + IDirectMusicTrack8Impl_EndPlay, + IDirectMusicTrack8Impl_Play, + IDirectMusicTrack8Impl_GetParam, + IDirectMusicTrack8Impl_SetParam, + IDirectMusicTrack8Impl_IsParamSupported, IDirectMusicTrack8Impl_AddNotificationType, IDirectMusicTrack8Impl_RemoveNotificationType, - IDirectMusicChordMapTrack_IDirectMusicTrack_Clone, - IDirectMusicChordMapTrack_IDirectMusicTrack_PlayEx, - IDirectMusicChordMapTrack_IDirectMusicTrack_GetParamEx, - IDirectMusicChordMapTrack_IDirectMusicTrack_SetParamEx, + IDirectMusicTrack8Impl_Clone, + IDirectMusicTrack8Impl_PlayEx, + IDirectMusicTrack8Impl_GetParamEx, + IDirectMusicTrack8Impl_SetParamEx, IDirectMusicTrack8Impl_Compose, - IDirectMusicChordMapTrack_IDirectMusicTrack_Join + IDirectMusicTrack8Impl_Join }; -/* IDirectMusicChordMapTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, PersistStreamVtbl, iface); - return IDirectMusicChordMapTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} - -static ULONG WINAPI IDirectMusicChordMapTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, PersistStreamVtbl, iface); - return IDirectMusicChordMapTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} - -static ULONG WINAPI IDirectMusicChordMapTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, PersistStreamVtbl, iface); - return IDirectMusicChordMapTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); -} - -static HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - return E_NOTIMPL; +static inline IDirectMusicChordMapTrack *impl_from_IPersistStream(IPersistStream *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicChordMapTrack, dmobj.IPersistStream_iface); } -static HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { - ICOM_THIS_MULTI(IDirectMusicChordMapTrack, PersistStreamVtbl, iface); +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *pStm) +{ + IDirectMusicChordMapTrack *This = impl_from_IPersistStream(iface); FIXME("(%p, %p): Loading not implemented yet\n", This, pStm); return S_OK; } -static HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - return E_NOTIMPL; -} - -static const IPersistStreamVtbl DirectMusicChordMapTrack_PersistStream_Vtbl = { - IDirectMusicChordMapTrack_IPersistStream_QueryInterface, - IDirectMusicChordMapTrack_IPersistStream_AddRef, - IDirectMusicChordMapTrack_IPersistStream_Release, - IDirectMusicChordMapTrack_IPersistStream_GetClassID, - IDirectMusicChordMapTrack_IPersistStream_IsDirty, - IDirectMusicChordMapTrack_IPersistStream_Load, - IDirectMusicChordMapTrack_IPersistStream_Save, - IDirectMusicChordMapTrack_IPersistStream_GetSizeMax +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + unimpl_IPersistStream_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmchordmaptrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicChordMapTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicChordMapTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicChordMapTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicChordMapTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicChordMapTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - track->pDesc->guidClass = CLSID_DirectMusicChordMapTrack; - track->ref = 0; /* will be inited by QueryInterface */ + IDirectMusicChordMapTrack* track; + HRESULT hr; + + track = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack8_iface.lpVtbl = &dmtrack8_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicChordMapTrack, + (IUnknown *)&track->IDirectMusicTrack8_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + + DMCOMPOS_LockModule(); + hr = IDirectMusicTrack8_QueryInterface(&track->IDirectMusicTrack8_iface, lpcGUID, ppobj); + IDirectMusicTrack8_Release(&track->IDirectMusicTrack8_iface); - return IDirectMusicChordMapTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmcompos/dmcompos_private.h wine-staging-1.7.47~ubuntu14.10.1/dlls/dmcompos/dmcompos_private.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmcompos/dmcompos_private.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmcompos/dmcompos_private.h 2015-07-12 05:36:18.000000000 +0000 @@ -78,17 +78,9 @@ } guid_info; /* used for initialising structs (primarily for DMUS_OBJECTDESC) */ -#define DM_STRUCT_INIT(x) \ - do { \ - memset((x), 0, sizeof(*(x))); \ - (x)->dwSize = sizeof(*x); \ - } while (0) - #define FE(x) { x, #x } #define GE(x) { &x, #x } -#define ICOM_THIS_MULTI(impl,field,iface) impl* const This=(impl*)((char*)(iface) - offsetof(impl,field)) - /* FOURCC to string conversion for debug messages */ extern const char *debugstr_fourcc (DWORD fourcc) DECLSPEC_HIDDEN; /* returns name of given GUID */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmcompos/signposttrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmcompos/signposttrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmcompos/signposttrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmcompos/signposttrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -18,121 +18,102 @@ */ #include "dmcompos_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmcompos); -static ULONG WINAPI IDirectMusicSignPostTrack_IUnknown_AddRef (LPUNKNOWN iface); -static ULONG WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface); -static ULONG WINAPI IDirectMusicSignPostTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface); - /***************************************************************************** * IDirectMusicSignPostTrack implementation */ typedef struct IDirectMusicSignPostTrack { - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; + IDirectMusicTrack8 IDirectMusicTrack8_iface; + struct dmobject dmobj; /* IPersistStream only */ LONG ref; - DMUS_OBJECTDESC *pDesc; } IDirectMusicSignPostTrack; -/* IDirectMusicSignPostTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicSignPostTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, UnknownVtbl, iface); - TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); - - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IDirectMusicSignPostTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IDirectMusicSignPostTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IDirectMusicSignPostTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl); - return S_OK; - } - - WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); - return E_NOINTERFACE; -} - -static ULONG WINAPI IDirectMusicSignPostTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); - - TRACE("(%p): AddRef from %d\n", This, ref - 1); - - DMCOMPOS_LockModule(); - - return ref; -} - -static ULONG WINAPI IDirectMusicSignPostTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); - - TRACE("(%p): ReleaseRef to %d\n", This, ref); - - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } - - DMCOMPOS_UnlockModule(); - - return ref; -} - -static const IUnknownVtbl DirectMusicSignPostTrack_Unknown_Vtbl = { - IDirectMusicSignPostTrack_IUnknown_QueryInterface, - IDirectMusicSignPostTrack_IUnknown_AddRef, - IDirectMusicSignPostTrack_IUnknown_Release -}; - /* IDirectMusicSignPostTrack IDirectMusicTrack8 part: */ static inline IDirectMusicSignPostTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface) { - return CONTAINING_RECORD(iface, IDirectMusicSignPostTrack, TrackVtbl); + return CONTAINING_RECORD(iface, IDirectMusicSignPostTrack, IDirectMusicTrack8_iface); } -static HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface); - return IDirectMusicSignPostTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); +static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicSignPostTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); + + *ret_iface = NULL; + + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) || + IsEqualIID(riid, &IID_IDirectMusicTrack8)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; } -static ULONG WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface); - return IDirectMusicSignPostTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); +static ULONG WINAPI IDirectMusicTrack8Impl_AddRef(IDirectMusicTrack8 *iface) +{ + IDirectMusicSignPostTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; } -static ULONG WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface); - return IDirectMusicSignPostTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); +static ULONG WINAPI IDirectMusicTrack8Impl_Release(IDirectMusicTrack8 *iface) +{ + IDirectMusicSignPostTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMCOMPOS_UnlockModule(); + } + + return ref; } -static HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Init(IDirectMusicTrack8 *iface, + IDirectMusicSegment *pSegment) +{ + IDirectMusicSignPostTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay(IDirectMusicTrack8 *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +{ + IDirectMusicSignPostTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay(IDirectMusicTrack8 *iface, void *pStateData) +{ + IDirectMusicSignPostTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pStateData); return S_OK; } -static HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - IDirectMusicSignPostTrack *This = (IDirectMusicSignPostTrack *)iface; +static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicSignPostTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } @@ -165,26 +146,35 @@ return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType(IDirectMusicTrack8 *iface, + REFGUID rguidNotificationType) +{ + IDirectMusicSignPostTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; } -static HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType(IDirectMusicTrack8 *iface, + REFGUID rguidNotificationType) +{ + IDirectMusicSignPostTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; } -static HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicSignPostTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, + REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicSignPostTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; @@ -210,107 +200,100 @@ return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - IDirectMusicSignPostTrack *This = (IDirectMusicSignPostTrack *)iface; +static HRESULT WINAPI IDirectMusicTrack8Impl_Compose(IDirectMusicTrack8 *iface, IUnknown *pContext, + DWORD dwTrackGroup, IDirectMusicTrack **ppResultTrack) +{ + IDirectMusicSignPostTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Join(IDirectMusicTrack8 *iface, + IDirectMusicTrack *pNewTrack, MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup, + IDirectMusicTrack **ppResultTrack) +{ + IDirectMusicSignPostTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); return S_OK; } -static const IDirectMusicTrack8Vtbl DirectMusicSignPostTrack_Track_Vtbl = { - IDirectMusicSignPostTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicSignPostTrack_IDirectMusicTrack_AddRef, - IDirectMusicSignPostTrack_IDirectMusicTrack_Release, - IDirectMusicSignPostTrack_IDirectMusicTrack_Init, - IDirectMusicSignPostTrack_IDirectMusicTrack_InitPlay, - IDirectMusicSignPostTrack_IDirectMusicTrack_EndPlay, - IDirectMusicSignPostTrack_IDirectMusicTrack_Play, +static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = { + IDirectMusicTrack8Impl_QueryInterface, + IDirectMusicTrack8Impl_AddRef, + IDirectMusicTrack8Impl_Release, + IDirectMusicTrack8Impl_Init, + IDirectMusicTrack8Impl_InitPlay, + IDirectMusicTrack8Impl_EndPlay, + IDirectMusicTrack8Impl_Play, IDirectMusicTrack8Impl_GetParam, IDirectMusicTrack8Impl_SetParam, IDirectMusicTrack8Impl_IsParamSupported, - IDirectMusicSignPostTrack_IDirectMusicTrack_AddNotificationType, - IDirectMusicSignPostTrack_IDirectMusicTrack_RemoveNotificationType, - IDirectMusicSignPostTrack_IDirectMusicTrack_Clone, - IDirectMusicSignPostTrack_IDirectMusicTrack_PlayEx, + IDirectMusicTrack8Impl_AddNotificationType, + IDirectMusicTrack8Impl_RemoveNotificationType, + IDirectMusicTrack8Impl_Clone, + IDirectMusicTrack8Impl_PlayEx, IDirectMusicTrack8Impl_GetParamEx, IDirectMusicTrack8Impl_SetParamEx, - IDirectMusicSignPostTrack_IDirectMusicTrack_Compose, - IDirectMusicSignPostTrack_IDirectMusicTrack_Join + IDirectMusicTrack8Impl_Compose, + IDirectMusicTrack8Impl_Join }; -/* IDirectMusicSignPostTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, PersistStreamVtbl, iface); - return IDirectMusicSignPostTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} - -static ULONG WINAPI IDirectMusicSignPostTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, PersistStreamVtbl, iface); - return IDirectMusicSignPostTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} - -static ULONG WINAPI IDirectMusicSignPostTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, PersistStreamVtbl, iface); - return IDirectMusicSignPostTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); -} - -static HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - return E_NOTIMPL; +static inline IDirectMusicSignPostTrack * impl_from_IPersistStream(IPersistStream *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicSignPostTrack, dmobj.IPersistStream_iface); } -static HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { - ICOM_THIS_MULTI(IDirectMusicSignPostTrack, PersistStreamVtbl, iface); +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *pStm) +{ + IDirectMusicSignPostTrack *This = impl_from_IPersistStream(iface); FIXME("(%p, %p): Loading not implemented yet\n", This, pStm); return S_OK; } -static HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - return E_NOTIMPL; -} +static HRESULT WINAPI IPersistStreamImpl_Save(IPersistStream *iface, IStream *stream, + BOOL cleardirty) +{ + IDirectMusicSignPostTrack *This = impl_from_IPersistStream(iface); -static HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - return E_NOTIMPL; + FIXME("(%p, %p, %d): stub\n", This, stream, cleardirty); + + if (!stream) + return E_POINTER; + + return E_NOTIMPL; } -static const IPersistStreamVtbl DirectMusicSignPostTrack_PersistStream_Vtbl = -{ - IDirectMusicSignPostTrack_IPersistStream_QueryInterface, - IDirectMusicSignPostTrack_IPersistStream_AddRef, - IDirectMusicSignPostTrack_IPersistStream_Release, - IDirectMusicSignPostTrack_IPersistStream_GetClassID, - IDirectMusicSignPostTrack_IPersistStream_IsDirty, - IDirectMusicSignPostTrack_IPersistStream_Load, - IDirectMusicSignPostTrack_IPersistStream_Save, - IDirectMusicSignPostTrack_IPersistStream_GetSizeMax +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + IPersistStreamImpl_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmsignposttrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicSignPostTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSignPostTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicSignPostTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicSignPostTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicSignPostTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - track->pDesc->guidClass = CLSID_DirectMusicSignPostTrack; - track->ref = 0; /* will be inited by QueryInterface */ + IDirectMusicSignPostTrack *track; + HRESULT hr; + + track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack8_iface.lpVtbl = &dmtrack8_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicSignPostTrack, + (IUnknown *)&track->IDirectMusicTrack8_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + + DMCOMPOS_LockModule(); + hr = IDirectMusicTrack8_QueryInterface(&track->IDirectMusicTrack8_iface, lpcGUID, ppobj); + IDirectMusicTrack8_Release(&track->IDirectMusicTrack8_iface); - return IDirectMusicSignPostTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmcompos/tests/dmcompos.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmcompos/tests/dmcompos.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmcompos/tests/dmcompos.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmcompos/tests/dmcompos.c 2015-07-12 05:36:18.000000000 +0000 @@ -313,13 +313,13 @@ hr = IDirectMusicTrack8_QueryInterface(dmt8, &IID_IPersistStream, (void**)&ps); ok(hr == S_OK, "QueryInterface for IID_IPersistStream failed: %08x\n", hr); hr = IPersistStream_GetClassID(ps, &class); - todo_wine ok(hr == S_OK, "IPersistStream_GetClassID failed: %08x\n", hr); - todo_wine ok(IsEqualGUID(&class, &CLSID_DirectMusicChordMapTrack), + ok(hr == S_OK, "IPersistStream_GetClassID failed: %08x\n", hr); + ok(IsEqualGUID(&class, &CLSID_DirectMusicChordMapTrack), "Expected class CLSID_DirectMusicChordMapTrack got %s\n", wine_dbgstr_guid(&class)); /* Unimplemented IPersistStream methods */ hr = IPersistStream_IsDirty(ps); - todo_wine ok(hr == S_FALSE, "IPersistStream_IsDirty failed: %08x\n", hr); + ok(hr == S_FALSE, "IPersistStream_IsDirty failed: %08x\n", hr); hr = IPersistStream_GetSizeMax(ps, &size); ok(hr == E_NOTIMPL, "IPersistStream_GetSizeMax failed: %08x\n", hr); hr = IPersistStream_Save(ps, NULL, TRUE); @@ -383,15 +383,15 @@ hr = IDirectMusicTrack8_QueryInterface(dmt8, &IID_IPersistStream, (void**)&ps); ok(hr == S_OK, "QueryInterface for IID_IPersistStream failed: %08x\n", hr); hr = IPersistStream_GetClassID(ps, &class); - todo_wine ok(hr == S_OK, "IPersistStream_GetClassID failed: %08x\n", hr); - todo_wine ok(IsEqualGUID(&class, &CLSID_DirectMusicSignPostTrack), + ok(hr == S_OK, "IPersistStream_GetClassID failed: %08x\n", hr); + ok(IsEqualGUID(&class, &CLSID_DirectMusicSignPostTrack), "Expected class CLSID_DirectMusicSignPostTrack got %s\n", wine_dbgstr_guid(&class)); hr = IPersistStream_Save(ps, NULL, TRUE); - todo_wine ok(hr == E_POINTER, "IPersistStream_Save failed: %08x\n", hr); + ok(hr == E_POINTER, "IPersistStream_Save failed: %08x\n", hr); /* Unimplemented IPersistStream methods */ hr = IPersistStream_IsDirty(ps); - todo_wine ok(hr == S_FALSE, "IPersistStream_IsDirty failed: %08x\n", hr); + ok(hr == S_FALSE, "IPersistStream_IsDirty failed: %08x\n", hr); hr = IPersistStream_GetSizeMax(ps, &size); ok(hr == E_NOTIMPL, "IPersistStream_GetSizeMax failed: %08x\n", hr); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/dmutils.h wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/dmutils.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/dmutils.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/dmutils.h 2015-07-12 05:36:18.000000000 +0000 @@ -27,8 +27,6 @@ DWORD dwSize; /* size of the chunk */ } DMUS_PRIVATE_CHUNK, *LPDMUS_PRIVATE_CHUNK; -#define ICOM_THIS_MULTI(impl,field,iface) impl* const This=(impl*)((char*)(iface) - offsetof(impl,field)) - /** * Parsing utilities */ @@ -51,12 +49,6 @@ } guid_info; /* used for initialising structs */ -#define DM_STRUCT_INIT(x) \ - do { \ - memset((x), 0, sizeof(*(x))); \ - (x)->dwSize = sizeof(*x); \ - } while (0) - #define FE(x) { x, #x } #define GE(x) { &x, #x } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/lyricstrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/lyricstrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/lyricstrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/lyricstrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -18,6 +18,7 @@ */ #include "dmime_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmime); @@ -25,126 +26,118 @@ * IDirectMusicLyricsTrack implementation */ typedef struct IDirectMusicLyricsTrack { - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; + IDirectMusicTrack8 IDirectMusicTrack8_iface; + struct dmobject dmobj; /* IPersistStream only */ LONG ref; - DMUS_OBJECTDESC *pDesc; } IDirectMusicLyricsTrack; -/* IDirectMusicLyricsTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicLyricsTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, UnknownVtbl, iface); - TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); - - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IUnknown_AddRef (iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IUnknown_AddRef (iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IUnknown_AddRef (iface); - return S_OK; - } - - WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); - return E_NOINTERFACE; -} - -static ULONG WINAPI IDirectMusicLyricsTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); - - TRACE("(%p): AddRef from %d\n", This, ref - 1); - - DMIME_LockModule(); - - return ref; -} - -static ULONG WINAPI IDirectMusicLyricsTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); - TRACE("(%p): ReleaseRef to %d\n", This, ref); - - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } - - DMIME_UnlockModule(); - - return ref; -} - -static const IUnknownVtbl DirectMusicLyricsTrack_Unknown_Vtbl = { - IDirectMusicLyricsTrack_IUnknown_QueryInterface, - IDirectMusicLyricsTrack_IUnknown_AddRef, - IDirectMusicLyricsTrack_IUnknown_Release -}; - /* IDirectMusicLyricsTrack IDirectMusicTrack8 part: */ -static HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); +static inline IDirectMusicLyricsTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicLyricsTrack, IDirectMusicTrack8_iface); } -static ULONG WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); +static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); + + *ret_iface = NULL; + + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) || + IsEqualIID(riid, &IID_IDirectMusicTrack8)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; +} + +static ULONG WINAPI IDirectMusicTrack8Impl_AddRef(IDirectMusicTrack8 *iface) +{ + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; } -static ULONG WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); +static ULONG WINAPI IDirectMusicTrack8Impl_Release(IDirectMusicTrack8 *iface) +{ + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMIME_UnlockModule(); + } + + return ref; } -static HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) +static HRESULT WINAPI IDirectMusicTrack8Impl_Init(IDirectMusicTrack8 *iface, + IDirectMusicSegment *pSegment) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +static HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay(IDirectMusicTrack8 *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) +static HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay(IDirectMusicTrack8 *iface, void *pStateData) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pStateData); return S_OK; } -static HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) +static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) +{ + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, void *pParam) +{ + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported(IDirectMusicTrack8 *iface, + REFGUID rguidType) +{ + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType)); /* didn't find any params */ @@ -152,144 +145,138 @@ return DMUS_E_TYPE_UNSUPPORTED; } -static HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); - FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); - return S_OK; +static HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType(IDirectMusicTrack8 *iface, + REFGUID notiftype) +{ + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); - FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); - return S_OK; +static HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType(IDirectMusicTrack8 *iface, + REFGUID notiftype) +{ + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, + REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, + void *pStateData, DWORD dwFlags) +{ + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags) +{ + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); - return S_OK; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_Compose(IDirectMusicTrack8 *iface, IUnknown *context, + DWORD trackgroup, IDirectMusicTrack **track) +{ + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); - return S_OK; + TRACE("(%p, %p, %d, %p): method not implemented\n", This, context, trackgroup, track); + return E_NOTIMPL; } -static const IDirectMusicTrack8Vtbl DirectMusicLyricsTrack_Track_Vtbl = { - IDirectMusicLyricsTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicLyricsTrack_IDirectMusicTrack_AddRef, - IDirectMusicLyricsTrack_IDirectMusicTrack_Release, - IDirectMusicLyricsTrack_IDirectMusicTrack_Init, - IDirectMusicLyricsTrack_IDirectMusicTrack_InitPlay, - IDirectMusicLyricsTrack_IDirectMusicTrack_EndPlay, - IDirectMusicLyricsTrack_IDirectMusicTrack_Play, - IDirectMusicLyricsTrack_IDirectMusicTrack_GetParam, - IDirectMusicLyricsTrack_IDirectMusicTrack_SetParam, - IDirectMusicLyricsTrack_IDirectMusicTrack_IsParamSupported, - IDirectMusicLyricsTrack_IDirectMusicTrack_AddNotificationType, - IDirectMusicLyricsTrack_IDirectMusicTrack_RemoveNotificationType, - IDirectMusicLyricsTrack_IDirectMusicTrack_Clone, - IDirectMusicLyricsTrack_IDirectMusicTrack_PlayEx, - IDirectMusicLyricsTrack_IDirectMusicTrack_GetParamEx, - IDirectMusicLyricsTrack_IDirectMusicTrack_SetParamEx, - IDirectMusicLyricsTrack_IDirectMusicTrack_Compose, - IDirectMusicLyricsTrack_IDirectMusicTrack_Join +static HRESULT WINAPI IDirectMusicTrack8Impl_Join(IDirectMusicTrack8 *iface, + IDirectMusicTrack *newtrack, MUSIC_TIME join, IUnknown *context, DWORD trackgroup, + IDirectMusicTrack **resulttrack) +{ + IDirectMusicLyricsTrack *This = impl_from_IDirectMusicTrack8(iface); + TRACE("(%p, %p, %d, %p, %d, %p): method not implemented\n", This, newtrack, join, context, + trackgroup, resulttrack); + return E_NOTIMPL; +} + +static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = { + IDirectMusicTrack8Impl_QueryInterface, + IDirectMusicTrack8Impl_AddRef, + IDirectMusicTrack8Impl_Release, + IDirectMusicTrack8Impl_Init, + IDirectMusicTrack8Impl_InitPlay, + IDirectMusicTrack8Impl_EndPlay, + IDirectMusicTrack8Impl_Play, + IDirectMusicTrack8Impl_GetParam, + IDirectMusicTrack8Impl_SetParam, + IDirectMusicTrack8Impl_IsParamSupported, + IDirectMusicTrack8Impl_AddNotificationType, + IDirectMusicTrack8Impl_RemoveNotificationType, + IDirectMusicTrack8Impl_Clone, + IDirectMusicTrack8Impl_PlayEx, + IDirectMusicTrack8Impl_GetParamEx, + IDirectMusicTrack8Impl_SetParamEx, + IDirectMusicTrack8Impl_Compose, + IDirectMusicTrack8Impl_Join }; -/* IDirectMusicLyricsTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, PersistStreamVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} - -static ULONG WINAPI IDirectMusicLyricsTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, PersistStreamVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} - -static ULONG WINAPI IDirectMusicLyricsTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicLyricsTrack, PersistStreamVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); -} - -static HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *stream) +{ FIXME(": Loading not implemented yet\n"); return S_OK; } -static HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - return E_NOTIMPL; -} - -static const IPersistStreamVtbl DirectMusicLyricsTrack_PersistStream_Vtbl = { - IDirectMusicLyricsTrack_IPersistStream_QueryInterface, - IDirectMusicLyricsTrack_IPersistStream_AddRef, - IDirectMusicLyricsTrack_IPersistStream_Release, - IDirectMusicLyricsTrack_IPersistStream_GetClassID, - IDirectMusicLyricsTrack_IPersistStream_IsDirty, - IDirectMusicLyricsTrack_IPersistStream_Load, - IDirectMusicLyricsTrack_IPersistStream_Save, - IDirectMusicLyricsTrack_IPersistStream_GetSizeMax +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + unimpl_IPersistStream_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmlyricstrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicLyricsTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicLyricsTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicLyricsTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicLyricsTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicLyricsTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicLyricsTrack, sizeof (CLSID)); - track->ref = 0; /* will be inited by QueryInterface */ - - return IDirectMusicLyricsTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + IDirectMusicLyricsTrack *track; + HRESULT hr; + + track = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack8_iface.lpVtbl = &dmtrack8_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicLyricsTrack, + (IUnknown *)&track->IDirectMusicTrack8_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + + DMIME_LockModule(); + hr = IDirectMusicTrack8_QueryInterface(&track->IDirectMusicTrack8_iface, lpcGUID, ppobj); + IDirectMusicTrack8_Release(&track->IDirectMusicTrack8_iface); + + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/markertrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/markertrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/markertrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/markertrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -18,6 +18,7 @@ */ #include "dmime_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmime); @@ -25,122 +26,117 @@ * IDirectMusicMarkerTrack implementation */ typedef struct IDirectMusicMarkerTrack { - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; + IDirectMusicTrack IDirectMusicTrack_iface; + struct dmobject dmobj; /* IPersistStream only */ LONG ref; - DMUS_OBJECTDESC *pDesc; } IDirectMusicMarkerTrack; -/* IDirectMusicMarkerTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicMarkerTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, UnknownVtbl, iface); - TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); - - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IUnknown_AddRef (iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IUnknown_AddRef (iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IUnknown_AddRef (iface); - return S_OK; - } - - WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); - return E_NOINTERFACE; +/* IDirectMusicMarkerTrack IDirectMusicTrack8 part: */ +static inline IDirectMusicMarkerTrack *impl_from_IDirectMusicTrack(IDirectMusicTrack *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicMarkerTrack, IDirectMusicTrack_iface); } -static ULONG WINAPI IDirectMusicMarkerTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); +static HRESULT WINAPI IDirectMusicTrackImpl_QueryInterface(IDirectMusicTrack *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface); + + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); - TRACE("(%p): AddRef from %d\n", This, ref - 1); + *ret_iface = NULL; - DMIME_LockModule(); + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } - return ref; + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; } -static ULONG WINAPI IDirectMusicMarkerTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); - TRACE("(%p): ReleaseRef to %d\n", This, ref); - - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } +static ULONG WINAPI IDirectMusicTrackImpl_AddRef(IDirectMusicTrack *iface) +{ + IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface); + LONG ref = InterlockedIncrement(&This->ref); - DMIME_UnlockModule(); - - return ref; + TRACE("(%p) ref=%d\n", This, ref); + + return ref; } -static const IUnknownVtbl DirectMusicMarkerTrack_Unknown_Vtbl = { - IDirectMusicMarkerTrack_IUnknown_QueryInterface, - IDirectMusicMarkerTrack_IUnknown_AddRef, - IDirectMusicMarkerTrack_IUnknown_Release -}; +static ULONG WINAPI IDirectMusicTrackImpl_Release(IDirectMusicTrack *iface) +{ + IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface); + LONG ref = InterlockedDecrement(&This->ref); -/* IDirectMusicMarkerTrack IDirectMusicTrack8 part: */ -static HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} + TRACE("(%p) ref=%d\n", This, ref); -static ULONG WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMIME_UnlockModule(); + } -static ULONG WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); + return ref; } -static HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrackImpl_Init(IDirectMusicTrack *iface, + IDirectMusicSegment *pSegment) +{ + IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %p): stub\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrackImpl_InitPlay(IDirectMusicTrack *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +{ + IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrackImpl_EndPlay(IDirectMusicTrack *iface, void *pStateData) +{ + IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %p): stub\n", This, pStateData); return S_OK; } -static HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrackImpl_Play(IDirectMusicTrack *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrackImpl_GetParam(IDirectMusicTrack *iface, REFGUID rguidType, + MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) +{ + IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrackImpl_SetParam(IDirectMusicTrack *iface, REFGUID rguidType, + MUSIC_TIME mtTime, void *pParam) +{ + IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrackImpl_IsParamSupported(IDirectMusicTrack *iface, + REFGUID rguidType) +{ + IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface); TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType)); if (IsEqualGUID (rguidType, &GUID_Play_Marker) @@ -152,144 +148,83 @@ return DMUS_E_TYPE_UNSUPPORTED; } -static HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrackImpl_AddNotificationType(IDirectMusicTrack *iface, + REFGUID rguidNotificationType) +{ + IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; } -static HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrackImpl_RemoveNotificationType(IDirectMusicTrack *iface, + REFGUID rguidNotificationType) +{ + IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; } -static HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrackImpl_Clone(IDirectMusicTrack *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); - FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), - wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); - return S_OK; -} - -static HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); - FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), - wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); - return S_OK; -} - -static HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); - FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), - wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); - return S_OK; -} - -static HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); - return S_OK; -} - -static HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); - return S_OK; -} - -static const IDirectMusicTrack8Vtbl DirectMusicMarkerTrack_Track_Vtbl = { - IDirectMusicMarkerTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicMarkerTrack_IDirectMusicTrack_AddRef, - IDirectMusicMarkerTrack_IDirectMusicTrack_Release, - IDirectMusicMarkerTrack_IDirectMusicTrack_Init, - IDirectMusicMarkerTrack_IDirectMusicTrack_InitPlay, - IDirectMusicMarkerTrack_IDirectMusicTrack_EndPlay, - IDirectMusicMarkerTrack_IDirectMusicTrack_Play, - IDirectMusicMarkerTrack_IDirectMusicTrack_GetParam, - IDirectMusicMarkerTrack_IDirectMusicTrack_SetParam, - IDirectMusicMarkerTrack_IDirectMusicTrack_IsParamSupported, - IDirectMusicMarkerTrack_IDirectMusicTrack_AddNotificationType, - IDirectMusicMarkerTrack_IDirectMusicTrack_RemoveNotificationType, - IDirectMusicMarkerTrack_IDirectMusicTrack_Clone, - IDirectMusicMarkerTrack_IDirectMusicTrack_PlayEx, - IDirectMusicMarkerTrack_IDirectMusicTrack_GetParamEx, - IDirectMusicMarkerTrack_IDirectMusicTrack_SetParamEx, - IDirectMusicMarkerTrack_IDirectMusicTrack_Compose, - IDirectMusicMarkerTrack_IDirectMusicTrack_Join +static const IDirectMusicTrackVtbl dmtrack_vtbl = { + IDirectMusicTrackImpl_QueryInterface, + IDirectMusicTrackImpl_AddRef, + IDirectMusicTrackImpl_Release, + IDirectMusicTrackImpl_Init, + IDirectMusicTrackImpl_InitPlay, + IDirectMusicTrackImpl_EndPlay, + IDirectMusicTrackImpl_Play, + IDirectMusicTrackImpl_GetParam, + IDirectMusicTrackImpl_SetParam, + IDirectMusicTrackImpl_IsParamSupported, + IDirectMusicTrackImpl_AddNotificationType, + IDirectMusicTrackImpl_RemoveNotificationType, + IDirectMusicTrackImpl_Clone }; -/* IDirectMusicMarkerTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, PersistStreamVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} - -static ULONG WINAPI IDirectMusicMarkerTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, PersistStreamVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} - -static ULONG WINAPI IDirectMusicMarkerTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicMarkerTrack, PersistStreamVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); -} - -static HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *stream) +{ FIXME(": Loading not implemented yet\n"); return S_OK; } -static HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - return E_NOTIMPL; -} - -static const IPersistStreamVtbl DirectMusicMarkerTrack_PersistStream_Vtbl = { - IDirectMusicMarkerTrack_IPersistStream_QueryInterface, - IDirectMusicMarkerTrack_IPersistStream_AddRef, - IDirectMusicMarkerTrack_IPersistStream_Release, - IDirectMusicMarkerTrack_IPersistStream_GetClassID, - IDirectMusicMarkerTrack_IPersistStream_IsDirty, - IDirectMusicMarkerTrack_IPersistStream_Load, - IDirectMusicMarkerTrack_IPersistStream_Save, - IDirectMusicMarkerTrack_IPersistStream_GetSizeMax +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + unimpl_IPersistStream_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmmarkertrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicMarkerTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicMarkerTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicMarkerTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicMarkerTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicMarkerTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - track->pDesc->guidClass = CLSID_DirectMusicMarkerTrack; - track->ref = 0; /* will be inited by QueryInterface */ - - return IDirectMusicMarkerTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + IDirectMusicMarkerTrack *track; + HRESULT hr; + + track = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack_iface.lpVtbl = &dmtrack_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicMarkerTrack, + (IUnknown *)&track->IDirectMusicTrack_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + + DMIME_LockModule(); + hr = IDirectMusicTrack_QueryInterface(&track->IDirectMusicTrack_iface, lpcGUID, ppobj); + IDirectMusicTrack_Release(&track->IDirectMusicTrack_iface); + + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/paramcontroltrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/paramcontroltrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/paramcontroltrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/paramcontroltrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -18,6 +18,7 @@ */ #include "dmime_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmime); @@ -25,126 +26,118 @@ * IDirectMusicParamControlTrack implementation */ typedef struct IDirectMusicParamControlTrack { - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; + IDirectMusicTrack8 IDirectMusicTrack8_iface; + struct dmobject dmobj; /* IPersistStream only */ LONG ref; - DMUS_OBJECTDESC *pDesc; } IDirectMusicParamControlTrack; -/* IDirectMusicParamControlTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicParamControlTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, UnknownVtbl, iface); - TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); - - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IUnknown_AddRef (iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IUnknown_AddRef (iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IUnknown_AddRef (iface); - return S_OK; - } - - WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); - return E_NOINTERFACE; -} - -static ULONG WINAPI IDirectMusicParamControlTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); - - TRACE("(%p): AddRef from %d\n", This, ref - 1); - - DMIME_LockModule(); - - return ref; -} - -static ULONG WINAPI IDirectMusicParamControlTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); - TRACE("(%p): ReleaseRef to %d\n", This, ref); - - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } - - DMIME_UnlockModule(); - - return ref; -} - -static const IUnknownVtbl DirectMusicParamControlTrack_Unknown_Vtbl = { - IDirectMusicParamControlTrack_IUnknown_QueryInterface, - IDirectMusicParamControlTrack_IUnknown_AddRef, - IDirectMusicParamControlTrack_IUnknown_Release -}; - /* IDirectMusicParamControlTrack IDirectMusicTrack8 part: */ -static HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); +static inline IDirectMusicParamControlTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicParamControlTrack, IDirectMusicTrack8_iface); } -static ULONG WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); +static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); + + *ret_iface = NULL; + + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) || + IsEqualIID(riid, &IID_IDirectMusicTrack8)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; +} + +static ULONG WINAPI IDirectMusicTrack8Impl_AddRef(IDirectMusicTrack8 *iface) +{ + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; } -static ULONG WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); +static ULONG WINAPI IDirectMusicTrack8Impl_Release(IDirectMusicTrack8 *iface) +{ + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMIME_UnlockModule(); + } + + return ref; } -static HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) +static HRESULT WINAPI IDirectMusicTrack8Impl_Init(IDirectMusicTrack8 *iface, + IDirectMusicSegment *pSegment) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +static HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay(IDirectMusicTrack8 *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) +static HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay(IDirectMusicTrack8 *iface, void *pStateData) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pStateData); return S_OK; } -static HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) +static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) +{ + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, void *pParam) +{ + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported(IDirectMusicTrack8 *iface, + REFGUID rguidType) +{ + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType)); /* didn't find any params */ @@ -152,144 +145,138 @@ return DMUS_E_TYPE_UNSUPPORTED; } -static HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); - FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); - return S_OK; +static HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType(IDirectMusicTrack8 *iface, + REFGUID notiftype) +{ + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); - FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); - return S_OK; +static HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType(IDirectMusicTrack8 *iface, + REFGUID notiftype) +{ + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, + REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, + void *pStateData, DWORD dwFlags) +{ + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags) +{ + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); - return S_OK; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_Compose(IDirectMusicTrack8 *iface, IUnknown *context, + DWORD trackgroup, IDirectMusicTrack **track) +{ + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); - return S_OK; + TRACE("(%p, %p, %d, %p): method not implemented\n", This, context, trackgroup, track); + return E_NOTIMPL; } -static const IDirectMusicTrack8Vtbl DirectMusicParamControlTrack_Track_Vtbl = { - IDirectMusicParamControlTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicParamControlTrack_IDirectMusicTrack_AddRef, - IDirectMusicParamControlTrack_IDirectMusicTrack_Release, - IDirectMusicParamControlTrack_IDirectMusicTrack_Init, - IDirectMusicParamControlTrack_IDirectMusicTrack_InitPlay, - IDirectMusicParamControlTrack_IDirectMusicTrack_EndPlay, - IDirectMusicParamControlTrack_IDirectMusicTrack_Play, - IDirectMusicParamControlTrack_IDirectMusicTrack_GetParam, - IDirectMusicParamControlTrack_IDirectMusicTrack_SetParam, - IDirectMusicParamControlTrack_IDirectMusicTrack_IsParamSupported, - IDirectMusicParamControlTrack_IDirectMusicTrack_AddNotificationType, - IDirectMusicParamControlTrack_IDirectMusicTrack_RemoveNotificationType, - IDirectMusicParamControlTrack_IDirectMusicTrack_Clone, - IDirectMusicParamControlTrack_IDirectMusicTrack_PlayEx, - IDirectMusicParamControlTrack_IDirectMusicTrack_GetParamEx, - IDirectMusicParamControlTrack_IDirectMusicTrack_SetParamEx, - IDirectMusicParamControlTrack_IDirectMusicTrack_Compose, - IDirectMusicParamControlTrack_IDirectMusicTrack_Join +static HRESULT WINAPI IDirectMusicTrack8Impl_Join(IDirectMusicTrack8 *iface, + IDirectMusicTrack *newtrack, MUSIC_TIME join, IUnknown *context, DWORD trackgroup, + IDirectMusicTrack **resulttrack) +{ + IDirectMusicParamControlTrack *This = impl_from_IDirectMusicTrack8(iface); + TRACE("(%p, %p, %d, %p, %d, %p): method not implemented\n", This, newtrack, join, context, + trackgroup, resulttrack); + return E_NOTIMPL; +} + +static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = { + IDirectMusicTrack8Impl_QueryInterface, + IDirectMusicTrack8Impl_AddRef, + IDirectMusicTrack8Impl_Release, + IDirectMusicTrack8Impl_Init, + IDirectMusicTrack8Impl_InitPlay, + IDirectMusicTrack8Impl_EndPlay, + IDirectMusicTrack8Impl_Play, + IDirectMusicTrack8Impl_GetParam, + IDirectMusicTrack8Impl_SetParam, + IDirectMusicTrack8Impl_IsParamSupported, + IDirectMusicTrack8Impl_AddNotificationType, + IDirectMusicTrack8Impl_RemoveNotificationType, + IDirectMusicTrack8Impl_Clone, + IDirectMusicTrack8Impl_PlayEx, + IDirectMusicTrack8Impl_GetParamEx, + IDirectMusicTrack8Impl_SetParamEx, + IDirectMusicTrack8Impl_Compose, + IDirectMusicTrack8Impl_Join }; -/* IDirectMusicParamControlTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, PersistStreamVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} - -static ULONG WINAPI IDirectMusicParamControlTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, PersistStreamVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} - -static ULONG WINAPI IDirectMusicParamControlTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicParamControlTrack, PersistStreamVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); -} - -static HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *stream) +{ FIXME(": Loading not implemented yet\n"); return S_OK; } -static HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - return E_NOTIMPL; -} - -static const IPersistStreamVtbl DirectMusicParamControlTrack_PersistStream_Vtbl = { - IDirectMusicParamControlTrack_IPersistStream_QueryInterface, - IDirectMusicParamControlTrack_IPersistStream_AddRef, - IDirectMusicParamControlTrack_IPersistStream_Release, - IDirectMusicParamControlTrack_IPersistStream_GetClassID, - IDirectMusicParamControlTrack_IPersistStream_IsDirty, - IDirectMusicParamControlTrack_IPersistStream_Load, - IDirectMusicParamControlTrack_IPersistStream_Save, - IDirectMusicParamControlTrack_IPersistStream_GetSizeMax +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + unimpl_IPersistStream_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmparamcontroltrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicParamControlTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicParamControlTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicParamControlTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicParamControlTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicParamControlTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - track->pDesc->guidClass = CLSID_DirectMusicParamControlTrack; - track->ref = 0; /* will be inited by QueryInterface */ + IDirectMusicParamControlTrack *track; + HRESULT hr; + + track = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack8_iface.lpVtbl = &dmtrack8_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicParamControlTrack, + (IUnknown *)&track->IDirectMusicTrack8_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + + DMIME_LockModule(); + hr = IDirectMusicTrack8_QueryInterface(&track->IDirectMusicTrack8_iface, lpcGUID, ppobj); + IDirectMusicTrack8_Release(&track->IDirectMusicTrack8_iface); - return IDirectMusicParamControlTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/segtriggertrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/segtriggertrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/segtriggertrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/segtriggertrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -19,6 +19,7 @@ */ #include "dmime_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmime); WINE_DECLARE_DEBUG_CHANNEL(dmfile); @@ -27,127 +28,119 @@ * IDirectMusicSegTriggerTrack implementation */ typedef struct IDirectMusicSegTriggerTrack { - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; + IDirectMusicTrack8 IDirectMusicTrack8_iface; + struct dmobject dmobj;/* IPersistStream only */ LONG ref; - DMUS_OBJECTDESC *pDesc; struct list Items; } IDirectMusicSegTriggerTrack; -/* IDirectMusicSegTriggerTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, UnknownVtbl, iface); - TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); - - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IUnknown_AddRef (iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IUnknown_AddRef (iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IUnknown_AddRef (iface); - return S_OK; - } - - WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); - return E_NOINTERFACE; +/* IDirectMusicSegTriggerTrack IDirectMusicTrack8 part: */ +static inline IDirectMusicSegTriggerTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicSegTriggerTrack, IDirectMusicTrack8_iface); } -static ULONG WINAPI IDirectMusicSegTriggerTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); +static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); - TRACE("(%p): AddRef from %d\n", This, ref - 1); + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); - DMIME_LockModule(); + *ret_iface = NULL; - return ref; + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) || + IsEqualIID(riid, &IID_IDirectMusicTrack8)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; } -static ULONG WINAPI IDirectMusicSegTriggerTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); - TRACE("(%p): ReleaseRef to %d\n", This, ref); - - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } +static ULONG WINAPI IDirectMusicTrack8Impl_AddRef(IDirectMusicTrack8 *iface) +{ + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); - DMIME_UnlockModule(); - - return ref; + return ref; } -static const IUnknownVtbl DirectMusicSegTriggerTrack_Unknown_Vtbl = { - IDirectMusicSegTriggerTrack_IUnknown_QueryInterface, - IDirectMusicSegTriggerTrack_IUnknown_AddRef, - IDirectMusicSegTriggerTrack_IUnknown_Release -}; +static ULONG WINAPI IDirectMusicTrack8Impl_Release(IDirectMusicTrack8 *iface) +{ + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedDecrement(&This->ref); -/* IDirectMusicSegTriggerTrack IDirectMusicTrack8 part: */ -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} + TRACE("(%p) ref=%d\n", This, ref); -static ULONG WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMIME_UnlockModule(); + } -static ULONG WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); + return ref; } -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) +static HRESULT WINAPI IDirectMusicTrack8Impl_Init(IDirectMusicTrack8 *iface, + IDirectMusicSegment *pSegment) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +static HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay(IDirectMusicTrack8 *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) +static HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay(IDirectMusicTrack8 *iface, void *pStateData) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pStateData); return S_OK; } -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) +static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) +{ + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, void *pParam) +{ + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported(IDirectMusicTrack8 *iface, + REFGUID rguidType) +{ + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType)); /* didn't find any params */ @@ -155,109 +148,104 @@ return DMUS_E_TYPE_UNSUPPORTED; } -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); - FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); - return S_OK; +static HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType(IDirectMusicTrack8 *iface, + REFGUID notiftype) +{ + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); - FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); - return S_OK; +static HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType(IDirectMusicTrack8 *iface, + REFGUID notiftype) +{ + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, + REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, + void *pStateData, DWORD dwFlags) +{ + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags) +{ + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); - return S_OK; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_Compose(IDirectMusicTrack8 *iface, IUnknown *context, + DWORD trackgroup, IDirectMusicTrack **track) +{ + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); - return S_OK; + TRACE("(%p, %p, %d, %p): method not implemented\n", This, context, trackgroup, track); + return E_NOTIMPL; } -static const IDirectMusicTrack8Vtbl DirectMusicSegTriggerTrack_Track_Vtbl = { - IDirectMusicSegTriggerTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_AddRef, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_Release, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_Init, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_InitPlay, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_EndPlay, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_Play, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_GetParam, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_SetParam, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_IsParamSupported, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_AddNotificationType, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_RemoveNotificationType, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_Clone, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_PlayEx, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_GetParamEx, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_SetParamEx, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_Compose, - IDirectMusicSegTriggerTrack_IDirectMusicTrack_Join +static HRESULT WINAPI IDirectMusicTrack8Impl_Join(IDirectMusicTrack8 *iface, + IDirectMusicTrack *newtrack, MUSIC_TIME join, IUnknown *context, DWORD trackgroup, + IDirectMusicTrack **resulttrack) +{ + IDirectMusicSegTriggerTrack *This = impl_from_IDirectMusicTrack8(iface); + TRACE("(%p, %p, %d, %p, %d, %p): method not implemented\n", This, newtrack, join, context, + trackgroup, resulttrack); + return E_NOTIMPL; +} + +static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = { + IDirectMusicTrack8Impl_QueryInterface, + IDirectMusicTrack8Impl_AddRef, + IDirectMusicTrack8Impl_Release, + IDirectMusicTrack8Impl_Init, + IDirectMusicTrack8Impl_InitPlay, + IDirectMusicTrack8Impl_EndPlay, + IDirectMusicTrack8Impl_Play, + IDirectMusicTrack8Impl_GetParam, + IDirectMusicTrack8Impl_SetParam, + IDirectMusicTrack8Impl_IsParamSupported, + IDirectMusicTrack8Impl_AddNotificationType, + IDirectMusicTrack8Impl_RemoveNotificationType, + IDirectMusicTrack8Impl_Clone, + IDirectMusicTrack8Impl_PlayEx, + IDirectMusicTrack8Impl_GetParamEx, + IDirectMusicTrack8Impl_SetParamEx, + IDirectMusicTrack8Impl_Compose, + IDirectMusicTrack8Impl_Join }; -/* IDirectMusicSegTriggerTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} - -static ULONG WINAPI IDirectMusicSegTriggerTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} - -static ULONG WINAPI IDirectMusicSegTriggerTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); -} - -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface); - TRACE("(%p, %p)\n", This, pClassID); - *pClassID = CLSID_DirectMusicSegTriggerTrack; - return S_OK; -} - -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface); - FIXME("(%p): stub, always S_FALSE\n", This); - return S_FALSE; -} - -static HRESULT IDirectMusicSegTriggerTrack_IPersistStream_ParseSegment (LPPERSISTSTREAM iface, DMUS_PRIVATE_CHUNK* pChunk, IStream* pStm) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface); +static HRESULT parse_segment(IDirectMusicSegTriggerTrack *This, DMUS_PRIVATE_CHUNK *pChunk, + IStream *pStm) +{ DMUS_PRIVATE_CHUNK Chunk; DWORD ListSize[3], ListCount[3]; LARGE_INTEGER liMove; /* used when skipping chunks */ @@ -312,7 +300,8 @@ switch (Chunk.fccID) { case DMUS_FOURCC_REF_LIST: { FIXME_(dmfile)(": DMRF (DM References) list\n"); - hr = IDirectMusicUtils_IPersistStream_ParseReference (iface, &Chunk, pStm, &pObject); + hr = IDirectMusicUtils_IPersistStream_ParseReference(&This->dmobj.IPersistStream_iface, + &Chunk, pStm, &pObject); if (FAILED(hr)) { ERR(": could not load Reference\n"); return hr; @@ -346,8 +335,9 @@ return S_OK; } -static HRESULT IDirectMusicSegTriggerTrack_IPersistStream_ParseSegmentsList (LPPERSISTSTREAM iface, DMUS_PRIVATE_CHUNK* pChunk, IStream* pStm) { - /*ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface);*/ +static HRESULT parse_segments_list(IDirectMusicSegTriggerTrack *This, DMUS_PRIVATE_CHUNK *pChunk, + IStream *pStm) +{ HRESULT hr = E_FAIL; DMUS_PRIVATE_CHUNK Chunk; DWORD ListSize[3], ListCount[3]; @@ -374,7 +364,7 @@ switch (Chunk.fccID) { case DMUS_FOURCC_SEGMENT_LIST: { TRACE_(dmfile)(": SEGMENT list\n"); - hr = IDirectMusicSegTriggerTrack_IPersistStream_ParseSegment (iface, &Chunk, pStm); + hr = parse_segment(This, &Chunk, pStm); if (FAILED(hr)) return hr; break; } @@ -400,8 +390,9 @@ return S_OK; } -static HRESULT IDirectMusicSegTriggerTrack_IPersistStream_ParseSegTrackList (LPPERSISTSTREAM iface, DMUS_PRIVATE_CHUNK* pChunk, IStream* pStm) { - /*ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface);*/ +static HRESULT parse_seqtrack_list(IDirectMusicSegTriggerTrack *This, DMUS_PRIVATE_CHUNK *pChunk, + IStream *pStm) +{ HRESULT hr = E_FAIL; DMUS_PRIVATE_CHUNK Chunk; DWORD ListSize[3], ListCount[3]; @@ -434,7 +425,7 @@ switch (Chunk.fccID) { case DMUS_FOURCC_SEGMENTS_LIST: { TRACE_(dmfile)(": SEGMENTS list\n"); - hr = IDirectMusicSegTriggerTrack_IPersistStream_ParseSegmentsList (iface, &Chunk, pStm); + hr = parse_segments_list(This, &Chunk, pStm); if (FAILED(hr)) return hr; break; } @@ -460,9 +451,14 @@ return S_OK; } -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface); +static inline IDirectMusicSegTriggerTrack *impl_from_IPersistStream(IPersistStream *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicSegTriggerTrack, dmobj.IPersistStream_iface); +} +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *pStm) +{ + IDirectMusicSegTriggerTrack *This = impl_from_IPersistStream(iface); DMUS_PRIVATE_CHUNK Chunk; LARGE_INTEGER liMove; HRESULT hr; @@ -478,7 +474,7 @@ switch (Chunk.fccID) { case DMUS_FOURCC_SEGTRACK_LIST: { TRACE_(dmfile)(": segment trigger track list\n"); - hr = IDirectMusicSegTriggerTrack_IPersistStream_ParseSegTrackList (iface, &Chunk, pStm); + hr = parse_seqtrack_list(This, &Chunk, pStm); if (FAILED(hr)) return hr; break; } @@ -503,48 +499,38 @@ return S_OK; } -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface); - FIXME("(%p): Saving not implemented yet\n", This); - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface); - FIXME("(%p, %p): stub\n", This, pcbSize); - return E_NOTIMPL; -} - -static const IPersistStreamVtbl DirectMusicSegTriggerTrack_PersistStream_Vtbl = { - IDirectMusicSegTriggerTrack_IPersistStream_QueryInterface, - IDirectMusicSegTriggerTrack_IPersistStream_AddRef, - IDirectMusicSegTriggerTrack_IPersistStream_Release, - IDirectMusicSegTriggerTrack_IPersistStream_GetClassID, - IDirectMusicSegTriggerTrack_IPersistStream_IsDirty, - IDirectMusicSegTriggerTrack_IPersistStream_Load, - IDirectMusicSegTriggerTrack_IPersistStream_Save, - IDirectMusicSegTriggerTrack_IPersistStream_GetSizeMax +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + unimpl_IPersistStream_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmsegtriggertrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicSegTriggerTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSegTriggerTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicSegTriggerTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicSegTriggerTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicSegTriggerTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - track->pDesc->guidClass = CLSID_DirectMusicSegTriggerTrack; - track->ref = 0; /* will be inited by QueryInterface */ - list_init (&track->Items); + IDirectMusicSegTriggerTrack *track; + HRESULT hr; + + track = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack8_iface.lpVtbl = &dmtrack8_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicSegTriggerTrack, + (IUnknown *)&track->IDirectMusicTrack8_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + list_init(&track->Items); + + DMIME_LockModule(); + hr = IDirectMusicTrack8_QueryInterface(&track->IDirectMusicTrack8_iface, lpcGUID, ppobj); + IDirectMusicTrack8_Release(&track->IDirectMusicTrack8_iface); - return IDirectMusicSegTriggerTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/seqtrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/seqtrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/seqtrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/seqtrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -18,6 +18,7 @@ */ #include "dmime_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmime); @@ -25,271 +26,259 @@ * IDirectMusicSeqTrack implementation */ typedef struct IDirectMusicSeqTrack { - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; + IDirectMusicTrack8 IDirectMusicTrack8_iface; + struct dmobject dmobj; /* IPersistStream only */ LONG ref; - DMUS_OBJECTDESC *pDesc; } IDirectMusicSeqTrack; -/* IDirectMusicSeqTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicSeqTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, UnknownVtbl, iface); - - TRACE("(%p, %s,%p)\n", This, debugstr_dmguid(riid), ppobj); - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IUnknown_AddRef (iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IUnknown_AddRef (iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IUnknown_AddRef (iface); - return S_OK; - } - - WARN("(%p, %s,%p): not found\n", This, debugstr_dmguid(riid), ppobj); - return E_NOINTERFACE; -} - -static ULONG WINAPI IDirectMusicSeqTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); - - TRACE("(%p): AddRef from %d\n", This, ref - 1); - - DMIME_LockModule(); - - return ref; -} - -static ULONG WINAPI IDirectMusicSeqTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); - TRACE("(%p): ReleaseRef to %d\n", This, ref); - - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } - - DMIME_UnlockModule(); - - return ref; -} - -static const IUnknownVtbl DirectMusicSeqTrack_Unknown_Vtbl = { - IDirectMusicSeqTrack_IUnknown_QueryInterface, - IDirectMusicSeqTrack_IUnknown_AddRef, - IDirectMusicSeqTrack_IUnknown_Release -}; - /* IDirectMusicSeqTrack IDirectMusicTrack8 part: */ -static HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); +static inline IDirectMusicSeqTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicSeqTrack, IDirectMusicTrack8_iface); } -static ULONG WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); +static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); + + *ret_iface = NULL; + + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) || + IsEqualIID(riid, &IID_IDirectMusicTrack8)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; } -static ULONG WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); +static ULONG WINAPI IDirectMusicTrack8Impl_AddRef(IDirectMusicTrack8 *iface) +{ + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; } -static HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) +static ULONG WINAPI IDirectMusicTrack8Impl_Release(IDirectMusicTrack8 *iface) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMIME_UnlockModule(); + } + + return ref; +} + +static HRESULT WINAPI IDirectMusicTrack8Impl_Init(IDirectMusicTrack8 *iface, + IDirectMusicSegment *pSegment) +{ + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +static HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay(IDirectMusicTrack8 *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) +static HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay(IDirectMusicTrack8 *iface, void *pStateData) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pStateData); return S_OK; } -static HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) +static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); - FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam); - return S_OK; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParam(IDirectMusicTrack8 *iface, REFGUID type, + MUSIC_TIME time, MUSIC_TIME *next, void *param) +{ + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); - FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); - return S_OK; + TRACE("(%p, %s, %d, %p, %p): method not implemented\n", This, debugstr_dmguid(type), time, + next, param); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParam(IDirectMusicTrack8 *iface, REFGUID type, + MUSIC_TIME time, void *param) +{ + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); - TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType)); - /* didn't find any params */ - TRACE("param unsupported\n"); - return DMUS_E_TYPE_UNSUPPORTED; + TRACE("(%p, %s, %d, %p): method not implemented\n", This, debugstr_dmguid(type), time, param); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); - FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); - return S_OK; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported(IDirectMusicTrack8 *iface, + REFGUID type) +{ + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); - FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); - return S_OK; + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(type)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); - FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); - return S_OK; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType(IDirectMusicTrack8 *iface, + REFGUID notiftype) +{ + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); - FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), - wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); - return S_OK; + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); - FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), - wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); - return S_OK; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType(IDirectMusicTrack8 *iface, + REFGUID notiftype) +{ + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); - FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), - wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); - return S_OK; + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); +static HRESULT WINAPI IDirectMusicTrack8Impl_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); + FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); +static HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, + REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); + FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), + wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static const IDirectMusicTrack8Vtbl DirectMusicSeqTrack_Track_Vtbl = { - IDirectMusicSeqTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicSeqTrack_IDirectMusicTrack_AddRef, - IDirectMusicSeqTrack_IDirectMusicTrack_Release, - IDirectMusicSeqTrack_IDirectMusicTrack_Init, - IDirectMusicSeqTrack_IDirectMusicTrack_InitPlay, - IDirectMusicSeqTrack_IDirectMusicTrack_EndPlay, - IDirectMusicSeqTrack_IDirectMusicTrack_Play, - IDirectMusicSeqTrack_IDirectMusicTrack_GetParam, - IDirectMusicSeqTrack_IDirectMusicTrack_SetParam, - IDirectMusicSeqTrack_IDirectMusicTrack_IsParamSupported, - IDirectMusicSeqTrack_IDirectMusicTrack_AddNotificationType, - IDirectMusicSeqTrack_IDirectMusicTrack_RemoveNotificationType, - IDirectMusicSeqTrack_IDirectMusicTrack_Clone, - IDirectMusicSeqTrack_IDirectMusicTrack_PlayEx, - IDirectMusicSeqTrack_IDirectMusicTrack_GetParamEx, - IDirectMusicSeqTrack_IDirectMusicTrack_SetParamEx, - IDirectMusicSeqTrack_IDirectMusicTrack_Compose, - IDirectMusicSeqTrack_IDirectMusicTrack_Join -}; +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx(IDirectMusicTrack8 *iface, REFGUID type, + REFERENCE_TIME time, REFERENCE_TIME *next, void *param, void *state, DWORD flags) +{ + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); -/* IDirectMusicSeqTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, PersistStreamVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); + TRACE("(%p, %s, %s, %p, %p, %p, %x): method not implemented\n", This, debugstr_dmguid(type), + wine_dbgstr_longlong(time), next, param, state, flags); + return E_NOTIMPL; } -static ULONG WINAPI IDirectMusicSeqTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, PersistStreamVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx(IDirectMusicTrack8 *iface, REFGUID type, + REFERENCE_TIME time, void *param, void *state, DWORD flags) +{ + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); -static ULONG WINAPI IDirectMusicSeqTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicSeqTrack, PersistStreamVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); + TRACE("(%p, %s, %s, %p, %p, %x): method not implemented\n", This, debugstr_dmguid(type), + wine_dbgstr_longlong(time), param, state, flags); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - return E_NOTIMPL; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_Compose(IDirectMusicTrack8 *iface, IUnknown *context, + DWORD trackgroup, IDirectMusicTrack **track) +{ + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - return E_NOTIMPL; + TRACE("(%p, %p, %d, %p): method not implemented\n", This, context, trackgroup, track); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { +static HRESULT WINAPI IDirectMusicTrack8Impl_Join(IDirectMusicTrack8 *iface, + IDirectMusicTrack *newtrack, MUSIC_TIME join, IUnknown *context, DWORD trackgroup, + IDirectMusicTrack **resulttrack) +{ + IDirectMusicSeqTrack *This = impl_from_IDirectMusicTrack8(iface); + TRACE("(%p, %p, %d, %p, %d, %p): method not implemented\n", This, newtrack, join, context, + trackgroup, resulttrack); + return E_NOTIMPL; +} + +static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = { + IDirectMusicTrack8Impl_QueryInterface, + IDirectMusicTrack8Impl_AddRef, + IDirectMusicTrack8Impl_Release, + IDirectMusicTrack8Impl_Init, + IDirectMusicTrack8Impl_InitPlay, + IDirectMusicTrack8Impl_EndPlay, + IDirectMusicTrack8Impl_Play, + IDirectMusicTrack8Impl_GetParam, + IDirectMusicTrack8Impl_SetParam, + IDirectMusicTrack8Impl_IsParamSupported, + IDirectMusicTrack8Impl_AddNotificationType, + IDirectMusicTrack8Impl_RemoveNotificationType, + IDirectMusicTrack8Impl_Clone, + IDirectMusicTrack8Impl_PlayEx, + IDirectMusicTrack8Impl_GetParamEx, + IDirectMusicTrack8Impl_SetParamEx, + IDirectMusicTrack8Impl_Compose, + IDirectMusicTrack8Impl_Join +}; + +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *stream) +{ FIXME(": Loading not implemented yet\n"); return S_OK; } -static HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - return E_NOTIMPL; -} - -static const IPersistStreamVtbl DirectMusicSeqTrack_PersistStream_Vtbl = { - IDirectMusicSeqTrack_IPersistStream_QueryInterface, - IDirectMusicSeqTrack_IPersistStream_AddRef, - IDirectMusicSeqTrack_IPersistStream_Release, - IDirectMusicSeqTrack_IPersistStream_GetClassID, - IDirectMusicSeqTrack_IPersistStream_IsDirty, - IDirectMusicSeqTrack_IPersistStream_Load, - IDirectMusicSeqTrack_IPersistStream_Save, - IDirectMusicSeqTrack_IPersistStream_GetSizeMax +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + unimpl_IPersistStream_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmseqtrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicSeqTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSeqTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicSeqTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicSeqTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicSeqTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - track->pDesc->guidClass = CLSID_DirectMusicSeqTrack; - track->ref = 0; /* will be inited by QueryInterface */ + IDirectMusicSeqTrack *track; + HRESULT hr; + + track = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack8_iface.lpVtbl = &dmtrack8_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicSeqTrack, + (IUnknown *)&track->IDirectMusicTrack8_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + + DMIME_LockModule(); + hr = IDirectMusicTrack8_QueryInterface(&track->IDirectMusicTrack8_iface, lpcGUID, ppobj); + IDirectMusicTrack8_Release(&track->IDirectMusicTrack8_iface); - return IDirectMusicSeqTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/sysextrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/sysextrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/sysextrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/sysextrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -18,6 +18,7 @@ */ #include "dmime_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmime); @@ -25,271 +26,259 @@ * IDirectMusicSysExTrack implementation */ typedef struct IDirectMusicSysExTrack { - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; + IDirectMusicTrack8 IDirectMusicTrack8_iface; + struct dmobject dmobj; /* IPersistStream only */ LONG ref; - DMUS_OBJECTDESC *pDesc; } IDirectMusicSysExTrack; -/* IDirectMusicSysExTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicSysExTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, UnknownVtbl, iface); - TRACE("(%p, %s, %p)\n", This, debugstr_guid(riid), ppobj); - - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IUnknown_AddRef(iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IUnknown_AddRef(iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IUnknown_AddRef(iface); - return S_OK; - } - - WARN("(%p, %s, %p): not found\n", This, debugstr_guid(riid), ppobj); - return E_NOINTERFACE; -} - -static ULONG WINAPI IDirectMusicSysExTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); - - TRACE("(%p): AddRef from %d\n", This, ref - 1); - - DMIME_LockModule(); - - return ref; -} - -static ULONG WINAPI IDirectMusicSysExTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); - TRACE("(%p): ReleaseRef to %d\n", This, ref); - - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } - - DMIME_UnlockModule(); - - return ref; -} - -static const IUnknownVtbl DirectMusicSysExTrack_Unknown_Vtbl = { - IDirectMusicSysExTrack_IUnknown_QueryInterface, - IDirectMusicSysExTrack_IUnknown_AddRef, - IDirectMusicSysExTrack_IUnknown_Release -}; - /* IDirectMusicSysExTrack IDirectMusicTrack8 part: */ -static HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); +static inline IDirectMusicSysExTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicSysExTrack, IDirectMusicTrack8_iface); } -static ULONG WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); +static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); + + *ret_iface = NULL; + + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) || + IsEqualIID(riid, &IID_IDirectMusicTrack8)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; } -static ULONG WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); +static ULONG WINAPI IDirectMusicTrack8Impl_AddRef(IDirectMusicTrack8 *iface) +{ + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; } -static HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) +static ULONG WINAPI IDirectMusicTrack8Impl_Release(IDirectMusicTrack8 *iface) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMIME_UnlockModule(); + } + + return ref; +} + +static HRESULT WINAPI IDirectMusicTrack8Impl_Init(IDirectMusicTrack8 *iface, + IDirectMusicSegment *pSegment) +{ + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +static HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay(IDirectMusicTrack8 *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) +static HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay(IDirectMusicTrack8 *iface, void *pStateData) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pStateData); return S_OK; } -static HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) +static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); - FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam); - return S_OK; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParam(IDirectMusicTrack8 *iface, REFGUID type, + MUSIC_TIME time, MUSIC_TIME *next, void *param) +{ + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); - FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam); - return S_OK; + TRACE("(%p, %s, %d, %p, %p): method not implemented\n", This, debugstr_dmguid(type), time, + next, param); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParam(IDirectMusicTrack8 *iface, REFGUID type, + MUSIC_TIME time, void *param) +{ + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); - TRACE("(%p, %s)\n", This, debugstr_guid(rguidType)); - /* didn't find any params */ - TRACE("param unsupported\n"); - return DMUS_E_TYPE_UNSUPPORTED; + TRACE("(%p, %s, %d, %p): method not implemented\n", This, debugstr_dmguid(type), time, param); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); - FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType)); - return S_OK; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported(IDirectMusicTrack8 *iface, + REFGUID type) +{ + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); - FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType)); - return S_OK; + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(type)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); - FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); - return S_OK; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType(IDirectMusicTrack8 *iface, + REFGUID notiftype) +{ + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); - FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), - wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); - return S_OK; + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); - FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_guid(rguidType), - wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); - return S_OK; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType(IDirectMusicTrack8 *iface, + REFGUID notiftype) +{ + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); - FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_guid(rguidType), - wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); - return S_OK; + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); +static HRESULT WINAPI IDirectMusicTrack8Impl_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); + FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); +static HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, + REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); + FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), + wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static const IDirectMusicTrack8Vtbl DirectMusicSysExTrack_Track_Vtbl = { - IDirectMusicSysExTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicSysExTrack_IDirectMusicTrack_AddRef, - IDirectMusicSysExTrack_IDirectMusicTrack_Release, - IDirectMusicSysExTrack_IDirectMusicTrack_Init, - IDirectMusicSysExTrack_IDirectMusicTrack_InitPlay, - IDirectMusicSysExTrack_IDirectMusicTrack_EndPlay, - IDirectMusicSysExTrack_IDirectMusicTrack_Play, - IDirectMusicSysExTrack_IDirectMusicTrack_GetParam, - IDirectMusicSysExTrack_IDirectMusicTrack_SetParam, - IDirectMusicSysExTrack_IDirectMusicTrack_IsParamSupported, - IDirectMusicSysExTrack_IDirectMusicTrack_AddNotificationType, - IDirectMusicSysExTrack_IDirectMusicTrack_RemoveNotificationType, - IDirectMusicSysExTrack_IDirectMusicTrack_Clone, - IDirectMusicSysExTrack_IDirectMusicTrack_PlayEx, - IDirectMusicSysExTrack_IDirectMusicTrack_GetParamEx, - IDirectMusicSysExTrack_IDirectMusicTrack_SetParamEx, - IDirectMusicSysExTrack_IDirectMusicTrack_Compose, - IDirectMusicSysExTrack_IDirectMusicTrack_Join -}; +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx(IDirectMusicTrack8 *iface, REFGUID type, + REFERENCE_TIME time, REFERENCE_TIME *next, void *param, void *state, DWORD flags) +{ + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); -/* IDirectMusicSysExTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, PersistStreamVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); + TRACE("(%p, %s, %s, %p, %p, %p, %x): method not implemented\n", This, debugstr_dmguid(type), + wine_dbgstr_longlong(time), next, param, state, flags); + return E_NOTIMPL; } -static ULONG WINAPI IDirectMusicSysExTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, PersistStreamVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx(IDirectMusicTrack8 *iface, REFGUID type, + REFERENCE_TIME time, void *param, void *state, DWORD flags) +{ + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); -static ULONG WINAPI IDirectMusicSysExTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicSysExTrack, PersistStreamVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); + TRACE("(%p, %s, %s, %p, %p, %x): method not implemented\n", This, debugstr_dmguid(type), + wine_dbgstr_longlong(time), param, state, flags); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - return E_NOTIMPL; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_Compose(IDirectMusicTrack8 *iface, IUnknown *context, + DWORD trackgroup, IDirectMusicTrack **track) +{ + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - return E_NOTIMPL; + TRACE("(%p, %p, %d, %p): method not implemented\n", This, context, trackgroup, track); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { +static HRESULT WINAPI IDirectMusicTrack8Impl_Join(IDirectMusicTrack8 *iface, + IDirectMusicTrack *newtrack, MUSIC_TIME join, IUnknown *context, DWORD trackgroup, + IDirectMusicTrack **resulttrack) +{ + IDirectMusicSysExTrack *This = impl_from_IDirectMusicTrack8(iface); + TRACE("(%p, %p, %d, %p, %d, %p): method not implemented\n", This, newtrack, join, context, + trackgroup, resulttrack); + return E_NOTIMPL; +} + +static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = { + IDirectMusicTrack8Impl_QueryInterface, + IDirectMusicTrack8Impl_AddRef, + IDirectMusicTrack8Impl_Release, + IDirectMusicTrack8Impl_Init, + IDirectMusicTrack8Impl_InitPlay, + IDirectMusicTrack8Impl_EndPlay, + IDirectMusicTrack8Impl_Play, + IDirectMusicTrack8Impl_GetParam, + IDirectMusicTrack8Impl_SetParam, + IDirectMusicTrack8Impl_IsParamSupported, + IDirectMusicTrack8Impl_AddNotificationType, + IDirectMusicTrack8Impl_RemoveNotificationType, + IDirectMusicTrack8Impl_Clone, + IDirectMusicTrack8Impl_PlayEx, + IDirectMusicTrack8Impl_GetParamEx, + IDirectMusicTrack8Impl_SetParamEx, + IDirectMusicTrack8Impl_Compose, + IDirectMusicTrack8Impl_Join +}; + +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *stream) +{ FIXME(": Loading not implemented yet\n"); return S_OK; } -static HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - return E_NOTIMPL; -} - -static const IPersistStreamVtbl DirectMusicSysExTrack_PersistStream_Vtbl = { - IDirectMusicSysExTrack_IPersistStream_QueryInterface, - IDirectMusicSysExTrack_IPersistStream_AddRef, - IDirectMusicSysExTrack_IPersistStream_Release, - IDirectMusicSysExTrack_IPersistStream_GetClassID, - IDirectMusicSysExTrack_IPersistStream_IsDirty, - IDirectMusicSysExTrack_IPersistStream_Load, - IDirectMusicSysExTrack_IPersistStream_Save, - IDirectMusicSysExTrack_IPersistStream_GetSizeMax +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + unimpl_IPersistStream_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmsysextrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicSysExTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSysExTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicSysExTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicSysExTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicSysExTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - track->pDesc->guidClass = CLSID_DirectMusicSysExTrack; - track->ref = 0; /* will be inited by QueryInterface */ + IDirectMusicSysExTrack *track; + HRESULT hr; + + track = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack8_iface.lpVtbl = &dmtrack8_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicSysExTrack, + (IUnknown *)&track->IDirectMusicTrack8_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + + DMIME_LockModule(); + hr = IDirectMusicTrack8_QueryInterface(&track->IDirectMusicTrack8_iface, lpcGUID, ppobj); + IDirectMusicTrack8_Release(&track->IDirectMusicTrack8_iface); - return IDirectMusicSysExTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/tempotrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/tempotrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/tempotrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/tempotrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -19,6 +19,7 @@ */ #include "dmime_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmime); WINE_DECLARE_DEBUG_CHANNEL(dmfile); @@ -27,96 +28,80 @@ * IDirectMusicTempoTrack implementation */ typedef struct IDirectMusicTempoTrack { - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; + IDirectMusicTrack8 IDirectMusicTrack8_iface; + struct dmobject dmobj; /* IPersistStream only */ LONG ref; - DMUS_OBJECTDESC *pDesc; BOOL enabled; struct list Items; } IDirectMusicTempoTrack; -/* IDirectMusicTempoTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicTempoTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, UnknownVtbl, iface); - TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); - - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IUnknown_AddRef (iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IUnknown_AddRef (iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IUnknown_AddRef (iface); - return S_OK; - } - - WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); - return E_NOINTERFACE; +/* IDirectMusicTempoTrack IDirectMusicTrack8 part: */ +static inline IDirectMusicTempoTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicTempoTrack, IDirectMusicTrack8_iface); } -static ULONG WINAPI IDirectMusicTempoTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); +static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); - TRACE("(%p): AddRef from %d\n", This, ref - 1); + *ret_iface = NULL; - DMIME_LockModule(); + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) || + IsEqualIID(riid, &IID_IDirectMusicTrack8)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } - return ref; + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; } -static ULONG WINAPI IDirectMusicTempoTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); - TRACE("(%p): ReleaseRef to %d\n", This, ref); - - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } +static ULONG WINAPI IDirectMusicTrack8Impl_AddRef(IDirectMusicTrack8 *iface) +{ + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedIncrement(&This->ref); - DMIME_UnlockModule(); - - return ref; + TRACE("(%p) ref=%d\n", This, ref); + + return ref; } -static const IUnknownVtbl DirectMusicTempoTrack_Unknown_Vtbl = { - IDirectMusicTempoTrack_IUnknown_QueryInterface, - IDirectMusicTempoTrack_IUnknown_AddRef, - IDirectMusicTempoTrack_IUnknown_Release -}; +static ULONG WINAPI IDirectMusicTrack8Impl_Release(IDirectMusicTrack8 *iface) +{ + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedDecrement(&This->ref); -/* IDirectMusicTempoTrack IDirectMusicTrack8 part: */ -static HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} + TRACE("(%p) ref=%d\n", This, ref); -static ULONG WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMIME_UnlockModule(); + } -static ULONG WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); + return ref; } -static HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) +static HRESULT WINAPI IDirectMusicTrack8Impl_Init(IDirectMusicTrack8 *iface, + IDirectMusicSegment *pSegment) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); TRACE("(%p, %p): nothing to do here\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +static HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay(IDirectMusicTrack8 *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); LPDMUS_PRIVATE_TEMPO_PLAY_STATE pState = NULL; @@ -132,9 +117,9 @@ return S_OK; } -static HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) +static HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay(IDirectMusicTrack8 *iface, void *pStateData) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); LPDMUS_PRIVATE_TEMPO_PLAY_STATE pState = pStateData; @@ -148,16 +133,20 @@ return S_OK; } -static HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) +static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); /** should use IDirectMusicPerformance_SendPMsg here */ return S_OK; } -static HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) +{ + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); HRESULT hr = S_OK; struct list* pEntry = NULL; @@ -205,14 +194,18 @@ return S_OK; } -static HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, void *pParam) +{ + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported(IDirectMusicTrack8 *iface, + REFGUID rguidType) +{ + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType)); if (IsEqualGUID (rguidType, &GUID_DisableTempo) @@ -228,109 +221,108 @@ return DMUS_E_TYPE_UNSUPPORTED; } -static HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); - FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); - return S_OK; +static HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType(IDirectMusicTrack8 *iface, + REFGUID notiftype) +{ + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); - FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); - return S_OK; +static HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType(IDirectMusicTrack8 *iface, + REFGUID notiftype) +{ + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, + REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, + void *pStateData, DWORD dwFlags) +{ + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags) +{ + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); - return S_OK; +static HRESULT WINAPI IDirectMusicTrack8Impl_Compose(IDirectMusicTrack8 *iface, IUnknown *context, + DWORD trackgroup, IDirectMusicTrack **track) +{ + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %p, %d, %p): method not implemented\n", This, context, trackgroup, track); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Join(IDirectMusicTrack8 *iface, + IDirectMusicTrack *pNewTrack, MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup, + IDirectMusicTrack **ppResultTrack) +{ + IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); return S_OK; } -static const IDirectMusicTrack8Vtbl DirectMusicTempoTrack_Track_Vtbl = { - IDirectMusicTempoTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicTempoTrack_IDirectMusicTrack_AddRef, - IDirectMusicTempoTrack_IDirectMusicTrack_Release, - IDirectMusicTempoTrack_IDirectMusicTrack_Init, - IDirectMusicTempoTrack_IDirectMusicTrack_InitPlay, - IDirectMusicTempoTrack_IDirectMusicTrack_EndPlay, - IDirectMusicTempoTrack_IDirectMusicTrack_Play, - IDirectMusicTempoTrack_IDirectMusicTrack_GetParam, - IDirectMusicTempoTrack_IDirectMusicTrack_SetParam, - IDirectMusicTempoTrack_IDirectMusicTrack_IsParamSupported, - IDirectMusicTempoTrack_IDirectMusicTrack_AddNotificationType, - IDirectMusicTempoTrack_IDirectMusicTrack_RemoveNotificationType, - IDirectMusicTempoTrack_IDirectMusicTrack_Clone, - IDirectMusicTempoTrack_IDirectMusicTrack_PlayEx, - IDirectMusicTempoTrack_IDirectMusicTrack_GetParamEx, - IDirectMusicTempoTrack_IDirectMusicTrack_SetParamEx, - IDirectMusicTempoTrack_IDirectMusicTrack_Compose, - IDirectMusicTempoTrack_IDirectMusicTrack_Join +static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = { + IDirectMusicTrack8Impl_QueryInterface, + IDirectMusicTrack8Impl_AddRef, + IDirectMusicTrack8Impl_Release, + IDirectMusicTrack8Impl_Init, + IDirectMusicTrack8Impl_InitPlay, + IDirectMusicTrack8Impl_EndPlay, + IDirectMusicTrack8Impl_Play, + IDirectMusicTrack8Impl_GetParam, + IDirectMusicTrack8Impl_SetParam, + IDirectMusicTrack8Impl_IsParamSupported, + IDirectMusicTrack8Impl_AddNotificationType, + IDirectMusicTrack8Impl_RemoveNotificationType, + IDirectMusicTrack8Impl_Clone, + IDirectMusicTrack8Impl_PlayEx, + IDirectMusicTrack8Impl_GetParamEx, + IDirectMusicTrack8Impl_SetParamEx, + IDirectMusicTrack8Impl_Compose, + IDirectMusicTrack8Impl_Join }; -/* IDirectMusicTempoTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, PersistStreamVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} - -static ULONG WINAPI IDirectMusicTempoTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, PersistStreamVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} - -static ULONG WINAPI IDirectMusicTempoTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, PersistStreamVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); -} - -static HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, PersistStreamVtbl, iface); - TRACE("(%p, %p)\n", This, pClassID); - *pClassID = CLSID_DirectMusicTempoTrack; - return S_OK; -} - -static HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, PersistStreamVtbl, iface); - FIXME("(%p): stub, always S_FALSE\n", This); - return S_FALSE; +static inline IDirectMusicTempoTrack *impl_from_IPersistStream(IPersistStream *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicTempoTrack, dmobj.IPersistStream_iface); } -static HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, PersistStreamVtbl, iface); +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *pStm) +{ + IDirectMusicTempoTrack *This = impl_from_IPersistStream(iface); DMUS_PRIVATE_CHUNK Chunk; DWORD StreamSize, StreamCount; LARGE_INTEGER liMove; @@ -377,49 +369,39 @@ return S_OK; } -static HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, PersistStreamVtbl, iface); - FIXME("(%p): Saving not implemented yet\n", This); - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - ICOM_THIS_MULTI(IDirectMusicTempoTrack, PersistStreamVtbl, iface); - FIXME("(%p, %p): stub\n", This, pcbSize); - return E_NOTIMPL; -} - -static const IPersistStreamVtbl DirectMusicTempoTrack_PersistStream_Vtbl = { - IDirectMusicTempoTrack_IPersistStream_QueryInterface, - IDirectMusicTempoTrack_IPersistStream_AddRef, - IDirectMusicTempoTrack_IPersistStream_Release, - IDirectMusicTempoTrack_IPersistStream_GetClassID, - IDirectMusicTempoTrack_IPersistStream_IsDirty, - IDirectMusicTempoTrack_IPersistStream_Load, - IDirectMusicTempoTrack_IPersistStream_Save, - IDirectMusicTempoTrack_IPersistStream_GetSizeMax +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + unimpl_IPersistStream_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmtempotrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicTempoTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicTempoTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicTempoTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicTempoTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicTempoTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - track->pDesc->guidClass = CLSID_DirectMusicTempoTrack; - track->ref = 0; /* will be inited by QueryInterface */ - track->enabled = TRUE; - list_init (&track->Items); + IDirectMusicTempoTrack *track; + HRESULT hr; - return IDirectMusicTempoTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + track = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack8_iface.lpVtbl = &dmtrack8_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicTempoTrack, + (IUnknown *)&track->IDirectMusicTrack8_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + track->enabled = TRUE; + list_init(&track->Items); + + DMIME_LockModule(); + hr = IDirectMusicTrack8_QueryInterface(&track->IDirectMusicTrack8_iface, lpcGUID, ppobj); + IDirectMusicTrack8_Release(&track->IDirectMusicTrack8_iface); + + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/tests/dmime.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/tests/dmime.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/tests/dmime.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/tests/dmime.c 2015-07-12 05:36:18.000000000 +0000 @@ -302,6 +302,7 @@ static void test_COM_track(void) { + IDirectMusicTrack *dmt; IDirectMusicTrack8 *dmt8; IPersistStream *ps; IUnknown *unk; @@ -311,21 +312,23 @@ const struct { REFCLSID clsid; const char *name; + BOOL has_dmt8; } class[] = { - { X(DirectMusicLyricsTrack) }, - { X(DirectMusicMarkerTrack) }, - { X(DirectMusicParamControlTrack) }, - { X(DirectMusicSegmentTriggerTrack) }, - { X(DirectMusicSeqTrack) }, - { X(DirectMusicSysExTrack) }, - { X(DirectMusicTempoTrack) }, - { X(DirectMusicTimeSigTrack) }, - { X(DirectMusicWaveTrack) } + { X(DirectMusicLyricsTrack), TRUE }, + { X(DirectMusicMarkerTrack), FALSE }, + { X(DirectMusicParamControlTrack), TRUE }, + { X(DirectMusicSegmentTriggerTrack), TRUE }, + { X(DirectMusicSeqTrack), TRUE }, + { X(DirectMusicSysExTrack), TRUE }, + { X(DirectMusicTempoTrack), TRUE }, + { X(DirectMusicTimeSigTrack), FALSE }, + { X(DirectMusicWaveTrack), TRUE } }; #undef X unsigned int i; for (i = 0; i < ARRAY_SIZE(class); i++) { + trace("Testing %s\n", class[i].name); /* COM aggregation */ dmt8 = (IDirectMusicTrack8*)0xdeadbeef; hr = CoCreateInstance(class[i].clsid, (IUnknown*)&dmt8, CLSCTX_INPROC_SERVER, &IID_IUnknown, @@ -345,29 +348,37 @@ class[i].name, hr); /* Same refcount for all DirectMusicTrack interfaces */ - hr = CoCreateInstance(class[i].clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicTrack8, - (void**)&dmt8); - if (hr == E_NOINTERFACE && !dmt8) { - skip("%s not created with CoCreateInstance()\n", class[i].name); - continue; - } + hr = CoCreateInstance(class[i].clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicTrack, + (void**)&dmt); ok(hr == S_OK, "%s create failed: %08x, expected S_OK\n", class[i].name, hr); - refcount = IDirectMusicTrack8_AddRef(dmt8); + refcount = IDirectMusicTrack_AddRef(dmt); ok(refcount == 2, "refcount == %u, expected 2\n", refcount); - hr = IDirectMusicTrack8_QueryInterface(dmt8, &IID_IPersistStream, (void**)&ps); + hr = IDirectMusicTrack_QueryInterface(dmt, &IID_IPersistStream, (void**)&ps); ok(hr == S_OK, "QueryInterface for IID_IPersistStream failed: %08x\n", hr); refcount = IPersistStream_AddRef(ps); ok(refcount == 4, "refcount == %u, expected 4\n", refcount); IPersistStream_Release(ps); - hr = IDirectMusicTrack8_QueryInterface(dmt8, &IID_IUnknown, (void**)&unk); + hr = IDirectMusicTrack_QueryInterface(dmt, &IID_IUnknown, (void**)&unk); ok(hr == S_OK, "QueryInterface for IID_IUnknown failed: %08x\n", hr); refcount = IUnknown_AddRef(unk); ok(refcount == 5, "refcount == %u, expected 5\n", refcount); refcount = IUnknown_Release(unk); - while (IDirectMusicTrack8_Release(dmt8)); + hr = IDirectMusicTrack_QueryInterface(dmt, &IID_IDirectMusicTrack8, (void**)&dmt8); + if (class[i].has_dmt8) { + ok(hr == S_OK, "QueryInterface for IID_IDirectMusicTrack8 failed: %08x\n", hr); + refcount = IDirectMusicTrack8_AddRef(dmt8); + ok(refcount == 6, "refcount == %u, expected 6\n", refcount); + refcount = IDirectMusicTrack8_Release(dmt8); + } else { + ok(hr == E_NOINTERFACE, "QueryInterface for IID_IDirectMusicTrack8 failed: %08x\n", hr); + refcount = IDirectMusicTrack_AddRef(dmt); + ok(refcount == 5, "refcount == %u, expected 5\n", refcount); + } + + while (IDirectMusicTrack_Release(dmt)); } } @@ -472,6 +483,7 @@ static void test_track(void) { + IDirectMusicTrack *dmt; IDirectMusicTrack8 *dmt8; IPersistStream *ps; CLSID classid; @@ -481,15 +493,15 @@ const struct { REFCLSID clsid; const char *name; - BOOL todo; + BOOL has_param; } class[] = { { X(DirectMusicLyricsTrack), TRUE }, { X(DirectMusicMarkerTrack), TRUE }, { X(DirectMusicParamControlTrack), TRUE }, - { X(DirectMusicSegmentTriggerTrack), FALSE }, - { X(DirectMusicSeqTrack), TRUE }, - { X(DirectMusicSysExTrack), TRUE }, - { X(DirectMusicTempoTrack), FALSE }, + { X(DirectMusicSegmentTriggerTrack), TRUE }, + { X(DirectMusicSeqTrack), FALSE }, + { X(DirectMusicSysExTrack), FALSE }, + { X(DirectMusicTempoTrack), TRUE }, { X(DirectMusicTimeSigTrack), TRUE }, { X(DirectMusicWaveTrack), TRUE } }; @@ -498,33 +510,59 @@ for (i = 0; i < ARRAY_SIZE(class); i++) { trace("Testing %s\n", class[i].name); - hr = CoCreateInstance(class[i].clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicTrack8, - (void**)&dmt8); - if (hr == E_NOINTERFACE && !dmt8) { - skip("%s not created with CoCreateInstance()\n", class[i].name); - continue; - } + hr = CoCreateInstance(class[i].clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicTrack, + (void**)&dmt); ok(hr == S_OK, "%s create failed: %08x, expected S_OK\n", class[i].name, hr); + /* IDirectMusicTrack */ + if (!class[i].has_param) { + hr = IDirectMusicTrack_GetParam(dmt, NULL, 0, NULL, NULL); + ok(hr == E_NOTIMPL, "IDirectMusicTrack_GetParam failed: %08x\n", hr); + hr = IDirectMusicTrack_SetParam(dmt, NULL, 0, NULL); + ok(hr == E_NOTIMPL, "IDirectMusicTrack_SetParam failed: %08x\n", hr); + hr = IDirectMusicTrack_IsParamSupported(dmt, NULL); + ok(hr == E_NOTIMPL, "IDirectMusicTrack_IsParamSupported failed: %08x\n", hr); + } + if (class[i].clsid != &CLSID_DirectMusicMarkerTrack && + class[i].clsid != &CLSID_DirectMusicTimeSigTrack) { + hr = IDirectMusicTrack_AddNotificationType(dmt, NULL); + ok(hr == E_NOTIMPL, "IDirectMusicTrack_AddNotificationType failed: %08x\n", hr); + hr = IDirectMusicTrack_RemoveNotificationType(dmt, NULL); + ok(hr == E_NOTIMPL, "IDirectMusicTrack_RemoveNotificationType failed: %08x\n", hr); + } + hr = IDirectMusicTrack_Clone(dmt, 0, 0, NULL); + todo_wine ok(hr == E_POINTER, "IDirectMusicTrack_Clone failed: %08x\n", hr); + + /* IDirectMusicTrack8 */ + hr = IDirectMusicTrack_QueryInterface(dmt, &IID_IDirectMusicTrack8, (void**)&dmt8); + if (hr == S_OK) { + hr = IDirectMusicTrack8_PlayEx(dmt8, NULL, 0, 0, 0, 0, NULL, NULL, 0); + todo_wine ok(hr == E_POINTER, "IDirectMusicTrack8_PlayEx failed: %08x\n", hr); + if (!class[i].has_param) { + hr = IDirectMusicTrack8_GetParamEx(dmt8, NULL, 0, NULL, NULL, NULL, 0); + ok(hr == E_NOTIMPL, "IDirectMusicTrack8_GetParamEx failed: %08x\n", hr); + hr = IDirectMusicTrack8_SetParamEx(dmt8, NULL, 0, NULL, NULL, 0); + ok(hr == E_NOTIMPL, "IDirectMusicTrack8_SetParamEx failed: %08x\n", hr); + } + hr = IDirectMusicTrack8_Compose(dmt8, NULL, 0, NULL); + ok(hr == E_NOTIMPL, "IDirectMusicTrack8_Compose failed: %08x\n", hr); + hr = IDirectMusicTrack8_Join(dmt8, NULL, 0, NULL, 0, NULL); + if (class[i].clsid == &CLSID_DirectMusicTempoTrack) + todo_wine ok(hr == E_POINTER, "IDirectMusicTrack8_Join failed: %08x\n", hr); + else + ok(hr == E_NOTIMPL, "IDirectMusicTrack8_Join failed: %08x\n", hr); + IDirectMusicTrack8_Release(dmt8); + } + /* IPersistStream */ - hr = IDirectMusicTrack8_QueryInterface(dmt8, &IID_IPersistStream, (void**)&ps); + hr = IDirectMusicTrack_QueryInterface(dmt, &IID_IPersistStream, (void**)&ps); ok(hr == S_OK, "QueryInterface for IID_IPersistStream failed: %08x\n", hr); hr = IPersistStream_GetClassID(ps, &classid); - if (class[i].todo) { - todo_wine { - ok(hr == S_OK, "IPersistStream_GetClassID failed: %08x\n", hr); - ok(IsEqualGUID(&classid, class[i].clsid), - "Expected class %s got %s\n", class[i].name, wine_dbgstr_guid(&classid)); - hr = IPersistStream_IsDirty(ps); - ok(hr == S_FALSE, "IPersistStream_IsDirty failed: %08x\n", hr); - } - } else { - ok(hr == S_OK, "IPersistStream_GetClassID failed: %08x\n", hr); - ok(IsEqualGUID(&classid, class[i].clsid), - "Expected class %s got %s\n", class[i].name, wine_dbgstr_guid(&classid)); - hr = IPersistStream_IsDirty(ps); - ok(hr == S_FALSE, "IPersistStream_IsDirty failed: %08x\n", hr); - } + ok(hr == S_OK, "IPersistStream_GetClassID failed: %08x\n", hr); + ok(IsEqualGUID(&classid, class[i].clsid), + "Expected class %s got %s\n", class[i].name, wine_dbgstr_guid(&classid)); + hr = IPersistStream_IsDirty(ps); + ok(hr == S_FALSE, "IPersistStream_IsDirty failed: %08x\n", hr); /* Unimplemented IPersistStream methods */ hr = IPersistStream_GetSizeMax(ps, &size); @@ -532,7 +570,7 @@ hr = IPersistStream_Save(ps, NULL, TRUE); ok(hr == E_NOTIMPL, "IPersistStream_Save failed: %08x\n", hr); - while (IDirectMusicTrack8_Release(dmt8)); + while (IDirectMusicTrack_Release(dmt)); } } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/timesigtrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/timesigtrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/timesigtrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/timesigtrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -18,6 +18,7 @@ */ #include "dmime_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmime); @@ -25,126 +26,117 @@ * IDirectMusicTimeSigTrack implementation */ typedef struct IDirectMusicTimeSigTrack { - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; + IDirectMusicTrack IDirectMusicTrack_iface; + struct dmobject dmobj; /* IPersistStream only */ LONG ref; - DMUS_OBJECTDESC *pDesc; } IDirectMusicTimeSigTrack; -/* IDirectMusicTimeSigTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicTimeSigTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, UnknownVtbl, iface); - TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); - - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IUnknown_AddRef (iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IUnknown_AddRef (iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IUnknown_AddRef (iface); - return S_OK; - } - - WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); - return E_NOINTERFACE; +/* IDirectMusicTimeSigTrack IDirectMusicTrack8 part: */ +static inline IDirectMusicTimeSigTrack *impl_from_IDirectMusicTrack(IDirectMusicTrack *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicTimeSigTrack, IDirectMusicTrack_iface); } -static ULONG WINAPI IDirectMusicTimeSigTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); +static HRESULT WINAPI IDirectMusicTrackImpl_QueryInterface(IDirectMusicTrack *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicTimeSigTrack *This = impl_from_IDirectMusicTrack(iface); + + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); - TRACE("(%p): AddRef from %d\n", This, ref - 1); + *ret_iface = NULL; - DMIME_LockModule(); + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } - return ref; + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; } -static ULONG WINAPI IDirectMusicTimeSigTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); - TRACE("(%p): ReleaseRef to %d\n", This, ref); - - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } +static ULONG WINAPI IDirectMusicTrackImpl_AddRef(IDirectMusicTrack *iface) +{ + IDirectMusicTimeSigTrack *This = impl_from_IDirectMusicTrack(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); - DMIME_UnlockModule(); - - return ref; + return ref; } -static const IUnknownVtbl DirectMusicTimeSigTrack_Unknown_Vtbl = { - IDirectMusicTimeSigTrack_IUnknown_QueryInterface, - IDirectMusicTimeSigTrack_IUnknown_AddRef, - IDirectMusicTimeSigTrack_IUnknown_Release -}; +static ULONG WINAPI IDirectMusicTrackImpl_Release(IDirectMusicTrack *iface) +{ + IDirectMusicTimeSigTrack *This = impl_from_IDirectMusicTrack(iface); + LONG ref = InterlockedDecrement(&This->ref); -/* IDirectMusicTimeSigTrack IDirectMusicTrack8 part: */ -static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} + TRACE("(%p) ref=%d\n", This, ref); -static ULONG WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMIME_UnlockModule(); + } -static ULONG WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); + return ref; } -static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) +static HRESULT WINAPI IDirectMusicTrackImpl_Init(IDirectMusicTrack *iface, + IDirectMusicSegment *pSegment) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); + IDirectMusicTimeSigTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %p): stub\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +static HRESULT WINAPI IDirectMusicTrackImpl_InitPlay(IDirectMusicTrack *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); + IDirectMusicTimeSigTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) +static HRESULT WINAPI IDirectMusicTrackImpl_EndPlay(IDirectMusicTrack *iface, void *pStateData) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); + IDirectMusicTimeSigTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %p): stub\n", This, pStateData); return S_OK; } -static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) +static HRESULT WINAPI IDirectMusicTrackImpl_Play(IDirectMusicTrack *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); + IDirectMusicTimeSigTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrackImpl_GetParam(IDirectMusicTrack *iface, REFGUID rguidType, + MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) +{ + IDirectMusicTimeSigTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrackImpl_SetParam(IDirectMusicTrack *iface, REFGUID rguidType, + MUSIC_TIME mtTime, void *pParam) +{ + IDirectMusicTimeSigTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrackImpl_IsParamSupported(IDirectMusicTrack *iface, + REFGUID rguidType) +{ + IDirectMusicTimeSigTrack *This = impl_from_IDirectMusicTrack(iface); TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType)); if (IsEqualGUID (rguidType, &GUID_DisableTimeSig) @@ -157,144 +149,83 @@ return DMUS_E_TYPE_UNSUPPORTED; } -static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrackImpl_AddNotificationType(IDirectMusicTrack *iface, + REFGUID rguidNotificationType) +{ + IDirectMusicTimeSigTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; } -static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrackImpl_RemoveNotificationType(IDirectMusicTrack *iface, + REFGUID rguidNotificationType) +{ + IDirectMusicTimeSigTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; } -static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrackImpl_Clone(IDirectMusicTrack *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicTimeSigTrack *This = impl_from_IDirectMusicTrack(iface); FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); - FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), - wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); - return S_OK; -} - -static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); - FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), - wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); - return S_OK; -} - -static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); - FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), - wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); - return S_OK; -} - -static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); - return S_OK; -} - -static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); - return S_OK; -} - -static const IDirectMusicTrack8Vtbl DirectMusicTimeSigTrack_Track_Vtbl = { - IDirectMusicTimeSigTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicTimeSigTrack_IDirectMusicTrack_AddRef, - IDirectMusicTimeSigTrack_IDirectMusicTrack_Release, - IDirectMusicTimeSigTrack_IDirectMusicTrack_Init, - IDirectMusicTimeSigTrack_IDirectMusicTrack_InitPlay, - IDirectMusicTimeSigTrack_IDirectMusicTrack_EndPlay, - IDirectMusicTimeSigTrack_IDirectMusicTrack_Play, - IDirectMusicTimeSigTrack_IDirectMusicTrack_GetParam, - IDirectMusicTimeSigTrack_IDirectMusicTrack_SetParam, - IDirectMusicTimeSigTrack_IDirectMusicTrack_IsParamSupported, - IDirectMusicTimeSigTrack_IDirectMusicTrack_AddNotificationType, - IDirectMusicTimeSigTrack_IDirectMusicTrack_RemoveNotificationType, - IDirectMusicTimeSigTrack_IDirectMusicTrack_Clone, - IDirectMusicTimeSigTrack_IDirectMusicTrack_PlayEx, - IDirectMusicTimeSigTrack_IDirectMusicTrack_GetParamEx, - IDirectMusicTimeSigTrack_IDirectMusicTrack_SetParamEx, - IDirectMusicTimeSigTrack_IDirectMusicTrack_Compose, - IDirectMusicTimeSigTrack_IDirectMusicTrack_Join +static const IDirectMusicTrackVtbl dmtack_vtbl = { + IDirectMusicTrackImpl_QueryInterface, + IDirectMusicTrackImpl_AddRef, + IDirectMusicTrackImpl_Release, + IDirectMusicTrackImpl_Init, + IDirectMusicTrackImpl_InitPlay, + IDirectMusicTrackImpl_EndPlay, + IDirectMusicTrackImpl_Play, + IDirectMusicTrackImpl_GetParam, + IDirectMusicTrackImpl_SetParam, + IDirectMusicTrackImpl_IsParamSupported, + IDirectMusicTrackImpl_AddNotificationType, + IDirectMusicTrackImpl_RemoveNotificationType, + IDirectMusicTrackImpl_Clone }; -/* IDirectMusicTimeSigTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, PersistStreamVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} - -static ULONG WINAPI IDirectMusicTimeSigTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, PersistStreamVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} - -static ULONG WINAPI IDirectMusicTimeSigTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, PersistStreamVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); -} - -static HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *stream) +{ FIXME(": Loading not implemented yet\n"); return S_OK; } -static HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - return E_NOTIMPL; -} - -static const IPersistStreamVtbl DirectMusicTimeSigTrack_PersistStream_Vtbl = { - IDirectMusicTimeSigTrack_IPersistStream_QueryInterface, - IDirectMusicTimeSigTrack_IPersistStream_AddRef, - IDirectMusicTimeSigTrack_IPersistStream_Release, - IDirectMusicTimeSigTrack_IPersistStream_GetClassID, - IDirectMusicTimeSigTrack_IPersistStream_IsDirty, - IDirectMusicTimeSigTrack_IPersistStream_Load, - IDirectMusicTimeSigTrack_IPersistStream_Save, - IDirectMusicTimeSigTrack_IPersistStream_GetSizeMax +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + unimpl_IPersistStream_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmtimesigtrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicTimeSigTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicTimeSigTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicTimeSigTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicTimeSigTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicTimeSigTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - track->pDesc->guidClass = CLSID_DirectMusicTimeSigTrack; - track->ref = 0; /* will be inited by QueryInterface */ + IDirectMusicTimeSigTrack *track; + HRESULT hr; + + track = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack_iface.lpVtbl = &dmtack_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicTimeSigTrack, + (IUnknown *)&track->IDirectMusicTrack_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + + DMIME_LockModule(); + hr = IDirectMusicTrack_QueryInterface(&track->IDirectMusicTrack_iface, lpcGUID, ppobj); + IDirectMusicTrack_Release(&track->IDirectMusicTrack_iface); - return IDirectMusicTimeSigTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/wavetrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/wavetrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmime/wavetrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmime/wavetrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -18,6 +18,7 @@ */ #include "dmime_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmime); @@ -28,126 +29,118 @@ * IDirectMusicChordMapTrack implementation */ typedef struct IDirectMusicWaveTrack { - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; + IDirectMusicTrack8 IDirectMusicTrack8_iface; + struct dmobject dmobj; /* IPersistStream only */ LONG ref; - DMUS_OBJECTDESC *pDesc; } IDirectMusicWaveTrack; -/* IDirectMusicWaveTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicWaveTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, UnknownVtbl, iface); - TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); - - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IUnknown_AddRef (iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IUnknown_AddRef (iface); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IUnknown_AddRef (iface); - return S_OK; - } - - WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); - return E_NOINTERFACE; +/* IDirectMusicWaveTrack IDirectMusicTrack8 part: */ +static inline IDirectMusicWaveTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicWaveTrack, IDirectMusicTrack8_iface); } -static ULONG WINAPI IDirectMusicWaveTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); +static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); - TRACE("(%p) : AddRef from %d\n", This, ref - 1); + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); - DMIME_LockModule(); + *ret_iface = NULL; - return ref; + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) || + IsEqualIID(riid, &IID_IDirectMusicTrack8)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; } -static ULONG WINAPI IDirectMusicWaveTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); - TRACE("(%p) : ReleaseRef to %d\n", This, ref); - - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } +static ULONG WINAPI IDirectMusicTrack8Impl_AddRef(IDirectMusicTrack8 *iface) +{ + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedIncrement(&This->ref); - DMIME_UnlockModule(); - - return ref; + TRACE("(%p) ref=%d\n", This, ref); + + return ref; } -static const IUnknownVtbl DirectMusicWaveTrack_Unknown_Vtbl = { - IDirectMusicWaveTrack_IUnknown_QueryInterface, - IDirectMusicWaveTrack_IUnknown_AddRef, - IDirectMusicWaveTrack_IUnknown_Release -}; +static ULONG WINAPI IDirectMusicTrack8Impl_Release(IDirectMusicTrack8 *iface) +{ + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedDecrement(&This->ref); -/* IDirectMusicWaveTrack IDirectMusicTrack8 part: */ -static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} + TRACE("(%p) ref=%d\n", This, ref); -static ULONG WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMIME_UnlockModule(); + } -static ULONG WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); + return ref; } -static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) +static HRESULT WINAPI IDirectMusicTrack8Impl_Init(IDirectMusicTrack8 *iface, + IDirectMusicSegment *pSegment) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +static HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay(IDirectMusicTrack8 *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) +static HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay(IDirectMusicTrack8 *iface, void *pStateData) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pStateData); return S_OK; } -static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) +static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) +{ + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, void *pParam) +{ + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported(IDirectMusicTrack8 *iface, + REFGUID rguidType) +{ + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType)); if (IsEqualGUID (rguidType, &GUID_Disable_Auto_Download) @@ -161,144 +154,138 @@ return DMUS_E_TYPE_UNSUPPORTED; } -static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); - FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); - return S_OK; +static HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType(IDirectMusicTrack8 *iface, + REFGUID notiftype) +{ + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); - FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); - return S_OK; +static HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType(IDirectMusicTrack8 *iface, + REFGUID notiftype) +{ + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, + REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, + void *pStateData, DWORD dwFlags) +{ + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags) +{ + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); - return S_OK; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_Compose(IDirectMusicTrack8 *iface, IUnknown *context, + DWORD trackgroup, IDirectMusicTrack **track) +{ + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); - return S_OK; + TRACE("(%p, %p, %d, %p): method not implemented\n", This, context, trackgroup, track); + return E_NOTIMPL; } -static const IDirectMusicTrack8Vtbl DirectMusicWaveTrack_Track_Vtbl = { - IDirectMusicWaveTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicWaveTrack_IDirectMusicTrack_AddRef, - IDirectMusicWaveTrack_IDirectMusicTrack_Release, - IDirectMusicWaveTrack_IDirectMusicTrack_Init, - IDirectMusicWaveTrack_IDirectMusicTrack_InitPlay, - IDirectMusicWaveTrack_IDirectMusicTrack_EndPlay, - IDirectMusicWaveTrack_IDirectMusicTrack_Play, - IDirectMusicWaveTrack_IDirectMusicTrack_GetParam, - IDirectMusicWaveTrack_IDirectMusicTrack_SetParam, - IDirectMusicWaveTrack_IDirectMusicTrack_IsParamSupported, - IDirectMusicWaveTrack_IDirectMusicTrack_AddNotificationType, - IDirectMusicWaveTrack_IDirectMusicTrack_RemoveNotificationType, - IDirectMusicWaveTrack_IDirectMusicTrack_Clone, - IDirectMusicWaveTrack_IDirectMusicTrack_PlayEx, - IDirectMusicWaveTrack_IDirectMusicTrack_GetParamEx, - IDirectMusicWaveTrack_IDirectMusicTrack_SetParamEx, - IDirectMusicWaveTrack_IDirectMusicTrack_Compose, - IDirectMusicWaveTrack_IDirectMusicTrack_Join +static HRESULT WINAPI IDirectMusicTrack8Impl_Join(IDirectMusicTrack8 *iface, + IDirectMusicTrack *newtrack, MUSIC_TIME join, IUnknown *context, DWORD trackgroup, + IDirectMusicTrack **resulttrack) +{ + IDirectMusicWaveTrack *This = impl_from_IDirectMusicTrack8(iface); + TRACE("(%p, %p, %d, %p, %d, %p): method not implemented\n", This, newtrack, join, context, + trackgroup, resulttrack); + return E_NOTIMPL; +} + +static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = { + IDirectMusicTrack8Impl_QueryInterface, + IDirectMusicTrack8Impl_AddRef, + IDirectMusicTrack8Impl_Release, + IDirectMusicTrack8Impl_Init, + IDirectMusicTrack8Impl_InitPlay, + IDirectMusicTrack8Impl_EndPlay, + IDirectMusicTrack8Impl_Play, + IDirectMusicTrack8Impl_GetParam, + IDirectMusicTrack8Impl_SetParam, + IDirectMusicTrack8Impl_IsParamSupported, + IDirectMusicTrack8Impl_AddNotificationType, + IDirectMusicTrack8Impl_RemoveNotificationType, + IDirectMusicTrack8Impl_Clone, + IDirectMusicTrack8Impl_PlayEx, + IDirectMusicTrack8Impl_GetParamEx, + IDirectMusicTrack8Impl_SetParamEx, + IDirectMusicTrack8Impl_Compose, + IDirectMusicTrack8Impl_Join }; -/* IDirectMusicWaveTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, PersistStreamVtbl, iface); - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} - -static ULONG WINAPI IDirectMusicWaveTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, PersistStreamVtbl, iface); - return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} - -static ULONG WINAPI IDirectMusicWaveTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicWaveTrack, PersistStreamVtbl, iface); - return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); -} - -static HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *stream) +{ FIXME(": Loading not implemented yet\n"); return S_OK; } -static HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - return E_NOTIMPL; -} - -static const IPersistStreamVtbl DirectMusicWaveTrack_PersistStream_Vtbl = { - IDirectMusicWaveTrack_IPersistStream_QueryInterface, - IDirectMusicWaveTrack_IPersistStream_AddRef, - IDirectMusicWaveTrack_IPersistStream_Release, - IDirectMusicWaveTrack_IPersistStream_GetClassID, - IDirectMusicWaveTrack_IPersistStream_IsDirty, - IDirectMusicWaveTrack_IPersistStream_Load, - IDirectMusicWaveTrack_IPersistStream_Save, - IDirectMusicWaveTrack_IPersistStream_GetSizeMax +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + unimpl_IPersistStream_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmwavetrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicWaveTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicWaveTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicWaveTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicWaveTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicWaveTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - track->pDesc->guidClass = CLSID_DirectMusicWaveTrack; - track->ref = 0; /* will be inited by QueryInterface */ + IDirectMusicWaveTrack *track; + HRESULT hr; + + track = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack8_iface.lpVtbl = &dmtrack8_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicWaveTrack, + (IUnknown *)&track->IDirectMusicTrack8_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + + DMIME_LockModule(); + hr = IDirectMusicTrack8_QueryInterface(&track->IDirectMusicTrack8_iface, lpcGUID, ppobj); + IDirectMusicTrack8_Release(&track->IDirectMusicTrack8_iface); - return IDirectMusicWaveTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/auditiontrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/auditiontrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/auditiontrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/auditiontrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -18,130 +18,126 @@ */ #include "dmstyle_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmstyle); -static ULONG WINAPI IDirectMusicAuditionTrack_IUnknown_AddRef (LPUNKNOWN iface); -static ULONG WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface); -static ULONG WINAPI IDirectMusicAuditionTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface); - /***************************************************************************** * IDirectMusicAuditionTrack implementation */ -/* IDirectMusicAuditionTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicAuditionTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, UnknownVtbl, iface); - TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); +typedef struct IDirectMusicAuditionTrack { + IDirectMusicTrack8 IDirectMusicTrack8_iface; + struct dmobject dmobj; /* IPersistStream only */ + LONG ref; +} IDirectMusicAuditionTrack; - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IDirectMusicAuditionTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IDirectMusicAuditionTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IDirectMusicAuditionTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl); - return S_OK; - } - - WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); - return E_NOINTERFACE; +/* IDirectMusicAuditionTrack IDirectMusicTrack8 part: */ +static inline IDirectMusicAuditionTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicAuditionTrack, IDirectMusicTrack8_iface); } -static ULONG WINAPI IDirectMusicAuditionTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); - - TRACE("(%p): AddRef from %d\n", This, ref - 1); +static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); - DMSTYLE_LockModule(); + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); - return ref; -} + *ret_iface = NULL; -static ULONG WINAPI IDirectMusicAuditionTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) || + IsEqualIID(riid, &IID_IDirectMusicTrack8)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } - TRACE("(%p): ReleaseRef to %d\n", This, ref); + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; +} - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } +static ULONG WINAPI IDirectMusicTrack8Impl_AddRef(IDirectMusicTrack8 *iface) +{ + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedIncrement(&This->ref); - DMSTYLE_UnlockModule(); + TRACE("(%p) ref=%d\n", This, ref); - return ref; + return ref; } -static const IUnknownVtbl DirectMusicAuditionTrack_Unknown_Vtbl = { - IDirectMusicAuditionTrack_IUnknown_QueryInterface, - IDirectMusicAuditionTrack_IUnknown_AddRef, - IDirectMusicAuditionTrack_IUnknown_Release -}; +static ULONG WINAPI IDirectMusicTrack8Impl_Release(IDirectMusicTrack8 *iface) +{ + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedDecrement(&This->ref); -/* IDirectMusicAuditionTrack IDirectMusicTrack8 part: */ -static HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); - return IDirectMusicAuditionTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} + TRACE("(%p) ref=%d\n", This, ref); -static ULONG WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); - return IDirectMusicAuditionTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMSTYLE_UnlockModule(); + } -static ULONG WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); - return IDirectMusicAuditionTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); + return ref; } -static HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) +static HRESULT WINAPI IDirectMusicTrack8Impl_Init(IDirectMusicTrack8 *iface, + IDirectMusicSegment *pSegment) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +static HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay(IDirectMusicTrack8 *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) +static HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay(IDirectMusicTrack8 *iface, void *pStateData) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pStateData); return S_OK; } -static HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) +static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) +{ + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, void *pParam) +{ + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported(IDirectMusicTrack8 *iface, + REFGUID rguidType) +{ + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType)); @@ -153,144 +149,154 @@ return DMUS_E_TYPE_UNSUPPORTED; } -static HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType(IDirectMusicTrack8 *iface, + REFGUID rguidNotificationType) +{ + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; } -static HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType(IDirectMusicTrack8 *iface, + REFGUID rguidNotificationType) +{ + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; } -static HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, + REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, + void *pStateData, DWORD dwFlags) +{ + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags) +{ + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); - return S_OK; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_Compose(IDirectMusicTrack8 *iface, IUnknown *context, + DWORD trackgroup, IDirectMusicTrack **track) +{ + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); - return S_OK; + TRACE("(%p, %p, %d, %p): method not implemented\n", This, context, trackgroup, track); + return E_NOTIMPL; } -static const IDirectMusicTrack8Vtbl DirectMusicAuditionTrack_Track_Vtbl = { - IDirectMusicAuditionTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicAuditionTrack_IDirectMusicTrack_AddRef, - IDirectMusicAuditionTrack_IDirectMusicTrack_Release, - IDirectMusicAuditionTrack_IDirectMusicTrack_Init, - IDirectMusicAuditionTrack_IDirectMusicTrack_InitPlay, - IDirectMusicAuditionTrack_IDirectMusicTrack_EndPlay, - IDirectMusicAuditionTrack_IDirectMusicTrack_Play, - IDirectMusicAuditionTrack_IDirectMusicTrack_GetParam, - IDirectMusicAuditionTrack_IDirectMusicTrack_SetParam, - IDirectMusicAuditionTrack_IDirectMusicTrack_IsParamSupported, - IDirectMusicAuditionTrack_IDirectMusicTrack_AddNotificationType, - IDirectMusicAuditionTrack_IDirectMusicTrack_RemoveNotificationType, - IDirectMusicAuditionTrack_IDirectMusicTrack_Clone, - IDirectMusicAuditionTrack_IDirectMusicTrack_PlayEx, - IDirectMusicAuditionTrack_IDirectMusicTrack_GetParamEx, - IDirectMusicAuditionTrack_IDirectMusicTrack_SetParamEx, - IDirectMusicAuditionTrack_IDirectMusicTrack_Compose, - IDirectMusicAuditionTrack_IDirectMusicTrack_Join +static HRESULT WINAPI IDirectMusicTrack8Impl_Join(IDirectMusicTrack8 *iface, + IDirectMusicTrack *newtrack, MUSIC_TIME join, IUnknown *context, DWORD trackgroup, + IDirectMusicTrack **resulttrack) +{ + IDirectMusicAuditionTrack *This = impl_from_IDirectMusicTrack8(iface); + TRACE("(%p, %p, %d, %p, %d, %p): stub\n", This, newtrack, join, context, trackgroup, + resulttrack); + return E_NOTIMPL; +} + +static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = { + IDirectMusicTrack8Impl_QueryInterface, + IDirectMusicTrack8Impl_AddRef, + IDirectMusicTrack8Impl_Release, + IDirectMusicTrack8Impl_Init, + IDirectMusicTrack8Impl_InitPlay, + IDirectMusicTrack8Impl_EndPlay, + IDirectMusicTrack8Impl_Play, + IDirectMusicTrack8Impl_GetParam, + IDirectMusicTrack8Impl_SetParam, + IDirectMusicTrack8Impl_IsParamSupported, + IDirectMusicTrack8Impl_AddNotificationType, + IDirectMusicTrack8Impl_RemoveNotificationType, + IDirectMusicTrack8Impl_Clone, + IDirectMusicTrack8Impl_PlayEx, + IDirectMusicTrack8Impl_GetParamEx, + IDirectMusicTrack8Impl_SetParamEx, + IDirectMusicTrack8Impl_Compose, + IDirectMusicTrack8Impl_Join }; -/* IDirectMusicAuditionTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, PersistStreamVtbl, iface); - return IDirectMusicAuditionTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} - -static ULONG WINAPI IDirectMusicAuditionTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, PersistStreamVtbl, iface); - return IDirectMusicAuditionTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} - -static ULONG WINAPI IDirectMusicAuditionTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicAuditionTrack, PersistStreamVtbl, iface); - return IDirectMusicAuditionTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); -} - -static HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - return E_NOTIMPL; +static inline IDirectMusicAuditionTrack * impl_from_IPersistStream(IPersistStream *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicAuditionTrack, dmobj.IPersistStream_iface); } -static HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *stream) +{ FIXME(": Loading not implemented yet\n"); return S_OK; } -static HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - return E_NOTIMPL; -} +static HRESULT WINAPI IPersistStreamImpl_Save(IPersistStream *iface, IStream *stream, + BOOL cleardirty) +{ + IDirectMusicAuditionTrack *This = impl_from_IPersistStream(iface); + + FIXME("(%p, %p, %d): stub\n", This, stream, cleardirty); -static HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - return E_NOTIMPL; + if (!stream) + return E_POINTER; + + return E_NOTIMPL; } -static const IPersistStreamVtbl DirectMusicAuditionTrack_PersistStream_Vtbl = { - IDirectMusicAuditionTrack_IPersistStream_QueryInterface, - IDirectMusicAuditionTrack_IPersistStream_AddRef, - IDirectMusicAuditionTrack_IPersistStream_Release, - IDirectMusicAuditionTrack_IPersistStream_GetClassID, - IDirectMusicAuditionTrack_IPersistStream_IsDirty, - IDirectMusicAuditionTrack_IPersistStream_Load, - IDirectMusicAuditionTrack_IPersistStream_Save, - IDirectMusicAuditionTrack_IPersistStream_GetSizeMax +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + IPersistStreamImpl_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmauditiontrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicAuditionTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicAuditionTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicAuditionTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicAuditionTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicAuditionTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - track->pDesc->guidClass = CLSID_DirectMusicAuditionTrack; - track->ref = 0; /* will be inited by QueryInterface */ + IDirectMusicAuditionTrack *track; + HRESULT hr; + + track = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack8_iface.lpVtbl = &dmtrack8_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicAuditionTrack, + (IUnknown *)&track->IDirectMusicTrack8_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + + DMSTYLE_LockModule(); + hr = IDirectMusicTrack8_QueryInterface(&track->IDirectMusicTrack8_iface, lpcGUID, ppobj); + IDirectMusicTrack8_Release(&track->IDirectMusicTrack8_iface); - return IDirectMusicAuditionTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/chordtrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/chordtrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/chordtrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/chordtrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -19,130 +19,128 @@ */ #include "dmstyle_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmstyle); WINE_DECLARE_DEBUG_CHANNEL(dmfile); -static ULONG WINAPI IDirectMusicChordTrack_IUnknown_AddRef (LPUNKNOWN iface); -static ULONG WINAPI IDirectMusicChordTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface); -static ULONG WINAPI IDirectMusicChordTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface); - /***************************************************************************** * IDirectMusicChordTrack implementation */ -/* IDirectMusicChordTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicChordTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, UnknownVtbl, iface); - TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); +typedef struct IDirectMusicChordTrack { + IDirectMusicTrack8 IDirectMusicTrack8_iface; + struct dmobject dmobj; /* IPersistStream only */ + LONG ref; + DWORD dwScale; +} IDirectMusicChordTrack; - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IDirectMusicChordTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IDirectMusicChordTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IDirectMusicChordTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl); - return S_OK; - } - - WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); - return E_NOINTERFACE; +/* IDirectMusicChordTrack IDirectMusicTrack8 part: */ +static inline IDirectMusicChordTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicChordTrack, IDirectMusicTrack8_iface); } -static ULONG WINAPI IDirectMusicChordTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); - - TRACE("(%p): AddRef from %d\n", This, ref - 1); +static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); - DMSTYLE_LockModule(); + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); - return ref; -} + *ret_iface = NULL; -static ULONG WINAPI IDirectMusicChordTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) || + IsEqualIID(riid, &IID_IDirectMusicTrack8)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } - TRACE("(%p): ReleaseRef to %d\n", This, ref); + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; +} - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } +static ULONG WINAPI IDirectMusicTrack8Impl_AddRef(IDirectMusicTrack8 *iface) +{ + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedIncrement(&This->ref); - DMSTYLE_UnlockModule(); + TRACE("(%p) ref=%d\n", This, ref); - return ref; + return ref; } -static const IUnknownVtbl DirectMusicChordTrack_Unknown_Vtbl = { - IDirectMusicChordTrack_IUnknown_QueryInterface, - IDirectMusicChordTrack_IUnknown_AddRef, - IDirectMusicChordTrack_IUnknown_Release -}; +static ULONG WINAPI IDirectMusicTrack8Impl_Release(IDirectMusicTrack8 *iface) +{ + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedDecrement(&This->ref); -/* IDirectMusicChordTrack IDirectMusicTrack8 part: */ -static HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); - return IDirectMusicChordTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} + TRACE("(%p) ref=%d\n", This, ref); -static ULONG WINAPI IDirectMusicChordTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); - return IDirectMusicChordTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMSTYLE_UnlockModule(); + } -static ULONG WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); - return IDirectMusicChordTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); + return ref; } -static HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Init(IDirectMusicTrack8 *iface, + IDirectMusicSegment *pSegment) +{ + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +static HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay(IDirectMusicTrack8 *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) +static HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay(IDirectMusicTrack8 *iface, void *pStateData) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pStateData); return S_OK; } -static HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) +static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) +{ + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, void *pParam) +{ + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported(IDirectMusicTrack8 *iface, + REFGUID rguidType) +{ + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType)); @@ -159,110 +157,101 @@ return DMUS_E_TYPE_UNSUPPORTED; } -static HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType(IDirectMusicTrack8 *iface, + REFGUID rguidNotificationType) +{ + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; } -static HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType(IDirectMusicTrack8 *iface, + REFGUID rguidNotificationType) +{ + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; } -static HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, + REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, + void *pStateData, DWORD dwFlags) +{ + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags) +{ + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); - return S_OK; +static HRESULT WINAPI IDirectMusicTrack8Impl_Compose(IDirectMusicTrack8 *iface, IUnknown *context, + DWORD trackgroup, IDirectMusicTrack **track) +{ + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %p, %d, %p): method not implemented\n", This, context, trackgroup, track); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Join(IDirectMusicTrack8 *iface, + IDirectMusicTrack *pNewTrack, MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup, + IDirectMusicTrack **ppResultTrack) +{ + IDirectMusicChordTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); return S_OK; } -static const IDirectMusicTrack8Vtbl DirectMusicChordTrack_Track_Vtbl = { - IDirectMusicChordTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicChordTrack_IDirectMusicTrack_AddRef, - IDirectMusicChordTrack_IDirectMusicTrack_Release, - IDirectMusicChordTrack_IDirectMusicTrack_Init, - IDirectMusicChordTrack_IDirectMusicTrack_InitPlay, - IDirectMusicChordTrack_IDirectMusicTrack_EndPlay, - IDirectMusicChordTrack_IDirectMusicTrack_Play, - IDirectMusicChordTrack_IDirectMusicTrack_GetParam, - IDirectMusicChordTrack_IDirectMusicTrack_SetParam, - IDirectMusicChordTrack_IDirectMusicTrack_IsParamSupported, - IDirectMusicChordTrack_IDirectMusicTrack_AddNotificationType, - IDirectMusicChordTrack_IDirectMusicTrack_RemoveNotificationType, - IDirectMusicChordTrack_IDirectMusicTrack_Clone, - IDirectMusicChordTrack_IDirectMusicTrack_PlayEx, - IDirectMusicChordTrack_IDirectMusicTrack_GetParamEx, - IDirectMusicChordTrack_IDirectMusicTrack_SetParamEx, - IDirectMusicChordTrack_IDirectMusicTrack_Compose, - IDirectMusicChordTrack_IDirectMusicTrack_Join +static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = { + IDirectMusicTrack8Impl_QueryInterface, + IDirectMusicTrack8Impl_AddRef, + IDirectMusicTrack8Impl_Release, + IDirectMusicTrack8Impl_Init, + IDirectMusicTrack8Impl_InitPlay, + IDirectMusicTrack8Impl_EndPlay, + IDirectMusicTrack8Impl_Play, + IDirectMusicTrack8Impl_GetParam, + IDirectMusicTrack8Impl_SetParam, + IDirectMusicTrack8Impl_IsParamSupported, + IDirectMusicTrack8Impl_AddNotificationType, + IDirectMusicTrack8Impl_RemoveNotificationType, + IDirectMusicTrack8Impl_Clone, + IDirectMusicTrack8Impl_PlayEx, + IDirectMusicTrack8Impl_GetParamEx, + IDirectMusicTrack8Impl_SetParamEx, + IDirectMusicTrack8Impl_Compose, + IDirectMusicTrack8Impl_Join }; -/* IDirectMusicChordTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface); - return IDirectMusicChordTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} - -static ULONG WINAPI IDirectMusicChordTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface); - return IDirectMusicChordTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} - -static ULONG WINAPI IDirectMusicChordTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface); - return IDirectMusicChordTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); -} - -static HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface); - TRACE("(%p, %p)\n", This, pClassID); - *pClassID = CLSID_DirectMusicChordTrack; - return S_OK; -} - -static HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface); - FIXME("(%p): stub, always S_FALSE\n", This); - return S_FALSE; -} - -static HRESULT IDirectMusicChordTrack_IPersistStream_ParseChordTrackList (LPPERSISTSTREAM iface, DMUS_PRIVATE_CHUNK* pChunk, IStream* pStm) { - - ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface); +static HRESULT parse_chordtrack_list(IDirectMusicChordTrack *This, DMUS_PRIVATE_CHUNK *pChunk, + IStream *pStm) +{ DMUS_PRIVATE_CHUNK Chunk; DWORD ListSize[3], ListCount[3]; LARGE_INTEGER liMove; /* used when skipping chunks */ @@ -336,9 +325,14 @@ return S_OK; } -static HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface); - +static inline IDirectMusicChordTrack *impl_from_IPersistStream(IPersistStream *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicChordTrack, dmobj.IPersistStream_iface); +} + +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *pStm) +{ + IDirectMusicChordTrack *This = impl_from_IPersistStream(iface); DMUS_PRIVATE_CHUNK Chunk; LARGE_INTEGER liMove; HRESULT hr; @@ -354,7 +348,7 @@ switch (Chunk.fccID) { case DMUS_FOURCC_CHORDTRACK_LIST: { TRACE_(dmfile)(": Chord track list\n"); - hr = IDirectMusicChordTrack_IPersistStream_ParseChordTrackList (iface, &Chunk, pStm); + hr = parse_chordtrack_list(This, &Chunk, pStm); if (FAILED(hr)) return hr; break; } @@ -379,47 +373,50 @@ return S_OK; } -static HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface); - FIXME("(%p): Saving not implemented yet\n", This); - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface); - FIXME("(%p, %p): stub\n", This, pcbSize); - return E_NOTIMPL; -} - -static const IPersistStreamVtbl DirectMusicChordTrack_PersistStream_Vtbl = { - IDirectMusicChordTrack_IPersistStream_QueryInterface, - IDirectMusicChordTrack_IPersistStream_AddRef, - IDirectMusicChordTrack_IPersistStream_Release, - IDirectMusicChordTrack_IPersistStream_GetClassID, - IDirectMusicChordTrack_IPersistStream_IsDirty, - IDirectMusicChordTrack_IPersistStream_Load, - IDirectMusicChordTrack_IPersistStream_Save, - IDirectMusicChordTrack_IPersistStream_GetSizeMax +static HRESULT WINAPI IPersistStreamImpl_Save(IPersistStream *iface, IStream *stream, + BOOL cleardirty) +{ + IDirectMusicChordTrack *This = impl_from_IPersistStream(iface); + + FIXME("(%p, %p, %d): stub\n", This, stream, cleardirty); + + if (!stream) + return E_POINTER; + + return E_NOTIMPL; +} + +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + IPersistStreamImpl_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmchordtrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicChordTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicChordTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicChordTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicChordTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicChordTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - track->pDesc->guidClass = CLSID_DirectMusicChordTrack; - track->ref = 0; /* will be inited by QueryInterface */ + IDirectMusicChordTrack *track; + HRESULT hr; + + track = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack8_iface.lpVtbl = &dmtrack8_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicChordTrack, + (IUnknown *)&track->IDirectMusicTrack8_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + + DMSTYLE_LockModule(); + hr = IDirectMusicTrack8_QueryInterface(&track->IDirectMusicTrack8_iface, lpcGUID, ppobj); + IDirectMusicTrack8_Release(&track->IDirectMusicTrack8_iface); - return IDirectMusicChordTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/commandtrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/commandtrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/commandtrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/commandtrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -18,131 +18,128 @@ */ #include "dmstyle_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmstyle); WINE_DECLARE_DEBUG_CHANNEL(dmfile); -static ULONG WINAPI IDirectMusicCommandTrack_IUnknown_AddRef (LPUNKNOWN iface); -static ULONG WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface); -static ULONG WINAPI IDirectMusicCommandTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface); - /***************************************************************************** * IDirectMusicCommandTrack implementation */ -/* IDirectMusicCommandTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicCommandTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, UnknownVtbl, iface); - TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); - - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IDirectMusicCommandTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IDirectMusicCommandTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IDirectMusicCommandTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl); - return S_OK; - } - - WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); - return E_NOINTERFACE; +typedef struct IDirectMusicCommandTrack { + IDirectMusicTrack8 IDirectMusicTrack8_iface; + struct dmobject dmobj; /* IPersistStream only */ + LONG ref; + struct list Commands; +} IDirectMusicCommandTrack; + +/* IDirectMusicCommandTrack IDirectMusicTrack8 part: */ +static inline IDirectMusicCommandTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicCommandTrack, IDirectMusicTrack8_iface); } -static ULONG WINAPI IDirectMusicCommandTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); +static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); - TRACE("(%p): AddRef from %d\n", This, ref - 1); + *ret_iface = NULL; - DMSTYLE_LockModule(); + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) || + IsEqualIID(riid, &IID_IDirectMusicTrack8)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } - return ref; + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; } -static ULONG WINAPI IDirectMusicCommandTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); +static ULONG WINAPI IDirectMusicTrack8Impl_AddRef(IDirectMusicTrack8 *iface) +{ + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedIncrement(&This->ref); - TRACE("(%p): ReleaseRef to %d\n", This, ref); + TRACE("(%p) ref=%d\n", This, ref); - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } - - DMSTYLE_UnlockModule(); - - return ref; + return ref; } -static const IUnknownVtbl DirectMusicCommandTrack_Unknown_Vtbl = { - IDirectMusicCommandTrack_IUnknown_QueryInterface, - IDirectMusicCommandTrack_IUnknown_AddRef, - IDirectMusicCommandTrack_IUnknown_Release -}; +static ULONG WINAPI IDirectMusicTrack8Impl_Release(IDirectMusicTrack8 *iface) +{ + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedDecrement(&This->ref); -/* IDirectMusicCommandTrack IDirectMusicTrack8 part: */ -static HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); - return IDirectMusicCommandTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} + TRACE("(%p) ref=%d\n", This, ref); -static ULONG WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); - return IDirectMusicCommandTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMSTYLE_UnlockModule(); + } -static ULONG WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); - return IDirectMusicCommandTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); + return ref; } -static HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) +static HRESULT WINAPI IDirectMusicTrack8Impl_Init(IDirectMusicTrack8 *iface, + IDirectMusicSegment *pSegment) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +static HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay(IDirectMusicTrack8 *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) +static HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay(IDirectMusicTrack8 *iface, void *pStateData) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pStateData); return S_OK; } -static HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) +static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) +{ + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, void *pParam) +{ + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported(IDirectMusicTrack8 *iface, + REFGUID rguidType) +{ + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType)); @@ -160,104 +157,106 @@ return DMUS_E_TYPE_UNSUPPORTED; } -static HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType(IDirectMusicTrack8 *iface, + REFGUID rguidNotificationType) +{ + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; } -static HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType(IDirectMusicTrack8 *iface, + REFGUID rguidNotificationType) +{ + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; } -static HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, + REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, + void *pStateData, DWORD dwFlags) +{ + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags) +{ + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); - return S_OK; +static HRESULT WINAPI IDirectMusicTrack8Impl_Compose(IDirectMusicTrack8 *iface, IUnknown *context, + DWORD trackgroup, IDirectMusicTrack **track) +{ + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %p, %d, %p): method not implemented\n", This, context, trackgroup, track); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Join(IDirectMusicTrack8 *iface, + IDirectMusicTrack *pNewTrack, MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup, + IDirectMusicTrack **ppResultTrack) +{ + IDirectMusicCommandTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); return S_OK; } -static const IDirectMusicTrack8Vtbl DirectMusicCommandTrack_Track_Vtbl = { - IDirectMusicCommandTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicCommandTrack_IDirectMusicTrack_AddRef, - IDirectMusicCommandTrack_IDirectMusicTrack_Release, - IDirectMusicCommandTrack_IDirectMusicTrack_Init, - IDirectMusicCommandTrack_IDirectMusicTrack_InitPlay, - IDirectMusicCommandTrack_IDirectMusicTrack_EndPlay, - IDirectMusicCommandTrack_IDirectMusicTrack_Play, - IDirectMusicCommandTrack_IDirectMusicTrack_GetParam, - IDirectMusicCommandTrack_IDirectMusicTrack_SetParam, - IDirectMusicCommandTrack_IDirectMusicTrack_IsParamSupported, - IDirectMusicCommandTrack_IDirectMusicTrack_AddNotificationType, - IDirectMusicCommandTrack_IDirectMusicTrack_RemoveNotificationType, - IDirectMusicCommandTrack_IDirectMusicTrack_Clone, - IDirectMusicCommandTrack_IDirectMusicTrack_PlayEx, - IDirectMusicCommandTrack_IDirectMusicTrack_GetParamEx, - IDirectMusicCommandTrack_IDirectMusicTrack_SetParamEx, - IDirectMusicCommandTrack_IDirectMusicTrack_Compose, - IDirectMusicCommandTrack_IDirectMusicTrack_Join +static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = { + IDirectMusicTrack8Impl_QueryInterface, + IDirectMusicTrack8Impl_AddRef, + IDirectMusicTrack8Impl_Release, + IDirectMusicTrack8Impl_Init, + IDirectMusicTrack8Impl_InitPlay, + IDirectMusicTrack8Impl_EndPlay, + IDirectMusicTrack8Impl_Play, + IDirectMusicTrack8Impl_GetParam, + IDirectMusicTrack8Impl_SetParam, + IDirectMusicTrack8Impl_IsParamSupported, + IDirectMusicTrack8Impl_AddNotificationType, + IDirectMusicTrack8Impl_RemoveNotificationType, + IDirectMusicTrack8Impl_Clone, + IDirectMusicTrack8Impl_PlayEx, + IDirectMusicTrack8Impl_GetParamEx, + IDirectMusicTrack8Impl_SetParamEx, + IDirectMusicTrack8Impl_Compose, + IDirectMusicTrack8Impl_Join }; -/* IDirectMusicCommandTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, PersistStreamVtbl, iface); - return IDirectMusicCommandTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} - -static ULONG WINAPI IDirectMusicCommandTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, PersistStreamVtbl, iface); - return IDirectMusicCommandTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} - -static ULONG WINAPI IDirectMusicCommandTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, PersistStreamVtbl, iface); - return IDirectMusicCommandTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); -} - -static HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - return E_NOTIMPL; +static inline IDirectMusicCommandTrack *impl_from_IPersistStream(IPersistStream *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicCommandTrack, dmobj.IPersistStream_iface); } -static HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { - ICOM_THIS_MULTI(IDirectMusicCommandTrack, PersistStreamVtbl, iface); +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *pStm) +{ + IDirectMusicCommandTrack *This = impl_from_IPersistStream(iface); FOURCC chunkID; DWORD chunkSize, dwSizeOfStruct, nrCommands; LARGE_INTEGER liMove; /* used when skipping chunks */ @@ -282,7 +281,7 @@ list_add_tail (&This->Commands, &pNewCommand->entry); } TRACE_(dmfile)(": reading finished\n"); - This->pDesc->dwValidData |= DMUS_OBJ_LOADED; + This->dmobj.desc.dwValidData |= DMUS_OBJ_LOADED; break; } default: { @@ -298,7 +297,7 @@ int r = 0; DMUS_PRIVATE_COMMAND *tmpEntry; struct list *listEntry; - TRACE("*** IDirectMusicCommandTrack (%p) ***\n", This->TrackVtbl); + TRACE("*** IDirectMusicCommandTrack (%p) ***\n", This); TRACE(" - Commands:\n"); LIST_FOR_EACH (listEntry, &This->Commands) { tmpEntry = LIST_ENTRY (listEntry, DMUS_PRIVATE_COMMAND, entry); @@ -317,44 +316,52 @@ return S_OK; } -static HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - return E_NOTIMPL; -} +static HRESULT WINAPI IPersistStreamImpl_Save(IPersistStream *iface, IStream *stream, + BOOL cleardirty) +{ + IDirectMusicCommandTrack *This = impl_from_IPersistStream(iface); + + FIXME("(%p, %p, %d): stub\n", This, stream, cleardirty); + + if (!stream) + return E_POINTER; -static HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - return E_NOTIMPL; + return E_NOTIMPL; } -static const IPersistStreamVtbl DirectMusicCommandTrack_PersistStream_Vtbl = { - IDirectMusicCommandTrack_IPersistStream_QueryInterface, - IDirectMusicCommandTrack_IPersistStream_AddRef, - IDirectMusicCommandTrack_IPersistStream_Release, - IDirectMusicCommandTrack_IPersistStream_GetClassID, - IDirectMusicCommandTrack_IPersistStream_IsDirty, - IDirectMusicCommandTrack_IPersistStream_Load, - IDirectMusicCommandTrack_IPersistStream_Save, - IDirectMusicCommandTrack_IPersistStream_GetSizeMax +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + IPersistStreamImpl_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmcommandtrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicCommandTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicCommandTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicCommandTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicCommandTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicCommandTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - track->pDesc->guidClass = CLSID_DirectMusicCommandTrack; - track->ref = 0; /* will be inited by QueryInterface */ - list_init (&track->Commands); + IDirectMusicCommandTrack *track; + HRESULT hr; + + track = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack8_iface.lpVtbl = &dmtrack8_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicCommandTrack, + (IUnknown *)&track->IDirectMusicTrack8_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + list_init (&track->Commands); + + DMSTYLE_LockModule(); + hr = IDirectMusicTrack8_QueryInterface(&track->IDirectMusicTrack8_iface, + lpcGUID, ppobj); + IDirectMusicTrack8_Release(&track->IDirectMusicTrack8_iface); - return IDirectMusicCommandTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/dmstyle_private.h wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/dmstyle_private.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/dmstyle_private.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/dmstyle_private.h 2015-07-12 05:36:18.000000000 +0000 @@ -43,17 +43,6 @@ #include "dmusics.h" /***************************************************************************** - * Interfaces - */ -typedef struct IDirectMusicAuditionTrack IDirectMusicAuditionTrack; -typedef struct IDirectMusicChordTrack IDirectMusicChordTrack; -typedef struct IDirectMusicCommandTrack IDirectMusicCommandTrack; -typedef struct IDirectMusicMelodyFormulationTrack IDirectMusicMelodyFormulationTrack; -typedef struct IDirectMusicMotifTrack IDirectMusicMotifTrack; -typedef struct IDirectMusicMuteTrack IDirectMusicMuteTrack; -typedef struct IDirectMusicStyleTrack IDirectMusicStyleTrack; - -/***************************************************************************** * ClassFactory */ extern HRESULT WINAPI create_dmstyle(REFIID lpcGUID, LPVOID* ppobj) DECLSPEC_HIDDEN; @@ -97,123 +86,12 @@ } DMUS_PRIVATE_STYLE_ITEM, *LPDMUS_PRIVATE_STYLE_ITEM; -/***************************************************************************** - * IDirectMusicAuditionTrack implementation structure - */ -struct IDirectMusicAuditionTrack { - /* IUnknown fields */ - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; - LONG ref; - - /* IDirectMusicAuditionTrack fields */ - LPDMUS_OBJECTDESC pDesc; -}; - -/***************************************************************************** - * IDirectMusicChordTrack implementation structure - */ -struct IDirectMusicChordTrack { - /* IUnknown fields */ - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; - LONG ref; - - /* IDirectMusicChordTrack fields */ - LPDMUS_OBJECTDESC pDesc; - DWORD dwScale; -}; - typedef struct _DMUS_PRIVATE_COMMAND { struct list entry; /* for listing elements */ DMUS_IO_COMMAND pCommand; IDirectMusicCollection* ppReferenceCollection; } DMUS_PRIVATE_COMMAND, *LPDMUS_PRIVATE_COMMAND; -/***************************************************************************** - * IDirectMusicCommandTrack implementation structure - */ -struct IDirectMusicCommandTrack { - /* IUnknown fields */ - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; - LONG ref; - - /* IDirectMusicCommandTrack fields */ - LPDMUS_OBJECTDESC pDesc; - /* track data */ - struct list Commands; -}; - -/***************************************************************************** - * IDirectMusicMelodyFormulationTrack implementation structure - */ -struct IDirectMusicMelodyFormulationTrack { - /* IUnknown fields */ - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; - LONG ref; - - /* IDirectMusicMelodyFormulationTrack fields */ - LPDMUS_OBJECTDESC pDesc; -}; - -/* IUnknown: */ -extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) DECLSPEC_HIDDEN; -extern ULONG WINAPI IDirectMusicMelodyFormulationTrack_IUnknown_AddRef (LPUNKNOWN iface) DECLSPEC_HIDDEN; -/* IDirectMusicTrack(8): */ -extern ULONG WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) DECLSPEC_HIDDEN; -/* IPersistStream: */ -extern ULONG WINAPI IDirectMusicMelodyFormulationTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) DECLSPEC_HIDDEN; - -/***************************************************************************** - * IDirectMusicMotifTrack implementation structure - */ -struct IDirectMusicMotifTrack { - /* IUnknown fields */ - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; - LONG ref; - - /* IDirectMusicMotifTrack fields */ - LPDMUS_OBJECTDESC pDesc; -}; - -/***************************************************************************** - * IDirectMusicMuteTrack implementation structure - */ -struct IDirectMusicMuteTrack { - /* IUnknown fields */ - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; - LONG ref; - - /* IDirectMusicMuteTrack fields */ - LPDMUS_OBJECTDESC pDesc; -}; - -/***************************************************************************** - * IDirectMusicStyleTrack implementation structure - */ -struct IDirectMusicStyleTrack { - /* IUnknown fields */ - const IUnknownVtbl *UnknownVtbl; - const IDirectMusicTrack8Vtbl *TrackVtbl; - const IPersistStreamVtbl *PersistStreamVtbl; - LONG ref; - - /* IDirectMusicStyleTrack fields */ - LPDMUS_OBJECTDESC pDesc; - - struct list Items; -}; - /********************************************************************** * Dll lifetime tracking declaration for dmstyle.dll */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/dmutils.h wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/dmutils.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/dmutils.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/dmutils.h 2015-07-12 05:36:18.000000000 +0000 @@ -27,8 +27,6 @@ DWORD dwSize; /* size of the chunk */ } DMUS_PRIVATE_CHUNK, *LPDMUS_PRIVATE_CHUNK; -#define ICOM_THIS_MULTI(impl,field,iface) impl* const This=(impl*)((char*)(iface) - offsetof(impl,field)) - /** * Parsing utilities */ @@ -51,12 +49,6 @@ } guid_info; /* used for initialising structs */ -#define DM_STRUCT_INIT(x) \ - do { \ - memset((x), 0, sizeof(*(x))); \ - (x)->dwSize = sizeof(*x); \ - } while (0) - #define FE(x) { x, #x } #define GE(x) { &x, #x } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/motiftrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/motiftrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/motiftrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/motiftrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -18,130 +18,126 @@ */ #include "dmstyle_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmstyle); -static ULONG WINAPI IDirectMusicMotifTrack_IUnknown_AddRef (LPUNKNOWN iface); -static ULONG WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface); -static ULONG WINAPI IDirectMusicMotifTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface); - /***************************************************************************** * IDirectMusicMotifTrack implementation */ -/* IDirectMusicMotifTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicMotifTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, UnknownVtbl, iface); - TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); - - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IDirectMusicMotifTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IDirectMusicMotifTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IDirectMusicMotifTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl); - return S_OK; - } - - WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); - return E_NOINTERFACE; +typedef struct IDirectMusicMotifTrack { + IDirectMusicTrack8 IDirectMusicTrack8_iface; + struct dmobject dmobj; /* IPersistStream only */ + LONG ref; +} IDirectMusicMotifTrack; + +/* IDirectMusicMotifTrack IDirectMusicTrack8 part: */ +static inline IDirectMusicMotifTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicMotifTrack, IDirectMusicTrack8_iface); } -static ULONG WINAPI IDirectMusicMotifTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); +static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); - TRACE("(%p): AddRef from %d\n", This, ref - 1); + *ret_iface = NULL; - DMSTYLE_LockModule(); + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) || + IsEqualIID(riid, &IID_IDirectMusicTrack8)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } - return ref; + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; } -static ULONG WINAPI IDirectMusicMotifTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); +static ULONG WINAPI IDirectMusicTrack8Impl_AddRef(IDirectMusicTrack8 *iface) +{ + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedIncrement(&This->ref); - TRACE("(%p): ReleaseRef to %d\n", This, ref); + TRACE("(%p) ref=%d\n", This, ref); - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } - - DMSTYLE_UnlockModule(); - - return ref; + return ref; } -static const IUnknownVtbl DirectMusicMotifTrack_Unknown_Vtbl = { - IDirectMusicMotifTrack_IUnknown_QueryInterface, - IDirectMusicMotifTrack_IUnknown_AddRef, - IDirectMusicMotifTrack_IUnknown_Release -}; +static ULONG WINAPI IDirectMusicTrack8Impl_Release(IDirectMusicTrack8 *iface) +{ + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedDecrement(&This->ref); -/* IDirectMusicMotifTrack IDirectMusicTrack8 part: */ -static HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); - return IDirectMusicMotifTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} + TRACE("(%p) ref=%d\n", This, ref); -static ULONG WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); - return IDirectMusicMotifTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMSTYLE_UnlockModule(); + } -static ULONG WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); - return IDirectMusicMotifTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); + return ref; } -static HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) +static HRESULT WINAPI IDirectMusicTrack8Impl_Init(IDirectMusicTrack8 *iface, + IDirectMusicSegment *pSegment) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +static HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay(IDirectMusicTrack8 *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) +static HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay(IDirectMusicTrack8 *iface, void *pStateData) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pStateData); return S_OK; } -static HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) +static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) +{ + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, void *pParam) +{ + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported(IDirectMusicTrack8 *iface, + REFGUID rguidType) +{ + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType)); @@ -159,144 +155,136 @@ return DMUS_E_TYPE_UNSUPPORTED; } -static HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType(IDirectMusicTrack8 *iface, + REFGUID rguidNotificationType) +{ + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; } -static HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType(IDirectMusicTrack8 *iface, + REFGUID rguidNotificationType) +{ + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; } -static HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, + REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, + void *pStateData, DWORD dwFlags) +{ + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags) +{ + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); - return S_OK; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_Compose(IDirectMusicTrack8 *iface, IUnknown *context, + DWORD trackgroup, IDirectMusicTrack **track) +{ + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); - return S_OK; + TRACE("(%p, %p, %d, %p): method not implemented\n", This, context, trackgroup, track); + return E_NOTIMPL; } -static const IDirectMusicTrack8Vtbl DirectMusicMotifTrack_Track_Vtbl = { - IDirectMusicMotifTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicMotifTrack_IDirectMusicTrack_AddRef, - IDirectMusicMotifTrack_IDirectMusicTrack_Release, - IDirectMusicMotifTrack_IDirectMusicTrack_Init, - IDirectMusicMotifTrack_IDirectMusicTrack_InitPlay, - IDirectMusicMotifTrack_IDirectMusicTrack_EndPlay, - IDirectMusicMotifTrack_IDirectMusicTrack_Play, - IDirectMusicMotifTrack_IDirectMusicTrack_GetParam, - IDirectMusicMotifTrack_IDirectMusicTrack_SetParam, - IDirectMusicMotifTrack_IDirectMusicTrack_IsParamSupported, - IDirectMusicMotifTrack_IDirectMusicTrack_AddNotificationType, - IDirectMusicMotifTrack_IDirectMusicTrack_RemoveNotificationType, - IDirectMusicMotifTrack_IDirectMusicTrack_Clone, - IDirectMusicMotifTrack_IDirectMusicTrack_PlayEx, - IDirectMusicMotifTrack_IDirectMusicTrack_GetParamEx, - IDirectMusicMotifTrack_IDirectMusicTrack_SetParamEx, - IDirectMusicMotifTrack_IDirectMusicTrack_Compose, - IDirectMusicMotifTrack_IDirectMusicTrack_Join +static HRESULT WINAPI IDirectMusicTrack8Impl_Join(IDirectMusicTrack8 *iface, + IDirectMusicTrack *newtrack, MUSIC_TIME join, IUnknown *context, DWORD trackgroup, + IDirectMusicTrack **resulttrack) +{ + IDirectMusicMotifTrack *This = impl_from_IDirectMusicTrack8(iface); + TRACE("(%p, %p, %d, %p, %d, %p): stub\n", This, newtrack, join, context, trackgroup, + resulttrack); + return E_NOTIMPL; +} + +static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = { + IDirectMusicTrack8Impl_QueryInterface, + IDirectMusicTrack8Impl_AddRef, + IDirectMusicTrack8Impl_Release, + IDirectMusicTrack8Impl_Init, + IDirectMusicTrack8Impl_InitPlay, + IDirectMusicTrack8Impl_EndPlay, + IDirectMusicTrack8Impl_Play, + IDirectMusicTrack8Impl_GetParam, + IDirectMusicTrack8Impl_SetParam, + IDirectMusicTrack8Impl_IsParamSupported, + IDirectMusicTrack8Impl_AddNotificationType, + IDirectMusicTrack8Impl_RemoveNotificationType, + IDirectMusicTrack8Impl_Clone, + IDirectMusicTrack8Impl_PlayEx, + IDirectMusicTrack8Impl_GetParamEx, + IDirectMusicTrack8Impl_SetParamEx, + IDirectMusicTrack8Impl_Compose, + IDirectMusicTrack8Impl_Join }; -/* IDirectMusicMotifTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, PersistStreamVtbl, iface); - return IDirectMusicMotifTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} - -static ULONG WINAPI IDirectMusicMotifTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, PersistStreamVtbl, iface); - return IDirectMusicMotifTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} - -static ULONG WINAPI IDirectMusicMotifTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicMotifTrack, PersistStreamVtbl, iface); - return IDirectMusicMotifTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); -} - -static HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *stream) +{ FIXME(": Loading not implemented yet\n"); return S_OK; } -static HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - return E_NOTIMPL; -} - -static const IPersistStreamVtbl DirectMusicMotifTrack_PersistStream_Vtbl = { - IDirectMusicMotifTrack_IPersistStream_QueryInterface, - IDirectMusicMotifTrack_IPersistStream_AddRef, - IDirectMusicMotifTrack_IPersistStream_Release, - IDirectMusicMotifTrack_IPersistStream_GetClassID, - IDirectMusicMotifTrack_IPersistStream_IsDirty, - IDirectMusicMotifTrack_IPersistStream_Load, - IDirectMusicMotifTrack_IPersistStream_Save, - IDirectMusicMotifTrack_IPersistStream_GetSizeMax +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + unimpl_IPersistStream_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmmotiftrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicMotifTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicMotifTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicMotifTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicMotifTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicMotifTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - track->pDesc->guidClass = CLSID_DirectMusicMotifTrack; - track->ref = 0; /* will be inited by QueryInterface */ + IDirectMusicMotifTrack *track; + HRESULT hr; + + track = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack8_iface.lpVtbl = &dmtrack8_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicMotifTrack, + (IUnknown *)&track->IDirectMusicTrack8_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + + DMSTYLE_LockModule(); + hr = IDirectMusicTrack8_QueryInterface(&track->IDirectMusicTrack8_iface, lpcGUID, ppobj); + IDirectMusicTrack8_Release(&track->IDirectMusicTrack8_iface); - return IDirectMusicMotifTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/mutetrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/mutetrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/mutetrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/mutetrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -18,130 +18,126 @@ */ #include "dmstyle_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmstyle); -static ULONG WINAPI IDirectMusicMuteTrack_IUnknown_AddRef (LPUNKNOWN iface); -static ULONG WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface); -static ULONG WINAPI IDirectMusicMuteTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface); - /***************************************************************************** * IDirectMusicMuteTrack implementation */ -/* IDirectMusicMuteTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicMuteTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, UnknownVtbl, iface); - TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); - - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IDirectMusicMuteTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IDirectMusicMuteTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IDirectMusicMuteTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl); - return S_OK; - } - - WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); - return E_NOINTERFACE; +typedef struct IDirectMusicMuteTrack { + IDirectMusicTrack8 IDirectMusicTrack8_iface; + struct dmobject dmobj; /* IPersistStream only */ + LONG ref; +} IDirectMusicMuteTrack; + +/* IDirectMusicMuteTrack IDirectMusicTrack8 part: */ +static inline IDirectMusicMuteTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicMuteTrack, IDirectMusicTrack8_iface); } -static ULONG WINAPI IDirectMusicMuteTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); +static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); - TRACE("(%p): AddRef from %d\n", This, ref - 1); + *ret_iface = NULL; - DMSTYLE_LockModule(); + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) || + IsEqualIID(riid, &IID_IDirectMusicTrack8)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } - return ref; + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; } -static ULONG WINAPI IDirectMusicMuteTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); +static ULONG WINAPI IDirectMusicTrack8Impl_AddRef(IDirectMusicTrack8 *iface) +{ + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedIncrement(&This->ref); - TRACE("(%p): ReleaseRef to %d\n", This, ref); + TRACE("(%p) ref=%d\n", This, ref); - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } - - DMSTYLE_UnlockModule(); - - return ref; + return ref; } -static const IUnknownVtbl DirectMusicMuteTrack_Unknown_Vtbl = { - IDirectMusicMuteTrack_IUnknown_QueryInterface, - IDirectMusicMuteTrack_IUnknown_AddRef, - IDirectMusicMuteTrack_IUnknown_Release -}; +static ULONG WINAPI IDirectMusicTrack8Impl_Release(IDirectMusicTrack8 *iface) +{ + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedDecrement(&This->ref); -/* IDirectMusicMuteTrack IDirectMusicTrack8 part: */ -static HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); - return IDirectMusicMuteTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} + TRACE("(%p) ref=%d\n", This, ref); -static ULONG WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); - return IDirectMusicMuteTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMSTYLE_UnlockModule(); + } -static ULONG WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); - return IDirectMusicMuteTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); + return ref; } -static HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) +static HRESULT WINAPI IDirectMusicTrack8Impl_Init(IDirectMusicTrack8 *iface, + IDirectMusicSegment *pSegment) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +static HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay(IDirectMusicTrack8 *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) +static HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay(IDirectMusicTrack8 *iface, void *pStateData) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pStateData); return S_OK; } -static HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) +static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) +{ + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, void *pParam) +{ + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported(IDirectMusicTrack8 *iface, + REFGUID rguidType) +{ + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType)); @@ -156,144 +152,156 @@ return DMUS_E_TYPE_UNSUPPORTED; } -static HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); - FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); - return S_OK; +static HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType(IDirectMusicTrack8 *iface, + REFGUID notiftype) +{ + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); - FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); - return S_OK; +static HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType(IDirectMusicTrack8 *iface, + REFGUID notiftype) +{ + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype)); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, + REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, + void *pStateData, DWORD dwFlags) +{ + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags) +{ + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); - return S_OK; -} +static HRESULT WINAPI IDirectMusicTrack8Impl_Compose(IDirectMusicTrack8 *iface, IUnknown *context, + DWORD trackgroup, IDirectMusicTrack **track) +{ + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); -static HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); - return S_OK; + TRACE("(%p, %p, %d, %p): method not implemented\n", This, context, trackgroup, track); + return E_NOTIMPL; } -static const IDirectMusicTrack8Vtbl DirectMusicMuteTrack_Track_Vtbl = { - IDirectMusicMuteTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicMuteTrack_IDirectMusicTrack_AddRef, - IDirectMusicMuteTrack_IDirectMusicTrack_Release, - IDirectMusicMuteTrack_IDirectMusicTrack_Init, - IDirectMusicMuteTrack_IDirectMusicTrack_InitPlay, - IDirectMusicMuteTrack_IDirectMusicTrack_EndPlay, - IDirectMusicMuteTrack_IDirectMusicTrack_Play, - IDirectMusicMuteTrack_IDirectMusicTrack_GetParam, - IDirectMusicMuteTrack_IDirectMusicTrack_SetParam, - IDirectMusicMuteTrack_IDirectMusicTrack_IsParamSupported, - IDirectMusicMuteTrack_IDirectMusicTrack_AddNotificationType, - IDirectMusicMuteTrack_IDirectMusicTrack_RemoveNotificationType, - IDirectMusicMuteTrack_IDirectMusicTrack_Clone, - IDirectMusicMuteTrack_IDirectMusicTrack_PlayEx, - IDirectMusicMuteTrack_IDirectMusicTrack_GetParamEx, - IDirectMusicMuteTrack_IDirectMusicTrack_SetParamEx, - IDirectMusicMuteTrack_IDirectMusicTrack_Compose, - IDirectMusicMuteTrack_IDirectMusicTrack_Join +static HRESULT WINAPI IDirectMusicTrack8Impl_Join(IDirectMusicTrack8 *iface, + IDirectMusicTrack *newtrack, MUSIC_TIME join, IUnknown *context, DWORD trackgroup, + IDirectMusicTrack **resulttrack) +{ + IDirectMusicMuteTrack *This = impl_from_IDirectMusicTrack8(iface); + TRACE("(%p, %p, %d, %p, %d, %p): stub\n", This, newtrack, join, context, trackgroup, + resulttrack); + return E_NOTIMPL; +} + +static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = { + IDirectMusicTrack8Impl_QueryInterface, + IDirectMusicTrack8Impl_AddRef, + IDirectMusicTrack8Impl_Release, + IDirectMusicTrack8Impl_Init, + IDirectMusicTrack8Impl_InitPlay, + IDirectMusicTrack8Impl_EndPlay, + IDirectMusicTrack8Impl_Play, + IDirectMusicTrack8Impl_GetParam, + IDirectMusicTrack8Impl_SetParam, + IDirectMusicTrack8Impl_IsParamSupported, + IDirectMusicTrack8Impl_AddNotificationType, + IDirectMusicTrack8Impl_RemoveNotificationType, + IDirectMusicTrack8Impl_Clone, + IDirectMusicTrack8Impl_PlayEx, + IDirectMusicTrack8Impl_GetParamEx, + IDirectMusicTrack8Impl_SetParamEx, + IDirectMusicTrack8Impl_Compose, + IDirectMusicTrack8Impl_Join }; -/* IDirectMusicMuteTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, PersistStreamVtbl, iface); - return IDirectMusicMuteTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} - -static ULONG WINAPI IDirectMusicMuteTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, PersistStreamVtbl, iface); - return IDirectMusicMuteTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} - -static ULONG WINAPI IDirectMusicMuteTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicMuteTrack, PersistStreamVtbl, iface); - return IDirectMusicMuteTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); -} - -static HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - return E_NOTIMPL; +static inline IDirectMusicMuteTrack * impl_from_IPersistStream(IPersistStream *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicMuteTrack, dmobj.IPersistStream_iface); } -static HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *stream) +{ FIXME(": Loading not implemented yet\n"); return S_OK; } -static HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - return E_NOTIMPL; -} +static HRESULT WINAPI IPersistStreamImpl_Save(IPersistStream *iface, IStream *stream, + BOOL cleardirty) +{ + IDirectMusicMuteTrack *This = impl_from_IPersistStream(iface); + + FIXME("(%p, %p, %d): stub\n", This, stream, cleardirty); -static HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - return E_NOTIMPL; + if (!stream) + return E_POINTER; + + return E_NOTIMPL; } -static const IPersistStreamVtbl DirectMusicMuteTrack_PersistStream_Vtbl = { - IDirectMusicMuteTrack_IPersistStream_QueryInterface, - IDirectMusicMuteTrack_IPersistStream_AddRef, - IDirectMusicMuteTrack_IPersistStream_Release, - IDirectMusicMuteTrack_IPersistStream_GetClassID, - IDirectMusicMuteTrack_IPersistStream_IsDirty, - IDirectMusicMuteTrack_IPersistStream_Load, - IDirectMusicMuteTrack_IPersistStream_Save, - IDirectMusicMuteTrack_IPersistStream_GetSizeMax +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + IPersistStreamImpl_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmmutetrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicMuteTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicMuteTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicMuteTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicMuteTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicMuteTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - track->pDesc->guidClass = CLSID_DirectMusicMuteTrack; - track->ref = 0; /* will be inited by QueryInterface */ + IDirectMusicMuteTrack *track; + HRESULT hr; + + track = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack8_iface.lpVtbl = &dmtrack8_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicMuteTrack, + (IUnknown *)&track->IDirectMusicTrack8_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + + DMSTYLE_LockModule(); + hr = IDirectMusicTrack8_QueryInterface(&track->IDirectMusicTrack8_iface, lpcGUID, ppobj); + IDirectMusicTrack8_Release(&track->IDirectMusicTrack8_iface); - return IDirectMusicMuteTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/style.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/style.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/style.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/style.c 2015-07-12 05:36:18.000000000 +0000 @@ -440,7 +440,7 @@ hr = IStream_Read (pStm, &pNewItem->part_ref, sizeof(DMUS_IO_PARTREF), NULL); /*TRACE_(dmfile)(" - sizeof %lu\n", sizeof(DMUS_IO_PARTREF));*/ list_add_tail (&pNewMotif->Items, &pNewItem->entry); - DM_STRUCT_INIT(&pNewItem->desc); + pNewItem->desc.dwSize = sizeof(pNewItem->desc); break; } case FOURCC_LIST: { @@ -639,12 +639,9 @@ DWORD ListSize[3], ListCount[3]; LARGE_INTEGER liMove; /* used when skipping chunks */ - DMUS_OBJECTDESC desc; IDirectMusicBand* pBand = NULL; LPDMUS_PRIVATE_STYLE_MOTIF pNewMotif = NULL; - DM_STRUCT_INIT(&desc); - if (pChunk->fccID != DMUS_FOURCC_PATTERN_LIST) { ERR_(dmfile)(": %s chunk should be a PATTERN list\n", debugstr_fourcc (pChunk->fccID)); return E_FAIL; @@ -672,7 +669,7 @@ /** TODO trace pattern */ /** reset all data, as a new pattern begin */ - DM_STRUCT_INIT(&pNewMotif->desc); + pNewMotif->desc.dwSize = sizeof(pNewMotif->desc); list_init (&pNewMotif->Items); break; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/styletrack.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/styletrack.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/styletrack.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/styletrack.c 2015-07-12 05:36:18.000000000 +0000 @@ -18,131 +18,128 @@ */ #include "dmstyle_private.h" +#include "dmobject.h" WINE_DEFAULT_DEBUG_CHANNEL(dmstyle); WINE_DECLARE_DEBUG_CHANNEL(dmfile); -static ULONG WINAPI IDirectMusicStyleTrack_IUnknown_AddRef (LPUNKNOWN iface); -static ULONG WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface); -static ULONG WINAPI IDirectMusicStyleTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface); - /***************************************************************************** * IDirectMusicStyleTrack implementation */ -/* IDirectMusicStyleTrack IUnknown part: */ -static HRESULT WINAPI IDirectMusicStyleTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, UnknownVtbl, iface); - TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); - - if (IsEqualIID (riid, &IID_IUnknown)) { - *ppobj = &This->UnknownVtbl; - IDirectMusicStyleTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); - return S_OK; - } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) - || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { - *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; - IDirectMusicStyleTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl); - return S_OK; - } else if (IsEqualIID (riid, &IID_IPersistStream)) { - *ppobj = &This->PersistStreamVtbl; - IDirectMusicStyleTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl); - return S_OK; - } - - WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); - return E_NOINTERFACE; +typedef struct IDirectMusicStyleTrack { + IDirectMusicTrack8 IDirectMusicTrack8_iface; + struct dmobject dmobj; /* IPersistStream only */ + LONG ref; + struct list Items; +} IDirectMusicStyleTrack; + +/* IDirectMusicStyleTrack IDirectMusicTrack8 part: */ +static inline IDirectMusicStyleTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicStyleTrack, IDirectMusicTrack8_iface); } -static ULONG WINAPI IDirectMusicStyleTrack_IUnknown_AddRef (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, UnknownVtbl, iface); - ULONG ref = InterlockedIncrement(&This->ref); +static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, + void **ret_iface) +{ + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface); - TRACE("(%p): AddRef from %d\n", This, ref - 1); + *ret_iface = NULL; - DMSTYLE_LockModule(); + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) || + IsEqualIID(riid, &IID_IDirectMusicTrack8)) + *ret_iface = iface; + else if (IsEqualIID(riid, &IID_IPersistStream)) + *ret_iface = &This->dmobj.IPersistStream_iface; + else { + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface); + return E_NOINTERFACE; + } - return ref; + IUnknown_AddRef((IUnknown*)*ret_iface); + return S_OK; } -static ULONG WINAPI IDirectMusicStyleTrack_IUnknown_Release (LPUNKNOWN iface) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, UnknownVtbl, iface); - ULONG ref = InterlockedDecrement(&This->ref); +static ULONG WINAPI IDirectMusicTrack8Impl_AddRef(IDirectMusicTrack8 *iface) +{ + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedIncrement(&This->ref); - TRACE("(%p): ReleaseRef to %d\n", This, ref); + TRACE("(%p) ref=%d\n", This, ref); - if (ref == 0) { - HeapFree(GetProcessHeap(), 0, This); - } - - DMSTYLE_UnlockModule(); - - return ref; + return ref; } -static const IUnknownVtbl DirectMusicStyleTrack_Unknown_Vtbl = { - IDirectMusicStyleTrack_IUnknown_QueryInterface, - IDirectMusicStyleTrack_IUnknown_AddRef, - IDirectMusicStyleTrack_IUnknown_Release -}; +static ULONG WINAPI IDirectMusicTrack8Impl_Release(IDirectMusicTrack8 *iface) +{ + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); + LONG ref = InterlockedDecrement(&This->ref); -/* IDirectMusicStyleTrack IDirectMusicTrack8 part: */ -static HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); - return IDirectMusicStyleTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} + TRACE("(%p) ref=%d\n", This, ref); -static ULONG WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); - return IDirectMusicStyleTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} + if (!ref) { + HeapFree(GetProcessHeap(), 0, This); + DMSTYLE_UnlockModule(); + } -static ULONG WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); - return IDirectMusicStyleTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); + return ref; } -static HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) +static HRESULT WINAPI IDirectMusicTrack8Impl_Init(IDirectMusicTrack8 *iface, + IDirectMusicSegment *pSegment) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pSegment); return S_OK; } -static HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) +static HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay(IDirectMusicTrack8 *iface, + IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, + void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) +static HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay(IDirectMusicTrack8 *iface, void *pStateData) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p): stub\n", This, pStateData); return S_OK; } -static HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) +static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, void *pStateData, + MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) +{ + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParam(IDirectMusicTrack8 *iface, REFGUID rguidType, + MUSIC_TIME mtTime, void *pParam) +{ + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); return S_OK; } -static HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported(IDirectMusicTrack8 *iface, + REFGUID rguidType) +{ + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType)); @@ -161,109 +158,101 @@ return DMUS_E_TYPE_UNSUPPORTED; } -static HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType(IDirectMusicTrack8 *iface, + REFGUID rguidNotificationType) +{ + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; } -static HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType(IDirectMusicTrack8 *iface, + REFGUID rguidNotificationType) +{ + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; } -static HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, + MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) +{ + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); return S_OK; } -static HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, + REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, + IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) +{ + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); return S_OK; } -static HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, + void *pStateData, DWORD dwFlags) +{ + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx(IDirectMusicTrack8 *iface, + REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags) +{ + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); return S_OK; } -static HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); - FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); - return S_OK; +static HRESULT WINAPI IDirectMusicTrack8Impl_Compose(IDirectMusicTrack8 *iface, IUnknown *context, + DWORD trackgroup, IDirectMusicTrack **track) +{ + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); + + TRACE("(%p, %p, %d, %p): method not implemented\n", This, context, trackgroup, track); + return E_NOTIMPL; } -static HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface); +static HRESULT WINAPI IDirectMusicTrack8Impl_Join(IDirectMusicTrack8 *iface, + IDirectMusicTrack *pNewTrack, MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup, + IDirectMusicTrack **ppResultTrack) +{ + IDirectMusicStyleTrack *This = impl_from_IDirectMusicTrack8(iface); FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); return S_OK; } -static const IDirectMusicTrack8Vtbl DirectMusicStyleTrack_Track_Vtbl = { - IDirectMusicStyleTrack_IDirectMusicTrack_QueryInterface, - IDirectMusicStyleTrack_IDirectMusicTrack_AddRef, - IDirectMusicStyleTrack_IDirectMusicTrack_Release, - IDirectMusicStyleTrack_IDirectMusicTrack_Init, - IDirectMusicStyleTrack_IDirectMusicTrack_InitPlay, - IDirectMusicStyleTrack_IDirectMusicTrack_EndPlay, - IDirectMusicStyleTrack_IDirectMusicTrack_Play, - IDirectMusicStyleTrack_IDirectMusicTrack_GetParam, - IDirectMusicStyleTrack_IDirectMusicTrack_SetParam, - IDirectMusicStyleTrack_IDirectMusicTrack_IsParamSupported, - IDirectMusicStyleTrack_IDirectMusicTrack_AddNotificationType, - IDirectMusicStyleTrack_IDirectMusicTrack_RemoveNotificationType, - IDirectMusicStyleTrack_IDirectMusicTrack_Clone, - IDirectMusicStyleTrack_IDirectMusicTrack_PlayEx, - IDirectMusicStyleTrack_IDirectMusicTrack_GetParamEx, - IDirectMusicStyleTrack_IDirectMusicTrack_SetParamEx, - IDirectMusicStyleTrack_IDirectMusicTrack_Compose, - IDirectMusicStyleTrack_IDirectMusicTrack_Join +static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = { + IDirectMusicTrack8Impl_QueryInterface, + IDirectMusicTrack8Impl_AddRef, + IDirectMusicTrack8Impl_Release, + IDirectMusicTrack8Impl_Init, + IDirectMusicTrack8Impl_InitPlay, + IDirectMusicTrack8Impl_EndPlay, + IDirectMusicTrack8Impl_Play, + IDirectMusicTrack8Impl_GetParam, + IDirectMusicTrack8Impl_SetParam, + IDirectMusicTrack8Impl_IsParamSupported, + IDirectMusicTrack8Impl_AddNotificationType, + IDirectMusicTrack8Impl_RemoveNotificationType, + IDirectMusicTrack8Impl_Clone, + IDirectMusicTrack8Impl_PlayEx, + IDirectMusicTrack8Impl_GetParamEx, + IDirectMusicTrack8Impl_SetParamEx, + IDirectMusicTrack8Impl_Compose, + IDirectMusicTrack8Impl_Join }; -/* IDirectMusicStyleTrack IPersistStream part: */ -static HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, PersistStreamVtbl, iface); - return IDirectMusicStyleTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); -} - -static ULONG WINAPI IDirectMusicStyleTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, PersistStreamVtbl, iface); - return IDirectMusicStyleTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); -} - -static ULONG WINAPI IDirectMusicStyleTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, PersistStreamVtbl, iface); - return IDirectMusicStyleTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); -} - -static HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, PersistStreamVtbl, iface); - TRACE("(%p, %p)\n", This, pClassID); - *pClassID = CLSID_DirectMusicStyleTrack; - return S_OK; -} - -static HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, PersistStreamVtbl, iface); - FIXME("(%p): stub, always S_FALSE\n", This); - return S_FALSE; -} - -static HRESULT IDirectMusicStyleTrack_IPersistStream_ParseStyleRef (LPPERSISTSTREAM iface, DMUS_PRIVATE_CHUNK* pChunk, IStream* pStm) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, PersistStreamVtbl, iface); +static HRESULT parse_style_ref(IDirectMusicStyleTrack *This, DMUS_PRIVATE_CHUNK *pChunk, + IStream *pStm) +{ DMUS_PRIVATE_CHUNK Chunk; DWORD ListSize[3], ListCount[3]; LARGE_INTEGER liMove; /* used when skipping chunks */ @@ -308,7 +297,8 @@ */ case DMUS_FOURCC_REF_LIST: { FIXME_(dmfile)(": DMRF (DM References) list, not yet handled\n"); - hr = IDirectMusicUtils_IPersistStream_ParseReference (iface, &Chunk, pStm, &pObject); + hr = IDirectMusicUtils_IPersistStream_ParseReference(&This->dmobj.IPersistStream_iface, + &Chunk, pStm, &pObject); if (FAILED(hr)) { ERR(": could not load Reference\n"); return hr; @@ -344,9 +334,9 @@ return S_OK; } -static HRESULT IDirectMusicStyleTrack_IPersistStream_ParseStyleTrackList (LPPERSISTSTREAM iface, DMUS_PRIVATE_CHUNK* pChunk, IStream* pStm) { - - /*ICOM_THIS_MULTI(IDirectMusicStyleTrack, PersistStreamVtbl, iface);*/ +static HRESULT parse_styletrack_list(IDirectMusicStyleTrack *This, DMUS_PRIVATE_CHUNK *pChunk, + IStream *pStm) +{ DMUS_PRIVATE_CHUNK Chunk; DWORD ListSize[3], ListCount[3]; LARGE_INTEGER liMove; /* used when skipping chunks */ @@ -373,7 +363,7 @@ switch (Chunk.fccID) { case DMUS_FOURCC_STYLE_REF_LIST: { TRACE_(dmfile)(": STYLE_REF list\n"); - hr = IDirectMusicStyleTrack_IPersistStream_ParseStyleRef (iface, &Chunk, pStm); + hr = parse_style_ref(This, &Chunk, pStm); if (FAILED(hr)) return hr; break; } @@ -399,9 +389,14 @@ return S_OK; } -static HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, PersistStreamVtbl, iface); +static inline IDirectMusicStyleTrack *impl_from_IPersistStream(IPersistStream *iface) +{ + return CONTAINING_RECORD(iface, IDirectMusicStyleTrack, dmobj.IPersistStream_iface); +} +static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *pStm) +{ + IDirectMusicStyleTrack *This = impl_from_IPersistStream(iface); DMUS_PRIVATE_CHUNK Chunk; LARGE_INTEGER liMove; HRESULT hr; @@ -417,7 +412,7 @@ switch (Chunk.fccID) { case DMUS_FOURCC_STYLE_TRACK_LIST: { TRACE_(dmfile)(": Chord track list\n"); - hr = IDirectMusicStyleTrack_IPersistStream_ParseStyleTrackList (iface, &Chunk, pStm); + hr = parse_styletrack_list(This, &Chunk, pStm); if (FAILED(hr)) return hr; break; } @@ -442,48 +437,38 @@ return S_OK; } -static HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, PersistStreamVtbl, iface); - FIXME("(%p): Saving not implemented yet\n", This); - return E_NOTIMPL; -} - -static HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { - ICOM_THIS_MULTI(IDirectMusicStyleTrack, PersistStreamVtbl, iface); - FIXME("(%p, %p): stub\n", This, pcbSize); - return E_NOTIMPL; -} - -static const IPersistStreamVtbl DirectMusicStyleTrack_PersistStream_Vtbl = { - IDirectMusicStyleTrack_IPersistStream_QueryInterface, - IDirectMusicStyleTrack_IPersistStream_AddRef, - IDirectMusicStyleTrack_IPersistStream_Release, - IDirectMusicStyleTrack_IPersistStream_GetClassID, - IDirectMusicStyleTrack_IPersistStream_IsDirty, - IDirectMusicStyleTrack_IPersistStream_Load, - IDirectMusicStyleTrack_IPersistStream_Save, - IDirectMusicStyleTrack_IPersistStream_GetSizeMax +static const IPersistStreamVtbl persiststream_vtbl = { + dmobj_IPersistStream_QueryInterface, + dmobj_IPersistStream_AddRef, + dmobj_IPersistStream_Release, + dmobj_IPersistStream_GetClassID, + unimpl_IPersistStream_IsDirty, + IPersistStreamImpl_Load, + unimpl_IPersistStream_Save, + unimpl_IPersistStream_GetSizeMax }; /* for ClassFactory */ HRESULT WINAPI create_dmstyletrack(REFIID lpcGUID, void **ppobj) { - IDirectMusicStyleTrack* track; - - track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicStyleTrack)); - if (NULL == track) { - *ppobj = NULL; - return E_OUTOFMEMORY; - } - track->UnknownVtbl = &DirectMusicStyleTrack_Unknown_Vtbl; - track->TrackVtbl = &DirectMusicStyleTrack_Track_Vtbl; - track->PersistStreamVtbl = &DirectMusicStyleTrack_PersistStream_Vtbl; - track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); - DM_STRUCT_INIT(track->pDesc); - track->pDesc->dwValidData |= DMUS_OBJ_CLASS; - track->pDesc->guidClass = CLSID_DirectMusicStyleTrack; - track->ref = 0; /* will be inited by QueryInterface */ - list_init (&track->Items); + IDirectMusicStyleTrack *track; + HRESULT hr; + + track = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track)); + if (!track) { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + track->IDirectMusicTrack8_iface.lpVtbl = &dmtrack8_vtbl; + track->ref = 1; + dmobject_init(&track->dmobj, &CLSID_DirectMusicStyleTrack, + (IUnknown *)&track->IDirectMusicTrack8_iface); + track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + list_init (&track->Items); + + DMSTYLE_LockModule(); + hr = IDirectMusicTrack8_QueryInterface(&track->IDirectMusicTrack8_iface, lpcGUID, ppobj); + IDirectMusicTrack8_Release(&track->IDirectMusicTrack8_iface); - return IDirectMusicStyleTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); + return hr; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/tests/dmstyle.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/tests/dmstyle.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmstyle/tests/dmstyle.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmstyle/tests/dmstyle.c 2015-07-12 05:36:18.000000000 +0000 @@ -184,10 +184,6 @@ /* Same refcount for all DirectMusicTrack interfaces */ hr = CoCreateInstance(class[i].clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicTrack8, (void**)&dmt8); - if (hr == E_NOINTERFACE && !dmt8) { - skip("%s not created with CoCreateInstance()\n", class[i].name); - continue; - } ok(hr == S_OK, "%s create failed: %08x, expected S_OK\n", class[i].name, hr); refcount = IDirectMusicTrack8_AddRef(dmt8); ok(refcount == 2, "refcount == %u, expected 2\n", refcount); @@ -251,14 +247,14 @@ REFCLSID clsid; const char *name; BOOL has_save; - BOOL todo; + BOOL has_join; } class[] = { - { X(DirectMusicAuditionTrack), TRUE, TRUE }, - { X(DirectMusicChordTrack), TRUE, FALSE }, + { X(DirectMusicAuditionTrack), TRUE, FALSE }, + { X(DirectMusicChordTrack), TRUE, TRUE }, { X(DirectMusicCommandTrack), TRUE, TRUE }, - { X(DirectMusicMotifTrack), FALSE, TRUE }, - { X(DirectMusicMuteTrack), TRUE, TRUE }, - { X(DirectMusicStyleTrack), FALSE, FALSE }, + { X(DirectMusicMotifTrack), FALSE, FALSE }, + { X(DirectMusicMuteTrack), TRUE, FALSE }, + { X(DirectMusicStyleTrack), FALSE, TRUE }, }; #undef X unsigned int i; @@ -267,42 +263,75 @@ trace("Testing %s\n", class[i].name); hr = CoCreateInstance(class[i].clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicTrack8, (void**)&dmt8); - if (hr == E_NOINTERFACE && !dmt8) { - skip("%s not created with CoCreateInstance()\n", class[i].name); - continue; - } ok(hr == S_OK, "%s create failed: %08x, expected S_OK\n", class[i].name, hr); /* IDirectMusicTrack8 */ + hr = IDirectMusicTrack8_Init(dmt8, NULL); + todo_wine ok(hr == E_POINTER, "IDirectMusicTrack8_Init failed: %08x\n", hr); + if (class[i].clsid != &CLSID_DirectMusicChordTrack && + class[i].clsid != &CLSID_DirectMusicCommandTrack) { + /* Crashes on native */ + hr = IDirectMusicTrack8_InitPlay(dmt8, NULL, NULL, NULL, 0, 0); + if (class[i].clsid == &CLSID_DirectMusicMuteTrack) + ok(hr == S_OK, "IDirectMusicTrack8_InitPlay failed: %08x\n", hr); + else + todo_wine ok(hr == E_POINTER, "IDirectMusicTrack8_InitPlay failed: %08x\n", hr); + } + todo_wine { + hr = IDirectMusicTrack8_GetParam(dmt8, NULL, 0, NULL, NULL); + ok(hr == E_POINTER, "IDirectMusicTrack8_GetParam failed: %08x\n", hr); + hr = IDirectMusicTrack8_SetParam(dmt8, NULL, 0, NULL); + ok(hr == E_POINTER, "IDirectMusicTrack8_SetParam failed: %08x\n", hr); + } hr = IDirectMusicTrack8_IsParamSupported(dmt8, NULL); ok(hr == E_POINTER, "IDirectMusicTrack8_IsParamSupported failed: %08x\n", hr); + if (class[i].clsid == &CLSID_DirectMusicMuteTrack) { + hr = IDirectMusicTrack8_AddNotificationType(dmt8, NULL); + ok(hr == E_NOTIMPL, "IDirectMusicTrack8_AddNotificationType failed: %08x\n", hr); + hr = IDirectMusicTrack8_RemoveNotificationType(dmt8, NULL); + ok(hr == E_NOTIMPL, "IDirectMusicTrack8_RemoveNotificationType failed: %08x\n", hr); + } else todo_wine { + hr = IDirectMusicTrack8_AddNotificationType(dmt8, NULL); + ok(hr == E_POINTER, "IDirectMusicTrack8_AddNotificationType failed: %08x\n", hr); + hr = IDirectMusicTrack8_RemoveNotificationType(dmt8, NULL); + ok(hr == E_POINTER, "IDirectMusicTrack8_RemoveNotificationType failed: %08x\n", hr); + } + todo_wine { + hr = IDirectMusicTrack8_Clone(dmt8, 0, 0, NULL); + ok(hr == E_POINTER, "IDirectMusicTrack8_Clone failed: %08x\n", hr); + hr = IDirectMusicTrack8_PlayEx(dmt8, NULL, 0, 0, 0, 0, NULL, NULL, 0); + ok(hr == E_POINTER, "IDirectMusicTrack8_PlayEx failed: %08x\n", hr); + hr = IDirectMusicTrack8_GetParamEx(dmt8, NULL, 0, NULL, NULL, NULL, 0); + ok(hr == E_POINTER, "IDirectMusicTrack8_GetParamEx failed: %08x\n", hr); + hr = IDirectMusicTrack8_SetParamEx(dmt8, NULL, 0, NULL, NULL, 0); + ok(hr == E_POINTER, "IDirectMusicTrack8_SetParamEx failed: %08x\n", hr); + } + hr = IDirectMusicTrack8_Compose(dmt8, NULL, 0, NULL); + ok(hr == E_NOTIMPL, "IDirectMusicTrack8_Compose failed: %08x\n", hr); + if (class[i].has_join) { + hr = IDirectMusicTrack8_Join(dmt8, NULL, 0, NULL, 0, NULL); + todo_wine ok(hr == E_POINTER, "IDirectMusicTrack8_Join failed: %08x\n", hr); + } else { + hr = IDirectMusicTrack8_Join(dmt8, NULL, 0, NULL, 0, NULL); + ok(hr == E_NOTIMPL, "IDirectMusicTrack8_Join failed: %08x\n", hr); + } /* IPersistStream */ hr = IDirectMusicTrack8_QueryInterface(dmt8, &IID_IPersistStream, (void**)&ps); ok(hr == S_OK, "QueryInterface for IID_IPersistStream failed: %08x\n", hr); hr = IPersistStream_GetClassID(ps, &classid); - if (class[i].todo) { - todo_wine { - ok(hr == S_OK, "IPersistStream_GetClassID failed: %08x\n", hr); - ok(IsEqualGUID(&classid, class[i].clsid), - "Expected class %s got %s\n", class[i].name, wine_dbgstr_guid(&classid)); - hr = IPersistStream_IsDirty(ps); - ok(hr == S_FALSE, "IPersistStream_IsDirty failed: %08x\n", hr); - } - } else { - ok(hr == S_OK, "IPersistStream_GetClassID failed: %08x\n", hr); - ok(IsEqualGUID(&classid, class[i].clsid), - "Expected class %s got %s\n", class[i].name, wine_dbgstr_guid(&classid)); - hr = IPersistStream_IsDirty(ps); - ok(hr == S_FALSE, "IPersistStream_IsDirty failed: %08x\n", hr); - } + ok(hr == S_OK, "IPersistStream_GetClassID failed: %08x\n", hr); + ok(IsEqualGUID(&classid, class[i].clsid), + "Expected class %s got %s\n", class[i].name, wine_dbgstr_guid(&classid)); + hr = IPersistStream_IsDirty(ps); + ok(hr == S_FALSE, "IPersistStream_IsDirty failed: %08x\n", hr); hr = IPersistStream_GetSizeMax(ps, &size); ok(hr == E_NOTIMPL, "IPersistStream_GetSizeMax failed: %08x\n", hr); hr = IPersistStream_Save(ps, NULL, TRUE); if (class[i].has_save) - todo_wine ok(hr == E_POINTER, "IPersistStream_Save failed: %08x\n", hr); + ok(hr == E_POINTER, "IPersistStream_Save failed: %08x\n", hr); else ok(hr == E_NOTIMPL, "IPersistStream_Save failed: %08x\n", hr); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmsynth/dmsynth_private.h wine-staging-1.7.47~ubuntu14.10.1/dlls/dmsynth/dmsynth_private.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmsynth/dmsynth_private.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmsynth/dmsynth_private.h 2015-07-12 05:36:18.000000000 +0000 @@ -104,12 +104,6 @@ } guid_info; /* used for initialising structs (primarily for DMUS_OBJECTDESC) */ -#define DM_STRUCT_INIT(x) \ - do { \ - memset((x), 0, sizeof(*(x))); \ - (x)->dwSize = sizeof(*x); \ - } while (0) - #define FE(x) { x, #x } #define GE(x) { &x, #x } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dmusic/dmusic_private.h wine-staging-1.7.47~ubuntu14.10.1/dlls/dmusic/dmusic_private.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dmusic/dmusic_private.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dmusic/dmusic_private.h 2015-07-12 05:36:18.000000000 +0000 @@ -248,10 +248,6 @@ /***************************************************************************** * Misc. */ -/* my custom ICOM stuff */ -#define ICOM_NAME_MULTI(impl,field,iface,name) impl* const name=(impl*)((char*)(iface) - offsetof(impl,field)) -#define ICOM_THIS_MULTI(impl,field,iface) ICOM_NAME_MULTI(impl,field,iface,This) - /* for simpler reading */ typedef struct _DMUS_PRIVATE_CHUNK { FOURCC fccID; /* FOURCC ID of the chunk */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dwrite/dwrite_private.h wine-staging-1.7.47~ubuntu14.10.1/dlls/dwrite/dwrite_private.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dwrite/dwrite_private.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dwrite/dwrite_private.h 2015-07-12 05:36:18.000000000 +0000 @@ -125,14 +125,21 @@ extern HRESULT get_family_names_from_stream(IDWriteFontFileStream*,UINT32,DWRITE_FONT_FACE_TYPE,IDWriteLocalizedStrings**) DECLSPEC_HIDDEN; /* Opentype font table functions */ +struct dwrite_font_props { + DWRITE_FONT_STYLE style; + DWRITE_FONT_STRETCH stretch; + DWRITE_FONT_WEIGHT weight; + DWRITE_PANOSE panose; +}; + extern HRESULT opentype_analyze_font(IDWriteFontFileStream*,UINT32*,DWRITE_FONT_FILE_TYPE*,DWRITE_FONT_FACE_TYPE*,BOOL*) DECLSPEC_HIDDEN; extern HRESULT opentype_get_font_table(IDWriteFontFileStream*,DWRITE_FONT_FACE_TYPE,UINT32,UINT32,const void**,void**,UINT32*,BOOL*) DECLSPEC_HIDDEN; extern HRESULT opentype_cmap_get_unicode_ranges(void*,UINT32,DWRITE_UNICODE_RANGE*,UINT32*) DECLSPEC_HIDDEN; -extern void opentype_get_font_properties(IDWriteFontFileStream*,DWRITE_FONT_FACE_TYPE,UINT32,DWRITE_FONT_STRETCH*, - DWRITE_FONT_WEIGHT*,DWRITE_FONT_STYLE*) DECLSPEC_HIDDEN; +extern void opentype_get_font_properties(IDWriteFontFileStream*,DWRITE_FONT_FACE_TYPE,UINT32,struct dwrite_font_props*) DECLSPEC_HIDDEN; extern void opentype_get_font_metrics(IDWriteFontFileStream*,DWRITE_FONT_FACE_TYPE,UINT32,DWRITE_FONT_METRICS1*,DWRITE_CARET_METRICS*) DECLSPEC_HIDDEN; extern HRESULT opentype_get_font_strings_from_id(const void*,DWRITE_INFORMATIONAL_STRING_ID,IDWriteLocalizedStrings**) DECLSPEC_HIDDEN; extern HRESULT opentype_get_typographic_features(IDWriteFontFace*,UINT32,UINT32,UINT32,UINT32*,DWRITE_FONT_FEATURE_TAG*) DECLSPEC_HIDDEN; +extern BOOL opentype_get_vdmx_size(const void*,INT,UINT16*,UINT16*) DECLSPEC_HIDDEN; /* BiDi helpers */ extern HRESULT bidi_computelevels(const WCHAR*,UINT32,UINT8,UINT8*,UINT8*) DECLSPEC_HIDDEN; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dwrite/font.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dwrite/font.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dwrite/font.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dwrite/font.c 2015-07-12 05:36:18.000000000 +0000 @@ -18,6 +18,7 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include #define COBJMACROS @@ -30,6 +31,7 @@ #define MS_OS2_TAG DWRITE_MAKE_OPENTYPE_TAG('O','S','/','2') #define MS_CMAP_TAG DWRITE_MAKE_OPENTYPE_TAG('c','m','a','p') #define MS_NAME_TAG DWRITE_MAKE_OPENTYPE_TAG('n','a','m','e') +#define MS_VDMX_TAG DWRITE_MAKE_OPENTYPE_TAG('V','D','M','X') static const IID IID_issystemcollection = {0x14d88047,0x331f,0x4cd3,{0xbc,0xa8,0x3e,0x67,0x99,0xaf,0x34,0x75}}; @@ -39,6 +41,7 @@ DWRITE_FONT_STYLE style; DWRITE_FONT_STRETCH stretch; DWRITE_FONT_WEIGHT weight; + DWRITE_PANOSE panose; DWRITE_FONT_METRICS1 metrics; IDWriteLocalizedStrings *info_strings[DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_CID_NAME+1]; @@ -95,6 +98,7 @@ void *data; void *context; UINT32 size; + BOOL exists; }; struct dwrite_glyphrunanalysis { @@ -122,6 +126,7 @@ DWRITE_CARET_METRICS caret; struct dwrite_fonttable cmap; + struct dwrite_fonttable vdmx; DWRITE_GLYPH_METRICS *glyphs[GLYPH_MAX/GLYPH_BLOCK_SIZE]; }; @@ -165,6 +170,11 @@ return CONTAINING_RECORD(iface, struct dwrite_glyphrunanalysis, IDWriteGlyphRunAnalysis_iface); } +static inline const char *debugstr_tag(UINT32 tag) +{ + return wine_dbg_sprintf("%c%c%c%c", tag >> 24, (tag >> 16) & 0xff, (tag >> 8) & 0xff, tag & 0xff); +} + static HRESULT get_cached_glyph_metrics(struct dwrite_fontface *fontface, UINT16 glyph, DWRITE_GLYPH_METRICS *metrics) { static const DWRITE_GLYPH_METRICS nil; @@ -190,22 +200,32 @@ return S_OK; } -static inline void* get_fontface_cmap(struct dwrite_fontface *fontface) +static void* get_fontface_table(struct dwrite_fontface *fontface, UINT32 tag, struct dwrite_fonttable *table) { - BOOL exists = FALSE; HRESULT hr; - if (fontface->cmap.data) - return fontface->cmap.data; + if (table->data || !table->exists) + return table->data; - hr = IDWriteFontFace2_TryGetFontTable(&fontface->IDWriteFontFace2_iface, MS_CMAP_TAG, (const void**)&fontface->cmap.data, - &fontface->cmap.size, &fontface->cmap.context, &exists); - if (FAILED(hr) || !exists) { - ERR("Font does not have a CMAP table\n"); + table->exists = FALSE; + hr = IDWriteFontFace2_TryGetFontTable(&fontface->IDWriteFontFace2_iface, tag, (const void**)&table->data, + &table->size, &table->context, &table->exists); + if (FAILED(hr) || !table->exists) { + WARN("Font does not have a %s table\n", debugstr_tag(tag)); return NULL; } - return fontface->cmap.data; + return table->data; +} + +static inline void* get_fontface_cmap(struct dwrite_fontface *fontface) +{ + return get_fontface_table(fontface, MS_CMAP_TAG, &fontface->cmap); +} + +static inline void* get_fontface_vdmx(struct dwrite_fontface *fontface) +{ + return get_fontface_table(fontface, MS_VDMX_TAG, &fontface->vdmx); } static void release_font_data(struct dwrite_font_data *data) @@ -280,6 +300,8 @@ if (This->cmap.context) IDWriteFontFace2_ReleaseFontTable(iface, This->cmap.context); + if (This->vdmx.context) + IDWriteFontFace2_ReleaseFontTable(iface, This->vdmx.context); for (i = 0; i < This->file_count; i++) { if (This->streams[i]) IDWriteFontFileStream_Release(This->streams[i]); @@ -572,16 +594,8 @@ static HRESULT WINAPI dwritefontface_GetGdiCompatibleMetrics(IDWriteFontFace2 *iface, FLOAT emSize, FLOAT pixels_per_dip, DWRITE_MATRIX const *transform, DWRITE_FONT_METRICS *metrics) { - struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface); DWRITE_FONT_METRICS1 metrics1; - HRESULT hr; - - TRACE("(%p)->(%.2f %.2f %p %p)\n", This, emSize, pixels_per_dip, transform, metrics); - - hr = IDWriteFontFace2_GetGdiCompatibleMetrics(iface, emSize, pixels_per_dip, transform, &metrics1); - if (FAILED(hr)) - return hr; - + HRESULT hr = IDWriteFontFace2_GetGdiCompatibleMetrics(iface, emSize, pixels_per_dip, transform, &metrics1); memcpy(metrics, &metrics1, sizeof(*metrics)); return hr; } @@ -603,12 +617,65 @@ *metrics = This->metrics; } +static inline int round_metric(FLOAT metric) +{ + return (int)floor(metric + 0.5); +} + static HRESULT WINAPI dwritefontface1_GetGdiCompatibleMetrics(IDWriteFontFace2 *iface, FLOAT em_size, FLOAT pixels_per_dip, - const DWRITE_MATRIX *transform, DWRITE_FONT_METRICS1 *metrics) + const DWRITE_MATRIX *m, DWRITE_FONT_METRICS1 *metrics) { struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface); - FIXME("(%p)->(%f %f %p %p): stub\n", This, em_size, pixels_per_dip, transform, metrics); - return E_NOTIMPL; + const DWRITE_FONT_METRICS1 *design = &This->metrics; + UINT16 ascent, descent; + FLOAT scale; + + TRACE("(%p)->(%.2f %.2f %p %p)\n", This, em_size, pixels_per_dip, m, metrics); + + if (pixels_per_dip <= 0.0) { + memset(metrics, 0, sizeof(*metrics)); + return E_INVALIDARG; + } + + em_size *= pixels_per_dip; + if (m && m->m22 != 0.0) + em_size *= fabs(m->m22); + + scale = em_size / design->designUnitsPerEm; + if (!opentype_get_vdmx_size(get_fontface_vdmx(This), em_size, &ascent, &descent)) { + ascent = round_metric(design->ascent * scale); + descent = round_metric(design->descent * scale); + } + +#define SCALE_METRIC(x) metrics->x = round_metric(round_metric((design->x) * scale) / scale) + metrics->designUnitsPerEm = design->designUnitsPerEm; + metrics->ascent = round_metric(ascent / scale); + metrics->descent = round_metric(descent / scale); + + SCALE_METRIC(lineGap); + SCALE_METRIC(capHeight); + SCALE_METRIC(xHeight); + SCALE_METRIC(underlinePosition); + SCALE_METRIC(underlineThickness); + SCALE_METRIC(strikethroughPosition); + SCALE_METRIC(strikethroughThickness); + SCALE_METRIC(glyphBoxLeft); + SCALE_METRIC(glyphBoxTop); + SCALE_METRIC(glyphBoxRight); + SCALE_METRIC(glyphBoxBottom); + SCALE_METRIC(subscriptPositionX); + SCALE_METRIC(subscriptPositionY); + SCALE_METRIC(subscriptSizeX); + SCALE_METRIC(subscriptSizeY); + SCALE_METRIC(superscriptPositionX); + SCALE_METRIC(superscriptPositionY); + SCALE_METRIC(superscriptSizeX); + SCALE_METRIC(superscriptSizeY); + + metrics->hasTypographicMetrics = design->hasTypographicMetrics; +#undef SCALE_METRIC + + return S_OK; } static void WINAPI dwritefontface1_GetCaretMetrics(IDWriteFontFace2 *iface, DWRITE_CARET_METRICS *metrics) @@ -1094,7 +1161,8 @@ static void WINAPI dwritefont1_GetPanose(IDWriteFont2 *iface, DWRITE_PANOSE *panose) { struct dwrite_font *This = impl_from_IDWriteFont2(iface); - FIXME("(%p)->(%p): stub\n", This, panose); + TRACE("(%p)->(%p)\n", This, panose); + *panose = This->data->panose; } static HRESULT WINAPI dwritefont1_GetUnicodeRanges(IDWriteFont2 *iface, UINT32 max_count, DWRITE_UNICODE_RANGE *ranges, UINT32 *count) @@ -1631,6 +1699,7 @@ { void *os2_context, *head_context; const void *tt_os2 = NULL, *tt_head = NULL; + struct dwrite_font_props props; struct dwrite_font_data *data; HRESULT hr; @@ -1655,9 +1724,14 @@ opentype_get_font_table(*stream, face_type, face_index, MS_OS2_TAG, &tt_os2, &os2_context, NULL, NULL); opentype_get_font_table(*stream, face_type, face_index, MS_HEAD_TAG, &tt_head, &head_context, NULL, NULL); - opentype_get_font_properties(*stream, face_type, face_index, &data->stretch, &data->weight, &data->style); + opentype_get_font_properties(*stream, face_type, face_index, &props); opentype_get_font_metrics(*stream, face_type, face_index, &data->metrics, NULL); + data->style = props.style; + data->stretch = props.stretch; + data->weight = props.weight; + data->panose = props.panose; + if (tt_os2) IDWriteFontFileStream_ReleaseFileFragment(*stream, os2_context); if (tt_head) @@ -1845,8 +1919,8 @@ static HRESULT WINAPI systemfontfileenumerator_GetCurrentFontFile(IDWriteFontFileEnumerator *iface, IDWriteFontFile **file) { struct system_fontfile_enumerator *enumerator = impl_from_IDWriteFontFileEnumerator(iface); - DWORD ret, type, count; - WCHAR *filename; + DWORD ret, type, val_count, count; + WCHAR *value, *filename; HRESULT hr; *file = NULL; @@ -1854,14 +1928,22 @@ if (enumerator->index < 0) return E_FAIL; - if (RegEnumValueW(enumerator->hkey, enumerator->index, NULL, NULL, NULL, &type, NULL, &count)) + ret = RegQueryInfoKeyW(enumerator->hkey, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &val_count, &count, NULL, NULL); + if (ret != ERROR_SUCCESS) return E_FAIL; - if (!(filename = heap_alloc(count))) + val_count++; + value = heap_alloc( val_count * sizeof(value[0]) ); + filename = heap_alloc(count); + if (!value || !filename) { + heap_free(value); + heap_free(filename); return E_OUTOFMEMORY; + } - ret = RegEnumValueW(enumerator->hkey, enumerator->index, NULL, NULL, NULL, &type, (BYTE*)filename, &count); + ret = RegEnumValueW(enumerator->hkey, enumerator->index, value, &val_count, NULL, &type, (BYTE*)filename, &count); if (ret) { + heap_free(value); heap_free(filename); return E_FAIL; } @@ -1880,6 +1962,7 @@ else hr = IDWriteFactory2_CreateFontFileReference(enumerator->factory, filename, NULL, file); + heap_free(value); heap_free(filename); return hr; } @@ -1887,14 +1970,25 @@ static HRESULT WINAPI systemfontfileenumerator_MoveNext(IDWriteFontFileEnumerator *iface, BOOL *current) { struct system_fontfile_enumerator *enumerator = impl_from_IDWriteFontFileEnumerator(iface); + DWORD ret, max_val_count; + WCHAR *value; *current = FALSE; enumerator->index++; + ret = RegQueryInfoKeyW(enumerator->hkey, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &max_val_count, NULL, NULL, NULL); + if (ret != ERROR_SUCCESS) + return E_FAIL; + + max_val_count++; + if (!(value = heap_alloc( max_val_count * sizeof(value[0]) ))) + return E_OUTOFMEMORY; + /* iterate until we find next string value */ while (1) { - DWORD type = 0, count; - if (RegEnumValueW(enumerator->hkey, enumerator->index, NULL, NULL, NULL, &type, NULL, &count)) + DWORD type = 0, count, val_count; + val_count = max_val_count; + if (RegEnumValueW(enumerator->hkey, enumerator->index, value, &val_count, NULL, &type, NULL, &count)) break; if (type == REG_SZ) { *current = TRUE; @@ -1904,6 +1998,7 @@ } TRACE("index = %d, current = %d\n", enumerator->index, *current); + heap_free(value); return S_OK; } @@ -2187,9 +2282,10 @@ fontface->ref = 1; fontface->type = facetype; fontface->file_count = files_number; - fontface->cmap.data = NULL; - fontface->cmap.context = NULL; - fontface->cmap.size = 0; + memset(&fontface->cmap, 0, sizeof(fontface->cmap)); + memset(&fontface->vdmx, 0, sizeof(fontface->vdmx)); + fontface->cmap.exists = TRUE; + fontface->vdmx.exists = TRUE; fontface->index = index; fontface->simulations = simulations; memset(fontface->glyphs, 0, sizeof(fontface->glyphs)); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dwrite/gdiinterop.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dwrite/gdiinterop.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dwrite/gdiinterop.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dwrite/gdiinterop.c 2015-07-12 05:36:18.000000000 +0000 @@ -411,10 +411,8 @@ IDWriteLocalizedStrings *familynames; DWRITE_FONT_SIMULATIONS simulations; DWRITE_FONT_FACE_TYPE face_type; + struct dwrite_font_props props; IDWriteFontFileStream *stream; - DWRITE_FONT_STRETCH stretch; - DWRITE_FONT_STYLE style; - DWRITE_FONT_WEIGHT weight; IDWriteFontFile *file = NULL; UINT32 index; BOOL exists; @@ -437,7 +435,7 @@ index = IDWriteFontFace_GetIndex(fontface); face_type = IDWriteFontFace_GetType(fontface); - opentype_get_font_properties(stream, face_type, index, &stretch, &weight, &style); + opentype_get_font_properties(stream, face_type, index, &props); hr = get_family_names_from_stream(stream, index, face_type, &familynames); IDWriteFontFile_Release(file); IDWriteFontFileStream_Release(stream); @@ -447,8 +445,8 @@ simulations = IDWriteFontFace_GetSimulations(fontface); logfont->lfCharSet = DEFAULT_CHARSET; - logfont->lfWeight = weight; - logfont->lfItalic = style == DWRITE_FONT_STYLE_ITALIC || (simulations & DWRITE_FONT_SIMULATIONS_OBLIQUE); + logfont->lfWeight = props.weight; + logfont->lfItalic = props.style == DWRITE_FONT_STYLE_ITALIC || (simulations & DWRITE_FONT_SIMULATIONS_OBLIQUE); logfont->lfOutPrecision = OUT_OUTLINE_PRECIS; logfont->lfFaceName[0] = 0; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dwrite/layout.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dwrite/layout.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dwrite/layout.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dwrite/layout.c 2015-07-12 05:36:18.000000000 +0000 @@ -180,6 +180,8 @@ UINT32 glyphcount; /* total glyph count in this run */ FLOAT origin_x; /* baseline X position */ FLOAT origin_y; /* baseline Y position */ + FLOAT align_dx; /* adjustment from text alignment */ + FLOAT width; /* run width */ UINT16 *clustermap; /* effective clustermap, allocated separately, is not reused from nominal map */ UINT32 line; }; @@ -190,6 +192,8 @@ IUnknown *effect; FLOAT origin_x; FLOAT origin_y; + FLOAT align_dx; + FLOAT width; BOOL is_sideways; BOOL is_rtl; UINT32 line; @@ -223,8 +227,6 @@ WCHAR *str; UINT32 len; struct dwrite_textformat_data format; - FLOAT maxwidth; - FLOAT maxheight; struct list strike_ranges; struct list effects; struct list spacing; @@ -245,9 +247,10 @@ FLOAT minwidth; DWRITE_LINE_METRICS *lines; - UINT32 line_count; UINT32 line_alloc; + DWRITE_TEXT_METRICS1 metrics; + /* gdi-compatible layout specifics */ BOOL gdicompatible; FLOAT pixels_per_dip; @@ -329,6 +332,36 @@ run->descr.stringLength); } +static inline HRESULT format_set_textalignment(struct dwrite_textformat_data *format, DWRITE_TEXT_ALIGNMENT alignment, + BOOL *changed) +{ + if ((UINT32)alignment > DWRITE_TEXT_ALIGNMENT_JUSTIFIED) + return E_INVALIDARG; + if (changed) *changed = format->textalignment != alignment; + format->textalignment = alignment; + return S_OK; +} + +static inline HRESULT format_set_paralignment(struct dwrite_textformat_data *format, + DWRITE_PARAGRAPH_ALIGNMENT alignment, BOOL *changed) +{ + if ((UINT32)alignment > DWRITE_PARAGRAPH_ALIGNMENT_CENTER) + return E_INVALIDARG; + if (changed) *changed = format->paralign != alignment; + format->paralign = alignment; + return S_OK; +} + +static inline HRESULT format_set_readingdirection(struct dwrite_textformat_data *format, + DWRITE_READING_DIRECTION direction, BOOL *changed) +{ + if ((UINT32)direction > DWRITE_READING_DIRECTION_BOTTOM_TO_TOP) + return E_INVALIDARG; + if (changed) *changed = format->readingdir != direction; + format->readingdir = direction; + return S_OK; +} + static HRESULT get_fontfallback_from_format(const struct dwrite_textformat_data *format, IDWriteFontFallback **fallback) { *fallback = format->fallback; @@ -423,12 +456,21 @@ return existingbreak; } +/* This helper should be used to get effective range length, in other words it returns number of text + positions from range starting point to the end of the range, limited by layout text length */ +static inline UINT32 get_clipped_range_length(const struct dwrite_textlayout *layout, const struct layout_range *range) +{ + if (range->h.range.startPosition + range->h.range.length <= layout->len) + return range->h.range.length; + return layout->len - range->h.range.startPosition; +} + /* Actual breakpoint data gets updated with break condition required by inline object set for range 'cur'. */ static HRESULT layout_update_breakpoints_range(struct dwrite_textlayout *layout, const struct layout_range *cur) { DWRITE_BREAK_CONDITION before, after; + UINT32 i, length; HRESULT hr; - UINT32 i; /* ignore returned conditions if failed */ hr = IDWriteInlineObject_GetBreakConditions(cur->object, &before, &after); @@ -442,7 +484,8 @@ memcpy(layout->actual_breakpoints, layout->nominal_breakpoints, sizeof(DWRITE_LINE_BREAKPOINT)*layout->len); } - for (i = cur->h.range.startPosition; i < cur->h.range.length + cur->h.range.startPosition; i++) { + length = get_clipped_range_length(layout, cur); + for (i = cur->h.range.startPosition; i < length + cur->h.range.startPosition; i++) { /* for first codepoint check if there's anything before it and update accordingly */ if (i == cur->h.range.startPosition) { if (i > 0) @@ -453,7 +496,7 @@ layout->actual_breakpoints[i].breakConditionAfter = DWRITE_BREAK_CONDITION_MAY_NOT_BREAK; } /* similar check for last codepoint */ - else if (i == cur->h.range.startPosition + cur->h.range.length - 1) { + else if (i == cur->h.range.startPosition + length - 1) { if (i == layout->len - 1) layout->actual_breakpoints[i].breakConditionAfter = after; else @@ -568,15 +611,6 @@ } } -/* This helper should be used to get effective range length, in other words it returns number of text - positions from range starting point to the end of the range, limited by layout text length */ -static inline UINT32 get_clipped_range_length(const struct dwrite_textlayout *layout, const struct layout_range *range) -{ - if (range->h.range.startPosition + range->h.range.length <= layout->len) - return range->h.range.length; - return layout->len - range->h.range.startPosition; -} - static inline FLOAT get_scaled_font_metric(UINT32 metric, FLOAT emSize, const DWRITE_FONT_METRICS *metrics) { return (FLOAT)metric * emSize / (FLOAT)metrics->designUnitsPerEm; @@ -824,8 +858,11 @@ break; } - if (hr == S_OK) + if (hr == S_OK) { layout->cluster_count = cluster; + if (cluster) + layout->clustermetrics[cluster-1].canWrapLineAfter = TRUE; + } IDWriteTextAnalyzer_Release(analyzer); return hr; @@ -905,11 +942,17 @@ return ((struct layout_range_effect*)h)->effect; } +static inline BOOL layout_is_erun_rtl(const struct layout_effective_run *erun) +{ + return erun->run->u.regular.run.bidiLevel & 1; +} + /* Effective run is built from consecutive clusters of a single nominal run, 'first_cluster' is 0 based cluster index, 'cluster_count' indicates how many clusters to add, including first one. */ static HRESULT layout_add_effective_run(struct dwrite_textlayout *layout, const struct layout_run *r, UINT32 first_cluster, UINT32 cluster_count, UINT32 line, FLOAT origin_x, BOOL strikethrough) { + BOOL is_rtl = layout->format.readingdir == DWRITE_READING_DIRECTION_RIGHT_TO_LEFT; UINT32 i, start, length, last_cluster; struct layout_effective_run *run; @@ -921,8 +964,11 @@ return E_OUTOFMEMORY; inlineobject->object = r->u.object.object; - inlineobject->origin_x = origin_x; - inlineobject->origin_y = 0.0; /* FIXME */ + inlineobject->width = get_cluster_range_width(layout, first_cluster, first_cluster + cluster_count); + inlineobject->origin_x = is_rtl ? origin_x - inlineobject->width : origin_x; + inlineobject->origin_y = 0.0; /* set after line is built */ + inlineobject->align_dx = 0.0; + /* It's not clear how these two are set, possibly directionality is derived from surrounding text (replaced text could have different ranges which differ in reading direction). */ @@ -956,8 +1002,17 @@ run->run = r; run->start = start = layout->clusters[first_cluster].position; run->length = length; - run->origin_x = origin_x; + run->width = get_cluster_range_width(layout, first_cluster, first_cluster + cluster_count); + + /* Check if run direction matches paragraph direction, if it doesn't adjust by + run width */ + if (layout_is_erun_rtl(run) ^ is_rtl) + run->origin_x = is_rtl ? origin_x - run->width : origin_x + run->width; + else + run->origin_x = origin_x; + run->origin_y = 0.0; /* set after line is built */ + run->align_dx = 0.0; run->line = line; if (r->u.regular.run.glyphCount) { @@ -1024,7 +1079,7 @@ return E_OUTOFMEMORY; } - if (layout->line_count == layout->line_alloc) { + if (layout->metrics.lineCount == layout->line_alloc) { DWRITE_LINE_METRICS *l = heap_realloc(layout->lines, layout->line_alloc*2*sizeof(*layout->lines)); if (!l) return E_OUTOFMEMORY; @@ -1033,6 +1088,7 @@ } layout->lines[*line] = *metrics; + layout->metrics.lineCount += 1; *line += 1; return S_OK; } @@ -1071,8 +1127,180 @@ return LIST_ENTRY(e, struct layout_effective_inline, entry); } +static FLOAT layout_get_line_width(struct dwrite_textlayout *layout, + struct layout_effective_run *erun, struct layout_effective_inline *inrun, UINT32 line) +{ + FLOAT width = 0.0; + + while (erun && erun->line == line) { + width += erun->width; + erun = layout_get_next_erun(layout, erun); + if (!erun) + break; + } + + while (inrun && inrun->line == line) { + width += inrun->width; + inrun = layout_get_next_inline_run(layout, inrun); + if (!inrun) + break; + } + + return width; +} + +static void layout_apply_leading_alignment(struct dwrite_textlayout *layout) +{ + BOOL is_rtl = layout->format.readingdir == DWRITE_READING_DIRECTION_RIGHT_TO_LEFT; + struct layout_effective_inline *inrun; + struct layout_effective_run *erun; + + erun = layout_get_next_erun(layout, NULL); + inrun = layout_get_next_inline_run(layout, NULL); + + while (erun) { + erun->align_dx = 0.0; + erun = layout_get_next_erun(layout, erun); + } + + while (inrun) { + inrun->align_dx = 0.0; + inrun = layout_get_next_inline_run(layout, inrun); + } + + layout->metrics.left = is_rtl ? layout->metrics.layoutWidth - layout->metrics.width : 0.0; +} + +static void layout_apply_trailing_alignment(struct dwrite_textlayout *layout) +{ + BOOL is_rtl = layout->format.readingdir == DWRITE_READING_DIRECTION_RIGHT_TO_LEFT; + struct layout_effective_inline *inrun; + struct layout_effective_run *erun; + UINT32 line; + + erun = layout_get_next_erun(layout, NULL); + inrun = layout_get_next_inline_run(layout, NULL); + + for (line = 0; line < layout->metrics.lineCount; line++) { + FLOAT width = layout_get_line_width(layout, erun, inrun, line); + FLOAT shift = layout->metrics.layoutWidth - width; + + if (is_rtl) + shift *= -1.0; + + while (erun && erun->line == line) { + erun->align_dx = shift; + erun = layout_get_next_erun(layout, erun); + } + + while (inrun && inrun->line == line) { + inrun->align_dx = shift; + inrun = layout_get_next_inline_run(layout, inrun); + } + } + + layout->metrics.left = is_rtl ? 0.0 : layout->metrics.layoutWidth - layout->metrics.width; +} + +static void layout_apply_centered_alignment(struct dwrite_textlayout *layout) +{ + BOOL is_rtl = layout->format.readingdir == DWRITE_READING_DIRECTION_RIGHT_TO_LEFT; + struct layout_effective_inline *inrun; + struct layout_effective_run *erun; + UINT32 line; + + erun = layout_get_next_erun(layout, NULL); + inrun = layout_get_next_inline_run(layout, NULL); + + for (line = 0; line < layout->metrics.lineCount; line++) { + FLOAT width = layout_get_line_width(layout, erun, inrun, line); + FLOAT shift = (layout->metrics.layoutWidth - width) / 2.0; + + if (is_rtl) + shift *= -1.0; + + while (erun && erun->line == line) { + erun->align_dx = shift; + erun = layout_get_next_erun(layout, erun); + } + + while (inrun && inrun->line == line) { + inrun->align_dx = shift; + inrun = layout_get_next_inline_run(layout, inrun); + } + } + + layout->metrics.left = (layout->metrics.layoutWidth - layout->metrics.width) / 2.0; +} + +static void layout_apply_text_alignment(struct dwrite_textlayout *layout) +{ + switch (layout->format.textalignment) + { + case DWRITE_TEXT_ALIGNMENT_LEADING: + layout_apply_leading_alignment(layout); + break; + case DWRITE_TEXT_ALIGNMENT_TRAILING: + layout_apply_trailing_alignment(layout); + break; + case DWRITE_TEXT_ALIGNMENT_CENTER: + layout_apply_centered_alignment(layout); + break; + case DWRITE_TEXT_ALIGNMENT_JUSTIFIED: + FIXME("alignment %d not implemented\n", layout->format.textalignment); + break; + default: + ; + } +} + +static void layout_apply_par_alignment(struct dwrite_textlayout *layout) +{ + struct layout_effective_inline *inrun; + struct layout_effective_run *erun; + FLOAT origin_y = 0.0; + UINT32 line; + + /* alignment mode defines origin, after that all run origins are updated + the same way */ + + switch (layout->format.paralign) + { + case DWRITE_PARAGRAPH_ALIGNMENT_NEAR: + origin_y = 0.0; + break; + case DWRITE_PARAGRAPH_ALIGNMENT_FAR: + origin_y = layout->metrics.layoutHeight - layout->metrics.height; + break; + case DWRITE_PARAGRAPH_ALIGNMENT_CENTER: + origin_y = (layout->metrics.layoutHeight - layout->metrics.height) / 2.0; + break; + default: + ; + } + + layout->metrics.top = origin_y; + + erun = layout_get_next_erun(layout, NULL); + inrun = layout_get_next_inline_run(layout, NULL); + for (line = 0; line < layout->metrics.lineCount; line++) { + origin_y += layout->lines[line].baseline; + + while (erun && erun->line == line) { + erun->origin_y = origin_y; + erun = layout_get_next_erun(layout, erun); + } + + while (inrun && inrun->line == line) { + inrun->origin_y = origin_y; + inrun = layout_get_next_inline_run(layout, inrun); + } + } +} + static HRESULT layout_compute_effective_runs(struct dwrite_textlayout *layout) { + BOOL is_rtl = layout->format.readingdir == DWRITE_READING_DIRECTION_RIGHT_TO_LEFT; struct layout_effective_inline *inrun; struct layout_effective_run *erun; const struct layout_run *run; @@ -1089,8 +1317,8 @@ if (FAILED(hr)) return hr; - layout->line_count = 0; - origin_x = 0.0; + layout->metrics.lineCount = 0; + origin_x = is_rtl ? layout->metrics.layoutWidth : 0.0; line = 0; run = layout->clusters[0].run; memset(&metrics, 0, sizeof(metrics)); @@ -1107,22 +1335,24 @@ hr = layout_add_effective_run(layout, run, start, i - start, line, origin_x, s[0]); if (FAILED(hr)) return hr; - origin_x += get_cluster_range_width(layout, start, i); + origin_x += is_rtl ? -get_cluster_range_width(layout, start, i) : + get_cluster_range_width(layout, start, i); run = layout->clusters[i].run; start = i; } overflow = layout->clustermetrics[i].canWrapLineAfter && - (width + layout->clustermetrics[i].width > layout->maxwidth); + (width + layout->clustermetrics[i].width > layout->metrics.layoutWidth); /* check if we got new */ if (overflow || layout->clustermetrics[i].isNewline || /* always wrap on new line */ i == layout->cluster_count - 1) /* end of the text */ { UINT32 strlength, last_cluster = i, index; - FLOAT descent; + FLOAT descent, trailingspacewidth; if (!overflow) { + width += layout->clustermetrics[i].width; metrics.length += layout->clustermetrics[i].length; last_cluster = i; } @@ -1130,7 +1360,7 @@ last_cluster = i ? i - 1 : i; if (i >= start) { - hr = layout_add_effective_run(layout, run, start, i - start + 1, line, origin_x, s[0]); + hr = layout_add_effective_run(layout, run, start, last_cluster - start + 1, line, origin_x, s[0]); if (FAILED(hr)) return hr; /* we don't need to update origin for next run as we're going to wrap */ @@ -1140,6 +1370,7 @@ trailing properties for current line */ strlength = metrics.length; index = last_cluster; + trailingspacewidth = 0.0; while (strlength) { DWRITE_CLUSTER_METRICS *cluster = &layout->clustermetrics[index]; @@ -1151,8 +1382,10 @@ metrics.newlineLength += cluster->length; } - if (cluster->isWhitespace) + if (cluster->isWhitespace) { metrics.trailingWhitespaceLength += cluster->length; + trailingspacewidth += cluster->width; + } strlength -= cluster->length; index--; @@ -1179,14 +1412,19 @@ } metrics.height = descent + metrics.baseline; - metrics.isTrimmed = width > layout->maxwidth; + if (width > layout->metrics.widthIncludingTrailingWhitespace) + layout->metrics.widthIncludingTrailingWhitespace = width; + if (width - trailingspacewidth > layout->metrics.width) + layout->metrics.width = width - trailingspacewidth; + + metrics.isTrimmed = width > layout->metrics.layoutWidth; hr = layout_set_line_metrics(layout, &metrics, &line); if (FAILED(hr)) return hr; width = layout->clustermetrics[i].width; memset(&metrics, 0, sizeof(metrics)); - origin_x = 0.0; + origin_x = is_rtl ? layout->metrics.layoutWidth : 0.0; start = i; } else { @@ -1198,14 +1436,17 @@ textpos += layout->clustermetrics[i].length; } - layout->line_count = line; + layout->metrics.left = is_rtl ? layout->metrics.layoutWidth - layout->metrics.width : 0; + layout->metrics.top = 0.0; + layout->metrics.maxBidiReorderingDepth = 1; /* FIXME */ + layout->metrics.height = 0.0; /* Now all line info is here, update effective runs positions in flow direction */ erun = layout_get_next_erun(layout, NULL); inrun = layout_get_next_inline_run(layout, NULL); origin_y = 0.0; - for (line = 0; line < layout->line_count; line++) { + for (line = 0; line < layout->metrics.lineCount; line++) { origin_y += layout->lines[line].baseline; @@ -1213,19 +1454,27 @@ while (erun && erun->line == line) { erun->origin_y = origin_y; erun = layout_get_next_erun(layout, erun); - if (!erun) - break; } /* Same for inline runs */ while (inrun && inrun->line == line) { inrun->origin_y = origin_y; inrun = layout_get_next_inline_run(layout, inrun); - if (!inrun) - break; } + + layout->metrics.height += layout->lines[line].height; } + /* initial alignment is always leading */ + if (layout->format.textalignment != DWRITE_TEXT_ALIGNMENT_LEADING) + layout_apply_text_alignment(layout); + + /* initial paragraph alignment is always near */ + if (layout->format.paralign != DWRITE_PARAGRAPH_ALIGNMENT_NEAR) + layout_apply_par_alignment(layout); + + layout->metrics.heightIncludingTrailingWhitespace = layout->metrics.height; /* FIXME: not true for vertical text */ + layout->recompute &= ~RECOMPUTE_EFFECTIVE_RUNS; return hr; } @@ -1936,14 +2185,12 @@ static HRESULT WINAPI dwritetextlayout_SetTextAlignment(IDWriteTextLayout2 *iface, DWRITE_TEXT_ALIGNMENT alignment) { struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface); - TRACE("(%p)->(%d)\n", This, alignment); return IDWriteTextFormat1_SetTextAlignment(&This->IDWriteTextFormat1_iface, alignment); } static HRESULT WINAPI dwritetextlayout_SetParagraphAlignment(IDWriteTextLayout2 *iface, DWRITE_PARAGRAPH_ALIGNMENT alignment) { struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface); - TRACE("(%p)->(%d)\n", This, alignment); return IDWriteTextFormat1_SetParagraphAlignment(&This->IDWriteTextFormat1_iface, alignment); } @@ -1957,7 +2204,6 @@ static HRESULT WINAPI dwritetextlayout_SetReadingDirection(IDWriteTextLayout2 *iface, DWRITE_READING_DIRECTION direction) { struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface); - TRACE("(%p)->(%d)\n", This, direction); return IDWriteTextFormat1_SetReadingDirection(&This->IDWriteTextFormat1_iface, direction); } @@ -1994,7 +2240,6 @@ static DWRITE_TEXT_ALIGNMENT WINAPI dwritetextlayout_GetTextAlignment(IDWriteTextLayout2 *iface) { struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface); - TRACE("(%p)\n", This); return IDWriteTextFormat1_GetTextAlignment(&This->IDWriteTextFormat1_iface); } @@ -2115,24 +2360,26 @@ static HRESULT WINAPI dwritetextlayout_SetMaxWidth(IDWriteTextLayout2 *iface, FLOAT maxWidth) { struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface); - TRACE("(%p)->(%.1f)\n", This, maxWidth); + + TRACE("(%p)->(%.2f)\n", This, maxWidth); if (maxWidth < 0.0) return E_INVALIDARG; - This->maxwidth = maxWidth; + This->metrics.layoutWidth = maxWidth; return S_OK; } static HRESULT WINAPI dwritetextlayout_SetMaxHeight(IDWriteTextLayout2 *iface, FLOAT maxHeight) { struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface); - TRACE("(%p)->(%.1f)\n", This, maxHeight); + + TRACE("(%p)->(%.2f)\n", This, maxHeight); if (maxHeight < 0.0) return E_INVALIDARG; - This->maxheight = maxHeight; + This->metrics.layoutHeight = maxHeight; return S_OK; } @@ -2294,14 +2541,14 @@ { struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface); TRACE("(%p)\n", This); - return This->maxwidth; + return This->metrics.layoutWidth; } static FLOAT WINAPI dwritetextlayout_GetMaxHeight(IDWriteTextLayout2 *iface) { struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface); TRACE("(%p)\n", This); - return This->maxheight; + return This->metrics.layoutHeight; } static HRESULT WINAPI dwritetextlayout_layout_GetFontCollection(IDWriteTextLayout2 *iface, UINT32 position, @@ -2528,7 +2775,7 @@ /* return value is ignored */ IDWriteTextRenderer_DrawGlyphRun(renderer, context, - run->origin_x + origin_x, + run->origin_x + run->align_dx + origin_x, run->origin_y + origin_y, DWRITE_MEASURING_MODE_NATURAL, &glyph_run, @@ -2540,8 +2787,8 @@ LIST_FOR_EACH_ENTRY(inlineobject, &This->inlineobjects, struct layout_effective_inline, entry) { IDWriteTextRenderer_DrawInlineObject(renderer, context, - inlineobject->origin_x, - inlineobject->origin_y, + inlineobject->origin_x + inlineobject->align_dx + origin_x, + inlineobject->origin_y + origin_y, inlineobject->object, inlineobject->is_sideways, inlineobject->is_rtl, @@ -2576,10 +2823,10 @@ return hr; if (metrics) - memcpy(metrics, This->lines, sizeof(DWRITE_LINE_METRICS)*min(max_count, This->line_count)); + memcpy(metrics, This->lines, sizeof(*metrics)*min(max_count, This->metrics.lineCount)); - *count = This->line_count; - return max_count >= This->line_count ? S_OK : E_NOT_SUFFICIENT_BUFFER; + *count = This->metrics.lineCount; + return max_count >= This->metrics.lineCount ? S_OK : E_NOT_SUFFICIENT_BUFFER; } static HRESULT WINAPI dwritetextlayout_GetMetrics(IDWriteTextLayout2 *iface, DWRITE_TEXT_METRICS *metrics) @@ -2772,8 +3019,16 @@ static HRESULT WINAPI dwritetextlayout2_GetMetrics(IDWriteTextLayout2 *iface, DWRITE_TEXT_METRICS1 *metrics) { struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface); - FIXME("(%p)->(%p): stub\n", This, metrics); - return E_NOTIMPL; + HRESULT hr; + + TRACE("(%p)->(%p)\n", This, metrics); + + hr = layout_compute_effective_runs(This); + if (FAILED(hr)) + return hr; + + *metrics = This->metrics; + return S_OK; } static HRESULT WINAPI dwritetextlayout2_SetVerticalGlyphOrientation(IDWriteTextLayout2 *iface, DWRITE_VERTICAL_GLYPH_ORIENTATION orientation) @@ -2943,15 +3198,39 @@ static HRESULT WINAPI dwritetextformat1_layout_SetTextAlignment(IDWriteTextFormat1 *iface, DWRITE_TEXT_ALIGNMENT alignment) { struct dwrite_textlayout *This = impl_layout_form_IDWriteTextFormat1(iface); - FIXME("(%p)->(%d): stub\n", This, alignment); - return E_NOTIMPL; + BOOL changed; + HRESULT hr; + + TRACE("(%p)->(%d)\n", This, alignment); + + hr = format_set_textalignment(&This->format, alignment, &changed); + if (FAILED(hr)) + return hr; + + /* if layout is not ready there's nothing to align */ + if (changed && !(This->recompute & RECOMPUTE_EFFECTIVE_RUNS)) + layout_apply_text_alignment(This); + + return S_OK; } static HRESULT WINAPI dwritetextformat1_layout_SetParagraphAlignment(IDWriteTextFormat1 *iface, DWRITE_PARAGRAPH_ALIGNMENT alignment) { struct dwrite_textlayout *This = impl_layout_form_IDWriteTextFormat1(iface); - FIXME("(%p)->(%d): stub\n", This, alignment); - return E_NOTIMPL; + BOOL changed; + HRESULT hr; + + TRACE("(%p)->(%d)\n", This, alignment); + + hr = format_set_paralignment(&This->format, alignment, &changed); + if (FAILED(hr)) + return hr; + + /* if layout is not ready there's nothing to align */ + if (changed && !(This->recompute & RECOMPUTE_EFFECTIVE_RUNS)) + layout_apply_par_alignment(This); + + return S_OK; } static HRESULT WINAPI dwritetextformat1_layout_SetWordWrapping(IDWriteTextFormat1 *iface, DWRITE_WORD_WRAPPING wrapping) @@ -2964,8 +3243,19 @@ static HRESULT WINAPI dwritetextformat1_layout_SetReadingDirection(IDWriteTextFormat1 *iface, DWRITE_READING_DIRECTION direction) { struct dwrite_textlayout *This = impl_layout_form_IDWriteTextFormat1(iface); - FIXME("(%p)->(%d): stub\n", This, direction); - return E_NOTIMPL; + BOOL changed; + HRESULT hr; + + TRACE("(%p)->(%d)\n", This, direction); + + hr = format_set_readingdirection(&This->format, direction, &changed); + if (FAILED(hr)) + return hr; + + if (changed) + This->recompute = RECOMPUTE_EVERYTHING; + + return S_OK; } static HRESULT WINAPI dwritetextformat1_layout_SetFlowDirection(IDWriteTextFormat1 *iface, DWRITE_FLOW_DIRECTION direction) @@ -3518,8 +3808,6 @@ layout->IDWriteTextAnalysisSource_iface.lpVtbl = &dwritetextlayoutsourcevtbl; layout->ref = 1; layout->len = len; - layout->maxwidth = maxwidth; - layout->maxheight = maxheight; layout->recompute = RECOMPUTE_EVERYTHING; layout->nominal_breakpoints = NULL; layout->actual_breakpoints = NULL; @@ -3527,7 +3815,6 @@ layout->clustermetrics = NULL; layout->clusters = NULL; layout->lines = NULL; - layout->line_count = 0; layout->line_alloc = 0; layout->minwidth = 0.0; list_init(&layout->eruns); @@ -3539,6 +3826,9 @@ list_init(&layout->effects); list_init(&layout->spacing); memset(&layout->format, 0, sizeof(layout->format)); + memset(&layout->metrics, 0, sizeof(layout->metrics)); + layout->metrics.layoutWidth = maxwidth; + layout->metrics.layoutHeight = maxheight; layout->gdicompatible = FALSE; layout->pixels_per_dip = 0.0; @@ -3817,27 +4107,15 @@ static HRESULT WINAPI dwritetextformat_SetTextAlignment(IDWriteTextFormat1 *iface, DWRITE_TEXT_ALIGNMENT alignment) { struct dwrite_textformat *This = impl_from_IDWriteTextFormat1(iface); - TRACE("(%p)->(%d)\n", This, alignment); - - if ((UINT32)alignment > DWRITE_TEXT_ALIGNMENT_JUSTIFIED) - return E_INVALIDARG; - - This->format.textalignment = alignment; - return S_OK; + return format_set_textalignment(&This->format, alignment, NULL); } static HRESULT WINAPI dwritetextformat_SetParagraphAlignment(IDWriteTextFormat1 *iface, DWRITE_PARAGRAPH_ALIGNMENT alignment) { struct dwrite_textformat *This = impl_from_IDWriteTextFormat1(iface); - TRACE("(%p)->(%d)\n", This, alignment); - - if ((UINT32)alignment > DWRITE_PARAGRAPH_ALIGNMENT_CENTER) - return E_INVALIDARG; - - This->format.paralign = alignment; - return S_OK; + return format_set_paralignment(&This->format, alignment, NULL); } static HRESULT WINAPI dwritetextformat_SetWordWrapping(IDWriteTextFormat1 *iface, DWRITE_WORD_WRAPPING wrapping) @@ -3856,14 +4134,8 @@ static HRESULT WINAPI dwritetextformat_SetReadingDirection(IDWriteTextFormat1 *iface, DWRITE_READING_DIRECTION direction) { struct dwrite_textformat *This = impl_from_IDWriteTextFormat1(iface); - TRACE("(%p)->(%d)\n", This, direction); - - if ((UINT32)direction > DWRITE_READING_DIRECTION_BOTTOM_TO_TOP) - return E_INVALIDARG; - - This->format.readingdir = direction; - return S_OK; + return format_set_readingdirection(&This->format, direction, NULL); } static HRESULT WINAPI dwritetextformat_SetFlowDirection(IDWriteTextFormat1 *iface, DWRITE_FLOW_DIRECTION direction) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dwrite/opentype.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dwrite/opentype.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dwrite/opentype.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dwrite/opentype.c 2015-07-12 05:36:18.000000000 +0000 @@ -238,6 +238,35 @@ TT_NameRecord nameRecord[1]; } TT_NAME_V0; +struct VDMX_Header +{ + WORD version; + WORD numRecs; + WORD numRatios; +}; + +struct VDMX_Ratio +{ + BYTE bCharSet; + BYTE xRatio; + BYTE yStartRatio; + BYTE yEndRatio; +}; + +struct VDMX_group +{ + WORD recs; + BYTE startsz; + BYTE endsz; +}; + +struct VDMX_vTable +{ + WORD yPelHeight; + SHORT yMax; + SHORT yMin; +}; + typedef struct { CHAR FeatureTag[4]; WORD Feature; @@ -954,7 +983,7 @@ } void opentype_get_font_properties(IDWriteFontFileStream *stream, DWRITE_FONT_FACE_TYPE type, UINT32 index, - DWRITE_FONT_STRETCH *stretch, DWRITE_FONT_WEIGHT *weight, DWRITE_FONT_STYLE *style) + struct dwrite_font_props *props) { void *os2_context, *head_context; const TT_OS2_V2 *tt_os2; @@ -964,23 +993,26 @@ opentype_get_font_table(stream, type, index, MS_HEAD_TAG, (const void**)&tt_head, &head_context, NULL, NULL); /* default stretch, weight and style to normal */ - *stretch = DWRITE_FONT_STRETCH_NORMAL; - *weight = DWRITE_FONT_WEIGHT_NORMAL; - *style = DWRITE_FONT_STYLE_NORMAL; + props->stretch = DWRITE_FONT_STRETCH_NORMAL; + props->weight = DWRITE_FONT_WEIGHT_NORMAL; + props->style = DWRITE_FONT_STYLE_NORMAL; + memset(&props->panose, 0, sizeof(props->panose)); /* DWRITE_FONT_STRETCH enumeration values directly match font data values */ if (tt_os2) { if (GET_BE_WORD(tt_os2->usWidthClass) <= DWRITE_FONT_STRETCH_ULTRA_EXPANDED) - *stretch = GET_BE_WORD(tt_os2->usWidthClass); + props->stretch = GET_BE_WORD(tt_os2->usWidthClass); - *weight = GET_BE_WORD(tt_os2->usWeightClass); - TRACE("stretch=%d, weight=%d\n", *stretch, *weight); + props->weight = GET_BE_WORD(tt_os2->usWeightClass); + memcpy(&props->panose, &tt_os2->panose, sizeof(props->panose)); + + TRACE("stretch=%d, weight=%d\n", props->stretch, props->weight); } if (tt_head) { USHORT macStyle = GET_BE_WORD(tt_head->macStyle); if (macStyle & 0x0002) - *style = DWRITE_FONT_STYLE_ITALIC; + props->style = DWRITE_FONT_STYLE_ITALIC; } if (tt_os2) @@ -1285,3 +1317,63 @@ return *count > max_tagcount ? E_NOT_SUFFICIENT_BUFFER : S_OK; } + +static const struct VDMX_group *find_vdmx_group(const struct VDMX_Header *hdr) +{ + WORD num_ratios, i, group_offset = 0; + struct VDMX_Ratio *ratios = (struct VDMX_Ratio*)(hdr + 1); + BYTE dev_x_ratio = 1, dev_y_ratio = 1; + + num_ratios = GET_BE_WORD(hdr->numRatios); + + for (i = 0; i < num_ratios; i++) { + + if (!ratios[i].bCharSet) continue; + + if ((ratios[i].xRatio == 0 && ratios[i].yStartRatio == 0 && + ratios[i].yEndRatio == 0) || + (ratios[i].xRatio == dev_x_ratio && ratios[i].yStartRatio <= dev_y_ratio && + ratios[i].yEndRatio >= dev_y_ratio)) + { + group_offset = GET_BE_WORD(*((WORD *)(ratios + num_ratios) + i)); + break; + } + } + if (group_offset) + return (const struct VDMX_group *)((BYTE *)hdr + group_offset); + return NULL; +} + +BOOL opentype_get_vdmx_size(const void *data, INT emsize, UINT16 *ascent, UINT16 *descent) +{ + const struct VDMX_Header *hdr = (const struct VDMX_Header*)data; + const struct VDMX_group *group = find_vdmx_group(hdr); + const struct VDMX_vTable *tables; + WORD recs, i; + + if (!data) + return FALSE; + + group = find_vdmx_group(hdr); + if (!group) + return FALSE; + + recs = GET_BE_WORD(group->recs); + if (emsize < group->startsz || emsize >= group->endsz) return FALSE; + + tables = (const struct VDMX_vTable *)(group + 1); + for (i = 0; i < recs; i++) { + WORD ppem = GET_BE_WORD(tables[i].yPelHeight); + if (ppem > emsize) { + FIXME("interpolate %d\n", emsize); + return FALSE; + } + + if (ppem == emsize) { + *ascent = (SHORT)GET_BE_WORD(tables[i].yMax); + *descent = -(SHORT)GET_BE_WORD(tables[i].yMin); + return TRUE; + } + } + return FALSE; +} diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dwrite/tests/font.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dwrite/tests/font.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dwrite/tests/font.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dwrite/tests/font.c 2015-07-12 05:36:18.000000000 +0000 @@ -19,9 +19,12 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include + #define COBJMACROS #include "windows.h" +#include "winternl.h" #include "dwrite_2.h" #include "initguid.h" #include "d2d1.h" @@ -33,6 +36,7 @@ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24)) #define MS_CMAP_TAG MS_MAKE_TAG('c','m','a','p') +#define MS_VDMX_TAG MS_MAKE_TAG('V','D','M','X') #define EXPECT_HR(hr,hr_exp) \ ok(hr == hr_exp, "got 0x%08x, expected 0x%08x\n", hr, hr_exp) @@ -87,6 +91,7 @@ static const WCHAR test_fontfile[] = {'w','i','n','e','_','t','e','s','t','_','f','o','n','t','.','t','t','f',0}; static const WCHAR tahomaW[] = {'T','a','h','o','m','a',0}; +static const WCHAR arialW[] = {'A','r','i','a','l',0}; static const WCHAR tahomaUppercaseW[] = {'T','A','H','O','M','A',0}; static const WCHAR tahomaStrangecaseW[] = {'t','A','h','O','m','A',0}; static const WCHAR blahW[] = {'B','l','a','h','!',0}; @@ -2255,11 +2260,11 @@ DELETE_FONTFILE(path); } -static IDWriteFont *get_tahoma_instance(IDWriteFactory *factory, DWRITE_FONT_STYLE style) +static IDWriteFont *get_font(IDWriteFactory *factory, const WCHAR *name, DWRITE_FONT_STYLE style) { IDWriteFontCollection *collection; IDWriteFontFamily *family; - IDWriteFont *font; + IDWriteFont *font = NULL; UINT32 index; BOOL exists; HRESULT hr; @@ -2269,9 +2274,9 @@ index = ~0; exists = FALSE; - hr = IDWriteFontCollection_FindFamilyName(collection, tahomaW, &index, &exists); + hr = IDWriteFontCollection_FindFamilyName(collection, name, &index, &exists); ok(hr == S_OK, "got 0x%08x\n", hr); - ok(exists, "got %d\n", exists); + if (!exists) goto not_found; hr = IDWriteFontCollection_GetFontFamily(collection, index, &family); ok(hr == S_OK, "got 0x%08x\n", hr); @@ -2281,10 +2286,18 @@ ok(hr == S_OK, "got 0x%08x\n", hr); IDWriteFontFamily_Release(family); +not_found: IDWriteFontCollection_Release(collection); return font; } +static IDWriteFont *get_tahoma_instance(IDWriteFactory *factory, DWRITE_FONT_STYLE style) +{ + IDWriteFont *font = get_font(factory, tahomaW, style); + ok(font != NULL, "failed to get Tahoma\n"); + return font; +} + static void test_GetFirstMatchingFont(void) { DWRITE_FONT_SIMULATIONS simulations; @@ -3418,6 +3431,399 @@ IDWriteFactory_Release(factory); } +#define round(x) ((int)floor((x) + 0.5)) + +struct VDMX_Header +{ + WORD version; + WORD numRecs; + WORD numRatios; +}; + +struct VDMX_Ratio +{ + BYTE bCharSet; + BYTE xRatio; + BYTE yStartRatio; + BYTE yEndRatio; +}; + +struct VDMX_group +{ + WORD recs; + BYTE startsz; + BYTE endsz; +}; + +struct VDMX_vTable +{ + WORD yPelHeight; + SHORT yMax; + SHORT yMin; +}; + +#ifdef WORDS_BIGENDIAN +#define GET_BE_WORD(x) (x) +#else +#define GET_BE_WORD(x) RtlUshortByteSwap(x) +#endif + +static const struct VDMX_group *find_vdmx_group(const struct VDMX_Header *hdr) +{ + WORD num_ratios, i, group_offset = 0; + struct VDMX_Ratio *ratios = (struct VDMX_Ratio*)(hdr + 1); + BYTE dev_x_ratio = 1, dev_y_ratio = 1; + + num_ratios = GET_BE_WORD(hdr->numRatios); + + for (i = 0; i < num_ratios; i++) + { + if (!ratios[i].bCharSet) continue; + + if ((ratios[i].xRatio == 0 && ratios[i].yStartRatio == 0 && + ratios[i].yEndRatio == 0) || + (ratios[i].xRatio == dev_x_ratio && ratios[i].yStartRatio <= dev_y_ratio && + ratios[i].yEndRatio >= dev_y_ratio)) + { + group_offset = GET_BE_WORD(*((WORD *)(ratios + num_ratios) + i)); + break; + } + } + if (group_offset) + return (const struct VDMX_group *)((BYTE *)hdr + group_offset); + return NULL; +} + +static BOOL get_vdmx_size(const struct VDMX_group *group, int emsize, int *a, int *d) +{ + WORD recs, i; + const struct VDMX_vTable *tables; + + if (!group) return FALSE; + + recs = GET_BE_WORD(group->recs); + if (emsize < group->startsz || emsize >= group->endsz) return FALSE; + + tables = (const struct VDMX_vTable *)(group + 1); + for (i = 0; i < recs; i++) + { + WORD ppem = GET_BE_WORD(tables[i].yPelHeight); + if (ppem > emsize) + { + /* FIXME: Supposed to interpolate */ + trace("FIXME interpolate %d\n", emsize); + return FALSE; + } + + if (ppem == emsize) + { + *a = (SHORT)GET_BE_WORD(tables[i].yMax); + *d = -(SHORT)GET_BE_WORD(tables[i].yMin); + return TRUE; + } + } + return FALSE; +} + +static void test_metrics_cmp(FLOAT emsize, const DWRITE_FONT_METRICS *metrics, const DWRITE_FONT_METRICS1 *expected) +{ + ok(metrics->designUnitsPerEm == expected->designUnitsPerEm, "%.2f: emsize: got %u expect %u\n", + emsize, metrics->designUnitsPerEm, expected->designUnitsPerEm); + ok(metrics->ascent == expected->ascent, "%.2f a: got %u expect %u\n", + emsize, metrics->ascent, expected->ascent); + ok(metrics->descent == expected->descent, "%.2f d: got %u expect %u\n", + emsize, metrics->descent, expected->descent); + ok(metrics->lineGap == expected->lineGap, "%.2f lg: got %d expect %d\n", + emsize, metrics->lineGap, expected->lineGap); + ok(metrics->capHeight == expected->capHeight, "%.2f capH: got %u expect %u\n", + emsize, metrics->capHeight, expected->capHeight); + ok(metrics->xHeight == expected->xHeight, "%.2f xH: got %u expect %u\n", + emsize, metrics->xHeight, expected->xHeight); + ok(metrics->underlinePosition == expected->underlinePosition, "%.2f ulP: got %d expect %d\n", + emsize, metrics->underlinePosition, expected->underlinePosition); + ok(metrics->underlineThickness == expected->underlineThickness, "%.2f ulTh: got %u expect %u\n", + emsize, metrics->underlineThickness, expected->underlineThickness); + ok(metrics->strikethroughPosition == expected->strikethroughPosition, "%.2f stP: got %d expect %d\n", + emsize, metrics->strikethroughPosition, expected->strikethroughPosition); + ok(metrics->strikethroughThickness == expected->strikethroughThickness, "%.2f stTh: got %u expect %u\n", + emsize, metrics->strikethroughThickness, expected->strikethroughThickness); +} + +static void test_metrics1_cmp(FLOAT emsize, const DWRITE_FONT_METRICS1 *metrics, const DWRITE_FONT_METRICS1 *expected) +{ + ok(metrics->designUnitsPerEm == expected->designUnitsPerEm, "%.2f: emsize: got %u expect %u\n", + emsize, metrics->designUnitsPerEm, expected->designUnitsPerEm); + ok(metrics->ascent == expected->ascent, "%.2f a: got %u expect %u\n", + emsize, metrics->ascent, expected->ascent); + ok(metrics->descent == expected->descent, "%.2f d: got %u expect %u\n", + emsize, metrics->descent, expected->descent); + ok(metrics->lineGap == expected->lineGap, "%.2f lg: got %d expect %d\n", + emsize, metrics->lineGap, expected->lineGap); + ok(metrics->capHeight == expected->capHeight, "%.2f capH: got %u expect %u\n", + emsize, metrics->capHeight, expected->capHeight); + ok(metrics->xHeight == expected->xHeight, "%.2f xH: got %u expect %u\n", + emsize, metrics->xHeight, expected->xHeight); + ok(metrics->underlinePosition == expected->underlinePosition, "%.2f ulP: got %d expect %d\n", + emsize, metrics->underlinePosition, expected->underlinePosition); + ok(metrics->underlineThickness == expected->underlineThickness, "%.2f ulTh: got %u expect %u\n", + emsize, metrics->underlineThickness, expected->underlineThickness); + ok(metrics->strikethroughPosition == expected->strikethroughPosition, "%.2f stP: got %d expect %d\n", + emsize, metrics->strikethroughPosition, expected->strikethroughPosition); + ok(metrics->strikethroughThickness == expected->strikethroughThickness, "%.2f stTh: got %u expect %u\n", + emsize, metrics->strikethroughThickness, expected->strikethroughThickness); + ok(metrics->glyphBoxLeft == expected->glyphBoxLeft, "%.2f box left: got %d expect %d\n", + emsize, metrics->glyphBoxLeft, expected->glyphBoxLeft); +if (0) { /* this is not consistent */ + ok(metrics->glyphBoxTop == expected->glyphBoxTop, "%.2f box top: got %d expect %d\n", + emsize, metrics->glyphBoxTop, expected->glyphBoxTop); + ok(metrics->glyphBoxRight == expected->glyphBoxRight, "%.2f box right: got %d expect %d\n", + emsize, metrics->glyphBoxRight, expected->glyphBoxRight); +} + ok(metrics->glyphBoxBottom == expected->glyphBoxBottom, "%.2f box bottom: got %d expect %d\n", + emsize, metrics->glyphBoxBottom, expected->glyphBoxBottom); + ok(metrics->subscriptPositionX == expected->subscriptPositionX, "%.2f subX: got %d expect %d\n", + emsize, metrics->subscriptPositionX, expected->subscriptPositionX); + ok(metrics->subscriptPositionY == expected->subscriptPositionY, "%.2f subY: got %d expect %d\n", + emsize, metrics->subscriptPositionY, expected->subscriptPositionY); + ok(metrics->subscriptSizeX == expected->subscriptSizeX, "%.2f subsizeX: got %d expect %d\n", + emsize, metrics->subscriptSizeX, expected->subscriptSizeX); + ok(metrics->subscriptPositionY == expected->subscriptPositionY, "%.2f subsizeY: got %d expect %d\n", + emsize, metrics->subscriptSizeY, expected->subscriptSizeY); + ok(metrics->superscriptPositionX == expected->superscriptPositionX, "%.2f supX: got %d expect %d\n", + emsize, metrics->superscriptPositionX, expected->superscriptPositionX); +if (0) + ok(metrics->superscriptPositionY == expected->superscriptPositionY, "%.2f supY: got %d expect %d\n", + emsize, metrics->superscriptPositionY, expected->superscriptPositionY); + ok(metrics->superscriptSizeX == expected->superscriptSizeX, "%.2f supsizeX: got %d expect %d\n", + emsize, metrics->superscriptSizeX, expected->superscriptSizeX); + ok(metrics->superscriptSizeY == expected->superscriptSizeY, "%.2f supsizeY: got %d expect %d\n", + emsize, metrics->superscriptSizeY, expected->superscriptSizeY); + ok(metrics->hasTypographicMetrics == expected->hasTypographicMetrics, "%.2f hastypo: got %d expect %d\n", + emsize, metrics->hasTypographicMetrics, expected->hasTypographicMetrics); +} + +static void test_GetGdiCompatibleMetrics_face(IDWriteFontFace *face) +{ + IDWriteFontFace1 *fontface1 = NULL; + HRESULT hr; + DWRITE_FONT_METRICS design_metrics, comp_metrics; + DWRITE_FONT_METRICS1 design_metrics1, expected; + FLOAT emsize, scale; + int ascent, descent; + const struct VDMX_Header *vdmx; + UINT32 vdmx_len; + void *vdmx_ctx; + BOOL exists; + const struct VDMX_group *vdmx_group = NULL; + DWRITE_MATRIX m; + + hr = IDWriteFontFace_QueryInterface(face, &IID_IDWriteFontFace1, (void**)&fontface1); + if (hr != S_OK) + win_skip("gdi compatible DWRITE_FONT_METRICS1 are not supported.\n"); + + if (fontface1) { + IDWriteFontFace1_GetMetrics(fontface1, &design_metrics1); + memcpy(&design_metrics, &design_metrics1, sizeof(design_metrics)); + } + else + IDWriteFontFace_GetMetrics(face, &design_metrics); + + hr = IDWriteFontFace_TryGetFontTable(face, MS_VDMX_TAG, (const void **)&vdmx, + &vdmx_len, &vdmx_ctx, &exists); + if (hr != S_OK || !exists) + vdmx = NULL; + else + vdmx_group = find_vdmx_group(vdmx); + + /* zero pixels per dip */ + memset(&comp_metrics, 0xcc, sizeof(comp_metrics)); + memset(&expected, 0, sizeof(expected)); + hr = IDWriteFontFace_GetGdiCompatibleMetrics(face, 5.0, 0.0, NULL, &comp_metrics); + ok(hr == E_INVALIDARG, "got %08x\n", hr); + test_metrics_cmp(5.0, &comp_metrics, &expected); + + memset(&comp_metrics, 0xcc, sizeof(comp_metrics)); + hr = IDWriteFontFace_GetGdiCompatibleMetrics(face, 5.0, -1.0, NULL, &comp_metrics); + ok(hr == E_INVALIDARG, "got %08x\n", hr); + test_metrics_cmp(5.0, &comp_metrics, &expected); + + memset(&m, 0, sizeof(m)); + /* zero matrix m22 */ + m.m22 = 1.0; + hr = IDWriteFontFace_GetGdiCompatibleMetrics(face, 5.0, 1.0, NULL, (DWRITE_FONT_METRICS*)&expected); + ok(hr == S_OK, "got %08x\n", hr); + hr = IDWriteFontFace_GetGdiCompatibleMetrics(face, 5.0, 1.0, &m, &comp_metrics); + ok(hr == S_OK, "got %08x\n", hr); + test_metrics_cmp(5.0, &comp_metrics, &expected); + + m.m22 = -1.0; + hr = IDWriteFontFace_GetGdiCompatibleMetrics(face, 5.0, 1.0, &m, &comp_metrics); + ok(hr == S_OK, "got %08x\n", hr); + test_metrics_cmp(5.0, &comp_metrics, &expected); + + /* pixels per dip == 2 */ + hr = IDWriteFontFace_GetGdiCompatibleMetrics(face, 10.0, 1.0, NULL, (DWRITE_FONT_METRICS*)&expected); + ok(hr == S_OK, "got %08x\n", hr); + hr = IDWriteFontFace_GetGdiCompatibleMetrics(face, 5.0, 2.0, NULL, &comp_metrics); + ok(hr == S_OK, "got %08x\n", hr); + test_metrics_cmp(5.0, &comp_metrics, &expected); + + /* pixels per dip == 2, m22 == 3.0 */ + hr = IDWriteFontFace_GetGdiCompatibleMetrics(face, 30.0, 1.0, NULL, (DWRITE_FONT_METRICS*)&expected); + ok(hr == S_OK, "got %08x\n", hr); + + m.m22 = 3.0; + hr = IDWriteFontFace_GetGdiCompatibleMetrics(face, 5.0, 2.0, &m, &comp_metrics); + ok(hr == S_OK, "got %08x\n", hr); + test_metrics_cmp(5.0, &comp_metrics, &expected); + m.m22 = -3.0; + hr = IDWriteFontFace_GetGdiCompatibleMetrics(face, 5.0, 2.0, &m, &comp_metrics); + ok(hr == S_OK, "got %08x\n", hr); + test_metrics_cmp(5.0, &comp_metrics, &expected); + + for (emsize = 5; emsize <= design_metrics.designUnitsPerEm; emsize++) + { + DWRITE_FONT_METRICS1 comp_metrics1, expected; + + if (fontface1) { + hr = IDWriteFontFace1_GetGdiCompatibleMetrics(fontface1, emsize, 1.0, NULL, &comp_metrics1); + ok(hr == S_OK, "got %08x\n", hr); + } + else { + hr = IDWriteFontFace_GetGdiCompatibleMetrics(face, emsize, 1.0, NULL, &comp_metrics); + ok(hr == S_OK, "got %08x\n", hr); + } + + scale = emsize / design_metrics.designUnitsPerEm; + if (!get_vdmx_size(vdmx_group, emsize, &ascent, &descent)) + { + ascent = round(design_metrics.ascent * scale); + descent = round(design_metrics.descent * scale); + } + + expected.designUnitsPerEm = design_metrics.designUnitsPerEm; + expected.ascent = round(ascent / scale ); + expected.descent = round(descent / scale ); + expected.lineGap = round(round(design_metrics.lineGap * scale) / scale); + expected.capHeight = round(round(design_metrics.capHeight * scale) / scale); + expected.xHeight = round(round(design_metrics.xHeight * scale) / scale); + expected.underlinePosition = round(round(design_metrics.underlinePosition * scale) / scale); + expected.underlineThickness = round(round(design_metrics.underlineThickness * scale) / scale); + expected.strikethroughPosition = round(round(design_metrics.strikethroughPosition * scale) / scale); + expected.strikethroughThickness = round(round(design_metrics.strikethroughThickness * scale) / scale); + + if (fontface1) { + expected.glyphBoxLeft = round(round(design_metrics1.glyphBoxLeft * scale) / scale); + + if (0) { /* those two fail on Tahoma and Win7 */ + expected.glyphBoxTop = round(round(design_metrics1.glyphBoxTop * scale) / scale); + expected.glyphBoxRight = round(round(design_metrics1.glyphBoxRight * scale) / scale); + } + expected.glyphBoxBottom = round(round(design_metrics1.glyphBoxBottom * scale) / scale); + expected.subscriptPositionX = round(round(design_metrics1.subscriptPositionX * scale) / scale); + expected.subscriptPositionY = round(round(design_metrics1.subscriptPositionY * scale) / scale); + expected.subscriptSizeX = round(round(design_metrics1.subscriptSizeX * scale) / scale); + expected.subscriptSizeY = round(round(design_metrics1.subscriptSizeY * scale) / scale); + expected.superscriptPositionX = round(round(design_metrics1.superscriptPositionX * scale) / scale); + if (0) /* this fails for 3 emsizes, Tahoma from [5, 2048] range */ + expected.superscriptPositionY = round(round(design_metrics1.superscriptPositionY * scale) / scale); + expected.superscriptSizeX = round(round(design_metrics1.superscriptSizeX * scale) / scale); + expected.superscriptSizeY = round(round(design_metrics1.superscriptSizeY * scale) / scale); + expected.hasTypographicMetrics = design_metrics1.hasTypographicMetrics; + + test_metrics1_cmp(emsize, &comp_metrics1, &expected); + } + else + test_metrics_cmp(emsize, &comp_metrics, &expected); + + } + + if (fontface1) + IDWriteFontFace1_Release(fontface1); + if (vdmx) IDWriteFontFace_ReleaseFontTable(face, vdmx_ctx); +} + +static void test_GetGdiCompatibleMetrics(void) +{ + IDWriteFactory *factory; + IDWriteFont *font; + IDWriteFontFace *fontface; + HRESULT hr; + + factory = create_factory(); + + font = get_font(factory, tahomaW, DWRITE_FONT_STYLE_NORMAL); + hr = IDWriteFont_CreateFontFace(font, &fontface); + ok(hr == S_OK, "got 0x%08x\n", hr); + IDWriteFont_Release(font); + test_GetGdiCompatibleMetrics_face(fontface); + IDWriteFontFace_Release(fontface); + + font = get_font(factory, arialW, DWRITE_FONT_STYLE_NORMAL); + if (!font) + skip("Skipping tests with Arial\n"); + else + { + hr = IDWriteFont_CreateFontFace(font, &fontface); + ok(hr == S_OK, "got 0x%08x\n", hr); + IDWriteFont_Release(font); + + test_GetGdiCompatibleMetrics_face(fontface); + IDWriteFontFace_Release(fontface); + } + + IDWriteFactory_Release(factory); +} + +static void test_GetPanose(void) +{ + IDWriteFactory *factory; + IDWriteFont1 *font1; + IDWriteFont *font; + HRESULT hr; + + factory = create_factory(); + font = get_tahoma_instance(factory, DWRITE_FONT_STYLE_NORMAL); + + hr = IDWriteFont_QueryInterface(font, &IID_IDWriteFont1, (void**)&font1); + IDWriteFont_Release(font); + if (hr == S_OK) { + DWRITE_PANOSE panose; + + if (0) /* crashes on native */ + IDWriteFont1_GetPanose(font1, NULL); + + memset(&panose, 0, sizeof(panose)); + IDWriteFont1_GetPanose(font1, &panose); + ok(panose.familyKind == DWRITE_PANOSE_FAMILY_TEXT_DISPLAY, + "got %u\n", panose.familyKind); + ok(panose.text.serifStyle == DWRITE_PANOSE_SERIF_STYLE_NORMAL_SANS, + "got %u\n", panose.text.serifStyle); + ok(panose.text.weight == DWRITE_PANOSE_WEIGHT_MEDIUM, + "got %u\n", panose.text.weight); + ok(panose.text.proportion == DWRITE_PANOSE_PROPORTION_EVEN_WIDTH, + "got %u\n", panose.text.proportion); + ok(panose.text.contrast == DWRITE_PANOSE_CONTRAST_VERY_LOW, + "got %u\n", panose.text.contrast); + ok(panose.text.strokeVariation == DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_VERTICAL, + "got %u\n", panose.text.strokeVariation); + ok(panose.text.armStyle == DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL, + "got %u\n", panose.text.armStyle); + ok(panose.text.letterform == DWRITE_PANOSE_LETTERFORM_NORMAL_BOXED, + "got %u\n", panose.text.letterform); + ok(panose.text.midline == DWRITE_PANOSE_MIDLINE_STANDARD_TRIMMED, + "got %u\n", panose.text.midline); + ok(panose.text.xHeight == DWRITE_PANOSE_XHEIGHT_CONSTANT_LARGE, + "got %u\n", panose.text.xHeight); + + IDWriteFont1_Release(font1); + } + else + win_skip("GetPanose() is not supported.\n"); + + IDWriteFactory_Release(factory); +} + START_TEST(font) { IDWriteFactory *factory; @@ -3461,6 +3867,8 @@ test_GetKerningPairAdjustments(); test_CreateRenderingParams(); test_CreateGlyphRunAnalysis(); + test_GetGdiCompatibleMetrics(); + test_GetPanose(); IDWriteFactory_Release(factory); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/dwrite/tests/layout.c wine-staging-1.7.47~ubuntu14.10.1/dlls/dwrite/tests/layout.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/dwrite/tests/layout.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/dwrite/tests/layout.c 2015-07-12 05:36:18.000000000 +0000 @@ -591,6 +591,13 @@ return 0x8feacafe; } +static HRESULT WINAPI testinlineobj2_GetBreakConditions(IDWriteInlineObject *iface, DWRITE_BREAK_CONDITION *before, + DWRITE_BREAK_CONDITION *after) +{ + *before = *after = DWRITE_BREAK_CONDITION_MAY_NOT_BREAK; + return S_OK; +} + static IDWriteInlineObjectVtbl testinlineobjvtbl = { testinlineobj_QI, testinlineobj_AddRef, @@ -601,8 +608,19 @@ testinlineobj_GetBreakConditions }; +static IDWriteInlineObjectVtbl testinlineobjvtbl2 = { + testinlineobj_QI, + testinlineobj_AddRef, + testinlineobj_Release, + testinlineobj_Draw, + testinlineobj_GetMetrics, + testinlineobj_GetOverhangMetrics, + testinlineobj2_GetBreakConditions +}; + static IDWriteInlineObject testinlineobj = { &testinlineobjvtbl }; static IDWriteInlineObject testinlineobj2 = { &testinlineobjvtbl }; +static IDWriteInlineObject testinlineobj3 = { &testinlineobjvtbl2 }; static HRESULT WINAPI testeffect_QI(IUnknown *iface, REFIID riid, void **obj) { @@ -1641,7 +1659,6 @@ ok(metrics[2].width > 0.0, "got %.2f\n", metrics[2].width); ok(metrics[2].length == 1, "got %d\n", metrics[2].length); -todo_wine ok(metrics[2].canWrapLineAfter == 1, "got %d\n", metrics[2].canWrapLineAfter); ok(metrics[2].isWhitespace == 0, "got %d\n", metrics[2].isWhitespace); ok(metrics[2].isNewline == 0, "got %d\n", metrics[2].isNewline); @@ -1668,7 +1685,6 @@ /* object sets a width to 123.0, but returns failure from GetMetrics() */ ok(metrics[0].width == 0.0, "got %.2f\n", metrics[0].width); ok(metrics[0].length == 4, "got %d\n", metrics[0].length); -todo_wine ok(metrics[0].canWrapLineAfter == 1, "got %d\n", metrics[0].canWrapLineAfter); ok(metrics[0].isWhitespace == 0, "got %d\n", metrics[0].isWhitespace); ok(metrics[0].isNewline == 0, "got %d\n", metrics[0].isNewline); @@ -1697,7 +1713,6 @@ ok(metrics[1].width == 0.0, "got %.2f\n", metrics[1].width); ok(metrics[1].length == 2, "got %d\n", metrics[1].length); -todo_wine ok(metrics[1].canWrapLineAfter == 1, "got %d\n", metrics[1].canWrapLineAfter); ok(metrics[1].isWhitespace == 0, "got %d\n", metrics[1].isWhitespace); ok(metrics[1].isNewline == 0, "got %d\n", metrics[1].isNewline); @@ -1728,6 +1743,25 @@ ok(count == 2, "got %u\n", count); ok(metrics[0].isWhitespace == 0, "got %d\n", metrics[0].isWhitespace); ok(metrics[1].isWhitespace == 1, "got %d\n", metrics[1].isWhitespace); + ok(metrics[1].canWrapLineAfter == 1, "got %d\n", metrics[1].canWrapLineAfter); + IDWriteTextLayout_Release(layout); + + /* layout is fully covered by inline object with after condition DWRITE_BREAK_CONDITION_MAY_NOT_BREAK */ + hr = IDWriteFactory_CreateTextLayout(factory, str4W, 2, format, 1000.0, 1000.0, &layout); + ok(hr == S_OK, "got 0x%08x\n", hr); + + range.startPosition = 0; + range.length = ~0u; + hr = IDWriteTextLayout_SetInlineObject(layout, &testinlineobj3, range); + ok(hr == S_OK, "got 0x%08x\n", hr); + + count = 0; + memset(metrics, 0, sizeof(metrics)); + hr = IDWriteTextLayout_GetClusterMetrics(layout, metrics, 2, &count); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(count == 1, "got %u\n", count); + ok(metrics[0].canWrapLineAfter == 1, "got %d\n", metrics[0].canWrapLineAfter); + IDWriteTextLayout_Release(layout); IDWriteInlineObject_Release(trimm); @@ -1805,13 +1839,15 @@ static void test_SetPairKerning(void) { - static const WCHAR strW[] = {'a','b','c','d',0}; + static const WCHAR strW[] = {'a','e',0x0300,'d',0}; /* accent grave */ + DWRITE_CLUSTER_METRICS clusters[4]; IDWriteTextLayout1 *layout1; IDWriteTextFormat *format; IDWriteTextLayout *layout; DWRITE_TEXT_RANGE range; IDWriteFactory *factory; BOOL kerning; + UINT32 count; HRESULT hr; factory = create_factory(); @@ -1847,9 +1883,22 @@ hr = IDWriteTextLayout1_GetPairKerning(layout1, 0, &kerning, &range); ok(hr == S_OK, "got 0x%08x\n", hr); ok(!kerning, "got %d\n", kerning); + ok(range.length == ~0u, "got %u\n", range.length); + count = 0; + hr = IDWriteTextLayout1_GetClusterMetrics(layout1, clusters, 4, &count); + ok(hr == S_OK, "got 0x%08x\n", hr); +todo_wine + ok(count == 3, "got %u\n", count); +if (count == 3) { + ok(clusters[0].length == 1, "got %u\n", clusters[0].length); + ok(clusters[1].length == 2, "got %u\n", clusters[1].length); + ok(clusters[2].length == 1, "got %u\n", clusters[2].length); +} + /* pair kerning flag participates in itemization - combining characters + breaks */ range.startPosition = 0; - range.length = 1; + range.length = 2; hr = IDWriteTextLayout1_SetPairKerning(layout1, 2, range); ok(hr == S_OK, "got 0x%08x\n", hr); @@ -1858,6 +1907,15 @@ ok(hr == S_OK, "got 0x%08x\n", hr); ok(kerning == TRUE, "got %d\n", kerning); + count = 0; + hr = IDWriteTextLayout1_GetClusterMetrics(layout1, clusters, 4, &count); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(count == 4, "got %u\n", count); + ok(clusters[0].length == 1, "got %u\n", clusters[0].length); + ok(clusters[1].length == 1, "got %u\n", clusters[1].length); + ok(clusters[2].length == 1, "got %u\n", clusters[2].length); + ok(clusters[3].length == 1, "got %u\n", clusters[3].length); + IDWriteTextLayout1_Release(layout1); IDWriteFactory_Release(factory); } @@ -2434,10 +2492,14 @@ { static const WCHAR str2W[] = {0x2066,')',')',0x661,'(',0x627,')',0}; static const WCHAR strW[] = {'a','b','c','d',0}; + static const WCHAR str3W[] = {'a',0}; + DWRITE_CLUSTER_METRICS clusters[4]; DWRITE_TEXT_METRICS metrics; IDWriteTextFormat *format; IDWriteTextLayout *layout; IDWriteFactory *factory; + UINT32 count, i; + FLOAT width; HRESULT hr; factory = create_factory(); @@ -2449,20 +2511,27 @@ hr = IDWriteFactory_CreateTextLayout(factory, strW, 4, format, 500.0, 1000.0, &layout); ok(hr == S_OK, "got 0x%08x\n", hr); + count = 0; + hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(count == 4, "got %u\n", count); + for (i = 0, width = 0.0; i < count; i++) + width += clusters[i].width; + memset(&metrics, 0xcc, sizeof(metrics)); hr = IDWriteTextLayout_GetMetrics(layout, &metrics); -todo_wine { ok(hr == S_OK, "got 0x%08x\n", hr); ok(metrics.left == 0.0, "got %.2f\n", metrics.left); ok(metrics.top == 0.0, "got %.2f\n", metrics.top); - ok(metrics.width > 0.0, "got %.2f\n", metrics.width); - ok(metrics.widthIncludingTrailingWhitespace > 0.0, "got %.2f\n", metrics.widthIncludingTrailingWhitespace); + ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width); + ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n", + metrics.widthIncludingTrailingWhitespace, width); ok(metrics.height > 0.0, "got %.2f\n", metrics.height); ok(metrics.layoutWidth == 500.0, "got %.2f\n", metrics.layoutWidth); ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight); ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth); ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount); -} + IDWriteTextLayout_Release(layout); /* a string with more complex bidi sequence */ @@ -2472,7 +2541,6 @@ memset(&metrics, 0xcc, sizeof(metrics)); metrics.maxBidiReorderingDepth = 0; hr = IDWriteTextLayout_GetMetrics(layout, &metrics); -todo_wine { ok(hr == S_OK, "got 0x%08x\n", hr); ok(metrics.left == 0.0, "got %.2f\n", metrics.left); ok(metrics.top == 0.0, "got %.2f\n", metrics.top); @@ -2481,9 +2549,33 @@ ok(metrics.height > 0.0, "got %.2f\n", metrics.height); ok(metrics.layoutWidth == 500.0, "got %.2f\n", metrics.layoutWidth); ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight); +todo_wine ok(metrics.maxBidiReorderingDepth > 1, "got %u\n", metrics.maxBidiReorderingDepth); ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount); -} + + IDWriteTextLayout_Release(layout); + + /* single cluster layout */ + hr = IDWriteFactory_CreateTextLayout(factory, str3W, 1, format, 500.0, 1000.0, &layout); + ok(hr == S_OK, "got 0x%08x\n", hr); + + count = 0; + hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 1, &count); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(count == 1, "got %u\n", count); + + memset(&metrics, 0xcc, sizeof(metrics)); + hr = IDWriteTextLayout_GetMetrics(layout, &metrics); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(metrics.left == 0.0, "got %.2f\n", metrics.left); + ok(metrics.top == 0.0, "got %.2f\n", metrics.top); + ok(metrics.width == clusters[0].width, "got %.2f, expected %.2f\n", metrics.width, clusters[0].width); + ok(metrics.widthIncludingTrailingWhitespace == clusters[0].width, "got %.2f\n", metrics.widthIncludingTrailingWhitespace); + ok(metrics.height > 0.0, "got %.2f\n", metrics.height); + ok(metrics.layoutWidth == 500.0, "got %.2f\n", metrics.layoutWidth); + ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight); + ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth); + ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount); IDWriteTextLayout_Release(layout); IDWriteTextFormat_Release(format); @@ -2795,6 +2887,331 @@ IDWriteFactory_Release(factory); } +static void test_SetTextAlignment(void) +{ + static const WCHAR str2W[] = {'a','a','a','a','a',0}; + static const WCHAR strW[] = {'a',0}; + DWRITE_CLUSTER_METRICS clusters[1]; + DWRITE_TEXT_METRICS metrics; + IDWriteTextFormat1 *format1; + IDWriteTextFormat *format; + IDWriteTextLayout *layout; + IDWriteFactory *factory; + DWRITE_TEXT_ALIGNMENT v; + UINT32 count; + HRESULT hr; + + factory = create_factory(); + + hr = IDWriteFactory_CreateTextFormat(factory, tahomaW, NULL, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, + DWRITE_FONT_STRETCH_NORMAL, 12.0, enusW, &format); + ok(hr == S_OK, "got 0x%08x\n", hr); + + v = IDWriteTextFormat_GetTextAlignment(format); + ok(v == DWRITE_TEXT_ALIGNMENT_LEADING, "got %d\n", v); + + hr = IDWriteFactory_CreateTextLayout(factory, strW, 1, format, 500.0, 100.0, &layout); + ok(hr == S_OK, "got 0x%08x\n", hr); + + v = IDWriteTextLayout_GetTextAlignment(layout); + ok(v == DWRITE_TEXT_ALIGNMENT_LEADING, "got %d\n", v); + + hr = IDWriteTextLayout_SetTextAlignment(layout, DWRITE_TEXT_ALIGNMENT_TRAILING); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteTextLayout_SetTextAlignment(layout, DWRITE_TEXT_ALIGNMENT_TRAILING); + ok(hr == S_OK, "got 0x%08x\n", hr); + + v = IDWriteTextFormat_GetTextAlignment(format); + ok(v == DWRITE_TEXT_ALIGNMENT_LEADING, "got %d\n", v); + + v = IDWriteTextLayout_GetTextAlignment(layout); + ok(v == DWRITE_TEXT_ALIGNMENT_TRAILING, "got %d\n", v); + + hr = IDWriteTextLayout_QueryInterface(layout, &IID_IDWriteTextFormat1, (void**)&format1); + if (hr == S_OK) { + hr = IDWriteTextFormat1_SetTextAlignment(format1, DWRITE_TEXT_ALIGNMENT_CENTER); + ok(hr == S_OK, "got 0x%08x\n", hr); + + v = IDWriteTextFormat_GetTextAlignment(format); + ok(v == DWRITE_TEXT_ALIGNMENT_LEADING, "got %d\n", v); + + v = IDWriteTextLayout_GetTextAlignment(layout); + ok(v == DWRITE_TEXT_ALIGNMENT_CENTER, "got %d\n", v); + + v = IDWriteTextFormat1_GetTextAlignment(format1); + ok(v == DWRITE_TEXT_ALIGNMENT_CENTER, "got %d\n", v); + + IDWriteTextFormat1_Release(format1); + } + else + win_skip("IDWriteTextFormat1 is not supported\n"); + + count = 0; + hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 1, &count); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(count == 1, "got %u\n", count); + + /* maxwidth is 500, leading alignment */ + hr = IDWriteTextLayout_SetTextAlignment(layout, DWRITE_TEXT_ALIGNMENT_LEADING); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteTextLayout_GetMetrics(layout, &metrics); + ok(hr == S_OK, "got 0x%08x\n", hr); + + ok(metrics.left == 0.0, "got %.2f\n", metrics.left); + ok(metrics.width == clusters[0].width, "got %.2f\n", metrics.width); + ok(metrics.layoutWidth == 500.0, "got %.2f\n", metrics.layoutWidth); + ok(metrics.lineCount == 1, "got %d\n", metrics.lineCount); + + /* maxwidth is 500, trailing alignment */ + hr = IDWriteTextLayout_SetTextAlignment(layout, DWRITE_TEXT_ALIGNMENT_TRAILING); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteTextLayout_GetMetrics(layout, &metrics); + ok(hr == S_OK, "got 0x%08x\n", hr); + + ok(metrics.left == metrics.layoutWidth - metrics.width, "got %.2f\n", metrics.left); + ok(metrics.width == clusters[0].width, "got %.2f\n", metrics.width); + ok(metrics.layoutWidth == 500.0, "got %.2f\n", metrics.layoutWidth); + ok(metrics.lineCount == 1, "got %d\n", metrics.lineCount); + IDWriteTextLayout_Release(layout); + + /* initially created with trailing alignment */ + hr = IDWriteTextFormat_SetTextAlignment(format, DWRITE_TEXT_ALIGNMENT_TRAILING); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteFactory_CreateTextLayout(factory, strW, 1, format, 500.0, 100.0, &layout); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteTextLayout_GetMetrics(layout, &metrics); + ok(hr == S_OK, "got 0x%08x\n", hr); + + ok(metrics.left == metrics.layoutWidth - metrics.width, "got %.2f\n", metrics.left); + ok(metrics.width == clusters[0].width, "got %.2f\n", metrics.width); + ok(metrics.layoutWidth == 500.0, "got %.2f\n", metrics.layoutWidth); + ok(metrics.lineCount == 1, "got %d\n", metrics.lineCount); + IDWriteTextLayout_Release(layout); + + /* max width less than total run width, trailing alignment */ + hr = IDWriteTextFormat_SetWordWrapping(format, DWRITE_WORD_WRAPPING_NO_WRAP); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteFactory_CreateTextLayout(factory, str2W, 5, format, 2*clusters[0].width, 100.0, &layout); + ok(hr == S_OK, "got 0x%08x\n", hr); + hr = IDWriteTextLayout_GetMetrics(layout, &metrics); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(metrics.left == metrics.layoutWidth - metrics.width, "got %.2f\n", metrics.left); +todo_wine + ok(metrics.width == 5*clusters[0].width, "got %.2f\n", metrics.width); + ok(metrics.lineCount == 1, "got %d\n", metrics.lineCount); + IDWriteTextLayout_Release(layout); + + /* maxwidth is 500, centered */ + hr = IDWriteTextFormat_SetTextAlignment(format, DWRITE_TEXT_ALIGNMENT_CENTER); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteFactory_CreateTextLayout(factory, str2W, 5, format, 500.0, 100.0, &layout); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteTextLayout_GetMetrics(layout, &metrics); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(metrics.left == (metrics.layoutWidth - metrics.width) / 2.0, "got %.2f\n", metrics.left); + ok(metrics.width == 5*clusters[0].width, "got %.2f\n", metrics.width); + ok(metrics.lineCount == 1, "got %d\n", metrics.lineCount); + + IDWriteTextLayout_Release(layout); + + IDWriteTextFormat_Release(format); + IDWriteFactory_Release(factory); +} + +static void test_SetParagraphAlignment(void) +{ + static const WCHAR strW[] = {'a',0}; + DWRITE_TEXT_METRICS metrics; + IDWriteTextFormat *format; + IDWriteTextLayout *layout; + IDWriteFactory *factory; + DWRITE_PARAGRAPH_ALIGNMENT v; + DWRITE_LINE_METRICS lines[1]; + UINT32 count; + HRESULT hr; + + factory = create_factory(); + + hr = IDWriteFactory_CreateTextFormat(factory, tahomaW, NULL, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, + DWRITE_FONT_STRETCH_NORMAL, 12.0, enusW, &format); + ok(hr == S_OK, "got 0x%08x\n", hr); + + v = IDWriteTextFormat_GetParagraphAlignment(format); + ok(v == DWRITE_PARAGRAPH_ALIGNMENT_NEAR, "got %d\n", v); + + hr = IDWriteFactory_CreateTextLayout(factory, strW, 1, format, 500.0, 100.0, &layout); + ok(hr == S_OK, "got 0x%08x\n", hr); + + v = IDWriteTextLayout_GetParagraphAlignment(layout); + ok(v == DWRITE_PARAGRAPH_ALIGNMENT_NEAR, "got %d\n", v); + + hr = IDWriteTextLayout_SetParagraphAlignment(layout, DWRITE_PARAGRAPH_ALIGNMENT_FAR); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteTextLayout_SetParagraphAlignment(layout, DWRITE_PARAGRAPH_ALIGNMENT_FAR); + ok(hr == S_OK, "got 0x%08x\n", hr); + + v = IDWriteTextFormat_GetParagraphAlignment(format); + ok(v == DWRITE_PARAGRAPH_ALIGNMENT_NEAR, "got %d\n", v); + + v = IDWriteTextLayout_GetParagraphAlignment(layout); + ok(v == DWRITE_PARAGRAPH_ALIGNMENT_FAR, "got %d\n", v); + + hr = IDWriteTextLayout_SetParagraphAlignment(layout, DWRITE_PARAGRAPH_ALIGNMENT_CENTER); + ok(hr == S_OK, "got 0x%08x\n", hr); + + v = IDWriteTextLayout_GetParagraphAlignment(layout); + ok(v == DWRITE_PARAGRAPH_ALIGNMENT_CENTER, "got %d\n", v); + + count = 0; + hr = IDWriteTextLayout_GetLineMetrics(layout, lines, 1, &count); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(count == 1, "got %u\n", count); + + /* maxheight is 100, near alignment */ + hr = IDWriteTextLayout_SetParagraphAlignment(layout, DWRITE_PARAGRAPH_ALIGNMENT_NEAR); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteTextLayout_GetMetrics(layout, &metrics); + ok(hr == S_OK, "got 0x%08x\n", hr); + + ok(metrics.top == 0.0, "got %.2f\n", metrics.top); + ok(metrics.height == lines[0].height, "got %.2f\n", metrics.height); + ok(metrics.layoutHeight == 100.0, "got %.2f\n", metrics.layoutHeight); + ok(metrics.lineCount == 1, "got %d\n", metrics.lineCount); + + /* maxwidth is 100, far alignment */ + hr = IDWriteTextLayout_SetParagraphAlignment(layout, DWRITE_PARAGRAPH_ALIGNMENT_FAR); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteTextLayout_GetMetrics(layout, &metrics); + ok(hr == S_OK, "got 0x%08x\n", hr); + + ok(metrics.top == metrics.layoutHeight - metrics.height, "got %.2f\n", metrics.top); + ok(metrics.height == lines[0].height, "got %.2f\n", metrics.height); + ok(metrics.layoutHeight == 100.0, "got %.2f\n", metrics.layoutHeight); + ok(metrics.lineCount == 1, "got %d\n", metrics.lineCount); + IDWriteTextLayout_Release(layout); + + /* initially created with centered alignment */ + hr = IDWriteTextFormat_SetParagraphAlignment(format, DWRITE_PARAGRAPH_ALIGNMENT_CENTER); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteFactory_CreateTextLayout(factory, strW, 1, format, 500.0, 100.0, &layout); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteTextLayout_GetMetrics(layout, &metrics); + ok(hr == S_OK, "got 0x%08x\n", hr); + + ok(metrics.top == (metrics.layoutHeight - lines[0].height) / 2, "got %.2f\n", metrics.top); + ok(metrics.height == lines[0].height, "got %.2f\n", metrics.height); + ok(metrics.lineCount == 1, "got %d\n", metrics.lineCount); + IDWriteTextLayout_Release(layout); + + IDWriteTextFormat_Release(format); + IDWriteFactory_Release(factory); +} + +static void test_SetReadingDirection(void) +{ + static const WCHAR strW[] = {'a',0}; + DWRITE_CLUSTER_METRICS clusters[1]; + DWRITE_TEXT_METRICS metrics; + IDWriteTextFormat *format; + IDWriteTextLayout *layout; + IDWriteFactory *factory; + DWRITE_READING_DIRECTION v; + DWRITE_LINE_METRICS lines[1]; + UINT32 count; + HRESULT hr; + + factory = create_factory(); + + hr = IDWriteFactory_CreateTextFormat(factory, tahomaW, NULL, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, + DWRITE_FONT_STRETCH_NORMAL, 12.0, enusW, &format); + ok(hr == S_OK, "got 0x%08x\n", hr); + + v = IDWriteTextFormat_GetReadingDirection(format); + ok(v == DWRITE_READING_DIRECTION_LEFT_TO_RIGHT, "got %d\n", v); + + hr = IDWriteFactory_CreateTextLayout(factory, strW, 1, format, 500.0, 100.0, &layout); + ok(hr == S_OK, "got 0x%08x\n", hr); + + v = IDWriteTextLayout_GetReadingDirection(layout); + ok(v == DWRITE_READING_DIRECTION_LEFT_TO_RIGHT, "got %d\n", v); + + v = IDWriteTextFormat_GetReadingDirection(format); + ok(v == DWRITE_READING_DIRECTION_LEFT_TO_RIGHT, "got %d\n", v); + + hr = IDWriteTextLayout_SetReadingDirection(layout, DWRITE_READING_DIRECTION_RIGHT_TO_LEFT); + ok(hr == S_OK, "got 0x%08x\n", hr); + + count = 0; + hr = IDWriteTextLayout_GetLineMetrics(layout, lines, 1, &count); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(count == 1, "got %u\n", count); + + count = 0; + hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 1, &count); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(count == 1, "got %u\n", count); + + /* leading alignment, RTL */ + hr = IDWriteTextLayout_GetMetrics(layout, &metrics); + ok(hr == S_OK, "got 0x%08x\n", hr); + + ok(metrics.left == metrics.layoutWidth - clusters[0].width, "got %.2f\n", metrics.left); + ok(metrics.top == 0.0, "got %.2f\n", metrics.top); + ok(metrics.width == clusters[0].width, "got %.2f\n", metrics.width); + ok(metrics.height == lines[0].height, "got %.2f\n", metrics.height); + ok(metrics.layoutWidth == 500.0, "got %.2f\n", metrics.layoutWidth); + ok(metrics.layoutHeight == 100.0, "got %.2f\n", metrics.layoutHeight); + ok(metrics.lineCount == 1, "got %d\n", metrics.lineCount); + + /* trailing alignment, RTL */ + hr = IDWriteTextLayout_SetTextAlignment(layout, DWRITE_TEXT_ALIGNMENT_TRAILING); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteTextLayout_GetMetrics(layout, &metrics); + ok(hr == S_OK, "got 0x%08x\n", hr); + + ok(metrics.left == 0.0, "got %.2f\n", metrics.left); + ok(metrics.top == 0.0, "got %.2f\n", metrics.top); + ok(metrics.width == clusters[0].width, "got %.2f\n", metrics.width); + ok(metrics.height == lines[0].height, "got %.2f\n", metrics.height); + ok(metrics.layoutWidth == 500.0, "got %.2f\n", metrics.layoutWidth); + ok(metrics.layoutHeight == 100.0, "got %.2f\n", metrics.layoutHeight); + ok(metrics.lineCount == 1, "got %d\n", metrics.lineCount); + + /* centered alignment, RTL */ + hr = IDWriteTextLayout_SetTextAlignment(layout, DWRITE_TEXT_ALIGNMENT_CENTER); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteTextLayout_GetMetrics(layout, &metrics); + ok(hr == S_OK, "got 0x%08x\n", hr); + + ok(metrics.left == (metrics.layoutWidth - clusters[0].width) / 2.0, "got %.2f\n", metrics.left); + ok(metrics.top == 0.0, "got %.2f\n", metrics.top); + ok(metrics.width == clusters[0].width, "got %.2f\n", metrics.width); + ok(metrics.height == lines[0].height, "got %.2f\n", metrics.height); + ok(metrics.layoutWidth == 500.0, "got %.2f\n", metrics.layoutWidth); + ok(metrics.layoutHeight == 100.0, "got %.2f\n", metrics.layoutHeight); + ok(metrics.lineCount == 1, "got %d\n", metrics.lineCount); + + IDWriteTextLayout_Release(layout); + + IDWriteTextFormat_Release(format); + IDWriteFactory_Release(factory); +} + START_TEST(layout) { static const WCHAR ctrlstrW[] = {0x202a,0}; @@ -2835,6 +3252,9 @@ test_SetFlowDirection(); test_SetDrawingEffect(); test_GetLineMetrics(); + test_SetTextAlignment(); + test_SetParagraphAlignment(); + test_SetReadingDirection(); IDWriteFactory_Release(factory); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/gdi32/freetype.c wine-staging-1.7.47~ubuntu14.10.1/dlls/gdi32/freetype.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/gdi32/freetype.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/gdi32/freetype.c 2015-07-12 05:36:18.000000000 +0000 @@ -1511,7 +1511,15 @@ return ERROR_SUCCESS; } -static LONG reg_load_ftlong(HKEY hkey, const WCHAR *value, FT_Long *data) +static inline LONG reg_load_ftlong(HKEY hkey, const WCHAR *value, FT_Long *data) +{ + DWORD dw; + LONG ret = reg_load_dword(hkey, value, &dw); + *data = dw; + return ret; +} + +static inline LONG reg_load_ftshort(HKEY hkey, const WCHAR *value, FT_Short *data) { DWORD dw; LONG ret = reg_load_dword(hkey, value, &dw); @@ -1557,7 +1565,7 @@ needed = sizeof(face->fs); RegQueryValueExW(hkey_face, face_font_sig_value, NULL, NULL, (BYTE*)&face->fs, &needed); - if(reg_load_dword(hkey_face, face_height_value, (DWORD*)&face->size.height) != ERROR_SUCCESS) + if(reg_load_ftshort(hkey_face, face_height_value, &face->size.height) != ERROR_SUCCESS) { face->scalable = TRUE; memset(&face->size, 0, sizeof(face->size)); @@ -1565,11 +1573,11 @@ else { face->scalable = FALSE; - reg_load_dword(hkey_face, face_width_value, (DWORD*)&face->size.width); + reg_load_ftshort(hkey_face, face_width_value, &face->size.width); reg_load_ftlong(hkey_face, face_size_value, &face->size.size); reg_load_ftlong(hkey_face, face_x_ppem_value, &face->size.x_ppem); reg_load_ftlong(hkey_face, face_y_ppem_value, &face->size.y_ppem); - reg_load_dword(hkey_face, face_internal_leading_value, (DWORD*)&face->size.internal_leading); + reg_load_ftshort(hkey_face, face_internal_leading_value, &face->size.internal_leading); TRACE("Adding bitmap size h %d w %d size %ld x_ppem %ld y_ppem %ld\n", face->size.height, face->size.width, face->size.size >> 6, @@ -4455,6 +4463,12 @@ #define MS_VDMX_TAG MS_MAKE_TAG('V', 'D', 'M', 'X') typedef struct { + WORD version; + WORD numRecs; + WORD numRatios; +} VDMX_Header; + +typedef struct { BYTE bCharSet; BYTE xRatio; BYTE yStartRatio; @@ -4467,9 +4481,15 @@ BYTE endsz; } VDMX_group; +typedef struct { + WORD yPelHeight; + WORD yMax; + WORD yMin; +} VDMX_vTable; + static LONG load_VDMX(GdiFont *font, LONG height) { - WORD hdr[3]; + VDMX_Header hdr; VDMX_group group; BYTE devXRatio, devYRatio; USHORT numRecs, numRatios; @@ -4477,7 +4497,7 @@ LONG ppem = 0; int i; - result = get_font_data(font, MS_VDMX_TAG, 0, hdr, sizeof(hdr)); + result = get_font_data(font, MS_VDMX_TAG, 0, &hdr, sizeof(hdr)); if(result == GDI_ERROR) /* no vdmx table present, use linear scaling */ return ppem; @@ -4486,14 +4506,14 @@ devXRatio = 1; devYRatio = 1; - numRecs = GET_BE_WORD(hdr[1]); - numRatios = GET_BE_WORD(hdr[2]); + numRecs = GET_BE_WORD(hdr.numRecs); + numRatios = GET_BE_WORD(hdr.numRatios); - TRACE("numRecs = %d numRatios = %d\n", numRecs, numRatios); + TRACE("version = %d numRecs = %d numRatios = %d\n", GET_BE_WORD(hdr.version), numRecs, numRatios); for(i = 0; i < numRatios; i++) { Ratios ratio; - offset = (3 * 2) + (i * sizeof(Ratios)); + offset = sizeof(hdr) + (i * sizeof(Ratios)); get_font_data(font, MS_VDMX_TAG, offset, &ratio, sizeof(Ratios)); offset = -1; @@ -4508,11 +4528,11 @@ devYRatio >= ratio.yStartRatio && devYRatio <= ratio.yEndRatio)) { - WORD tmp; + WORD group_offset; - offset = (3 * 2) + (numRatios * 4) + (i * 2); - get_font_data(font, MS_VDMX_TAG, offset, &tmp, sizeof(tmp)); - offset = GET_BE_WORD(tmp); + offset = sizeof(hdr) + numRatios * sizeof(ratio) + i * sizeof(group_offset); + get_font_data(font, MS_VDMX_TAG, offset, &group_offset, sizeof(group_offset)); + offset = GET_BE_WORD(group_offset); break; } } @@ -4530,8 +4550,8 @@ TRACE("recs=%d startsz=%d endsz=%d\n", recs, startsz, endsz); - vTable = HeapAlloc(GetProcessHeap(), 0, recs * 6); - result = get_font_data(font, MS_VDMX_TAG, offset + 4, vTable, recs * 6); + vTable = HeapAlloc(GetProcessHeap(), 0, recs * sizeof(VDMX_vTable)); + result = get_font_data(font, MS_VDMX_TAG, offset + sizeof(group), vTable, recs * sizeof(VDMX_vTable)); if(result == GDI_ERROR) { FIXME("Failed to retrieve vTable\n"); goto end; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/gdiplus/graphics.c wine-staging-1.7.47~ubuntu14.10.1/dlls/gdiplus/graphics.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/gdiplus/graphics.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/gdiplus/graphics.c 2015-07-12 05:36:18.000000000 +0000 @@ -2168,8 +2168,8 @@ GpMatrix xform = *matrix; GdipTransformMatrixPoints(&xform, pt, 3); } - if (graphics) - GdipTransformPoints(graphics, CoordinateSpaceDevice, CoordinateSpaceWorld, pt, 3); + + GdipTransformPoints(graphics, CoordinateSpaceDevice, CoordinateSpaceWorld, pt, 3); angle = -gdiplus_atan2((pt[1].Y - pt[0].Y), (pt[1].X - pt[0].X)); rel_width = sqrt((pt[1].Y-pt[0].Y)*(pt[1].Y-pt[0].Y)+ (pt[1].X-pt[0].X)*(pt[1].X-pt[0].X)); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/gdiplus/image.c wine-staging-1.7.47~ubuntu14.10.1/dlls/gdiplus/image.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/gdiplus/image.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/gdiplus/image.c 2015-07-12 05:36:18.000000000 +0000 @@ -3058,8 +3058,8 @@ PROPVARIANT id, value; BOOL ret = FALSE; - IWICMetadataReader_GetMetadataFormat(reader, &format); - if (!IsEqualGUID(&format, guid)) return FALSE; + hr = IWICMetadataReader_GetMetadataFormat(reader, &format); + if (FAILED(hr) || !IsEqualGUID(&format, guid)) return FALSE; PropVariantInit(&id); PropVariantInit(&value); @@ -3085,8 +3085,8 @@ PROPVARIANT id, value; PropertyItem *item = NULL; - IWICMetadataReader_GetMetadataFormat(reader, &format); - if (!IsEqualGUID(&format, guid)) return NULL; + hr = IWICMetadataReader_GetMetadataFormat(reader, &format); + if (FAILED(hr) || !IsEqualGUID(&format, guid)) return NULL; PropVariantInit(&id); PropVariantInit(&value); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/gdiplus/metafile.c wine-staging-1.7.47~ubuntu14.10.1/dlls/gdiplus/metafile.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/gdiplus/metafile.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/gdiplus/metafile.c 2015-07-12 05:36:18.000000000 +0000 @@ -1127,10 +1127,11 @@ TRACE("(%p,%p,%p,%u,%s,%p)\n", ref, metafile, succ, emfType, debugstr_w(description), out_metafile); - if(!ref || !metafile || !out_metafile) + if(!ref || !metafile || !out_metafile || emfType < EmfTypeEmfOnly || emfType > EmfTypeEmfPlusDual) return InvalidParameter; - *succ = FALSE; + if(succ) + *succ = FALSE; *out_metafile = NULL; if(!(calls++)) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/gdiplus/tests/metafile.c wine-staging-1.7.47~ubuntu14.10.1/dlls/gdiplus/tests/metafile.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/gdiplus/tests/metafile.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/gdiplus/tests/metafile.c 2015-07-12 05:36:18.000000000 +0000 @@ -946,6 +946,84 @@ expect(Ok, stat); } +static void test_converttoemfplus(void) +{ + GpStatus (WINAPI *pGdipConvertToEmfPlus)( const GpGraphics *graphics, GpMetafile *metafile, BOOL *succ, + EmfType emfType, const WCHAR *description, GpMetafile **outmetafile); + static const GpRectF frame = {0.0, 0.0, 100.0, 100.0}; + static const WCHAR description[] = {'w','i','n','e','t','e','s','t',0}; + GpStatus stat; + GpMetafile *metafile, *metafile2 = NULL, *emhmeta; + GpGraphics *graphics; + HDC hdc; + BOOL succ; + HMODULE mod = GetModuleHandleA("gdiplus.dll"); + + pGdipConvertToEmfPlus = (void*)GetProcAddress( mod, "GdipConvertToEmfPlus"); + if(!pGdipConvertToEmfPlus) + { + /* GdipConvertToEmfPlus was introduced in Windows Vista. */ + win_skip("GDIPlus version 1.1 not available\n"); + return; + } + + hdc = CreateCompatibleDC(0); + + stat = GdipRecordMetafile(hdc, MetafileTypeEmf, &frame, MetafileFrameUnitPixel, description, &metafile); + expect(Ok, stat); + + stat = GdipRecordMetafile(hdc, EmfTypeEmfPlusOnly, &frame, MetafileFrameUnitPixel, description, &emhmeta); + expect(Ok, stat); + + DeleteDC(hdc); + + if (stat != Ok) + return; + + stat = GdipGetImageGraphicsContext((GpImage*)metafile, &graphics); + expect(Ok, stat); + + /* Invalid Parameters */ + stat = pGdipConvertToEmfPlus(NULL, metafile, &succ, EmfTypeEmfPlusOnly, description, &metafile2); + expect(InvalidParameter, stat); + + stat = pGdipConvertToEmfPlus(graphics, NULL, &succ, EmfTypeEmfPlusOnly, description, &metafile2); + expect(InvalidParameter, stat); + + stat = pGdipConvertToEmfPlus(graphics, metafile, &succ, EmfTypeEmfPlusOnly, description, NULL); + expect(InvalidParameter, stat); + + stat = pGdipConvertToEmfPlus(graphics, metafile, NULL, MetafileTypeInvalid, NULL, &metafile2); + expect(InvalidParameter, stat); + + stat = pGdipConvertToEmfPlus(graphics, metafile, NULL, MetafileTypeEmfPlusDual+1, NULL, &metafile2); + expect(InvalidParameter, stat); + + /* If we are already an Enhanced Metafile then the conversion fails. */ + stat = pGdipConvertToEmfPlus(graphics, emhmeta, NULL, EmfTypeEmfPlusOnly, NULL, &metafile2); + todo_wine expect(InvalidParameter, stat); + + stat = pGdipConvertToEmfPlus(graphics, metafile, NULL, EmfTypeEmfPlusOnly, NULL, &metafile2); + todo_wine expect(Ok, stat); + if(metafile2) + GdipDisposeImage((GpImage*)metafile2); + + succ = FALSE; + stat = pGdipConvertToEmfPlus(graphics, metafile, &succ, EmfTypeEmfPlusOnly, NULL, &metafile2); + todo_wine expect(Ok, stat); + if(metafile2) + GdipDisposeImage((GpImage*)metafile2); + + stat = GdipDeleteGraphics(graphics); + expect(Ok, stat); + + stat = GdipDisposeImage((GpImage*)metafile); + expect(Ok, stat); + + stat = GdipDisposeImage((GpImage*)emhmeta); + expect(Ok, stat); +} + START_TEST(metafile) { struct GdiplusStartupInput gdiplusStartupInput; @@ -970,6 +1048,7 @@ test_emfonly(); test_fillrect(); test_pagetransform(); + test_converttoemfplus(); GdiplusShutdown(gdiplusToken); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/hid/hidd.c wine-staging-1.7.47~ubuntu14.10.1/dlls/hid/hidd.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/hid/hidd.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/hid/hidd.c 2015-07-12 05:36:18.000000000 +0000 @@ -32,10 +32,37 @@ #include "winioctl.h" #include "ddk/wdm.h" +#include "hidusage.h" #include "ddk/hidclass.h" +#include "ddk/hidsdi.h" WINE_DEFAULT_DEBUG_CHANNEL(hid); +BOOLEAN WINAPI HidD_FreePreparsedData(PHIDP_PREPARSED_DATA PreparsedData) +{ + TRACE("(%p)\n", PreparsedData); + HeapFree(GetProcessHeap(), 0, PreparsedData); + return TRUE; +} + +BOOLEAN WINAPI HidD_GetAttributes(HANDLE HidDeviceObject, PHIDD_ATTRIBUTES Attr) +{ + HID_COLLECTION_INFORMATION info; + BOOLEAN ret; + + TRACE("(%p %p)\n", HidDeviceObject, Attr); + + ret = DeviceIoControl(HidDeviceObject, IOCTL_HID_GET_COLLECTION_INFORMATION, NULL, 0, &info, sizeof(HID_COLLECTION_INFORMATION), NULL, NULL); + + if (ret) + { + Attr->VendorID = info.VendorID; + Attr->ProductID = info.ProductID; + Attr->VersionNumber = info.VersionNumber; + } + return ret; +} + BOOLEAN WINAPI HidD_GetFeature(HANDLE HidDeviceObject, PVOID ReportBuffer, ULONG ReportBufferLength) { TRACE("(%p %p %u)\n", HidDeviceObject, ReportBuffer, ReportBufferLength); @@ -48,6 +75,12 @@ *guid = GUID_DEVINTERFACE_HID; } +BOOLEAN WINAPI HidD_GetInputReport(HANDLE HidDeviceObject, PVOID ReportBuffer, ULONG ReportBufferLength) +{ + TRACE("(%p %p %u) \n", HidDeviceObject, ReportBuffer, ReportBufferLength); + return DeviceIoControl(HidDeviceObject, IOCTL_HID_GET_INPUT_REPORT, NULL, 0, ReportBuffer, ReportBufferLength, NULL, NULL); +} + BOOLEAN WINAPI HidD_GetManufacturerString(HANDLE HidDeviceObject, PVOID Buffer, ULONG BufferLength) { TRACE("(%p %p %u) \n", HidDeviceObject, Buffer, BufferLength); @@ -65,3 +98,26 @@ TRACE("(%p %p %u)\n", HidDeviceObject, Buffer, BufferLength); return DeviceIoControl(HidDeviceObject, IOCTL_HID_GET_PRODUCT_STRING, NULL, 0, Buffer, BufferLength, NULL, NULL); } + +BOOLEAN WINAPI HidD_GetPreparsedData(HANDLE HidDeviceObject, PHIDP_PREPARSED_DATA *PreparsedData) +{ + HID_COLLECTION_INFORMATION info; + PHIDP_PREPARSED_DATA data; + + TRACE("(%p %p)\n", HidDeviceObject, PreparsedData); + + if (!DeviceIoControl(HidDeviceObject, IOCTL_HID_GET_COLLECTION_INFORMATION, NULL, 0, + &info, sizeof(HID_COLLECTION_INFORMATION), NULL, NULL)) + return FALSE; + + if (!(data = HeapAlloc(GetProcessHeap(), 0, info.DescriptorSize))) return FALSE; + + if (!DeviceIoControl(HidDeviceObject, IOCTL_HID_GET_COLLECTION_DESCRIPTOR, NULL, 0, + data, info.DescriptorSize, NULL, NULL)) + { + HeapFree( GetProcessHeap(), 0, data ); + return FALSE; + } + *PreparsedData = data; + return TRUE; +} diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/hid/hidp.c wine-staging-1.7.47~ubuntu14.10.1/dlls/hid/hidp.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/hid/hidp.c 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/hid/hidp.c 2015-07-12 05:36:18.000000000 +0000 @@ -0,0 +1,521 @@ +/* + * Human Input Devices + * + * Copyright (C) 2015 Aric Stewart + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "config.h" + +#include + +#define NONAMELESSUNION +#define WIN32_NO_STATUS +#include "windef.h" +#include "winbase.h" +#include "winternl.h" +#include "winioctl.h" +#include "ddk/wdm.h" + +#include "hidusage.h" +#include "ddk/hidpi.h" +#include "parse.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(hidp); + +static NTSTATUS get_report_data(BYTE *report, INT reportLength, INT startBit, INT valueSize, PULONG value) +{ + + if ((startBit + valueSize) / 8 > reportLength) + return HIDP_STATUS_INVALID_REPORT_LENGTH; + + if (valueSize == 1) + { + ULONG byte_index = startBit / 8; + ULONG bit_index = startBit - (byte_index * 8); + INT mask = (1 << bit_index); + *value = (report[byte_index] & mask); + } + else + { + ULONG byte_index = (startBit + valueSize - 1) / 8; + ULONG data = 0; + ULONG remainingBits = valueSize; + while (remainingBits) + { + data <<= 8; + + if (remainingBits >= 8) + { + data |= report[byte_index]; + byte_index --; + remainingBits -= 8; + } + else if (remainingBits > 0) + { + BYTE mask = ~(0xff << (8-remainingBits)); + data |= report[byte_index] & mask; + remainingBits = 0; + } + } + *value = data; + } + return HIDP_STATUS_SUCCESS; +} + +NTSTATUS WINAPI HidP_GetButtonCaps(HIDP_REPORT_TYPE ReportType, PHIDP_BUTTON_CAPS ButtonCaps, + PUSHORT ButtonCapsLength, PHIDP_PREPARSED_DATA PreparsedData) +{ + PWINE_HIDP_PREPARSED_DATA data = (PWINE_HIDP_PREPARSED_DATA)PreparsedData; + WINE_HID_REPORT *report = NULL; + USHORT b_count = 0, r_count = 0; + int i,j,u; + + TRACE("(%i, %p, %p, %p)\n",ReportType, ButtonCaps, ButtonCapsLength, PreparsedData); + + if (data->magic != HID_MAGIC) + return HIDP_STATUS_INVALID_PREPARSED_DATA; + + switch(ReportType) + { + case HidP_Input: + b_count = data->caps.NumberInputButtonCaps; + r_count = data->dwInputReportCount; + report = HID_INPUT_REPORTS(data); + break; + case HidP_Output: + b_count = data->caps.NumberOutputButtonCaps; + r_count = data->dwOutputReportCount; + report = HID_OUTPUT_REPORTS(data); + break; + case HidP_Feature: + b_count = data->caps.NumberFeatureButtonCaps; + r_count = data->dwFeatureReportCount; + report = HID_FEATURE_REPORTS(data); + break; + default: + return HIDP_STATUS_INVALID_REPORT_TYPE; + } + + if (!r_count || !b_count || !report) + { + *ButtonCapsLength = 0; + return HIDP_STATUS_SUCCESS; + } + + b_count = min(b_count, *ButtonCapsLength); + + u = 0; + for (j = 0; j < r_count && u < b_count; j++) + { + for (i = 0; i < report->elementCount && u < b_count; i++) + { + if (report->Elements[i].ElementType == ButtonElement) + ButtonCaps[u++] = report->Elements[i].caps.button; + } + report = HID_NEXT_REPORT(data, report); + } + + *ButtonCapsLength = b_count; + return HIDP_STATUS_SUCCESS; +} + + +NTSTATUS WINAPI HidP_GetCaps(PHIDP_PREPARSED_DATA PreparsedData, + PHIDP_CAPS Capabilities) +{ + PWINE_HIDP_PREPARSED_DATA data = (PWINE_HIDP_PREPARSED_DATA)PreparsedData; + + TRACE("(%p, %p)\n",PreparsedData, Capabilities); + + if (data->magic != HID_MAGIC) + return HIDP_STATUS_INVALID_PREPARSED_DATA; + + *Capabilities = data->caps; + + return HIDP_STATUS_SUCCESS; +} + +static NTSTATUS find_value(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection, + USAGE Usage, PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report, + WINE_HID_ELEMENT **element) +{ + PWINE_HIDP_PREPARSED_DATA data = (PWINE_HIDP_PREPARSED_DATA)PreparsedData; + WINE_HID_REPORT *report = NULL; + USHORT v_count = 0, r_count = 0; + int i; + + TRACE("(%i, %x, %i, %i, %p, %p)\n", ReportType, UsagePage, LinkCollection, Usage, + PreparsedData, Report); + + if (data->magic != HID_MAGIC) + return HIDP_STATUS_INVALID_PREPARSED_DATA; + switch(ReportType) + { + case HidP_Input: + v_count = data->caps.NumberInputValueCaps; + r_count = data->dwInputReportCount; + report = HID_INPUT_REPORTS(data); + break; + case HidP_Output: + v_count = data->caps.NumberOutputValueCaps; + r_count = data->dwOutputReportCount; + report = HID_OUTPUT_REPORTS(data); + break; + case HidP_Feature: + v_count = data->caps.NumberFeatureValueCaps; + r_count = data->dwFeatureReportCount; + report = HID_FEATURE_REPORTS(data); + break; + default: + return HIDP_STATUS_INVALID_REPORT_TYPE; + } + + if (!r_count || !v_count || !report) + return HIDP_STATUS_USAGE_NOT_FOUND; + + for (i = 0; i < r_count; i++) + { + if (!report->reportID || report->reportID == Report[0]) + break; + report = HID_NEXT_REPORT(data, report); + } + + if (i == r_count) + return HIDP_STATUS_REPORT_DOES_NOT_EXIST; + + for (i = 0; i < report->elementCount; i++) + { + if (report->Elements[i].ElementType == ValueElement && + report->Elements[i].caps.value.UsagePage == UsagePage && + report->Elements[i].caps.value.u.NotRange.Usage == Usage) + { + *element = &report->Elements[i]; + return HIDP_STATUS_SUCCESS; + } + } + + return HIDP_STATUS_USAGE_NOT_FOUND; +} + +NTSTATUS WINAPI HidP_GetScaledUsageValue(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, + USHORT LinkCollection, USAGE Usage, PLONG UsageValue, + PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report, ULONG ReportLength) +{ + NTSTATUS rc; + WINE_HID_ELEMENT *element; + TRACE("(%i, %x, %i, %i, %p, %p, %p, %i)\n", ReportType, UsagePage, LinkCollection, Usage, UsageValue, + PreparsedData, Report, ReportLength); + + rc = find_value(ReportType, UsagePage, LinkCollection, Usage, PreparsedData, Report, &element); + + if (rc == HIDP_STATUS_SUCCESS) + { + ULONG rawValue; + rc = get_report_data((BYTE*)Report, ReportLength, + element->valueStartBit, element->bitCount, &rawValue); + if (rc != HIDP_STATUS_SUCCESS) + return rc; + if (element->caps.value.BitSize == 16) + rawValue = (short)rawValue; + *UsageValue = rawValue; + } + + return rc; +} + + +NTSTATUS WINAPI HidP_GetUsageValue(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection, + USAGE Usage, PULONG UsageValue, PHIDP_PREPARSED_DATA PreparsedData, + PCHAR Report, ULONG ReportLength) +{ + WINE_HID_ELEMENT *element; + NTSTATUS rc; + + TRACE("(%i, %x, %i, %i, %p, %p, %p, %i)\n", ReportType, UsagePage, LinkCollection, Usage, UsageValue, + PreparsedData, Report, ReportLength); + + rc = find_value(ReportType, UsagePage, LinkCollection, Usage, PreparsedData, Report, &element); + + if (rc == HIDP_STATUS_SUCCESS) + { + return get_report_data((BYTE*)Report, ReportLength, + element->valueStartBit, element->bitCount, UsageValue); + } + + return rc; +} + + +NTSTATUS WINAPI HidP_GetUsages(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection, + PUSAGE UsageList, PULONG UsageLength, PHIDP_PREPARSED_DATA PreparsedData, + PCHAR Report, ULONG ReportLength) +{ + PWINE_HIDP_PREPARSED_DATA data = (PWINE_HIDP_PREPARSED_DATA)PreparsedData; + WINE_HID_REPORT *report = NULL; + BOOL found = FALSE; + USHORT b_count = 0, r_count = 0; + int i,uCount; + + TRACE("(%i, %x, %i, %p, %p, %p, %p, %i)\n", ReportType, UsagePage, LinkCollection, UsageList, + UsageLength, PreparsedData, Report, ReportLength); + + if (data->magic != HID_MAGIC) + return HIDP_STATUS_INVALID_PREPARSED_DATA; + + switch(ReportType) + { + case HidP_Input: + b_count = data->caps.NumberInputButtonCaps; + r_count = data->dwInputReportCount; + report = HID_INPUT_REPORTS(data); + break; + case HidP_Output: + b_count = data->caps.NumberOutputButtonCaps; + r_count = data->dwOutputReportCount; + report = HID_OUTPUT_REPORTS(data); + break; + case HidP_Feature: + b_count = data->caps.NumberFeatureButtonCaps; + r_count = data->dwFeatureReportCount; + report = HID_FEATURE_REPORTS(data); + break; + default: + return HIDP_STATUS_INVALID_REPORT_TYPE; + } + + if (!r_count || !b_count || !report) + return HIDP_STATUS_USAGE_NOT_FOUND; + + for (i = 0; i < r_count; i++) + { + if (!report->reportID || report->reportID == Report[0]) + break; + report = HID_NEXT_REPORT(data, report); + } + + if (i == r_count) + return HIDP_STATUS_REPORT_DOES_NOT_EXIST; + + uCount = 0; + for (i = 0; i < report->elementCount && uCount < *UsageLength; i++) + { + if (report->Elements[i].ElementType == ButtonElement && + report->Elements[i].caps.button.UsagePage == UsagePage) + { + int k; + WINE_HID_ELEMENT *element = &report->Elements[i]; + for (k=0; k < element->bitCount; k++) + { + UINT v = 0; + NTSTATUS rc = get_report_data((BYTE*)Report, ReportLength, + element->valueStartBit + k, 1, &v); + if (rc != HIDP_STATUS_SUCCESS) + return rc; + found = TRUE; + if (v) + { + if (uCount == *UsageLength) + return HIDP_STATUS_BUFFER_TOO_SMALL; + UsageList[uCount] = element->caps.button.u.Range.UsageMin + k; + uCount++; + } + } + } + } + + if (!found) + return HIDP_STATUS_USAGE_NOT_FOUND; + + *UsageLength = uCount; + + return HIDP_STATUS_SUCCESS; +} + + +NTSTATUS WINAPI HidP_GetValueCaps(HIDP_REPORT_TYPE ReportType, PHIDP_VALUE_CAPS ValueCaps, + PUSHORT ValueCapsLength, PHIDP_PREPARSED_DATA PreparsedData) +{ + PWINE_HIDP_PREPARSED_DATA data = (PWINE_HIDP_PREPARSED_DATA)PreparsedData; + WINE_HID_REPORT *report = NULL; + USHORT v_count = 0, r_count = 0; + int i,j,u; + + TRACE("(%i, %p, %p, %p)\n", ReportType, ValueCaps, ValueCapsLength, PreparsedData); + + if (data->magic != HID_MAGIC) + return HIDP_STATUS_INVALID_PREPARSED_DATA; + + switch(ReportType) + { + case HidP_Input: + v_count = data->caps.NumberInputValueCaps; + r_count = data->dwInputReportCount; + report = HID_INPUT_REPORTS(data); + break; + case HidP_Output: + v_count = data->caps.NumberOutputValueCaps; + r_count = data->dwOutputReportCount; + report = HID_OUTPUT_REPORTS(data); + break; + case HidP_Feature: + v_count = data->caps.NumberFeatureValueCaps; + r_count = data->dwFeatureReportCount; + report = HID_FEATURE_REPORTS(data); + break; + default: + return HIDP_STATUS_INVALID_REPORT_TYPE; + } + + if (!r_count || !v_count || !report) + { + *ValueCapsLength = 0; + return HIDP_STATUS_SUCCESS; + } + + v_count = min(v_count, *ValueCapsLength); + + u = 0; + for (j = 0; j < r_count && u < v_count; j++) + { + for (i = 0; i < report->elementCount && u < v_count; i++) + { + if (report->Elements[i].ElementType == ValueElement) + ValueCaps[u++] = report->Elements[i].caps.value; + } + report = HID_NEXT_REPORT(data, report); + } + + *ValueCapsLength = v_count; + return HIDP_STATUS_SUCCESS; +} + +NTSTATUS WINAPI HidP_InitializeReportForID(HIDP_REPORT_TYPE ReportType, UCHAR ReportID, + PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report, + ULONG ReportLength) +{ + int size; + PWINE_HIDP_PREPARSED_DATA data = (PWINE_HIDP_PREPARSED_DATA)PreparsedData; + WINE_HID_REPORT *report = NULL; + BOOL found=FALSE; + int r_count; + int i; + + TRACE("(%i, %i, %p, %p, %i)\n",ReportType, ReportID, PreparsedData, Report, ReportLength); + + if (data->magic != HID_MAGIC) + return HIDP_STATUS_INVALID_PREPARSED_DATA; + + switch(ReportType) + { + case HidP_Input: + size = data->caps.InputReportByteLength; + report = HID_INPUT_REPORTS(data); + r_count = data->dwInputReportCount; + break; + case HidP_Output: + size = data->caps.OutputReportByteLength; + report = HID_OUTPUT_REPORTS(data); + r_count = data->dwOutputReportCount; + break; + case HidP_Feature: + size = data->caps.FeatureReportByteLength; + report = HID_FEATURE_REPORTS(data); + r_count = data->dwFeatureReportCount; + break; + default: + return HIDP_STATUS_INVALID_REPORT_TYPE; + } + + if (!r_count || !size || !report) + return HIDP_STATUS_REPORT_DOES_NOT_EXIST; + + if (size != ReportLength) + return HIDP_STATUS_INVALID_REPORT_LENGTH; + + ZeroMemory(Report, size); + + for (i = 0; i < r_count; i++) + { + if (report->reportID == ReportID) + { + found = TRUE; + if (report->reportID) + Report[0] = ReportID; + /* TODO: Handle null and default values */ + } + report = HID_NEXT_REPORT(data, report); + } + + if (!found) + return HIDP_STATUS_REPORT_DOES_NOT_EXIST; + + return HIDP_STATUS_SUCCESS; +} + +ULONG WINAPI HidP_MaxUsageListLength(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, PHIDP_PREPARSED_DATA PreparsedData) +{ + PWINE_HIDP_PREPARSED_DATA data = (PWINE_HIDP_PREPARSED_DATA)PreparsedData; + WINE_HID_REPORT *report = NULL; + int r_count; + int i; + int count = 0; + + TRACE("(%i, %x, %p)\n", ReportType, UsagePage, PreparsedData); + + if (data->magic != HID_MAGIC) + return 0; + + switch(ReportType) + { + case HidP_Input: + report = HID_INPUT_REPORTS(data); + r_count = data->dwInputReportCount; + break; + case HidP_Output: + report = HID_OUTPUT_REPORTS(data); + r_count = data->dwOutputReportCount; + break; + case HidP_Feature: + report = HID_FEATURE_REPORTS(data); + r_count = data->dwFeatureReportCount; + break; + default: + return HIDP_STATUS_INVALID_REPORT_TYPE; + } + + if (!r_count || !report) + return 0; + + for (i = 0; i < r_count; i++) + { + int j; + for (j = 0; j < report->elementCount; j++) + { + if (report->Elements[j].caps.button.UsagePage == UsagePage) + { + if (report->Elements[j].caps.button.IsRange) + count += (report->Elements[j].caps.button.u.Range.UsageMax - + report->Elements[j].caps.button.u.Range.UsageMin) + 1; + else + count++; + } + } + report = HID_NEXT_REPORT(data, report); + } + return count; +} diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/hid/hid.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/hid/hid.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/hid/hid.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/hid/hid.spec 2015-07-12 05:36:18.000000000 +0000 @@ -1,16 +1,16 @@ @ stub HidD_FlushQueue -@ stub HidD_FreePreparsedData -@ stub HidD_GetAttributes +@ stdcall HidD_FreePreparsedData(ptr) +@ stdcall HidD_GetAttributes(long ptr) @ stub HidD_GetConfiguration @ stdcall HidD_GetFeature(long ptr long) @ stdcall HidD_GetHidGuid(ptr) @ stub HidD_GetIndexedString -@ stub HidD_GetInputReport +@ stdcall HidD_GetInputReport(long ptr long) @ stdcall HidD_GetManufacturerString(long ptr long) @ stub HidD_GetMsGenreDescriptor @ stub HidD_GetNumInputBuffers @ stub HidD_GetPhysicalDescriptor -@ stub HidD_GetPreparsedData +@ stdcall HidD_GetPreparsedData(ptr ptr) @ stdcall HidD_GetProductString(long ptr long) @ stub HidD_GetSerialNumberString @ stub HidD_Hello @@ -18,22 +18,22 @@ @ stdcall HidD_SetFeature(long ptr long) @ stub HidD_SetNumInputBuffers @ stub HidD_SetOutputReport -@ stub HidP_GetButtonCaps -@ stub HidP_GetCaps +@ stdcall HidP_GetButtonCaps(long ptr ptr ptr) +@ stdcall HidP_GetCaps(ptr ptr) @ stub HidP_GetData @ stub HidP_GetExtendedAttributes @ stub HidP_GetLinkCollectionNodes -@ stub HidP_GetScaledUsageValue +@ stdcall HidP_GetScaledUsageValue(long long long long ptr ptr ptr long) @ stub HidP_GetSpecificButtonCaps @ stub HidP_GetSpecificValueCaps -@ stub HidP_GetUsageValue +@ stdcall HidP_GetUsageValue(long long long long ptr ptr ptr long) @ stub HidP_GetUsageValueArray -@ stub HidP_GetUsages +@ stdcall HidP_GetUsages(long long long ptr ptr ptr ptr long) @ stub HidP_GetUsagesEx -@ stub HidP_GetValueCaps -@ stub HidP_InitializeReportForID +@ stdcall HidP_GetValueCaps(long ptr ptr ptr) +@ stdcall HidP_InitializeReportForID(long long ptr ptr long) @ stub HidP_MaxDataListLength -@ stub HidP_MaxUsageListLength +@ stdcall HidP_MaxUsageListLength(long long ptr) @ stub HidP_SetData @ stub HidP_SetScaledUsageValue @ stub HidP_SetUsageValue diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/hid/Makefile.in wine-staging-1.7.47~ubuntu14.10.1/dlls/hid/Makefile.in --- wine-staging-1.7.46~ubuntu14.10.1/dlls/hid/Makefile.in 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/hid/Makefile.in 2015-07-12 05:36:18.000000000 +0000 @@ -3,6 +3,7 @@ C_SRCS = \ hidd.c \ + hidp.c \ main.c RC_SRCS = version.rc diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/hid/parse.h wine-staging-1.7.47~ubuntu14.10.1/dlls/hid/parse.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/hid/parse.h 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/hid/parse.h 2015-07-12 05:36:18.000000000 +0000 @@ -0,0 +1,72 @@ +/* + * Internal HID structures + * + * Copyright 2015 Aric Stewart + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __HID_PARSE_H +#define __HID_PARSE_H + +#define HID_MAGIC 0x8491759 + +typedef enum { + UnknownElement = 0, + ButtonElement, + ValueElement, +} WINE_ELEMENT_TYPE; + +typedef struct +{ + WINE_ELEMENT_TYPE ElementType; + UINT valueStartBit; + UINT bitCount; + union { + HIDP_VALUE_CAPS value; + HIDP_BUTTON_CAPS button; + } caps; +} WINE_HID_ELEMENT; + +typedef struct +{ + UCHAR reportID; + DWORD dwSize; + DWORD elementCount; + WINE_HID_ELEMENT Elements[1]; +} WINE_HID_REPORT; + +typedef struct +{ + DWORD magic; + DWORD dwSize; + HIDP_CAPS caps; + + DWORD dwInputReportCount; + DWORD dwOutputReportCount; + DWORD dwFeatureReportCount; + + DWORD dwOutputReportOffset; + DWORD dwFeatureReportOffset; + + WINE_HID_REPORT InputReports[1]; +} WINE_HIDP_PREPARSED_DATA, *PWINE_HIDP_PREPARSED_DATA; + +#define HID_NEXT_REPORT(d,r) ((r)?(WINE_HID_REPORT*)(((BYTE*)(r))+(r)->dwSize):(d)->InputReports) +#define HID_INPUT_REPORTS(d) ((d)->InputReports) +#define HID_OUTPUT_REPORTS(d) ((WINE_HID_REPORT*)(((BYTE*)(d)->InputReports)+(d)->dwOutputReportOffset)) +#define HID_FEATURE_REPORTS(d) ((WINE_HID_REPORT*)(((BYTE*)(d)->InputReports)+(d)->dwFeatureReportOffset)) + +#endif /* __HID_PARSE_H */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/hidclass.sys/hidclass.sys.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/hidclass.sys/hidclass.sys.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/hidclass.sys/hidclass.sys.spec 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/hidclass.sys/hidclass.sys.spec 2015-07-12 05:36:18.000000000 +0000 @@ -0,0 +1 @@ +@ stdcall HidRegisterMinidriver(ptr) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/hidclass.sys/hid.h wine-staging-1.7.47~ubuntu14.10.1/dlls/hidclass.sys/hid.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/hidclass.sys/hid.h 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/hidclass.sys/hid.h 2015-07-12 05:36:18.000000000 +0000 @@ -0,0 +1,35 @@ +/* + * Copyright 2015 Aric Stewart + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "ntstatus.h" +#define WIN32_NO_STATUS +#include "windef.h" +#include "winbase.h" +#include "winternl.h" +#include "ddk/wdm.h" +#include "ddk/hidport.h" +#include "wine/list.h" + +typedef struct _minidriver +{ + struct list entry; + + HID_MINIDRIVER_REGISTRATION minidriver; + + PDRIVER_UNLOAD DriverUnload; +} minidriver; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/hidclass.sys/main.c wine-staging-1.7.47~ubuntu14.10.1/dlls/hidclass.sys/main.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/hidclass.sys/main.c 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/hidclass.sys/main.c 2015-07-12 05:36:18.000000000 +0000 @@ -0,0 +1,74 @@ +/* + * WINE Hid device services + * + * Copyright 2015 Aric Stewart + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#define NONAMELESSUNION +#include +#include +#include "hid.h" +#include "wine/debug.h" +#include "wine/unicode.h" +#include "wine/list.h" + +WINE_DEFAULT_DEBUG_CHANNEL(hid); + +static struct list minidriver_list = LIST_INIT(minidriver_list); + +static minidriver* find_minidriver(DRIVER_OBJECT *driver) +{ + minidriver *md; + LIST_FOR_EACH_ENTRY(md, &minidriver_list, minidriver, entry) + { + if (md->minidriver.DriverObject == driver) + return md; + } + return NULL; +} + +static VOID WINAPI UnloadDriver(DRIVER_OBJECT *driver) +{ + minidriver *md; + + TRACE("Driver Unload\n"); + md = find_minidriver(driver); + if (md) + { + if (md->DriverUnload) + md->DriverUnload(md->minidriver.DriverObject); + list_remove(&md->entry); + HeapFree( GetProcessHeap(), 0, md ); + } +} + +NTSTATUS WINAPI HidRegisterMinidriver(HID_MINIDRIVER_REGISTRATION *registration) +{ + minidriver *driver; + driver = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*driver)); + + if (!driver) + return STATUS_NO_MEMORY; + + driver->DriverUnload = registration->DriverObject->DriverUnload; + registration->DriverObject->DriverUnload = UnloadDriver; + + driver->minidriver = *registration; + list_add_tail(&minidriver_list, &driver->entry); + + return STATUS_SUCCESS; +} diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/hidclass.sys/Makefile.in wine-staging-1.7.47~ubuntu14.10.1/dlls/hidclass.sys/Makefile.in --- wine-staging-1.7.46~ubuntu14.10.1/dlls/hidclass.sys/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/hidclass.sys/Makefile.in 2015-07-12 05:36:18.000000000 +0000 @@ -0,0 +1,7 @@ +MODULE = hidclass.sys +IMPORTLIB = hidclass +IMPORTS = ntoskrnl.exe +DELAYIMPORTS = setupapi hid + +C_SRCS = \ + main.c diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/kernel32/kernel32.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/kernel32/kernel32.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/kernel32/kernel32.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/kernel32/kernel32.spec 2015-07-12 05:36:18.000000000 +0000 @@ -204,7 +204,7 @@ @ stdcall BuildCommDCBAndTimeoutsA(str ptr ptr) @ stdcall BuildCommDCBAndTimeoutsW(wstr ptr ptr) @ stdcall BuildCommDCBW(wstr ptr) -# @ stub CallbackMayRunLong +@ stdcall CallbackMayRunLong(ptr) @ stdcall CallNamedPipeA(str ptr long ptr long ptr long) @ stdcall CallNamedPipeW(wstr ptr long ptr long ptr long) @ stub CancelDeviceWakeupRequest @@ -228,13 +228,13 @@ # @ stub ClosePrivateNamespace @ stdcall CloseProfileUserMapping() @ stub CloseSystemHandle -# @ stub CloseThreadpool -# @ stub CloseThreadpoolCleanupGroup -# @ stub CloseThreadpoolCleanupGroupMembers +@ stdcall CloseThreadpool(ptr) ntdll.TpReleasePool +@ stdcall CloseThreadpoolCleanupGroup(ptr) ntdll.TpReleaseCleanupGroup +@ stdcall CloseThreadpoolCleanupGroupMembers(ptr long ptr) ntdll.TpReleaseCleanupGroupMembers # @ stub CloseThreadpoolIo -# @ stub CloseThreadpoolTimer -# @ stub CloseThreadpoolWait -# @ stub CloseThreadpoolWork +@ stdcall CloseThreadpoolTimer(ptr) ntdll.TpReleaseTimer +@ stdcall CloseThreadpoolWait(ptr) ntdll.TpReleaseWait +@ stdcall CloseThreadpoolWork(ptr) ntdll.TpReleaseWork @ stdcall CmdBatNotification(long) @ stdcall CommConfigDialogA(str long ptr) @ stdcall CommConfigDialogW(wstr long ptr) @@ -331,12 +331,12 @@ @ stdcall CreateSymbolicLinkW(wstr wstr long) @ stdcall CreateTapePartition(long long long long) @ stdcall CreateThread(ptr long ptr long long ptr) -# @ stub CreateThreadpool -# @ stub CreateThreadpoolCleanupGroup +@ stdcall CreateThreadpool(ptr) +@ stdcall CreateThreadpoolCleanupGroup() # @ stub CreateThreadpoolIo -# @ stub CreateThreadpoolTimer -# @ stub CreateThreadpoolWait -# @ stub CreateThreadpoolWork +@ stdcall CreateThreadpoolTimer(ptr ptr ptr) +@ stdcall CreateThreadpoolWait(ptr ptr ptr) +@ stdcall CreateThreadpoolWork(ptr ptr ptr) @ stdcall CreateTimerQueue () @ stdcall CreateTimerQueueTimer(ptr long ptr ptr long long long) @ stdcall CreateToolhelp32Snapshot(long long) @@ -369,7 +369,7 @@ @ stdcall DeleteFileW(wstr) # @ stub DeleteProcThreadAttributeList # @ stub DisableThreadProfiling -# @ stub DisassociateCurrentThreadFromCallback +@ stdcall DisassociateCurrentThreadFromCallback(ptr) ntdll.TpDisassociateCallback @ stdcall DeleteTimerQueue(long) @ stdcall DeleteTimerQueueEx (long long) @ stdcall DeleteTimerQueueTimer(long long long) @@ -396,7 +396,7 @@ @ stdcall EnterCriticalSection(ptr) ntdll.RtlEnterCriticalSection @ stdcall EnumCalendarInfoA(ptr long long long) @ stdcall EnumCalendarInfoExA(ptr long long long) -# @ stub EnumCalendarInfoExEx +@ stdcall EnumCalendarInfoExEx(ptr wstr long wstr long long) @ stdcall EnumCalendarInfoExW(ptr long long long) @ stdcall EnumCalendarInfoW(ptr long long long) @ stdcall EnumDateFormatsA(ptr long long) @@ -495,7 +495,6 @@ @ stdcall FindFirstVolumeMountPointA(str ptr long) @ stdcall FindFirstVolumeMountPointW(wstr ptr long) @ stdcall FindFirstVolumeW(ptr long) -# @ stub FreeLibraryWhenCallbackReturns @ stdcall FindNextChangeNotification(long) @ stdcall FindNextFileA(long ptr) # @ stub FindNextFileNameW @@ -533,6 +532,7 @@ @ stub -i386 FreeLSCallback @ stdcall FreeLibrary(long) @ stdcall FreeLibraryAndExitThread(long long) +@ stdcall FreeLibraryWhenCallbackReturns(ptr ptr) ntdll.TpCallbackUnloadDllOnCompletion @ stdcall FreeResource(long) @ stdcall -i386 -private FreeSLCallback(long) krnl386.exe16.FreeSLCallback @ stub FreeUserPhysicalPages @@ -746,7 +746,7 @@ @ stdcall GetNumaNodeProcessorMask(long ptr) # @ stub GetNumaNodeProcessorMaskEx # @ stub GetNumaProcessorMap -# @ stub GetNumaProcessorNode +@ stdcall GetNumaProcessorNode(long ptr) # @ stub GetNumaProcessorNodeEx # @ stub GetNumaProximityNode # @ stub GetNumaProximityNodeEx @@ -981,7 +981,7 @@ @ stub -i386 IsSLCallback @ stdcall IsSystemResumeAutomatic() @ stdcall IsThreadAFiber() -# @ stub IsThreadpoolTimerSet +@ stdcall IsThreadpoolTimerSet(ptr) ntdll.TpIsTimerSet # @ stub IsTimeZoneRedirectionEnabled # @ stub IsValidCalDateTime @ stdcall IsValidCodePage(long) @@ -1035,7 +1035,7 @@ @ stdcall LZSeek(long long long) @ stdcall LZStart() @ stdcall LeaveCriticalSection(ptr) ntdll.RtlLeaveCriticalSection -# @ stub LeaveCriticalSectionWhenCallbackReturns +@ stdcall LeaveCriticalSectionWhenCallbackReturns(ptr ptr) ntdll.TpCallbackLeaveCriticalSectionOnCompletion # @ stub LoadAppInitDlls @ stdcall LoadLibraryA(str) @ stdcall LoadLibraryExA( str long long) @@ -1252,9 +1252,9 @@ @ stdcall ReinitializeCriticalSection(ptr) @ stdcall ReleaseActCtx(ptr) @ stdcall ReleaseMutex(long) -# @ stub ReleaseMutexWhenCallbackReturns +@ stdcall ReleaseMutexWhenCallbackReturns(ptr long) ntdll.TpCallbackReleaseMutexOnCompletion @ stdcall ReleaseSemaphore(long long ptr) -# @ stub ReleaseSemaphoreWhenCallbackReturns +@ stdcall ReleaseSemaphoreWhenCallbackReturns(ptr long long) ntdll.TpCallbackReleaseSemaphoreOnCompletion @ stdcall ReleaseSRWLockExclusive(ptr) ntdll.RtlReleaseSRWLockExclusive @ stdcall ReleaseSRWLockShared(ptr) ntdll.RtlReleaseSRWLockShared @ stdcall RemoveDirectoryA(str) @@ -1385,7 +1385,7 @@ @ stdcall SetEnvironmentVariableW(wstr wstr) @ stdcall SetErrorMode(long) @ stdcall SetEvent(long) -# @ stub SetEventWhenCallbackReturns +@ stdcall SetEventWhenCallbackReturns(ptr long) ntdll.TpCallbackSetEventOnCompletion @ stdcall SetFileApisToANSI() @ stdcall SetFileApisToOEM() @ stdcall SetFileAttributesA(str long) @@ -1454,10 +1454,10 @@ # @ stub SetThreadToken @ stdcall SetThreadUILanguage(long) # @ stub SetThreadpoolStackInformation -# @ stub SetThreadpoolThreadMaximum -# @ stub SetThreadpoolThreadMinimum -# @ stub SetThreadpoolTimer -# @ stub SetThreadpoolWait +@ stdcall SetThreadpoolThreadMaximum(ptr long) ntdll.TpSetPoolMaxThreads +@ stdcall SetThreadpoolThreadMinimum(ptr long) ntdll.TpSetPoolMinThreads +@ stdcall SetThreadpoolTimer(ptr ptr long long) +@ stdcall SetThreadpoolWait(ptr long ptr) @ stdcall SetTimeZoneInformation(ptr) @ stub SetTimerQueueTimer # @ stub -arch=x86_64 SetUmsThreadInformation @@ -1482,7 +1482,7 @@ # @ stub SortCloseHandle # @ stub SortGetHandle # @ stub StartThreadpoolIo -# @ stub SubmitThreadpoolWork +@ stdcall SubmitThreadpoolWork(ptr) ntdll.TpPostWork @ stdcall SuspendThread(long) @ stdcall SwitchToFiber(ptr) @ stdcall SwitchToThread() @@ -1509,7 +1509,7 @@ @ stdcall TryAcquireSRWLockExclusive(ptr) ntdll.RtlTryAcquireSRWLockExclusive @ stdcall TryAcquireSRWLockShared(ptr) ntdll.RtlTryAcquireSRWLockShared @ stdcall TryEnterCriticalSection(ptr) ntdll.RtlTryEnterCriticalSection -# @ stub TrySubmitThreadpoolCallback +@ stdcall TrySubmitThreadpoolCallback(ptr ptr ptr) @ stdcall TzSpecificLocalTimeToSystemTime(ptr ptr ptr) # @ stub TzSpecificLocalTimeToSystemTimeEx # @ stub -arch=x86_64 uaw_lstrcmpW @@ -1571,9 +1571,9 @@ @ stdcall WaitForSingleObject(long long) @ stdcall WaitForSingleObjectEx(long long long) # @ stub WaitForThreadpoolIoCallbacks -# @ stub WaitForThreadpoolTimerCallbacks -# @ stub WaitForThreadpoolWaitCallbacks -# @ stub WaitForThreadpoolWorkCallbacks +@ stdcall WaitForThreadpoolTimerCallbacks(ptr long) ntdll.TpWaitForTimer +@ stdcall WaitForThreadpoolWaitCallbacks(ptr long) ntdll.TpWaitForWait +@ stdcall WaitForThreadpoolWorkCallbacks(ptr long) ntdll.TpWaitForWork @ stdcall WaitNamedPipeA (str long) @ stdcall WaitNamedPipeW (wstr long) @ stdcall WakeAllConditionVariable(ptr) ntdll.RtlWakeAllConditionVariable diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/kernel32/lcformat.c wine-staging-1.7.47~ubuntu14.10.1/dlls/kernel32/lcformat.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/kernel32/lcformat.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/kernel32/lcformat.c 2015-07-12 05:36:18.000000000 +0000 @@ -1971,26 +1971,32 @@ return TRUE; } +enum enumcalendar_callback_type { + CALLBACK_ENUMPROC, + CALLBACK_ENUMPROCEX, + CALLBACK_ENUMPROCEXEX +}; + +struct enumcalendar_context { + enum enumcalendar_callback_type type; /* callback kind */ + union { + CALINFO_ENUMPROCW callback; /* user callback pointer */ + CALINFO_ENUMPROCEXW callbackex; + CALINFO_ENUMPROCEXEX callbackexex; + } u; + LCID lcid; /* locale of interest */ + CALID calendar; /* specific calendar or ENUM_ALL_CALENDARS */ + CALTYPE caltype; /* calendar information type */ + LPARAM lParam; /* user input parameter passed to callback, for ExEx case only */ + BOOL unicode; /* A vs W callback type, only for regular and Ex callbacks */ +}; + /****************************************************************************** - * NLS_EnumCalendarInfoAW + * NLS_EnumCalendarInfo * Enumerates calendar information for a specified locale. * * PARAMS - * calinfoproc [I] Pointer to the callback - * locale [I] The locale for which to retrieve calendar information. - * This parameter can be a locale identifier created by the - * MAKELCID macro, or one of the following values: - * LOCALE_SYSTEM_DEFAULT - * Use the default system locale. - * LOCALE_USER_DEFAULT - * Use the default user locale. - * calendar [I] The calendar for which information is requested, or - * ENUM_ALL_CALENDARS. - * caltype [I] The type of calendar information to be returned. Note - * that only one CALTYPE value can be specified per call - * of this function, except where noted. - * unicode [I] Specifies if the callback expects a unicode string. - * ex [I] Specifies if the callback needs the calendar identifier. + * ctxt [I] enumeration context, see 'struct enumcalendar_context' * * RETURNS * Success: TRUE. @@ -2005,14 +2011,14 @@ * TODO * The above note should be respected by GetCalendarInfoA. */ -static BOOL NLS_EnumCalendarInfoAW(void *calinfoproc, LCID locale, - CALID calendar, CALTYPE caltype, BOOL unicode, BOOL ex ) +static BOOL NLS_EnumCalendarInfo(const struct enumcalendar_context *ctxt) { WCHAR *buf, *opt = NULL, *iter = NULL; + CALID calendar = ctxt->calendar; BOOL ret = FALSE; int bufSz = 200; /* the size of the buffer */ - if (calinfoproc == NULL) + if (ctxt->u.callback == NULL) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; @@ -2027,7 +2033,7 @@ if (calendar == ENUM_ALL_CALENDARS) { - int optSz = GetLocaleInfoW(locale, LOCALE_IOPTIONALCALENDAR, NULL, 0); + int optSz = GetLocaleInfoW(ctxt->lcid, LOCALE_IOPTIONALCALENDAR, NULL, 0); if (optSz > 1) { opt = HeapAlloc(GetProcessHeap(), 0, optSz * sizeof(WCHAR)); @@ -2036,30 +2042,30 @@ SetLastError(ERROR_NOT_ENOUGH_MEMORY); goto cleanup; } - if (GetLocaleInfoW(locale, LOCALE_IOPTIONALCALENDAR, opt, optSz)) + if (GetLocaleInfoW(ctxt->lcid, LOCALE_IOPTIONALCALENDAR, opt, optSz)) iter = opt; } - calendar = NLS_GetLocaleNumber(locale, LOCALE_ICALENDARTYPE); + calendar = NLS_GetLocaleNumber(ctxt->lcid, LOCALE_ICALENDARTYPE); } while (TRUE) /* loop through calendars */ { do /* loop until there's no error */ { - if (caltype & CAL_RETURN_NUMBER) - ret = GetCalendarInfoW(locale, calendar, caltype, NULL, bufSz / sizeof(WCHAR), (LPDWORD)buf); - else if (unicode) - ret = GetCalendarInfoW(locale, calendar, caltype, buf, bufSz / sizeof(WCHAR), NULL); - else ret = GetCalendarInfoA(locale, calendar, caltype, (CHAR*)buf, bufSz / sizeof(CHAR), NULL); + if (ctxt->caltype & CAL_RETURN_NUMBER) + ret = GetCalendarInfoW(ctxt->lcid, calendar, ctxt->caltype, NULL, bufSz / sizeof(WCHAR), (LPDWORD)buf); + else if (ctxt->unicode) + ret = GetCalendarInfoW(ctxt->lcid, calendar, ctxt->caltype, buf, bufSz / sizeof(WCHAR), NULL); + else ret = GetCalendarInfoA(ctxt->lcid, calendar, ctxt->caltype, (CHAR*)buf, bufSz / sizeof(CHAR), NULL); if (!ret) { if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { /* so resize it */ int newSz; - if (unicode) - newSz = GetCalendarInfoW(locale, calendar, caltype, NULL, 0, NULL) * sizeof(WCHAR); - else newSz = GetCalendarInfoA(locale, calendar, caltype, NULL, 0, NULL) * sizeof(CHAR); + if (ctxt->unicode) + newSz = GetCalendarInfoW(ctxt->lcid, calendar, ctxt->caltype, NULL, 0, NULL) * sizeof(WCHAR); + else newSz = GetCalendarInfoA(ctxt->lcid, calendar, ctxt->caltype, NULL, 0, NULL) * sizeof(CHAR); if (bufSz >= newSz) { ERR("Buffer resizing disorder: was %d, requested %d.\n", bufSz, newSz); @@ -2079,10 +2085,20 @@ * we must check for Ex, but we don't care about Unicode * because the buffer is already in the correct format. */ - if (ex) { - ret = ((CALINFO_ENUMPROCEXW)calinfoproc)(buf, calendar); - } else - ret = ((CALINFO_ENUMPROCW)calinfoproc)(buf); + switch (ctxt->type) + { + case CALLBACK_ENUMPROC: + ret = ctxt->u.callback(buf); + break; + case CALLBACK_ENUMPROCEX: + ret = ctxt->u.callbackex(buf, calendar); + break; + case CALLBACK_ENUMPROCEXEX: + ret = ctxt->u.callbackexex(buf, calendar, NULL, ctxt->lParam); + break; + default: + ; + } if (!ret) { /* the callback told to stop */ ret = TRUE; @@ -2112,48 +2128,100 @@ /****************************************************************************** * EnumCalendarInfoA [KERNEL32.@] - * - * See EnumCalendarInfoAW. */ BOOL WINAPI EnumCalendarInfoA( CALINFO_ENUMPROCA calinfoproc,LCID locale, CALID calendar,CALTYPE caltype ) { + struct enumcalendar_context ctxt; + TRACE("(%p,0x%08x,0x%08x,0x%08x)\n", calinfoproc, locale, calendar, caltype); - return NLS_EnumCalendarInfoAW(calinfoproc, locale, calendar, caltype, FALSE, FALSE); + + ctxt.type = CALLBACK_ENUMPROC; + ctxt.u.callback = (CALINFO_ENUMPROCW)calinfoproc; + ctxt.lcid = locale; + ctxt.calendar = calendar; + ctxt.caltype = caltype; + ctxt.lParam = 0; + ctxt.unicode = FALSE; + return NLS_EnumCalendarInfo(&ctxt); } /****************************************************************************** * EnumCalendarInfoW [KERNEL32.@] - * - * See EnumCalendarInfoAW. */ BOOL WINAPI EnumCalendarInfoW( CALINFO_ENUMPROCW calinfoproc,LCID locale, CALID calendar,CALTYPE caltype ) { + struct enumcalendar_context ctxt; + TRACE("(%p,0x%08x,0x%08x,0x%08x)\n", calinfoproc, locale, calendar, caltype); - return NLS_EnumCalendarInfoAW(calinfoproc, locale, calendar, caltype, TRUE, FALSE); + + ctxt.type = CALLBACK_ENUMPROC; + ctxt.u.callback = calinfoproc; + ctxt.lcid = locale; + ctxt.calendar = calendar; + ctxt.caltype = caltype; + ctxt.lParam = 0; + ctxt.unicode = TRUE; + return NLS_EnumCalendarInfo(&ctxt); } /****************************************************************************** * EnumCalendarInfoExA [KERNEL32.@] - * - * See EnumCalendarInfoAW. */ BOOL WINAPI EnumCalendarInfoExA( CALINFO_ENUMPROCEXA calinfoproc,LCID locale, CALID calendar,CALTYPE caltype ) { + struct enumcalendar_context ctxt; + TRACE("(%p,0x%08x,0x%08x,0x%08x)\n", calinfoproc, locale, calendar, caltype); - return NLS_EnumCalendarInfoAW(calinfoproc, locale, calendar, caltype, FALSE, TRUE); + + ctxt.type = CALLBACK_ENUMPROCEX; + ctxt.u.callbackex = (CALINFO_ENUMPROCEXW)calinfoproc; + ctxt.lcid = locale; + ctxt.calendar = calendar; + ctxt.caltype = caltype; + ctxt.lParam = 0; + ctxt.unicode = FALSE; + return NLS_EnumCalendarInfo(&ctxt); } /****************************************************************************** * EnumCalendarInfoExW [KERNEL32.@] - * - * See EnumCalendarInfoAW. */ BOOL WINAPI EnumCalendarInfoExW( CALINFO_ENUMPROCEXW calinfoproc,LCID locale, CALID calendar,CALTYPE caltype ) { + struct enumcalendar_context ctxt; + TRACE("(%p,0x%08x,0x%08x,0x%08x)\n", calinfoproc, locale, calendar, caltype); - return NLS_EnumCalendarInfoAW(calinfoproc, locale, calendar, caltype, TRUE, TRUE); + + ctxt.type = CALLBACK_ENUMPROCEX; + ctxt.u.callbackex = calinfoproc; + ctxt.lcid = locale; + ctxt.calendar = calendar; + ctxt.caltype = caltype; + ctxt.lParam = 0; + ctxt.unicode = TRUE; + return NLS_EnumCalendarInfo(&ctxt); +} + +/****************************************************************************** + * EnumCalendarInfoExEx [KERNEL32.@] + */ +BOOL WINAPI EnumCalendarInfoExEx( CALINFO_ENUMPROCEXEX calinfoproc, LPCWSTR locale, CALID calendar, + LPCWSTR reserved, CALTYPE caltype, LPARAM lParam) +{ + struct enumcalendar_context ctxt; + + TRACE("(%p,%s,0x%08x,%p,0x%08x,0x%ld)\n", calinfoproc, debugstr_w(locale), calendar, reserved, caltype, lParam); + + ctxt.type = CALLBACK_ENUMPROCEXEX; + ctxt.u.callbackexex = calinfoproc; + ctxt.lcid = LocaleNameToLCID(locale, 0); + ctxt.calendar = calendar; + ctxt.caltype = caltype; + ctxt.lParam = lParam; + ctxt.unicode = TRUE; + return NLS_EnumCalendarInfo(&ctxt); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/kernel32/module.c wine-staging-1.7.47~ubuntu14.10.1/dlls/kernel32/module.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/kernel32/module.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/kernel32/module.c 2015-07-12 05:36:18.000000000 +0000 @@ -1226,7 +1226,7 @@ if (!init_module_iterator(&iter, process)) return FALSE; - if (!needed) + if ((cb && !lphModule) || !needed) { SetLastError(ERROR_NOACCESS); return FALSE; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/kernel32/process.c wine-staging-1.7.47~ubuntu14.10.1/dlls/kernel32/process.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/kernel32/process.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/kernel32/process.c 2015-07-12 05:36:18.000000000 +0000 @@ -3957,6 +3957,27 @@ return FALSE; } +/*********************************************************************** + * GetNumaProcessorNode (KERNEL32.@) + */ +BOOL WINAPI GetNumaProcessorNode(UCHAR processor, PUCHAR node) +{ + SYSTEM_INFO si; + + TRACE("(%d, %p)\n", processor, node); + + GetSystemInfo( &si ); + if (processor < si.dwNumberOfProcessors) + { + *node = 0; + return TRUE; + } + + *node = 0xFF; + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; +} + /********************************************************************** * GetProcessDEPPolicy (KERNEL32.@) */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/kernel32/tests/process.c wine-staging-1.7.47~ubuntu14.10.1/dlls/kernel32/tests/process.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/kernel32/tests/process.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/kernel32/tests/process.c 2015-07-12 05:36:18.000000000 +0000 @@ -3,6 +3,7 @@ * * Copyright 2002 Eric Pouech * Copyright 2006 Dmitry Timoshkov + * Copyright 2014 Michael Müller * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -74,6 +75,7 @@ static BOOL (WINAPI *pQueryInformationJobObject)(HANDLE job, JOBOBJECTINFOCLASS class, LPVOID info, DWORD len, LPDWORD ret_len); static BOOL (WINAPI *pSetInformationJobObject)(HANDLE job, JOBOBJECTINFOCLASS class, LPVOID info, DWORD len); static HANDLE (WINAPI *pCreateIoCompletionPort)(HANDLE file, HANDLE existing_port, ULONG_PTR key, DWORD threads); +static BOOL (WINAPI *pGetNumaProcessorNode)(UCHAR, PUCHAR); /* ############################### */ static char base[MAX_PATH]; @@ -227,6 +229,7 @@ pQueryInformationJobObject = (void *)GetProcAddress(hkernel32, "QueryInformationJobObject"); pSetInformationJobObject = (void *)GetProcAddress(hkernel32, "SetInformationJobObject"); pCreateIoCompletionPort = (void *)GetProcAddress(hkernel32, "CreateIoCompletionPort"); + pGetNumaProcessorNode = (void *)GetProcAddress(hkernel32, "GetNumaProcessorNode"); return TRUE; } @@ -2692,6 +2695,39 @@ #endif } +static void test_GetNumaProcessorNode(void) +{ + SYSTEM_INFO si; + UCHAR node; + BOOL ret; + int i; + + if (!pGetNumaProcessorNode) + { + win_skip("GetNumaProcessorNode is missing\n"); + return; + } + + GetSystemInfo(&si); + for (i = 0; i < 256; i++) + { + SetLastError(0xdeadbeef); + node = (i < si.dwNumberOfProcessors) ? 0xFF : 0xAA; + ret = pGetNumaProcessorNode(i, &node); + if (i < si.dwNumberOfProcessors) + { + ok(ret, "GetNumaProcessorNode returned FALSE for processor %d\n", i); + ok(node != 0xFF, "expected node != 0xFF, but got 0xFF\n"); + } + else + { + ok(!ret, "GetNumaProcessorNode returned TRUE for processor %d\n", i); + ok(node == 0xFF || broken(node == 0xAA) /* WinXP */, "expected node 0xFF, got %x\n", node); + ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + } + } +} + START_TEST(process) { HANDLE job; @@ -2741,6 +2777,7 @@ test_RegistryQuota(); test_DuplicateHandle(); test_StartupNoConsole(); + test_GetNumaProcessorNode(); /* things that can be tested: * lookup: check the way program to be executed is searched * handles: check the handle inheritance stuff (+sec options) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/kernel32/tests/thread.c wine-staging-1.7.47~ubuntu14.10.1/dlls/kernel32/tests/thread.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/kernel32/tests/thread.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/kernel32/tests/thread.c 2015-07-12 05:36:18.000000000 +0000 @@ -86,6 +86,7 @@ static BOOL (WINAPI *pGetCurrentActCtx)(HANDLE *); static void (WINAPI *pReleaseActCtx)(HANDLE); static PTP_POOL (WINAPI *pCreateThreadpool)(PVOID); +static void (WINAPI *pCloseThreadpool)(PTP_POOL); static PTP_WORK (WINAPI *pCreateThreadpoolWork)(PTP_WORK_CALLBACK,PVOID,PTP_CALLBACK_ENVIRON); static void (WINAPI *pSubmitThreadpoolWork)(PTP_WORK); static void (WINAPI *pWaitForThreadpoolWorkCallbacks)(PTP_WORK,BOOL); @@ -1627,8 +1628,8 @@ int workcalled = 0; if (!pCreateThreadpool) { - todo_wine win_skip("thread pool apis not supported.\n"); - return; + win_skip("thread pool apis not supported.\n"); + return; } work = pCreateThreadpoolWork(threadpool_workcallback, &workcalled, NULL); @@ -1640,7 +1641,8 @@ ok (workcalled == 1, "expected work to be called once, got %d\n", workcalled); pool = pCreateThreadpool(NULL); - todo_wine ok (pool != NULL, "CreateThreadpool failed\n"); + ok (pool != NULL, "CreateThreadpool failed\n"); + pCloseThreadpool(pool); } static void test_reserved_tls(void) @@ -1705,6 +1707,7 @@ X(ReleaseActCtx); X(CreateThreadpool); + X(CloseThreadpool); X(CreateThreadpoolWork); X(SubmitThreadpoolWork); X(WaitForThreadpoolWorkCallbacks); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/kernel32/tests/volume.c wine-staging-1.7.47~ubuntu14.10.1/dlls/kernel32/tests/volume.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/kernel32/tests/volume.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/kernel32/tests/volume.c 2015-07-12 05:36:18.000000000 +0000 @@ -793,9 +793,9 @@ for (i=0; idwLowDateTime; + timeout.u.HighPart = due_time->dwHighDateTime; + } + + TpSetTimer( timer, due_time ? &timeout : NULL, period, window_length ); +} + +/*********************************************************************** + * SetThreadpoolWait (KERNEL32.@) + */ +VOID WINAPI SetThreadpoolWait( TP_WAIT *wait, HANDLE handle, FILETIME *due_time ) +{ + LARGE_INTEGER timeout; + + TRACE( "%p, %p, %p\n", wait, handle, due_time ); + + if (!handle) + { + due_time = NULL; + } + else if (due_time) + { + timeout.u.LowPart = due_time->dwLowDateTime; + timeout.u.HighPart = due_time->dwHighDateTime; + } + + TpSetWait( wait, handle, due_time ? &timeout : NULL ); +} + +/*********************************************************************** + * TrySubmitThreadpoolCallback (KERNEL32.@) + */ +BOOL WINAPI TrySubmitThreadpoolCallback( PTP_SIMPLE_CALLBACK callback, PVOID userdata, + TP_CALLBACK_ENVIRON *environment ) +{ + NTSTATUS status; + + TRACE( "%p, %p, %p\n", callback, userdata, environment ); + + status = TpSimpleTryPost( callback, userdata, environment ); + if (status) + { + SetLastError( RtlNtStatusToDosError(status) ); + return FALSE; + } + + return TRUE; +} diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/mpr/pwcache.c wine-staging-1.7.47~ubuntu14.10.1/dlls/mpr/pwcache.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/mpr/pwcache.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/mpr/pwcache.c 2015-07-12 05:36:18.000000000 +0000 @@ -306,7 +306,8 @@ entry->cbPassword = data_sz; entry->iEntry = i; entry->nType = nType; - r = RegEnumValueA( hkey, i, NULL, &val_sz, NULL, &type, + size = sizeof val; + r = RegEnumValueA( hkey, i, val, &size, NULL, &type, &entry->abResource[val_sz], &data_sz ); if( r == ERROR_SUCCESS ) enumPasswordProc( entry, param ); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/mpr/tests/mpr.c wine-staging-1.7.47~ubuntu14.10.1/dlls/mpr/tests/mpr.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/mpr/tests/mpr.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/mpr/tests/mpr.c 2015-07-12 05:36:18.000000000 +0000 @@ -160,8 +160,106 @@ } } +static DWORD (WINAPI *pWNetCachePassword)( LPSTR, WORD, LPSTR, WORD, BYTE, WORD ); +static DWORD (WINAPI *pWNetGetCachedPassword)( LPSTR, WORD, LPSTR, LPWORD, BYTE ); +static UINT (WINAPI *pWNetEnumCachedPasswords)( LPSTR, WORD, BYTE, ENUMPASSWORDPROC, DWORD); +static UINT (WINAPI *pWNetRemoveCachedPassword)( LPSTR, WORD, BYTE ); + +#define MPR_GET_PROC(func) \ + p ## func = (void*)GetProcAddress(hmpr, #func) + +static void InitFunctionPtrs(void) +{ + HMODULE hmpr = GetModuleHandleA("mpr.dll"); + + MPR_GET_PROC(WNetCachePassword); + MPR_GET_PROC(WNetGetCachedPassword); + MPR_GET_PROC(WNetEnumCachedPasswords); + MPR_GET_PROC(WNetRemoveCachedPassword); +} + +static const char* m_resource = "wine-test-resource"; +static const char* m_password = "wine-test-password"; +static const BYTE m_type = 1; +static const DWORD m_param = 8; +static BOOL m_callback_reached; + +static BOOL CALLBACK enum_password_proc(PASSWORD_CACHE_ENTRY* pce, DWORD param) +{ + WORD size = 0; + char* buf; + + ok(param == m_param, "param, got %d, got %d\n", param, m_param); + + size = offsetof( PASSWORD_CACHE_ENTRY, abResource[pce->cbResource + pce->cbPassword] ); + ok(pce->cbEntry == size, "cbEntry, got %d, expected %d\n", pce->cbEntry, size); + ok(pce->cbResource == strlen(m_resource), "cbResource, got %d\n", pce->cbResource); + ok(pce->cbPassword == strlen(m_password), "cbPassword, got %d\n", pce->cbPassword); + ok(pce->iEntry == 0, "iEntry, got %d, got %d\n", pce->iEntry, 0); + ok(pce->nType == m_type, "nType, got %d, got %d\n", pce->nType, m_type); + + buf = (char*)pce->abResource; + ok(strncmp(buf, m_resource, pce->cbResource)==0, "enumerated ressource differs, got %.*s, expected %s\n", pce->cbResource, buf, m_resource); + + buf += pce->cbResource; + ok(strncmp(buf, m_password, pce->cbPassword)==0, "enumerated ressource differs, got %.*s, expected %s\n", pce->cbPassword, buf, m_password); + + m_callback_reached = 1; + return TRUE; +} + +static void test_WNetCachePassword(void) +{ + char resource_buf[32]; + char password_buf[32]; + char prefix_buf[32]; + WORD resource_len; + WORD password_len; + WORD prefix_len; + DWORD ret; + + InitFunctionPtrs(); + + if (pWNetCachePassword && + pWNetGetCachedPassword && + pWNetEnumCachedPasswords && + pWNetRemoveCachedPassword) + { + strcpy(resource_buf, m_resource); + resource_len = strlen(m_resource); + strcpy(password_buf, m_password); + password_len = strlen(m_password); + ret = pWNetCachePassword(resource_buf, resource_len, password_buf, password_len, m_type, 0); + ok(ret == WN_SUCCESS, "WNetCachePassword failed: got %d, expected %d\n", ret, WN_SUCCESS); + + strcpy(resource_buf, m_resource); + resource_len = strlen(m_resource); + strcpy(password_buf, "------"); + password_len = sizeof(password_buf); + ret = pWNetGetCachedPassword(resource_buf, resource_len, password_buf, &password_len, m_type); + ok(ret == WN_SUCCESS, "WNetGetCachedPassword failed: got %d, expected %d\n", ret, WN_SUCCESS); + ok(password_len == strlen(m_password), "password length different, got %d\n", password_len); + ok(strncmp(password_buf, m_password, password_len)==0, "passwords different, got %.*s, expected %s\n", password_len, password_buf, m_password); + + prefix_len = 9; + strcpy(prefix_buf, m_resource); + prefix_buf[prefix_len] = '0'; + ret = pWNetEnumCachedPasswords(prefix_buf, prefix_len, m_type, enum_password_proc, m_param); + ok(ret == WN_SUCCESS, "WNetEnumCachedPasswords failed: got %d, expected %d\n", ret, WN_SUCCESS); + ok(m_callback_reached == 1, "callback was not reached\n"); + + strcpy(resource_buf, m_resource); + resource_len = strlen(m_resource); + ret = pWNetRemoveCachedPassword(resource_buf, resource_len, m_type); + ok(ret == WN_SUCCESS, "WNetRemoveCachedPassword failed: got %d, expected %d\n", ret, WN_SUCCESS); + } else { + win_skip("WNetCachePassword() is not supported.\n"); + } +} + START_TEST(mpr) { test_WNetGetUniversalName(); test_WNetGetRemoteName(); + test_WNetCachePassword(); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/htmlevent.c wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/htmlevent.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/htmlevent.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/htmlevent.c 2015-07-12 05:36:18.000000000 +0000 @@ -256,7 +256,7 @@ return EVENTID_LAST; } -typedef struct { +struct HTMLEventObj { DispatchEx dispex; IHTMLEventObj IHTMLEventObj_iface; @@ -268,7 +268,7 @@ VARIANT return_value; BOOL prevent_default; BOOL cancel_bubble; -} HTMLEventObj; +}; static inline HTMLEventObj *impl_from_IHTMLEventObj(IHTMLEventObj *iface) { @@ -966,7 +966,7 @@ return FALSE; } -static void call_event_handlers(HTMLDocumentNode *doc, HTMLEventObj *event_obj, EventTarget *event_target, +void call_event_handlers(HTMLDocumentNode *doc, HTMLEventObj *event_obj, EventTarget *event_target, ConnectionPointContainer *cp_container, eventid_t eid, IDispatch *this_obj) { event_target_t *data = get_event_target_data(event_target, FALSE); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/htmlevent.h wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/htmlevent.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/htmlevent.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/htmlevent.h 2015-07-12 05:36:18.000000000 +0000 @@ -67,6 +67,9 @@ void bind_target_event(HTMLDocumentNode*,EventTarget*,const WCHAR*,IDispatch*) DECLSPEC_HIDDEN; HRESULT ensure_doc_nsevent_handler(HTMLDocumentNode*,eventid_t) DECLSPEC_HIDDEN; +typedef struct HTMLEventObj HTMLEventObj; +void call_event_handlers(HTMLDocumentNode*,HTMLEventObj*,EventTarget*,ConnectionPointContainer*,eventid_t,IDispatch*); + void init_nsevents(HTMLDocumentNode*) DECLSPEC_HIDDEN; void release_nsevents(HTMLDocumentNode*) DECLSPEC_HIDDEN; void add_nsevent_listener(HTMLDocumentNode*,nsIDOMNode*,LPCWSTR) DECLSPEC_HIDDEN; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/htmlwindow.c wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/htmlwindow.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/htmlwindow.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/htmlwindow.c 2015-07-12 05:36:18.000000000 +0000 @@ -256,8 +256,9 @@ IHTMLOptionElementFactory_Release(&This->option_factory->IHTMLOptionElementFactory_iface); } - if(This->xml_factory) { - IHTMLXMLHttpRequestFactory_Release(&This->xml_factory->IHTMLXMLHttpRequestFactory_iface); + if(This->xhr_factory) { + This->xhr_factory->window = NULL; + IHTMLXMLHttpRequestFactory_Release(&This->xhr_factory->IHTMLXMLHttpRequestFactory_iface); } if(This->screen) @@ -1973,16 +1974,17 @@ TRACE("(%p)->(%p)\n", This, p); - if(!window->xml_factory) { + if(!window->xhr_factory) { HRESULT hres; - hres = HTMLXMLHttpRequestFactory_Create(window, &window->xml_factory); - if(FAILED(hres)) + hres = HTMLXMLHttpRequestFactory_Create(window, &window->xhr_factory); + if(FAILED(hres)) { return hres; + } } V_VT(p) = VT_DISPATCH; - V_DISPATCH(p) = (IDispatch*)&window->xml_factory->IHTMLXMLHttpRequestFactory_iface; + V_DISPATCH(p) = (IDispatch*)&window->xhr_factory->IHTMLXMLHttpRequestFactory_iface; IDispatch_AddRef(V_DISPATCH(p)); return S_OK; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/mshtml_private.h wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/mshtml_private.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/mshtml_private.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/mshtml_private.h 2015-07-12 05:36:18.000000000 +0000 @@ -359,6 +359,8 @@ IHTMLXMLHttpRequestFactory IHTMLXMLHttpRequestFactory_iface; LONG ref; + + HTMLInnerWindow *window; } HTMLXMLHttpRequestFactory; struct HTMLLocation { @@ -447,7 +449,7 @@ HTMLImageElementFactory *image_factory; HTMLOptionElementFactory *option_factory; - HTMLXMLHttpRequestFactory *xml_factory; + HTMLXMLHttpRequestFactory *xhr_factory; IHTMLScreen *screen; OmHistory *history; IHTMLStorage *session_storage; @@ -853,6 +855,7 @@ void *nsalloc(size_t) __WINE_ALLOC_SIZE(1) DECLSPEC_HIDDEN; void nsfree(void*) DECLSPEC_HIDDEN; +BOOL nsACString_Init(nsACString *str, const char *data) DECLSPEC_HIDDEN; void nsACString_InitDepend(nsACString*,const char*) DECLSPEC_HIDDEN; void nsACString_SetData(nsACString*,const char*) DECLSPEC_HIDDEN; UINT32 nsACString_GetData(const nsACString*,const char**) DECLSPEC_HIDDEN; @@ -876,6 +879,7 @@ void get_editor_controller(NSContainer*) DECLSPEC_HIDDEN; nsresult get_nsinterface(nsISupports*,REFIID,void**) DECLSPEC_HIDDEN; nsIWritableVariant *create_nsvariant(void) DECLSPEC_HIDDEN; +nsIXMLHttpRequest *create_nsxhr(nsIDOMWindow *nswindow) DECLSPEC_HIDDEN; nsresult create_nsfile(const PRUnichar*,nsIFile**) DECLSPEC_HIDDEN; char *get_nscategory_entry(const char*,const char*) DECLSPEC_HIDDEN; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/nsembed.c wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/nsembed.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/nsembed.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/nsembed.c 2015-07-12 05:36:18.000000000 +0000 @@ -48,6 +48,8 @@ #define NS_PREFERENCES_CONTRACTID "@mozilla.org/preferences;1" #define NS_VARIANT_CONTRACTID "@mozilla.org/variant;1" #define NS_CATEGORYMANAGER_CONTRACTID "@mozilla.org/categorymanager;1" +#define NS_XMLHTTPREQUEST_CONTRACTID "@mozilla.org/xmlextras/xmlhttprequest;1" +#define NS_SCRIPTSECURITYMANAGER_CONTRACTID "@mozilla.org/scriptsecuritymanager;1" #define PR_UINT32_MAX 0xffffffff @@ -793,7 +795,7 @@ NS_Free(mem); } -static BOOL nsACString_Init(nsACString *str, const char *data) +BOOL nsACString_Init(nsACString *str, const char *data) { return NS_SUCCEEDED(NS_CStringContainerInit2(str, data, PR_UINT32_MAX, 0)); } @@ -2160,3 +2162,51 @@ nsIWebBrowserChrome_Release(&This->nsIWebBrowserChrome_iface); } + +nsIXMLHttpRequest *create_nsxhr(nsIDOMWindow *nswindow) +{ + nsIScriptSecurityManager *secman; + nsIPrincipal *nspri; + nsIGlobalObject *nsglo; + nsIXMLHttpRequest *nsxhr; + nsresult nsres; + + nsres = nsIServiceManager_GetServiceByContractID(pServMgr, + NS_SCRIPTSECURITYMANAGER_CONTRACTID, + &IID_nsIScriptSecurityManager, (void**)&secman); + if(NS_FAILED(nsres)) { + ERR("Could not get sec manager service: %08x\n", nsres); + return NULL; + } + + nsres = nsIScriptSecurityManager_GetSystemPrincipal(secman, &nspri); + nsIScriptSecurityManager_Release(secman); + if(NS_FAILED(nsres)) { + ERR("GetSystemPrincipal failed: %08x\n", nsres); + return NULL; + } + + nsres = nsIDOMWindow_QueryInterface(nswindow, &IID_nsIGlobalObject, (void **)&nsglo); + assert(nsres == NS_OK); + + nsres = nsIComponentManager_CreateInstanceByContractID(pCompMgr, + NS_XMLHTTPREQUEST_CONTRACTID, NULL, &IID_nsIXMLHttpRequest, + (void**)&nsxhr); + if(NS_FAILED(nsres)) { + ERR("Could not get nsIXMLHttpRequest: %08x\n", nsres); + nsISupports_Release(nspri); + nsIGlobalObject_Release(nsglo); + return NULL; + } + + nsres = nsIXMLHttpRequest_Init(nsxhr, nspri, NULL, nsglo, NULL); + + nsISupports_Release(nspri); + nsIGlobalObject_Release(nsglo); + if(NS_FAILED(nsres)) { + ERR("nsIXMLHttpRequest_Init failed: %08x\n", nsres); + nsIXMLHttpRequest_Release(nsxhr); + return NULL; + } + return nsxhr; +} diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/nsiface.idl wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/nsiface.idl --- wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/nsiface.idl 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/nsiface.idl 2015-07-12 05:36:18.000000000 +0000 @@ -196,6 +196,14 @@ typedef nsISupports nsIDocShellTreeOwner; typedef nsISupports nsIArray; typedef nsISupports nsILoadInfo; +typedef nsISupports nsIContentSecurityPolicy; +typedef nsISupports nsIXMLHttpRequestUpload; +typedef nsISupports nsIClassInfo; +typedef nsISupports nsILoadContext; +typedef nsISupports nsIDomainPolicy; +typedef nsISupports nsIScriptContext; +typedef nsISupports nsIObjectInputStream; +typedef nsISupports nsIObjectOutputStream; typedef void *JSContext; typedef void *JSObject; @@ -4015,4 +4023,81 @@ nsresult GetDOMElement(nsIDOMElement **aDOMElement); } +[ + object, + uuid(e2538ded-13ef-4f4d-946b-65d333b4f03c), + local +] +interface nsIGlobalObject : nsISupports +{ +} + +[ + object, + uuid(2e91e088-e9fa-4ba4-9887-2a0b7cf27a3e), + local +] +interface nsIXMLHttpRequest : nsISupports +{ + nsresult GetChannel(nsIChannel **aChannel); + nsresult GetResponseXML(nsIDOMDocument **aResponseXML); + nsresult GetResponseText(nsAString *aResponseText); + nsresult GetResponseType(nsAString *aResponseType); + nsresult SetResponseType(const nsAString *aResponseType); + nsresult GetResponse(JSContext*cx, int /*JS::MutableHandleValue*/ aResponse); + nsresult GetStatus(uint32_t *aStatus); + nsresult GetStatusText(nsACString *aStatusText); + nsresult SlowAbort(); + nsresult GetAllResponseHeaders(nsACString *_retval); + nsresult GetResponseHeader(const nsACString *header, nsACString *_retval); + nsresult Open(const nsACString *method, const nsACString *url, bool async, const nsAString *user, const nsAString *password, uint8_t _argc); + nsresult Send(nsIVariant *body); + nsresult SendAsBinary(const nsAString *body); + nsresult SetRequestHeader(const nsACString *header, const nsACString *value); + nsresult GetTimeout(uint32_t *aTimeout); + nsresult SetTimeout(uint32_t aTimeout); + nsresult GetReadyState(uint16_t *aReadyState); + nsresult SlowOverrideMimeType(const nsAString *mimetype); + nsresult GetMozBackgroundRequest(bool *aMozBackgroundRequest); + nsresult SetMozBackgroundRequest(bool aMozBackgroundRequest); + nsresult GetWithCredentials(bool *aWithCredentials); + nsresult SetWithCredentials(bool aWithCredentials); + nsresult Init(nsIPrincipal *principal, nsIScriptContext *scriptContext, nsIGlobalObject *globalObject, nsIURI *baseURI); + nsresult GetUpload(nsIXMLHttpRequestUpload **aUpload); + nsresult GetOnreadystatechange(JSContext*cx, int /*JS::MutableHandleValue*/ aOnreadystatechange); + nsresult SetOnreadystatechange(JSContext*cx, int /*JS::HandleValue*/ aOnreadystatechange); + nsresult GetMozAnon(bool *aMozAnon); + nsresult GetMozSystem(bool *aMozSystem); +} + +[ + object, + uuid(f649959d-dae3-4027-83fd-5b7f8c8a8815), + local +] +interface nsIScriptSecurityManager : nsISupports { + nsresult CanCreateWrapper(JSContext *aJSContext, const nsIID *aIID, nsISupports *aObj, nsIClassInfo *aClassInfo); + nsresult CanCreateInstance(JSContext *aJSContext, const nsCID *aCID); + nsresult CanGetService(JSContext *aJSContext, const nsCID *aCID); + nsresult CheckLoadURIFromScript(JSContext *cx, nsIURI *uri); + nsresult CheckLoadURIWithPrincipal(nsIPrincipal *aPrincipal, nsIURI *uri, uint32_t flags); + nsresult CheckLoadURIStrWithPrincipal(nsIPrincipal *aPrincipal, const nsACString *uri, uint32_t flags); + nsresult ScriptAllowed(JSObject *aGlobal); + nsresult GetSystemPrincipal(nsIPrincipal **_retval); + nsresult GetSimpleCodebasePrincipal(nsIURI *aURI, nsIPrincipal **_retval); + nsresult GetAppCodebasePrincipal(nsIURI *uri, uint32_t appId, bool inMozBrowser, nsIPrincipal **_retval); + nsresult GetLoadContextCodebasePrincipal(nsIURI *uri, nsILoadContext *loadContext, nsIPrincipal **_retval); + nsresult GetDocShellCodebasePrincipal(nsIURI *uri, nsIDocShell *docShell, nsIPrincipal **_retval); + nsresult GetNoAppCodebasePrincipal(nsIURI *uri, nsIPrincipal **_retval); + nsresult GetCodebasePrincipal(nsIURI *uri, nsIPrincipal **_retval); + nsresult CheckSameOriginURI(nsIURI *aSourceURI, nsIURI *aTargetURI, bool reportError); + nsresult GetChannelResultPrincipal(nsIChannel *aChannel, nsIPrincipal **_retval); + nsresult GetChannelURIPrincipal(nsIChannel *aChannel, nsIPrincipal **_retval); + nsresult IsSystemPrincipal(nsIPrincipal *aPrincipal, bool *_retval); + nsresult GetJarPrefix(uint32_t appId, bool inMozBrowser, nsACString *_retval); + nsresult ActivateDomainPolicy(nsIDomainPolicy **_retval); + nsresult GetDomainPolicyActive(bool *aDomainPolicyActive); + nsresult PolicyAllowsScript(nsIURI *aDomain, bool *_retval); +} + cpp_quote("DEFINE_GUID(IID_nsCycleCollectionISupports, 0xc61eac14,0x5f7a,0x4481,0x96,0x5e,0x7e,0xaa,0x6e,0xff,0xa8,0x5f);") diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/nsio.c wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/nsio.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/nsio.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/nsio.c 2015-07-12 05:36:18.000000000 +0000 @@ -3580,28 +3580,16 @@ return nsIIOService_NewFileURI(nsio, aFile, _retval); } -static nsresult NSAPI nsIOService_NewChannelFromURI2(nsIIOService *iface, nsIURI *aURI, - nsIDOMNode *aLoadingNode, nsIPrincipal *aLoadingPrincipal, nsIPrincipal *aTriggeringPrincipal, - UINT32 aSecurityFlags, UINT32 aContentPolicyType, nsIChannel **_retval) -{ - FIXME("(%p %p %p %p %x %d %p)\n", aURI, aLoadingNode, aLoadingPrincipal, aTriggeringPrincipal, - aSecurityFlags, aContentPolicyType, _retval); - return NS_ERROR_NOT_IMPLEMENTED; -} - -static nsresult NSAPI nsIOService_NewChannelFromURI(nsIIOService *iface, nsIURI *aURI, - nsIChannel **_retval) +static nsresult new_channel_from_uri(nsIURI *uri, nsIChannel **_retval) { nsWineURI *wine_uri; nsChannel *ret; nsresult nsres; - TRACE("(%p %p)\n", aURI, _retval); - - nsres = nsIURI_QueryInterface(aURI, &IID_nsWineURI, (void**)&wine_uri); + nsres = nsIURI_QueryInterface(uri, &IID_nsWineURI, (void**)&wine_uri); if(NS_FAILED(nsres)) { TRACE("Could not get nsWineURI: %08x\n", nsres); - return nsIIOService_NewChannelFromURI(nsio, aURI, _retval); + return nsIIOService_NewChannelFromURI(nsio, uri, _retval); } nsres = create_nschannel(wine_uri, &ret); @@ -3609,13 +3597,29 @@ if(NS_FAILED(nsres)) return nsres; - nsIURI_AddRef(aURI); - ret->original_uri = aURI; + nsIURI_AddRef(uri); + ret->original_uri = uri; *_retval = (nsIChannel*)&ret->nsIHttpChannel_iface; return NS_OK; } +static nsresult NSAPI nsIOService_NewChannelFromURI2(nsIIOService *iface, nsIURI *aURI, + nsIDOMNode *aLoadingNode, nsIPrincipal *aLoadingPrincipal, nsIPrincipal *aTriggeringPrincipal, + UINT32 aSecurityFlags, UINT32 aContentPolicyType, nsIChannel **_retval) +{ + FIXME("(%p %p %p %p %x %d %p) semi-stub\n", aURI, aLoadingNode, aLoadingPrincipal, aTriggeringPrincipal, + aSecurityFlags, aContentPolicyType, _retval); + return new_channel_from_uri(aURI, _retval); +} + +static nsresult NSAPI nsIOService_NewChannelFromURI(nsIIOService *iface, nsIURI *aURI, + nsIChannel **_retval) +{ + TRACE("(%p %p)\n", aURI, _retval); + return new_channel_from_uri(aURI, _retval); +} + static nsresult NSAPI nsIOService_NewChannel2(nsIIOService *iface, const nsACString *aSpec, const char *aOriginCharset, nsIURI *aBaseURI, nsIDOMNode *aLoadingNode, nsIPrincipal *aLoadingPrincipal, nsIPrincipal *aTriggeringPrincipal, UINT32 aSecurityFlags, UINT32 aContentPolicyType, nsIChannel **_retval) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/tests/xmlhttprequest.c wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/tests/xmlhttprequest.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/tests/xmlhttprequest.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/tests/xmlhttprequest.c 2015-07-12 05:36:18.000000000 +0000 @@ -279,6 +279,84 @@ }; static IDispatchEx xmlhttprequest_onreadystatechange_obj = { &xmlhttprequest_onreadystatechangeFuncVtbl }; +static BOOL doc_complete; +static IHTMLDocument2 *notif_doc; + +static HRESULT WINAPI PropertyNotifySink_QueryInterface(IPropertyNotifySink *iface, + REFIID riid, void**ppv) +{ + if(IsEqualGUID(&IID_IPropertyNotifySink, riid)) { + *ppv = iface; + return S_OK; + } + + ok(0, "unexpected call\n"); + return E_NOINTERFACE; +} + +static ULONG WINAPI PropertyNotifySink_AddRef(IPropertyNotifySink *iface) +{ + return 2; +} + +static ULONG WINAPI PropertyNotifySink_Release(IPropertyNotifySink *iface) +{ + return 1; +} + +static HRESULT WINAPI PropertyNotifySink_OnChanged(IPropertyNotifySink *iface, DISPID dispID) +{ + if(dispID == DISPID_READYSTATE){ + BSTR state; + HRESULT hres; + + hres = IHTMLDocument2_get_readyState(notif_doc, &state); + ok(hres == S_OK, "get_readyState failed: %08x\n", hres); + + if(!strcmp_wa(state, "complete")) + doc_complete = TRUE; + + SysFreeString(state); + } + + return S_OK; +} + +static HRESULT WINAPI PropertyNotifySink_OnRequestEdit(IPropertyNotifySink *iface, DISPID dispID) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static IPropertyNotifySinkVtbl PropertyNotifySinkVtbl = { + PropertyNotifySink_QueryInterface, + PropertyNotifySink_AddRef, + PropertyNotifySink_Release, + PropertyNotifySink_OnChanged, + PropertyNotifySink_OnRequestEdit +}; + +static IPropertyNotifySink PropertyNotifySink = { &PropertyNotifySinkVtbl }; + +static void do_advise(IUnknown *unk, REFIID riid, IUnknown *unk_advise) +{ + IConnectionPointContainer *container; + IConnectionPoint *cp; + DWORD cookie; + HRESULT hres; + + hres = IUnknown_QueryInterface(unk, &IID_IConnectionPointContainer, (void**)&container); + ok(hres == S_OK, "QueryInterface(IID_IConnectionPointContainer) failed: %08x\n", hres); + + hres = IConnectionPointContainer_FindConnectionPoint(container, riid, &cp); + IConnectionPointContainer_Release(container); + ok(hres == S_OK, "FindConnectionPoint failed: %08x\n", hres); + + hres = IConnectionPoint_Advise(cp, unk_advise, &cookie); + IConnectionPoint_Release(cp); + ok(hres == S_OK, "Advise failed: %08x\n", hres); +} + static void pump_msgs(BOOL *b) { MSG msg; @@ -362,12 +440,12 @@ ok(V_DISPATCH(&var) == (IDispatch*)&xmlhttprequest_onreadystatechange_obj, "unexpected onreadystatechange value\n"); hres = IHTMLXMLHttpRequest_get_readyState(xhr, NULL); - todo_wine ok(hres == E_POINTER, "Expect E_POINTER, got %08x\n", hres); + ok(hres == E_POINTER, "Expect E_POINTER, got %08x\n", hres); val = 0xdeadbeef; hres = IHTMLXMLHttpRequest_get_readyState(xhr, &val); - todo_wine ok(hres == S_OK, "get_readyState failed: %08x\n", hres); - todo_wine ok(val == 0, "Expect UNSENT, got %d\n", val); + ok(hres == S_OK, "get_readyState failed: %08x\n", hres); + ok(val == 0, "Expect UNSENT, got %d\n", val); hres = IHTMLXMLHttpRequest_get_status(xhr, NULL); todo_wine ok(hres == E_POINTER, "Expect E_POINTER, got %08x\n", hres); @@ -485,14 +563,15 @@ todo_wine ok(hres == E_FAIL, "Expect E_FAIL, got: %08x\n", hres); todo_wine ok(val == 0, "Expect 0, got %d\n", val); + text = (BSTR)0xdeadbeef; hres = IHTMLXMLHttpRequest_get_statusText(xhr, &text); todo_wine ok(hres == E_FAIL, "Expect E_FAIL, got: %08x\n", hres); todo_wine ok(text == NULL, "Expect NULL, got %p\n", text); val = 0xdeadbeef; hres = IHTMLXMLHttpRequest_get_readyState(xhr, &val); - todo_wine ok(hres == S_OK, "get_readyState failed: %08x\n", hres); - todo_wine ok(val == 0, "Expect UNSENT, got %d\n", val); + ok(hres == S_OK, "get_readyState failed: %08x\n", hres); + ok(val == 0, "Expect UNSENT, got %d\n", val); method = a2bstr("GET"); url = a2bstr(xml_url); @@ -502,8 +581,8 @@ SET_EXPECT(xmlhttprequest_onreadystatechange_opened); hres = IHTMLXMLHttpRequest_open(xhr, method, url, vbool, vempty, vempty); - todo_wine ok(hres == S_OK, "open failed: %08x\n", hres); - todo_wine CHECK_CALLED(xmlhttprequest_onreadystatechange_opened); + ok(hres == S_OK, "open failed: %08x\n", hres); + CHECK_CALLED(xmlhttprequest_onreadystatechange_opened); SysFreeString(method); SysFreeString(url); @@ -516,12 +595,12 @@ val = 0xdeadbeef; hres = IHTMLXMLHttpRequest_get_status(xhr, &val); - ok(hres == E_FAIL, "Expect E_FAIL, got: %08x\n", hres); - ok(val == 0, "Expect 0, got %d\n", val); + todo_wine ok(hres == E_FAIL, "Expect E_FAIL, got: %08x\n", hres); + todo_wine ok(val == 0, "Expect 0, got %d\n", val); hres = IHTMLXMLHttpRequest_get_statusText(xhr, &text); - ok(hres == E_FAIL, "Expect E_FAIL, got: %08x\n", hres); - ok(text == NULL, "Expect NULL, got %p\n", text); + todo_wine ok(hres == E_FAIL, "Expect E_FAIL, got: %08x\n", hres); + todo_wine ok(text == NULL, "Expect NULL, got %p\n", text); val = 0xdeadbeef; hres = IHTMLXMLHttpRequest_get_readyState(xhr, &val); @@ -533,24 +612,31 @@ SET_EXPECT(xmlhttprequest_onreadystatechange_loading); SET_EXPECT(xmlhttprequest_onreadystatechange_done); hres = IHTMLXMLHttpRequest_send(xhr, vempty); - ok(hres == S_OK, "send failed: %08x\n", hres); - pump_msgs(&called_xmlhttprequest_onreadystatechange_done); + ok(hres == S_OK, "send failed: %08x\n", hres); + if(SUCCEEDED(hres)) + pump_msgs(&called_xmlhttprequest_onreadystatechange_done); todo_wine CHECK_CALLED(xmlhttprequest_onreadystatechange_opened); - todo_wine CHECK_CALLED(xmlhttprequest_onreadystatechange_headers_received); - todo_wine CHECK_CALLED(xmlhttprequest_onreadystatechange_loading); + CHECK_CALLED(xmlhttprequest_onreadystatechange_headers_received); + CHECK_CALLED(xmlhttprequest_onreadystatechange_loading); CHECK_CALLED(xmlhttprequest_onreadystatechange_done); + if(FAILED(hres)) { + IHTMLXMLHttpRequest_Release(xhr); + xhr = NULL; + return; + } + val = 0xdeadbeef; hres = IHTMLXMLHttpRequest_get_status(xhr, &val); - ok(hres == S_OK, "get_status failed: %08x\n", hres); + todo_wine ok(hres == S_OK, "get_status failed: %08x\n", hres); todo_wine ok(val == 200, "Expect 200, got %d\n", val); + text = NULL; hres = IHTMLXMLHttpRequest_get_statusText(xhr, &text); - ok(hres == S_OK, "get_statusText failed: %08x\n", hres); + todo_wine ok(hres == S_OK, "get_statusText failed: %08x\n", hres); todo_wine ok(text != NULL, "text == NULL\n"); - todo_wine ok(!strcmp_wa(text, "OK"), - "Expected \"OK\", got %s\n", wine_dbgstr_w(text)); + todo_wine ok(!strcmp_wa(text, "OK"), "Expected \"OK\", got %s\n", wine_dbgstr_w(text)); SysFreeString(text); val = 0xdeadbeef; @@ -558,11 +644,12 @@ ok(hres == S_OK, "get_readyState failed: %08x\n", hres); ok(val == 4, "Expect DONE, got %d\n", val); + text = NULL; hres = IHTMLXMLHttpRequest_get_responseText(xhr, &text); - ok(hres == S_OK, "get_responseText failed: %08x\n", hres); - ok(text != NULL, "test == NULL\n"); - ok(!strcmp_wa(text, EXPECT_RESPONSE_TEXT), "expect %s, got %s\n", - EXPECT_RESPONSE_TEXT, wine_dbgstr_w(text)); + todo_wine ok(hres == S_OK, "get_responseText failed: %08x\n", hres); + todo_wine ok(text != NULL, "test == NULL\n"); + todo_wine ok(!strcmp_wa(text, EXPECT_RESPONSE_TEXT), "expect %s, got %s\n", + EXPECT_RESPONSE_TEXT, wine_dbgstr_w(text)); SysFreeString(text); IHTMLXMLHttpRequest_Release(xhr); @@ -603,6 +690,11 @@ IBindCtx_Release(bc); SysFreeString(url); + doc_complete = FALSE; + notif_doc = doc; + do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink); + pump_msgs(&doc_complete); + return doc; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/xmlhttprequest.c wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/xmlhttprequest.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/mshtml/xmlhttprequest.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/mshtml/xmlhttprequest.c 2015-07-12 05:36:18.000000000 +0000 @@ -33,13 +33,144 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml); -/* IHTMLXMLHttpRequest */ +static HRESULT bstr_to_nsacstr(BSTR bstr, nsACString *str) +{ + char *cstr = heap_strdupWtoU(bstr); + if(!cstr) + return E_OUTOFMEMORY; + nsACString_Init(str, cstr); + heap_free(cstr); + return S_OK; +} + +static HRESULT variant_to_nsastr(VARIANT var, nsAString *ret) +{ + switch(V_VT(&var)) { + case VT_NULL: + case VT_ERROR: + case VT_EMPTY: + nsAString_Init(ret, NULL); + return S_OK; + case VT_BSTR: + nsAString_InitDepend(ret, V_BSTR(&var)); + return S_OK; + default: + FIXME("Unsupported VARIANT: %s\n", debugstr_variant(&var)); + return E_INVALIDARG; + } +} + +typedef struct XMLHttpReqEventListener XMLHttpReqEventListener; + typedef struct { EventTarget event_target; IHTMLXMLHttpRequest IHTMLXMLHttpRequest_iface; LONG ref; + nsIXMLHttpRequest *nsxhr; + XMLHttpReqEventListener *event_listener; } HTMLXMLHttpRequest; +struct XMLHttpReqEventListener { + nsIDOMEventListener nsIDOMEventListener_iface; + LONG ref; + HTMLXMLHttpRequest *xhr; +}; + +static void detach_xhr_event_listener(XMLHttpReqEventListener *event_listener) +{ + nsIDOMEventTarget *event_target; + nsAString str; + nsresult nsres; + + static const WCHAR readystatechangeW[] = + {'o','n','r','e','a','d','y','s','t','a','t','e','c','h','a','n','g','e',0}; + + nsres = nsIXMLHttpRequest_QueryInterface(event_listener->xhr->nsxhr, &IID_nsIDOMEventTarget, (void**)&event_target); + assert(nsres == NS_OK); + + nsAString_InitDepend(&str, readystatechangeW); + nsres = nsIDOMEventTarget_RemoveEventListener(event_target, &str, &event_listener->nsIDOMEventListener_iface, FALSE); + nsAString_Finish(&str); + nsIDOMEventTarget_Release(event_target); + + event_listener->xhr->event_listener = NULL; + event_listener->xhr = NULL; + nsIDOMEventListener_Release(&event_listener->nsIDOMEventListener_iface); +} + + +static inline XMLHttpReqEventListener *impl_from_nsIDOMEventListener(nsIDOMEventListener *iface) +{ + return CONTAINING_RECORD(iface, XMLHttpReqEventListener, nsIDOMEventListener_iface); +} + +static nsresult NSAPI XMLHttpReqEventListener_QueryInterface(nsIDOMEventListener *iface, + nsIIDRef riid, void **result) +{ + XMLHttpReqEventListener *This = impl_from_nsIDOMEventListener(iface); + + if(IsEqualGUID(&IID_nsISupports, riid)) { + TRACE("(%p)->(IID_nsISupports, %p)\n", This, result); + *result = &This->nsIDOMEventListener_iface; + }else if(IsEqualGUID(&IID_nsIDOMEventListener, riid)) { + TRACE("(%p)->(IID_nsIDOMEventListener %p)\n", This, result); + *result = &This->nsIDOMEventListener_iface; + }else { + *result = NULL; + TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), result); + return NS_NOINTERFACE; + } + + nsIDOMEventListener_AddRef(&This->nsIDOMEventListener_iface); + return NS_OK; +} + +static nsrefcnt NSAPI XMLHttpReqEventListener_AddRef(nsIDOMEventListener *iface) +{ + XMLHttpReqEventListener *This = impl_from_nsIDOMEventListener(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; +} + +static nsrefcnt NSAPI XMLHttpReqEventListener_Release(nsIDOMEventListener *iface) +{ + XMLHttpReqEventListener *This = impl_from_nsIDOMEventListener(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if(!ref) { + assert(!This->xhr); + heap_free(This); + } + + return ref; +} + +static nsresult NSAPI XMLHttpReqEventListener_HandleEvent(nsIDOMEventListener *iface, nsIDOMEvent *event) +{ + XMLHttpReqEventListener *This = impl_from_nsIDOMEventListener(iface); + + TRACE("(%p)\n", This); + + if(!This->xhr) + return NS_OK; + + call_event_handlers(NULL, NULL, &This->xhr->event_target, NULL, EVENTID_READYSTATECHANGE, + (IDispatch*)&This->xhr->IHTMLXMLHttpRequest_iface); + return NS_OK; +} + +static const nsIDOMEventListenerVtbl XMLHttpReqEventListenerVtbl = { + XMLHttpReqEventListener_QueryInterface, + XMLHttpReqEventListener_AddRef, + XMLHttpReqEventListener_Release, + XMLHttpReqEventListener_HandleEvent +}; + static inline HTMLXMLHttpRequest *impl_from_IHTMLXMLHttpRequest(IHTMLXMLHttpRequest *iface) { return CONTAINING_RECORD(iface, HTMLXMLHttpRequest, IHTMLXMLHttpRequest_iface); @@ -87,7 +218,10 @@ TRACE("(%p) ref=%d\n", This, ref); if(!ref) { + if(This->event_listener) + detach_xhr_event_listener(This->event_listener); release_dispex(&This->event_target.dispex); + nsIXMLHttpRequest_Release(This->nsxhr); heap_free(This); } @@ -129,8 +263,20 @@ static HRESULT WINAPI HTMLXMLHttpRequest_get_readyState(IHTMLXMLHttpRequest *iface, LONG *p) { HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + UINT16 val; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + if(!p) + return E_POINTER; + nsres = nsIXMLHttpRequest_GetReadyState(This->nsxhr, &val); + if(NS_FAILED(nsres)) { + ERR("nsIXMLHttpRequest_GetReadyState failed: %08x\n", nsres); + return E_FAIL; + } + *p = val; + return S_OK; } static HRESULT WINAPI HTMLXMLHttpRequest_get_responseBody(IHTMLXMLHttpRequest *iface, VARIANT *p) @@ -196,15 +342,91 @@ static HRESULT WINAPI HTMLXMLHttpRequest_open(IHTMLXMLHttpRequest *iface, BSTR bstrMethod, BSTR bstrUrl, VARIANT varAsync, VARIANT varUser, VARIANT varPassword) { HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface); - FIXME("(%p)->(%s %s %s %s %s)\n", This, debugstr_w(bstrMethod), debugstr_w(bstrUrl), debugstr_variant(&varAsync), debugstr_variant(&varUser), debugstr_variant(&varPassword)); - return E_NOTIMPL; + nsACString method, url; + nsAString user, password; + nsresult nsres; + HRESULT hres; + + TRACE("(%p)->(%s %s %s %s %s)\n", This, debugstr_w(bstrMethod), debugstr_w(bstrUrl), debugstr_variant(&varAsync), debugstr_variant(&varUser), debugstr_variant(&varPassword)); + + if(V_VT(&varAsync) != VT_BOOL) { + FIXME("varAsync not supported: %s\n", debugstr_variant(&varAsync)); + return E_FAIL; + } + + /* Note: Starting with Gecko 30.0 (Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27), + * synchronous requests on the main thread have been deprecated due to the negative + * effects to the user experience. + */ + if(!V_BOOL(&varAsync)) { + FIXME("Synchronous request is not supported yet\n"); + return E_FAIL; + } + + hres = variant_to_nsastr(varUser, &user); + if(FAILED(hres)) + return hres; + hres = variant_to_nsastr(varPassword, &password); + if(FAILED(hres)) { + nsAString_Finish(&user); + return hres; + } + + hres = bstr_to_nsacstr(bstrMethod, &method); + if(FAILED(hres)) { + nsAString_Finish(&user); + nsAString_Finish(&password); + return hres; + } + hres = bstr_to_nsacstr(bstrUrl, &url); + if(FAILED(hres)) { + nsAString_Finish(&user); + nsAString_Finish(&password); + nsACString_Finish(&method); + return hres; + } + + nsres = nsIXMLHttpRequest_Open(This->nsxhr, &method, &url, TRUE, + &user, &password, 0); + + nsACString_Finish(&method); + nsACString_Finish(&url); + nsAString_Finish(&user); + nsAString_Finish(&password); + + if(NS_FAILED(nsres)) { + ERR("nsIXMLHttpRequest_Open failed: %08x\n", nsres); + return E_FAIL; + } + + return S_OK; } static HRESULT WINAPI HTMLXMLHttpRequest_send(IHTMLXMLHttpRequest *iface, VARIANT varBody) { HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface); - FIXME("(%p)->(%s)\n", This, debugstr_variant(&varBody)); - return E_NOTIMPL; + nsresult nsres; + + TRACE("(%p)->(%s)\n", This, debugstr_variant(&varBody)); + + switch(V_VT(&varBody)) { + case VT_NULL: + case VT_EMPTY: + case VT_ERROR: + break; + default: + FIXME("varBody(%s) unsupported\n", debugstr_variant(&varBody)); + return E_FAIL; + } + + nsres = nsIXMLHttpRequest_Send(This->nsxhr, NULL); + + if(NS_FAILED(nsres)) { + ERR("nsIXMLHttpRequest_Send failed: %08x\n", nsres); + return E_FAIL; + } + + return S_OK; } static HRESULT WINAPI HTMLXMLHttpRequest_getAllResponseHeaders(IHTMLXMLHttpRequest *iface, BSTR *p) @@ -260,10 +482,36 @@ static void HTMLXMLHttpRequest_bind_event(DispatchEx *dispex, int eid) { HTMLXMLHttpRequest *This = impl_from_DispatchEx(dispex); + nsIDOMEventTarget *nstarget; + nsAString type_str; + nsresult nsres; + + static const WCHAR readystatechangeW[] = {'r','e','a','d','y','s','t','a','t','e','c','h','a','n','g','e',0}; - FIXME("(%p)\n", This); + TRACE("(%p)\n", This); assert(eid == EVENTID_READYSTATECHANGE); + + if(This->event_listener) + return; + + This->event_listener = heap_alloc(sizeof(*This->event_listener)); + if(!This->event_listener) + return; + + This->event_listener->nsIDOMEventListener_iface.lpVtbl = &XMLHttpReqEventListenerVtbl; + This->event_listener->ref = 1; + This->event_listener->xhr = This; + + nsres = nsIXMLHttpRequest_QueryInterface(This->nsxhr, &IID_nsIDOMEventTarget, (void**)&nstarget); + assert(nsres == NS_OK); + + nsAString_InitDepend(&type_str, readystatechangeW); + nsres = nsIDOMEventTarget_AddEventListener(nstarget, &type_str, &This->event_listener->nsIDOMEventListener_iface, FALSE, TRUE, 2); + nsAString_Finish(&type_str); + nsIDOMEventTarget_Release(nstarget); + if(NS_FAILED(nsres)) + ERR("AddEventListener failed: %08x\n", nsres); } static dispex_static_data_vtbl_t HTMLXMLHttpRequest_dispex_vtbl = { @@ -378,12 +626,20 @@ { HTMLXMLHttpRequestFactory *This = impl_from_IHTMLXMLHttpRequestFactory(iface); HTMLXMLHttpRequest *ret; + nsIXMLHttpRequest *nsxhr; TRACE("(%p)->(%p)\n", This, p); + nsxhr = create_nsxhr(This->window->base.outer_window->nswindow); + if(!nsxhr) + return E_FAIL; + ret = heap_alloc_zero(sizeof(*ret)); - if(!ret) + if(!ret) { + nsIXMLHttpRequest_Release(nsxhr); return E_OUTOFMEMORY; + } + ret->nsxhr = nsxhr; ret->IHTMLXMLHttpRequest_iface.lpVtbl = &HTMLXMLHttpRequestVtbl; init_dispex(&ret->event_target.dispex, (IUnknown*)&ret->IHTMLXMLHttpRequest_iface, @@ -426,6 +682,7 @@ ret->IHTMLXMLHttpRequestFactory_iface.lpVtbl = &HTMLXMLHttpRequestFactoryVtbl; ret->ref = 1; + ret->window = window; init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLXMLHttpRequestFactory_iface, &HTMLXMLHttpRequestFactory_dispex); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msi/source.c wine-staging-1.7.47~ubuntu14.10.1/dlls/msi/source.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msi/source.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msi/source.c 2015-07-12 05:36:18.000000000 +0000 @@ -258,13 +258,6 @@ return ERROR_NO_MORE_ITEMS; } - if (!pcchVolumeLabel && !pcchDiskPrompt) - { - r = RegEnumValueW(media, dwIndex, NULL, NULL, NULL, - &type, NULL, NULL); - goto done; - } - res = RegQueryInfoKeyW(media, NULL, NULL, NULL, NULL, NULL, NULL, &numvals, &valuesz, &datasz, NULL, NULL); if (res != ERROR_SUCCESS) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msi/tests/install.c wine-staging-1.7.47~ubuntu14.10.1/dlls/msi/tests/install.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msi/tests/install.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msi/tests/install.c 2015-07-12 05:36:18.000000000 +0000 @@ -2656,11 +2656,6 @@ /* published, reinstall */ r = MsiInstallProductA(msifile, NULL); - if (r == ERROR_INSTALL_FAILURE) /* win2k3 */ - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n"); @@ -2939,11 +2934,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } else { ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); @@ -3143,11 +3133,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n"); ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n"); @@ -3174,7 +3159,7 @@ MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_SUCCESS || broken(r == ERROR_INSTALL_FAILURE), "Expected ERROR_SUCCESS, got %u\n", r); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); if (r == ERROR_SUCCESS) { ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n"); @@ -3196,7 +3181,7 @@ MsiSetInternalUI(INSTALLUILEVEL_NONE | INSTALLUILEVEL_SOURCERESONLY, NULL); r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_SUCCESS || broken(r == ERROR_INSTALL_FAILURE), "Expected ERROR_SUCCESS, got %u\n", r); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); if (r == ERROR_SUCCESS) { ok(!delete_pf("msitest\\maximus", TRUE), "UI install occurred, but execute-only was requested.\n"); @@ -3259,11 +3244,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(file_matches(path), "Expected file to be overwritten\n"); ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); @@ -3316,11 +3296,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); memset( buf, 0, sizeof(buf) ); @@ -3364,11 +3339,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(delete_cf("msitest\\maximus", TRUE), "File not installed\n"); ok(delete_cf("msitest", FALSE), "Directory not created\n"); @@ -3410,11 +3380,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n"); @@ -3651,11 +3616,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n"); ok(!delete_pf("msitest", FALSE), "Directory created\n"); @@ -3703,12 +3663,6 @@ sprintf(path, "..\\%s", msifile); r = MsiInstallProductA(path, NULL); - if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } - todo_wine { ok(r == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %u\n", r); @@ -3723,11 +3677,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n"); ok(delete_pf("msitest", FALSE), "Directory not created\n"); @@ -3800,11 +3749,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n"); ok(!delete_pf("msitest", FALSE), "Directory created\n"); @@ -3883,11 +3827,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(delete_pf("msitest\\augustus", TRUE), "File installed\n"); ok(delete_pf("msitest", FALSE), "Directory created\n"); @@ -3946,11 +3885,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n"); ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); @@ -4058,11 +3992,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(delete_pf("msitest\\augustus", TRUE), "File installed\n"); ok(delete_pf("msitest", FALSE), "Directory created\n"); @@ -4107,11 +4036,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(delete_pf("msitest\\alpha", TRUE), "File not installed\n"); ok(!delete_pf("msitest\\beta", TRUE), "File installed\n"); @@ -4643,11 +4567,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(delete_pf("msitest\\augustus", TRUE), "File installed\n"); ok(delete_pf("msitest", FALSE), "Directory created\n"); @@ -4712,11 +4631,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n"); @@ -4771,11 +4685,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n"); ok(delete_pf("msitest", FALSE), "Directory not created\n"); @@ -4875,11 +4784,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); @@ -4938,11 +4842,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(!delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File installed\n"); @@ -5001,11 +4900,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); r = MsiInstallProductA(msifile, "FULL=1"); @@ -5057,11 +4951,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n"); @@ -5198,7 +5087,7 @@ else { fileret = DeleteFileA(src); - ok(fileret, "Failed to delete file %s (%u)\n", src, GetLastError()); + ok(fileret || broken(!fileret) /* win2k3 */, "Failed to delete file %s (%u)\n", src, GetLastError()); } } @@ -5265,11 +5154,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS_REBOOT_REQUIRED, "Expected ERROR_SUCCESS_REBOOT_REQUIRED got %u\n", r); ok(!file_matches_data(path, "msitest\\maximus"), "Expected file not to match\n"); CloseHandle(file); @@ -5332,11 +5216,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS_REBOOT_REQUIRED, "Expected ERROR_SUCCESS_REBOOT_REQUIRED got %u\n", r); ok(!file_matches_data(path, "maximus"), "Expected file not to match\n"); CloseHandle(file); @@ -5391,11 +5270,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(pf_exists("msitest\\override.txt"), "file not installed\n"); @@ -5553,11 +5427,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n"); ok(delete_pf("msitest", FALSE), "directory does not exist\n"); @@ -5786,11 +5655,6 @@ skip("Not enough rights to perform tests\n"); goto error; } - else if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_32KEY, &hkey); @@ -5933,17 +5797,11 @@ MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); r = MsiInstallProductA(msifile, NULL); - if (r == ERROR_INSTALL_FAILURE) - { - win_skip("broken result\n"); - goto error; - } ok(r == ERROR_SUCCESS, "got %u\n", r); r = MsiInstallProductA(msifile, "REMOVE=ALL"); ok(r == ERROR_SUCCESS, "got %u\n", r); -error: DeleteFileA("msitest\\volumeprop.txt"); RemoveDirectoryA("msitest"); DeleteFileA(msifile); @@ -6039,7 +5897,8 @@ lstrcatA(log_file, "\\msitest.log"); MsiEnableLogA(INSTALLLOGMODE_FATALEXIT, log_file, 0); - test_MsiInstallProduct(); + if (pSRSetRestorePointA) /* test has side-effects on win2k3 that cause failures in following tests */ + test_MsiInstallProduct(); test_MsiSetComponentState(); test_packagecoltypes(); test_continuouscabs(); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msi/tests/source.c wine-staging-1.7.47~ubuntu14.10.1/dlls/msi/tests/source.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msi/tests/source.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msi/tests/source.c 2015-07-12 05:36:18.000000000 +0000 @@ -2888,6 +2888,24 @@ ok(labelsz == MAX_PATH, "Expected MAX_PATH, got %d\n", labelsz); ok(!lstrcmpA(prompt, "bbb"), "Expected \"bbb\", got \"%s\"\n", prompt); + /* pcchVolumeLabel, szDiskPrompt and pcchDiskPrompt are NULL */ + id = 0; + lstrcpyA(label, "aaa"); + r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, + MSICODE_PRODUCT, 0, &id, label, NULL, + NULL, NULL); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + ok(!lstrcmpA(label, "aaa"), "Expected \"aaa\", got \"%s\"\n", label); + ok(id == 1, "Expected 1, got %d\n", id); + + /* szVolumeLabel, pcchVolumeLabel, szDiskPrompt and pcchDiskPrompt are NULL */ + id = 0; + r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, + MSICODE_PRODUCT, 0, &id, NULL, NULL, + NULL, NULL); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + ok(id == 1, "Expected 1, got %d\n", id); + /* pcchVolumeLabel is exactly 5 */ lstrcpyA(label, "aaa"); labelsz = 5; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msscript.ocx/Makefile.in wine-staging-1.7.47~ubuntu14.10.1/dlls/msscript.ocx/Makefile.in --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msscript.ocx/Makefile.in 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msscript.ocx/Makefile.in 2015-07-12 05:36:18.000000000 +0000 @@ -1,6 +1,7 @@ MODULE = msscript.ocx RC_SRCS = msscript.rc IDL_SRCS = msscript.idl +IMPORTS = oleaut32 C_SRCS = \ msscript.c diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msscript.ocx/msscript.c wine-staging-1.7.47~ubuntu14.10.1/dlls/msscript.ocx/msscript.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msscript.ocx/msscript.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msscript.ocx/msscript.c 2015-07-12 05:36:18.000000000 +0000 @@ -28,20 +28,417 @@ WINE_DEFAULT_DEBUG_CHANNEL(msscript); +struct ScriptControl { + IScriptControl IScriptControl_iface; + LONG ref; +}; + static HINSTANCE msscript_instance; -HRESULT WINAPI ScriptControl_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv) +static inline void * __WINE_ALLOC_SIZE(1) heap_alloc(size_t len) +{ + return HeapAlloc(GetProcessHeap(), 0, len); +} + +static inline BOOL heap_free(void *mem) +{ + return HeapFree(GetProcessHeap(), 0, mem); +} + +typedef enum tid_t { + IScriptControl_tid, + LAST_tid +} tid_t; + +static ITypeLib *typelib; +static ITypeInfo *typeinfos[LAST_tid]; + +static REFIID tid_ids[] = { + &IID_IScriptControl +}; + +static HRESULT load_typelib(void) +{ + HRESULT hres; + ITypeLib *tl; + + hres = LoadRegTypeLib(&LIBID_MSScriptControl, 1, 0, LOCALE_SYSTEM_DEFAULT, &tl); + if(FAILED(hres)) { + ERR("LoadRegTypeLib failed: %08x\n", hres); + return hres; + } + + if(InterlockedCompareExchangePointer((void**)&typelib, tl, NULL)) + ITypeLib_Release(tl); + return hres; +} + +static HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo) +{ + HRESULT hres; + + if (!typelib) + hres = load_typelib(); + if (!typelib) + return hres; + + if(!typeinfos[tid]) { + ITypeInfo *ti; + + hres = ITypeLib_GetTypeInfoOfGuid(typelib, tid_ids[tid], &ti); + if(FAILED(hres)) { + ERR("GetTypeInfoOfGuid(%s) failed: %08x\n", debugstr_guid(tid_ids[tid]), hres); + return hres; + } + + if(InterlockedCompareExchangePointer((void**)(typeinfos+tid), ti, NULL)) + ITypeInfo_Release(ti); + } + + *typeinfo = typeinfos[tid]; + ITypeInfo_AddRef(typeinfos[tid]); + return S_OK; +} + +static void release_typelib(void) +{ + unsigned i; + + if(!typelib) + return; + + for(i=0; i < sizeof(typeinfos)/sizeof(*typeinfos); i++) + if(typeinfos[i]) + ITypeInfo_Release(typeinfos[i]); + + ITypeLib_Release(typelib); +} + +static inline ScriptControl *impl_from_IScriptControl(IScriptControl *iface) +{ + return CONTAINING_RECORD(iface, ScriptControl, IScriptControl_iface); +} + +static HRESULT WINAPI ScriptControl_QueryInterface(IScriptControl *iface, REFIID riid, void **ppv) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + + if(IsEqualGUID(&IID_IUnknown, riid)) { + TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); + *ppv = &This->IScriptControl_iface; + }else if(IsEqualGUID(&IID_IDispatch, riid)) { + TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); + *ppv = &This->IScriptControl_iface; + }else if(IsEqualGUID(&IID_IScriptControl, riid)) { + TRACE("(%p)->(IID_IScriptControl %p)\n", This, ppv); + *ppv = &This->IScriptControl_iface; + }else { + FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); + *ppv = NULL; + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown*)*ppv); + return S_OK; +} + +static ULONG WINAPI ScriptControl_AddRef(IScriptControl *iface) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; +} + +static ULONG WINAPI ScriptControl_Release(IScriptControl *iface) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if(!ref) + heap_free(This); + + return ref; +} + +static HRESULT WINAPI ScriptControl_GetTypeInfoCount(IScriptControl *iface, UINT *pctinfo) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + TRACE("(%p)->(%p)\n", This, pctinfo); + *pctinfo = 1; + return S_OK; +} + +static HRESULT WINAPI ScriptControl_GetTypeInfo(IScriptControl *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); + return get_typeinfo(IScriptControl_tid, ppTInfo); +} + +static HRESULT WINAPI ScriptControl_GetIDsOfNames(IScriptControl *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + ITypeInfo *typeinfo; + HRESULT hres; + + TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId); + + hres = get_typeinfo(IScriptControl_tid, &typeinfo); + if(SUCCEEDED(hres)) { + hres = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId); + ITypeInfo_Release(typeinfo); + } + + return hres; +} + +static HRESULT WINAPI ScriptControl_Invoke(IScriptControl *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + ITypeInfo *typeinfo; + HRESULT hres; + + TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + + hres = get_typeinfo(IScriptControl_tid, &typeinfo); + if(SUCCEEDED(hres)) { + hres = ITypeInfo_Invoke(typeinfo, iface, dispIdMember, wFlags, + pDispParams, pVarResult, pExcepInfo, puArgErr); + ITypeInfo_Release(typeinfo); + } + + return hres; +} + +static HRESULT WINAPI ScriptControl_get_Language(IScriptControl *iface, BSTR *p) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_put_Language(IScriptControl *iface, BSTR language) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(language)); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_get_State(IScriptControl *iface, ScriptControlStates *p) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_put_State(IScriptControl *iface, ScriptControlStates state) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%x)\n", This, state); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_put_SitehWnd(IScriptControl *iface, LONG hwnd) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%x)\n", This, hwnd); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_get_SitehWnd(IScriptControl *iface, LONG *p) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_get_Timeout(IScriptControl *iface, LONG *p) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_put_Timeout(IScriptControl *iface, LONG milliseconds) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%d)\n", This, milliseconds); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_get_AllowUI(IScriptControl *iface, VARIANT_BOOL *p) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_put_AllowUI(IScriptControl *iface, VARIANT_BOOL allow_ui) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%x)\n", This, allow_ui); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_get_UseSafeSubset(IScriptControl *iface, VARIANT_BOOL *p) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_put_UseSafeSubset(IScriptControl *iface, VARIANT_BOOL v) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%x)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_get_Modules(IScriptControl *iface, IScriptModuleCollection **p) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_get_Error(IScriptControl *iface, IScriptError **p) { - FIXME("(%p %s %p)\n", outer, debugstr_guid(riid), ppv); - return E_NOINTERFACE; + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_get_CodeObject(IScriptControl *iface, IDispatch **p) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_get_Procedures(IScriptControl *iface, IScriptProcedureCollection **p) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl__AboutBox(IScriptControl *iface) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_AddObject(IScriptControl *iface, BSTR name, IDispatch *object, VARIANT_BOOL add_members) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%s %p %x)\n", This, debugstr_w(name), object, add_members); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_Reset(IScriptControl *iface) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_AddCode(IScriptControl *iface, BSTR code) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(code)); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_Eval(IScriptControl *iface, BSTR expression, VARIANT *res) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%s %p)\n", This, debugstr_w(expression), res); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_ExecuteStatement(IScriptControl *iface, BSTR statement) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(statement)); + return E_NOTIMPL; +} + +static HRESULT WINAPI ScriptControl_Run(IScriptControl *iface, BSTR procedure_name, SAFEARRAY **parameters, VARIANT *res) +{ + ScriptControl *This = impl_from_IScriptControl(iface); + FIXME("(%p)->(%s %p %p)\n", This, debugstr_w(procedure_name), parameters, res); + return E_NOTIMPL; +} + +static const IScriptControlVtbl ScriptControlVtbl = { + ScriptControl_QueryInterface, + ScriptControl_AddRef, + ScriptControl_Release, + ScriptControl_GetTypeInfoCount, + ScriptControl_GetTypeInfo, + ScriptControl_GetIDsOfNames, + ScriptControl_Invoke, + ScriptControl_get_Language, + ScriptControl_put_Language, + ScriptControl_get_State, + ScriptControl_put_State, + ScriptControl_put_SitehWnd, + ScriptControl_get_SitehWnd, + ScriptControl_get_Timeout, + ScriptControl_put_Timeout, + ScriptControl_get_AllowUI, + ScriptControl_put_AllowUI, + ScriptControl_get_UseSafeSubset, + ScriptControl_put_UseSafeSubset, + ScriptControl_get_Modules, + ScriptControl_get_Error, + ScriptControl_get_CodeObject, + ScriptControl_get_Procedures, + ScriptControl__AboutBox, + ScriptControl_AddObject, + ScriptControl_Reset, + ScriptControl_AddCode, + ScriptControl_Eval, + ScriptControl_ExecuteStatement, + ScriptControl_Run +}; + +static HRESULT WINAPI ScriptControl_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv) +{ + ScriptControl *script_control; + HRESULT hres; + + TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv); + + script_control = heap_alloc(sizeof(*script_control)); + if(!script_control) + return E_OUTOFMEMORY; + + script_control->IScriptControl_iface.lpVtbl = &ScriptControlVtbl; + script_control->ref = 1; + + hres = IScriptControl_QueryInterface(&script_control->IScriptControl_iface, riid, ppv); + IScriptControl_Release(&script_control->IScriptControl_iface); + return hres; } /****************************************************************** * DllMain (msscript.ocx.@) */ -BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID lpv) +BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved) { - TRACE("(%p %d %p)\n", instance, reason, lpv); + TRACE("(%p %d %p)\n", instance, reason, reserved); switch(reason) { case DLL_WINE_PREATTACH: @@ -50,6 +447,10 @@ msscript_instance = instance; DisableThreadLibraryCalls(instance); break; + case DLL_PROCESS_DETACH: + if(!reserved) + release_typelib(); + break; } return TRUE; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msscript.ocx/msscript.idl wine-staging-1.7.47~ubuntu14.10.1/dlls/msscript.ocx/msscript.idl --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msscript.ocx/msscript.idl 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msscript.ocx/msscript.idl 2015-07-12 05:36:18.000000000 +0000 @@ -207,7 +207,7 @@ [id(0x05e3), propget] HRESULT Error([out, retval] IScriptError **ppse); - [id(0x03e8), propget] HRESULT CodeObject([out, retval] IDispatch *ppdispObject); + [id(0x03e8), propget] HRESULT CodeObject([out, retval] IDispatch **ppdispObject); [id(0x03e9), propget] HRESULT Procedures([out, retval] IScriptProcedureCollection **ppdispProcedures); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcirt/msvcirt.c wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcirt/msvcirt.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcirt/msvcirt.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcirt/msvcirt.c 2015-07-12 05:36:18.000000000 +0000 @@ -54,13 +54,29 @@ void __thiscall streambuf_setg(streambuf*, char*, char*, char*); void __thiscall streambuf_setp(streambuf*, char*, char*); +/* class ios */ +struct _ostream; typedef struct { - LPVOID VTable; -} class_ios; - -typedef struct { - LPVOID VTable; -} class_ostream; + const vtable_ptr *vtable; + streambuf *sb; + ios_io_state state; + int special[4]; + int delbuf; + struct _ostream *tie; + ios_flags flags; + int precision; + char fill; + int width; + int do_lock; + CRITICAL_SECTION lock; +} ios; + +ios* __thiscall ios_assign(ios*, const ios*); + +/* class ostream */ +typedef struct _ostream { + const vtable_ptr *vtable; +} ostream; typedef struct { LPVOID VTable; @@ -68,6 +84,8 @@ /* ??_7streambuf@@6B@ */ extern const vtable_ptr MSVCP_streambuf_vtable; +/* ??_7ios@@6B@ */ +extern const vtable_ptr MSVCP_ios_vtable; #ifndef __GNUC__ void __asm_dummy_vtables(void) { @@ -84,11 +102,14 @@ VTABLE_ADD_FUNC(streambuf_underflow) VTABLE_ADD_FUNC(streambuf_pbackfail) VTABLE_ADD_FUNC(streambuf_doallocate)); + __ASM_VTABLE(ios, + VTABLE_ADD_FUNC(ios_vector_dtor)); #ifndef __GNUC__ } #endif DEFINE_RTTI_DATA0(streambuf, 0, ".?AVstreambuf@@") +DEFINE_RTTI_DATA0(ios, 0, ".?AVios@@") /* ??0streambuf@@IAE@PADH@Z */ /* ??0streambuf@@IEAA@PEADH@Z */ @@ -151,6 +172,8 @@ /* ??_Estreambuf@@UAEPAXI@Z */ DEFINE_THISCALL_WRAPPER(streambuf_vector_dtor, 8) +#define call_streambuf_vector_dtor(this, flags) CALL_VTBL_FUNC(this, 0,\ + streambuf*, (streambuf*, unsigned int), (this, flags)) streambuf* __thiscall streambuf_vector_dtor(streambuf *this, unsigned int flags) { TRACE("(%p %x)\n", this, flags); @@ -365,10 +388,13 @@ /* ?pbackfail@streambuf@@UAEHH@Z */ /* ?pbackfail@streambuf@@UEAAHH@Z */ DEFINE_THISCALL_WRAPPER(streambuf_pbackfail, 8) +#define call_streambuf_pbackfail(this, c) CALL_VTBL_FUNC(this, 36, int, (streambuf*, int), (this, c)) int __thiscall streambuf_pbackfail(streambuf *this, int c) { - FIXME("(%p %d): stub\n", this, c); - return 0; + TRACE("(%p %d)\n", this, c); + if (this->gptr <= this->eback) + return EOF; + return *--this->gptr = c; } /* ?seekoff@streambuf@@UAEJJW4seek_dir@ios@@H@Z */ @@ -655,26 +681,504 @@ } } +/* ?sputbackc@streambuf@@QAEHD@Z */ +/* ?sputbackc@streambuf@@QEAAHD@Z */ +DEFINE_THISCALL_WRAPPER(streambuf_sputbackc, 8) +int __thiscall streambuf_sputbackc(streambuf *this, char ch) +{ + TRACE("(%p %d)\n", this, ch); + return call_streambuf_pbackfail(this, ch); +} + +/* ?dbp@streambuf@@QAEXXZ */ +/* ?dbp@streambuf@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(streambuf_dbp, 4) +void __thiscall streambuf_dbp(streambuf *this) +{ + printf("\nSTREAMBUF DEBUG INFO: this=%p, ", this); + if (this->unbuffered) { + printf("unbuffered\n"); + } else { + printf("_fAlloc=%d\n", this->allocated); + printf(" base()=%p, ebuf()=%p, blen()=%d\n", this->base, this->ebuf, streambuf_blen(this)); + printf("pbase()=%p, pptr()=%p, epptr()=%d\n", this->pbase, this->pptr, this->epptr); + printf("eback()=%p, gptr()=%p, egptr()=%d\n", this->eback, this->gptr, this->egptr); + } +} + +/* ??0ios@@IAE@ABV0@@Z */ +/* ??0ios@@IEAA@AEBV0@@Z */ +DEFINE_THISCALL_WRAPPER(ios_copy_ctor, 8) +ios* __thiscall ios_copy_ctor(ios *this, const ios *copy) +{ + TRACE("(%p %p)\n", this, copy); + this->vtable = &MSVCP_ios_vtable; + this->sb = NULL; + this->delbuf = 0; + InitializeCriticalSection(&this->lock); + return ios_assign(this, copy); +} + +/* ??0ios@@QAE@PAVstreambuf@@@Z */ +/* ??0ios@@QEAA@PEAVstreambuf@@@Z */ +DEFINE_THISCALL_WRAPPER(ios_sb_ctor, 8) +ios* __thiscall ios_sb_ctor(ios *this, streambuf *sb) +{ + TRACE("(%p %p)\n", this, sb); + this->vtable = &MSVCP_ios_vtable; + this->sb = sb; + this->state = sb ? IOSTATE_goodbit : IOSTATE_badbit; + this->special[0] = this->special[1] = 0; + this->delbuf = 0; + this->tie = NULL; + this->flags = 0; + this->precision = 6; + this->fill = ' '; + this->width = 0; + this->do_lock = -1; + InitializeCriticalSection(&this->lock); + return this; +} + +/* ??0ios@@IAE@XZ */ +/* ??0ios@@IEAA@XZ */ +DEFINE_THISCALL_WRAPPER(ios_ctor, 4) +ios* __thiscall ios_ctor(ios *this) +{ + return ios_sb_ctor(this, NULL); +} + +/* ??1ios@@UAE@XZ */ +/* ??1ios@@UEAA@XZ */ +DEFINE_THISCALL_WRAPPER(ios_dtor, 4) +void __thiscall ios_dtor(ios *this) +{ + TRACE("(%p)\n", this); + if (this->delbuf && this->sb) + call_streambuf_vector_dtor(this->sb, 1); + this->sb = NULL; + this->state = IOSTATE_badbit; + DeleteCriticalSection(&this->lock); +} + +/* ??4ios@@IAEAAV0@ABV0@@Z */ +/* ??4ios@@IEAAAEAV0@AEBV0@@Z */ +DEFINE_THISCALL_WRAPPER(ios_assign, 8) +ios* __thiscall ios_assign(ios *this, const ios *rhs) +{ + TRACE("(%p %p)\n", this, rhs); + this->state = rhs->state; + if (!this->sb) + this->state |= IOSTATE_badbit; + this->tie = rhs->tie; + this->flags = rhs->flags; + this->precision = (char) rhs->precision; + this->fill = rhs->fill; + this->width = (char) rhs->width; + return this; +} + +/* ??7ios@@QBEHXZ */ +/* ??7ios@@QEBAHXZ */ +DEFINE_THISCALL_WRAPPER(ios_op_not, 4) +int __thiscall ios_op_not(const ios *this) +{ + FIXME("(%p) stub\n", this); + return 0; +} + +/* ??Bios@@QBEPAXXZ */ +/* ??Bios@@QEBAPEAXXZ */ +DEFINE_THISCALL_WRAPPER(ios_op_void, 4) +void* __thiscall ios_op_void(const ios *this) +{ + FIXME("(%p) stub\n", this); + return NULL; +} + +/* ??_Eios@@UAEPAXI@Z */ +DEFINE_THISCALL_WRAPPER(ios_vector_dtor, 8) +ios* __thiscall ios_vector_dtor(ios *this, unsigned int flags) +{ + TRACE("(%p %x)\n", this, flags); + if (flags & 2) { + /* we have an array, with the number of elements stored before the first object */ + INT_PTR i, *ptr = (INT_PTR *)this-1; + + for (i = *ptr-1; i >= 0; i--) + ios_dtor(this+i); + MSVCRT_operator_delete(ptr); + } else { + ios_dtor(this); + if (flags & 1) + MSVCRT_operator_delete(this); + } + return this; +} + +/* ??_Gios@@UAEPAXI@Z */ +DEFINE_THISCALL_WRAPPER(ios_scalar_dtor, 8) +ios* __thiscall ios_scalar_dtor(ios *this, unsigned int flags) +{ + TRACE("(%p %x)\n", this, flags); + ios_dtor(this); + if (flags & 1) MSVCRT_operator_delete(this); + return this; +} + +/* ?bad@ios@@QBEHXZ */ +/* ?bad@ios@@QEBAHXZ */ +DEFINE_THISCALL_WRAPPER(ios_bad, 4) +int __thiscall ios_bad(const ios *this) +{ + FIXME("(%p) stub\n", this); + return 0; +} + +/* ?bitalloc@ios@@SAJXZ */ +LONG __cdecl ios_bitalloc(void) +{ + FIXME("() stub\n"); + return 0; +} + +/* ?clear@ios@@QAEXH@Z */ +/* ?clear@ios@@QEAAXH@Z */ +DEFINE_THISCALL_WRAPPER(ios_clear, 8) +void __thiscall ios_clear(ios *this, int state) +{ + FIXME("(%p %d) stub\n", this, state); +} + +/* ?clrlock@ios@@QAAXXZ */ +/* ?clrlock@ios@@QEAAXXZ */ +void __cdecl ios_clrlock(ios *this) +{ + FIXME("(%p) stub\n", this); +} + +/* ?delbuf@ios@@QAEXH@Z */ +/* ?delbuf@ios@@QEAAXH@Z */ +DEFINE_THISCALL_WRAPPER(ios_delbuf_set, 8) +void __thiscall ios_delbuf_set(ios *this, int delete) +{ + FIXME("(%p %d) stub\n", this, delete); +} + +/* ?delbuf@ios@@QBEHXZ */ +/* ?delbuf@ios@@QEBAHXZ */ +DEFINE_THISCALL_WRAPPER(ios_delbuf_get, 4) +int __thiscall ios_delbuf_get(const ios *this) +{ + FIXME("(%p) stub\n", this); + return 0; +} + +/* ?dec@@YAAAVios@@AAV1@@Z */ +/* ?dec@@YAAEAVios@@AEAV1@@Z */ +ios* __cdecl ios_dec(ios *this) +{ + FIXME("(%p) stub\n", this); + return this; +} + +/* ?eof@ios@@QBEHXZ */ +/* ?eof@ios@@QEBAHXZ */ +DEFINE_THISCALL_WRAPPER(ios_eof, 4) +int __thiscall ios_eof(const ios *this) +{ + FIXME("(%p) stub\n", this); + return 0; +} + +/* ?fail@ios@@QBEHXZ */ +/* ?fail@ios@@QEBAHXZ */ +DEFINE_THISCALL_WRAPPER(ios_fail, 4) +int __thiscall ios_fail(const ios *this) +{ + FIXME("(%p) stub\n", this); + return 0; +} + +/* ?fill@ios@@QAEDD@Z */ +/* ?fill@ios@@QEAADD@Z */ +DEFINE_THISCALL_WRAPPER(ios_fill_set, 8) +char __thiscall ios_fill_set(ios *this, char fill) +{ + FIXME("(%p %d) stub\n", this, fill); + return EOF; +} + +/* ?fill@ios@@QBEDXZ */ +/* ?fill@ios@@QEBADXZ */ +DEFINE_THISCALL_WRAPPER(ios_fill_get, 4) +char __thiscall ios_fill_get(const ios *this) +{ + FIXME("(%p) stub\n", this); + return EOF; +} + +/* ?flags@ios@@QAEJJ@Z */ +/* ?flags@ios@@QEAAJJ@Z */ +DEFINE_THISCALL_WRAPPER(ios_flags_set, 8) +LONG __thiscall ios_flags_set(ios *this, LONG flags) +{ + FIXME("(%p %x) stub\n", this, flags); + return 0; +} + +/* ?flags@ios@@QBEJXZ */ +/* ?flags@ios@@QEBAJXZ */ +DEFINE_THISCALL_WRAPPER(ios_flags_get, 4) +LONG __thiscall ios_flags_get(const ios *this) +{ + FIXME("(%p) stub\n", this); + return 0; +} + +/* ?good@ios@@QBEHXZ */ +/* ?good@ios@@QEBAHXZ */ +DEFINE_THISCALL_WRAPPER(ios_good, 4) +int __thiscall ios_good(const ios *this) +{ + FIXME("(%p) stub\n", this); + return 0; +} + +/* ?hex@@YAAAVios@@AAV1@@Z */ +/* ?hex@@YAAEAVios@@AEAV1@@Z */ +ios* __cdecl ios_hex(ios *this) +{ + FIXME("(%p) stub\n", this); + return this; +} + +/* ?init@ios@@IAEXPAVstreambuf@@@Z */ +/* ?init@ios@@IEAAXPEAVstreambuf@@@Z */ +DEFINE_THISCALL_WRAPPER(ios_init, 8) +void __thiscall ios_init(ios *this, streambuf *sb) +{ + TRACE("(%p %p)\n", this, sb); + if (this->delbuf && this->sb) + call_streambuf_vector_dtor(this->sb, 1); + this->sb = sb; + if (sb == NULL) + this->state |= IOSTATE_badbit; + else + this->state &= ~IOSTATE_badbit; +} + +/* ?iword@ios@@QBEAAJH@Z */ +/* ?iword@ios@@QEBAAEAJH@Z */ +DEFINE_THISCALL_WRAPPER(ios_iword, 8) +LONG* __thiscall ios_iword(const ios *this, int index) +{ + FIXME("(%p %d) stub\n", this, index); + return NULL; +} + +/* ?lock@ios@@QAAXXZ */ +/* ?lock@ios@@QEAAXXZ */ +void __cdecl ios_lock(ios *this) +{ + FIXME("(%p) stub\n", this); +} + +/* ?lockbuf@ios@@QAAXXZ */ +/* ?lockbuf@ios@@QEAAXXZ */ +void __cdecl ios_lockbuf(ios *this) +{ + FIXME("(%p) stub\n", this); +} + +/* ?lockc@ios@@KAXXZ */ +void __cdecl ios_lockc(void) +{ + FIXME("() stub\n"); +} + +/* ?lockptr@ios@@IAEPAU_CRT_CRITICAL_SECTION@@XZ */ +/* ?lockptr@ios@@IEAAPEAU_CRT_CRITICAL_SECTION@@XZ */ +DEFINE_THISCALL_WRAPPER(ios_lockptr, 4) +CRITICAL_SECTION* __thiscall ios_lockptr(ios *this) +{ + FIXME("(%p) stub\n", this); + return NULL; +} + +/* ?oct@@YAAAVios@@AAV1@@Z */ +/* ?oct@@YAAEAVios@@AEAV1@@Z */ +ios* __cdecl ios_oct(ios *this) +{ + FIXME("(%p) stub\n", this); + return this; +} + +/* ?precision@ios@@QAEHH@Z */ +/* ?precision@ios@@QEAAHH@Z */ +DEFINE_THISCALL_WRAPPER(ios_precision_set, 8) +int __thiscall ios_precision_set(ios *this, int prec) +{ + FIXME("(%p %d) stub\n", this, prec); + return 0; +} + +/* ?precision@ios@@QBEHXZ */ +/* ?precision@ios@@QEBAHXZ */ +DEFINE_THISCALL_WRAPPER(ios_precision_get, 4) +int __thiscall ios_precision_get(const ios *this) +{ + FIXME("(%p) stub\n", this); + return 0; +} + +/* ?pword@ios@@QBEAAPAXH@Z */ +/* ?pword@ios@@QEBAAEAPEAXH@Z */ +DEFINE_THISCALL_WRAPPER(ios_pword, 8) +void** __thiscall ios_pword(const ios *this, int index) +{ + FIXME("(%p %d) stub\n", this, index); + return NULL; +} + +/* ?rdbuf@ios@@QBEPAVstreambuf@@XZ */ +/* ?rdbuf@ios@@QEBAPEAVstreambuf@@XZ */ +DEFINE_THISCALL_WRAPPER(ios_rdbuf, 4) +streambuf* __thiscall ios_rdbuf(const ios *this) +{ + FIXME("(%p) stub\n", this); + return NULL; +} + +/* ?rdstate@ios@@QBEHXZ */ +/* ?rdstate@ios@@QEBAHXZ */ +DEFINE_THISCALL_WRAPPER(ios_rdstate, 4) +int __thiscall ios_rdstate(const ios *this) +{ + FIXME("(%p) stub\n", this); + return 0; +} + +/* ?setf@ios@@QAEJJ@Z */ +/* ?setf@ios@@QEAAJJ@Z */ +DEFINE_THISCALL_WRAPPER(ios_setf, 8) +LONG __thiscall ios_setf(ios *this, LONG flags) +{ + FIXME("(%p %x) stub\n", this, flags); + return 0; +} + +/* ?setf@ios@@QAEJJJ@Z */ +/* ?setf@ios@@QEAAJJJ@Z */ +DEFINE_THISCALL_WRAPPER(ios_setf_mask, 12) +LONG __thiscall ios_setf_mask(ios *this, LONG flags, LONG mask) +{ + FIXME("(%p %x %x) stub\n", this, flags, mask); + return 0; +} + +/* ?setlock@ios@@QAAXXZ */ +/* ?setlock@ios@@QEAAXXZ */ +void __cdecl ios_setlock(ios *this) +{ + FIXME("(%p) stub\n", this); +} + +/* ?sync_with_stdio@ios@@SAXXZ */ +void __cdecl ios_sync_with_stdio(void) +{ + FIXME("() stub\n"); +} + +/* ?tie@ios@@QAEPAVostream@@PAV2@@Z */ +/* ?tie@ios@@QEAAPEAVostream@@PEAV2@@Z */ +DEFINE_THISCALL_WRAPPER(ios_tie_set, 8) +ostream* __thiscall ios_tie_set(ios *this, ostream *ostr) +{ + FIXME("(%p %p) stub\n", this, ostr); + return NULL; +} + +/* ?tie@ios@@QBEPAVostream@@XZ */ +/* ?tie@ios@@QEBAPEAVostream@@XZ */ +DEFINE_THISCALL_WRAPPER(ios_tie_get, 4) +ostream* __thiscall ios_tie_get(const ios *this) +{ + FIXME("(%p) stub\n", this); + return NULL; +} + +/* ?unlock@ios@@QAAXXZ */ +/* ?unlock@ios@@QEAAXXZ */ +void __cdecl ios_unlock(ios *this) +{ + FIXME("(%p) stub\n", this); +} + +/* ?unlockbuf@ios@@QAAXXZ */ +/* ?unlockbuf@ios@@QEAAXXZ */ +void __cdecl ios_unlockbuf(ios *this) +{ + FIXME("(%p) stub\n", this); +} + +/* ?unlockc@ios@@KAXXZ */ +void __cdecl ios_unlockc(void) +{ + FIXME("() stub\n"); +} + +/* ?unsetf@ios@@QAEJJ@Z */ +/* ?unsetf@ios@@QEAAJJ@Z */ +DEFINE_THISCALL_WRAPPER(ios_unsetf, 8) +LONG __thiscall ios_unsetf(ios *this, LONG flags) +{ + FIXME("(%p %x) stub\n", this, flags); + return 0; +} + +/* ?width@ios@@QAEHH@Z */ +/* ?width@ios@@QEAAHH@Z */ +DEFINE_THISCALL_WRAPPER(ios_width_set, 8) +int __thiscall ios_width_set(ios *this, int width) +{ + FIXME("(%p %d) stub\n", this, width); + return 0; +} + +/* ?width@ios@@QBEHXZ */ +/* ?width@ios@@QEBAHXZ */ +DEFINE_THISCALL_WRAPPER(ios_width_get, 4) +int __thiscall ios_width_get(const ios *this) +{ + FIXME("(%p) stub\n", this); + return 0; +} + +/* ?xalloc@ios@@SAHXZ */ +int __cdecl ios_xalloc(void) +{ + FIXME("() stub\n"); + return 0; +} + /****************************************************************** - * ??1ios@@UAE@XZ (MSVCRTI.@) - * class ios & __thiscall ios::-ios<<(void) + * ??0ostrstream@@QAE@XZ (MSVCRTI.@) */ -DEFINE_THISCALL_WRAPPER(MSVCIRT_ios_sl_void,4) -void * __thiscall MSVCIRT_ios_sl_void(class_ios * _this) +DEFINE_THISCALL_WRAPPER(MSVCIRT_ostrstream_ctor,8) +void * __thiscall MSVCIRT_ostrstream_ctor(ostream *this, BOOL virt_init) { - FIXME("(%p) stub\n", _this); - return _this; + FIXME("(%p %x) stub\n", this, virt_init); + return this; } /****************************************************************** - * ??0ostrstream@@QAE@XZ (MSVCRTI.@) - * class ostream & __thiscall ostrstream::ostrstream<<(void) + * ??1ostrstream@@UAE@XZ (MSVCRTI.@) */ -DEFINE_THISCALL_WRAPPER(MSVCIRT_ostrstream_sl_void,4) -void * __thiscall MSVCIRT_ostrstream_sl_void(class_ostream * _this) +DEFINE_THISCALL_WRAPPER(MSVCIRT_ostrstream_dtor,4) +void __thiscall MSVCIRT_ostrstream_dtor(ios *base) { - FIXME("(%p) stub\n", _this); - return _this; + FIXME("(%p) stub\n", base); } /****************************************************************** @@ -682,7 +1186,7 @@ * class ostream & __thiscall ostream::operator<<(unsigned char) */ DEFINE_THISCALL_WRAPPER(MSVCIRT_operator_sl_uchar,8) -void * __thiscall MSVCIRT_operator_sl_uchar(class_ostream * _this, unsigned char ch) +void * __thiscall MSVCIRT_operator_sl_uchar(ostream * _this, unsigned char ch) { FIXME("(%p)->(%c) stub\n", _this, ch); return _this; @@ -693,7 +1197,7 @@ * class ostream & __thiscall ostream::operator<<(int) */ DEFINE_THISCALL_WRAPPER(MSVCIRT_operator_sl_int,8) -void * __thiscall MSVCIRT_operator_sl_int(class_ostream * _this, int integer) +void * __thiscall MSVCIRT_operator_sl_int(ostream * _this, int integer) { FIXME("(%p)->(%d) stub\n", _this, integer); return _this; @@ -704,7 +1208,7 @@ * class ostream & __thiscall ostream::operator<<(char const *) */ DEFINE_THISCALL_WRAPPER(MSVCIRT_operator_sl_pchar,8) -void * __thiscall MSVCIRT_operator_sl_pchar(class_ostream * _this, const char * string) +void * __thiscall MSVCIRT_operator_sl_pchar(ostream * _this, const char * string) { FIXME("(%p)->(%s) stub\n", _this, debugstr_a(string)); return _this; @@ -715,7 +1219,7 @@ * class ostream & __thiscall ostream::operator<<(class ostream & (__cdecl*)(class ostream &)) */ DEFINE_THISCALL_WRAPPER(MSVCIRT_operator_sl_callback,8) -void * __thiscall MSVCIRT_operator_sl_callback(class_ostream * _this, class_ostream * (__cdecl*func)(class_ostream*)) +void * __thiscall MSVCIRT_operator_sl_callback(ostream * _this, ostream * (__cdecl*func)(ostream*)) { TRACE("%p, %p\n", _this, func); return func(_this); @@ -725,7 +1229,7 @@ * ?endl@@YAAAVostream@@AAV1@@Z (MSVCRTI.@) * class ostream & __cdecl endl(class ostream &) */ -void * CDECL MSVCIRT_endl(class_ostream * _this) +void * CDECL MSVCIRT_endl(ostream * _this) { FIXME("(%p)->() stub\n", _this); return _this; @@ -735,7 +1239,7 @@ * ?ends@@YAAAVostream@@AAV1@@Z (MSVCRTI.@) * class ostream & __cdecl ends(class ostream &) */ -void * CDECL MSVCIRT_ends(class_ostream * _this) +void * CDECL MSVCIRT_ends(ostream * _this) { FIXME("(%p)->() stub\n", _this); return _this; @@ -803,6 +1307,7 @@ { #ifdef __x86_64__ init_streambuf_rtti(base); + init_ios_rtti(base); #endif } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcirt/msvcirt.h wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcirt/msvcirt.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcirt/msvcirt.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcirt/msvcirt.h 2015-07-12 05:36:18.000000000 +0000 @@ -24,11 +24,36 @@ typedef LONG streampos; typedef enum { + IOSTATE_goodbit = 0x0, + IOSTATE_eofbit = 0x1, + IOSTATE_failbit = 0x2, + IOSTATE_badbit = 0x4 +} ios_io_state; + +typedef enum { SEEKDIR_beg = 0, SEEKDIR_cur = 1, SEEKDIR_end = 2 } ios_seek_dir; +typedef enum { + FLAGS_skipws = 0x1, + FLAGS_left = 0x2, + FLAGS_right = 0x4, + FLAGS_internal = 0x8, + FLAGS_dec = 0x10, + FLAGS_oct = 0x20, + FLAGS_hex = 0x40, + FLAGS_showbase = 0x80, + FLAGS_showpoint = 0x100, + FLAGS_uppercase = 0x200, + FLAGS_showpos = 0x400, + FLAGS_scientific = 0x800, + FLAGS_fixed = 0x1000, + FLAGS_unitbuf = 0x2000, + FLAGS_stdio = 0x4000 +} ios_flags; + extern void* (__cdecl *MSVCRT_operator_new)(SIZE_T); extern void (__cdecl *MSVCRT_operator_delete)(void*); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcirt/msvcirt.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcirt/msvcirt.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcirt/msvcirt.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcirt/msvcirt.spec 2015-07-12 05:36:18.000000000 +0000 @@ -36,12 +36,12 @@ @ stub -arch=win64 ??0ifstream@@QEAA@PEBDHH@Z @ stub -arch=win32 ??0ifstream@@QAE@XZ # __thiscall ifstream::ifstream(void) @ stub -arch=win64 ??0ifstream@@QEAA@XZ -@ stub -arch=win32 ??0ios@@IAE@ABV0@@Z # __thiscall ios::ios(class ios const &) -@ stub -arch=win64 ??0ios@@IEAA@AEBV0@@Z -@ stub -arch=win32 ??0ios@@IAE@XZ # __thiscall ios::ios(void) -@ stub -arch=win64 ??0ios@@IEAA@XZ -@ stub -arch=win32 ??0ios@@QAE@PAVstreambuf@@@Z # __thiscall ios::ios(class streambuf *) -@ stub -arch=win64 ??0ios@@QEAA@PEAVstreambuf@@@Z +@ thiscall -arch=win32 ??0ios@@IAE@ABV0@@Z(ptr ptr) ios_copy_ctor +@ cdecl -arch=win64 ??0ios@@IEAA@AEBV0@@Z(ptr ptr) ios_copy_ctor +@ thiscall -arch=win32 ??0ios@@IAE@XZ(ptr) ios_ctor +@ cdecl -arch=win64 ??0ios@@IEAA@XZ(ptr) ios_ctor +@ thiscall -arch=win32 ??0ios@@QAE@PAVstreambuf@@@Z(ptr ptr) ios_sb_ctor +@ cdecl -arch=win64 ??0ios@@QEAA@PEAVstreambuf@@@Z(ptr ptr) ios_sb_ctor @ stub -arch=win32 ??0iostream@@IAE@ABV0@@Z # __thiscall iostream::iostream(class iostream const &) @ stub -arch=win64 ??0iostream@@IEAA@AEBV0@@Z @ stub -arch=win32 ??0iostream@@IAE@XZ # __thiscall iostream::iostream(void) @@ -96,8 +96,8 @@ @ stub -arch=win64 ??0ostrstream@@QEAA@AEBV0@@Z @ stub -arch=win32 ??0ostrstream@@QAE@PADHH@Z # __thiscall ostrstream::ostrstream(char *,int,int) @ stub -arch=win64 ??0ostrstream@@QEAA@PEADHH@Z -@ thiscall -arch=win32 ??0ostrstream@@QAE@XZ(ptr) MSVCIRT_ostrstream_sl_void # __thiscall ostrstream::ostrstream(void) -@ cdecl -arch=win64 ??0ostrstream@@QEAA@XZ(ptr) MSVCIRT_ostrstream_sl_void +@ thiscall -arch=win32 ??0ostrstream@@QAE@XZ(ptr long) MSVCIRT_ostrstream_ctor +@ cdecl -arch=win64 ??0ostrstream@@QEAA@XZ(ptr long) MSVCIRT_ostrstream_ctor @ stub -arch=win32 ??0stdiobuf@@QAE@ABV0@@Z # __thiscall stdiobuf::stdiobuf(class stdiobuf const &) @ stub -arch=win64 ??0stdiobuf@@QEAA@AEBV0@@Z @ stub -arch=win32 ??0stdiobuf@@QAE@PAU_iobuf@@@Z # __thiscall stdiobuf::stdiobuf(struct _iobuf *) @@ -140,8 +140,8 @@ @ stub -arch=win64 ??1fstream@@UEAA@XZ @ stub -arch=win32 ??1ifstream@@UAE@XZ # virtual __thiscall ifstream::~ifstream(void) @ stub -arch=win64 ??1ifstream@@UEAA@XZ -@ thiscall -arch=win32 ??1ios@@UAE@XZ(ptr) MSVCIRT_ios_sl_void # virtual __thiscall ios::~ios(void) -@ cdecl -arch=win64 ??1ios@@UEAA@XZ(ptr) MSVCIRT_ios_sl_void +@ thiscall -arch=win32 ??1ios@@UAE@XZ(ptr) ios_dtor +@ cdecl -arch=win64 ??1ios@@UEAA@XZ(ptr) ios_dtor @ stub -arch=win32 ??1iostream@@UAE@XZ # virtual __thiscall iostream::~iostream(void) @ stub -arch=win64 ??1iostream@@UEAA@XZ @ stub -arch=win32 ??1istream@@UAE@XZ # virtual __thiscall istream::~istream(void) @@ -158,8 +158,8 @@ @ stub -arch=win64 ??1ostream@@UEAA@XZ @ stub -arch=win32 ??1ostream_withassign@@UAE@XZ # virtual __thiscall ostream_withassign::~ostream_withassign(void) @ stub -arch=win64 ??1ostream_withassign@@UEAA@XZ -@ thiscall -arch=win32 ??1ostrstream@@UAE@XZ(ptr) MSVCIRT_ostrstream_sl_void # virtual __thiscall ostrstream::~ostrstream(void) -@ cdecl -arch=win64 ??1ostrstream@@UEAA@XZ(ptr) MSVCIRT_ostrstream_sl_void +@ thiscall -arch=win32 ??1ostrstream@@UAE@XZ(ptr) MSVCIRT_ostrstream_dtor +@ cdecl -arch=win64 ??1ostrstream@@UEAA@XZ(ptr) MSVCIRT_ostrstream_dtor @ stub -arch=win32 ??1stdiobuf@@UAE@XZ # virtual __thiscall stdiobuf::~stdiobuf(void) @ stub -arch=win64 ??1stdiobuf@@UEAA@XZ @ stub -arch=win32 ??1stdiostream@@UAE@XZ # virtual __thiscall stdiostream::~stdiostream(void) @@ -180,8 +180,8 @@ @ stub -arch=win64 ??4fstream@@QEAAAEAV0@AEAV0@@Z @ stub -arch=win32 ??4ifstream@@QAEAAV0@ABV0@@Z # class ifstream & __thiscall ifstream::operator=(class ifstream const &) @ stub -arch=win64 ??4ifstream@@QEAAAEAV0@AEBV0@@Z -@ stub -arch=win32 ??4ios@@IAEAAV0@ABV0@@Z # class ios & __thiscall ios::operator=(class ios const &) -@ stub -arch=win64 ??4ios@@IEAAAEAV0@AEBV0@@Z +@ thiscall -arch=win32 ??4ios@@IAEAAV0@ABV0@@Z(ptr ptr) ios_assign +@ cdecl -arch=win64 ??4ios@@IEAAAEAV0@AEBV0@@Z(ptr ptr) ios_assign @ stub -arch=win32 ??4iostream@@IAEAAV0@AAV0@@Z # class iostream & __thiscall iostream::operator=(class iostream &) @ stub -arch=win64 ??4iostream@@IEAAAEAV0@AEAV0@@Z @ stub -arch=win32 ??4iostream@@IAEAAV0@PAVstreambuf@@@Z # class iostream & __thiscall iostream::operator=(class streambuf *) @@ -298,15 +298,15 @@ @ stub -arch=win64 ??6ostream@@QEAAAEAV0@PEBE@Z @ stub -arch=win32 ??6ostream@@QAEAAV0@PBX@Z # class ostream & __thiscall ostream::operator<<(void const *) @ stub -arch=win64 ??6ostream@@QEAAAEAV0@PEBX@Z -@ stub -arch=win32 ??7ios@@QBEHXZ # int __thiscall ios::operator!(void)const -@ stub -arch=win64 ??7ios@@QEBAHXZ -@ stub -arch=win32 ??Bios@@QBEPAXXZ # __thiscall ios::operator void *(void)const -@ stub -arch=win64 ??Bios@@QEBAPEAXXZ +@ thiscall -arch=win32 ??7ios@@QBEHXZ(ptr) ios_op_not +@ cdecl -arch=win64 ??7ios@@QEBAHXZ(ptr) ios_op_not +@ thiscall -arch=win32 ??Bios@@QBEPAXXZ(ptr) ios_op_void +@ cdecl -arch=win64 ??Bios@@QEBAPEAXXZ(ptr) ios_op_void @ extern ??_7exception@@6B@ MSVCP_exception_vtable # @ extern ??_7filebuf@@6B@ # const filebuf::`vftable' # @ extern ??_7fstream@@6B@ # const fstream::`vftable' # @ extern ??_7ifstream@@6B@ # const ifstream::`vftable' -# @ extern ??_7ios@@6B@ # const ios::`vftable' +@ extern ??_7ios@@6B@ MSVCP_ios_vtable # @ extern ??_7iostream@@6B@ # const iostream::`vftable' # @ extern ??_7istream@@6B@ # const istream::`vftable' # @ extern ??_7istream_withassign@@6B@ # const istream_withassign::`vftable' @@ -365,7 +365,7 @@ @ stub -arch=win32 ??_Efilebuf@@UAEPAXI@Z # virtual void * __thiscall filebuf::`vector deleting destructor'(unsigned int) @ stub -arch=win32 ??_Efstream@@UAEPAXI@Z # virtual void * __thiscall fstream::`vector deleting destructor'(unsigned int) @ stub -arch=win32 ??_Eifstream@@UAEPAXI@Z # virtual void * __thiscall ifstream::`vector deleting destructor'(unsigned int) -@ stub -arch=win32 ??_Eios@@UAEPAXI@Z # virtual void * __thiscall ios::`vector deleting destructor'(unsigned int) +@ thiscall -arch=win32 ??_Eios@@UAEPAXI@Z(ptr long) ios_vector_dtor @ stub -arch=win32 ??_Eiostream@@UAEPAXI@Z # virtual void * __thiscall iostream::`vector deleting destructor'(unsigned int) @ stub -arch=win32 ??_Eistream@@UAEPAXI@Z # virtual void * __thiscall istream::`vector deleting destructor'(unsigned int) @ stub -arch=win32 ??_Eistream_withassign@@UAEPAXI@Z # virtual void * __thiscall istream_withassign::`vector deleting destructor'(unsigned int) @@ -384,7 +384,7 @@ @ stub -arch=win32 ??_Gfilebuf@@UAEPAXI@Z # virtual void * __thiscall filebuf::`scalar deleting destructor'(unsigned int) @ stub -arch=win32 ??_Gfstream@@UAEPAXI@Z # virtual void * __thiscall fstream::`scalar deleting destructor'(unsigned int) @ stub -arch=win32 ??_Gifstream@@UAEPAXI@Z # virtual void * __thiscall ifstream::`scalar deleting destructor'(unsigned int) -@ stub -arch=win32 ??_Gios@@UAEPAXI@Z # virtual void * __thiscall ios::`scalar deleting destructor'(unsigned int) +@ thiscall -arch=win32 ??_Gios@@UAEPAXI@Z(ptr long) ios_scalar_dtor @ stub -arch=win32 ??_Giostream@@UAEPAXI@Z # virtual void * __thiscall iostream::`scalar deleting destructor'(unsigned int) @ stub -arch=win32 ??_Gistream@@UAEPAXI@Z # virtual void * __thiscall istream::`scalar deleting destructor'(unsigned int) @ stub -arch=win32 ??_Gistream_withassign@@UAEPAXI@Z # virtual void * __thiscall istream_withassign::`scalar deleting destructor'(unsigned int) @@ -410,19 +410,19 @@ @ stub -arch=win64 ?attach@ifstream@@QEAAXH@Z @ stub -arch=win32 ?attach@ofstream@@QAEXH@Z # void __thiscall ofstream::attach(int) @ stub -arch=win64 ?attach@ofstream@@QEAAXH@Z -@ stub -arch=win32 ?bad@ios@@QBEHXZ # int __thiscall ios::bad(void)const -@ stub -arch=win64 ?bad@ios@@QEBAHXZ +@ thiscall -arch=win32 ?bad@ios@@QBEHXZ(ptr) ios_bad +@ cdecl -arch=win64 ?bad@ios@@QEBAHXZ(ptr) ios_bad @ thiscall -arch=win32 ?base@streambuf@@IBEPADXZ(ptr) streambuf_base @ cdecl -arch=win64 ?base@streambuf@@IEBAPEADXZ(ptr) streambuf_base # @ extern ?basefield@ios@@2JB # static long const ios::basefield # @ extern ?binary@filebuf@@2HB # static int const filebuf::binary -@ stub ?bitalloc@ios@@SAJXZ # static long __cdecl ios::bitalloc(void) +@ cdecl ?bitalloc@ios@@SAJXZ() ios_bitalloc @ thiscall -arch=win32 ?blen@streambuf@@IBEHXZ(ptr) streambuf_blen @ cdecl -arch=win64 ?blen@streambuf@@IEBAHXZ(ptr) streambuf_blen @ stub ?cerr@@3Vostream_withassign@@A # class ostream_withassign cerr @ stub ?cin@@3Vistream_withassign@@A # class istream_withassign cin -@ stub -arch=win32 ?clear@ios@@QAEXH@Z # void __thiscall ios::clear(int) -@ stub -arch=win64 ?clear@ios@@QEAAXH@Z +@ thiscall -arch=win32 ?clear@ios@@QAEXH@Z(ptr long) ios_clear +@ cdecl -arch=win64 ?clear@ios@@QEAAXH@Z(ptr long) ios_clear @ stub ?clog@@3Vostream_withassign@@A # class ostream_withassign clog @ stub -arch=win32 ?close@filebuf@@QAEPAV1@XZ # class filebuf * __thiscall filebuf::close(void) @ stub -arch=win64 ?close@filebuf@@QEAAPEAV1@XZ @@ -432,19 +432,19 @@ @ stub -arch=win64 ?close@ifstream@@QEAAXXZ @ stub -arch=win32 ?close@ofstream@@QAEXXZ # void __thiscall ofstream::close(void) @ stub -arch=win64 ?close@ofstream@@QEAAXXZ -@ stub -arch=win32 ?clrlock@ios@@QAAXXZ # void __cdecl ios::clrlock(void) -@ stub -arch=win64 ?clrlock@ios@@QEAAXXZ +@ cdecl -arch=win32 ?clrlock@ios@@QAAXXZ(ptr) ios_clrlock +@ cdecl -arch=win64 ?clrlock@ios@@QEAAXXZ(ptr) ios_clrlock @ thiscall -arch=win32 ?clrlock@streambuf@@QAEXXZ(ptr) streambuf_clrlock @ cdecl -arch=win64 ?clrlock@streambuf@@QEAAXXZ(ptr) streambuf_clrlock @ stub ?cout@@3Vostream_withassign@@A # class ostream_withassign cout -@ stub -arch=win32 ?dbp@streambuf@@QAEXXZ # void __thiscall streambuf::dbp(void) -@ stub -arch=win64 ?dbp@streambuf@@QEAAXXZ -@ stub -arch=win32 ?dec@@YAAAVios@@AAV1@@Z # class ios & __cdecl dec(class ios &) -@ stub -arch=win64 ?dec@@YAAEAVios@@AEAV1@@Z -@ stub -arch=win32 ?delbuf@ios@@QAEXH@Z # void __thiscall ios::delbuf(int) -@ stub -arch=win64 ?delbuf@ios@@QEAAXH@Z -@ stub -arch=win32 ?delbuf@ios@@QBEHXZ # int __thiscall ios::delbuf(void)const -@ stub -arch=win64 ?delbuf@ios@@QEBAHXZ +@ thiscall -arch=win32 ?dbp@streambuf@@QAEXXZ(ptr) streambuf_dbp +@ cdecl -arch=win64 ?dbp@streambuf@@QEAAXXZ(ptr) streambuf_dbp +@ cdecl -arch=win32 ?dec@@YAAAVios@@AAV1@@Z(ptr) ios_dec +@ cdecl -arch=win64 ?dec@@YAAEAVios@@AEAV1@@Z(ptr) ios_dec +@ thiscall -arch=win32 ?delbuf@ios@@QAEXH@Z(ptr long) ios_delbuf_set +@ cdecl -arch=win64 ?delbuf@ios@@QEAAXH@Z(ptr long) ios_delbuf_set +@ thiscall -arch=win32 ?delbuf@ios@@QBEHXZ(ptr) ios_delbuf_get +@ cdecl -arch=win64 ?delbuf@ios@@QEBAHXZ(ptr) ios_delbuf_get @ thiscall -arch=win32 ?doallocate@streambuf@@MAEHXZ(ptr) streambuf_doallocate @ cdecl -arch=win64 ?doallocate@streambuf@@MEAAHXZ(ptr) streambuf_doallocate @ stub -arch=win32 ?doallocate@strstreambuf@@MAEHXZ # virtual int __thiscall strstreambuf::doallocate(void) @@ -461,13 +461,13 @@ @ cdecl -arch=win64 ?endl@@YAAEAVostream@@AEAV1@@Z(ptr) MSVCIRT_endl @ cdecl -arch=win32 ?ends@@YAAAVostream@@AAV1@@Z(ptr) MSVCIRT_ends # class ostream & __cdecl ends(class ostream &) @ cdecl -arch=win64 ?ends@@YAAEAVostream@@AEAV1@@Z(ptr) MSVCIRT_ends -@ stub -arch=win32 ?eof@ios@@QBEHXZ # int __thiscall ios::eof(void)const -@ stub -arch=win64 ?eof@ios@@QEBAHXZ +@ thiscall -arch=win32 ?eof@ios@@QBEHXZ(ptr) ios_eof +@ cdecl -arch=win64 ?eof@ios@@QEBAHXZ(ptr) ios_eof @ thiscall -arch=win32 ?epptr@streambuf@@IBEPADXZ(ptr) streambuf_epptr @ cdecl -arch=win64 ?epptr@streambuf@@IEBAPEADXZ(ptr) streambuf_epptr # @ extern ?fLockcInit@ios@@0HA # static int ios::fLockcInit -@ stub -arch=win32 ?fail@ios@@QBEHXZ # int __thiscall ios::fail(void)const -@ stub -arch=win64 ?fail@ios@@QEBAHXZ +@ thiscall -arch=win32 ?fail@ios@@QBEHXZ(ptr) ios_fail +@ cdecl -arch=win64 ?fail@ios@@QEBAHXZ(ptr) ios_fail @ stub -arch=win32 ?fd@filebuf@@QBEHXZ # int __thiscall filebuf::fd(void)const @ stub -arch=win64 ?fd@filebuf@@QEBAHXZ @ stub -arch=win32 ?fd@fstream@@QBEHXZ # int __thiscall fstream::fd(void)const @@ -476,14 +476,14 @@ @ stub -arch=win64 ?fd@ifstream@@QEBAHXZ @ stub -arch=win32 ?fd@ofstream@@QBEHXZ # int __thiscall ofstream::fd(void)const @ stub -arch=win64 ?fd@ofstream@@QEBAHXZ -@ stub -arch=win32 ?fill@ios@@QAEDD@Z # char __thiscall ios::fill(char) -@ stub -arch=win64 ?fill@ios@@QEAADD@Z -@ stub -arch=win32 ?fill@ios@@QBEDXZ # char __thiscall ios::fill(void)const -@ stub -arch=win64 ?fill@ios@@QEBADXZ -@ stub -arch=win32 ?flags@ios@@QAEJJ@Z # long __thiscall ios::flags(long) -@ stub -arch=win64 ?flags@ios@@QEAAJJ@Z -@ stub -arch=win32 ?flags@ios@@QBEJXZ # long __thiscall ios::flags(void)const -@ stub -arch=win64 ?flags@ios@@QEBAJXZ +@ thiscall -arch=win32 ?fill@ios@@QAEDD@Z(ptr long) ios_fill_set +@ cdecl -arch=win64 ?fill@ios@@QEAADD@Z(ptr long) ios_fill_set +@ thiscall -arch=win32 ?fill@ios@@QBEDXZ(ptr) ios_fill_get +@ cdecl -arch=win64 ?fill@ios@@QEBADXZ(ptr) ios_fill_get +@ thiscall -arch=win32 ?flags@ios@@QAEJJ@Z(ptr long) ios_flags_set +@ cdecl -arch=win64 ?flags@ios@@QEAAJJ@Z(ptr long) ios_flags_set +@ thiscall -arch=win32 ?flags@ios@@QBEJXZ(ptr) ios_flags_get +@ cdecl -arch=win64 ?flags@ios@@QEBAJXZ(ptr) ios_flags_get # @ extern ?floatfield@ios@@2JB # static long const ios::floatfield @ stub -arch=win32 ?flush@@YAAAVostream@@AAV1@@Z # class ostream & __cdecl flush(class ostream &) @ stub -arch=win64 ?flush@@YAAEAVostream@@AEAV1@@Z @@ -523,18 +523,18 @@ @ stub -arch=win64 ?getline@istream@@QEAAAEAV1@PEADHD@Z @ stub -arch=win32 ?getline@istream@@QAEAAV1@PAEHD@Z # class istream & __thiscall istream::getline(unsigned char *,int,char) @ stub -arch=win64 ?getline@istream@@QEAAAEAV1@PEAEHD@Z -@ stub -arch=win32 ?good@ios@@QBEHXZ # int __thiscall ios::good(void)const -@ stub -arch=win64 ?good@ios@@QEBAHXZ +@ thiscall -arch=win32 ?good@ios@@QBEHXZ(ptr) ios_good +@ cdecl -arch=win64 ?good@ios@@QEBAHXZ(ptr) ios_good @ thiscall -arch=win32 ?gptr@streambuf@@IBEPADXZ(ptr) streambuf_gptr @ cdecl -arch=win64 ?gptr@streambuf@@IEBAPEADXZ(ptr) streambuf_gptr -@ stub -arch=win32 ?hex@@YAAAVios@@AAV1@@Z # class ios & __cdecl hex(class ios &) -@ stub -arch=win64 ?hex@@YAAEAVios@@AEAV1@@Z +@ cdecl -arch=win32 ?hex@@YAAAVios@@AAV1@@Z(ptr) ios_hex +@ cdecl -arch=win64 ?hex@@YAAEAVios@@AEAV1@@Z(ptr) ios_hex @ stub -arch=win32 ?ignore@istream@@QAEAAV1@HH@Z # class istream & __thiscall istream::ignore(int,int) @ stub -arch=win64 ?ignore@istream@@QEAAAEAV1@HH@Z @ thiscall -arch=win32 ?in_avail@streambuf@@QBEHXZ(ptr) streambuf_in_avail @ cdecl -arch=win64 ?in_avail@streambuf@@QEBAHXZ(ptr) streambuf_in_avail -@ stub -arch=win32 ?init@ios@@IAEXPAVstreambuf@@@Z # void __thiscall ios::init(class streambuf *) -@ stub -arch=win64 ?init@ios@@IEAAXPEAVstreambuf@@@Z +@ thiscall -arch=win32 ?init@ios@@IAEXPAVstreambuf@@@Z(ptr ptr) ios_init +@ cdecl -arch=win64 ?init@ios@@IEAAXPEAVstreambuf@@@Z(ptr ptr) ios_init @ stub -arch=win32 ?ipfx@istream@@QAEHH@Z # int __thiscall istream::ipfx(int) @ stub -arch=win64 ?ipfx@istream@@QEAAHH@Z @ stub -arch=win32 ?is_open@filebuf@@QBEHXZ # int __thiscall filebuf::is_open(void)const @@ -547,21 +547,21 @@ @ stub -arch=win64 ?is_open@ofstream@@QEBAHXZ @ stub -arch=win32 ?isfx@istream@@QAEXXZ # void __thiscall istream::isfx(void) @ stub -arch=win64 ?isfx@istream@@QEAAXXZ -@ stub -arch=win32 ?iword@ios@@QBEAAJH@Z # long & __thiscall ios::iword(int)const -@ stub -arch=win64 ?iword@ios@@QEBAAEAJH@Z -@ stub -arch=win32 ?lock@ios@@QAAXXZ # void __cdecl ios::lock(void) -@ stub -arch=win64 ?lock@ios@@QEAAXXZ +@ thiscall -arch=win32 ?iword@ios@@QBEAAJH@Z(ptr long) ios_iword +@ cdecl -arch=win64 ?iword@ios@@QEBAAEAJH@Z(ptr long) ios_iword +@ cdecl -arch=win32 ?lock@ios@@QAAXXZ(ptr) ios_lock +@ cdecl -arch=win64 ?lock@ios@@QEAAXXZ(ptr) ios_lock @ thiscall -arch=win32 ?lock@streambuf@@QAEXXZ(ptr) streambuf_lock @ cdecl -arch=win64 ?lock@streambuf@@QEAAXXZ(ptr) streambuf_lock -@ stub -arch=win32 ?lockbuf@ios@@QAAXXZ # void __cdecl ios::lockbuf(void) -@ stub -arch=win64 ?lockbuf@ios@@QEAAXXZ -@ stub ?lockc@ios@@KAXXZ # static void __cdecl ios::lockc(void) -@ stub -arch=win32 ?lockptr@ios@@IAEPAU_CRT_CRITICAL_SECTION@@XZ # struct _CRT_CRITICAL_SECTION * __thiscall ios::lockptr(void) -@ stub -arch=win64 ?lockptr@ios@@IEAAPEAU_CRT_CRITICAL_SECTION@@XZ +@ cdecl -arch=win32 ?lockbuf@ios@@QAAXXZ(ptr) ios_lockbuf +@ cdecl -arch=win64 ?lockbuf@ios@@QEAAXXZ(ptr) ios_lockbuf +@ cdecl ?lockc@ios@@KAXXZ() ios_lockc +@ thiscall -arch=win32 ?lockptr@ios@@IAEPAU_CRT_CRITICAL_SECTION@@XZ(ptr) ios_lockptr +@ cdecl -arch=win64 ?lockptr@ios@@IEAAPEAU_CRT_CRITICAL_SECTION@@XZ(ptr) ios_lockptr @ thiscall -arch=win32 ?lockptr@streambuf@@IAEPAU_CRT_CRITICAL_SECTION@@XZ(ptr) streambuf_lockptr @ cdecl -arch=win64 ?lockptr@streambuf@@IEAAPEAU_CRT_CRITICAL_SECTION@@XZ(ptr) streambuf_lockptr -@ stub -arch=win32 ?oct@@YAAAVios@@AAV1@@Z # class ios & __cdecl oct(class ios &) -@ stub -arch=win64 ?oct@@YAAEAVios@@AEAV1@@Z +@ cdecl -arch=win32 ?oct@@YAAAVios@@AAV1@@Z(ptr) ios_oct +@ cdecl -arch=win64 ?oct@@YAAEAVios@@AEAV1@@Z(ptr) ios_oct @ stub -arch=win32 ?open@filebuf@@QAEPAV1@PBDHH@Z # class filebuf * __thiscall filebuf::open(char const *,int,int) @ stub -arch=win64 ?open@filebuf@@QEAAPEAV1@PEBDHH@Z @ stub -arch=win32 ?open@fstream@@QAEXPBDHH@Z # void __thiscall fstream::open(char const *,int,int) @@ -599,10 +599,10 @@ @ stub -arch=win64 ?peek@istream@@QEAAHXZ @ thiscall -arch=win32 ?pptr@streambuf@@IBEPADXZ(ptr) streambuf_pptr @ cdecl -arch=win64 ?pptr@streambuf@@IEBAPEADXZ(ptr) streambuf_pptr -@ stub -arch=win32 ?precision@ios@@QAEHH@Z # int __thiscall ios::precision(int) -@ stub -arch=win64 ?precision@ios@@QEAAHH@Z -@ stub -arch=win32 ?precision@ios@@QBEHXZ # int __thiscall ios::precision(void)const -@ stub -arch=win64 ?precision@ios@@QEBAHXZ +@ thiscall -arch=win32 ?precision@ios@@QAEHH@Z(ptr long) ios_precision_set +@ cdecl -arch=win64 ?precision@ios@@QEAAHH@Z(ptr long) ios_precision_set +@ thiscall -arch=win32 ?precision@ios@@QBEHXZ(ptr) ios_precision_get +@ cdecl -arch=win64 ?precision@ios@@QEBAHXZ(ptr) ios_precision_get @ stub -arch=win32 ?put@ostream@@QAEAAV1@C@Z # class ostream & __thiscall ostream::put(signed char) @ stub -arch=win64 ?put@ostream@@QEAAAEAV1@C@Z @ stub -arch=win32 ?put@ostream@@QAEAAV1@D@Z # class ostream & __thiscall ostream::put(char) @@ -611,14 +611,14 @@ @ stub -arch=win64 ?put@ostream@@QEAAAEAV1@E@Z @ stub -arch=win32 ?putback@istream@@QAEAAV1@D@Z # class istream & __thiscall istream::putback(char) @ stub -arch=win64 ?putback@istream@@QEAAAEAV1@D@Z -@ stub -arch=win32 ?pword@ios@@QBEAAPAXH@Z # void * & __thiscall ios::pword(int)const -@ stub -arch=win64 ?pword@ios@@QEBAAEAPEAXH@Z +@ thiscall -arch=win32 ?pword@ios@@QBEAAPAXH@Z(ptr long) ios_pword +@ cdecl -arch=win64 ?pword@ios@@QEBAAEAPEAXH@Z(ptr long) ios_pword @ stub -arch=win32 ?rdbuf@fstream@@QBEPAVfilebuf@@XZ # class filebuf * __thiscall fstream::rdbuf(void)const @ stub -arch=win64 ?rdbuf@fstream@@QEBAPEAVfilebuf@@XZ @ stub -arch=win32 ?rdbuf@ifstream@@QBEPAVfilebuf@@XZ # class filebuf * __thiscall ifstream::rdbuf(void)const @ stub -arch=win64 ?rdbuf@ifstream@@QEBAPEAVfilebuf@@XZ -@ stub -arch=win32 ?rdbuf@ios@@QBEPAVstreambuf@@XZ # class streambuf * __thiscall ios::rdbuf(void)const -@ stub -arch=win64 ?rdbuf@ios@@QEBAPEAVstreambuf@@XZ +@ thiscall -arch=win32 ?rdbuf@ios@@QBEPAVstreambuf@@XZ(ptr) ios_rdbuf +@ cdecl -arch=win64 ?rdbuf@ios@@QEBAPEAVstreambuf@@XZ(ptr) ios_rdbuf @ stub -arch=win32 ?rdbuf@istrstream@@QBEPAVstrstreambuf@@XZ # class strstreambuf * __thiscall istrstream::rdbuf(void)const @ stub -arch=win64 ?rdbuf@istrstream@@QEBAPEAVstrstreambuf@@XZ @ stub -arch=win32 ?rdbuf@ofstream@@QBEPAVfilebuf@@XZ # class filebuf * __thiscall ofstream::rdbuf(void)const @@ -629,8 +629,8 @@ @ stub -arch=win64 ?rdbuf@stdiostream@@QEBAPEAVstdiobuf@@XZ @ stub -arch=win32 ?rdbuf@strstream@@QBEPAVstrstreambuf@@XZ # class strstreambuf * __thiscall strstream::rdbuf(void)const @ stub -arch=win64 ?rdbuf@strstream@@QEBAPEAVstrstreambuf@@XZ -@ stub -arch=win32 ?rdstate@ios@@QBEHXZ # int __thiscall ios::rdstate(void)const -@ stub -arch=win64 ?rdstate@ios@@QEBAHXZ +@ thiscall -arch=win32 ?rdstate@ios@@QBEHXZ(ptr) ios_rdstate +@ cdecl -arch=win64 ?rdstate@ios@@QEBAHXZ(ptr) ios_rdstate @ stub -arch=win32 ?read@istream@@QAEAAV1@PACH@Z # class istream & __thiscall istream::read(signed char *,int) @ stub -arch=win64 ?read@istream@@QEAAAEAV1@PEACH@Z @ stub -arch=win32 ?read@istream@@QAEAAV1@PADH@Z # class istream & __thiscall istream::read(char *,int) @@ -671,14 +671,14 @@ @ cdecl -arch=win64 ?setbuf@streambuf@@UEAAPEAV1@PEADH@Z(ptr ptr long) streambuf_setbuf @ stub -arch=win32 ?setbuf@strstreambuf@@UAEPAVstreambuf@@PADH@Z # virtual class streambuf * __thiscall strstreambuf::setbuf(char *,int) @ stub -arch=win64 ?setbuf@strstreambuf@@UEAAPEAVstreambuf@@PEADH@Z -@ stub -arch=win32 ?setf@ios@@QAEJJ@Z # long __thiscall ios::setf(long) -@ stub -arch=win64 ?setf@ios@@QEAAJJ@Z -@ stub -arch=win32 ?setf@ios@@QAEJJJ@Z # long __thiscall ios::setf(long,long) -@ stub -arch=win64 ?setf@ios@@QEAAJJJ@Z +@ thiscall -arch=win32 ?setf@ios@@QAEJJ@Z(ptr long) ios_setf +@ cdecl -arch=win64 ?setf@ios@@QEAAJJ@Z(ptr long) ios_setf +@ thiscall -arch=win32 ?setf@ios@@QAEJJJ@Z(ptr long long) ios_setf_mask +@ cdecl -arch=win64 ?setf@ios@@QEAAJJJ@Z(ptr long long) ios_setf_mask @ thiscall -arch=win32 ?setg@streambuf@@IAEXPAD00@Z(ptr ptr ptr ptr) streambuf_setg @ cdecl -arch=win64 ?setg@streambuf@@IEAAXPEAD00@Z(ptr ptr ptr ptr) streambuf_setg -@ stub -arch=win32 ?setlock@ios@@QAAXXZ # void __cdecl ios::setlock(void) -@ stub -arch=win64 ?setlock@ios@@QEAAXXZ +@ cdecl -arch=win32 ?setlock@ios@@QAAXXZ(ptr) ios_setlock +@ cdecl -arch=win64 ?setlock@ios@@QEAAXXZ(ptr) ios_setlock @ thiscall -arch=win32 ?setlock@streambuf@@QAEXXZ(ptr) streambuf_setlock @ cdecl -arch=win64 ?setlock@streambuf@@QEAAXXZ(ptr) streambuf_setlock @ stub -arch=win32 ?setmode@filebuf@@QAEHH@Z # int __thiscall filebuf::setmode(int) @@ -702,8 +702,8 @@ # @ extern ?sh_write@filebuf@@2HB # static int const filebuf::sh_write @ thiscall -arch=win32 ?snextc@streambuf@@QAEHXZ(ptr) streambuf_snextc @ cdecl -arch=win64 ?snextc@streambuf@@QEAAHXZ(ptr) streambuf_snextc -@ stub -arch=win32 ?sputbackc@streambuf@@QAEHD@Z # int __thiscall streambuf::sputbackc(char) -@ stub -arch=win64 ?sputbackc@streambuf@@QEAAHD@Z +@ thiscall -arch=win32 ?sputbackc@streambuf@@QAEHD@Z(ptr long) streambuf_sputbackc +@ cdecl -arch=win64 ?sputbackc@streambuf@@QEAAHD@Z(ptr long) streambuf_sputbackc @ thiscall -arch=win32 ?sputc@streambuf@@QAEHH@Z(ptr long) streambuf_sputc @ cdecl -arch=win64 ?sputc@streambuf@@QEAAHH@Z(ptr long) streambuf_sputc @ thiscall -arch=win32 ?sputn@streambuf@@QAEHPBDH@Z(ptr str long) streambuf_sputn @@ -731,16 +731,16 @@ @ cdecl -arch=win64 ?sync@streambuf@@UEAAHXZ(ptr) streambuf_sync @ stub -arch=win32 ?sync@strstreambuf@@UAEHXZ # virtual int __thiscall strstreambuf::sync(void) @ stub -arch=win64 ?sync@strstreambuf@@UEAAHXZ -@ stub ?sync_with_stdio@ios@@SAXXZ # static void __cdecl ios::sync_with_stdio(void) +@ cdecl ?sync_with_stdio@ios@@SAXXZ() ios_sync_with_stdio @ stub -arch=win32 ?tellg@istream@@QAEJXZ # long __thiscall istream::tellg(void) @ stub -arch=win64 ?tellg@istream@@QEAAJXZ @ stub -arch=win32 ?tellp@ostream@@QAEJXZ # long __thiscall ostream::tellp(void) @ stub -arch=win64 ?tellp@ostream@@QEAAJXZ # @ extern ?text@filebuf@@2HB # static int const filebuf::text -@ stub -arch=win32 ?tie@ios@@QAEPAVostream@@PAV2@@Z # class ostream * __thiscall ios::tie(class ostream *) -@ stub -arch=win64 ?tie@ios@@QEAAPEAVostream@@PEAV2@@Z -@ stub -arch=win32 ?tie@ios@@QBEPAVostream@@XZ # class ostream * __thiscall ios::tie(void)const -@ stub -arch=win64 ?tie@ios@@QEBAPEAVostream@@XZ +@ thiscall -arch=win32 ?tie@ios@@QAEPAVostream@@PAV2@@Z(ptr ptr) ios_tie_set +@ cdecl -arch=win64 ?tie@ios@@QEAAPEAVostream@@PEAV2@@Z(ptr ptr) ios_tie_set +@ thiscall -arch=win32 ?tie@ios@@QBEPAVostream@@XZ(ptr) ios_tie_get +@ cdecl -arch=win64 ?tie@ios@@QEBAPEAVostream@@XZ(ptr) ios_tie_get @ thiscall -arch=win32 ?unbuffered@streambuf@@IAEXH@Z(ptr long) streambuf_unbuffered_set @ cdecl -arch=win64 ?unbuffered@streambuf@@IEAAXH@Z(ptr long) streambuf_unbuffered_set @ thiscall -arch=win32 ?unbuffered@streambuf@@IBEHXZ(ptr) streambuf_unbuffered_get @@ -751,21 +751,21 @@ @ stub -arch=win64 ?underflow@stdiobuf@@UEAAHXZ @ stub -arch=win32 ?underflow@strstreambuf@@UAEHXZ # virtual int __thiscall strstreambuf::underflow(void) @ stub -arch=win64 ?underflow@strstreambuf@@UEAAHXZ -@ stub -arch=win32 ?unlock@ios@@QAAXXZ # void __cdecl ios::unlock(void) -@ stub -arch=win64 ?unlock@ios@@QEAAXXZ +@ cdecl -arch=win32 ?unlock@ios@@QAAXXZ(ptr) ios_unlock +@ cdecl -arch=win64 ?unlock@ios@@QEAAXXZ(ptr) ios_unlock @ thiscall -arch=win32 ?unlock@streambuf@@QAEXXZ(ptr) streambuf_unlock @ cdecl -arch=win64 ?unlock@streambuf@@QEAAXXZ(ptr) streambuf_unlock -@ stub -arch=win32 ?unlockbuf@ios@@QAAXXZ # void __cdecl ios::unlockbuf(void) -@ stub -arch=win64 ?unlockbuf@ios@@QEAAXXZ -@ stub ?unlockc@ios@@KAXXZ # static void __cdecl ios::unlockc(void) -@ stub -arch=win32 ?unsetf@ios@@QAEJJ@Z # long __thiscall ios::unsetf(long) -@ stub -arch=win64 ?unsetf@ios@@QEAAJJ@Z +@ cdecl -arch=win32 ?unlockbuf@ios@@QAAXXZ(ptr) ios_unlockbuf +@ cdecl -arch=win64 ?unlockbuf@ios@@QEAAXXZ(ptr) ios_unlockbuf +@ cdecl ?unlockc@ios@@KAXXZ() ios_unlockc +@ thiscall -arch=win32 ?unsetf@ios@@QAEJJ@Z(ptr long) ios_unsetf +@ cdecl -arch=win64 ?unsetf@ios@@QEAAJJ@Z(ptr long) ios_unsetf @ thiscall -arch=i386 ?what@exception@@UBEPBDXZ(ptr) MSVCP_exception_what @ cdecl -arch=win64 ?what@exception@@UEBAPEBDXZ(ptr) MSVCP_exception_what -@ stub -arch=win32 ?width@ios@@QAEHH@Z # int __thiscall ios::width(int) -@ stub -arch=win64 ?width@ios@@QEAAHH@Z -@ stub -arch=win32 ?width@ios@@QBEHXZ # int __thiscall ios::width(void)const -@ stub -arch=win64 ?width@ios@@QEBAHXZ +@ thiscall -arch=win32 ?width@ios@@QAEHH@Z(ptr long) ios_width_set +@ cdecl -arch=win64 ?width@ios@@QEAAHH@Z(ptr long) ios_width_set +@ thiscall -arch=win32 ?width@ios@@QBEHXZ(ptr) ios_width_get +@ cdecl -arch=win64 ?width@ios@@QEBAHXZ(ptr) ios_width_get @ stub -arch=win32 ?write@ostream@@QAEAAV1@PBCH@Z # class ostream & __thiscall ostream::write(signed char const *,int) @ stub -arch=win64 ?write@ostream@@QEAAAEAV1@PEBCH@Z @ stub -arch=win32 ?write@ostream@@QAEAAV1@PBDH@Z # class ostream & __thiscall ostream::write(char const *,int) @@ -780,7 +780,7 @@ # @ extern ?x_lockc@ios@@0U_CRT_CRITICAL_SECTION@@A # static struct _CRT_CRITICAL_SECTION ios::x_lockc # @ extern ?x_maxbit@ios@@0JA # static long ios::x_maxbit # @ extern ?x_statebuf@ios@@0PAJA # static long * ios::x_statebuf -@ stub ?xalloc@ios@@SAHXZ # static int __cdecl ios::xalloc(void) +@ cdecl ?xalloc@ios@@SAHXZ() ios_xalloc @ thiscall -arch=win32 ?xsgetn@streambuf@@UAEHPADH@Z(ptr ptr long) streambuf_xsgetn @ cdecl -arch=win64 ?xsgetn@streambuf@@UEAAHPEADH@Z(ptr ptr long) streambuf_xsgetn @ thiscall -arch=win32 ?xsputn@streambuf@@UAEHPBDH@Z(ptr ptr long) streambuf_xsputn diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcirt/tests/msvcirt.c wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcirt/tests/msvcirt.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcirt/tests/msvcirt.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcirt/tests/msvcirt.c 2015-07-12 05:36:18.000000000 +0000 @@ -23,6 +23,31 @@ typedef void (*vtable_ptr)(void); +typedef enum { + IOSTATE_goodbit = 0x0, + IOSTATE_eofbit = 0x1, + IOSTATE_failbit = 0x2, + IOSTATE_badbit = 0x4 +} ios_io_state; + +typedef enum { + FLAGS_skipws = 0x1, + FLAGS_left = 0x2, + FLAGS_right = 0x4, + FLAGS_internal = 0x8, + FLAGS_dec = 0x10, + FLAGS_oct = 0x20, + FLAGS_hex = 0x40, + FLAGS_showbase = 0x80, + FLAGS_showpoint = 0x100, + FLAGS_uppercase = 0x200, + FLAGS_showpos = 0x400, + FLAGS_scientific = 0x800, + FLAGS_fixed = 0x1000, + FLAGS_unitbuf = 0x2000, + FLAGS_stdio = 0x4000 +} ios_flags; + /* class streambuf */ typedef struct { const vtable_ptr *vtable; @@ -41,6 +66,28 @@ CRITICAL_SECTION lock; } streambuf; +/* class ios */ +struct _ostream; +typedef struct { + const vtable_ptr *vtable; + streambuf *sb; + ios_io_state state; + int special[4]; + int delbuf; + struct _ostream *tie; + ios_flags flags; + int precision; + char fill; + int width; + int do_lock; + CRITICAL_SECTION lock; +} ios; + +/* class ostream */ +typedef struct _ostream { + const vtable_ptr *vtable; +} ostream; + #undef __thiscall #ifdef __i386__ #define __thiscall __stdcall @@ -48,6 +95,8 @@ #define __thiscall __cdecl #endif +static void* (__cdecl *p_operator_new)(unsigned int); + /* streambuf */ static streambuf* (*__thiscall p_streambuf_reserve_ctor)(streambuf*, char*, int); static streambuf* (*__thiscall p_streambuf_ctor)(streambuf*); @@ -57,6 +106,7 @@ static int (*__thiscall p_streambuf_doallocate)(streambuf*); static void (*__thiscall p_streambuf_gbump)(streambuf*, int); static void (*__thiscall p_streambuf_lock)(streambuf*); +static int (*__thiscall p_streambuf_pbackfail)(streambuf*, int); static void (*__thiscall p_streambuf_pbump)(streambuf*, int); static int (*__thiscall p_streambuf_sbumpc)(streambuf*); static void (*__thiscall p_streambuf_setb)(streambuf*, char*, char*, int); @@ -71,6 +121,14 @@ static int (*__thiscall p_streambuf_xsgetn)(streambuf*, char*, int); static int (*__thiscall p_streambuf_xsputn)(streambuf*, const char*, int); +/* ios */ +static ios* (*__thiscall p_ios_copy_ctor)(ios*, const ios*); +static ios* (*__thiscall p_ios_ctor)(ios*); +static ios* (*__thiscall p_ios_sb_ctor)(ios*, streambuf*); +static ios* (*__thiscall p_ios_assign)(ios*, const ios*); +static void (*__thiscall p_ios_init)(ios*, streambuf*); +static void (*__thiscall p_ios_dtor)(ios*); + /* Emulate a __thiscall */ #ifdef __i386__ @@ -128,11 +186,12 @@ #endif /* __i386__ */ -static HMODULE msvcirt; +static HMODULE msvcrt, msvcirt; #define SETNOFAIL(x,y) x = (void*)GetProcAddress(msvcirt,y) #define SET(x,y) do { SETNOFAIL(x,y); ok(x != NULL, "Export '%s' not found\n", y); } while(0) static BOOL init(void) { + msvcrt = LoadLibraryA("msvcrt.dll"); msvcirt = LoadLibraryA("msvcirt.dll"); if(!msvcirt) { win_skip("msvcirt.dll not installed\n"); @@ -140,6 +199,8 @@ } if(sizeof(void*) == 8) { /* 64-bit initialization */ + p_operator_new = (void*)GetProcAddress(msvcrt, "??2@YAPEAX_K@Z"); + SET(p_streambuf_reserve_ctor, "??0streambuf@@IEAA@PEADH@Z"); SET(p_streambuf_ctor, "??0streambuf@@IEAA@XZ"); SET(p_streambuf_dtor, "??1streambuf@@UEAA@XZ"); @@ -148,6 +209,7 @@ SET(p_streambuf_doallocate, "?doallocate@streambuf@@MEAAHXZ"); SET(p_streambuf_gbump, "?gbump@streambuf@@IEAAXH@Z"); SET(p_streambuf_lock, "?lock@streambuf@@QEAAXXZ"); + SET(p_streambuf_pbackfail, "?pbackfail@streambuf@@UEAAHH@Z"); SET(p_streambuf_pbump, "?pbump@streambuf@@IEAAXH@Z"); SET(p_streambuf_sbumpc, "?sbumpc@streambuf@@QEAAHXZ"); SET(p_streambuf_setb, "?setb@streambuf@@IEAAXPEAD0H@Z"); @@ -161,7 +223,16 @@ SET(p_streambuf_unlock, "?unlock@streambuf@@QEAAXXZ"); SET(p_streambuf_xsgetn, "?xsgetn@streambuf@@UEAAHPEADH@Z"); SET(p_streambuf_xsputn, "?xsputn@streambuf@@UEAAHPEBDH@Z"); + + SET(p_ios_copy_ctor, "??0ios@@IEAA@AEBV0@@Z"); + SET(p_ios_ctor, "??0ios@@IEAA@XZ"); + SET(p_ios_sb_ctor, "??0ios@@QEAA@PEAVstreambuf@@@Z"); + SET(p_ios_assign, "??4ios@@IEAAAEAV0@AEBV0@@Z"); + SET(p_ios_init, "?init@ios@@IEAAXPEAVstreambuf@@@Z"); + SET(p_ios_dtor, "??1ios@@UEAA@XZ"); } else { + p_operator_new = (void*)GetProcAddress(msvcrt, "??2@YAPAXI@Z"); + SET(p_streambuf_reserve_ctor, "??0streambuf@@IAE@PADH@Z"); SET(p_streambuf_ctor, "??0streambuf@@IAE@XZ"); SET(p_streambuf_dtor, "??1streambuf@@UAE@XZ"); @@ -170,6 +241,7 @@ SET(p_streambuf_doallocate, "?doallocate@streambuf@@MAEHXZ"); SET(p_streambuf_gbump, "?gbump@streambuf@@IAEXH@Z"); SET(p_streambuf_lock, "?lock@streambuf@@QAEXXZ"); + SET(p_streambuf_pbackfail, "?pbackfail@streambuf@@UAEHH@Z"); SET(p_streambuf_pbump, "?pbump@streambuf@@IAEXH@Z"); SET(p_streambuf_sbumpc, "?sbumpc@streambuf@@QAEHXZ"); SET(p_streambuf_setb, "?setb@streambuf@@IAEXPAD0H@Z"); @@ -183,6 +255,13 @@ SET(p_streambuf_unlock, "?unlock@streambuf@@QAEXXZ"); SET(p_streambuf_xsgetn, "?xsgetn@streambuf@@UAEHPADH@Z"); SET(p_streambuf_xsputn, "?xsputn@streambuf@@UAEHPBDH@Z"); + + SET(p_ios_copy_ctor, "??0ios@@IAE@ABV0@@Z"); + SET(p_ios_ctor, "??0ios@@IAE@XZ"); + SET(p_ios_sb_ctor, "??0ios@@QAE@PAVstreambuf@@@Z"); + SET(p_ios_assign, "??4ios@@IAEAAV0@ABV0@@Z"); + SET(p_ios_init, "?init@ios@@IAEXPAVstreambuf@@@Z"); + SET(p_ios_dtor, "??1ios@@UAE@XZ"); } init_thiscall_thunk(); @@ -689,6 +768,30 @@ ok(sb3.stored_char == EOF, "wrong stored character, expected EOF got %c\n", sb3.stored_char); ok(underflow_count == 57, "no call to underflow expected\n"); + /* pbackfail */ + ret = (int) call_func2(p_streambuf_pbackfail, &sb, 'A'); + ok(ret == 'A', "expected 'A' got '%c'\n", ret); + ok(sb.gptr == sb.eback + 2, "wrong get pointer, expected %p got %p\n", sb.eback + 2, sb.gptr); + ok(*sb.gptr == 'A', "expected 'A' in the get area, got %c\n", *sb.gptr); + ret = (int) call_func2(p_streambuf_pbackfail, &sb, EOF); + ok(ret == EOF, "expected EOF got '%c'\n", ret); + ok(sb.gptr == sb.eback + 1, "wrong get pointer, expected %p got %p\n", sb.eback + 1, sb.gptr); + ok((signed char)*sb.gptr == EOF, "expected EOF in the get area, got %c\n", *sb.gptr); + sb.gptr = sb.eback; + ret = (int) call_func2(p_streambuf_pbackfail, &sb, 'Z'); + ok(ret == EOF, "expected EOF got '%c'\n", ret); + ok(sb.gptr == sb.eback, "wrong get pointer, expected %p got %p\n", sb.eback, sb.gptr); + ok(*sb.gptr == 'T', "expected 'T' in the get area, got %c\n", *sb.gptr); + ret = (int) call_func2(p_streambuf_pbackfail, &sb, EOF); + ok(ret == EOF, "expected EOF got '%c'\n", ret); + ok(sb.gptr == sb.eback, "wrong get pointer, expected %p got %p\n", sb.eback, sb.gptr); + ok(*sb.gptr == 'T', "expected 'T' in the get area, got %c\n", *sb.gptr); + sb2.gptr = sb2.egptr + 1; + ret = (int) call_func2(p_streambuf_pbackfail, &sb2, 'X'); + ok(ret == 'X', "expected 'X' got '%c'\n", ret); + ok(sb2.gptr == sb2.egptr, "wrong get pointer, expected %p got %p\n", sb2.egptr, sb2.gptr); + ok(*sb2.gptr == 'X', "expected 'X' in the get area, got %c\n", *sb2.gptr); + SetEvent(lock_arg.test[3]); WaitForSingleObject(thread, INFINITE); @@ -702,12 +805,109 @@ CloseHandle(thread); } +static void test_ios(void) +{ + ios ios_obj, ios_obj2; + streambuf *psb; + + memset(&ios_obj, 0xab, sizeof(ios)); + memset(&ios_obj2, 0xab, sizeof(ios)); + psb = p_operator_new(sizeof(streambuf)); + ok(psb != NULL, "failed to allocate streambuf object\n"); + call_func1(p_streambuf_ctor, psb); + + /* constructor/destructor */ + call_func2(p_ios_sb_ctor, &ios_obj, NULL); + ok(ios_obj.sb == NULL, "expected %p got %p\n", NULL, ios_obj.sb); + ok(ios_obj.state == IOSTATE_badbit, "expected %x got %x\n", IOSTATE_badbit, ios_obj.state); + ok(ios_obj.special[0] == 0, "expected 0 got %d\n", ios_obj.special[0]); + ok(ios_obj.special[1] == 0, "expected 0 got %d\n", ios_obj.special[1]); + ok(ios_obj.delbuf == 0, "expected 0 got %d\n", ios_obj.delbuf); + ok(ios_obj.tie == NULL, "expected %p got %p\n", NULL, ios_obj.tie); + ok(ios_obj.flags == 0, "expected 0 got %x\n", ios_obj.flags); + ok(ios_obj.precision == 6, "expected 6 got %d\n", ios_obj.precision); + ok(ios_obj.fill == ' ', "expected ' ' got %d\n", ios_obj.fill); + ok(ios_obj.width == 0, "expected 0 got %d\n", ios_obj.width); + ok(ios_obj.do_lock == -1, "expected -1 got %d\n", ios_obj.do_lock); + ok(ios_obj.lock.LockCount == -1, "expected -1 got %d\n", ios_obj.lock.LockCount); + ios_obj.state = 0x8; + call_func1(p_ios_dtor, &ios_obj); + ok(ios_obj.state == IOSTATE_badbit, "expected %x got %x\n", IOSTATE_badbit, ios_obj.state); + ios_obj.state = 0x8; + call_func2(p_ios_sb_ctor, &ios_obj, psb); + ok(ios_obj.sb == psb, "expected %p got %p\n", psb, ios_obj.sb); + ok(ios_obj.state == IOSTATE_goodbit, "expected %x got %x\n", IOSTATE_goodbit, ios_obj.state); + ok(ios_obj.delbuf == 0, "expected 0 got %d\n", ios_obj.delbuf); + ios_obj.state = 0x8; + call_func1(p_ios_dtor, &ios_obj); + ok(ios_obj.sb == NULL, "expected %p got %p\n", NULL, ios_obj.sb); + ok(ios_obj.state == IOSTATE_badbit, "expected %x got %x\n", IOSTATE_badbit, ios_obj.state); + ios_obj.sb = psb; + ios_obj.state = 0x8; + call_func1(p_ios_ctor, &ios_obj); + ok(ios_obj.sb == NULL, "expected %p got %p\n", NULL, ios_obj.sb); + ok(ios_obj.state == IOSTATE_badbit, "expected %x got %x\n", IOSTATE_badbit, ios_obj.state); + + /* init */ + ios_obj.state |= 0x8; + call_func2(p_ios_init, &ios_obj, psb); + ok(ios_obj.sb == psb, "expected %p got %p\n", psb, ios_obj.sb); + ok(ios_obj.state == 0x8, "expected %x got %x\n", 0x8, ios_obj.state); + call_func2(p_ios_init, &ios_obj, NULL); + ok(ios_obj.sb == NULL, "expected %p got %p\n", NULL, ios_obj.sb); + ok(ios_obj.state == (0x8|IOSTATE_badbit), "expected %x got %x\n", (0x8|IOSTATE_badbit), ios_obj.state); + ios_obj.sb = psb; + ios_obj.delbuf = 0; + call_func2(p_ios_init, &ios_obj, psb); + ok(ios_obj.sb == psb, "expected %p got %p\n", psb, ios_obj.sb); + ok(ios_obj.state == 0x8, "expected %x got %x\n", 0x8, ios_obj.state); + ios_obj.delbuf = 1; + call_func1(p_ios_dtor, &ios_obj); + + /* copy constructor */ + call_func2(p_ios_copy_ctor, &ios_obj, &ios_obj2); + ok(ios_obj.sb == NULL, "expected %p got %p\n", NULL, ios_obj.sb); + ok(ios_obj.state == (ios_obj2.state|IOSTATE_badbit), "expected %x got %x\n", (ios_obj2.state|IOSTATE_badbit), ios_obj.state); + ok(ios_obj.delbuf == 0, "expected 0 got %d\n", ios_obj.delbuf); + ok(ios_obj.tie == ios_obj2.tie, "expected %p got %p\n", ios_obj2.tie, ios_obj.tie); + ok(ios_obj.flags == ios_obj2.flags, "expected %x got %x\n", ios_obj2.flags, ios_obj.flags); + ok(ios_obj.precision == (char)0xab, "expected %d got %d\n", (char)0xab, ios_obj.precision); + ok(ios_obj.fill == (char)0xab, "expected %d got %d\n", (char)0xab, ios_obj.fill); + ok(ios_obj.width == (char)0xab, "expected %d got %d\n", (char)0xab, ios_obj.width); + ok(ios_obj.do_lock == -1, "expected -1 got %d\n", ios_obj.do_lock); + + /* assignment */ + ios_obj.state = 0x8; + ios_obj.delbuf = 2; + ios_obj.tie = NULL; + ios_obj.flags = 0; + ios_obj.precision = 6; + ios_obj.fill = ' '; + ios_obj.width = 0; + ios_obj.do_lock = 2; + call_func2(p_ios_assign, &ios_obj, &ios_obj2); + ok(ios_obj.sb == NULL, "expected %p got %p\n", NULL, ios_obj.sb); + ok(ios_obj.state == (ios_obj2.state|IOSTATE_badbit), "expected %x got %x\n", (ios_obj2.state|IOSTATE_badbit), ios_obj.state); + ok(ios_obj.delbuf == 2, "expected 2 got %d\n", ios_obj.delbuf); + ok(ios_obj.tie == ios_obj2.tie, "expected %p got %p\n", ios_obj2.tie, ios_obj.tie); + ok(ios_obj.flags == ios_obj2.flags, "expected %x got %x\n", ios_obj2.flags, ios_obj.flags); + ok(ios_obj.precision == (char)0xab, "expected %d got %d\n", (char)0xab, ios_obj.precision); + ok(ios_obj.fill == (char)0xab, "expected %d got %d\n", (char)0xab, ios_obj.fill); + ok(ios_obj.width == (char)0xab, "expected %d got %d\n", (char)0xab, ios_obj.width); + ok(ios_obj.do_lock == 2, "expected 2 got %d\n", ios_obj.do_lock); + ios_obj.delbuf = 0; + call_func1(p_ios_dtor, &ios_obj); + ok(ios_obj.state == IOSTATE_badbit, "expected %x got %x\n", IOSTATE_badbit, ios_obj.state); +} + START_TEST(msvcirt) { if(!init()) return; test_streambuf(); + test_ios(); + FreeLibrary(msvcrt); FreeLibrary(msvcirt); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcp110/msvcp110.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcp110/msvcp110.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcp110/msvcp110.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcp110/msvcp110.spec 2015-07-12 05:36:18.000000000 +0000 @@ -517,9 +517,9 @@ @ cdecl -arch=arm ??1ctype_base@std@@UAA@XZ(ptr) ctype_base_dtor @ thiscall -arch=i386 ??1ctype_base@std@@UAE@XZ(ptr) ctype_base_dtor @ cdecl -arch=win64 ??1ctype_base@std@@UEAA@XZ(ptr) ctype_base_dtor -@ stub -arch=arm ??1facet@locale@std@@MAA@XZ -@ stub -arch=i386 ??1facet@locale@std@@MAE@XZ -@ stub -arch=win64 ??1facet@locale@std@@MEAA@XZ +@ cdecl -arch=arm ??1facet@locale@std@@MAA@XZ(ptr) locale_facet_dtor +@ thiscall -arch=i386 ??1facet@locale@std@@MAE@XZ(ptr) locale_facet_dtor +@ cdecl -arch=win64 ??1facet@locale@std@@MEAA@XZ(ptr) locale_facet_dtor @ cdecl -arch=arm ??1ios_base@std@@UAA@XZ(ptr) ios_base_dtor @ thiscall -arch=i386 ??1ios_base@std@@UAE@XZ(ptr) ios_base_dtor @ cdecl -arch=win64 ??1ios_base@std@@UEAA@XZ(ptr) ios_base_dtor @@ -1163,8 +1163,8 @@ @ extern -arch=win64 ?_Clocptr@_Locimp@locale@std@@0PEAV123@EA locale__Locimp__Clocptr @ stub -arch=win32 ?_Close_dir@sys@tr2@std@@YAXPAX@Z @ stub -arch=win64 ?_Close_dir@sys@tr2@std@@YAXPEAX@Z -@ stub -arch=win32 ?_Copy_file@sys@tr2@std@@YAHPBD0_N@Z -@ stub -arch=win64 ?_Copy_file@sys@tr2@std@@YAHPEBD0_N@Z +@ cdecl -arch=win32 ?_Copy_file@sys@tr2@std@@YAHPBD0_N@Z(str str long) tr2_sys__Copy_file +@ cdecl -arch=win64 ?_Copy_file@sys@tr2@std@@YAHPEBD0_N@Z(str str long) tr2_sys__Copy_file @ stub -arch=win32 ?_Copy_file@sys@tr2@std@@YAHPB_W0_N@Z @ stub -arch=win64 ?_Copy_file@sys@tr2@std@@YAHPEB_W0_N@Z @ cdecl -arch=win32 ?_Current_get@sys@tr2@std@@YAPADPAD@Z(ptr) tr2_sys__Current_get @@ -1722,8 +1722,8 @@ @ cdecl -arch=win64 ?_Remove_dir@sys@tr2@std@@YA_NPEBD@Z(str) tr2_sys__Remove_dir @ stub -arch=win32 ?_Remove_dir@sys@tr2@std@@YA_NPB_W@Z @ stub -arch=win64 ?_Remove_dir@sys@tr2@std@@YA_NPEB_W@Z -@ stub -arch=win32 ?_Rename@sys@tr2@std@@YAHPBD0@Z -@ stub -arch=win64 ?_Rename@sys@tr2@std@@YAHPEBD0@Z +@ cdecl -arch=win32 ?_Rename@sys@tr2@std@@YAHPBD0@Z(str str) tr2_sys__Rename +@ cdecl -arch=win64 ?_Rename@sys@tr2@std@@YAHPEBD0@Z(str str) tr2_sys__Rename @ stub -arch=win32 ?_Rename@sys@tr2@std@@YAHPB_W0@Z @ stub -arch=win64 ?_Rename@sys@tr2@std@@YAHPEB_W0@Z @ cdecl -arch=win32 ?_Rep@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@DI@Z(ptr ptr long ptr long long) num_put_char__Rep @@ -1761,8 +1761,8 @@ @ stub -arch=win64 ?_Stat@sys@tr2@std@@YA?AW4file_type@123@PEBDAEAH@Z @ stub -arch=win32 ?_Stat@sys@tr2@std@@YA?AW4file_type@123@PB_WAAH@Z @ stub -arch=win64 ?_Stat@sys@tr2@std@@YA?AW4file_type@123@PEB_WAEAH@Z -@ stub -arch=win32 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PBD@Z -@ stub -arch=win64 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PEBD@Z +@ cdecl -arch=win32 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PBD@Z(str) tr2_sys__Statvfs +@ cdecl -arch=win64 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PEBD@Z(str) tr2_sys__Statvfs @ stub -arch=win32 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PB_W@Z @ stub -arch=win64 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PEB_W@Z @ cdecl -arch=arm ?_Swap_all@_Container_base0@std@@QAAXAAU12@@Z(ptr ptr) Container_base0_Swap_all diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcp120/msvcp120.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcp120/msvcp120.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcp120/msvcp120.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcp120/msvcp120.spec 2015-07-12 05:36:18.000000000 +0000 @@ -1128,8 +1128,8 @@ @ extern -arch=win64 ?_Clocptr@_Locimp@locale@std@@0PEAV123@EA locale__Locimp__Clocptr @ stub -arch=win32 ?_Close_dir@sys@tr2@std@@YAXPAX@Z @ stub -arch=win64 ?_Close_dir@sys@tr2@std@@YAXPEAX@Z -@ stub -arch=win32 ?_Copy_file@sys@tr2@std@@YAHPBD0_N@Z -@ stub -arch=win64 ?_Copy_file@sys@tr2@std@@YAHPEBD0_N@Z +@ cdecl -arch=win32 ?_Copy_file@sys@tr2@std@@YAHPBD0_N@Z(str str long) tr2_sys__Copy_file +@ cdecl -arch=win64 ?_Copy_file@sys@tr2@std@@YAHPEBD0_N@Z(str str long) tr2_sys__Copy_file @ stub -arch=win32 ?_Copy_file@sys@tr2@std@@YAHPB_W0_N@Z @ stub -arch=win64 ?_Copy_file@sys@tr2@std@@YAHPEB_W0_N@Z @ cdecl -arch=win32 ?_Current_get@sys@tr2@std@@YAPADAAY0BAE@D@Z(ptr) tr2_sys__Current_get @@ -1683,8 +1683,8 @@ @ cdecl -arch=win64 ?_Remove_dir@sys@tr2@std@@YA_NPEBD@Z(str) tr2_sys__Remove_dir @ stub -arch=win32 ?_Remove_dir@sys@tr2@std@@YA_NPB_W@Z @ stub -arch=win64 ?_Remove_dir@sys@tr2@std@@YA_NPEB_W@Z -@ stub -arch=win32 ?_Rename@sys@tr2@std@@YAHPBD0@Z -@ stub -arch=win64 ?_Rename@sys@tr2@std@@YAHPEBD0@Z +@ cdecl -arch=win32 ?_Rename@sys@tr2@std@@YAHPBD0@Z(str str) tr2_sys__Rename +@ cdecl -arch=win64 ?_Rename@sys@tr2@std@@YAHPEBD0@Z(str str) tr2_sys__Rename @ stub -arch=win32 ?_Rename@sys@tr2@std@@YAHPB_W0@Z @ stub -arch=win64 ?_Rename@sys@tr2@std@@YAHPEB_W0@Z @ cdecl -arch=win32 ?_Rep@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@DI@Z(ptr ptr long ptr long long) num_put_char__Rep @@ -1722,8 +1722,8 @@ @ stub -arch=win64 ?_Stat@sys@tr2@std@@YA?AW4file_type@123@PEBDAEAH@Z @ stub -arch=win32 ?_Stat@sys@tr2@std@@YA?AW4file_type@123@PB_WAAH@Z @ stub -arch=win64 ?_Stat@sys@tr2@std@@YA?AW4file_type@123@PEB_WAEAH@Z -@ stub -arch=win32 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PBD@Z -@ stub -arch=win64 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PEBD@Z +@ cdecl -arch=win32 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PBD@Z(str) tr2_sys__Statvfs +@ cdecl -arch=win64 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PEBD@Z(str) tr2_sys__Statvfs @ stub -arch=win32 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PB_W@Z @ stub -arch=win64 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PEB_W@Z @ cdecl -arch=arm ?_Swap_all@_Container_base0@std@@QAAXAAU12@@Z(ptr ptr) Container_base0_Swap_all diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcp120/tests/msvcp120.c wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcp120/tests/msvcp120.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcp120/tests/msvcp120.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcp120/tests/msvcp120.c 2015-07-12 05:36:18.000000000 +0000 @@ -38,6 +38,12 @@ BYTE isleadbyte[32]; } _Cvtvec; +struct space_info { + ULONGLONG capacity; + ULONGLONG free; + ULONGLONG available; +}; + static inline const char* debugstr_longlong(ULONGLONG ll) { static char string[17]; @@ -66,6 +72,9 @@ static MSVCP_bool (__cdecl *p_tr2_sys__Current_set)(char const*); static int (__cdecl *p_tr2_sys__Make_dir)(char const*); static MSVCP_bool (__cdecl *p_tr2_sys__Remove_dir)(char const*); +static int (__cdecl *p_tr2_sys__Copy_file)(char const*, char const*, MSVCP_bool); +static int (__cdecl *p_tr2_sys__Rename)(char const*, char const*); +static struct space_info (__cdecl *p_tr2_sys__Statvfs)(char const*); static HMODULE msvcp; #define SETNOFAIL(x,y) x = (void*)GetProcAddress(msvcp,y) @@ -106,6 +115,12 @@ "?_Make_dir@sys@tr2@std@@YAHPEBD@Z"); SET(p_tr2_sys__Remove_dir, "?_Remove_dir@sys@tr2@std@@YA_NPEBD@Z"); + SET(p_tr2_sys__Copy_file, + "?_Copy_file@sys@tr2@std@@YAHPEBD0_N@Z"); + SET(p_tr2_sys__Rename, + "?_Rename@sys@tr2@std@@YAHPEBD0@Z"); + SET(p_tr2_sys__Statvfs, + "?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PEBD@Z"); } else { SET(p_tr2_sys__File_size, "?_File_size@sys@tr2@std@@YA_KPBD@Z"); @@ -119,6 +134,12 @@ "?_Make_dir@sys@tr2@std@@YAHPBD@Z"); SET(p_tr2_sys__Remove_dir, "?_Remove_dir@sys@tr2@std@@YA_NPBD@Z"); + SET(p_tr2_sys__Copy_file, + "?_Copy_file@sys@tr2@std@@YAHPBD0_N@Z"); + SET(p_tr2_sys__Rename, + "?_Rename@sys@tr2@std@@YAHPBD0@Z"); + SET(p_tr2_sys__Statvfs, + "?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PBD@Z"); } msvcr = GetModuleHandleA("msvcr120.dll"); @@ -329,11 +350,12 @@ { ULONGLONG val; HANDLE file; - LARGE_INTEGER file_size = {{7, 0}}; + LARGE_INTEGER file_size; CreateDirectoryA("tr2_test_dir", NULL); file = CreateFileA("tr2_test_dir/f1", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); ok(file != INVALID_HANDLE_VALUE, "create file failed: INVALID_HANDLE_VALUE\n"); + file_size.QuadPart = 7; ok(SetFilePointerEx(file, file_size, NULL, FILE_BEGIN), "SetFilePointerEx failed\n"); ok(SetEndOfFile(file), "SetEndOfFile failed\n"); CloseHandle(file); @@ -526,6 +548,165 @@ } } +static void test_tr2_sys__Copy_file(void) +{ + HANDLE file; + int ret, i; + LARGE_INTEGER file_size; + struct { + char const *source; + char const *dest; + MSVCP_bool fail_if_exists; + int last_error; + MSVCP_bool is_todo; + } tests[] = { + { "f1", "f1_copy", TRUE, ERROR_SUCCESS, FALSE }, + { "f1", "tr2_test_dir\\f1_copy", TRUE, ERROR_SUCCESS, FALSE }, + { "f1", "tr2_test_dir\\f1_copy", TRUE, ERROR_FILE_EXISTS, FALSE }, + { "f1", "tr2_test_dir\\f1_copy", FALSE, ERROR_SUCCESS, FALSE }, + { "f1", "tr2_test_dir", TRUE, ERROR_ACCESS_DENIED, TRUE }, + { "tr2_test_dir", "f1", TRUE, ERROR_ACCESS_DENIED, FALSE }, + { "tr2_test_dir", "tr2_test_dir_copy", TRUE, ERROR_ACCESS_DENIED, FALSE }, + { NULL, "f1", TRUE, ERROR_INVALID_PARAMETER, TRUE }, + { "f1", NULL, TRUE, ERROR_INVALID_PARAMETER, TRUE }, + { "not_exist", "tr2_test_dir", TRUE, ERROR_FILE_NOT_FOUND, FALSE }, + { "f1", "not_exist_dir\\f1_copy", TRUE, ERROR_PATH_NOT_FOUND, FALSE } + }; + + ret = p_tr2_sys__Make_dir("tr2_test_dir"); + ok(ret == 1, "test_tr2_sys__Make_dir(): expect 1 got %d\n", ret); + file = CreateFileA("f1", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); + ok(file != INVALID_HANDLE_VALUE, "create file failed: INVALID_HANDLE_VALUE\n"); + file_size.QuadPart = 7; + ok(SetFilePointerEx(file, file_size, NULL, FILE_BEGIN), "SetFilePointerEx failed\n"); + ok(SetEndOfFile(file), "SetEndOfFile failed\n"); + CloseHandle(file); + + for(i=0; i>", ERROR_INVALID_NAME }, + { "tr2_test_dir\\not_exist_file", "tr2_test_dir\\not_exist_rename", ERROR_FILE_NOT_FOUND } + }; + + memset(current_path, 0, MAX_PATH); + GetCurrentDirectoryA(MAX_PATH, current_path); + memset(temp_path, 0, MAX_PATH); + GetTempPathA(MAX_PATH, temp_path); + ok(SetCurrentDirectoryA(temp_path), "SetCurrentDirectoryA to temp_path failed\n"); + ret = p_tr2_sys__Make_dir("tr2_test_dir"); + + ok(ret == 1, "test_tr2_sys__Make_dir(): expect 1 got %d\n", ret); + file = CreateFileA("tr2_test_dir\\f1", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); + ok(file != INVALID_HANDLE_VALUE, "create file failed: INVALID_HANDLE_VALUE\n"); + CloseHandle(file); + + ret = p_tr2_sys__Rename("tr2_test_dir\\f1", "tr2_test_dir\\f1"); + todo_wine ok(ERROR_SUCCESS == ret, "test_tr2_sys__Rename(): expect: ERROR_SUCCESS, got %d\n", ret); + for(i=0; i= info.free, "test_tr2_sys__Statvfs(): info.capacity < info.free\n"); + ok(info.free >= info.available, "test_tr2_sys__Statvfs(): info.free < info.available\n"); + + info = p_tr2_sys__Statvfs(NULL); + ok(info.available == 0, "test_tr2_sys__Statvfs(): info.available expect: %d, got %s\n", + 0, debugstr_longlong(info.available)); + ok(info.capacity == 0, "test_tr2_sys__Statvfs(): info.capacity expect: %d, got %s\n", + 0, debugstr_longlong(info.capacity)); + ok(info.free == 0, "test_tr2_sys__Statvfs(): info.free expect: %d, got %s\n", + 0, debugstr_longlong(info.free)); + + info = p_tr2_sys__Statvfs("not_exist"); + ok(info.available == 0, "test_tr2_sys__Statvfs(): info.available expect: %d, got %s\n", + 0, debugstr_longlong(info.available)); + ok(info.capacity == 0, "test_tr2_sys__Statvfs(): info.capacity expect: %d, got %s\n", + 0, debugstr_longlong(info.capacity)); + ok(info.free == 0, "test_tr2_sys__Statvfs(): info.free expect: %d, got %s\n", + 0, debugstr_longlong(info.free)); +} + START_TEST(msvcp120) { if(!init()) return; @@ -541,5 +722,8 @@ test_tr2_sys__Current_set(); test_tr2_sys__Make_dir(); test_tr2_sys__Remove_dir(); + test_tr2_sys__Copy_file(); + test_tr2_sys__Rename(); + test_tr2_sys__Statvfs(); FreeLibrary(msvcp); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcp120_app/msvcp120_app.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcp120_app/msvcp120_app.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcp120_app/msvcp120_app.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcp120_app/msvcp120_app.spec 2015-07-12 05:36:18.000000000 +0000 @@ -1128,8 +1128,8 @@ @ extern -arch=win64 ?_Clocptr@_Locimp@locale@std@@0PEAV123@EA msvcp120.?_Clocptr@_Locimp@locale@std@@0PEAV123@EA @ stub -arch=win32 ?_Close_dir@sys@tr2@std@@YAXPAX@Z @ stub -arch=win64 ?_Close_dir@sys@tr2@std@@YAXPEAX@Z -@ stub -arch=win32 ?_Copy_file@sys@tr2@std@@YAHPBD0_N@Z -@ stub -arch=win64 ?_Copy_file@sys@tr2@std@@YAHPEBD0_N@Z +@ cdecl -arch=win32 ?_Copy_file@sys@tr2@std@@YAHPBD0_N@Z(str str long) msvcp120.?_Copy_file@sys@tr2@std@@YAHPBD0_N@Z +@ cdecl -arch=win64 ?_Copy_file@sys@tr2@std@@YAHPEBD0_N@Z(str str long) msvcp120.?_Copy_file@sys@tr2@std@@YAHPEBD0_N@Z @ stub -arch=win32 ?_Copy_file@sys@tr2@std@@YAHPB_W0_N@Z @ stub -arch=win64 ?_Copy_file@sys@tr2@std@@YAHPEB_W0_N@Z @ cdecl -arch=win32 ?_Current_get@sys@tr2@std@@YAPADAAY0BAE@D@Z(ptr) msvcp120.?_Current_get@sys@tr2@std@@YAPADAAY0BAE@D@Z @@ -1683,8 +1683,8 @@ @ cdecl -arch=win64 ?_Remove_dir@sys@tr2@std@@YA_NPEBD@Z(str) msvcp120.?_Remove_dir@sys@tr2@std@@YA_NPEBD@Z @ stub -arch=win32 ?_Remove_dir@sys@tr2@std@@YA_NPB_W@Z @ stub -arch=win64 ?_Remove_dir@sys@tr2@std@@YA_NPEB_W@Z -@ stub -arch=win32 ?_Rename@sys@tr2@std@@YAHPBD0@Z -@ stub -arch=win64 ?_Rename@sys@tr2@std@@YAHPEBD0@Z +@ cdecl -arch=win32 ?_Rename@sys@tr2@std@@YAHPBD0@Z(str str) msvcp120.?_Rename@sys@tr2@std@@YAHPBD0@Z +@ cdecl -arch=win64 ?_Rename@sys@tr2@std@@YAHPEBD0@Z(str str) msvcp120.?_Rename@sys@tr2@std@@YAHPEBD0@Z @ stub -arch=win32 ?_Rename@sys@tr2@std@@YAHPB_W0@Z @ stub -arch=win64 ?_Rename@sys@tr2@std@@YAHPEB_W0@Z @ cdecl -arch=win32 ?_Rep@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@DI@Z(ptr ptr long ptr long long) msvcp120.?_Rep@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@DI@Z @@ -1722,8 +1722,8 @@ @ stub -arch=win64 ?_Stat@sys@tr2@std@@YA?AW4file_type@123@PEBDAEAH@Z @ stub -arch=win32 ?_Stat@sys@tr2@std@@YA?AW4file_type@123@PB_WAAH@Z @ stub -arch=win64 ?_Stat@sys@tr2@std@@YA?AW4file_type@123@PEB_WAEAH@Z -@ stub -arch=win32 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PBD@Z -@ stub -arch=win64 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PEBD@Z +@ cdecl -arch=win32 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PBD@Z(str) msvcp120.?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PBD@Z +@ cdecl -arch=win64 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PEBD@Z(str) msvcp120.?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PEBD@Z @ stub -arch=win32 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PB_W@Z @ stub -arch=win64 ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PEB_W@Z @ cdecl -arch=arm ?_Swap_all@_Container_base0@std@@QAAXAAU12@@Z(ptr ptr) msvcp120.?_Swap_all@_Container_base0@std@@QAAXAAU12@@Z diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcp90/ios.c wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcp90/ios.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcp90/ios.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcp90/ios.c 2015-07-12 05:36:18.000000000 +0000 @@ -318,6 +318,12 @@ */ } strstream; +struct space_info { + ULONGLONG capacity; + ULONGLONG free; + ULONGLONG available; +}; + #if _MSVCP_VER >= 100 #define VBTABLE_ALIGN 8 #else @@ -14284,6 +14290,49 @@ return RemoveDirectoryA(path) != 0; } +/* ?_Copy_file@sys@tr2@std@@YAHPBD0_N@Z */ +/* ?_Copy_file@sys@tr2@std@@YAHPEBD0_N@Z */ +int __cdecl tr2_sys__Copy_file(char const* source, char const* dest, MSVCP_bool fail_if_exists) +{ + TRACE("(%s %s %x)\n", debugstr_a(source), debugstr_a(dest), fail_if_exists); + + if(CopyFileA(source, dest, fail_if_exists)) + return ERROR_SUCCESS; + return GetLastError(); +} + +/* ?_Rename@sys@tr2@std@@YAHPBD0@Z */ +/* ?_Rename@sys@tr2@std@@YAHPEBD0@Z */ +int __cdecl tr2_sys__Rename(char const* old_path, char const* new_path) +{ + TRACE("(%s %s)\n", debugstr_a(old_path), debugstr_a(new_path)); + + if(!old_path || !new_path) + return ERROR_INVALID_PARAMETER; + + if(MoveFileExA(old_path, new_path, MOVEFILE_COPY_ALLOWED)) + return ERROR_SUCCESS; + return GetLastError(); +} + +/* ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PBD@Z */ +/* ?_Statvfs@sys@tr2@std@@YA?AUspace_info@123@PEBD@Z */ +struct space_info __cdecl tr2_sys__Statvfs(const char* path) +{ + ULARGE_INTEGER available, total, free; + struct space_info info; + TRACE("(%s)\n", debugstr_a(path)); + + if(!path || !GetDiskFreeSpaceExA(path, &available, &total, &free)) { + info.capacity = info.free = info.available = 0; + }else { + info.capacity = total.QuadPart; + info.free = free.QuadPart; + info.available = available.QuadPart; + } + return info; +} + /* ??0strstream@std@@QAE@PADHH@Z */ /* ??0strstream@std@@QEAA@PEAD_JH@Z */ #if STREAMSIZE_BITS == 64 diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcp90/locale.c wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcp90/locale.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcp90/locale.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcp90/locale.c 2015-07-12 05:36:18.000000000 +0000 @@ -682,6 +682,10 @@ _Ctypevec* __cdecl _Getctype(_Ctypevec *ret) { short *table; +#if _MSVCP_VER >= 110 + wchar_t *name; + MSVCP_size_t size; +#endif TRACE("\n"); @@ -689,7 +693,14 @@ #if _MSVCP_VER < 110 ret->handle = ___lc_handle_func()[LC_COLLATE]; #else - ret->name = ___lc_locale_name_func()[LC_COLLATE]; + if((name = ___lc_locale_name_func()[LC_COLLATE])) { + size = wcslen(name)+1; + ret->name = malloc(size*sizeof(*name)); + if(!ret->name) throw_exception(EXCEPTION_BAD_ALLOC, NULL); + memcpy(ret->name, name, size*sizeof(*name)); + } else { + ret->name = NULL; + } #endif ret->delfl = TRUE; table = malloc(sizeof(short[256])); @@ -789,7 +800,7 @@ /* ?_Getdays@_Locinfo@std@@QBEPBDXZ */ /* ?_Getdays@_Locinfo@std@@QEBAPEBDXZ */ DEFINE_THISCALL_WRAPPER(_Locinfo__Getdays, 4) -const char* __thiscall _Locinfo__Getdays(_Locinfo *this) +const char* __thiscall _Locinfo__Getdays(const _Locinfo *this) { char *days = _Getdays(); const char *ret; @@ -797,8 +808,8 @@ TRACE("(%p)\n", this); if(days) { - locale_string_char_dtor(&this->days); - locale_string_char_ctor_cstr(&this->days, days); + locale_string_char_dtor((locale_string *)&this->days); + locale_string_char_ctor_cstr((locale_string *)&this->days, days); free(days); } @@ -811,7 +822,7 @@ /* ?_W_Getdays@_Locinfo@std@@QBEPBGXZ */ /* ?_W_Getdays@_Locinfo@std@@QEBAPEBGXZ */ DEFINE_THISCALL_WRAPPER(_Locinfo__W_Getdays, 4) -const wchar_t* __thiscall _Locinfo__W_Getdays(_Locinfo *this) +const wchar_t* __thiscall _Locinfo__W_Getdays(const _Locinfo *this) { static const wchar_t defdays[] = { @@ -829,8 +840,8 @@ TRACE("(%p)\n", this); if(wdays) { - locale_string_wchar_dtor(&this->wdays); - locale_string_wchar_ctor_cstr(&this->wdays, wdays); + locale_string_wchar_dtor((locale_string_wchar *)&this->wdays); + locale_string_wchar_ctor_cstr((locale_string_wchar *)&this->wdays, wdays); free(wdays); } @@ -842,7 +853,7 @@ /* ?_W_Getmonths@_Locinfo@std@@QBEPBGXZ */ /* ?_W_Getmonths@_Locinfo@std@@QEBAPEBGXZ */ DEFINE_THISCALL_WRAPPER(_Locinfo__W_Getmonths, 4) -const wchar_t* __thiscall _Locinfo__W_Getmonths(_Locinfo *this) +const wchar_t* __thiscall _Locinfo__W_Getmonths(const _Locinfo *this) { static const wchar_t defmonths[] = { @@ -865,8 +876,8 @@ TRACE("(%p)\n", this); if(wmonths) { - locale_string_wchar_dtor(&this->wmonths); - locale_string_wchar_ctor_cstr(&this->wmonths, wmonths); + locale_string_wchar_dtor((locale_string_wchar *)&this->wmonths); + locale_string_wchar_ctor_cstr((locale_string_wchar *)&this->wmonths, wmonths); free(wmonths); } @@ -879,7 +890,7 @@ /* ?_Getmonths@_Locinfo@std@@QBEPBDXZ */ /* ?_Getmonths@_Locinfo@std@@QEBAPEBDXZ */ DEFINE_THISCALL_WRAPPER(_Locinfo__Getmonths, 4) -const char* __thiscall _Locinfo__Getmonths(_Locinfo *this) +const char* __thiscall _Locinfo__Getmonths(const _Locinfo *this) { char *months = _Getmonths(); const char *ret; @@ -887,8 +898,8 @@ TRACE("(%p)\n", this); if(months) { - locale_string_char_dtor(&this->months); - locale_string_char_ctor_cstr(&this->months, months); + locale_string_char_dtor((locale_string *)&this->months); + locale_string_char_ctor_cstr((locale_string *)&this->months, months); free(months); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcr100/msvcr100.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcr100/msvcr100.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcr100/msvcr100.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcr100/msvcr100.spec 2015-07-12 05:36:18.000000000 +0000 @@ -966,7 +966,7 @@ @ stub _ismbbkpunct(long) @ stub _ismbbkpunct_l @ cdecl _ismbblead(long) -@ stub _ismbblead_l +@ cdecl _ismbblead_l(long ptr) @ stub _ismbbprint(long) @ stub _ismbbprint_l @ stub _ismbbpunct(long) @@ -1096,8 +1096,8 @@ @ stub _mblen_l @ cdecl _mbsbtype(str long) @ stub _mbsbtype_l -@ stub _mbscat_s -@ stub _mbscat_s_l +@ cdecl _mbscat_s(ptr long str) +@ cdecl _mbscat_s_l(ptr long str ptr) @ cdecl _mbschr(str long) @ stub _mbschr_l @ cdecl _mbscmp(str str) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcr110/msvcr110.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcr110/msvcr110.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcr110/msvcr110.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcr110/msvcr110.spec 2015-07-12 05:36:18.000000000 +0000 @@ -1313,7 +1313,7 @@ @ stub _ismbbkpunct(long) @ stub _ismbbkpunct_l @ cdecl _ismbblead(long) -@ stub _ismbblead_l +@ cdecl _ismbblead_l(long ptr) @ stub _ismbbprint(long) @ stub _ismbbprint_l @ stub _ismbbpunct(long) @@ -1454,8 +1454,8 @@ @ stub _mblen_l @ cdecl _mbsbtype(str long) @ stub _mbsbtype_l -@ stub _mbscat_s -@ stub _mbscat_s_l +@ cdecl _mbscat_s(ptr long str) +@ cdecl _mbscat_s_l(ptr long str ptr) @ cdecl _mbschr(str long) @ stub _mbschr_l @ cdecl _mbscmp(str str) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcr120/msvcr120.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcr120/msvcr120.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcr120/msvcr120.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcr120/msvcr120.spec 2015-07-12 05:36:18.000000000 +0000 @@ -1314,7 +1314,7 @@ @ stub _ismbbkpunct(long) @ stub _ismbbkpunct_l @ cdecl _ismbblead(long) -@ stub _ismbblead_l +@ cdecl _ismbblead_l(long ptr) @ stub _ismbbprint(long) @ stub _ismbbprint_l @ stub _ismbbpunct(long) @@ -1462,8 +1462,8 @@ @ stub _mblen_l @ cdecl _mbsbtype(str long) @ stub _mbsbtype_l -@ stub _mbscat_s -@ stub _mbscat_s_l +@ cdecl _mbscat_s(ptr long str) +@ cdecl _mbscat_s_l(ptr long str ptr) @ cdecl _mbschr(str long) @ stub _mbschr_l @ cdecl _mbscmp(str str) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcr120_app/msvcr120_app.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcr120_app/msvcr120_app.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcr120_app/msvcr120_app.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcr120_app/msvcr120_app.spec 2015-07-12 05:36:18.000000000 +0000 @@ -1219,7 +1219,7 @@ @ cdecl _ismbbkpunct(long) msvcr120._ismbbkpunct @ stub _ismbbkpunct_l @ cdecl _ismbblead(long) msvcr120._ismbblead -@ stub _ismbblead_l +@ cdecl _ismbblead_l(long ptr) msvcr120._ismbblead_l @ cdecl _ismbbprint(long) msvcr120._ismbbprint @ stub _ismbbprint_l @ cdecl _ismbbpunct(long) msvcr120._ismbbpunct diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcr80/msvcr80.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcr80/msvcr80.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcr80/msvcr80.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcr80/msvcr80.spec 2015-07-12 05:36:18.000000000 +0000 @@ -639,7 +639,7 @@ @ stub _ismbbkpunct(long) @ stub _ismbbkpunct_l @ cdecl _ismbblead(long) -@ stub _ismbblead_l +@ cdecl _ismbblead_l(long ptr) @ stub _ismbbprint(long) @ stub _ismbbprint_l @ stub _ismbbpunct(long) @@ -769,8 +769,8 @@ @ stub _mblen_l @ cdecl _mbsbtype(str long) @ stub _mbsbtype_l -@ stub _mbscat_s -@ stub _mbscat_s_l +@ cdecl _mbscat_s(ptr long str) +@ cdecl _mbscat_s_l(ptr long str ptr) @ cdecl _mbschr(str long) @ stub _mbschr_l @ cdecl _mbscmp(str str) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcr90/msvcr90.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcr90/msvcr90.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcr90/msvcr90.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcr90/msvcr90.spec 2015-07-12 05:36:18.000000000 +0000 @@ -616,7 +616,7 @@ @ stub _ismbbkpunct(long) @ stub _ismbbkpunct_l @ cdecl _ismbblead(long) -@ stub _ismbblead_l +@ cdecl _ismbblead_l(long ptr) @ stub _ismbbprint(long) @ stub _ismbbprint_l @ stub _ismbbpunct(long) @@ -746,8 +746,8 @@ @ stub _mblen_l @ cdecl _mbsbtype(str long) @ stub _mbsbtype_l -@ stub _mbscat_s -@ stub _mbscat_s_l +@ cdecl _mbscat_s(ptr long str) +@ cdecl _mbscat_s_l(ptr long str ptr) @ cdecl _mbschr(str long) @ stub _mbschr_l @ cdecl _mbscmp(str str) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcrt/mbcs.c wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcrt/mbcs.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcrt/mbcs.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcrt/mbcs.c 2015-07-12 05:36:18.000000000 +0000 @@ -1053,6 +1053,56 @@ } /********************************************************************* + * _mbscat_s_l (MSVCRT.@) + */ +int CDECL _mbscat_s_l( unsigned char *dst, MSVCRT_size_t size, + const unsigned char *src, MSVCRT__locale_t locale ) +{ + MSVCRT_size_t i, j; + int ret = 0; + + if(!MSVCRT_CHECK_PMT(dst != NULL)) return MSVCRT_EINVAL; + if(!MSVCRT_CHECK_PMT(src != NULL)) return MSVCRT_EINVAL; + + for(i=0; imbcinfo; + + return (mbcinfo->mbctype[(c&0xff) + 1] & _M1) != 0; +} + /********************************************************************* * _ismbblead(MSVCRT.@) */ int CDECL _ismbblead(unsigned int c) { - return (get_mbcinfo()->mbctype[(c&0xff) + 1] & _M1) != 0; + return _ismbblead_l(c, NULL); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcrt/msvcrt.h wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcrt/msvcrt.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcrt/msvcrt.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcrt/msvcrt.h 2015-07-12 05:36:18.000000000 +0000 @@ -1009,6 +1009,7 @@ int __cdecl MSVCRT__write(int,const void*,unsigned int); int __cdecl _getch(void); int __cdecl _ismbblead(unsigned int); +int __cdecl _ismbblead_l(unsigned int, MSVCRT__locale_t); int __cdecl _ismbclegal(unsigned int c); int __cdecl _ismbstrail(const unsigned char* start, const unsigned char* str); int __cdecl MSVCRT_mbtowc(MSVCRT_wchar_t*,const char*,MSVCRT_size_t); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcrt/msvcrt.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcrt/msvcrt.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcrt/msvcrt.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcrt/msvcrt.spec 2015-07-12 05:36:18.000000000 +0000 @@ -585,7 +585,7 @@ @ stub _ismbbkpunct(long) # stub _ismbbkpunct_l(long ptr) @ cdecl _ismbblead(long) -# stub _ismbblead_l(long ptr) +@ cdecl _ismbblead_l(long ptr) @ stub _ismbbprint(long) # stub _ismbbprint_l(long ptr) @ stub _ismbbpunct(long) @@ -713,8 +713,8 @@ @ cdecl _mbsbtype(str long) # stub _mbsbtype_l(str long ptr) @ cdecl _mbscat(str str) -# stub _mbscat_s(str long str) -# stub _mbscat_s_l(str long str ptr) +@ cdecl _mbscat_s(ptr long str) +@ cdecl _mbscat_s_l(ptr long str ptr) @ cdecl _mbschr(str long) # stub _mbschr_l(str long ptr) @ cdecl _mbscmp(str str) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcrt/string.c wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcrt/string.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcrt/string.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcrt/string.c 2015-07-12 05:36:18.000000000 +0000 @@ -317,8 +317,11 @@ if(err) *err = 0; - else - if(!MSVCRT_CHECK_PMT(str != NULL)) return 0; + else if(!MSVCRT_CHECK_PMT(str != NULL)) { + if (end) + *end = NULL; + return 0; + } if(!locale) locinfo = get_locinfo(); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcrt/tests/string.c wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcrt/tests/string.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcrt/tests/string.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcrt/tests/string.c 2015-07-12 05:36:18.000000000 +0000 @@ -58,6 +58,7 @@ static int* (__cdecl *pmemcmp)(void *, const void *, size_t n); static int (__cdecl *pstrcpy_s)(char *dst, size_t len, const char *src); static int (__cdecl *pstrcat_s)(char *dst, size_t len, const char *src); +static int (__cdecl *p_mbscat_s)(unsigned char *dst, size_t size, const unsigned char *src); static int (__cdecl *p_mbsnbcat_s)(unsigned char *dst, size_t size, const unsigned char *src, size_t count); static int (__cdecl *p_mbsnbcpy_s)(unsigned char * dst, size_t size, const unsigned char * src, size_t count); static int (__cdecl *p__mbscpy_s)(unsigned char*, size_t, const unsigned char*); @@ -89,6 +90,8 @@ static size_t (__cdecl *p_mbrlen)(const char*, size_t, mbstate_t*); static size_t (__cdecl *p_mbrtowc)(wchar_t*, const char*, size_t, mbstate_t*); static int (__cdecl *p__atodbl_l)(_CRT_DOUBLE*,char*,_locale_t); +static double (__cdecl *p__atof_l)(const char*,_locale_t); +static double (__cdecl *p__strtod_l)(const char *,char**,_locale_t); static int (__cdecl *p__strnset_s)(char*,size_t,int,size_t); static int (__cdecl *p__wcsset_s)(wchar_t*,size_t,wchar_t); @@ -730,6 +733,86 @@ ok(ret == EINVAL, "strcat_s: Writing to a NULL string returned %d, expected EINVAL\n", ret); } +static void test__mbscat_s(void) +{ + unsigned char dst[8], src[4]; + int err; + int prev_cp = _getmbcp(); + + if(!p_mbscat_s) + { + win_skip("_mbscat_s not found\n"); + return; + } + + + src[0] = dst[0] = 0; + err = p_mbscat_s(NULL, sizeof(dst), src); + ok(err == EINVAL, "_mbscat_s returned %d\n", err); + + err = p_mbscat_s(dst, sizeof(dst), NULL); + ok(err == EINVAL, "_mbscat_s returned %d\n", err); + + dst[0] = 'a'; + err = p_mbscat_s(dst, 1, src); + ok(err == EINVAL, "_mbscat_s returned %d\n", err); + + memset(dst, 'a', sizeof(dst)); + dst[6] = 0; + src[0] = 'b'; + src[1] = 0; + + err = p_mbscat_s(dst, sizeof(dst), src); + ok(err == 0, "_mbscat_s returned %d\n", err); + ok(!memcmp(dst, "aaaaaab", 8), "dst = %s\n", dst); + + err = p_mbscat_s(dst, sizeof(dst), src); + ok(err == ERANGE, "_mbscat_s returned %d\n", err); + ok(!dst[0], "dst[0] = %c\n", dst[0]); + ok(dst[1] == 'a', "dst[1] = %c\n", dst[1]); + + _setmbcp(932); + /* test invalid str in dst */ + dst[0] = 0x81; + dst[1] = 0x81; + dst[2] = 0x52; + dst[3] = 0; + src[0] = 'a'; + src[1] = 0; + err = p_mbscat_s(dst, sizeof(dst), src); + ok(err == 0, "_mbscat_s returned %d\n", err); + + /* test invalid str in src */ + dst[0] = 0; + src[0] = 0x81; + src[1] = 0x81; + src[2] = 0x52; + src[3] = 0; + err = p_mbscat_s(dst, sizeof(dst), src); + ok(err == 0, "_mbscat_s returned %d\n", err); + + /* test dst with leading byte on the end of buffer */ + dst[0] = 'a'; + dst[1] = 0x81; + dst[2] = 0; + src[0] = 'R'; + src[1] = 0; + err = p_mbscat_s(dst, sizeof(dst), src); + ok(err == EILSEQ, "_mbscat_s returned %d\n", err); + ok(!memcmp(dst, "aR", 3), "dst = %s\n", dst); + + /* test src with leading byte on the end of buffer */ + dst[0] = 'a'; + dst[1] = 0; + src[0] = 'b'; + src[1] = 0x81; + src[2] = 0; + err = p_mbscat_s(dst, sizeof(dst), src); + ok(err == EILSEQ, "_mbscat_s returned %d\n", err); + ok(!memcmp(dst, "ab", 3), "dst = %s\n", dst); + _setmbcp(prev_cp); +} + static void test__mbsnbcpy_s(void) { unsigned char dest[8]; @@ -1678,6 +1761,28 @@ ok(almost_equal(d, 0), "d = %lf\n", d); ok(end == white_chars, "incorrect end (%d)\n", (int)(end-white_chars)); + if (!p__strtod_l) + win_skip("_strtod_l not found\n"); + else + { + errno = EBADF; + d = strtod(NULL, NULL); + ok(almost_equal(d, 0.0), "d = %lf\n", d); + ok(errno == EINVAL, "errno = %x\n", errno); + + errno = EBADF; + end = (char *)0xdeadbeef; + d = strtod(NULL, &end); + ok(almost_equal(d, 0.0), "d = %lf\n", d); + ok(errno == EINVAL, "errno = %x\n", errno); + ok(!end, "incorrect end ptr %p\n", end); + + errno = EBADF; + d = p__strtod_l(NULL, NULL, NULL); + ok(almost_equal(d, 0.0), "d = %lf\n", d); + ok(errno == EINVAL, "errno = %x\n", errno); + } + /* Set locale with non '.' decimal point (',') */ if(!setlocale(LC_ALL, "Polish")) { win_skip("system with limited locales\n"); @@ -2721,6 +2826,36 @@ ok(r == 0, "atoi(4294967296) = %d\n", r); } +static void test_atof(void) +{ + double d; + + d = atof("0.0"); + ok(almost_equal(d, 0.0), "d = %lf\n", d); + + d = atof("1.0"); + ok(almost_equal(d, 1.0), "d = %lf\n", d); + + d = atof("-1.0"); + ok(almost_equal(d, -1.0), "d = %lf\n", d); + + if (!p__atof_l) + { + win_skip("_atof_l not found\n"); + return; + } + + errno = EBADF; + d = atof(NULL); + ok(almost_equal(d, 0.0), "d = %lf\n", d); + ok(errno == EINVAL, "errno = %x\n", errno); + + errno = EBADF; + d = p__atof_l(NULL, NULL); + ok(almost_equal(d, 0.0), "d = %lf\n", d); + ok(errno == EINVAL, "errno = %x\n", errno); +} + static void test_strncpy(void) { #define TEST_STRNCPY_LEN 10 @@ -2930,6 +3065,7 @@ SET(p__mb_cur_max,"__mb_cur_max"); pstrcpy_s = (void *)GetProcAddress( hMsvcrt,"strcpy_s" ); pstrcat_s = (void *)GetProcAddress( hMsvcrt,"strcat_s" ); + p_mbscat_s = (void*)GetProcAddress( hMsvcrt, "_mbscat_s" ); p_mbsnbcat_s = (void *)GetProcAddress( hMsvcrt,"_mbsnbcat_s" ); p_mbsnbcpy_s = (void *)GetProcAddress( hMsvcrt,"_mbsnbcpy_s" ); p__mbscpy_s = (void *)GetProcAddress( hMsvcrt,"_mbscpy_s" ); @@ -2959,6 +3095,8 @@ p_mbrtowc = (void*)GetProcAddress(hMsvcrt, "mbrtowc"); p_mbsrtowcs = (void*)GetProcAddress(hMsvcrt, "mbsrtowcs"); p__atodbl_l = (void*)GetProcAddress(hMsvcrt, "_atodbl_l"); + p__atof_l = (void*)GetProcAddress(hMsvcrt, "_atof_l"); + p__strtod_l = (void*)GetProcAddress(hMsvcrt, "_strtod_l"); p__strnset_s = (void*)GetProcAddress(hMsvcrt, "_strnset_s"); p__wcsset_s = (void*)GetProcAddress(hMsvcrt, "_wcsset_s"); @@ -2981,6 +3119,7 @@ test_memcpy_s(); test_memmove_s(); test_strcat_s(); + test__mbscat_s(); test__mbsnbcpy_s(); test__mbscpy_s(); test_mbcjisjms(); @@ -3015,6 +3154,7 @@ test__stricmp(); test__wcstoi64(); test_atoi(); + test_atof(); test_strncpy(); test_strxfrm(); test__strnset_s(); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcrt20/msvcrt20.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcrt20/msvcrt20.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcrt20/msvcrt20.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcrt20/msvcrt20.spec 2015-07-12 05:36:18.000000000 +0000 @@ -30,12 +30,12 @@ @ stub -arch=win64 ??0ifstream@@QEAA@PEBDHH@Z @ stub -arch=win32 ??0ifstream@@QAE@XZ @ stub -arch=win64 ??0ifstream@@QEAA@XZ -@ stub -arch=win32 ??0ios@@IAE@ABV0@@Z -@ stub -arch=win64 ??0ios@@IEAA@AEBV0@@Z -@ stub -arch=win32 ??0ios@@IAE@XZ -@ stub -arch=win64 ??0ios@@IEAA@XZ -@ stub -arch=win32 ??0ios@@QAE@PAVstreambuf@@@Z -@ stub -arch=win64 ??0ios@@QEAA@PEAVstreambuf@@@Z +@ thiscall -arch=win32 ??0ios@@IAE@ABV0@@Z(ptr ptr) msvcirt.??0ios@@IAE@ABV0@@Z +@ cdecl -arch=win64 ??0ios@@IEAA@AEBV0@@Z(ptr ptr) msvcirt.??0ios@@IEAA@AEBV0@@Z +@ thiscall -arch=win32 ??0ios@@IAE@XZ(ptr) msvcirt.??0ios@@IAE@XZ +@ cdecl -arch=win64 ??0ios@@IEAA@XZ(ptr) msvcirt.??0ios@@IEAA@XZ +@ thiscall -arch=win32 ??0ios@@QAE@PAVstreambuf@@@Z(ptr ptr) msvcirt.??0ios@@QAE@PAVstreambuf@@@Z +@ cdecl -arch=win64 ??0ios@@QEAA@PEAVstreambuf@@@Z(ptr ptr) msvcirt.??0ios@@QEAA@PEAVstreambuf@@@Z @ stub -arch=win32 ??0iostream@@IAE@ABV0@@Z @ stub -arch=win64 ??0iostream@@IEAA@AEBV0@@Z @ stub -arch=win32 ??0iostream@@IAE@XZ @@ -86,8 +86,8 @@ @ stub -arch=win64 ??0ostrstream@@QEAA@AEBV0@@Z @ stub -arch=win32 ??0ostrstream@@QAE@PADHH@Z @ stub -arch=win64 ??0ostrstream@@QEAA@PEADHH@Z -@ thiscall -arch=win32 ??0ostrstream@@QAE@XZ(ptr) msvcirt.??0ostrstream@@QAE@XZ -@ cdecl -arch=win64 ??0ostrstream@@QEAA@XZ(ptr) msvcirt.??0ostrstream@@QEAA@XZ +@ thiscall -arch=win32 ??0ostrstream@@QAE@XZ(ptr long) msvcirt.??0ostrstream@@QAE@XZ +@ cdecl -arch=win64 ??0ostrstream@@QEAA@XZ(ptr long) msvcirt.??0ostrstream@@QEAA@XZ @ stub -arch=win32 ??0stdiobuf@@QAE@ABV0@@Z @ stub -arch=win64 ??0stdiobuf@@QEAA@AEBV0@@Z @ stub -arch=win32 ??0stdiobuf@@QAE@PAU_iobuf@@@Z @@ -166,8 +166,8 @@ @ stub -arch=win64 ??4fstream@@QEAAAEAV0@AEAV0@@Z @ stub -arch=win32 ??4ifstream@@QAEAAV0@ABV0@@Z @ stub -arch=win64 ??4ifstream@@QEAAAEAV0@AEBV0@@Z -@ stub -arch=win32 ??4ios@@IAEAAV0@ABV0@@Z -@ stub -arch=win64 ??4ios@@IEAAAEAV0@AEBV0@@Z +@ thiscall -arch=win32 ??4ios@@IAEAAV0@ABV0@@Z(ptr ptr) msvcirt.??4ios@@IAEAAV0@ABV0@@Z +@ cdecl -arch=win64 ??4ios@@IEAAAEAV0@AEBV0@@Z(ptr ptr) msvcirt.??4ios@@IEAAAEAV0@AEBV0@@Z @ stub -arch=win32 ??4iostream@@IAEAAV0@AAV0@@Z @ stub -arch=win64 ??4iostream@@IEAAAEAV0@AEAV0@@Z @ stub -arch=win32 ??4iostream@@IAEAAV0@PAVstreambuf@@@Z @@ -282,14 +282,14 @@ @ stub -arch=win64 ??6ostream@@QEAAAEAV0@PEBE@Z @ stub -arch=win32 ??6ostream@@QAEAAV0@PBX@Z @ stub -arch=win64 ??6ostream@@QEAAAEAV0@PEBX@Z -@ stub -arch=win32 ??7ios@@QBEHXZ -@ stub -arch=win64 ??7ios@@QEBAHXZ -@ stub -arch=win32 ??Bios@@QBEPAXXZ -@ stub -arch=win64 ??Bios@@QEBAPEAXXZ +@ thiscall -arch=win32 ??7ios@@QBEHXZ(ptr) msvcirt.??7ios@@QBEHXZ +@ cdecl -arch=win64 ??7ios@@QEBAHXZ(ptr) msvcirt.??7ios@@QEBAHXZ +@ thiscall -arch=win32 ??Bios@@QBEPAXXZ(ptr) msvcirt.??Bios@@QBEPAXXZ +@ cdecl -arch=win64 ??Bios@@QEBAPEAXXZ(ptr) msvcirt.??Bios@@QEBAPEAXXZ # @ extern ??_7filebuf@@6B@ # @ extern ??_7fstream@@6B@ # @ extern ??_7ifstream@@6B@ -# @ extern ??_7ios@@6B@ +@ extern ??_7ios@@6B@ msvcirt.??_7ios@@6B@ # @ extern ??_7iostream@@6B@ # @ extern ??_7istream@@6B@ # @ extern ??_7istream_withassign@@6B@ @@ -347,7 +347,7 @@ @ stub -arch=win32 ??_Efilebuf@@UAEPAXI@Z @ stub -arch=win32 ??_Efstream@@UAEPAXI@Z @ stub -arch=win32 ??_Eifstream@@UAEPAXI@Z -@ stub -arch=win32 ??_Eios@@UAEPAXI@Z +@ thiscall -arch=win32 ??_Eios@@UAEPAXI@Z(ptr long) msvcirt.??_Eios@@UAEPAXI@Z @ stub -arch=win32 ??_Eiostream@@UAEPAXI@Z @ stub -arch=win32 ??_Eistream@@UAEPAXI@Z @ stub -arch=win32 ??_Eistream_withassign@@UAEPAXI@Z @@ -365,7 +365,7 @@ @ stub -arch=win32 ??_Gfilebuf@@UAEPAXI@Z @ stub -arch=win32 ??_Gfstream@@UAEPAXI@Z @ stub -arch=win32 ??_Gifstream@@UAEPAXI@Z -@ stub -arch=win32 ??_Gios@@UAEPAXI@Z +@ thiscall -arch=win32 ??_Gios@@UAEPAXI@Z(ptr long) msvcirt.??_Gios@@UAEPAXI@Z @ stub -arch=win32 ??_Giostream@@UAEPAXI@Z @ stub -arch=win32 ??_Gistream@@UAEPAXI@Z @ stub -arch=win32 ??_Gistream_withassign@@UAEPAXI@Z @@ -398,19 +398,19 @@ @ stub -arch=win64 ?attach@ifstream@@QEAAXH@Z @ stub -arch=win32 ?attach@ofstream@@QAEXH@Z @ stub -arch=win64 ?attach@ofstream@@QEAAXH@Z -@ stub -arch=win32 ?bad@ios@@QBEHXZ -@ stub -arch=win64 ?bad@ios@@QEBAHXZ +@ thiscall -arch=win32 ?bad@ios@@QBEHXZ(ptr) msvcirt.?bad@ios@@QBEHXZ +@ cdecl -arch=win64 ?bad@ios@@QEBAHXZ(ptr) msvcirt.?bad@ios@@QEBAHXZ @ thiscall -arch=win32 ?base@streambuf@@IBEPADXZ(ptr) msvcirt.?base@streambuf@@IBEPADXZ @ cdecl -arch=win64 ?base@streambuf@@IEBAPEADXZ(ptr) msvcirt.?base@streambuf@@IEBAPEADXZ # @ extern ?basefield@ios@@2JB # @ extern ?binary@filebuf@@2HB -@ stub ?bitalloc@ios@@SAJXZ +@ cdecl ?bitalloc@ios@@SAJXZ() msvcirt.?bitalloc@ios@@SAJXZ @ thiscall -arch=win32 ?blen@streambuf@@IBEHXZ(ptr) msvcirt.?blen@streambuf@@IBEHXZ @ cdecl -arch=win64 ?blen@streambuf@@IEBAHXZ(ptr) msvcirt.?blen@streambuf@@IEBAHXZ @ stub ?cerr@@3Vostream_withassign@@A @ stub ?cin@@3Vistream_withassign@@A -@ stub -arch=win32 ?clear@ios@@QAEXH@Z -@ stub -arch=win64 ?clear@ios@@QEAAXH@Z +@ thiscall -arch=win32 ?clear@ios@@QAEXH@Z(ptr long) msvcirt.?clear@ios@@QAEXH@Z +@ cdecl -arch=win64 ?clear@ios@@QEAAXH@Z(ptr long) msvcirt.?clear@ios@@QEAAXH@Z @ stub ?clog@@3Vostream_withassign@@A @ stub -arch=win32 ?close@filebuf@@QAEPAV1@XZ @ stub -arch=win64 ?close@filebuf@@QEAAPEAV1@XZ @@ -420,19 +420,19 @@ @ stub -arch=win64 ?close@ifstream@@QEAAXXZ @ stub -arch=win32 ?close@ofstream@@QAEXXZ @ stub -arch=win64 ?close@ofstream@@QEAAXXZ -@ stub -arch=win32 ?clrlock@ios@@QAAXXZ -@ stub -arch=win64 ?clrlock@ios@@QEAAXXZ +@ cdecl -arch=win32 ?clrlock@ios@@QAAXXZ(ptr) msvcirt.?clrlock@ios@@QAAXXZ +@ cdecl -arch=win64 ?clrlock@ios@@QEAAXXZ(ptr) msvcirt.?clrlock@ios@@QEAAXXZ @ thiscall -arch=win32 ?clrlock@streambuf@@QAEXXZ(ptr) msvcirt.?clrlock@streambuf@@QAEXXZ @ cdecl -arch=win64 ?clrlock@streambuf@@QEAAXXZ(ptr) msvcirt.?clrlock@streambuf@@QEAAXXZ @ stub ?cout@@3Vostream_withassign@@A -@ stub -arch=win32 ?dbp@streambuf@@QAEXXZ -@ stub -arch=win64 ?dbp@streambuf@@QEAAXXZ -@ stub -arch=win32 ?dec@@YAAAVios@@AAV1@@Z -@ stub -arch=win64 ?dec@@YAAEAVios@@AEAV1@@Z -@ stub -arch=win32 ?delbuf@ios@@QAEXH@Z -@ stub -arch=win64 ?delbuf@ios@@QEAAXH@Z -@ stub -arch=win32 ?delbuf@ios@@QBEHXZ -@ stub -arch=win64 ?delbuf@ios@@QEBAHXZ +@ thiscall -arch=win32 ?dbp@streambuf@@QAEXXZ(ptr) msvcirt.?dbp@streambuf@@QAEXXZ +@ cdecl -arch=win64 ?dbp@streambuf@@QEAAXXZ(ptr) msvcirt.?dbp@streambuf@@QEAAXXZ +@ cdecl -arch=win32 ?dec@@YAAAVios@@AAV1@@Z(ptr) msvcirt.?dec@@YAAAVios@@AAV1@@Z +@ cdecl -arch=win64 ?dec@@YAAEAVios@@AEAV1@@Z(ptr) msvcirt.?dec@@YAAEAVios@@AEAV1@@Z +@ thiscall -arch=win32 ?delbuf@ios@@QAEXH@Z(ptr long) msvcirt.?delbuf@ios@@QAEXH@Z +@ cdecl -arch=win64 ?delbuf@ios@@QEAAXH@Z(ptr long) msvcirt.?delbuf@ios@@QEAAXH@Z +@ thiscall -arch=win32 ?delbuf@ios@@QBEHXZ(ptr) msvcirt.?delbuf@ios@@QBEHXZ +@ cdecl -arch=win64 ?delbuf@ios@@QEBAHXZ(ptr) msvcirt.?delbuf@ios@@QEBAHXZ @ thiscall -arch=win32 ?doallocate@streambuf@@MAEHXZ(ptr) msvcirt.?doallocate@streambuf@@MAEHXZ @ cdecl -arch=win64 ?doallocate@streambuf@@MEAAHXZ(ptr) msvcirt.?doallocate@streambuf@@MEAAHXZ @ stub -arch=win32 ?doallocate@strstreambuf@@MAEHXZ @@ -449,13 +449,13 @@ @ cdecl -arch=win64 ?endl@@YAAEAVostream@@AEAV1@@Z(ptr) msvcirt.?endl@@YAAEAVostream@@AEAV1@@Z @ cdecl -arch=win32 ?ends@@YAAAVostream@@AAV1@@Z(ptr) msvcirt.?ends@@YAAAVostream@@AAV1@@Z @ cdecl -arch=win64 ?ends@@YAAEAVostream@@AEAV1@@Z(ptr) msvcirt.?ends@@YAAEAVostream@@AEAV1@@Z -@ stub -arch=win32 ?eof@ios@@QBEHXZ -@ stub -arch=win64 ?eof@ios@@QEBAHXZ +@ thiscall -arch=win32 ?eof@ios@@QBEHXZ(ptr) msvcirt.?eof@ios@@QBEHXZ +@ cdecl -arch=win64 ?eof@ios@@QEBAHXZ(ptr) msvcirt.?eof@ios@@QEBAHXZ @ thiscall -arch=win32 ?epptr@streambuf@@IBEPADXZ(ptr) msvcirt.?epptr@streambuf@@IBEPADXZ @ cdecl -arch=win64 ?epptr@streambuf@@IEBAPEADXZ(ptr) msvcirt.?epptr@streambuf@@IEBAPEADXZ # @ extern ?fLockcInit@ios@@0HA -@ stub -arch=win32 ?fail@ios@@QBEHXZ -@ stub -arch=win64 ?fail@ios@@QEBAHXZ +@ thiscall -arch=win32 ?fail@ios@@QBEHXZ(ptr) msvcirt.?fail@ios@@QBEHXZ +@ cdecl -arch=win64 ?fail@ios@@QEBAHXZ(ptr) msvcirt.?fail@ios@@QEBAHXZ @ stub -arch=win32 ?fd@filebuf@@QBEHXZ @ stub -arch=win64 ?fd@filebuf@@QEBAHXZ @ stub -arch=win32 ?fd@fstream@@QBEHXZ @@ -464,14 +464,14 @@ @ stub -arch=win64 ?fd@ifstream@@QEBAHXZ @ stub -arch=win32 ?fd@ofstream@@QBEHXZ @ stub -arch=win64 ?fd@ofstream@@QEBAHXZ -@ stub -arch=win32 ?fill@ios@@QAEDD@Z -@ stub -arch=win64 ?fill@ios@@QEAADD@Z -@ stub -arch=win32 ?fill@ios@@QBEDXZ -@ stub -arch=win64 ?fill@ios@@QEBADXZ -@ stub -arch=win32 ?flags@ios@@QAEJJ@Z -@ stub -arch=win64 ?flags@ios@@QEAAJJ@Z -@ stub -arch=win32 ?flags@ios@@QBEJXZ -@ stub -arch=win64 ?flags@ios@@QEBAJXZ +@ thiscall -arch=win32 ?fill@ios@@QAEDD@Z(ptr long) msvcirt.?fill@ios@@QAEDD@Z +@ cdecl -arch=win64 ?fill@ios@@QEAADD@Z(ptr long) msvcirt.?fill@ios@@QEAADD@Z +@ thiscall -arch=win32 ?fill@ios@@QBEDXZ(ptr) msvcirt.?fill@ios@@QBEDXZ +@ cdecl -arch=win64 ?fill@ios@@QEBADXZ(ptr) msvcirt.?fill@ios@@QEBADXZ +@ thiscall -arch=win32 ?flags@ios@@QAEJJ@Z(ptr long) msvcirt.?flags@ios@@QAEJJ@Z +@ cdecl -arch=win64 ?flags@ios@@QEAAJJ@Z(ptr long) msvcirt.?flags@ios@@QEAAJJ@Z +@ thiscall -arch=win32 ?flags@ios@@QBEJXZ(ptr) msvcirt.?flags@ios@@QBEJXZ +@ cdecl -arch=win64 ?flags@ios@@QEBAJXZ(ptr) msvcirt.?flags@ios@@QEBAJXZ # @ extern ?floatfield@ios@@2JB @ stub -arch=win32 ?flush@@YAAAVostream@@AAV1@@Z @ stub -arch=win64 ?flush@@YAAEAVostream@@AEAV1@@Z @@ -509,18 +509,18 @@ @ stub -arch=win64 ?getline@istream@@QEAAAEAV1@PEADHD@Z @ stub -arch=win32 ?getline@istream@@QAEAAV1@PAEHD@Z @ stub -arch=win64 ?getline@istream@@QEAAAEAV1@PEAEHD@Z -@ stub -arch=win32 ?good@ios@@QBEHXZ -@ stub -arch=win64 ?good@ios@@QEBAHXZ +@ thiscall -arch=win32 ?good@ios@@QBEHXZ(ptr) msvcirt.?good@ios@@QBEHXZ +@ cdecl -arch=win64 ?good@ios@@QEBAHXZ(ptr) msvcirt.?good@ios@@QEBAHXZ @ thiscall -arch=win32 ?gptr@streambuf@@IBEPADXZ(ptr) msvcirt.?gptr@streambuf@@IBEPADXZ @ cdecl -arch=win64 ?gptr@streambuf@@IEBAPEADXZ(ptr) msvcirt.?gptr@streambuf@@IEBAPEADXZ -@ stub -arch=win32 ?hex@@YAAAVios@@AAV1@@Z -@ stub -arch=win64 ?hex@@YAAEAVios@@AEAV1@@Z +@ cdecl -arch=win32 ?hex@@YAAAVios@@AAV1@@Z(ptr) msvcirt.?hex@@YAAAVios@@AAV1@@Z +@ cdecl -arch=win64 ?hex@@YAAEAVios@@AEAV1@@Z(ptr) msvcirt.?hex@@YAAEAVios@@AEAV1@@Z @ stub -arch=win32 ?ignore@istream@@QAEAAV1@HH@Z @ stub -arch=win64 ?ignore@istream@@QEAAAEAV1@HH@Z @ thiscall -arch=win32 ?in_avail@streambuf@@QBEHXZ(ptr) msvcirt.?in_avail@streambuf@@QBEHXZ @ cdecl -arch=win64 ?in_avail@streambuf@@QEBAHXZ(ptr) msvcirt.?in_avail@streambuf@@QEBAHXZ -@ stub -arch=win32 ?init@ios@@IAEXPAVstreambuf@@@Z -@ stub -arch=win64 ?init@ios@@IEAAXPEAVstreambuf@@@Z +@ thiscall -arch=win32 ?init@ios@@IAEXPAVstreambuf@@@Z(ptr ptr) msvcirt.?init@ios@@IAEXPAVstreambuf@@@Z +@ cdecl -arch=win64 ?init@ios@@IEAAXPEAVstreambuf@@@Z(ptr ptr) msvcirt.?init@ios@@IEAAXPEAVstreambuf@@@Z @ stub -arch=win32 ?ipfx@istream@@QAEHH@Z @ stub -arch=win64 ?ipfx@istream@@QEAAHH@Z @ stub -arch=win32 ?is_open@filebuf@@QBEHXZ @@ -533,21 +533,21 @@ @ stub -arch=win64 ?is_open@ofstream@@QEBAHXZ @ stub -arch=win32 ?isfx@istream@@QAEXXZ @ stub -arch=win64 ?isfx@istream@@QEAAXXZ -@ stub -arch=win32 ?iword@ios@@QBEAAJH@Z -@ stub -arch=win64 ?iword@ios@@QEBAAEAJH@Z -@ stub -arch=win32 ?lock@ios@@QAAXXZ -@ stub -arch=win64 ?lock@ios@@QEAAXXZ +@ thiscall -arch=win32 ?iword@ios@@QBEAAJH@Z(ptr long) msvcirt.?iword@ios@@QBEAAJH@Z +@ cdecl -arch=win64 ?iword@ios@@QEBAAEAJH@Z(ptr long) msvcirt.?iword@ios@@QEBAAEAJH@Z +@ cdecl -arch=win32 ?lock@ios@@QAAXXZ(ptr) msvcirt.?lock@ios@@QAAXXZ +@ cdecl -arch=win64 ?lock@ios@@QEAAXXZ(ptr) msvcirt.?lock@ios@@QEAAXXZ @ thiscall -arch=win32 ?lock@streambuf@@QAEXXZ(ptr) msvcirt.?lock@streambuf@@QAEXXZ @ cdecl -arch=win64 ?lock@streambuf@@QEAAXXZ(ptr) msvcirt.?lock@streambuf@@QEAAXXZ -@ stub -arch=win32 ?lockbuf@ios@@QAAXXZ -@ stub -arch=win64 ?lockbuf@ios@@QEAAXXZ -@ stub ?lockc@ios@@KAXXZ -@ stub -arch=win32 ?lockptr@ios@@IAEPAU_CRT_CRITICAL_SECTION@@XZ -@ stub -arch=win64 ?lockptr@ios@@IEAAPEAU_CRT_CRITICAL_SECTION@@XZ +@ cdecl -arch=win32 ?lockbuf@ios@@QAAXXZ(ptr) msvcirt.?lockbuf@ios@@QAAXXZ +@ cdecl -arch=win64 ?lockbuf@ios@@QEAAXXZ(ptr) msvcirt.?lockbuf@ios@@QEAAXXZ +@ cdecl ?lockc@ios@@KAXXZ() msvcirt.?lockc@ios@@KAXXZ +@ thiscall -arch=win32 ?lockptr@ios@@IAEPAU_CRT_CRITICAL_SECTION@@XZ(ptr) msvcirt.?lockptr@ios@@IAEPAU_CRT_CRITICAL_SECTION@@XZ +@ cdecl -arch=win64 ?lockptr@ios@@IEAAPEAU_CRT_CRITICAL_SECTION@@XZ(ptr) msvcirt.?lockptr@ios@@IEAAPEAU_CRT_CRITICAL_SECTION@@XZ @ thiscall -arch=win32 ?lockptr@streambuf@@IAEPAU_CRT_CRITICAL_SECTION@@XZ(ptr) msvcirt.?lockptr@streambuf@@IAEPAU_CRT_CRITICAL_SECTION@@XZ @ cdecl -arch=win64 ?lockptr@streambuf@@IEAAPEAU_CRT_CRITICAL_SECTION@@XZ(ptr) msvcirt.?lockptr@streambuf@@IEAAPEAU_CRT_CRITICAL_SECTION@@XZ -@ stub -arch=win32 ?oct@@YAAAVios@@AAV1@@Z -@ stub -arch=win64 ?oct@@YAAEAVios@@AEAV1@@Z +@ cdecl -arch=win32 ?oct@@YAAAVios@@AAV1@@Z(ptr) msvcirt.?oct@@YAAAVios@@AAV1@@Z +@ cdecl -arch=win64 ?oct@@YAAEAVios@@AEAV1@@Z(ptr) msvcirt.?oct@@YAAEAVios@@AEAV1@@Z @ stub -arch=win32 ?open@filebuf@@QAEPAV1@PBDHH@Z @ stub -arch=win64 ?open@filebuf@@QEAAPEAV1@PEBDHH@Z @ stub -arch=win32 ?open@fstream@@QAEXPBDHH@Z @@ -585,10 +585,10 @@ @ stub -arch=win64 ?peek@istream@@QEAAHXZ @ thiscall -arch=win32 ?pptr@streambuf@@IBEPADXZ(ptr) msvcirt.?pptr@streambuf@@IBEPADXZ @ cdecl -arch=win64 ?pptr@streambuf@@IEBAPEADXZ(ptr) msvcirt.?pptr@streambuf@@IEBAPEADXZ -@ stub -arch=win32 ?precision@ios@@QAEHH@Z -@ stub -arch=win64 ?precision@ios@@QEAAHH@Z -@ stub -arch=win32 ?precision@ios@@QBEHXZ -@ stub -arch=win64 ?precision@ios@@QEBAHXZ +@ thiscall -arch=win32 ?precision@ios@@QAEHH@Z(ptr long) msvcirt.?precision@ios@@QAEHH@Z +@ cdecl -arch=win64 ?precision@ios@@QEAAHH@Z(ptr long) msvcirt.?precision@ios@@QEAAHH@Z +@ thiscall -arch=win32 ?precision@ios@@QBEHXZ(ptr) msvcirt.?precision@ios@@QBEHXZ +@ cdecl -arch=win64 ?precision@ios@@QEBAHXZ(ptr) msvcirt.?precision@ios@@QEBAHXZ @ stub -arch=win32 ?put@ostream@@QAEAAV1@C@Z @ stub -arch=win64 ?put@ostream@@QEAAAEAV1@C@Z @ stub -arch=win32 ?put@ostream@@QAEAAV1@D@Z @@ -597,14 +597,14 @@ @ stub -arch=win64 ?put@ostream@@QEAAAEAV1@E@Z @ stub -arch=win32 ?putback@istream@@QAEAAV1@D@Z @ stub -arch=win64 ?putback@istream@@QEAAAEAV1@D@Z -@ stub -arch=win32 ?pword@ios@@QBEAAPAXH@Z -@ stub -arch=win64 ?pword@ios@@QEBAAEAPEAXH@Z +@ thiscall -arch=win32 ?pword@ios@@QBEAAPAXH@Z(ptr long) msvcirt.?pword@ios@@QBEAAPAXH@Z +@ cdecl -arch=win64 ?pword@ios@@QEBAAEAPEAXH@Z(ptr long) msvcirt.?pword@ios@@QEBAAEAPEAXH@Z @ stub -arch=win32 ?rdbuf@fstream@@QBEPAVfilebuf@@XZ @ stub -arch=win64 ?rdbuf@fstream@@QEBAPEAVfilebuf@@XZ @ stub -arch=win32 ?rdbuf@ifstream@@QBEPAVfilebuf@@XZ @ stub -arch=win64 ?rdbuf@ifstream@@QEBAPEAVfilebuf@@XZ -@ stub -arch=win32 ?rdbuf@ios@@QBEPAVstreambuf@@XZ -@ stub -arch=win64 ?rdbuf@ios@@QEBAPEAVstreambuf@@XZ +@ thiscall -arch=win32 ?rdbuf@ios@@QBEPAVstreambuf@@XZ(ptr) msvcirt.?rdbuf@ios@@QBEPAVstreambuf@@XZ +@ cdecl -arch=win64 ?rdbuf@ios@@QEBAPEAVstreambuf@@XZ(ptr) msvcirt.?rdbuf@ios@@QEBAPEAVstreambuf@@XZ @ stub -arch=win32 ?rdbuf@istrstream@@QBEPAVstrstreambuf@@XZ @ stub -arch=win64 ?rdbuf@istrstream@@QEBAPEAVstrstreambuf@@XZ @ stub -arch=win32 ?rdbuf@ofstream@@QBEPAVfilebuf@@XZ @@ -615,8 +615,8 @@ @ stub -arch=win64 ?rdbuf@stdiostream@@QEBAPEAVstdiobuf@@XZ @ stub -arch=win32 ?rdbuf@strstream@@QBEPAVstrstreambuf@@XZ @ stub -arch=win64 ?rdbuf@strstream@@QEBAPEAVstrstreambuf@@XZ -@ stub -arch=win32 ?rdstate@ios@@QBEHXZ -@ stub -arch=win64 ?rdstate@ios@@QEBAHXZ +@ thiscall -arch=win32 ?rdstate@ios@@QBEHXZ(ptr) msvcirt.?rdstate@ios@@QBEHXZ +@ cdecl -arch=win64 ?rdstate@ios@@QEBAHXZ(ptr) msvcirt.?rdstate@ios@@QEBAHXZ @ stub -arch=win32 ?read@istream@@QAEAAV1@PACH@Z @ stub -arch=win64 ?read@istream@@QEAAAEAV1@PEACH@Z @ stub -arch=win32 ?read@istream@@QAEAAV1@PADH@Z @@ -659,14 +659,14 @@ @ cdecl -arch=win64 ?setbuf@streambuf@@UEAAPEAV1@PEADH@Z(ptr ptr long) msvcirt.?setbuf@streambuf@@UEAAPEAV1@PEADH@Z @ stub -arch=win32 ?setbuf@strstreambuf@@UAEPAVstreambuf@@PADH@Z @ stub -arch=win64 ?setbuf@strstreambuf@@UEAAPEAVstreambuf@@PEADH@Z -@ stub -arch=win32 ?setf@ios@@QAEJJ@Z -@ stub -arch=win64 ?setf@ios@@QEAAJJ@Z -@ stub -arch=win32 ?setf@ios@@QAEJJJ@Z -@ stub -arch=win64 ?setf@ios@@QEAAJJJ@Z +@ thiscall -arch=win32 ?setf@ios@@QAEJJ@Z(ptr long) msvcirt.?setf@ios@@QAEJJ@Z +@ cdecl -arch=win64 ?setf@ios@@QEAAJJ@Z(ptr long) msvcirt.?setf@ios@@QEAAJJ@Z +@ thiscall -arch=win32 ?setf@ios@@QAEJJJ@Z(ptr long long) msvcirt.?setf@ios@@QAEJJJ@Z +@ cdecl -arch=win64 ?setf@ios@@QEAAJJJ@Z(ptr long long) msvcirt.?setf@ios@@QEAAJJJ@Z @ thiscall -arch=win32 ?setg@streambuf@@IAEXPAD00@Z(ptr ptr ptr ptr) msvcirt.?setg@streambuf@@IAEXPAD00@Z @ cdecl -arch=win64 ?setg@streambuf@@IEAAXPEAD00@Z(ptr ptr ptr ptr) msvcirt.?setg@streambuf@@IEAAXPEAD00@Z -@ stub -arch=win32 ?setlock@ios@@QAAXXZ -@ stub -arch=win64 ?setlock@ios@@QEAAXXZ +@ cdecl -arch=win32 ?setlock@ios@@QAAXXZ(ptr) msvcirt.?setlock@ios@@QAAXXZ +@ cdecl -arch=win64 ?setlock@ios@@QEAAXXZ(ptr) msvcirt.?setlock@ios@@QEAAXXZ @ thiscall -arch=win32 ?setlock@streambuf@@QAEXXZ(ptr) msvcirt.?setlock@streambuf@@QAEXXZ @ cdecl -arch=win64 ?setlock@streambuf@@QEAAXXZ(ptr) msvcirt.?setlock@streambuf@@QEAAXXZ @ stub -arch=win32 ?setmode@filebuf@@QAEHH@Z @@ -690,8 +690,8 @@ # @ extern ?sh_write@filebuf@@2HB @ thiscall -arch=win32 ?snextc@streambuf@@QAEHXZ(ptr) msvcirt.?snextc@streambuf@@QAEHXZ @ cdecl -arch=win64 ?snextc@streambuf@@QEAAHXZ(ptr) msvcirt.?snextc@streambuf@@QEAAHXZ -@ stub -arch=win32 ?sputbackc@streambuf@@QAEHD@Z -@ stub -arch=win64 ?sputbackc@streambuf@@QEAAHD@Z +@ thiscall -arch=win32 ?sputbackc@streambuf@@QAEHD@Z(ptr long) msvcirt.?sputbackc@streambuf@@QAEHD@Z +@ cdecl -arch=win64 ?sputbackc@streambuf@@QEAAHD@Z(ptr long) msvcirt.?sputbackc@streambuf@@QEAAHD@Z @ thiscall -arch=win32 ?sputc@streambuf@@QAEHH@Z(ptr long) msvcirt.?sputc@streambuf@@QAEHH@Z @ cdecl -arch=win64 ?sputc@streambuf@@QEAAHH@Z(ptr long) msvcirt.?sputc@streambuf@@QEAAHH@Z @ thiscall -arch=win32 ?sputn@streambuf@@QAEHPBDH@Z(ptr str long) msvcirt.?sputn@streambuf@@QAEHPBDH@Z @@ -719,17 +719,17 @@ @ cdecl -arch=win64 ?sync@streambuf@@UEAAHXZ(ptr) msvcirt.?sync@streambuf@@UEAAHXZ @ stub -arch=win32 ?sync@strstreambuf@@UAEHXZ @ stub -arch=win64 ?sync@strstreambuf@@UEAAHXZ -@ stub ?sync_with_stdio@ios@@SAXXZ +@ cdecl ?sync_with_stdio@ios@@SAXXZ() msvcirt.?sync_with_stdio@ios@@SAXXZ @ stub -arch=win32 ?tellg@istream@@QAEJXZ @ stub -arch=win64 ?tellg@istream@@QEAAJXZ @ stub -arch=win32 ?tellp@ostream@@QAEJXZ @ stub -arch=win64 ?tellp@ostream@@QEAAJXZ @ cdecl ?terminate@@YAXXZ() msvcrt.?terminate@@YAXXZ # @ extern ?text@filebuf@@2HB -@ stub -arch=win32 ?tie@ios@@QAEPAVostream@@PAV2@@Z -@ stub -arch=win64 ?tie@ios@@QEAAPEAVostream@@PEAV2@@Z -@ stub -arch=win32 ?tie@ios@@QBEPAVostream@@XZ -@ stub -arch=win64 ?tie@ios@@QEBAPEAVostream@@XZ +@ thiscall -arch=win32 ?tie@ios@@QAEPAVostream@@PAV2@@Z(ptr ptr) msvcirt.?tie@ios@@QAEPAVostream@@PAV2@@Z +@ cdecl -arch=win64 ?tie@ios@@QEAAPEAVostream@@PEAV2@@Z(ptr ptr) msvcirt.?tie@ios@@QEAAPEAVostream@@PEAV2@@Z +@ thiscall -arch=win32 ?tie@ios@@QBEPAVostream@@XZ(ptr) msvcirt.?tie@ios@@QBEPAVostream@@XZ +@ cdecl -arch=win64 ?tie@ios@@QEBAPEAVostream@@XZ(ptr) msvcirt.?tie@ios@@QEBAPEAVostream@@XZ @ thiscall -arch=win32 ?unbuffered@streambuf@@IAEXH@Z(ptr long) msvcirt.?unbuffered@streambuf@@IAEXH@Z @ cdecl -arch=win64 ?unbuffered@streambuf@@IEAAXH@Z(ptr long) msvcirt.?unbuffered@streambuf@@IEAAXH@Z @ thiscall -arch=win32 ?unbuffered@streambuf@@IBEHXZ(ptr) msvcirt.?unbuffered@streambuf@@IBEHXZ @@ -741,19 +741,19 @@ @ stub -arch=win32 ?underflow@strstreambuf@@UAEHXZ @ stub -arch=win64 ?underflow@strstreambuf@@UEAAHXZ @ cdecl ?unexpected@@YAXXZ() msvcrt.?unexpected@@YAXXZ -@ stub -arch=win32 ?unlock@ios@@QAAXXZ -@ stub -arch=win64 ?unlock@ios@@QEAAXXZ +@ cdecl -arch=win32 ?unlock@ios@@QAAXXZ(ptr) msvcirt.?unlock@ios@@QAAXXZ +@ cdecl -arch=win64 ?unlock@ios@@QEAAXXZ(ptr) msvcirt.?unlock@ios@@QEAAXXZ @ thiscall -arch=win32 ?unlock@streambuf@@QAEXXZ(ptr) msvcirt.?unlock@streambuf@@QAEXXZ @ cdecl -arch=win64 ?unlock@streambuf@@QEAAXXZ(ptr) msvcirt.?unlock@streambuf@@QEAAXXZ -@ stub -arch=win32 ?unlockbuf@ios@@QAAXXZ -@ stub -arch=win64 ?unlockbuf@ios@@QEAAXXZ -@ stub ?unlockc@ios@@KAXXZ -@ stub -arch=win32 ?unsetf@ios@@QAEJJ@Z -@ stub -arch=win64 ?unsetf@ios@@QEAAJJ@Z -@ stub -arch=win32 ?width@ios@@QAEHH@Z -@ stub -arch=win64 ?width@ios@@QEAAHH@Z -@ stub -arch=win32 ?width@ios@@QBEHXZ -@ stub -arch=win64 ?width@ios@@QEBAHXZ +@ cdecl -arch=win32 ?unlockbuf@ios@@QAAXXZ(ptr) msvcirt.?unlockbuf@ios@@QAAXXZ +@ cdecl -arch=win64 ?unlockbuf@ios@@QEAAXXZ(ptr) msvcirt.?unlockbuf@ios@@QEAAXXZ +@ cdecl ?unlockc@ios@@KAXXZ() msvcirt.?unlockc@ios@@KAXXZ +@ thiscall -arch=win32 ?unsetf@ios@@QAEJJ@Z(ptr long) msvcirt.?unsetf@ios@@QAEJJ@Z +@ cdecl -arch=win64 ?unsetf@ios@@QEAAJJ@Z(ptr long) msvcirt.?unsetf@ios@@QEAAJJ@Z +@ thiscall -arch=win32 ?width@ios@@QAEHH@Z(ptr long) msvcirt.?width@ios@@QAEHH@Z +@ cdecl -arch=win64 ?width@ios@@QEAAHH@Z(ptr long) msvcirt.?width@ios@@QEAAHH@Z +@ thiscall -arch=win32 ?width@ios@@QBEHXZ(ptr) msvcirt.?width@ios@@QBEHXZ +@ cdecl -arch=win64 ?width@ios@@QEBAHXZ(ptr) msvcirt.?width@ios@@QEBAHXZ @ stub -arch=win32 ?write@ostream@@QAEAAV1@PBCH@Z @ stub -arch=win64 ?write@ostream@@QEAAAEAV1@PEBCH@Z @ stub -arch=win32 ?write@ostream@@QAEAAV1@PBDH@Z @@ -768,7 +768,7 @@ # @ extern ?x_lockc@ios@@0U_RTL_CRITICAL_SECTION@@A # @ extern ?x_maxbit@ios@@0JA # @ extern ?x_statebuf@ios@@0QAJA -@ stub ?xalloc@ios@@SAHXZ +@ cdecl ?xalloc@ios@@SAHXZ() msvcirt.?xalloc@ios@@SAHXZ @ thiscall -arch=win32 ?xsgetn@streambuf@@UAEHPADH@Z(ptr ptr long) msvcirt.?xsgetn@streambuf@@UAEHPADH@Z @ cdecl -arch=win64 ?xsgetn@streambuf@@UEAAHPEADH@Z(ptr ptr long) msvcirt.?xsgetn@streambuf@@UEAAHPEADH@Z @ thiscall -arch=win32 ?xsputn@streambuf@@UAEHPBDH@Z(ptr ptr long) msvcirt.?xsputn@streambuf@@UAEHPBDH@Z diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcrt40/msvcrt40.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcrt40/msvcrt40.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/msvcrt40/msvcrt40.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/msvcrt40/msvcrt40.spec 2015-07-12 05:36:18.000000000 +0000 @@ -48,12 +48,12 @@ @ stub -arch=win64 ??0ifstream@@QEAA@PEBDHH@Z @ stub -arch=win32 ??0ifstream@@QAE@XZ @ stub -arch=win64 ??0ifstream@@QEAA@XZ -@ stub -arch=win32 ??0ios@@IAE@ABV0@@Z -@ stub -arch=win64 ??0ios@@IEAA@AEBV0@@Z -@ stub -arch=win32 ??0ios@@IAE@XZ -@ stub -arch=win64 ??0ios@@IEAA@XZ -@ stub -arch=win32 ??0ios@@QAE@PAVstreambuf@@@Z -@ stub -arch=win64 ??0ios@@QEAA@PEAVstreambuf@@@Z +@ thiscall -arch=win32 ??0ios@@IAE@ABV0@@Z(ptr ptr) msvcirt.??0ios@@IAE@ABV0@@Z +@ cdecl -arch=win64 ??0ios@@IEAA@AEBV0@@Z(ptr ptr) msvcirt.??0ios@@IEAA@AEBV0@@Z +@ thiscall -arch=win32 ??0ios@@IAE@XZ(ptr) msvcirt.??0ios@@IAE@XZ +@ cdecl -arch=win64 ??0ios@@IEAA@XZ(ptr) msvcirt.??0ios@@IEAA@XZ +@ thiscall -arch=win32 ??0ios@@QAE@PAVstreambuf@@@Z(ptr ptr) msvcirt.??0ios@@QAE@PAVstreambuf@@@Z +@ cdecl -arch=win64 ??0ios@@QEAA@PEAVstreambuf@@@Z(ptr ptr) msvcirt.??0ios@@QEAA@PEAVstreambuf@@@Z @ stub -arch=win32 ??0iostream@@IAE@ABV0@@Z @ stub -arch=win64 ??0iostream@@IEAA@AEBV0@@Z @ stub -arch=win32 ??0iostream@@IAE@XZ @@ -108,8 +108,8 @@ @ stub -arch=win64 ??0ostrstream@@QEAA@AEBV0@@Z @ stub -arch=win32 ??0ostrstream@@QAE@PADHH@Z @ stub -arch=win64 ??0ostrstream@@QEAA@PEADHH@Z -@ thiscall -arch=win32 ??0ostrstream@@QAE@XZ(ptr) msvcirt.??0ostrstream@@QAE@XZ -@ cdecl -arch=win64 ??0ostrstream@@QEAA@XZ(ptr) msvcirt.??0ostrstream@@QEAA@XZ +@ thiscall -arch=win32 ??0ostrstream@@QAE@XZ(ptr long) msvcirt.??0ostrstream@@QAE@XZ +@ cdecl -arch=win64 ??0ostrstream@@QEAA@XZ(ptr long) msvcirt.??0ostrstream@@QEAA@XZ @ stub -arch=win32 ??0stdiobuf@@QAE@ABV0@@Z @ stub -arch=win64 ??0stdiobuf@@QEAA@AEBV0@@Z @ stub -arch=win32 ??0stdiobuf@@QAE@PAU_iobuf@@@Z @@ -208,8 +208,8 @@ @ stub -arch=win64 ??4fstream@@QEAAAEAV0@AEAV0@@Z @ stub -arch=win32 ??4ifstream@@QAEAAV0@ABV0@@Z @ stub -arch=win64 ??4ifstream@@QEAAAEAV0@AEBV0@@Z -@ stub -arch=win32 ??4ios@@IAEAAV0@ABV0@@Z -@ stub -arch=win64 ??4ios@@IEAAAEAV0@AEBV0@@Z +@ thiscall -arch=win32 ??4ios@@IAEAAV0@ABV0@@Z(ptr ptr) msvcirt.??4ios@@IAEAAV0@ABV0@@Z +@ cdecl -arch=win64 ??4ios@@IEAAAEAV0@AEBV0@@Z(ptr ptr) msvcirt.??4ios@@IEAAAEAV0@AEBV0@@Z @ stub -arch=win32 ??4iostream@@IAEAAV0@AAV0@@Z @ stub -arch=win64 ??4iostream@@IEAAAEAV0@AEAV0@@Z @ stub -arch=win32 ??4iostream@@IAEAAV0@PAVstreambuf@@@Z @@ -326,14 +326,14 @@ @ stub -arch=win64 ??6ostream@@QEAAAEAV0@PEBE@Z @ stub -arch=win32 ??6ostream@@QAEAAV0@PBX@Z @ stub -arch=win64 ??6ostream@@QEAAAEAV0@PEBX@Z -@ stub -arch=win32 ??7ios@@QBEHXZ -@ stub -arch=win64 ??7ios@@QEBAHXZ +@ thiscall -arch=win32 ??7ios@@QBEHXZ(ptr) msvcirt.??7ios@@QBEHXZ +@ cdecl -arch=win64 ??7ios@@QEBAHXZ(ptr) msvcirt.??7ios@@QEBAHXZ @ thiscall -arch=i386 ??8type_info@@QBEHABV0@@Z(ptr ptr) msvcrt.??8type_info@@QBEHABV0@@Z @ cdecl -arch=win64 ??8type_info@@QEBAHAEBV0@@Z(ptr ptr) msvcrt.??8type_info@@QEBAHAEBV0@@Z @ thiscall -arch=i386 ??9type_info@@QBEHABV0@@Z(ptr ptr) msvcrt.??9type_info@@QBEHABV0@@Z @ cdecl -arch=win64 ??9type_info@@QEBAHAEBV0@@Z(ptr ptr) msvcrt.??9type_info@@QEBAHAEBV0@@Z -@ stub -arch=win32 ??Bios@@QBEPAXXZ -@ stub -arch=win64 ??Bios@@QEBAPEAXXZ +@ thiscall -arch=win32 ??Bios@@QBEPAXXZ(ptr) msvcirt.??Bios@@QBEPAXXZ +@ cdecl -arch=win64 ??Bios@@QEBAPEAXXZ(ptr) msvcirt.??Bios@@QEBAPEAXXZ @ extern ??_7__non_rtti_object@@6B@ msvcrt.??_7__non_rtti_object@@6B@ @ extern ??_7bad_cast@@6B@ msvcrt.??_7bad_cast@@6B@ @ extern ??_7bad_typeid@@6B@ msvcrt.??_7bad_typeid@@6B@ @@ -341,7 +341,7 @@ # @ extern ??_7filebuf@@6B@ # @ extern ??_7fstream@@6B@ # @ extern ??_7ifstream@@6B@ -# @ extern ??_7ios@@6B@ +@ extern ??_7ios@@6B@ msvcirt.??_7ios@@6B@ # @ extern ??_7iostream@@6B@ # @ extern ??_7istream@@6B@ # @ extern ??_7istream_withassign@@6B@ @@ -404,7 +404,7 @@ @ stub -arch=win32 ??_Efilebuf@@UAEPAXI@Z @ stub -arch=win32 ??_Efstream@@UAEPAXI@Z @ stub -arch=win32 ??_Eifstream@@UAEPAXI@Z -@ stub -arch=win32 ??_Eios@@UAEPAXI@Z +@ thiscall -arch=win32 ??_Eios@@UAEPAXI@Z(ptr long) msvcirt.??_Eios@@UAEPAXI@Z @ stub -arch=win32 ??_Eiostream@@UAEPAXI@Z @ stub -arch=win32 ??_Eistream@@UAEPAXI@Z @ stub -arch=win32 ??_Eistream_withassign@@UAEPAXI@Z @@ -427,7 +427,7 @@ @ stub -arch=win32 ??_Gfilebuf@@UAEPAXI@Z @ stub -arch=win32 ??_Gfstream@@UAEPAXI@Z @ stub -arch=win32 ??_Gifstream@@UAEPAXI@Z -@ stub -arch=win32 ??_Gios@@UAEPAXI@Z +@ thiscall -arch=win32 ??_Gios@@UAEPAXI@Z(ptr long) msvcirt.??_Gios@@UAEPAXI@Z @ stub -arch=win32 ??_Giostream@@UAEPAXI@Z @ stub -arch=win32 ??_Gistream@@UAEPAXI@Z @ stub -arch=win32 ??_Gistream_withassign@@UAEPAXI@Z @@ -461,21 +461,21 @@ @ stub -arch=win64 ?attach@ifstream@@QEAAXH@Z @ stub -arch=win32 ?attach@ofstream@@QAEXH@Z @ stub -arch=win64 ?attach@ofstream@@QEAAXH@Z -@ stub -arch=win32 ?bad@ios@@QBEHXZ -@ stub -arch=win64 ?bad@ios@@QEBAHXZ +@ thiscall -arch=win32 ?bad@ios@@QBEHXZ(ptr) msvcirt.?bad@ios@@QBEHXZ +@ cdecl -arch=win64 ?bad@ios@@QEBAHXZ(ptr) msvcirt.?bad@ios@@QEBAHXZ @ thiscall -arch=win32 ?base@streambuf@@IBEPADXZ(ptr) msvcirt.?base@streambuf@@IBEPADXZ @ cdecl -arch=win64 ?base@streambuf@@IEBAPEADXZ(ptr) msvcirt.?base@streambuf@@IEBAPEADXZ # @ extern ?basefield@ios@@2JB @ thiscall -arch=i386 ?before@type_info@@QBEHABV1@@Z(ptr ptr) msvcrt.?before@type_info@@QBEHABV1@@Z @ cdecl -arch=win64 ?before@type_info@@QEBAHAEBV1@@Z(ptr ptr) msvcrt.?before@type_info@@QEBAHAEBV1@@Z # @ extern ?binary@filebuf@@2HB -@ stub ?bitalloc@ios@@SAJXZ +@ cdecl ?bitalloc@ios@@SAJXZ() msvcirt.?bitalloc@ios@@SAJXZ @ thiscall -arch=win32 ?blen@streambuf@@IBEHXZ(ptr) msvcirt.?blen@streambuf@@IBEHXZ @ cdecl -arch=win64 ?blen@streambuf@@IEBAHXZ(ptr) msvcirt.?blen@streambuf@@IEBAHXZ @ stub ?cerr@@3Vostream_withassign@@A @ stub ?cin@@3Vistream_withassign@@A -@ stub -arch=win32 ?clear@ios@@QAEXH@Z -@ stub -arch=win64 ?clear@ios@@QEAAXH@Z +@ thiscall -arch=win32 ?clear@ios@@QAEXH@Z(ptr long) msvcirt.?clear@ios@@QAEXH@Z +@ cdecl -arch=win64 ?clear@ios@@QEAAXH@Z(ptr long) msvcirt.?clear@ios@@QEAAXH@Z @ stub ?clog@@3Vostream_withassign@@A @ stub -arch=win32 ?close@filebuf@@QAEPAV1@XZ @ stub -arch=win64 ?close@filebuf@@QEAAPEAV1@XZ @@ -485,19 +485,19 @@ @ stub -arch=win64 ?close@ifstream@@QEAAXXZ @ stub -arch=win32 ?close@ofstream@@QAEXXZ @ stub -arch=win64 ?close@ofstream@@QEAAXXZ -@ stub -arch=win32 ?clrlock@ios@@QAAXXZ -@ stub -arch=win64 ?clrlock@ios@@QEAAXXZ +@ cdecl -arch=win32 ?clrlock@ios@@QAAXXZ(ptr) msvcirt.?clrlock@ios@@QAAXXZ +@ cdecl -arch=win64 ?clrlock@ios@@QEAAXXZ(ptr) msvcirt.?clrlock@ios@@QEAAXXZ @ thiscall -arch=win32 ?clrlock@streambuf@@QAEXXZ(ptr) msvcirt.?clrlock@streambuf@@QAEXXZ @ cdecl -arch=win64 ?clrlock@streambuf@@QEAAXXZ(ptr) msvcirt.?clrlock@streambuf@@QEAAXXZ @ stub ?cout@@3Vostream_withassign@@A -@ stub -arch=win32 ?dbp@streambuf@@QAEXXZ -@ stub -arch=win64 ?dbp@streambuf@@QEAAXXZ -@ stub -arch=win32 ?dec@@YAAAVios@@AAV1@@Z -@ stub -arch=win64 ?dec@@YAAEAVios@@AEAV1@@Z -@ stub -arch=win32 ?delbuf@ios@@QAEXH@Z -@ stub -arch=win64 ?delbuf@ios@@QEAAXH@Z -@ stub -arch=win32 ?delbuf@ios@@QBEHXZ -@ stub -arch=win64 ?delbuf@ios@@QEBAHXZ +@ thiscall -arch=win32 ?dbp@streambuf@@QAEXXZ(ptr) msvcirt.?dbp@streambuf@@QAEXXZ +@ cdecl -arch=win64 ?dbp@streambuf@@QEAAXXZ(ptr) msvcirt.?dbp@streambuf@@QEAAXXZ +@ cdecl -arch=win32 ?dec@@YAAAVios@@AAV1@@Z(ptr) msvcirt.?dec@@YAAAVios@@AAV1@@Z +@ cdecl -arch=win64 ?dec@@YAAEAVios@@AEAV1@@Z(ptr) msvcirt.?dec@@YAAEAVios@@AEAV1@@Z +@ thiscall -arch=win32 ?delbuf@ios@@QAEXH@Z(ptr long) msvcirt.?delbuf@ios@@QAEXH@Z +@ cdecl -arch=win64 ?delbuf@ios@@QEAAXH@Z(ptr long) msvcirt.?delbuf@ios@@QEAAXH@Z +@ thiscall -arch=win32 ?delbuf@ios@@QBEHXZ(ptr) msvcirt.?delbuf@ios@@QBEHXZ +@ cdecl -arch=win64 ?delbuf@ios@@QEBAHXZ(ptr) msvcirt.?delbuf@ios@@QEBAHXZ @ thiscall -arch=win32 ?doallocate@streambuf@@MAEHXZ(ptr) msvcirt.?doallocate@streambuf@@MAEHXZ @ cdecl -arch=win64 ?doallocate@streambuf@@MEAAHXZ(ptr) msvcirt.?doallocate@streambuf@@MEAAHXZ @ stub -arch=win32 ?doallocate@strstreambuf@@MAEHXZ @@ -514,13 +514,13 @@ @ cdecl -arch=win64 ?endl@@YAAEAVostream@@AEAV1@@Z(ptr) msvcirt.?endl@@YAAEAVostream@@AEAV1@@Z @ cdecl -arch=win32 ?ends@@YAAAVostream@@AAV1@@Z(ptr) msvcirt.?ends@@YAAAVostream@@AAV1@@Z @ cdecl -arch=win64 ?ends@@YAAEAVostream@@AEAV1@@Z(ptr) msvcirt.?ends@@YAAEAVostream@@AEAV1@@Z -@ stub -arch=win32 ?eof@ios@@QBEHXZ -@ stub -arch=win64 ?eof@ios@@QEBAHXZ +@ thiscall -arch=win32 ?eof@ios@@QBEHXZ(ptr) msvcirt.?eof@ios@@QBEHXZ +@ cdecl -arch=win64 ?eof@ios@@QEBAHXZ(ptr) msvcirt.?eof@ios@@QEBAHXZ @ thiscall -arch=win32 ?epptr@streambuf@@IBEPADXZ(ptr) msvcirt.?epptr@streambuf@@IBEPADXZ @ cdecl -arch=win64 ?epptr@streambuf@@IEBAPEADXZ(ptr) msvcirt.?epptr@streambuf@@IEBAPEADXZ # @ extern ?fLockcInit@ios@@0HA -@ stub -arch=win32 ?fail@ios@@QBEHXZ -@ stub -arch=win64 ?fail@ios@@QEBAHXZ +@ thiscall -arch=win32 ?fail@ios@@QBEHXZ(ptr) msvcirt.?fail@ios@@QBEHXZ +@ cdecl -arch=win64 ?fail@ios@@QEBAHXZ(ptr) msvcirt.?fail@ios@@QEBAHXZ @ stub -arch=win32 ?fd@filebuf@@QBEHXZ @ stub -arch=win64 ?fd@filebuf@@QEBAHXZ @ stub -arch=win32 ?fd@fstream@@QBEHXZ @@ -529,14 +529,14 @@ @ stub -arch=win64 ?fd@ifstream@@QEBAHXZ @ stub -arch=win32 ?fd@ofstream@@QBEHXZ @ stub -arch=win64 ?fd@ofstream@@QEBAHXZ -@ stub -arch=win32 ?fill@ios@@QAEDD@Z -@ stub -arch=win64 ?fill@ios@@QEAADD@Z -@ stub -arch=win32 ?fill@ios@@QBEDXZ -@ stub -arch=win64 ?fill@ios@@QEBADXZ -@ stub -arch=win32 ?flags@ios@@QAEJJ@Z -@ stub -arch=win64 ?flags@ios@@QEAAJJ@Z -@ stub -arch=win32 ?flags@ios@@QBEJXZ -@ stub -arch=win64 ?flags@ios@@QEBAJXZ +@ thiscall -arch=win32 ?fill@ios@@QAEDD@Z(ptr long) msvcirt.?fill@ios@@QAEDD@Z +@ cdecl -arch=win64 ?fill@ios@@QEAADD@Z(ptr long) msvcirt.?fill@ios@@QEAADD@Z +@ thiscall -arch=win32 ?fill@ios@@QBEDXZ(ptr) msvcirt.?fill@ios@@QBEDXZ +@ cdecl -arch=win64 ?fill@ios@@QEBADXZ(ptr) msvcirt.?fill@ios@@QEBADXZ +@ thiscall -arch=win32 ?flags@ios@@QAEJJ@Z(ptr long) msvcirt.?flags@ios@@QAEJJ@Z +@ cdecl -arch=win64 ?flags@ios@@QEAAJJ@Z(ptr long) msvcirt.?flags@ios@@QEAAJJ@Z +@ thiscall -arch=win32 ?flags@ios@@QBEJXZ(ptr) msvcirt.?flags@ios@@QBEJXZ +@ cdecl -arch=win64 ?flags@ios@@QEBAJXZ(ptr) msvcirt.?flags@ios@@QEBAJXZ # @ extern ?floatfield@ios@@2JB @ stub -arch=win32 ?flush@@YAAAVostream@@AAV1@@Z @ stub -arch=win64 ?flush@@YAAEAVostream@@AEAV1@@Z @@ -576,18 +576,18 @@ @ stub -arch=win64 ?getline@istream@@QEAAAEAV1@PEADHD@Z @ stub -arch=win32 ?getline@istream@@QAEAAV1@PAEHD@Z @ stub -arch=win64 ?getline@istream@@QEAAAEAV1@PEAEHD@Z -@ stub -arch=win32 ?good@ios@@QBEHXZ -@ stub -arch=win64 ?good@ios@@QEBAHXZ +@ thiscall -arch=win32 ?good@ios@@QBEHXZ(ptr) msvcirt.?good@ios@@QBEHXZ +@ cdecl -arch=win64 ?good@ios@@QEBAHXZ(ptr) msvcirt.?good@ios@@QEBAHXZ @ thiscall -arch=win32 ?gptr@streambuf@@IBEPADXZ(ptr) msvcirt.?gptr@streambuf@@IBEPADXZ @ cdecl -arch=win64 ?gptr@streambuf@@IEBAPEADXZ(ptr) msvcirt.?gptr@streambuf@@IEBAPEADXZ -@ stub -arch=win32 ?hex@@YAAAVios@@AAV1@@Z -@ stub -arch=win64 ?hex@@YAAEAVios@@AEAV1@@Z +@ cdecl -arch=win32 ?hex@@YAAAVios@@AAV1@@Z(ptr) msvcirt.?hex@@YAAAVios@@AAV1@@Z +@ cdecl -arch=win64 ?hex@@YAAEAVios@@AEAV1@@Z(ptr) msvcirt.?hex@@YAAEAVios@@AEAV1@@Z @ stub -arch=win32 ?ignore@istream@@QAEAAV1@HH@Z @ stub -arch=win64 ?ignore@istream@@QEAAAEAV1@HH@Z @ thiscall -arch=win32 ?in_avail@streambuf@@QBEHXZ(ptr) msvcirt.?in_avail@streambuf@@QBEHXZ @ cdecl -arch=win64 ?in_avail@streambuf@@QEBAHXZ(ptr) msvcirt.?in_avail@streambuf@@QEBAHXZ -@ stub -arch=win32 ?init@ios@@IAEXPAVstreambuf@@@Z -@ stub -arch=win64 ?init@ios@@IEAAXPEAVstreambuf@@@Z +@ thiscall -arch=win32 ?init@ios@@IAEXPAVstreambuf@@@Z(ptr ptr) msvcirt.?init@ios@@IAEXPAVstreambuf@@@Z +@ cdecl -arch=win64 ?init@ios@@IEAAXPEAVstreambuf@@@Z(ptr ptr) msvcirt.?init@ios@@IEAAXPEAVstreambuf@@@Z @ stub -arch=win32 ?ipfx@istream@@QAEHH@Z @ stub -arch=win64 ?ipfx@istream@@QEAAHH@Z @ stub -arch=win32 ?is_open@filebuf@@QBEHXZ @@ -600,23 +600,23 @@ @ stub -arch=win64 ?is_open@ofstream@@QEBAHXZ @ stub -arch=win32 ?isfx@istream@@QAEXXZ @ stub -arch=win64 ?isfx@istream@@QEAAXXZ -@ stub -arch=win32 ?iword@ios@@QBEAAJH@Z -@ stub -arch=win64 ?iword@ios@@QEBAAEAJH@Z -@ stub -arch=win32 ?lock@ios@@QAAXXZ -@ stub -arch=win64 ?lock@ios@@QEAAXXZ +@ thiscall -arch=win32 ?iword@ios@@QBEAAJH@Z(ptr long) msvcirt.?iword@ios@@QBEAAJH@Z +@ cdecl -arch=win64 ?iword@ios@@QEBAAEAJH@Z(ptr long) msvcirt.?iword@ios@@QEBAAEAJH@Z +@ cdecl -arch=win32 ?lock@ios@@QAAXXZ(ptr) msvcirt.?lock@ios@@QAAXXZ +@ cdecl -arch=win64 ?lock@ios@@QEAAXXZ(ptr) msvcirt.?lock@ios@@QEAAXXZ @ thiscall -arch=win32 ?lock@streambuf@@QAEXXZ(ptr) msvcirt.?lock@streambuf@@QAEXXZ @ cdecl -arch=win64 ?lock@streambuf@@QEAAXXZ(ptr) msvcirt.?lock@streambuf@@QEAAXXZ -@ stub -arch=win32 ?lockbuf@ios@@QAAXXZ -@ stub -arch=win64 ?lockbuf@ios@@QEAAXXZ -@ stub ?lockc@ios@@KAXXZ -@ stub -arch=win32 ?lockptr@ios@@IAEPAU_CRT_CRITICAL_SECTION@@XZ -@ stub -arch=win64 ?lockptr@ios@@IEAAPEAU_CRT_CRITICAL_SECTION@@XZ +@ cdecl -arch=win32 ?lockbuf@ios@@QAAXXZ(ptr) msvcirt.?lockbuf@ios@@QAAXXZ +@ cdecl -arch=win64 ?lockbuf@ios@@QEAAXXZ(ptr) msvcirt.?lockbuf@ios@@QEAAXXZ +@ cdecl ?lockc@ios@@KAXXZ() msvcirt.?lockc@ios@@KAXXZ +@ thiscall -arch=win32 ?lockptr@ios@@IAEPAU_CRT_CRITICAL_SECTION@@XZ(ptr) msvcirt.?lockptr@ios@@IAEPAU_CRT_CRITICAL_SECTION@@XZ +@ cdecl -arch=win64 ?lockptr@ios@@IEAAPEAU_CRT_CRITICAL_SECTION@@XZ(ptr) msvcirt.?lockptr@ios@@IEAAPEAU_CRT_CRITICAL_SECTION@@XZ @ thiscall -arch=win32 ?lockptr@streambuf@@IAEPAU_CRT_CRITICAL_SECTION@@XZ(ptr) msvcirt.?lockptr@streambuf@@IAEPAU_CRT_CRITICAL_SECTION@@XZ @ cdecl -arch=win64 ?lockptr@streambuf@@IEAAPEAU_CRT_CRITICAL_SECTION@@XZ(ptr) msvcirt.?lockptr@streambuf@@IEAAPEAU_CRT_CRITICAL_SECTION@@XZ @ thiscall -arch=win32 ?name@type_info@@QBEPBDXZ(ptr) msvcrt.?name@type_info@@QBEPBDXZ @ cdecl -arch=win64 ?name@type_info@@QEBAPEBDXZ(ptr) msvcrt.?name@type_info@@QEBAPEBDXZ -@ stub -arch=win32 ?oct@@YAAAVios@@AAV1@@Z -@ stub -arch=win64 ?oct@@YAAEAVios@@AEAV1@@Z +@ cdecl -arch=win32 ?oct@@YAAAVios@@AAV1@@Z(ptr) msvcirt.?oct@@YAAAVios@@AAV1@@Z +@ cdecl -arch=win64 ?oct@@YAAEAVios@@AEAV1@@Z(ptr) msvcirt.?oct@@YAAEAVios@@AEAV1@@Z @ stub -arch=win32 ?open@filebuf@@QAEPAV1@PBDHH@Z @ stub -arch=win64 ?open@filebuf@@QEAAPEAV1@PEBDHH@Z @ stub -arch=win32 ?open@fstream@@QAEXPBDHH@Z @@ -654,10 +654,10 @@ @ stub -arch=win64 ?peek@istream@@QEAAHXZ @ thiscall -arch=win32 ?pptr@streambuf@@IBEPADXZ(ptr) msvcirt.?pptr@streambuf@@IBEPADXZ @ cdecl -arch=win64 ?pptr@streambuf@@IEBAPEADXZ(ptr) msvcirt.?pptr@streambuf@@IEBAPEADXZ -@ stub -arch=win32 ?precision@ios@@QAEHH@Z -@ stub -arch=win64 ?precision@ios@@QEAAHH@Z -@ stub -arch=win32 ?precision@ios@@QBEHXZ -@ stub -arch=win64 ?precision@ios@@QEBAHXZ +@ thiscall -arch=win32 ?precision@ios@@QAEHH@Z(ptr long) msvcirt.?precision@ios@@QAEHH@Z +@ cdecl -arch=win64 ?precision@ios@@QEAAHH@Z(ptr long) msvcirt.?precision@ios@@QEAAHH@Z +@ thiscall -arch=win32 ?precision@ios@@QBEHXZ(ptr) msvcirt.?precision@ios@@QBEHXZ +@ cdecl -arch=win64 ?precision@ios@@QEBAHXZ(ptr) msvcirt.?precision@ios@@QEBAHXZ @ stub -arch=win32 ?put@ostream@@QAEAAV1@C@Z @ stub -arch=win64 ?put@ostream@@QEAAAEAV1@C@Z @ stub -arch=win32 ?put@ostream@@QAEAAV1@D@Z @@ -666,16 +666,16 @@ @ stub -arch=win64 ?put@ostream@@QEAAAEAV1@E@Z @ stub -arch=win32 ?putback@istream@@QAEAAV1@D@Z @ stub -arch=win64 ?putback@istream@@QEAAAEAV1@D@Z -@ stub -arch=win32 ?pword@ios@@QBEAAPAXH@Z -@ stub -arch=win64 ?pword@ios@@QEBAAEAPEAXH@Z +@ thiscall -arch=win32 ?pword@ios@@QBEAAPAXH@Z(ptr long) msvcirt.?pword@ios@@QBEAAPAXH@Z +@ cdecl -arch=win64 ?pword@ios@@QEBAAEAPEAXH@Z(ptr long) msvcirt.?pword@ios@@QEBAAEAPEAXH@Z @ thiscall -arch=i386 ?raw_name@type_info@@QBEPBDXZ(ptr) msvcrt.?raw_name@type_info@@QBEPBDXZ @ cdecl -arch=win64 ?raw_name@type_info@@QEBAPEBDXZ(ptr) msvcrt.?raw_name@type_info@@QEBAPEBDXZ @ stub -arch=win32 ?rdbuf@fstream@@QBEPAVfilebuf@@XZ @ stub -arch=win64 ?rdbuf@fstream@@QEBAPEAVfilebuf@@XZ @ stub -arch=win32 ?rdbuf@ifstream@@QBEPAVfilebuf@@XZ @ stub -arch=win64 ?rdbuf@ifstream@@QEBAPEAVfilebuf@@XZ -@ stub -arch=win32 ?rdbuf@ios@@QBEPAVstreambuf@@XZ -@ stub -arch=win64 ?rdbuf@ios@@QEBAPEAVstreambuf@@XZ +@ thiscall -arch=win32 ?rdbuf@ios@@QBEPAVstreambuf@@XZ(ptr) msvcirt.?rdbuf@ios@@QBEPAVstreambuf@@XZ +@ cdecl -arch=win64 ?rdbuf@ios@@QEBAPEAVstreambuf@@XZ(ptr) msvcirt.?rdbuf@ios@@QEBAPEAVstreambuf@@XZ @ stub -arch=win32 ?rdbuf@istrstream@@QBEPAVstrstreambuf@@XZ @ stub -arch=win64 ?rdbuf@istrstream@@QEBAPEAVstrstreambuf@@XZ @ stub -arch=win32 ?rdbuf@ofstream@@QBEPAVfilebuf@@XZ @@ -686,8 +686,8 @@ @ stub -arch=win64 ?rdbuf@stdiostream@@QEBAPEAVstdiobuf@@XZ @ stub -arch=win32 ?rdbuf@strstream@@QBEPAVstrstreambuf@@XZ @ stub -arch=win64 ?rdbuf@strstream@@QEBAPEAVstrstreambuf@@XZ -@ stub -arch=win32 ?rdstate@ios@@QBEHXZ -@ stub -arch=win64 ?rdstate@ios@@QEBAHXZ +@ thiscall -arch=win32 ?rdstate@ios@@QBEHXZ(ptr) msvcirt.?rdstate@ios@@QBEHXZ +@ cdecl -arch=win64 ?rdstate@ios@@QEBAHXZ(ptr) msvcirt.?rdstate@ios@@QEBAHXZ @ stub -arch=win32 ?read@istream@@QAEAAV1@PACH@Z @ stub -arch=win64 ?read@istream@@QEAAAEAV1@PEACH@Z @ stub -arch=win32 ?read@istream@@QAEAAV1@PADH@Z @@ -731,14 +731,14 @@ @ cdecl -arch=win64 ?setbuf@streambuf@@UEAAPEAV1@PEADH@Z(ptr ptr long) msvcirt.?setbuf@streambuf@@UEAAPEAV1@PEADH@Z @ stub -arch=win32 ?setbuf@strstreambuf@@UAEPAVstreambuf@@PADH@Z @ stub -arch=win64 ?setbuf@strstreambuf@@UEAAPEAVstreambuf@@PEADH@Z -@ stub -arch=win32 ?setf@ios@@QAEJJ@Z -@ stub -arch=win64 ?setf@ios@@QEAAJJ@Z -@ stub -arch=win32 ?setf@ios@@QAEJJJ@Z -@ stub -arch=win64 ?setf@ios@@QEAAJJJ@Z +@ thiscall -arch=win32 ?setf@ios@@QAEJJ@Z(ptr long) msvcirt.?setf@ios@@QAEJJ@Z +@ cdecl -arch=win64 ?setf@ios@@QEAAJJ@Z(ptr long) msvcirt.?setf@ios@@QEAAJJ@Z +@ thiscall -arch=win32 ?setf@ios@@QAEJJJ@Z(ptr long long) msvcirt.?setf@ios@@QAEJJJ@Z +@ cdecl -arch=win64 ?setf@ios@@QEAAJJJ@Z(ptr long long) msvcirt.?setf@ios@@QEAAJJJ@Z @ thiscall -arch=win32 ?setg@streambuf@@IAEXPAD00@Z(ptr ptr ptr ptr) msvcirt.?setg@streambuf@@IAEXPAD00@Z @ cdecl -arch=win64 ?setg@streambuf@@IEAAXPEAD00@Z(ptr ptr ptr ptr) msvcirt.?setg@streambuf@@IEAAXPEAD00@Z -@ stub -arch=win32 ?setlock@ios@@QAAXXZ -@ stub -arch=win64 ?setlock@ios@@QEAAXXZ +@ cdecl -arch=win32 ?setlock@ios@@QAAXXZ(ptr) msvcirt.?setlock@ios@@QAAXXZ +@ cdecl -arch=win64 ?setlock@ios@@QEAAXXZ(ptr) msvcirt.?setlock@ios@@QEAAXXZ @ thiscall -arch=win32 ?setlock@streambuf@@QAEXXZ(ptr) msvcirt.?setlock@streambuf@@QAEXXZ @ cdecl -arch=win64 ?setlock@streambuf@@QEAAXXZ(ptr) msvcirt.?setlock@streambuf@@QEAAXXZ @ stub -arch=win32 ?setmode@filebuf@@QAEHH@Z @@ -762,8 +762,8 @@ # @ extern ?sh_write@filebuf@@2HB @ thiscall -arch=win32 ?snextc@streambuf@@QAEHXZ(ptr) msvcirt.?snextc@streambuf@@QAEHXZ @ cdecl -arch=win64 ?snextc@streambuf@@QEAAHXZ(ptr) msvcirt.?snextc@streambuf@@QEAAHXZ -@ stub -arch=win32 ?sputbackc@streambuf@@QAEHD@Z -@ stub -arch=win64 ?sputbackc@streambuf@@QEAAHD@Z +@ thiscall -arch=win32 ?sputbackc@streambuf@@QAEHD@Z(ptr long) msvcirt.?sputbackc@streambuf@@QAEHD@Z +@ cdecl -arch=win64 ?sputbackc@streambuf@@QEAAHD@Z(ptr long) msvcirt.?sputbackc@streambuf@@QEAAHD@Z @ thiscall -arch=win32 ?sputc@streambuf@@QAEHH@Z(ptr long) msvcirt.?sputc@streambuf@@QAEHH@Z @ cdecl -arch=win64 ?sputc@streambuf@@QEAAHH@Z(ptr long) msvcirt.?sputc@streambuf@@QEAAHH@Z @ thiscall -arch=win32 ?sputn@streambuf@@QAEHPBDH@Z(ptr str long) msvcirt.?sputn@streambuf@@QAEHPBDH@Z @@ -791,17 +791,17 @@ @ cdecl -arch=win64 ?sync@streambuf@@UEAAHXZ(ptr) msvcirt.?sync@streambuf@@UEAAHXZ @ stub -arch=win32 ?sync@strstreambuf@@UAEHXZ @ stub -arch=win64 ?sync@strstreambuf@@UEAAHXZ -@ stub ?sync_with_stdio@ios@@SAXXZ +@ cdecl ?sync_with_stdio@ios@@SAXXZ() msvcirt.?sync_with_stdio@ios@@SAXXZ @ stub -arch=win32 ?tellg@istream@@QAEJXZ @ stub -arch=win64 ?tellg@istream@@QEAAJXZ @ stub -arch=win32 ?tellp@ostream@@QAEJXZ @ stub -arch=win64 ?tellp@ostream@@QEAAJXZ @ cdecl ?terminate@@YAXXZ() msvcrt.?terminate@@YAXXZ # @ extern ?text@filebuf@@2HB -@ stub -arch=win32 ?tie@ios@@QAEPAVostream@@PAV2@@Z -@ stub -arch=win64 ?tie@ios@@QEAAPEAVostream@@PEAV2@@Z -@ stub -arch=win32 ?tie@ios@@QBEPAVostream@@XZ -@ stub -arch=win64 ?tie@ios@@QEBAPEAVostream@@XZ +@ thiscall -arch=win32 ?tie@ios@@QAEPAVostream@@PAV2@@Z(ptr ptr) msvcirt.?tie@ios@@QAEPAVostream@@PAV2@@Z +@ cdecl -arch=win64 ?tie@ios@@QEAAPEAVostream@@PEAV2@@Z(ptr ptr) msvcirt.?tie@ios@@QEAAPEAVostream@@PEAV2@@Z +@ thiscall -arch=win32 ?tie@ios@@QBEPAVostream@@XZ(ptr) msvcirt.?tie@ios@@QBEPAVostream@@XZ +@ cdecl -arch=win64 ?tie@ios@@QEBAPEAVostream@@XZ(ptr) msvcirt.?tie@ios@@QEBAPEAVostream@@XZ @ thiscall -arch=win32 ?unbuffered@streambuf@@IAEXH@Z(ptr long) msvcirt.?unbuffered@streambuf@@IAEXH@Z @ cdecl -arch=win64 ?unbuffered@streambuf@@IEAAXH@Z(ptr long) msvcirt.?unbuffered@streambuf@@IEAAXH@Z @ thiscall -arch=win32 ?unbuffered@streambuf@@IBEHXZ(ptr) msvcirt.?unbuffered@streambuf@@IBEHXZ @@ -813,21 +813,21 @@ @ stub -arch=win32 ?underflow@strstreambuf@@UAEHXZ @ stub -arch=win64 ?underflow@strstreambuf@@UEAAHXZ @ cdecl ?unexpected@@YAXXZ() msvcrt.?unexpected@@YAXXZ -@ stub -arch=win32 ?unlock@ios@@QAAXXZ -@ stub -arch=win64 ?unlock@ios@@QEAAXXZ +@ cdecl -arch=win32 ?unlock@ios@@QAAXXZ(ptr) msvcirt.?unlock@ios@@QAAXXZ +@ cdecl -arch=win64 ?unlock@ios@@QEAAXXZ(ptr) msvcirt.?unlock@ios@@QEAAXXZ @ thiscall -arch=win32 ?unlock@streambuf@@QAEXXZ(ptr) msvcirt.?unlock@streambuf@@QAEXXZ @ cdecl -arch=win64 ?unlock@streambuf@@QEAAXXZ(ptr) msvcirt.?unlock@streambuf@@QEAAXXZ -@ stub -arch=win32 ?unlockbuf@ios@@QAAXXZ -@ stub -arch=win64 ?unlockbuf@ios@@QEAAXXZ -@ stub ?unlockc@ios@@KAXXZ -@ stub -arch=win32 ?unsetf@ios@@QAEJJ@Z -@ stub -arch=win64 ?unsetf@ios@@QEAAJJ@Z +@ cdecl -arch=win32 ?unlockbuf@ios@@QAAXXZ(ptr) msvcirt.?unlockbuf@ios@@QAAXXZ +@ cdecl -arch=win64 ?unlockbuf@ios@@QEAAXXZ(ptr) msvcirt.?unlockbuf@ios@@QEAAXXZ +@ cdecl ?unlockc@ios@@KAXXZ() msvcirt.?unlockc@ios@@KAXXZ +@ thiscall -arch=win32 ?unsetf@ios@@QAEJJ@Z(ptr long) msvcirt.?unsetf@ios@@QAEJJ@Z +@ cdecl -arch=win64 ?unsetf@ios@@QEAAJJ@Z(ptr long) msvcirt.?unsetf@ios@@QEAAJJ@Z @ thiscall -arch=i386 ?what@exception@@UBEPBDXZ(ptr) msvcrt.?what@exception@@UBEPBDXZ @ cdecl -arch=win64 ?what@exception@@UEBAPEBDXZ(ptr) msvcrt.?what@exception@@UEBAPEBDXZ -@ stub -arch=win32 ?width@ios@@QAEHH@Z -@ stub -arch=win64 ?width@ios@@QEAAHH@Z -@ stub -arch=win32 ?width@ios@@QBEHXZ -@ stub -arch=win64 ?width@ios@@QEBAHXZ +@ thiscall -arch=win32 ?width@ios@@QAEHH@Z(ptr long) msvcirt.?width@ios@@QAEHH@Z +@ cdecl -arch=win64 ?width@ios@@QEAAHH@Z(ptr long) msvcirt.?width@ios@@QEAAHH@Z +@ thiscall -arch=win32 ?width@ios@@QBEHXZ(ptr) msvcirt.?width@ios@@QBEHXZ +@ cdecl -arch=win64 ?width@ios@@QEBAHXZ(ptr) msvcirt.?width@ios@@QEBAHXZ @ stub -arch=win32 ?write@ostream@@QAEAAV1@PBCH@Z @ stub -arch=win64 ?write@ostream@@QEAAAEAV1@PEBCH@Z @ stub -arch=win32 ?write@ostream@@QAEAAV1@PBDH@Z @@ -842,7 +842,7 @@ # @ extern ?x_lockc@ios@@0U_CRT_CRITICAL_SECTION@@A # @ extern ?x_maxbit@ios@@0JA # @ extern ?x_statebuf@ios@@0PAJA -@ stub ?xalloc@ios@@SAHXZ +@ cdecl ?xalloc@ios@@SAHXZ() msvcirt.?xalloc@ios@@SAHXZ @ thiscall -arch=win32 ?xsgetn@streambuf@@UAEHPADH@Z(ptr ptr long) msvcirt.?xsgetn@streambuf@@UAEHPADH@Z @ cdecl -arch=win64 ?xsgetn@streambuf@@UEAAHPEADH@Z(ptr ptr long) msvcirt.?xsgetn@streambuf@@UEAAHPEADH@Z @ thiscall -arch=win32 ?xsputn@streambuf@@UAEHPBDH@Z(ptr ptr long) msvcirt.?xsputn@streambuf@@UAEHPBDH@Z diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/ntdll/ntdll.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/ntdll/ntdll.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/ntdll/ntdll.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/ntdll/ntdll.spec 2015-07-12 05:36:18.000000000 +0000 @@ -513,7 +513,7 @@ @ stdcall RtlDecodePointer(ptr) # @ stub RtlDecodeSystemPointer @ stdcall RtlDecompressBuffer(long ptr long ptr long ptr) -@ stub RtlDecompressFragment +@ stdcall RtlDecompressFragment(long ptr long ptr long long ptr ptr) @ stub RtlDefaultNpAcl @ stub RtlDelete @ stdcall RtlDeleteAce(ptr long) @@ -970,6 +970,34 @@ @ stdcall RtlxOemStringToUnicodeSize(ptr) RtlOemStringToUnicodeSize @ stdcall RtlxUnicodeStringToAnsiSize(ptr) RtlUnicodeStringToAnsiSize @ stdcall RtlxUnicodeStringToOemSize(ptr) RtlUnicodeStringToOemSize +@ stdcall TpAllocCleanupGroup(ptr) +@ stdcall TpAllocPool(ptr ptr) +@ stdcall TpAllocTimer(ptr ptr ptr ptr) +@ stdcall TpAllocWait(ptr ptr ptr ptr) +@ stdcall TpAllocWork(ptr ptr ptr ptr) +@ stdcall TpCallbackLeaveCriticalSectionOnCompletion(ptr ptr) +@ stdcall TpCallbackMayRunLong(ptr) +@ stdcall TpCallbackReleaseMutexOnCompletion(ptr long) +@ stdcall TpCallbackReleaseSemaphoreOnCompletion(ptr long long) +@ stdcall TpCallbackSetEventOnCompletion(ptr long) +@ stdcall TpCallbackUnloadDllOnCompletion(ptr ptr) +@ stdcall TpDisassociateCallback(ptr) +@ stdcall TpIsTimerSet(ptr) +@ stdcall TpPostWork(ptr) +@ stdcall TpReleaseCleanupGroup(ptr) +@ stdcall TpReleaseCleanupGroupMembers(ptr long ptr) +@ stdcall TpReleasePool(ptr) +@ stdcall TpReleaseTimer(ptr) +@ stdcall TpReleaseWait(ptr) +@ stdcall TpReleaseWork(ptr) +@ stdcall TpSetPoolMaxThreads(ptr long) +@ stdcall TpSetPoolMinThreads(ptr long) +@ stdcall TpSetTimer(ptr ptr long long) +@ stdcall TpSetWait(ptr long ptr) +@ stdcall TpSimpleTryPost(ptr ptr ptr) +@ stdcall TpWaitForTimer(ptr long) +@ stdcall TpWaitForWait(ptr long) +@ stdcall TpWaitForWork(ptr long) @ stdcall -ret64 VerSetConditionMask(int64 long long) @ stdcall WinSqmIsOptedIn() @ stdcall ZwAcceptConnectPort(ptr long ptr long long ptr) NtAcceptConnectPort diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/ntdll/rtl.c wine-staging-1.7.47~ubuntu14.10.1/dlls/ntdll/rtl.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/ntdll/rtl.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/ntdll/rtl.c 2015-07-12 05:36:18.000000000 +0000 @@ -1224,42 +1224,306 @@ /****************************************************************************** * RtlGetCompressionWorkSpaceSize [NTDLL.@] */ -NTSTATUS WINAPI RtlGetCompressionWorkSpaceSize(USHORT CompressionFormatAndEngine, - PULONG CompressBufferWorkSpaceSize, - PULONG CompressFragmentWorkSpaceSize) +NTSTATUS WINAPI RtlGetCompressionWorkSpaceSize(USHORT format, PULONG compress_workspace, + PULONG decompress_workspace) { - FIXME("0x%04x, %p, %p: stub!\n", CompressionFormatAndEngine, CompressBufferWorkSpaceSize, - CompressFragmentWorkSpaceSize); + FIXME("0x%04x, %p, %p: semi-stub\n", format, compress_workspace, decompress_workspace); - return STATUS_NOT_IMPLEMENTED; + switch (format & ~COMPRESSION_ENGINE_MAXIMUM) + { + case COMPRESSION_FORMAT_LZNT1: + if (compress_workspace) + { + /* FIXME: The current implementation of RtlCompressBuffer does not use a + * workspace buffer, but Windows applications might expect a nonzero value. */ + *compress_workspace = 16; + } + if (decompress_workspace) + *decompress_workspace = 0x1000; + return STATUS_SUCCESS; + + case COMPRESSION_FORMAT_NONE: + case COMPRESSION_FORMAT_DEFAULT: + return STATUS_INVALID_PARAMETER; + + default: + FIXME("format %u not implemented\n", format); + return STATUS_UNSUPPORTED_COMPRESSION; + } +} + +/* compress data using LZNT1, currently only a stub */ +static NTSTATUS lznt1_compress(UCHAR *src, ULONG src_size, UCHAR *dst, ULONG dst_size, + ULONG chunk_size, ULONG *final_size, UCHAR *workspace) +{ + UCHAR *src_cur = src, *src_end = src + src_size; + UCHAR *dst_cur = dst, *dst_end = dst + dst_size; + ULONG block_size; + + while (src_cur < src_end) + { + /* determine size of current chunk */ + block_size = min(0x1000, src_end - src_cur); + if (dst_cur + sizeof(WORD) + block_size > dst_end) + return STATUS_BUFFER_TOO_SMALL; + + /* write (uncompressed) chunk header */ + *(WORD *)dst_cur = 0x3000 | (block_size - 1); + dst_cur += sizeof(WORD); + + /* write chunk content */ + memcpy(dst_cur, src_cur, block_size); + dst_cur += block_size; + src_cur += block_size; + } + + if (final_size) + *final_size = dst_cur - dst; + + return STATUS_SUCCESS; } /****************************************************************************** * RtlCompressBuffer [NTDLL.@] */ -NTSTATUS WINAPI RtlCompressBuffer(USHORT CompressionFormatAndEngine, PUCHAR UncompressedBuffer, - ULONG UncompressedBufferSize, PUCHAR CompressedBuffer, - ULONG CompressedBufferSize, ULONG UncompressedChunkSize, - PULONG FinalCompressedSize, PVOID WorkSpace) -{ - FIXME("0x%04x, %p, %u, %p, %u, %u, %p, %p :stub\n", CompressionFormatAndEngine, UncompressedBuffer, - UncompressedBufferSize, CompressedBuffer, CompressedBufferSize, UncompressedChunkSize, - FinalCompressedSize, WorkSpace); +NTSTATUS WINAPI RtlCompressBuffer(USHORT format, PUCHAR uncompressed, ULONG uncompressed_size, + PUCHAR compressed, ULONG compressed_size, ULONG chunk_size, + PULONG final_size, PVOID workspace) +{ + FIXME("0x%04x, %p, %u, %p, %u, %u, %p, %p: semi-stub\n", format, uncompressed, + uncompressed_size, compressed, compressed_size, chunk_size, final_size, workspace); - return STATUS_NOT_IMPLEMENTED; + switch (format & ~COMPRESSION_ENGINE_MAXIMUM) + { + case COMPRESSION_FORMAT_LZNT1: + return lznt1_compress(uncompressed, uncompressed_size, compressed, + compressed_size, chunk_size, final_size, workspace); + + case COMPRESSION_FORMAT_NONE: + case COMPRESSION_FORMAT_DEFAULT: + return STATUS_INVALID_PARAMETER; + + default: + FIXME("format %u not implemented\n", format); + return STATUS_UNSUPPORTED_COMPRESSION; + } } +/* decompress a single LZNT1 chunk */ +static UCHAR *lznt1_decompress_chunk(UCHAR *dst, ULONG dst_size, UCHAR *src, ULONG src_size) +{ + UCHAR *src_cur = src, *src_end = src + src_size; + UCHAR *dst_cur = dst, *dst_end = dst + dst_size; + ULONG displacement_bits, length_bits; + ULONG code_displacement, code_length; + WORD flags, code; + + while (src_cur < src_end && dst_cur < dst_end) + { + flags = 0x8000 | *src_cur++; + while ((flags & 0xff00) && src_cur < src_end) + { + if (flags & 1) + { + /* backwards reference */ + if (src_cur + sizeof(WORD) > src_end) + return NULL; + + code = *(WORD *)src_cur; + src_cur += sizeof(WORD); + + /* find length / displacement bits */ + for (displacement_bits = 12; displacement_bits > 4; displacement_bits--) + if ((1 << (displacement_bits - 1)) < dst_cur - dst) break; + + length_bits = 16 - displacement_bits; + code_length = (code & ((1 << length_bits) - 1)) + 3; + code_displacement = (code >> length_bits) + 1; + + if (dst_cur < dst + code_displacement) + return NULL; + + /* copy bytes of chunk - we can't use memcpy() since source and dest can + * be overlapping, and the same bytes can be repeated over and over again */ + while (code_length--) + { + if (dst_cur >= dst_end) return dst_cur; + *dst_cur = *(dst_cur - code_displacement); + dst_cur++; + } + } + else + { + /* uncompressed data */ + if (dst_cur >= dst_end) return dst_cur; + *dst_cur++ = *src_cur++; + } + flags >>= 1; + } + } + + return dst_cur; +} + +/* decompress data encoded with LZNT1 */ +static NTSTATUS lznt1_decompress(UCHAR *dst, ULONG dst_size, UCHAR *src, ULONG src_size, + ULONG offset, ULONG *final_size, UCHAR *workspace) +{ + UCHAR *src_cur = src, *src_end = src + src_size; + UCHAR *dst_cur = dst, *dst_end = dst + dst_size; + ULONG chunk_size, block_size; + WORD chunk_header; + UCHAR *ptr; + + if (src_cur + sizeof(WORD) > src_end) + return STATUS_BAD_COMPRESSION_BUFFER; + + /* skip over chunks with a distance >= 0x1000 to the destination offset */ + while (offset >= 0x1000 && src_cur + sizeof(WORD) <= src_end) + { + chunk_header = *(WORD *)src_cur; + src_cur += sizeof(WORD); + if (!chunk_header) goto out; + chunk_size = (chunk_header & 0xfff) + 1; + + if (src_cur + chunk_size > src_end) + return STATUS_BAD_COMPRESSION_BUFFER; + + src_cur += chunk_size; + offset -= 0x1000; + } + + /* handle partially included chunk */ + if (offset && src_cur + sizeof(WORD) <= src_end) + { + chunk_header = *(WORD *)src_cur; + src_cur += sizeof(WORD); + if (!chunk_header) goto out; + chunk_size = (chunk_header & 0xfff) + 1; + + if (src_cur + chunk_size > src_end) + return STATUS_BAD_COMPRESSION_BUFFER; + + if (dst_cur >= dst_end) + goto out; + + if (chunk_header & 0x8000) + { + /* compressed chunk */ + if (!workspace) return STATUS_ACCESS_VIOLATION; + ptr = lznt1_decompress_chunk(workspace, 0x1000, src_cur, chunk_size); + if (!ptr) return STATUS_BAD_COMPRESSION_BUFFER; + if (ptr - workspace > offset) + { + block_size = min((ptr - workspace) - offset, dst_end - dst_cur); + memcpy(dst_cur, workspace + offset, block_size); + dst_cur += block_size; + } + } + else + { + /* uncompressed chunk */ + if (chunk_size > offset) + { + block_size = min(chunk_size - offset, dst_end - dst_cur); + memcpy(dst_cur, src_cur + offset, block_size); + dst_cur += block_size; + } + } + + src_cur += chunk_size; + } + + /* handle remaining chunks */ + while (src_cur + sizeof(WORD) <= src_end) + { + chunk_header = *(WORD *)src_cur; + src_cur += sizeof(WORD); + if (!chunk_header) goto out; + chunk_size = (chunk_header & 0xfff) + 1; + + if (src_cur + chunk_size > src_end) + return STATUS_BAD_COMPRESSION_BUFFER; + + /* fill space with padding when the previous chunk was decompressed + * to less than 4096 bytes. no padding is needed for the last chunk + * or when the next chunk is truncated */ + block_size = ((dst_cur - dst) + offset) & 0xfff; + if (block_size) + { + block_size = 0x1000 - block_size; + if (dst_cur + block_size >= dst_end) + goto out; + memset(dst_cur, 0, block_size); + dst_cur += block_size; + } + + if (dst_cur >= dst_end) + goto out; + + if (chunk_header & 0x8000) + { + /* compressed chunk */ + dst_cur = lznt1_decompress_chunk(dst_cur, dst_end - dst_cur, src_cur, chunk_size); + if (!dst_cur) return STATUS_BAD_COMPRESSION_BUFFER; + } + else + { + /* uncompressed chunk */ + block_size = min(chunk_size, dst_end - dst_cur); + memcpy(dst_cur, src_cur, block_size); + dst_cur += block_size; + } + + src_cur += chunk_size; + } + +out: + if (final_size) + *final_size = dst_cur - dst; + + return STATUS_SUCCESS; + +} + +/****************************************************************************** + * RtlDecompressFragment [NTDLL.@] + */ +NTSTATUS RtlDecompressFragment(USHORT format, PUCHAR uncompressed, ULONG uncompressed_size, + PUCHAR compressed, ULONG compressed_size, ULONG offset, + PULONG final_size, PVOID workspace) +{ + TRACE("0x%04x, %p, %u, %p, %u, %u, %p, %p\n", format, uncompressed, + uncompressed_size, compressed, compressed_size, offset, final_size, workspace); + + switch (format & ~COMPRESSION_ENGINE_MAXIMUM) + { + case COMPRESSION_FORMAT_LZNT1: + return lznt1_decompress(uncompressed, uncompressed_size, compressed, + compressed_size, offset, final_size, workspace); + + case COMPRESSION_FORMAT_NONE: + case COMPRESSION_FORMAT_DEFAULT: + return STATUS_INVALID_PARAMETER; + + default: + FIXME("format %u not implemented\n", format); + return STATUS_UNSUPPORTED_COMPRESSION; + } +} + + /****************************************************************************** * RtlDecompressBuffer [NTDLL.@] */ -NTSTATUS WINAPI RtlDecompressBuffer(USHORT CompressionFormat, PUCHAR UncompressedBuffer, - ULONG UncompressedBufferSize, PUCHAR CompressedBuffer, - ULONG CompressedBufferSize, PULONG FinalUncompressedSize) +NTSTATUS WINAPI RtlDecompressBuffer(USHORT format, PUCHAR uncompressed, ULONG uncompressed_size, + PUCHAR compressed, ULONG compressed_size, PULONG final_size) { - FIXME("0x%04x, %p, %u, %p, %u, %p :stub\n", CompressionFormat, UncompressedBuffer, UncompressedBufferSize, - CompressedBuffer, CompressedBufferSize, FinalUncompressedSize); + TRACE("0x%04x, %p, %u, %p, %u, %p\n", format, uncompressed, + uncompressed_size, compressed, compressed_size, final_size); - return STATUS_NOT_IMPLEMENTED; + return RtlDecompressFragment(format, uncompressed, uncompressed_size, + compressed, compressed_size, 0, final_size, NULL); } /*********************************************************************** diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/ntdll/tape.c wine-staging-1.7.47~ubuntu14.10.1/dlls/ntdll/tape.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/ntdll/tape.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/ntdll/tape.c 2015-07-12 05:36:18.000000000 +0000 @@ -87,11 +87,13 @@ /****************************************************************** * TAPE_GetStatus */ +#ifdef HAVE_SYS_MTIO_H static inline NTSTATUS TAPE_GetStatus( int error ) { if (!error) return STATUS_SUCCESS; return FILE_GetNtStatus(); } +#endif /****************************************************************** * TAPE_CreatePartition diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/ntdll/tests/rtl.c wine-staging-1.7.47~ubuntu14.10.1/dlls/ntdll/tests/rtl.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/ntdll/tests/rtl.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/ntdll/tests/rtl.c 2015-07-12 05:36:18.000000000 +0000 @@ -92,6 +92,10 @@ static NTSTATUS (WINAPI *pLdrAddRefDll)(ULONG, HMODULE); static NTSTATUS (WINAPI *pLdrLockLoaderLock)(ULONG, ULONG*, ULONG_PTR*); static NTSTATUS (WINAPI *pLdrUnlockLoaderLock)(ULONG, ULONG_PTR); +static NTSTATUS (WINAPI *pRtlGetCompressionWorkSpaceSize)(USHORT, PULONG, PULONG); +static NTSTATUS (WINAPI *pRtlDecompressBuffer)(USHORT, PUCHAR, ULONG, const UCHAR*, ULONG, PULONG); +static NTSTATUS (WINAPI *pRtlDecompressFragment)(USHORT, PUCHAR, ULONG, const UCHAR*, ULONG, ULONG, PULONG, PVOID); +static NTSTATUS (WINAPI *pRtlCompressBuffer)(USHORT, const UCHAR*, ULONG, PUCHAR, ULONG, ULONG, PULONG, PVOID); static HMODULE hkernel32 = 0; static BOOL (WINAPI *pIsWow64Process)(HANDLE, PBOOL); @@ -139,6 +143,10 @@ pLdrAddRefDll = (void *)GetProcAddress(hntdll, "LdrAddRefDll"); pLdrLockLoaderLock = (void *)GetProcAddress(hntdll, "LdrLockLoaderLock"); pLdrUnlockLoaderLock = (void *)GetProcAddress(hntdll, "LdrUnlockLoaderLock"); + pRtlGetCompressionWorkSpaceSize = (void *)GetProcAddress(hntdll, "RtlGetCompressionWorkSpaceSize"); + pRtlDecompressBuffer = (void *)GetProcAddress(hntdll, "RtlDecompressBuffer"); + pRtlDecompressFragment = (void *)GetProcAddress(hntdll, "RtlDecompressFragment"); + pRtlCompressBuffer = (void *)GetProcAddress(hntdll, "RtlCompressBuffer"); } hkernel32 = LoadLibraryA("kernel32.dll"); ok(hkernel32 != 0, "LoadLibrary failed\n"); @@ -1599,6 +1607,561 @@ pLdrUnlockLoaderLock(0, magic); } +static void test_RtlCompressBuffer(void) +{ + ULONG compress_workspace, decompress_workspace; + static const UCHAR test_buffer[] = "WineWineWine"; + static UCHAR buf1[0x1000], buf2[0x1000]; + ULONG final_size, buf_size; + UCHAR *workspace = NULL; + NTSTATUS status; + + if (!pRtlCompressBuffer || !pRtlDecompressBuffer || !pRtlGetCompressionWorkSpaceSize) + { + win_skip("skipping RtlCompressBuffer tests, required functions not available\n"); + return; + } + + compress_workspace = decompress_workspace = 0xdeadbeef; + status = pRtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_LZNT1, &compress_workspace, + &decompress_workspace); + ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); + ok(compress_workspace != 0, "got wrong compress_workspace %u\n", compress_workspace); + workspace = HeapAlloc(GetProcessHeap(), 0, compress_workspace); + ok(workspace != NULL, "HeapAlloc failed %d\n", GetLastError()); + + /* test compression format / engine */ + final_size = 0xdeadbeef; + status = pRtlCompressBuffer(COMPRESSION_FORMAT_NONE, test_buffer, sizeof(test_buffer), + buf1, sizeof(buf1) - 1, 4096, &final_size, workspace); + ok(status == STATUS_INVALID_PARAMETER, "got wrong status 0x%08x\n", status); + ok(final_size == 0xdeadbeef, "got wrong final_size %u\n", final_size); + + final_size = 0xdeadbeef; + status = pRtlCompressBuffer(COMPRESSION_FORMAT_DEFAULT, test_buffer, sizeof(test_buffer), + buf1, sizeof(buf1) - 1, 4096, &final_size, workspace); + ok(status == STATUS_INVALID_PARAMETER, "got wrong status 0x%08x\n", status); + ok(final_size == 0xdeadbeef, "got wrong final_size %u\n", final_size); + + final_size = 0xdeadbeef; + status = pRtlCompressBuffer(0xFF, test_buffer, sizeof(test_buffer), + buf1, sizeof(buf1) - 1, 4096, &final_size, workspace); + ok(status == STATUS_UNSUPPORTED_COMPRESSION, "got wrong status 0x%08x\n", status); + ok(final_size == 0xdeadbeef, "got wrong final_size %u\n", final_size); + + /* test compression */ + final_size = 0xdeadbeef; + memset(buf1, 0x11, sizeof(buf1)); + status = pRtlCompressBuffer(COMPRESSION_FORMAT_LZNT1, test_buffer, sizeof(test_buffer), + buf1, sizeof(buf1), 4096, &final_size, workspace); + ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); + ok((*(WORD *)buf1 & 0x7000) == 0x3000, "no chunk signature found %04x\n", *(WORD *)buf1); + todo_wine + ok(final_size < sizeof(test_buffer), "got wrong final_size %u\n", final_size); + + /* test decompression */ + buf_size = final_size; + final_size = 0xdeadbeef; + memset(buf2, 0x11, sizeof(buf2)); + status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf2, sizeof(buf2), + buf1, buf_size, &final_size); + ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); + ok(final_size == sizeof(test_buffer), "got wrong final_size %u\n", final_size); + ok(!memcmp(buf2, test_buffer, sizeof(test_buffer)), "got wrong decoded data\n"); + ok(buf2[sizeof(test_buffer)] == 0x11, "too many bytes written\n"); + + /* buffer too small */ + final_size = 0xdeadbeef; + memset(buf1, 0x11, sizeof(buf1)); + status = pRtlCompressBuffer(COMPRESSION_FORMAT_LZNT1, test_buffer, sizeof(test_buffer), + buf1, 4, 4096, &final_size, workspace); + ok(status == STATUS_BUFFER_TOO_SMALL, "got wrong status 0x%08x\n", status); + + HeapFree(GetProcessHeap(), 0, workspace); +} + +static void test_RtlGetCompressionWorkSpaceSize(void) +{ + ULONG compress_workspace, decompress_workspace; + NTSTATUS status; + + if (!pRtlGetCompressionWorkSpaceSize) + { + win_skip("RtlGetCompressionWorkSpaceSize is not available\n"); + return; + } + + /* test invalid format / engine */ + status = pRtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_NONE, &compress_workspace, + &decompress_workspace); + ok(status == STATUS_INVALID_PARAMETER, "got wrong status 0x%08x\n", status); + + status = pRtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_DEFAULT, &compress_workspace, + &decompress_workspace); + ok(status == STATUS_INVALID_PARAMETER, "got wrong status 0x%08x\n", status); + + status = pRtlGetCompressionWorkSpaceSize(0xFF, &compress_workspace, &decompress_workspace); + ok(status == STATUS_UNSUPPORTED_COMPRESSION, "got wrong status 0x%08x\n", status); + + /* test LZNT1 with normal and maximum compression */ + compress_workspace = decompress_workspace = 0xdeadbeef; + status = pRtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_LZNT1, &compress_workspace, + &decompress_workspace); + ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); + ok(compress_workspace != 0, "got wrong compress_workspace %u\n", compress_workspace); + ok(decompress_workspace == 0x1000, "got wrong decompress_workspace %u\n", decompress_workspace); + + compress_workspace = decompress_workspace = 0xdeadbeef; + status = pRtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_MAXIMUM, + &compress_workspace, &decompress_workspace); + ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); + ok(compress_workspace != 0, "got wrong compress_workspace %u\n", compress_workspace); + ok(decompress_workspace == 0x1000, "got wrong decompress_workspace %u\n", decompress_workspace); +} + +/* helper for test_RtlDecompressBuffer, checks if a chunk is incomplete */ +static BOOL is_incomplete_chunk(const UCHAR *compressed, ULONG compressed_size, BOOL check_all) +{ + ULONG chunk_size; + + if (compressed_size <= sizeof(WORD)) + return TRUE; + + while (compressed_size >= sizeof(WORD)) + { + chunk_size = (*(WORD *)compressed & 0xFFF) + 1; + if (compressed_size < sizeof(WORD) + chunk_size) + return TRUE; + if (!check_all) + break; + compressed += sizeof(WORD) + chunk_size; + compressed_size -= sizeof(WORD) + chunk_size; + } + + return FALSE; +} + +#define DECOMPRESS_BROKEN_FRAGMENT 1 /* < Win 7 */ +#define DECOMPRESS_BROKEN_TRUNCATED 2 /* broken on all machines */ + +static void test_RtlDecompressBuffer(void) +{ + static const struct + { + UCHAR compressed[32]; + ULONG compressed_size; + NTSTATUS status; + UCHAR uncompressed[32]; + ULONG uncompressed_size; + DWORD broken_flags; + } + test_lznt[] = + { + /* 4 byte uncompressed chunk */ + { + {0x03, 0x30, 'W', 'i', 'n', 'e'}, + 6, + STATUS_SUCCESS, + "Wine", + 4, + DECOMPRESS_BROKEN_FRAGMENT + }, + /* 8 byte uncompressed chunk */ + { + {0x07, 0x30, 'W', 'i', 'n', 'e', 'W', 'i', 'n', 'e'}, + 10, + STATUS_SUCCESS, + "WineWine", + 8, + DECOMPRESS_BROKEN_FRAGMENT + }, + /* 4 byte compressed chunk */ + { + {0x04, 0xB0, 0x00, 'W', 'i', 'n', 'e'}, + 7, + STATUS_SUCCESS, + "Wine", + 4 + }, + /* 8 byte compressed chunk */ + { + {0x08, 0xB0, 0x00, 'W', 'i', 'n', 'e', 'W', 'i', 'n', 'e'}, + 11, + STATUS_SUCCESS, + "WineWine", + 8 + }, + /* compressed chunk using backwards reference */ + { + {0x06, 0xB0, 0x10, 'W', 'i', 'n', 'e', 0x01, 0x30}, + 9, + STATUS_SUCCESS, + "WineWine", + 8, + DECOMPRESS_BROKEN_TRUNCATED + }, + /* compressed chunk using backwards reference with length > bytes_read */ + { + {0x06, 0xB0, 0x10, 'W', 'i', 'n', 'e', 0x05, 0x30}, + 9, + STATUS_SUCCESS, + "WineWineWine", + 12, + DECOMPRESS_BROKEN_TRUNCATED + }, + /* same as above, but unused bits != 0 */ + { + {0x06, 0xB0, 0x30, 'W', 'i', 'n', 'e', 0x01, 0x30}, + 9, + STATUS_SUCCESS, + "WineWine", + 8, + DECOMPRESS_BROKEN_TRUNCATED + }, + /* compressed chunk without backwards reference and unused bits != 0 */ + { + {0x01, 0xB0, 0x02, 'W'}, + 4, + STATUS_SUCCESS, + "W", + 1 + }, + /* termination sequence after first chunk */ + { + {0x03, 0x30, 'W', 'i', 'n', 'e', 0x00, 0x00, 0x03, 0x30, 'W', 'i', 'n', 'e'}, + 14, + STATUS_SUCCESS, + "Wine", + 4, + DECOMPRESS_BROKEN_FRAGMENT + }, + /* compressed chunk using backwards reference with 4 bit offset, 12 bit length */ + { + {0x14, 0xB0, 0x00, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', + 0x00, 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', + 0x01, 0x01, 0xF0}, + 23, + STATUS_SUCCESS, + "ABCDEFGHIJKLMNOPABCD", + 20, + DECOMPRESS_BROKEN_TRUNCATED + }, + /* compressed chunk using backwards reference with 5 bit offset, 11 bit length */ + { + {0x15, 0xB0, 0x00, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', + 0x00, 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', + 0x02, 'A', 0x00, 0x78}, + 24, + STATUS_SUCCESS, + "ABCDEFGHIJKLMNOPABCD", + 20, + DECOMPRESS_BROKEN_TRUNCATED + }, + /* uncompressed chunk with invalid magic */ + { + {0x03, 0x20, 'W', 'i', 'n', 'e'}, + 6, + STATUS_SUCCESS, + "Wine", + 4, + DECOMPRESS_BROKEN_FRAGMENT + }, + /* compressed chunk with invalid magic */ + { + {0x04, 0xA0, 0x00, 'W', 'i', 'n', 'e'}, + 7, + STATUS_SUCCESS, + "Wine", + 4 + }, + /* garbage byte after end of buffer */ + { + {0x00, 0xB0, 0x02, 0x01}, + 4, + STATUS_SUCCESS, + "", + 0 + }, + /* empty compressed chunk */ + { + {0x00, 0xB0, 0x00}, + 3, + STATUS_SUCCESS, + "", + 0 + }, + /* empty compressed chunk with unused bits != 0 */ + { + {0x00, 0xB0, 0x01}, + 3, + STATUS_SUCCESS, + "", + 0 + }, + /* empty input buffer */ + { + {}, + 0, + STATUS_BAD_COMPRESSION_BUFFER, + }, + /* incomplete chunk header */ + { + {0x01}, + 1, + STATUS_BAD_COMPRESSION_BUFFER + }, + /* incomplete chunk header */ + { + {0x00, 0x30}, + 2, + STATUS_BAD_COMPRESSION_BUFFER + }, + /* compressed chunk with invalid backwards reference */ + { + {0x06, 0xB0, 0x10, 'W', 'i', 'n', 'e', 0x05, 0x40}, + 9, + STATUS_BAD_COMPRESSION_BUFFER + }, + /* compressed chunk with incomplete backwards reference */ + { + {0x05, 0xB0, 0x10, 'W', 'i', 'n', 'e', 0x05}, + 8, + STATUS_BAD_COMPRESSION_BUFFER + }, + /* incomplete uncompressed chunk */ + { + {0x07, 0x30, 'W', 'i', 'n', 'e'}, + 6, + STATUS_BAD_COMPRESSION_BUFFER + }, + /* incomplete compressed chunk */ + { + {0x08, 0xB0, 0x00, 'W', 'i', 'n', 'e'}, + 7, + STATUS_BAD_COMPRESSION_BUFFER + }, + /* two compressed chunks, the second one incomplete */ + { + {0x00, 0xB0, 0x02, 0x00, 0xB0}, + 5, + STATUS_BAD_COMPRESSION_BUFFER, + } + }; + + static UCHAR buf[0x2000], workspace[0x1000]; + NTSTATUS status, expected_status; + ULONG final_size; + int i; + + if (!pRtlDecompressBuffer || !pRtlDecompressFragment) + { + win_skip("RtlDecompressBuffer or RtlDecompressFragment is not available\n"); + return; + } + + /* test compression format / engine */ + final_size = 0xdeadbeef; + status = pRtlDecompressBuffer(COMPRESSION_FORMAT_NONE, buf, sizeof(buf), test_lznt[0].compressed, + test_lznt[0].compressed_size, &final_size); + ok(status == STATUS_INVALID_PARAMETER, "got wrong status 0x%08x\n", status); + ok(final_size == 0xdeadbeef, "got wrong final_size %u\n", final_size); + + final_size = 0xdeadbeef; + status = pRtlDecompressBuffer(COMPRESSION_FORMAT_DEFAULT, buf, sizeof(buf), test_lznt[0].compressed, + test_lznt[0].compressed_size, &final_size); + ok(status == STATUS_INVALID_PARAMETER, "got wrong status 0x%08x\n", status); + ok(final_size == 0xdeadbeef, "got wrong final_size %u\n", final_size); + + final_size = 0xdeadbeef; + status = pRtlDecompressBuffer(0xFF, buf, sizeof(buf), test_lznt[0].compressed, + test_lznt[0].compressed_size, &final_size); + ok(status == STATUS_UNSUPPORTED_COMPRESSION, "got wrong status 0x%08x\n", status); + ok(final_size == 0xdeadbeef, "got wrong final_size %u\n", final_size); + + /* regular tests for RtlDecompressBuffer */ + for (i = 0; i < sizeof(test_lznt) / sizeof(test_lznt[0]); i++) + { + trace("Running test %d (compressed_size=%u, uncompressed_size=%u, status=0x%08x)\n", + i, test_lznt[i].compressed_size, test_lznt[i].uncompressed_size, test_lznt[i].status); + + /* test with very big buffer */ + final_size = 0xdeadbeef; + memset(buf, 0x11, sizeof(buf)); + status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_lznt[i].compressed, + test_lznt[i].compressed_size, &final_size); + ok(status == test_lznt[i].status || broken(status == STATUS_BAD_COMPRESSION_BUFFER && + (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_FRAGMENT)), "%d: got wrong status 0x%08x\n", i, status); + if (!status) + { + ok(final_size == test_lznt[i].uncompressed_size, + "%d: got wrong final_size %u\n", i, final_size); + ok(!memcmp(buf, test_lznt[i].uncompressed, test_lznt[i].uncompressed_size), + "%d: got wrong decoded data\n", i); + ok(buf[test_lznt[i].uncompressed_size] == 0x11, + "%d: buf[%u] was modified\n", i, test_lznt[i].uncompressed_size); + } + + /* test that modifier for compression engine is ignored */ + final_size = 0xdeadbeef; + memset(buf, 0x11, sizeof(buf)); + status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_MAXIMUM, buf, sizeof(buf), + test_lznt[i].compressed, test_lznt[i].compressed_size, &final_size); + ok(status == test_lznt[i].status || broken(status == STATUS_BAD_COMPRESSION_BUFFER && + (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_FRAGMENT)), "%d: got wrong status 0x%08x\n", i, status); + if (!status) + { + ok(final_size == test_lznt[i].uncompressed_size, + "%d: got wrong final_size %u\n", i, final_size); + ok(!memcmp(buf, test_lznt[i].uncompressed, test_lznt[i].uncompressed_size), + "%d: got wrong decoded data\n", i); + ok(buf[test_lznt[i].uncompressed_size] == 0x11, + "%d: buf[%u] was modified\n", i, test_lznt[i].uncompressed_size); + } + + /* test with expected output size */ + if (test_lznt[i].uncompressed_size > 0) + { + final_size = 0xdeadbeef; + memset(buf, 0x11, sizeof(buf)); + status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, test_lznt[i].uncompressed_size, + test_lznt[i].compressed, test_lznt[i].compressed_size, &final_size); + ok(status == test_lznt[i].status, "%d: got wrong status 0x%08x\n", i, status); + if (!status) + { + ok(final_size == test_lznt[i].uncompressed_size, + "%d: got wrong final_size %u\n", i, final_size); + ok(!memcmp(buf, test_lznt[i].uncompressed, test_lznt[i].uncompressed_size), + "%d: got wrong decoded data\n", i); + ok(buf[test_lznt[i].uncompressed_size] == 0x11, + "%d: buf[%u] was modified\n", i, test_lznt[i].uncompressed_size); + } + } + + /* test with smaller output size */ + if (test_lznt[i].uncompressed_size > 1) + { + final_size = 0xdeadbeef; + memset(buf, 0x11, sizeof(buf)); + status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, test_lznt[i].uncompressed_size - 1, + test_lznt[i].compressed, test_lznt[i].compressed_size, &final_size); + if (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_TRUNCATED) + todo_wine + ok(status == STATUS_BAD_COMPRESSION_BUFFER, "%d: got wrong status 0x%08x\n", i, status); + else + ok(status == test_lznt[i].status, "%d: got wrong status 0x%08x\n", i, status); + if (!status) + { + ok(final_size == test_lznt[i].uncompressed_size - 1, + "%d: got wrong final_size %u\n", i, final_size); + ok(!memcmp(buf, test_lznt[i].uncompressed, test_lznt[i].uncompressed_size - 1), + "%d: got wrong decoded data\n", i); + ok(buf[test_lznt[i].uncompressed_size - 1] == 0x11, + "%d: buf[%u] was modified\n", i, test_lznt[i].uncompressed_size - 1); + } + } + + /* test with zero output size */ + final_size = 0xdeadbeef; + memset(buf, 0x11, sizeof(buf)); + status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, 0, test_lznt[i].compressed, + test_lznt[i].compressed_size, &final_size); + if (is_incomplete_chunk(test_lznt[i].compressed, test_lznt[i].compressed_size, FALSE)) + ok(status == STATUS_BAD_COMPRESSION_BUFFER, "%d: got wrong status 0x%08x\n", i, status); + else + { + ok(status == STATUS_SUCCESS, "%d: got wrong status 0x%08x\n", i, status); + ok(final_size == 0, "%d: got wrong final_size %u\n", i, final_size); + ok(buf[0] == 0x11, "%d: buf[0] was modified\n", i); + } + + /* test RtlDecompressFragment with offset = 0 */ + final_size = 0xdeadbeef; + memset(buf, 0x11, sizeof(buf)); + status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_lznt[i].compressed, + test_lznt[i].compressed_size, 0, &final_size, workspace); + if (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_FRAGMENT) + todo_wine + ok(status == STATUS_BAD_COMPRESSION_BUFFER, "%d: got wrong status 0x%08x\n", i, status); + else + ok(status == test_lznt[i].status, "%d: got wrong status 0x%08x\n", i, status); + if (!status) + { + ok(final_size == test_lznt[i].uncompressed_size, + "%d: got wrong final_size %u\n", i, final_size); + ok(!memcmp(buf, test_lznt[i].uncompressed, test_lznt[i].uncompressed_size), + "%d: got wrong decoded data\n", i); + ok(buf[test_lznt[i].uncompressed_size] == 0x11, + "%d: buf[%u] was modified\n", i, test_lznt[i].uncompressed_size); + } + + /* test RtlDecompressFragment with offset = 1 */ + final_size = 0xdeadbeef; + memset(buf, 0x11, sizeof(buf)); + status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_lznt[i].compressed, + test_lznt[i].compressed_size, 1, &final_size, workspace); + if (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_FRAGMENT) + todo_wine + ok(status == STATUS_BAD_COMPRESSION_BUFFER, "%d: got wrong status 0x%08x\n", i, status); + else + ok(status == test_lznt[i].status, "%d: got wrong status 0x%08x\n", i, status); + if (!status) + { + if (test_lznt[i].uncompressed_size == 0) + { + todo_wine + ok(final_size == 4095, "%d: got wrong final_size %u\n", i, final_size); + /* Buffer doesn't contain any useful value on Windows */ + ok(buf[4095] == 0x11, "%d: buf[4095] was modified\n", i); + } + else + { + ok(final_size == test_lznt[i].uncompressed_size - 1, + "%d: got wrong final_size %u\n", i, final_size); + ok(!memcmp(buf, test_lznt[i].uncompressed + 1, test_lznt[i].uncompressed_size - 1), + "%d: got wrong decoded data\n", i); + ok(buf[test_lznt[i].uncompressed_size - 1] == 0x11, + "%d: buf[%u] was modified\n", i, test_lznt[i].uncompressed_size - 1); + } + } + + /* test RtlDecompressFragment with offset = 4095 */ + final_size = 0xdeadbeef; + memset(buf, 0x11, sizeof(buf)); + status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_lznt[i].compressed, + test_lznt[i].compressed_size, 4095, &final_size, workspace); + if (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_FRAGMENT) + todo_wine + ok(status == STATUS_BAD_COMPRESSION_BUFFER, "%d: got wrong status 0x%08x\n", i, status); + else + ok(status == test_lznt[i].status, "%d: got wrong status 0x%08x\n", i, status); + if (!status) + { + todo_wine + ok(final_size == 1, "%d: got wrong final_size %u\n", i, final_size); + todo_wine + ok(buf[0] == 0, "%d: padding is not zero\n", i); + ok(buf[1] == 0x11, "%d: buf[1] was modified\n", i); + } + + /* test RtlDecompressFragment with offset = 4096 */ + final_size = 0xdeadbeef; + memset(buf, 0x11, sizeof(buf)); + status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_lznt[i].compressed, + test_lznt[i].compressed_size, 4096, &final_size, workspace); + expected_status = is_incomplete_chunk(test_lznt[i].compressed, test_lznt[i].compressed_size, TRUE) ? + test_lznt[i].status : STATUS_SUCCESS; + ok(status == expected_status, "%d: got wrong status 0x%08x, expected 0x%08x\n", i, status, expected_status); + if (!status) + { + ok(final_size == 0, "%d: got wrong final_size %u\n", i, final_size); + ok(buf[0] == 0x11, "%d: buf[4096] was modified\n", i); + } + } +} + +#undef DECOMPRESS_BROKEN_FRAGMENT +#undef DECOMPRESS_BROKEN_TRUNCATED + START_TEST(rtl) { InitFunctionPtrs(); @@ -1625,4 +2188,7 @@ test_RtlIpv4StringToAddress(); test_LdrAddRefDll(); test_LdrLockLoaderLock(); + test_RtlCompressBuffer(); + test_RtlGetCompressionWorkSpaceSize(); + test_RtlDecompressBuffer(); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/ntdll/tests/threadpool.c wine-staging-1.7.47~ubuntu14.10.1/dlls/ntdll/tests/threadpool.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/ntdll/tests/threadpool.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/ntdll/tests/threadpool.c 2015-07-12 05:36:18.000000000 +0000 @@ -21,9 +21,29 @@ #include "ntdll_test.h" static HMODULE hntdll = 0; +static NTSTATUS (WINAPI *pTpAllocCleanupGroup)(TP_CLEANUP_GROUP **); static NTSTATUS (WINAPI *pTpAllocPool)(TP_POOL **,PVOID); +static NTSTATUS (WINAPI *pTpAllocTimer)(TP_TIMER **,PTP_TIMER_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); +static NTSTATUS (WINAPI *pTpAllocWait)(TP_WAIT **,PTP_WAIT_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); +static NTSTATUS (WINAPI *pTpAllocWork)(TP_WORK **,PTP_WORK_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); +static NTSTATUS (WINAPI *pTpCallbackMayRunLong)(TP_CALLBACK_INSTANCE *); +static VOID (WINAPI *pTpCallbackReleaseSemaphoreOnCompletion)(TP_CALLBACK_INSTANCE *,HANDLE,DWORD); +static VOID (WINAPI *pTpDisassociateCallback)(TP_CALLBACK_INSTANCE *); +static BOOL (WINAPI *pTpIsTimerSet)(TP_TIMER *); +static VOID (WINAPI *pTpReleaseWait)(TP_WAIT *); +static VOID (WINAPI *pTpPostWork)(TP_WORK *); +static VOID (WINAPI *pTpReleaseCleanupGroup)(TP_CLEANUP_GROUP *); +static VOID (WINAPI *pTpReleaseCleanupGroupMembers)(TP_CLEANUP_GROUP *,BOOL,PVOID); static VOID (WINAPI *pTpReleasePool)(TP_POOL *); +static VOID (WINAPI *pTpReleaseTimer)(TP_TIMER *); +static VOID (WINAPI *pTpReleaseWork)(TP_WORK *); +static VOID (WINAPI *pTpSetPoolMaxThreads)(TP_POOL *,DWORD); +static VOID (WINAPI *pTpSetTimer)(TP_TIMER *,LARGE_INTEGER *,LONG,LONG); +static VOID (WINAPI *pTpSetWait)(TP_WAIT *,HANDLE,LARGE_INTEGER *); static NTSTATUS (WINAPI *pTpSimpleTryPost)(PTP_SIMPLE_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); +static VOID (WINAPI *pTpWaitForTimer)(TP_TIMER *,BOOL); +static VOID (WINAPI *pTpWaitForWait)(TP_WAIT *,BOOL); +static VOID (WINAPI *pTpWaitForWork)(TP_WORK *,BOOL); #define NTDLL_GET_PROC(func) \ do \ @@ -42,13 +62,33 @@ return FALSE; } + NTDLL_GET_PROC(TpAllocCleanupGroup); NTDLL_GET_PROC(TpAllocPool); + NTDLL_GET_PROC(TpAllocTimer); + NTDLL_GET_PROC(TpAllocWait); + NTDLL_GET_PROC(TpAllocWork); + NTDLL_GET_PROC(TpCallbackMayRunLong); + NTDLL_GET_PROC(TpCallbackReleaseSemaphoreOnCompletion); + NTDLL_GET_PROC(TpDisassociateCallback); + NTDLL_GET_PROC(TpIsTimerSet); + NTDLL_GET_PROC(TpPostWork); + NTDLL_GET_PROC(TpReleaseCleanupGroup); + NTDLL_GET_PROC(TpReleaseCleanupGroupMembers); NTDLL_GET_PROC(TpReleasePool); + NTDLL_GET_PROC(TpReleaseTimer); + NTDLL_GET_PROC(TpReleaseWait); + NTDLL_GET_PROC(TpReleaseWork); + NTDLL_GET_PROC(TpSetPoolMaxThreads); + NTDLL_GET_PROC(TpSetTimer); + NTDLL_GET_PROC(TpSetWait); NTDLL_GET_PROC(TpSimpleTryPost); + NTDLL_GET_PROC(TpWaitForTimer); + NTDLL_GET_PROC(TpWaitForWait); + NTDLL_GET_PROC(TpWaitForWork); if (!pTpAllocPool) { - skip("Threadpool functions not supported, skipping tests\n"); + win_skip("Threadpool functions not supported, skipping tests\n"); return FALSE; } @@ -65,13 +105,23 @@ ReleaseSemaphore(semaphore, 1, NULL); } +static void CALLBACK simple2_cb(TP_CALLBACK_INSTANCE *instance, void *userdata) +{ + trace("Running simple2 callback\n"); + Sleep(50); + InterlockedIncrement((LONG *)userdata); +} + static void test_tp_simple(void) { TP_CALLBACK_ENVIRON environment; + TP_CLEANUP_GROUP *group; HANDLE semaphore; NTSTATUS status; TP_POOL *pool; + LONG userdata; DWORD result; + int i; semaphore = CreateSemaphoreA(NULL, 0, 1, NULL); ok(semaphore != NULL, "CreateSemaphoreA failed %u\n", GetLastError()); @@ -105,6 +155,7 @@ environment.Version = 9999; environment.Pool = pool; status = pTpSimpleTryPost(simple_cb, semaphore, &environment); + todo_wine ok(status == STATUS_INVALID_PARAMETER || broken(!status) /* Vista/2008 */, "TpSimpleTryPost unexpectedly returned status %x\n", status); if (!status) @@ -113,7 +164,1128 @@ ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); } + /* allocate a cleanup group for synchronization */ + group = NULL; + status = pTpAllocCleanupGroup(&group); + ok(!status, "TpAllocCleanupGroup failed with status %x\n", status); + ok(group != NULL, "expected pool != NULL\n"); + + /* use cleanup group to wait for a simple callback */ + userdata = 0; + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + environment.CleanupGroup = group; + status = pTpSimpleTryPost(simple2_cb, &userdata, &environment); + ok(!status, "TpSimpleTryPost failed with status %x\n", status); + pTpReleaseCleanupGroupMembers(group, FALSE, NULL); + ok(userdata == 1, "expected userdata = 1, got %u\n", userdata); + + /* test cancellation of pending simple callbacks */ + userdata = 0; + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + environment.CleanupGroup = group; + for (i = 0; i < 100; i++) + { + status = pTpSimpleTryPost(simple2_cb, &userdata, &environment); + ok(!status, "TpSimpleTryPost failed with status %x\n", status); + } + pTpReleaseCleanupGroupMembers(group, TRUE, NULL); + ok(userdata < 100, "expected userdata < 100, got %u\n", userdata); + + /* cleanup */ + pTpReleaseCleanupGroup(group); + pTpReleasePool(pool); + CloseHandle(semaphore); +} + +static void CALLBACK work_cb(TP_CALLBACK_INSTANCE *instance, void *userdata, TP_WORK *work) +{ + trace("Running work callback\n"); + Sleep(10); + InterlockedIncrement((LONG *)userdata); +} + +static void CALLBACK work2_cb(TP_CALLBACK_INSTANCE *instance, void *userdata, TP_WORK *work) +{ + trace("Running work2 callback\n"); + Sleep(10); + InterlockedExchangeAdd((LONG *)userdata, 0x10000); +} + +static void test_tp_work(void) +{ + TP_CALLBACK_ENVIRON environment; + TP_WORK *work; + TP_POOL *pool; + NTSTATUS status; + LONG userdata; + int i; + + /* allocate new threadpool */ + pool = NULL; + status = pTpAllocPool(&pool, NULL); + ok(!status, "TpAllocPool failed with status %x\n", status); + ok(pool != NULL, "expected pool != NULL\n"); + + /* allocate new work item */ + work = NULL; + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + status = pTpAllocWork(&work, work_cb, &userdata, &environment); + ok(!status, "TpAllocWork failed with status %x\n", status); + ok(work != NULL, "expected work != NULL\n"); + + /* post 10 identical work items at once */ + userdata = 0; + for (i = 0; i < 10; i++) + pTpPostWork(work); + pTpWaitForWork(work, FALSE); + ok(userdata == 10, "expected userdata = 10, got %u\n", userdata); + + /* add more tasks and cancel them immediately */ + userdata = 0; + for (i = 0; i < 10; i++) + pTpPostWork(work); + pTpWaitForWork(work, TRUE); + ok(userdata < 10, "expected userdata < 10, got %u\n", userdata); + + /* cleanup */ + pTpReleaseWork(work); + pTpReleasePool(pool); +} + +static void test_tp_work_scheduler(void) +{ + TP_CALLBACK_ENVIRON environment; + TP_CLEANUP_GROUP *group; + TP_WORK *work, *work2; + TP_POOL *pool; + NTSTATUS status; + LONG userdata; + int i; + + /* allocate new threadpool */ + pool = NULL; + status = pTpAllocPool(&pool, NULL); + ok(!status, "TpAllocPool failed with status %x\n", status); + ok(pool != NULL, "expected pool != NULL\n"); + + /* we limit the pool to a single thread */ + pTpSetPoolMaxThreads(pool, 1); + + /* create a cleanup group */ + group = NULL; + status = pTpAllocCleanupGroup(&group); + ok(!status, "TpAllocCleanupGroup failed with status %x\n", status); + ok(group != NULL, "expected pool != NULL\n"); + + /* the first work item has no cleanup group associated */ + work = NULL; + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + status = pTpAllocWork(&work, work_cb, &userdata, &environment); + ok(!status, "TpAllocWork failed with status %x\n", status); + ok(work != NULL, "expected work != NULL\n"); + + /* allocate a second work item with a cleanup group */ + work2 = NULL; + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + environment.CleanupGroup = group; + status = pTpAllocWork(&work2, work2_cb, &userdata, &environment); + ok(!status, "TpAllocWork failed with status %x\n", status); + ok(work2 != NULL, "expected work2 != NULL\n"); + + /* the 'work' callbacks are not blocking execution of 'work2' callbacks */ + userdata = 0; + for (i = 0; i < 10; i++) + pTpPostWork(work); + for (i = 0; i < 10; i++) + pTpPostWork(work2); + Sleep(30); + pTpWaitForWork(work, TRUE); + pTpWaitForWork(work2, TRUE); + ok(userdata & 0xffff, "expected userdata & 0xffff != 0, got %u\n", userdata & 0xffff); + ok(userdata >> 16, "expected userdata >> 16 != 0, got %u\n", userdata >> 16); + + /* test TpReleaseCleanupGroupMembers on a work item */ + userdata = 0; + for (i = 0; i < 100; i++) + pTpPostWork(work); + for (i = 0; i < 10; i++) + pTpPostWork(work2); + pTpReleaseCleanupGroupMembers(group, FALSE, NULL); + pTpWaitForWork(work, TRUE); + ok((userdata & 0xffff) < 100, "expected userdata & 0xffff < 100, got %u\n", userdata & 0xffff); + ok((userdata >> 16) == 10, "expected userdata >> 16 == 10, got %u\n", userdata >> 16); + + /* cleanup */ + pTpReleaseWork(work); + pTpReleaseCleanupGroup(group); + pTpReleasePool(pool); +} + +static DWORD group_cancel_tid; + +static void CALLBACK group_cancel_cb(TP_CALLBACK_INSTANCE *instance, void *userdata) +{ + HANDLE *semaphores = userdata; + NTSTATUS status; + DWORD result; + + trace("Running group cancel callback\n"); + + status = pTpCallbackMayRunLong(instance); + ok(status == STATUS_TOO_MANY_THREADS || broken(status == 1) /* Win Vista / 2008 */, + "expected STATUS_TOO_MANY_THREADS, got %08x\n", status); + + result = WaitForSingleObject(semaphores[0], 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ReleaseSemaphore(semaphores[1], 1, NULL); +} + +static void CALLBACK group_cancel_cleanup_release_cb(void *object, void *userdata) +{ + HANDLE *semaphores = userdata; + trace("Running group cancel cleanup release callback\n"); + group_cancel_tid = GetCurrentThreadId(); + ReleaseSemaphore(semaphores[0], 1, NULL); +} + +static void CALLBACK group_cancel_cleanup_increment_cb(void *object, void *userdata) +{ + trace("Running group cancel cleanup increment callback\n"); + group_cancel_tid = GetCurrentThreadId(); + InterlockedIncrement((LONG *)userdata); +} + +static void CALLBACK unexpected_cb(TP_CALLBACK_INSTANCE *instance, void *userdata) +{ + ok(0, "Unexpected callback\n"); +} + +static void test_tp_group_cancel(void) +{ + TP_CALLBACK_ENVIRON environment; + TP_CLEANUP_GROUP *group; + LONG userdata, userdata2; + HANDLE semaphores[2]; + NTSTATUS status; + TP_WORK *work; + TP_POOL *pool; + DWORD result; + int i; + + semaphores[0] = CreateSemaphoreA(NULL, 0, 1, NULL); + ok(semaphores[0] != NULL, "CreateSemaphoreA failed %u\n", GetLastError()); + semaphores[1] = CreateSemaphoreA(NULL, 0, 1, NULL); + ok(semaphores[1] != NULL, "CreateSemaphoreA failed %u\n", GetLastError()); + + /* allocate new threadpool with only one thread */ + pool = NULL; + status = pTpAllocPool(&pool, NULL); + ok(!status, "TpAllocPool failed with status %x\n", status); + ok(pool != NULL, "expected pool != NULL\n"); + pTpSetPoolMaxThreads(pool, 1); + + /* allocate a cleanup group */ + group = NULL; + status = pTpAllocCleanupGroup(&group); + ok(!status, "TpAllocCleanupGroup failed with status %x\n", status); + ok(group != NULL, "expected pool != NULL\n"); + + /* test execution of cancellation callback */ + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + status = pTpSimpleTryPost(group_cancel_cb, semaphores, &environment); + ok(!status, "TpSimpleTryPost failed with status %x\n", status); + + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + environment.CleanupGroup = group; + environment.CleanupGroupCancelCallback = group_cancel_cleanup_release_cb; + status = pTpSimpleTryPost(unexpected_cb, NULL, &environment); + ok(!status, "TpSimpleTryPost failed with status %x\n", status); + + group_cancel_tid = 0xdeadbeef; + pTpReleaseCleanupGroupMembers(group, TRUE, semaphores); + result = WaitForSingleObject(semaphores[1], 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ok(group_cancel_tid == GetCurrentThreadId(), "expected tid %x, got %x\n", + GetCurrentThreadId(), group_cancel_tid); + + /* test cancellation callback for objects with multiple instances */ + work = NULL; + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + environment.CleanupGroup = group; + environment.CleanupGroupCancelCallback = group_cancel_cleanup_increment_cb; + status = pTpAllocWork(&work, work_cb, &userdata, &environment); + ok(!status, "TpAllocWork failed with status %x\n", status); + ok(work != NULL, "expected work != NULL\n"); + + /* post 10 identical work items at once */ + userdata = userdata2 = 0; + for (i = 0; i < 10; i++) + pTpPostWork(work); + + /* check if we get multiple cancellation callbacks */ + group_cancel_tid = 0xdeadbeef; + pTpReleaseCleanupGroupMembers(group, TRUE, &userdata2); + ok(userdata <= 8, "expected userdata <= 8, got %u\n", userdata); + ok(userdata2 == 1, "expected only one cancellation callback, got %u\n", userdata2); + ok(group_cancel_tid == GetCurrentThreadId(), "expected tid %x, got %x\n", + GetCurrentThreadId(), group_cancel_tid); + + /* cleanup */ + pTpReleaseCleanupGroup(group); + pTpReleasePool(pool); + CloseHandle(semaphores[0]); + CloseHandle(semaphores[1]); +} + +static void CALLBACK instance_semaphore_completion_cb(TP_CALLBACK_INSTANCE *instance, void *userdata) +{ + HANDLE *semaphores = userdata; + trace("Running instance completion callback\n"); + pTpCallbackReleaseSemaphoreOnCompletion(instance, semaphores[0], 1); +} + +static void CALLBACK instance_finalization_cb(TP_CALLBACK_INSTANCE *instance, void *userdata) +{ + HANDLE *semaphores = userdata; + DWORD result; + + trace("Running instance finalization callback\n"); + + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + ReleaseSemaphore(semaphores[1], 1, NULL); +} + +static void test_tp_instance(void) +{ + TP_CALLBACK_ENVIRON environment; + HANDLE semaphores[2]; + NTSTATUS status; + TP_POOL *pool; + DWORD result; + + semaphores[0] = CreateSemaphoreW(NULL, 0, 1, NULL); + ok(semaphores[0] != NULL, "failed to create semaphore\n"); + semaphores[1] = CreateSemaphoreW(NULL, 0, 1, NULL); + ok(semaphores[1] != NULL, "failed to create semaphore\n"); + + /* allocate new threadpool */ + pool = NULL; + status = pTpAllocPool(&pool, NULL); + ok(!status, "TpAllocPool failed with status %x\n", status); + ok(pool != NULL, "expected pool != NULL\n"); + + /* test for TpCallbackReleaseSemaphoreOnCompletion */ + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + status = pTpSimpleTryPost(instance_semaphore_completion_cb, semaphores, &environment); + ok(!status, "TpSimpleTryPost failed with status %x\n", status); + result = WaitForSingleObject(semaphores[0], 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + + /* test for finalization callback */ + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + environment.FinalizationCallback = instance_finalization_cb; + status = pTpSimpleTryPost(instance_semaphore_completion_cb, semaphores, &environment); + ok(!status, "TpSimpleTryPost failed with status %x\n", status); + result = WaitForSingleObject(semaphores[0], 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + result = WaitForSingleObject(semaphores[1], 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + + /* cleanup */ + pTpReleasePool(pool); + CloseHandle(semaphores[0]); + CloseHandle(semaphores[1]); +} + +static void CALLBACK disassociate_cb(TP_CALLBACK_INSTANCE *instance, void *userdata, TP_WORK *work) +{ + HANDLE *semaphores = userdata; + DWORD result; + + trace("Running disassociate callback\n"); + + pTpDisassociateCallback(instance); + result = WaitForSingleObject(semaphores[0], 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ReleaseSemaphore(semaphores[1], 1, NULL); +} + +static void CALLBACK disassociate2_cb(TP_CALLBACK_INSTANCE *instance, void *userdata, TP_WORK *work) +{ + HANDLE *semaphores = userdata; + DWORD result; + + trace("Running disassociate2 callback\n"); + + pTpDisassociateCallback(instance); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + ReleaseSemaphore(semaphores[1], 1, NULL); +} + +static void CALLBACK disassociate3_cb(TP_CALLBACK_INSTANCE *instance, void *userdata) +{ + HANDLE *semaphores = userdata; + DWORD result; + + trace("Running disassociate3 callback\n"); + + pTpDisassociateCallback(instance); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + ReleaseSemaphore(semaphores[1], 1, NULL); +} + +static void test_tp_disassociate(void) +{ + TP_CALLBACK_ENVIRON environment; + TP_CLEANUP_GROUP *group; + HANDLE semaphores[2]; + NTSTATUS status; + TP_POOL *pool; + TP_WORK *work; + DWORD result; + + semaphores[0] = CreateSemaphoreW(NULL, 0, 1, NULL); + ok(semaphores[0] != NULL, "failed to create semaphore\n"); + semaphores[1] = CreateSemaphoreW(NULL, 0, 1, NULL); + ok(semaphores[1] != NULL, "failed to create semaphore\n"); + + /* allocate new threadpool and cleanup group */ + pool = NULL; + status = pTpAllocPool(&pool, NULL); + ok(!status, "TpAllocPool failed with status %x\n", status); + ok(pool != NULL, "expected pool != NULL\n"); + + group = NULL; + status = pTpAllocCleanupGroup(&group); + ok(!status, "TpAllocCleanupGroup failed with status %x\n", status); + ok(group != NULL, "expected pool != NULL\n"); + + /* test TpDisassociateCallback on work objects without group */ + work = NULL; + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + status = pTpAllocWork(&work, disassociate_cb, semaphores, &environment); + ok(!status, "TpAllocWork failed with status %x\n", status); + ok(work != NULL, "expected work != NULL\n"); + + pTpPostWork(work); + pTpWaitForWork(work, FALSE); + + result = WaitForSingleObject(semaphores[1], 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + ReleaseSemaphore(semaphores[0], 1, NULL); + result = WaitForSingleObject(semaphores[1], 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + pTpReleaseWork(work); + + /* test TpDisassociateCallback on work objects with group (1) */ + work = NULL; + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + environment.CleanupGroup = group; + status = pTpAllocWork(&work, disassociate_cb, semaphores, &environment); + ok(!status, "TpAllocWork failed with status %x\n", status); + ok(work != NULL, "expected work != NULL\n"); + + pTpPostWork(work); + pTpWaitForWork(work, FALSE); + + result = WaitForSingleObject(semaphores[1], 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + ReleaseSemaphore(semaphores[0], 1, NULL); + result = WaitForSingleObject(semaphores[1], 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + pTpReleaseCleanupGroupMembers(group, FALSE, NULL); + + /* test TpDisassociateCallback on work objects with group (2) */ + work = NULL; + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + environment.CleanupGroup = group; + status = pTpAllocWork(&work, disassociate2_cb, semaphores, &environment); + ok(!status, "TpAllocWork failed with status %x\n", status); + ok(work != NULL, "expected work != NULL\n"); + + pTpPostWork(work); + pTpReleaseCleanupGroupMembers(group, FALSE, NULL); + + ReleaseSemaphore(semaphores[0], 1, NULL); + result = WaitForSingleObject(semaphores[1], 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + result = WaitForSingleObject(semaphores[0], 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + + /* test TpDisassociateCallback on simple callbacks */ + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + environment.CleanupGroup = group; + status = pTpSimpleTryPost(disassociate3_cb, semaphores, &environment); + ok(!status, "TpSimpleTryPost failed with status %x\n", status); + + pTpReleaseCleanupGroupMembers(group, FALSE, NULL); + + ReleaseSemaphore(semaphores[0], 1, NULL); + result = WaitForSingleObject(semaphores[1], 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + result = WaitForSingleObject(semaphores[0], 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + + /* cleanup */ + pTpReleaseCleanupGroup(group); + pTpReleasePool(pool); + CloseHandle(semaphores[0]); + CloseHandle(semaphores[1]); +} + +static void CALLBACK timer_cb(TP_CALLBACK_INSTANCE *instance, void *userdata, TP_TIMER *timer) +{ + HANDLE semaphore = userdata; + trace("Running timer callback\n"); + ReleaseSemaphore(semaphore, 1, NULL); +} + +static void test_tp_timer(void) +{ + TP_CALLBACK_ENVIRON environment; + DWORD result, ticks; + LARGE_INTEGER when; + HANDLE semaphore; + NTSTATUS status; + TP_TIMER *timer; + TP_POOL *pool; + BOOL success; + int i; + + semaphore = CreateSemaphoreA(NULL, 0, 1, NULL); + ok(semaphore != NULL, "CreateSemaphoreA failed %u\n", GetLastError()); + + /* allocate new threadpool */ + pool = NULL; + status = pTpAllocPool(&pool, NULL); + ok(!status, "TpAllocPool failed with status %x\n", status); + ok(pool != NULL, "expected pool != NULL\n"); + + /* allocate new timer */ + timer = NULL; + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + status = pTpAllocTimer(&timer, timer_cb, semaphore, &environment); + ok(!status, "TpAllocTimer failed with status %x\n", status); + ok(timer != NULL, "expected timer != NULL\n"); + + success = pTpIsTimerSet(timer); + ok(!success, "TpIsTimerSet returned TRUE\n"); + + /* test timer with a relative timeout */ + when.QuadPart = (ULONGLONG)200 * -10000; + pTpSetTimer(timer, &when, 0, 0); + success = pTpIsTimerSet(timer); + ok(success, "TpIsTimerSet returned FALSE\n"); + + pTpWaitForTimer(timer, FALSE); + + result = WaitForSingleObject(semaphore, 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + result = WaitForSingleObject(semaphore, 200); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + success = pTpIsTimerSet(timer); + ok(success, "TpIsTimerSet returned FALSE\n"); + + /* test timer with an absolute timeout */ + NtQuerySystemTime( &when ); + when.QuadPart += (ULONGLONG)200 * 10000; + pTpSetTimer(timer, &when, 0, 0); + success = pTpIsTimerSet(timer); + ok(success, "TpIsTimerSet returned FALSE\n"); + + pTpWaitForTimer(timer, FALSE); + + result = WaitForSingleObject(semaphore, 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + result = WaitForSingleObject(semaphore, 200); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + success = pTpIsTimerSet(timer); + ok(success, "TpIsTimerSet returned FALSE\n"); + + /* test timer with zero timeout */ + when.QuadPart = 0; + pTpSetTimer(timer, &when, 0, 0); + success = pTpIsTimerSet(timer); + ok(success, "TpIsTimerSet returned FALSE\n"); + + pTpWaitForTimer(timer, FALSE); + + result = WaitForSingleObject(semaphore, 50); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + success = pTpIsTimerSet(timer); + ok(success, "TpIsTimerSet returned FALSE\n"); + + /* unset the timer */ + pTpSetTimer(timer, NULL, 0, 0); + success = pTpIsTimerSet(timer); + ok(!success, "TpIsTimerSet returned TRUE\n"); + pTpWaitForTimer(timer, TRUE); + + pTpReleaseTimer(timer); + CloseHandle(semaphore); + + semaphore = CreateSemaphoreA(NULL, 0, 3, NULL); + ok(semaphore != NULL, "CreateSemaphoreA failed %u\n", GetLastError()); + + /* allocate a new timer */ + timer = NULL; + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + status = pTpAllocTimer(&timer, timer_cb, semaphore, &environment); + ok(!status, "TpAllocTimer failed with status %x\n", status); + ok(timer != NULL, "expected timer != NULL\n"); + + /* test a relative timeout repeated periodically */ + when.QuadPart = (ULONGLONG)200 * -10000; + pTpSetTimer(timer, &when, 200, 0); + success = pTpIsTimerSet(timer); + ok(success, "TpIsTimerSet returned FALSE\n"); + + /* wait until the timer was triggered three times */ + ticks = GetTickCount(); + for (i = 0; i < 3; i++) + { + result = WaitForSingleObject(semaphore, 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + } + ticks = GetTickCount() - ticks; + ok(ticks >= 500 && (ticks <= 700 || broken(ticks <= 750)) /* Win 7 */, + "expected approximately 600 ticks, got %u\n", ticks); + + /* unset the timer */ + pTpSetTimer(timer, NULL, 0, 0); + success = pTpIsTimerSet(timer); + ok(!success, "TpIsTimerSet returned TRUE\n"); + pTpWaitForTimer(timer, TRUE); + + /* cleanup */ + pTpReleaseTimer(timer); + pTpReleasePool(pool); + CloseHandle(semaphore); +} + +struct window_length_info +{ + HANDLE semaphore; + DWORD ticks; +}; + +static void CALLBACK window_length_cb(TP_CALLBACK_INSTANCE *instance, void *userdata, TP_TIMER *timer) +{ + struct window_length_info *info = userdata; + trace("Running window length callback\n"); + info->ticks = GetTickCount(); + ReleaseSemaphore(info->semaphore, 1, NULL); +} + +static void test_tp_window_length(void) +{ + struct window_length_info info1, info2; + TP_CALLBACK_ENVIRON environment; + TP_TIMER *timer1, *timer2; + LARGE_INTEGER when; + HANDLE semaphore; + NTSTATUS status; + TP_POOL *pool; + DWORD result; + + semaphore = CreateSemaphoreA(NULL, 0, 2, NULL); + ok(semaphore != NULL, "CreateSemaphoreA failed %u\n", GetLastError()); + + /* allocate new threadpool */ + pool = NULL; + status = pTpAllocPool(&pool, NULL); + ok(!status, "TpAllocPool failed with status %x\n", status); + ok(pool != NULL, "expected pool != NULL\n"); + + /* allocate two identical timers */ + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + + timer1 = NULL; + info1.semaphore = semaphore; + status = pTpAllocTimer(&timer1, window_length_cb, &info1, &environment); + ok(!status, "TpAllocTimer failed with status %x\n", status); + ok(timer1 != NULL, "expected timer1 != NULL\n"); + + timer2 = NULL; + info2.semaphore = semaphore; + status = pTpAllocTimer(&timer2, window_length_cb, &info2, &environment); + ok(!status, "TpAllocTimer failed with status %x\n", status); + ok(timer2 != NULL, "expected timer2 != NULL\n"); + + /* choose parameters so that timers are not merged */ + info1.ticks = 0; + info2.ticks = 0; + + NtQuerySystemTime( &when ); + when.QuadPart += (ULONGLONG)250 * 10000; + pTpSetTimer(timer2, &when, 0, 0); + Sleep(50); + when.QuadPart -= (ULONGLONG)150 * 10000; + pTpSetTimer(timer1, &when, 0, 75); + + result = WaitForSingleObject(semaphore, 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + result = WaitForSingleObject(semaphore, 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ok(info1.ticks != 0 && info2.ticks != 0, "expected that ticks are nonzero\n"); + ok(info2.ticks >= info1.ticks + 75 || broken(info2.ticks < info1.ticks + 75) /* Win 2008 */, + "expected that timers are not merged\n"); + + /* timers will be merged */ + info1.ticks = 0; + info2.ticks = 0; + + NtQuerySystemTime( &when ); + when.QuadPart += (ULONGLONG)250 * 10000; + pTpSetTimer(timer2, &when, 0, 0); + Sleep(50); + when.QuadPart -= (ULONGLONG)150 * 10000; + pTpSetTimer(timer1, &when, 0, 200); + + result = WaitForSingleObject(semaphore, 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + result = WaitForSingleObject(semaphore, 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ok(info1.ticks != 0 && info2.ticks != 0, "expected that ticks are nonzero\n"); + ok(info2.ticks >= info1.ticks - 50 && info2.ticks <= info1.ticks + 50, + "expected that timers are merged\n"); + + /* on Windows the timers also get merged in this case */ + info1.ticks = 0; + info2.ticks = 0; + + NtQuerySystemTime( &when ); + when.QuadPart += (ULONGLONG)100 * 10000; + pTpSetTimer(timer1, &when, 0, 200); + Sleep(50); + when.QuadPart += (ULONGLONG)150 * 10000; + pTpSetTimer(timer2, &when, 0, 0); + + result = WaitForSingleObject(semaphore, 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + result = WaitForSingleObject(semaphore, 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ok(info1.ticks != 0 && info2.ticks != 0, "expected that ticks are nonzero\n"); + todo_wine + ok(info2.ticks >= info1.ticks - 50 && info2.ticks <= info1.ticks + 50, + "expected that timers are merged\n"); + + /* cleanup */ + pTpReleaseTimer(timer1); + pTpReleaseTimer(timer2); + pTpReleasePool(pool); + CloseHandle(semaphore); +} + +struct wait_info +{ + HANDLE semaphore; + LONG userdata; +}; + +static void CALLBACK wait_cb(TP_CALLBACK_INSTANCE *instance, void *userdata, + TP_WAIT *wait, TP_WAIT_RESULT result) +{ + struct wait_info *info = userdata; + trace("Running wait callback\n"); + + if (result == WAIT_OBJECT_0) + InterlockedIncrement(&info->userdata); + else if (result == WAIT_TIMEOUT) + InterlockedExchangeAdd(&info->userdata, 0x10000); + else + ok(0, "unexpected result %u\n", result); + ReleaseSemaphore(info->semaphore, 1, NULL); +} + +static void test_tp_wait(void) +{ + TP_CALLBACK_ENVIRON environment; + TP_WAIT *wait1, *wait2; + struct wait_info info; + HANDLE semaphores[2]; + LARGE_INTEGER when; + NTSTATUS status; + TP_POOL *pool; + DWORD result; + + semaphores[0] = CreateSemaphoreW(NULL, 0, 2, NULL); + ok(semaphores[0] != NULL, "failed to create semaphore\n"); + semaphores[1] = CreateSemaphoreW(NULL, 0, 1, NULL); + ok(semaphores[1] != NULL, "failed to create semaphore\n"); + info.semaphore = semaphores[0]; + + /* allocate new threadpool */ + pool = NULL; + status = pTpAllocPool(&pool, NULL); + ok(!status, "TpAllocPool failed with status %x\n", status); + ok(pool != NULL, "expected pool != NULL\n"); + + /* allocate new wait items */ + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + + wait1 = NULL; + status = pTpAllocWait(&wait1, wait_cb, &info, &environment); + ok(!status, "TpAllocWait failed with status %x\n", status); + ok(wait1 != NULL, "expected wait1 != NULL\n"); + + wait2 = NULL; + status = pTpAllocWait(&wait2, wait_cb, &info, &environment); + ok(!status, "TpAllocWait failed with status %x\n", status); + ok(wait2 != NULL, "expected wait2 != NULL\n"); + + /* infinite timeout, signal the semaphore immediately */ + info.userdata = 0; + pTpSetWait(wait1, semaphores[1], NULL); + ReleaseSemaphore(semaphores[1], 1, NULL); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ok(info.userdata == 1, "expected info.userdata = 1, got %u\n", info.userdata); + result = WaitForSingleObject(semaphores[1], 0); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + + /* relative timeout, no event */ + info.userdata = 0; + when.QuadPart = (ULONGLONG)200 * -10000; + pTpSetWait(wait1, semaphores[1], &when); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + ok(info.userdata == 0, "expected info.userdata = 0, got %u\n", info.userdata); + result = WaitForSingleObject(semaphores[0], 200); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ok(info.userdata == 0x10000, "expected info.userdata = 0x10000, got %u\n", info.userdata); + result = WaitForSingleObject(semaphores[1], 0); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + + /* repeat test with call to TpWaitForWait(..., TRUE) */ + info.userdata = 0; + when.QuadPart = (ULONGLONG)200 * -10000; + pTpSetWait(wait1, semaphores[1], &when); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + pTpWaitForWait(wait1, TRUE); + ok(info.userdata == 0, "expected info.userdata = 0, got %u\n", info.userdata); + result = WaitForSingleObject(semaphores[0], 200); + ok(result == WAIT_OBJECT_0 || broken(result == WAIT_TIMEOUT) /* Win 8 */, + "WaitForSingleObject returned %u\n", result); + if (result == WAIT_OBJECT_0) + ok(info.userdata == 0x10000, "expected info.userdata = 0x10000, got %u\n", info.userdata); + else + ok(info.userdata == 0, "expected info.userdata = 0, got %u\n", info.userdata); + result = WaitForSingleObject(semaphores[1], 0); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + + /* relative timeout, with event */ + info.userdata = 0; + when.QuadPart = (ULONGLONG)200 * -10000; + pTpSetWait(wait1, semaphores[1], &when); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + ok(info.userdata == 0, "expected info.userdata = 0, got %u\n", info.userdata); + ReleaseSemaphore(semaphores[1], 1, NULL); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ok(info.userdata == 1, "expected info.userdata = 1, got %u\n", info.userdata); + result = WaitForSingleObject(semaphores[1], 0); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + + /* repeat test with call to TpWaitForWait(..., TRUE) */ + info.userdata = 0; + when.QuadPart = (ULONGLONG)200 * -10000; + pTpSetWait(wait1, semaphores[1], &when); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + pTpWaitForWait(wait1, TRUE); + ok(info.userdata == 0, "expected info.userdata = 0, got %u\n", info.userdata); + ReleaseSemaphore(semaphores[1], 1, NULL); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_OBJECT_0 || broken(result == WAIT_TIMEOUT) /* Win 8 */, + "WaitForSingleObject returned %u\n", result); + if (result == WAIT_OBJECT_0) + { + ok(info.userdata == 1, "expected info.userdata = 1, got %u\n", info.userdata); + result = WaitForSingleObject(semaphores[1], 0); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + } + else + { + ok(info.userdata == 0, "expected info.userdata = 0, got %u\n", info.userdata); + result = WaitForSingleObject(semaphores[1], 0); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + } + + /* absolute timeout, no event */ + info.userdata = 0; + NtQuerySystemTime( &when ); + when.QuadPart += (ULONGLONG)200 * 10000; + pTpSetWait(wait1, semaphores[1], &when); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + ok(info.userdata == 0, "expected info.userdata = 0, got %u\n", info.userdata); + result = WaitForSingleObject(semaphores[0], 200); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ok(info.userdata == 0x10000, "expected info.userdata = 0x10000, got %u\n", info.userdata); + result = WaitForSingleObject(semaphores[1], 0); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + + /* absolute timeout, with event */ + info.userdata = 0; + NtQuerySystemTime( &when ); + when.QuadPart += (ULONGLONG)200 * 10000; + pTpSetWait(wait1, semaphores[1], &when); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + ok(info.userdata == 0, "expected info.userdata = 0, got %u\n", info.userdata); + ReleaseSemaphore(semaphores[1], 1, NULL); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ok(info.userdata == 1, "expected info.userdata = 1, got %u\n", info.userdata); + result = WaitForSingleObject(semaphores[1], 0); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + + /* test timeout of zero */ + info.userdata = 0; + when.QuadPart = 0; + pTpSetWait(wait1, semaphores[1], &when); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ok(info.userdata == 0x10000, "expected info.userdata = 0x10000, got %u\n", info.userdata); + result = WaitForSingleObject(semaphores[1], 0); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + + /* cancel a pending wait */ + info.userdata = 0; + when.QuadPart = (ULONGLONG)250 * -10000; + pTpSetWait(wait1, semaphores[1], &when); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + pTpSetWait(wait1, NULL, (void *)0xdeadbeef); + Sleep(50); + ReleaseSemaphore(semaphores[1], 1, NULL); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + ok(info.userdata == 0, "expected info.userdata = 0, got %u\n", info.userdata); + result = WaitForSingleObject(semaphores[1], 0); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + + /* test with INVALID_HANDLE_VALUE */ + info.userdata = 0; + when.QuadPart = 0; + pTpSetWait(wait1, INVALID_HANDLE_VALUE, &when); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ok(info.userdata == 0x10000, "expected info.userdata = 0x10000, got %u\n", info.userdata); + + /* cancel a pending wait with INVALID_HANDLE_VALUE */ + info.userdata = 0; + when.QuadPart = (ULONGLONG)250 * -10000; + pTpSetWait(wait1, semaphores[1], &when); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + when.QuadPart = 0; + pTpSetWait(wait1, INVALID_HANDLE_VALUE, &when); + Sleep(50); + ReleaseSemaphore(semaphores[1], 1, NULL); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ok(info.userdata == 0x10000, "expected info.userdata = 0x10000, got %u\n", info.userdata); + result = WaitForSingleObject(semaphores[1], 0); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + + CloseHandle(semaphores[1]); + semaphores[1] = CreateSemaphoreW(NULL, 0, 2, NULL); + ok(semaphores[1] != NULL, "failed to create semaphore\n"); + + /* add two wait objects with the same semaphore */ + info.userdata = 0; + pTpSetWait(wait1, semaphores[1], NULL); + pTpSetWait(wait2, semaphores[1], NULL); + Sleep(50); + ReleaseSemaphore(semaphores[1], 1, NULL); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + ok(info.userdata == 1, "expected info.userdata = 1, got %u\n", info.userdata); + result = WaitForSingleObject(semaphores[1], 0); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + + /* repeat test above with release count 2 */ + info.userdata = 0; + pTpSetWait(wait1, semaphores[1], NULL); + pTpSetWait(wait2, semaphores[1], NULL); + Sleep(50); + result = ReleaseSemaphore(semaphores[1], 2, NULL); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + result = WaitForSingleObject(semaphores[0], 100); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ok(info.userdata == 2, "expected info.userdata = 2, got %u\n", info.userdata); + result = WaitForSingleObject(semaphores[1], 0); + ok(result == WAIT_TIMEOUT, "WaitForSingleObject returned %u\n", result); + /* cleanup */ + pTpReleaseWait(wait1); + pTpReleaseWait(wait2); + pTpReleasePool(pool); + CloseHandle(semaphores[0]); + CloseHandle(semaphores[1]); +} + +static struct +{ + HANDLE semaphore; + DWORD result; +} multi_wait_info; + +static void CALLBACK multi_wait_cb(TP_CALLBACK_INSTANCE *instance, void *userdata, TP_WAIT *wait, TP_WAIT_RESULT result) +{ + DWORD index = (DWORD)(DWORD_PTR)userdata; + + if (result == WAIT_OBJECT_0) + multi_wait_info.result = index; + else if (result == WAIT_TIMEOUT) + multi_wait_info.result = 0x10000 | index; + else + ok(0, "unexpected result %u\n", result); + ReleaseSemaphore(multi_wait_info.semaphore, 1, NULL); +} + +static void test_tp_multi_wait(void) +{ + TP_CALLBACK_ENVIRON environment; + HANDLE semaphores[512]; + TP_WAIT *waits[512]; + LARGE_INTEGER when; + HANDLE semaphore; + NTSTATUS status; + TP_POOL *pool; + DWORD result; + int i; + + semaphore = CreateSemaphoreW(NULL, 0, 512, NULL); + ok(semaphore != NULL, "failed to create semaphore\n"); + multi_wait_info.semaphore = semaphore; + + /* allocate new threadpool */ + pool = NULL; + status = pTpAllocPool(&pool, NULL); + ok(!status, "TpAllocPool failed with status %x\n", status); + ok(pool != NULL, "expected pool != NULL\n"); + + memset(&environment, 0, sizeof(environment)); + environment.Version = 1; + environment.Pool = pool; + + /* create semaphores and corresponding wait objects */ + for (i = 0; i < sizeof(semaphores)/sizeof(semaphores[0]); i++) + { + semaphores[i] = CreateSemaphoreW(NULL, 0, 1, NULL); + ok(semaphores[i] != NULL, "failed to create semaphore %i\n", i); + + waits[i] = NULL; + status = pTpAllocWait(&waits[i], multi_wait_cb, (void *)(DWORD_PTR)i, &environment); + ok(!status, "TpAllocWait failed with status %x\n", status); + ok(waits[i] != NULL, "expected waits[%d] != NULL\n", i); + + pTpSetWait(waits[i], semaphores[i], NULL); + } + + /* release all semaphores and wait for callback */ + for (i = 0; i < sizeof(semaphores)/sizeof(semaphores[0]); i++) + { + multi_wait_info.result = 0; + ReleaseSemaphore(semaphores[i], 1, NULL); + + result = WaitForSingleObject(semaphore, 100); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ok(multi_wait_info.result == i, "expected result %d, got %u\n", i, multi_wait_info.result); + + pTpSetWait(waits[i], semaphores[i], NULL); + } + + /* repeat the same test in reverse order */ + for (i = sizeof(semaphores)/sizeof(semaphores[0]) - 1; i >= 0; i--) + { + multi_wait_info.result = 0; + ReleaseSemaphore(semaphores[i], 1, NULL); + + result = WaitForSingleObject(semaphore, 100); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + ok(multi_wait_info.result == i, "expected result %d, got %u\n", i, multi_wait_info.result); + + pTpSetWait(waits[i], semaphores[i], NULL); + } + + /* test timeout of wait objects */ + multi_wait_info.result = 0; + for (i = 0; i < sizeof(semaphores)/sizeof(semaphores[0]); i++) + { + when.QuadPart = (ULONGLONG)50 * -10000; + pTpSetWait(waits[i], semaphores[i], &when); + } + + for (i = 0; i < sizeof(semaphores)/sizeof(semaphores[0]); i++) + { + result = WaitForSingleObject(semaphore, 150); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + } + + ok(multi_wait_info.result >> 16, "expected multi_wait_info.result >> 16 != 0\n"); + + /* destroy the wait objects and semaphores while waiting */ + for (i = 0; i < sizeof(semaphores)/sizeof(semaphores[0]); i++) + { + pTpSetWait(waits[i], semaphores[i], NULL); + } + + Sleep(50); + + for (i = 0; i < sizeof(semaphores)/sizeof(semaphores[0]); i++) + { + pTpReleaseWait(waits[i]); + NtClose(semaphores[i]); + } + pTpReleasePool(pool); CloseHandle(semaphore); } @@ -124,4 +1296,13 @@ return; test_tp_simple(); + test_tp_work(); + test_tp_work_scheduler(); + test_tp_group_cancel(); + test_tp_instance(); + test_tp_disassociate(); + test_tp_timer(); + test_tp_window_length(); + test_tp_wait(); + test_tp_multi_wait(); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/ntdll/threadpool.c wine-staging-1.7.47~ubuntu14.10.1/dlls/ntdll/threadpool.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/ntdll/threadpool.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/ntdll/threadpool.c 2015-07-12 05:36:18.000000000 +0000 @@ -2,6 +2,7 @@ * Thread pooling * * Copyright (c) 2006 Robert Shearman + * Copyright (c) 2014-2015 Sebastian Lackner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -37,6 +38,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(threadpool); +/* + * Old thread pooling API + */ + #define OLD_WORKER_TIMEOUT 30000 /* 30 seconds */ #define EXPIRE_NEVER (~(ULONGLONG)0) #define TIMER_QUEUE_MAGIC 0x516d6954 /* TimQ */ @@ -72,14 +77,14 @@ { 0, 0, &old_threadpool.threadpool_cs, { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, - 0, 0, { (DWORD_PTR)(__FILE__ ": threadpool_cs") } + 0, 0, { (DWORD_PTR)(__FILE__ ": threadpool_cs") } }; static RTL_CRITICAL_SECTION_DEBUG critsect_compl_debug = { 0, 0, &old_threadpool.threadpool_compl_cs, { &critsect_compl_debug.ProcessLocksList, &critsect_compl_debug.ProcessLocksList }, - 0, 0, { (DWORD_PTR)(__FILE__ ": threadpool_compl_cs") } + 0, 0, { (DWORD_PTR)(__FILE__ ": threadpool_compl_cs") } }; struct work_item @@ -127,6 +132,228 @@ HANDLE thread; }; +/* + * Object-oriented thread pooling API + */ + +#define THREADPOOL_WORKER_TIMEOUT 5000 +#define MAXIMUM_WAITQUEUE_OBJECTS (MAXIMUM_WAIT_OBJECTS - 1) + +/* internal threadpool representation */ +struct threadpool +{ + LONG refcount; + LONG objcount; + BOOL shutdown; + CRITICAL_SECTION cs; + /* pool of work items, locked via .cs */ + struct list pool; + RTL_CONDITION_VARIABLE update_event; + /* information about worker threads, locked via .cs */ + int max_workers; + int min_workers; + int num_workers; + int num_busy_workers; +}; + +enum threadpool_objtype +{ + TP_OBJECT_TYPE_SIMPLE, + TP_OBJECT_TYPE_WORK, + TP_OBJECT_TYPE_TIMER, + TP_OBJECT_TYPE_WAIT +}; + +/* internal threadpool object representation */ +struct threadpool_object +{ + LONG refcount; + BOOL shutdown; + /* read-only information */ + enum threadpool_objtype type; + struct threadpool *pool; + struct threadpool_group *group; + PVOID userdata; + PTP_CLEANUP_GROUP_CANCEL_CALLBACK group_cancel_callback; + PTP_SIMPLE_CALLBACK finalization_callback; + BOOL may_run_long; + HMODULE race_dll; + /* information about the group, locked via .group->cs */ + struct list group_entry; + BOOL is_group_member; + /* information about the pool, locked via .pool->cs */ + struct list pool_entry; + RTL_CONDITION_VARIABLE finished_event; + RTL_CONDITION_VARIABLE group_finished_event; + LONG num_pending_callbacks; + LONG num_running_callbacks; + LONG num_associated_callbacks; + /* arguments for callback */ + union + { + struct + { + PTP_SIMPLE_CALLBACK callback; + } simple; + struct + { + PTP_WORK_CALLBACK callback; + } work; + struct + { + PTP_TIMER_CALLBACK callback; + /* information about the timer, locked via timerqueue.cs */ + BOOL timer_initialized; + BOOL timer_pending; + struct list timer_entry; + BOOL timer_set; + ULONGLONG timeout; + LONG period; + LONG window_length; + } timer; + struct + { + PTP_WAIT_CALLBACK callback; + LONG signaled; + /* information about the wait object, locked via waitqueue.cs */ + struct waitqueue_bucket *bucket; + BOOL wait_pending; + struct list wait_entry; + ULONGLONG timeout; + HANDLE handle; + } wait; + } u; +}; + +/* internal threadpool instance representation */ +struct threadpool_instance +{ + struct threadpool_object *object; + DWORD threadid; + BOOL associated; + BOOL may_run_long; + struct + { + CRITICAL_SECTION *critical_section; + HANDLE mutex; + HANDLE semaphore; + LONG semaphore_count; + HANDLE event; + HMODULE library; + } cleanup; +}; + +/* internal threadpool group representation */ +struct threadpool_group +{ + LONG refcount; + BOOL shutdown; + CRITICAL_SECTION cs; + /* list of group members, locked via .cs */ + struct list members; +}; + +/* global timerqueue object */ +static RTL_CRITICAL_SECTION_DEBUG timerqueue_debug; + +static struct +{ + CRITICAL_SECTION cs; + LONG objcount; + BOOL thread_running; + struct list pending_timers; + RTL_CONDITION_VARIABLE update_event; +} +timerqueue = +{ + { &timerqueue_debug, -1, 0, 0, 0, 0 }, /* cs */ + 0, /* objcount */ + FALSE, /* thread_running */ + LIST_INIT( timerqueue.pending_timers ), /* pending_timers */ + RTL_CONDITION_VARIABLE_INIT /* update_event */ +}; + +static RTL_CRITICAL_SECTION_DEBUG timerqueue_debug = +{ + 0, 0, &timerqueue.cs, + { &timerqueue_debug.ProcessLocksList, &timerqueue_debug.ProcessLocksList }, + 0, 0, { (DWORD_PTR)(__FILE__ ": timerqueue.cs") } +}; + +/* global waitqueue object */ +static RTL_CRITICAL_SECTION_DEBUG waitqueue_debug; + +static struct +{ + CRITICAL_SECTION cs; + LONG num_buckets; + struct list buckets; +} +waitqueue = +{ + { &waitqueue_debug, -1, 0, 0, 0, 0 }, /* cs */ + 0, /* num_buckets */ + LIST_INIT( waitqueue.buckets ) /* buckets */ +}; + +static RTL_CRITICAL_SECTION_DEBUG waitqueue_debug = +{ + 0, 0, &waitqueue.cs, + { &waitqueue_debug.ProcessLocksList, &waitqueue_debug.ProcessLocksList }, + 0, 0, { (DWORD_PTR)(__FILE__ ": waitqueue.cs") } +}; + +struct waitqueue_bucket +{ + struct list bucket_entry; + LONG objcount; + struct list reserved; + struct list waiting; + HANDLE update_event; +}; + +static inline struct threadpool *impl_from_TP_POOL( TP_POOL *pool ) +{ + return (struct threadpool *)pool; +} + +static inline struct threadpool_object *impl_from_TP_WORK( TP_WORK *work ) +{ + struct threadpool_object *object = (struct threadpool_object *)work; + assert( object->type == TP_OBJECT_TYPE_WORK ); + return object; +} + +static inline struct threadpool_object *impl_from_TP_TIMER( TP_TIMER *timer ) +{ + struct threadpool_object *object = (struct threadpool_object *)timer; + assert( object->type == TP_OBJECT_TYPE_TIMER ); + return object; +} + +static inline struct threadpool_object *impl_from_TP_WAIT( TP_WAIT *wait ) +{ + struct threadpool_object *object = (struct threadpool_object *)wait; + assert( object->type == TP_OBJECT_TYPE_WAIT ); + return object; +} + +static inline struct threadpool_group *impl_from_TP_CLEANUP_GROUP( TP_CLEANUP_GROUP *group ) +{ + return (struct threadpool_group *)group; +} + +static inline struct threadpool_instance *impl_from_TP_CALLBACK_INSTANCE( TP_CALLBACK_INSTANCE *instance ) +{ + return (struct threadpool_instance *)instance; +} + +static void CALLBACK threadpool_worker_proc( void *param ); +static void tp_object_submit( struct threadpool_object *object, BOOL signaled ); +static void tp_object_shutdown( struct threadpool_object *object ); +static BOOL tp_object_release( struct threadpool_object *object ); +static struct threadpool *default_threadpool = NULL; + static inline LONG interlocked_inc( PLONG dest ) { return interlocked_xchg_add( dest, 1 ) + 1; @@ -741,6 +968,7 @@ RtlDeleteCriticalSection(&q->cs); q->magic = 0; RtlFreeHeap(GetProcessHeap(), 0, q); + RtlExitUserThread( 0 ); } static void queue_destroy_timer(struct queue_timer *t) @@ -1044,3 +1272,1742 @@ return status; } + +/*********************************************************************** + * timerqueue_thread_proc (internal) + */ +static void CALLBACK timerqueue_thread_proc( void *param ) +{ + ULONGLONG timeout_lower, timeout_upper, new_timeout; + struct threadpool_object *other_timer; + LARGE_INTEGER now, timeout; + struct list *ptr; + + TRACE( "starting timer queue thread\n" ); + + RtlEnterCriticalSection( &timerqueue.cs ); + for (;;) + { + NtQuerySystemTime( &now ); + + /* Check for expired timers. */ + while ((ptr = list_head( &timerqueue.pending_timers ))) + { + struct threadpool_object *timer = LIST_ENTRY( ptr, struct threadpool_object, u.timer.timer_entry ); + assert( timer->type == TP_OBJECT_TYPE_TIMER ); + assert( timer->u.timer.timer_pending ); + if (timer->u.timer.timeout > now.QuadPart) + break; + + /* Queue a new callback in one of the worker threads. */ + list_remove( &timer->u.timer.timer_entry ); + timer->u.timer.timer_pending = FALSE; + tp_object_submit( timer, FALSE ); + + /* Insert the timer back into the queue, except its marked for shutdown. */ + if (timer->u.timer.period && !timer->shutdown) + { + timer->u.timer.timeout += (ULONGLONG)timer->u.timer.period * 10000; + if (timer->u.timer.timeout <= now.QuadPart) + timer->u.timer.timeout = now.QuadPart + 1; + + LIST_FOR_EACH_ENTRY( other_timer, &timerqueue.pending_timers, + struct threadpool_object, u.timer.timer_entry ) + { + assert( other_timer->type == TP_OBJECT_TYPE_TIMER ); + if (timer->u.timer.timeout < other_timer->u.timer.timeout) + break; + } + list_add_before( &other_timer->u.timer.timer_entry, &timer->u.timer.timer_entry ); + timer->u.timer.timer_pending = TRUE; + } + } + + timeout_lower = TIMEOUT_INFINITE; + timeout_upper = TIMEOUT_INFINITE; + + /* Determine next timeout and use the window length to optimize wakeup times. */ + LIST_FOR_EACH_ENTRY( other_timer, &timerqueue.pending_timers, + struct threadpool_object, u.timer.timer_entry ) + { + assert( other_timer->type == TP_OBJECT_TYPE_TIMER ); + if (other_timer->u.timer.timeout >= timeout_upper) + break; + + timeout_lower = other_timer->u.timer.timeout; + new_timeout = timeout_lower + (ULONGLONG)other_timer->u.timer.window_length * 10000; + if (new_timeout < timeout_upper) + timeout_upper = new_timeout; + } + + /* Wait for timer update events or until the next timer expires. */ + if (timerqueue.objcount) + { + timeout.QuadPart = timeout_lower; + RtlSleepConditionVariableCS( &timerqueue.update_event, &timerqueue.cs, &timeout ); + continue; + } + + /* All timers have been destroyed, if no new timers are created + * within some amount of time, then we can shutdown this thread. */ + timeout.QuadPart = (ULONGLONG)THREADPOOL_WORKER_TIMEOUT * -10000; + if (RtlSleepConditionVariableCS( &timerqueue.update_event, &timerqueue.cs, + &timeout ) == STATUS_TIMEOUT && !timerqueue.objcount) + { + break; + } + } + + timerqueue.thread_running = FALSE; + RtlLeaveCriticalSection( &timerqueue.cs ); + + TRACE( "terminating timer queue thread\n" ); + RtlExitUserThread( 0 ); +} + +/*********************************************************************** + * tp_timerqueue_lock (internal) + * + * Acquires a lock on the global timerqueue. When the lock is acquired + * successfully, it is guaranteed that the timer thread is running. + */ +static NTSTATUS tp_timerqueue_lock( struct threadpool_object *timer ) +{ + NTSTATUS status = STATUS_SUCCESS; + assert( timer->type == TP_OBJECT_TYPE_TIMER ); + + timer->u.timer.timer_initialized = FALSE; + timer->u.timer.timer_pending = FALSE; + timer->u.timer.timer_set = FALSE; + timer->u.timer.timeout = 0; + timer->u.timer.period = 0; + timer->u.timer.window_length = 0; + + RtlEnterCriticalSection( &timerqueue.cs ); + + /* Make sure that the timerqueue thread is running. */ + if (!timerqueue.thread_running) + { + HANDLE thread; + status = RtlCreateUserThread( GetCurrentProcess(), NULL, FALSE, NULL, 0, 0, + timerqueue_thread_proc, NULL, &thread, NULL ); + if (status == STATUS_SUCCESS) + { + timerqueue.thread_running = TRUE; + NtClose( thread ); + } + } + + if (status == STATUS_SUCCESS) + { + timer->u.timer.timer_initialized = TRUE; + timerqueue.objcount++; + } + + RtlLeaveCriticalSection( &timerqueue.cs ); + return status; +} + +/*********************************************************************** + * tp_timerqueue_unlock (internal) + * + * Releases a lock on the global timerqueue. + */ +static void tp_timerqueue_unlock( struct threadpool_object *timer ) +{ + assert( timer->type == TP_OBJECT_TYPE_TIMER ); + + RtlEnterCriticalSection( &timerqueue.cs ); + if (timer->u.timer.timer_initialized) + { + /* If timer was pending, remove it. */ + if (timer->u.timer.timer_pending) + { + list_remove( &timer->u.timer.timer_entry ); + timer->u.timer.timer_pending = FALSE; + } + + /* If the last timer object was destroyed, then wake up the thread. */ + if (!--timerqueue.objcount) + { + assert( list_empty( &timerqueue.pending_timers ) ); + RtlWakeAllConditionVariable( &timerqueue.update_event ); + } + + timer->u.timer.timer_initialized = FALSE; + } + RtlLeaveCriticalSection( &timerqueue.cs ); +} + +/*********************************************************************** + * waitqueue_thread_proc (internal) + */ +static void CALLBACK waitqueue_thread_proc( void *param ) +{ + struct threadpool_object *objects[MAXIMUM_WAITQUEUE_OBJECTS]; + HANDLE handles[MAXIMUM_WAITQUEUE_OBJECTS + 1]; + struct waitqueue_bucket *bucket = param; + struct threadpool_object *wait, *next; + LARGE_INTEGER now, timeout; + DWORD num_handles; + NTSTATUS status; + + TRACE( "starting wait queue thread\n" ); + + RtlEnterCriticalSection( &waitqueue.cs ); + + for (;;) + { + NtQuerySystemTime( &now ); + timeout.QuadPart = TIMEOUT_INFINITE; + num_handles = 0; + + LIST_FOR_EACH_ENTRY_SAFE( wait, next, &bucket->waiting, struct threadpool_object, + u.wait.wait_entry ) + { + assert( wait->type == TP_OBJECT_TYPE_WAIT ); + if (wait->u.wait.timeout <= now.QuadPart) + { + /* Wait object timed out. */ + list_remove( &wait->u.wait.wait_entry ); + list_add_tail( &bucket->reserved, &wait->u.wait.wait_entry ); + tp_object_submit( wait, FALSE ); + } + else + { + if (wait->u.wait.timeout < timeout.QuadPart) + timeout.QuadPart = wait->u.wait.timeout; + + assert( num_handles < MAXIMUM_WAITQUEUE_OBJECTS ); + interlocked_inc( &wait->refcount ); + objects[num_handles] = wait; + handles[num_handles] = wait->u.wait.handle; + num_handles++; + } + } + + if (!bucket->objcount) + { + /* All wait objects have been destroyed, if no new wait objects are created + * within some amount of time, then we can shutdown this thread. */ + assert( num_handles == 0 ); + RtlLeaveCriticalSection( &waitqueue.cs ); + timeout.QuadPart = (ULONGLONG)THREADPOOL_WORKER_TIMEOUT * -10000; + status = NtWaitForMultipleObjects( 1, &bucket->update_event, TRUE, FALSE, &timeout ); + RtlEnterCriticalSection( &waitqueue.cs ); + + if (status == STATUS_TIMEOUT && !bucket->objcount) + break; + } + else + { + handles[num_handles] = bucket->update_event; + RtlLeaveCriticalSection( &waitqueue.cs ); + status = NtWaitForMultipleObjects( num_handles + 1, handles, TRUE, FALSE, &timeout ); + RtlEnterCriticalSection( &waitqueue.cs ); + + if (status >= STATUS_WAIT_0 && status < STATUS_WAIT_0 + num_handles) + { + wait = objects[status - STATUS_WAIT_0]; + assert( wait->type == TP_OBJECT_TYPE_WAIT ); + if (wait->u.wait.bucket) + { + /* Wait object signaled. */ + assert( wait->u.wait.bucket == bucket ); + list_remove( &wait->u.wait.wait_entry ); + list_add_tail( &bucket->reserved, &wait->u.wait.wait_entry ); + tp_object_submit( wait, TRUE ); + } + else + ERR("wait object %p triggered while object was destroyed\n", wait); + } + + /* Release temporary references to wait objects. */ + while (num_handles) + { + wait = objects[--num_handles]; + assert( wait->type == TP_OBJECT_TYPE_WAIT ); + tp_object_release( wait ); + } + } + + /* Try to merge bucket with other threads. */ + if (waitqueue.num_buckets > 1 && bucket->objcount && + bucket->objcount <= MAXIMUM_WAITQUEUE_OBJECTS * 1 / 3) + { + struct waitqueue_bucket *other_bucket; + LIST_FOR_EACH_ENTRY( other_bucket, &waitqueue.buckets, struct waitqueue_bucket, bucket_entry ) + { + if (other_bucket != bucket && other_bucket->objcount && + other_bucket->objcount + bucket->objcount <= MAXIMUM_WAITQUEUE_OBJECTS * 2 / 3) + { + other_bucket->objcount += bucket->objcount; + bucket->objcount = 0; + + /* Update reserved list. */ + LIST_FOR_EACH_ENTRY( wait, &bucket->reserved, struct threadpool_object, u.wait.wait_entry ) + { + assert( wait->type == TP_OBJECT_TYPE_WAIT ); + wait->u.wait.bucket = other_bucket; + } + list_move_tail( &other_bucket->reserved, &bucket->reserved ); + + /* Update waiting list. */ + LIST_FOR_EACH_ENTRY( wait, &bucket->waiting, struct threadpool_object, u.wait.wait_entry ) + { + assert( wait->type == TP_OBJECT_TYPE_WAIT ); + wait->u.wait.bucket = other_bucket; + } + list_move_tail( &other_bucket->waiting, &bucket->waiting ); + + /* Move bucket to the end, to keep the probability of + * newly added wait objects as small as possible. */ + list_remove( &bucket->bucket_entry ); + list_add_tail( &waitqueue.buckets, &bucket->bucket_entry ); + + NtSetEvent( other_bucket->update_event, NULL ); + break; + } + } + } + } + + /* Remove this bucket from the list. */ + list_remove( &bucket->bucket_entry ); + if (!--waitqueue.num_buckets) + assert( list_empty( &waitqueue.buckets ) ); + + RtlLeaveCriticalSection( &waitqueue.cs ); + + TRACE( "terminating wait queue thread\n" ); + + assert( bucket->objcount == 0 ); + assert( list_empty( &bucket->reserved ) ); + assert( list_empty( &bucket->waiting ) ); + NtClose( bucket->update_event ); + + RtlFreeHeap( GetProcessHeap(), 0, bucket ); + RtlExitUserThread( 0 ); +} + +/*********************************************************************** + * tp_waitqueue_lock (internal) + */ +static NTSTATUS tp_waitqueue_lock( struct threadpool_object *wait ) +{ + struct waitqueue_bucket *bucket; + NTSTATUS status; + HANDLE thread; + assert( wait->type = TP_OBJECT_TYPE_WAIT ); + + wait->u.wait.signaled = 0; + wait->u.wait.bucket = NULL; + wait->u.wait.wait_pending = FALSE; + wait->u.wait.timeout = 0; + wait->u.wait.handle = INVALID_HANDLE_VALUE; + + RtlEnterCriticalSection( &waitqueue.cs ); + + /* Try to assign to existing bucket if possible. */ + LIST_FOR_EACH_ENTRY( bucket, &waitqueue.buckets, struct waitqueue_bucket, bucket_entry ) + { + if (bucket->objcount < MAXIMUM_WAITQUEUE_OBJECTS) + { + list_add_tail( &bucket->reserved, &wait->u.wait.wait_entry ); + wait->u.wait.bucket = bucket; + bucket->objcount++; + + status = STATUS_SUCCESS; + goto out; + } + } + + /* Create a new bucket and corresponding worker thread. */ + bucket = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*bucket) ); + if (!bucket) + { + status = STATUS_NO_MEMORY; + goto out; + } + + bucket->objcount = 0; + list_init( &bucket->reserved ); + list_init( &bucket->waiting ); + + status = NtCreateEvent( &bucket->update_event, EVENT_ALL_ACCESS, + NULL, SynchronizationEvent, FALSE ); + if (status) + { + RtlFreeHeap( GetProcessHeap(), 0, bucket ); + goto out; + } + + status = RtlCreateUserThread( GetCurrentProcess(), NULL, FALSE, NULL, 0, 0, + waitqueue_thread_proc, bucket, &thread, NULL ); + if (status == STATUS_SUCCESS) + { + list_add_tail( &waitqueue.buckets, &bucket->bucket_entry ); + waitqueue.num_buckets++; + + list_add_tail( &bucket->reserved, &wait->u.wait.wait_entry ); + wait->u.wait.bucket = bucket; + bucket->objcount++; + + NtClose( thread ); + } + else + { + NtClose( bucket->update_event ); + RtlFreeHeap( GetProcessHeap(), 0, bucket ); + } + +out: + RtlLeaveCriticalSection( &waitqueue.cs ); + return status; +} + +/*********************************************************************** + * tp_waitqueue_unlock (internal) + */ +static void tp_waitqueue_unlock( struct threadpool_object *wait ) +{ + assert( wait->type == TP_OBJECT_TYPE_WAIT ); + + RtlEnterCriticalSection( &waitqueue.cs ); + if (wait->u.wait.bucket) + { + struct waitqueue_bucket *bucket = wait->u.wait.bucket; + assert( bucket->objcount > 0 ); + + list_remove( &wait->u.wait.wait_entry ); + wait->u.wait.bucket = NULL; + bucket->objcount--; + + NtSetEvent( bucket->update_event, NULL ); + } + RtlLeaveCriticalSection( &waitqueue.cs ); +} + +/*********************************************************************** + * tp_threadpool_alloc (internal) + * + * Allocates a new threadpool object. + */ +static NTSTATUS tp_threadpool_alloc( struct threadpool **out ) +{ + struct threadpool *pool; + + pool = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*pool) ); + if (!pool) + return STATUS_NO_MEMORY; + + pool->refcount = 1; + pool->objcount = 0; + pool->shutdown = FALSE; + + RtlInitializeCriticalSection( &pool->cs ); + pool->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": threadpool.cs"); + + list_init( &pool->pool ); + RtlInitializeConditionVariable( &pool->update_event ); + + pool->max_workers = 500; + pool->min_workers = 0; + pool->num_workers = 0; + pool->num_busy_workers = 0; + + TRACE( "allocated threadpool %p\n", pool ); + + *out = pool; + return STATUS_SUCCESS; +} + +/*********************************************************************** + * tp_threadpool_shutdown (internal) + * + * Prepares the shutdown of a threadpool object and notifies all worker + * threads to terminate (after all remaining work items have been + * processed). + */ +static void tp_threadpool_shutdown( struct threadpool *pool ) +{ + assert( pool != default_threadpool ); + + pool->shutdown = TRUE; + RtlWakeAllConditionVariable( &pool->update_event ); +} + +/*********************************************************************** + * tp_threadpool_release (internal) + * + * Releases a reference to a threadpool object. + */ +static BOOL tp_threadpool_release( struct threadpool *pool ) +{ + if (interlocked_dec( &pool->refcount )) + return FALSE; + + TRACE( "destroying threadpool %p\n", pool ); + + assert( pool->shutdown ); + assert( !pool->objcount ); + assert( list_empty( &pool->pool ) ); + + pool->cs.DebugInfo->Spare[0] = 0; + RtlDeleteCriticalSection( &pool->cs ); + + RtlFreeHeap( GetProcessHeap(), 0, pool ); + return TRUE; +} + +/*********************************************************************** + * tp_threadpool_lock (internal) + * + * Acquires a lock on a threadpool, specified with an TP_CALLBACK_ENVIRON + * block. When the lock is acquired successfully, it is guaranteed that + * there is at least one worker thread to process tasks. + */ +static NTSTATUS tp_threadpool_lock( struct threadpool **out, TP_CALLBACK_ENVIRON *environment ) +{ + struct threadpool *pool = NULL; + NTSTATUS status = STATUS_SUCCESS; + + if (environment) + pool = (struct threadpool *)environment->Pool; + + if (!pool) + { + if (!default_threadpool) + { + status = tp_threadpool_alloc( &pool ); + if (status != STATUS_SUCCESS) + return status; + + if (interlocked_cmpxchg_ptr( (void *)&default_threadpool, pool, NULL ) != NULL) + { + tp_threadpool_shutdown( pool ); + tp_threadpool_release( pool ); + } + } + + pool = default_threadpool; + } + + RtlEnterCriticalSection( &pool->cs ); + + /* Make sure that the threadpool has at least one thread. */ + if (!pool->num_workers) + { + HANDLE thread; + status = RtlCreateUserThread( GetCurrentProcess(), NULL, FALSE, NULL, 0, 0, + threadpool_worker_proc, pool, &thread, NULL ); + if (status == STATUS_SUCCESS) + { + interlocked_inc( &pool->refcount ); + pool->num_workers++; + NtClose( thread ); + } + } + + /* Keep a reference, and increment objcount to ensure that the + * last thread doesn't terminate. */ + if (status == STATUS_SUCCESS) + { + interlocked_inc( &pool->refcount ); + pool->objcount++; + } + + RtlLeaveCriticalSection( &pool->cs ); + + if (status != STATUS_SUCCESS) + return status; + + *out = pool; + return STATUS_SUCCESS; +} + +/*********************************************************************** + * tp_threadpool_unlock (internal) + * + * Releases a lock on a threadpool. + */ +static void tp_threadpool_unlock( struct threadpool *pool ) +{ + RtlEnterCriticalSection( &pool->cs ); + pool->objcount--; + RtlLeaveCriticalSection( &pool->cs ); + tp_threadpool_release( pool ); +} + +/*********************************************************************** + * tp_group_alloc (internal) + * + * Allocates a new threadpool group object. + */ +static NTSTATUS tp_group_alloc( struct threadpool_group **out ) +{ + struct threadpool_group *group; + + group = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*group) ); + if (!group) + return STATUS_NO_MEMORY; + + group->refcount = 1; + group->shutdown = FALSE; + + RtlInitializeCriticalSection( &group->cs ); + group->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": threadpool_group.cs"); + + list_init( &group->members ); + + TRACE( "allocated group %p\n", group ); + + *out = group; + return STATUS_SUCCESS; +} + +/*********************************************************************** + * tp_group_shutdown (internal) + * + * Marks the group object for shutdown. + */ +static void tp_group_shutdown( struct threadpool_group *group ) +{ + group->shutdown = TRUE; +} + +/*********************************************************************** + * tp_group_release (internal) + * + * Releases a reference to a group object. + */ +static BOOL tp_group_release( struct threadpool_group *group ) +{ + if (interlocked_dec( &group->refcount )) + return FALSE; + + TRACE( "destroying group %p\n", group ); + + assert( group->shutdown ); + assert( list_empty( &group->members ) ); + + group->cs.DebugInfo->Spare[0] = 0; + RtlDeleteCriticalSection( &group->cs ); + + RtlFreeHeap( GetProcessHeap(), 0, group ); + return TRUE; +} + +/*********************************************************************** + * tp_object_initialize (internal) + * + * Initializes members of a threadpool object. + */ +static void tp_object_initialize( struct threadpool_object *object, struct threadpool *pool, + PVOID userdata, TP_CALLBACK_ENVIRON *environment ) +{ + BOOL is_simple_callback = (object->type == TP_OBJECT_TYPE_SIMPLE); + + object->refcount = 1; + object->shutdown = FALSE; + + object->pool = pool; + object->group = NULL; + object->userdata = userdata; + object->group_cancel_callback = NULL; + object->finalization_callback = NULL; + object->may_run_long = 0; + object->race_dll = NULL; + + memset( &object->group_entry, 0, sizeof(object->group_entry) ); + object->is_group_member = FALSE; + + memset( &object->pool_entry, 0, sizeof(object->pool_entry) ); + RtlInitializeConditionVariable( &object->finished_event ); + RtlInitializeConditionVariable( &object->group_finished_event ); + object->num_pending_callbacks = 0; + object->num_running_callbacks = 0; + object->num_associated_callbacks = 0; + + if (environment) + { + if (environment->Version != 1) + FIXME( "unsupported environment version %u\n", environment->Version ); + + object->group = impl_from_TP_CLEANUP_GROUP( environment->CleanupGroup ); + object->group_cancel_callback = environment->CleanupGroupCancelCallback; + object->finalization_callback = environment->FinalizationCallback; + object->may_run_long = environment->u.s.LongFunction != 0; + object->race_dll = environment->RaceDll; + + if (environment->ActivationContext) + FIXME( "activation context not supported yet\n" ); + + if (environment->u.s.Persistent) + FIXME( "persistent threads not supported yet\n" ); + } + + if (object->race_dll) + LdrAddRefDll( 0, object->race_dll ); + + TRACE( "allocated object %p of type %u\n", object, object->type ); + + /* For simple callbacks we have to run tp_object_submit before adding this object + * to the cleanup group. As soon as the cleanup group members are released ->shutdown + * will be set, and tp_object_submit would fail with an assertion. */ + + if (is_simple_callback) + tp_object_submit( object, FALSE ); + + if (object->group) + { + struct threadpool_group *group = object->group; + interlocked_inc( &group->refcount ); + + RtlEnterCriticalSection( &group->cs ); + list_add_tail( &group->members, &object->group_entry ); + object->is_group_member = TRUE; + RtlLeaveCriticalSection( &group->cs ); + } + + if (is_simple_callback) + { + tp_object_shutdown( object ); + tp_object_release( object ); + } +} + +/*********************************************************************** + * tp_object_submit (internal) + * + * Submits a threadpool object to the associcated threadpool. This + * function has to be VOID because TpPostWork can never fail on Windows. + */ +static void tp_object_submit( struct threadpool_object *object, BOOL signaled ) +{ + struct threadpool *pool = object->pool; + NTSTATUS status = STATUS_UNSUCCESSFUL; + + assert( !object->shutdown ); + assert( !pool->shutdown ); + + RtlEnterCriticalSection( &pool->cs ); + + /* Start new worker threads if required. */ + if (pool->num_busy_workers >= pool->num_workers && + pool->num_workers < pool->max_workers) + { + HANDLE thread; + status = RtlCreateUserThread( GetCurrentProcess(), NULL, FALSE, NULL, 0, 0, + threadpool_worker_proc, pool, &thread, NULL ); + if (status == STATUS_SUCCESS) + { + interlocked_inc( &pool->refcount ); + pool->num_workers++; + NtClose( thread ); + } + } + + /* Queue work item and increment refcount. */ + interlocked_inc( &object->refcount ); + if (!object->num_pending_callbacks++) + list_add_tail( &pool->pool, &object->pool_entry ); + + /* Count how often the object was signaled. */ + if (object->type == TP_OBJECT_TYPE_WAIT && signaled) + object->u.wait.signaled++; + + /* No new thread started - wake up one existing thread. */ + if (status != STATUS_SUCCESS) + { + assert( pool->num_workers > 0 ); + RtlWakeConditionVariable( &pool->update_event ); + } + + RtlLeaveCriticalSection( &pool->cs ); +} + +/*********************************************************************** + * tp_object_cancel (internal) + * + * Cancels all currently pending callbacks for a specific object. + */ +static void tp_object_cancel( struct threadpool_object *object, BOOL group_cancel, PVOID userdata ) +{ + struct threadpool *pool = object->pool; + LONG pending_callbacks = 0; + + RtlEnterCriticalSection( &pool->cs ); + if (object->num_pending_callbacks) + { + pending_callbacks = object->num_pending_callbacks; + object->num_pending_callbacks = 0; + list_remove( &object->pool_entry ); + + if (object->type == TP_OBJECT_TYPE_WAIT) + object->u.wait.signaled = 0; + } + RtlLeaveCriticalSection( &pool->cs ); + + /* Execute group cancellation callback if defined, and if this was actually a group cancel. */ + if (pending_callbacks && group_cancel && object->group_cancel_callback) + { + TRACE( "executing group cancel callback %p(%p, %p)\n", object->group_cancel_callback, object, userdata ); + object->group_cancel_callback( object, userdata ); + TRACE( "callback %p returned\n", object->group_cancel_callback ); + } + + while (pending_callbacks--) + tp_object_release( object ); +} + +/*********************************************************************** + * tp_object_wait (internal) + * + * Waits until all pending and running callbacks of a specific object + * have been processed. + */ +static void tp_object_wait( struct threadpool_object *object, BOOL group_wait ) +{ + struct threadpool *pool = object->pool; + + RtlEnterCriticalSection( &pool->cs ); + if (group_wait) + { + while (object->num_pending_callbacks || object->num_running_callbacks) + RtlSleepConditionVariableCS( &object->group_finished_event, &pool->cs, NULL ); + } + else + { + while (object->num_pending_callbacks || object->num_associated_callbacks) + RtlSleepConditionVariableCS( &object->finished_event, &pool->cs, NULL ); + } + RtlLeaveCriticalSection( &pool->cs ); +} + +/*********************************************************************** + * tp_object_shutdown (internal) + * + * Marks a threadpool object for shutdown (which means that no further + * tasks can be submitted). + */ +static void tp_object_shutdown( struct threadpool_object *object ) +{ + if (object->type == TP_OBJECT_TYPE_TIMER) + tp_timerqueue_unlock( object ); + else if (object->type == TP_OBJECT_TYPE_WAIT) + tp_waitqueue_unlock( object ); + + object->shutdown = TRUE; +} + +/*********************************************************************** + * tp_object_release (internal) + * + * Releases a reference to a threadpool object. + */ +static BOOL tp_object_release( struct threadpool_object *object ) +{ + if (interlocked_dec( &object->refcount )) + return FALSE; + + TRACE( "destroying object %p of type %u\n", object, object->type ); + + assert( object->shutdown ); + assert( !object->num_pending_callbacks ); + assert( !object->num_running_callbacks ); + assert( !object->num_associated_callbacks ); + + /* release reference to the group */ + if (object->group) + { + struct threadpool_group *group = object->group; + + RtlEnterCriticalSection( &group->cs ); + if (object->is_group_member) + { + list_remove( &object->group_entry ); + object->is_group_member = FALSE; + } + RtlLeaveCriticalSection( &group->cs ); + + tp_group_release( group ); + } + + tp_threadpool_unlock( object->pool ); + + if (object->race_dll) + LdrUnloadDll( object->race_dll ); + + RtlFreeHeap( GetProcessHeap(), 0, object ); + return TRUE; +} + +/*********************************************************************** + * threadpool_worker_proc (internal) + */ +static void CALLBACK threadpool_worker_proc( void *param ) +{ + TP_CALLBACK_INSTANCE *callback_instance; + struct threadpool_instance instance; + struct threadpool *pool = param; + TP_WAIT_RESULT wait_result = 0; + LARGE_INTEGER timeout; + struct list *ptr; + NTSTATUS status; + + TRACE( "starting worker thread for pool %p\n", pool ); + + RtlEnterCriticalSection( &pool->cs ); + for (;;) + { + while ((ptr = list_head( &pool->pool ))) + { + struct threadpool_object *object = LIST_ENTRY( ptr, struct threadpool_object, pool_entry ); + assert( object->num_pending_callbacks > 0 ); + + /* If further pending callbacks are queued, move the work item to + * the end of the pool list. Otherwise remove it from the pool. */ + list_remove( &object->pool_entry ); + if (--object->num_pending_callbacks) + list_add_tail( &pool->pool, &object->pool_entry ); + + /* For wait objects check if they were signaled or have timed out. */ + if (object->type == TP_OBJECT_TYPE_WAIT) + { + wait_result = object->u.wait.signaled ? WAIT_OBJECT_0 : WAIT_TIMEOUT; + if (wait_result == WAIT_OBJECT_0) object->u.wait.signaled--; + } + + /* Leave critical section and do the actual callback. */ + object->num_associated_callbacks++; + object->num_running_callbacks++; + pool->num_busy_workers++; + RtlLeaveCriticalSection( &pool->cs ); + + /* Initialize threadpool instance struct. */ + callback_instance = (TP_CALLBACK_INSTANCE *)&instance; + instance.object = object; + instance.threadid = GetCurrentThreadId(); + instance.associated = TRUE; + instance.may_run_long = object->may_run_long; + instance.cleanup.critical_section = NULL; + instance.cleanup.mutex = NULL; + instance.cleanup.semaphore = NULL; + instance.cleanup.semaphore_count = 0; + instance.cleanup.event = NULL; + instance.cleanup.library = NULL; + + switch (object->type) + { + case TP_OBJECT_TYPE_SIMPLE: + { + TRACE( "executing simple callback %p(%p, %p)\n", + object->u.simple.callback, callback_instance, object->userdata ); + object->u.simple.callback( callback_instance, object->userdata ); + TRACE( "callback %p returned\n", object->u.simple.callback ); + break; + } + + case TP_OBJECT_TYPE_WORK: + { + TRACE( "executing work callback %p(%p, %p, %p)\n", + object->u.work.callback, callback_instance, object->userdata, object ); + object->u.work.callback( callback_instance, object->userdata, (TP_WORK *)object ); + TRACE( "callback %p returned\n", object->u.work.callback ); + break; + } + + case TP_OBJECT_TYPE_TIMER: + { + TRACE( "executing timer callback %p(%p, %p, %p)\n", + object->u.timer.callback, callback_instance, object->userdata, object ); + object->u.timer.callback( callback_instance, object->userdata, (TP_TIMER *)object ); + TRACE( "callback %p returned\n", object->u.timer.callback ); + break; + } + + case TP_OBJECT_TYPE_WAIT: + { + TRACE( "executing wait callback %p(%p, %p, %p, %u)\n", + object->u.wait.callback, callback_instance, object->userdata, object, wait_result ); + object->u.wait.callback( callback_instance, object->userdata, (TP_WAIT *)object, wait_result ); + TRACE( "callback %p returned\n", object->u.wait.callback ); + break; + } + + default: + assert(0); + break; + } + + /* Execute finalization callback. */ + if (object->finalization_callback) + { + TRACE( "executing finalization callback %p(%p, %p)\n", + object->finalization_callback, callback_instance, object->userdata ); + object->finalization_callback( callback_instance, object->userdata ); + TRACE( "callback %p returned\n", object->finalization_callback ); + } + + /* Execute cleanup tasks. */ + if (instance.cleanup.critical_section) + { + RtlLeaveCriticalSection( instance.cleanup.critical_section ); + } + if (instance.cleanup.mutex) + { + status = NtReleaseMutant( instance.cleanup.mutex, NULL ); + if (status != STATUS_SUCCESS) goto skip_cleanup; + } + if (instance.cleanup.semaphore) + { + status = NtReleaseSemaphore( instance.cleanup.semaphore, instance.cleanup.semaphore_count, NULL ); + if (status != STATUS_SUCCESS) goto skip_cleanup; + } + if (instance.cleanup.event) + { + status = NtSetEvent( instance.cleanup.event, NULL ); + if (status != STATUS_SUCCESS) goto skip_cleanup; + } + if (instance.cleanup.library) + { + LdrUnloadDll( instance.cleanup.library ); + } + + skip_cleanup: + RtlEnterCriticalSection( &pool->cs ); + pool->num_busy_workers--; + + object->num_running_callbacks--; + if (!object->num_pending_callbacks && !object->num_running_callbacks) + RtlWakeAllConditionVariable( &object->group_finished_event ); + + if (instance.associated) + { + object->num_associated_callbacks--; + if (!object->num_pending_callbacks && !object->num_associated_callbacks) + RtlWakeAllConditionVariable( &object->finished_event ); + } + + tp_object_release( object ); + } + + /* Shutdown worker thread if requested. */ + if (pool->shutdown) + break; + + /* Wait for new tasks or until the timeout expires. A thread only terminates + * when no new tasks are available, and the number of threads can be + * decreased without violating the min_workers limit. An exception is when + * min_workers == 0, then objcount is used to detect if the last thread + * can be terminated. */ + timeout.QuadPart = (ULONGLONG)THREADPOOL_WORKER_TIMEOUT * -10000; + if (RtlSleepConditionVariableCS( &pool->update_event, &pool->cs, &timeout ) == STATUS_TIMEOUT && + !list_head( &pool->pool ) && (pool->num_workers > max( pool->min_workers, 1 ) || + (!pool->min_workers && !pool->objcount))) + { + break; + } + } + pool->num_workers--; + RtlLeaveCriticalSection( &pool->cs ); + + TRACE( "terminating worker thread for pool %p\n", pool ); + tp_threadpool_release( pool ); + RtlExitUserThread( 0 ); +} + +/*********************************************************************** + * TpAllocCleanupGroup (NTDLL.@) + */ +NTSTATUS WINAPI TpAllocCleanupGroup( TP_CLEANUP_GROUP **out ) +{ + TRACE( "%p\n", out ); + + return tp_group_alloc( (struct threadpool_group **)out ); +} + +/*********************************************************************** + * TpAllocPool (NTDLL.@) + */ +NTSTATUS WINAPI TpAllocPool( TP_POOL **out, PVOID reserved ) +{ + TRACE( "%p %p\n", out, reserved ); + + if (reserved) + FIXME( "reserved argument is nonzero (%p)", reserved ); + + return tp_threadpool_alloc( (struct threadpool **)out ); +} + +/*********************************************************************** + * TpAllocTimer (NTDLL.@) + */ +NTSTATUS WINAPI TpAllocTimer( TP_TIMER **out, PTP_TIMER_CALLBACK callback, PVOID userdata, + TP_CALLBACK_ENVIRON *environment ) +{ + struct threadpool_object *object; + struct threadpool *pool; + NTSTATUS status; + + TRACE( "%p %p %p %p\n", out, callback, userdata, environment ); + + object = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*object) ); + if (!object) + return STATUS_NO_MEMORY; + + status = tp_threadpool_lock( &pool, environment ); + if (status) + { + RtlFreeHeap( GetProcessHeap(), 0, object ); + return status; + } + + object->type = TP_OBJECT_TYPE_TIMER; + object->u.timer.callback = callback; + + status = tp_timerqueue_lock( object ); + if (status) + { + tp_threadpool_unlock( pool ); + RtlFreeHeap( GetProcessHeap(), 0, object ); + return status; + } + + tp_object_initialize( object, pool, userdata, environment ); + + *out = (TP_TIMER *)object; + return STATUS_SUCCESS; +} + +/*********************************************************************** + * TpAllocWait (NTDLL.@) + */ +NTSTATUS WINAPI TpAllocWait( TP_WAIT **out, PTP_WAIT_CALLBACK callback, PVOID userdata, + TP_CALLBACK_ENVIRON *environment ) +{ + struct threadpool_object *object; + struct threadpool *pool; + NTSTATUS status; + + TRACE( "%p %p %p %p\n", out, callback, userdata, environment ); + + object = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*object) ); + if (!object) + return STATUS_NO_MEMORY; + + status = tp_threadpool_lock( &pool, environment ); + if (status) + { + RtlFreeHeap( GetProcessHeap(), 0, object ); + return status; + } + + object->type = TP_OBJECT_TYPE_WAIT; + object->u.wait.callback = callback; + + status = tp_waitqueue_lock( object ); + if (status) + { + tp_threadpool_unlock( pool ); + RtlFreeHeap( GetProcessHeap(), 0, object ); + return status; + } + + tp_object_initialize( object, pool, userdata, environment ); + + *out = (TP_WAIT *)object; + return STATUS_SUCCESS; +} + +/*********************************************************************** + * TpAllocWork (NTDLL.@) + */ +NTSTATUS WINAPI TpAllocWork( TP_WORK **out, PTP_WORK_CALLBACK callback, PVOID userdata, + TP_CALLBACK_ENVIRON *environment ) +{ + struct threadpool_object *object; + struct threadpool *pool; + NTSTATUS status; + + TRACE( "%p %p %p %p\n", out, callback, userdata, environment ); + + object = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*object) ); + if (!object) + return STATUS_NO_MEMORY; + + status = tp_threadpool_lock( &pool, environment ); + if (status) + { + RtlFreeHeap( GetProcessHeap(), 0, object ); + return status; + } + + object->type = TP_OBJECT_TYPE_WORK; + object->u.work.callback = callback; + tp_object_initialize( object, pool, userdata, environment ); + + *out = (TP_WORK *)object; + return STATUS_SUCCESS; +} + +/*********************************************************************** + * TpCallbackLeaveCriticalSectionOnCompletion (NTDLL.@) + */ +VOID WINAPI TpCallbackLeaveCriticalSectionOnCompletion( TP_CALLBACK_INSTANCE *instance, CRITICAL_SECTION *crit ) +{ + struct threadpool_instance *this = impl_from_TP_CALLBACK_INSTANCE( instance ); + + TRACE( "%p %p\n", instance, crit ); + + if (!this->cleanup.critical_section) + this->cleanup.critical_section = crit; +} + +/*********************************************************************** + * TpCallbackMayRunLong (NTDLL.@) + */ +NTSTATUS WINAPI TpCallbackMayRunLong( TP_CALLBACK_INSTANCE *instance ) +{ + struct threadpool_instance *this = impl_from_TP_CALLBACK_INSTANCE( instance ); + struct threadpool_object *object = this->object; + struct threadpool *pool; + NTSTATUS status = STATUS_SUCCESS; + + TRACE( "%p\n", instance ); + + if (this->threadid != GetCurrentThreadId()) + { + ERR("called from wrong thread, ignoring\n"); + return STATUS_UNSUCCESSFUL; /* FIXME */ + } + + if (this->may_run_long) + return STATUS_SUCCESS; + + pool = object->pool; + RtlEnterCriticalSection( &pool->cs ); + + /* Start new worker threads if required. */ + if (pool->num_busy_workers >= pool->num_workers) + { + if (pool->num_workers < pool->max_workers) + { + HANDLE thread; + status = RtlCreateUserThread( GetCurrentProcess(), NULL, FALSE, NULL, 0, 0, + threadpool_worker_proc, pool, &thread, NULL ); + if (status == STATUS_SUCCESS) + { + interlocked_inc( &pool->refcount ); + pool->num_workers++; + NtClose( thread ); + } + } + else + { + status = STATUS_TOO_MANY_THREADS; + } + } + + RtlLeaveCriticalSection( &pool->cs ); + this->may_run_long = TRUE; + return status; +} + +/*********************************************************************** + * TpCallbackReleaseMutexOnCompletion (NTDLL.@) + */ +VOID WINAPI TpCallbackReleaseMutexOnCompletion( TP_CALLBACK_INSTANCE *instance, HANDLE mutex ) +{ + struct threadpool_instance *this = impl_from_TP_CALLBACK_INSTANCE( instance ); + + TRACE( "%p %p\n", instance, mutex ); + + if (!this->cleanup.mutex) + this->cleanup.mutex = mutex; +} + +/*********************************************************************** + * TpCallbackReleaseSemaphoreOnCompletion (NTDLL.@) + */ +VOID WINAPI TpCallbackReleaseSemaphoreOnCompletion( TP_CALLBACK_INSTANCE *instance, HANDLE semaphore, DWORD count ) +{ + struct threadpool_instance *this = impl_from_TP_CALLBACK_INSTANCE( instance ); + + TRACE( "%p %p %u\n", instance, semaphore, count ); + + if (!this->cleanup.semaphore) + { + this->cleanup.semaphore = semaphore; + this->cleanup.semaphore_count = count; + } +} + +/*********************************************************************** + * TpCallbackSetEventOnCompletion (NTDLL.@) + */ +VOID WINAPI TpCallbackSetEventOnCompletion( TP_CALLBACK_INSTANCE *instance, HANDLE event ) +{ + struct threadpool_instance *this = impl_from_TP_CALLBACK_INSTANCE( instance ); + + TRACE( "%p %p\n", instance, event ); + + if (!this->cleanup.event) + this->cleanup.event = event; +} + +/*********************************************************************** + * TpCallbackUnloadDllOnCompletion (NTDLL.@) + */ +VOID WINAPI TpCallbackUnloadDllOnCompletion( TP_CALLBACK_INSTANCE *instance, HMODULE module ) +{ + struct threadpool_instance *this = impl_from_TP_CALLBACK_INSTANCE( instance ); + + TRACE( "%p %p\n", instance, module ); + + if (!this->cleanup.library) + this->cleanup.library = module; +} + +/*********************************************************************** + * TpDisassociateCallback (NTDLL.@) + */ +VOID WINAPI TpDisassociateCallback( TP_CALLBACK_INSTANCE *instance ) +{ + struct threadpool_instance *this = impl_from_TP_CALLBACK_INSTANCE( instance ); + struct threadpool_object *object = this->object; + struct threadpool *pool; + + TRACE( "%p\n", instance ); + + if (this->threadid != GetCurrentThreadId()) + { + ERR("called from wrong thread, ignoring\n"); + return; + } + + if (!this->associated) + return; + + pool = object->pool; + RtlEnterCriticalSection( &pool->cs ); + + object->num_associated_callbacks--; + if (!object->num_pending_callbacks && !object->num_associated_callbacks) + RtlWakeAllConditionVariable( &object->finished_event ); + + RtlLeaveCriticalSection( &pool->cs ); + this->associated = FALSE; +} + +/*********************************************************************** + * TpIsTimerSet (NTDLL.@) + */ +BOOL WINAPI TpIsTimerSet( TP_TIMER *timer ) +{ + struct threadpool_object *this = impl_from_TP_TIMER( timer ); + + TRACE( "%p\n", timer ); + + return this->u.timer.timer_set; +} + +/*********************************************************************** + * TpPostWork (NTDLL.@) + */ +VOID WINAPI TpPostWork( TP_WORK *work ) +{ + struct threadpool_object *this = impl_from_TP_WORK( work ); + + TRACE( "%p\n", work ); + + tp_object_submit( this, FALSE ); +} + +/*********************************************************************** + * TpReleaseCleanupGroup (NTDLL.@) + */ +VOID WINAPI TpReleaseCleanupGroup( TP_CLEANUP_GROUP *group ) +{ + struct threadpool_group *this = impl_from_TP_CLEANUP_GROUP( group ); + + TRACE( "%p\n", group ); + + tp_group_shutdown( this ); + tp_group_release( this ); +} + +/*********************************************************************** + * TpReleaseCleanupGroupMembers (NTDLL.@) + */ +VOID WINAPI TpReleaseCleanupGroupMembers( TP_CLEANUP_GROUP *group, BOOL cancel_pending, PVOID userdata ) +{ + struct threadpool_group *this = impl_from_TP_CLEANUP_GROUP( group ); + struct threadpool_object *object, *next; + struct list members; + + TRACE( "%p %u %p\n", group, cancel_pending, userdata ); + + RtlEnterCriticalSection( &this->cs ); + + /* Unset group, increase references, and mark objects for shutdown */ + LIST_FOR_EACH_ENTRY_SAFE( object, next, &this->members, struct threadpool_object, group_entry ) + { + assert( object->group == this ); + assert( object->is_group_member ); + + /* Simple callbacks are very special. The user doesn't hold any reference, so + * they would be released too early. Add one additional temporary reference. */ + if (object->type == TP_OBJECT_TYPE_SIMPLE) + { + if (interlocked_inc( &object->refcount ) == 1) + { + /* Object is basically already destroyed, but group reference + * was not deleted yet. We can safely ignore this object. */ + interlocked_dec( &object->refcount ); + list_remove( &object->group_entry ); + object->is_group_member = FALSE; + continue; + } + } + + object->is_group_member = FALSE; + tp_object_shutdown( object ); + } + + /* Move members to a new temporary list */ + list_init( &members ); + list_move_tail( &members, &this->members ); + + RtlLeaveCriticalSection( &this->cs ); + + /* Cancel pending callbacks if requested */ + if (cancel_pending) + { + LIST_FOR_EACH_ENTRY( object, &members, struct threadpool_object, group_entry ) + { + tp_object_cancel( object, TRUE, userdata ); + } + } + + /* Wait for remaining callbacks to finish */ + LIST_FOR_EACH_ENTRY_SAFE( object, next, &members, struct threadpool_object, group_entry ) + { + tp_object_wait( object, TRUE ); + tp_object_release( object ); + } +} + +/*********************************************************************** + * TpReleasePool (NTDLL.@) + */ +VOID WINAPI TpReleasePool( TP_POOL *pool ) +{ + struct threadpool *this = impl_from_TP_POOL( pool ); + + TRACE( "%p\n", pool ); + + tp_threadpool_shutdown( this ); + tp_threadpool_release( this ); +} + +/*********************************************************************** + * TpReleaseTimer (NTDLL.@) + */ +VOID WINAPI TpReleaseTimer( TP_TIMER *timer ) +{ + struct threadpool_object *this = impl_from_TP_TIMER( timer ); + + TRACE( "%p\n", timer ); + + tp_object_shutdown( this ); + tp_object_release( this ); +} + +/*********************************************************************** + * TpReleaseWait (NTDLL.@) + */ +VOID WINAPI TpReleaseWait( TP_WAIT *wait ) +{ + struct threadpool_object *this = impl_from_TP_WAIT( wait ); + + TRACE( "%p\n", wait ); + + tp_object_shutdown( this ); + tp_object_release( this ); +} + +/*********************************************************************** + * TpReleaseWork (NTDLL.@) + */ +VOID WINAPI TpReleaseWork( TP_WORK *work ) +{ + struct threadpool_object *this = impl_from_TP_WORK( work ); + + TRACE( "%p\n", work ); + + tp_object_shutdown( this ); + tp_object_release( this ); +} + +/*********************************************************************** + * TpSetPoolMaxThreads (NTDLL.@) + */ +VOID WINAPI TpSetPoolMaxThreads( TP_POOL *pool, DWORD maximum ) +{ + struct threadpool *this = impl_from_TP_POOL( pool ); + + TRACE( "%p %u\n", pool, maximum ); + + RtlEnterCriticalSection( &this->cs ); + this->max_workers = max( maximum, 1 ); + this->min_workers = min( this->min_workers, this->max_workers ); + RtlLeaveCriticalSection( &this->cs ); +} + +/*********************************************************************** + * TpSetPoolMinThreads (NTDLL.@) + */ +BOOL WINAPI TpSetPoolMinThreads( TP_POOL *pool, DWORD minimum ) +{ + struct threadpool *this = impl_from_TP_POOL( pool ); + NTSTATUS status = STATUS_SUCCESS; + + TRACE( "%p %u\n", pool, minimum ); + + RtlEnterCriticalSection( &this->cs ); + + while (this->num_workers < minimum) + { + HANDLE thread; + status = RtlCreateUserThread( GetCurrentProcess(), NULL, FALSE, NULL, 0, 0, + threadpool_worker_proc, this, &thread, NULL ); + if (status != STATUS_SUCCESS) + break; + + interlocked_inc( &this->refcount ); + this->num_workers++; + NtClose( thread ); + } + + if (status == STATUS_SUCCESS) + { + this->min_workers = minimum; + this->max_workers = max( this->min_workers, this->max_workers ); + } + + RtlLeaveCriticalSection( &this->cs ); + return !status; +} + +/*********************************************************************** + * TpSetTimer (NTDLL.@) + */ +VOID WINAPI TpSetTimer( TP_TIMER *timer, LARGE_INTEGER *timeout, LONG period, LONG window_length ) +{ + struct threadpool_object *this = impl_from_TP_TIMER( timer ); + struct threadpool_object *other_timer; + BOOL submit_timer = FALSE; + ULONGLONG timestamp; + + TRACE( "%p %p %u %u\n", timer, timeout, period, window_length ); + + RtlEnterCriticalSection( &timerqueue.cs ); + + assert( this->u.timer.timer_initialized ); + this->u.timer.timer_set = timeout != NULL; + + /* Convert relative timeout to absolute timestamp and handle a timeout + * of zero, which means that the timer is submitted immediately. */ + if (timeout) + { + timestamp = timeout->QuadPart; + if ((LONGLONG)timestamp < 0) + { + LARGE_INTEGER now; + NtQuerySystemTime( &now ); + timestamp = now.QuadPart - timestamp; + } + else if (!timestamp) + { + if (!period) + timeout = NULL; + else + { + LARGE_INTEGER now; + NtQuerySystemTime( &now ); + timestamp = now.QuadPart + (ULONGLONG)period * 10000; + } + submit_timer = TRUE; + } + } + + /* First remove existing timeout. */ + if (this->u.timer.timer_pending) + { + list_remove( &this->u.timer.timer_entry ); + this->u.timer.timer_pending = FALSE; + } + + /* If the timer was enabled, then add it back to the queue. */ + if (timeout) + { + this->u.timer.timeout = timestamp; + this->u.timer.period = period; + this->u.timer.window_length = window_length; + + LIST_FOR_EACH_ENTRY( other_timer, &timerqueue.pending_timers, + struct threadpool_object, u.timer.timer_entry ) + { + assert( other_timer->type == TP_OBJECT_TYPE_TIMER ); + if (this->u.timer.timeout < other_timer->u.timer.timeout) + break; + } + list_add_before( &other_timer->u.timer.timer_entry, &this->u.timer.timer_entry ); + + /* Wake up the timer thread when the timeout has to be updated. */ + if (list_head( &timerqueue.pending_timers ) == &this->u.timer.timer_entry ) + RtlWakeAllConditionVariable( &timerqueue.update_event ); + + this->u.timer.timer_pending = TRUE; + } + + RtlLeaveCriticalSection( &timerqueue.cs ); + + if (submit_timer) + tp_object_submit( this, FALSE ); +} + +/*********************************************************************** + * TpSetWait (NTDLL.@) + */ +VOID WINAPI TpSetWait( TP_WAIT *wait, HANDLE handle, LARGE_INTEGER *timeout ) +{ + struct threadpool_object *this = impl_from_TP_WAIT( wait ); + ULONGLONG timestamp = TIMEOUT_INFINITE; + BOOL submit_wait = FALSE; + + TRACE( "%p %p %p\n", wait, handle, timeout ); + + RtlEnterCriticalSection( &waitqueue.cs ); + + assert( this->u.wait.bucket ); + this->u.wait.handle = handle; + + if (handle || this->u.wait.wait_pending) + { + struct waitqueue_bucket *bucket = this->u.wait.bucket; + list_remove( &this->u.wait.wait_entry ); + + /* Convert relative timeout to absolute timestamp. */ + if (handle && timeout) + { + timestamp = timeout->QuadPart; + if ((LONGLONG)timestamp < 0) + { + LARGE_INTEGER now; + NtQuerySystemTime( &now ); + timestamp = now.QuadPart - timestamp; + } + else if (!timestamp) + { + submit_wait = TRUE; + handle = NULL; + } + } + + /* Add wait object back into one of the queues. */ + if (handle) + { + list_add_tail( &bucket->waiting, &this->u.wait.wait_entry ); + this->u.wait.wait_pending = TRUE; + this->u.wait.timeout = timestamp; + } + else + { + list_add_tail( &bucket->reserved, &this->u.wait.wait_entry ); + this->u.wait.wait_pending = FALSE; + } + + /* Wake up the wait queue thread. */ + NtSetEvent( bucket->update_event, NULL ); + } + + RtlLeaveCriticalSection( &waitqueue.cs ); + + if (submit_wait) + tp_object_submit( this, FALSE ); +} + +/*********************************************************************** + * TpSimpleTryPost (NTDLL.@) + */ +NTSTATUS WINAPI TpSimpleTryPost( PTP_SIMPLE_CALLBACK callback, PVOID userdata, + TP_CALLBACK_ENVIRON *environment ) +{ + struct threadpool_object *object; + struct threadpool *pool; + NTSTATUS status; + + TRACE( "%p %p %p\n", callback, userdata, environment ); + + object = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*object) ); + if (!object) + return STATUS_NO_MEMORY; + + status = tp_threadpool_lock( &pool, environment ); + if (status) + { + RtlFreeHeap( GetProcessHeap(), 0, object ); + return status; + } + + object->type = TP_OBJECT_TYPE_SIMPLE; + object->u.simple.callback = callback; + tp_object_initialize( object, pool, userdata, environment ); + + return STATUS_SUCCESS; +} + +/*********************************************************************** + * TpWaitForTimer (NTDLL.@) + */ +VOID WINAPI TpWaitForTimer( TP_TIMER *timer, BOOL cancel_pending ) +{ + struct threadpool_object *this = impl_from_TP_TIMER( timer ); + + TRACE( "%p %d\n", timer, cancel_pending ); + + if (cancel_pending) + tp_object_cancel( this, FALSE, NULL ); + tp_object_wait( this, FALSE ); +} + +/*********************************************************************** + * TpWaitForWait (NTDLL.@) + */ +VOID WINAPI TpWaitForWait( TP_WAIT *wait, BOOL cancel_pending ) +{ + struct threadpool_object *this = impl_from_TP_WAIT( wait ); + + TRACE( "%p %d\n", wait, cancel_pending ); + + if (cancel_pending) + tp_object_cancel( this, FALSE, NULL ); + tp_object_wait( this, FALSE ); +} + +/*********************************************************************** + * TpWaitForWork (NTDLL.@) + */ +VOID WINAPI TpWaitForWork( TP_WORK *work, BOOL cancel_pending ) +{ + struct threadpool_object *this = impl_from_TP_WORK( work ); + + TRACE( "%p %u\n", work, cancel_pending ); + + if (cancel_pending) + tp_object_cancel( this, FALSE, NULL ); + tp_object_wait( this, FALSE ); +} diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/ntdll/virtual.c wine-staging-1.7.47~ubuntu14.10.1/dlls/ntdll/virtual.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/ntdll/virtual.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/ntdll/virtual.c 2015-07-12 05:36:18.000000000 +0000 @@ -1067,6 +1067,8 @@ IMAGE_SECTION_HEADER sections[96]; IMAGE_SECTION_HEADER *sec; IMAGE_DATA_DIRECTORY *imports; + IMAGE_LOAD_CONFIG_DIRECTORY *loadcfg; + ULONG loadcfg_size; NTSTATUS status = STATUS_CONFLICTING_ADDRESSES; int i; off_t pos; @@ -1278,6 +1280,24 @@ } } + /* randomize security cookie */ + + loadcfg = RtlImageDirectoryEntryToData( (HMODULE)ptr, TRUE, + IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG, &loadcfg_size ); + if (loadcfg && loadcfg_size >= sizeof(*loadcfg)) + { + static ULONG seed; + ULONG_PTR *cookie = (ULONG_PTR *)loadcfg->SecurityCookie; + + if (!seed) seed = NtGetTickCount() ^ GetCurrentProcessId(); + if (cookie) + { + *cookie = RtlRandom( &seed ); + if (sizeof(ULONG_PTR) > sizeof(ULONG)) /* fill up, but keep the highest word clear */ + *cookie ^= (ULONG_PTR)RtlRandom( &seed ) << 16; + } + } + /* set the image protections */ VIRTUAL_SetProt( view, ptr, ROUND_SIZE( 0, header_size ), VPROT_COMMITTED | VPROT_READ ); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/ntoskrnl.exe/ntoskrnl.c wine-staging-1.7.47~ubuntu14.10.1/dlls/ntoskrnl.exe/ntoskrnl.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/ntoskrnl.exe/ntoskrnl.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/ntoskrnl.exe/ntoskrnl.c 2015-07-12 05:36:18.000000000 +0000 @@ -131,14 +131,6 @@ static NTSTATUS dispatch_irp( DEVICE_OBJECT *device, IRP *irp ) { LARGE_INTEGER count; - FILE_OBJECT file; - - irp->RequestorMode = UserMode; - irp->Tail.Overlay.OriginalFileObject = &file; - - memset( &file, 0x88, sizeof(file) ); - file.FsContext = NULL; - file.FsContext2 = NULL; KeQueryTickCount( &count ); /* update the global KeTickCount */ @@ -151,16 +143,119 @@ return STATUS_SUCCESS; } +/* process a create request for a given file */ +static NTSTATUS dispatch_create( const irp_params_t *params, void *in_buff, ULONG in_size, + ULONG out_size, HANDLE irp_handle ) +{ + IRP *irp; + IO_STACK_LOCATION *irpsp; + FILE_OBJECT *file; + DEVICE_OBJECT *device = wine_server_get_ptr( params->create.device ); + + if (!(file = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*file) ))) return STATUS_NO_MEMORY; + + TRACE( "device %p -> file %p\n", device, file ); + + file->Type = 5; /* MSDN */ + file->Size = sizeof(*file); + file->DeviceObject = device; + + if (!(irp = IoAllocateIrp( device->StackSize, FALSE ))) + { + HeapFree( GetProcessHeap(), 0, file ); + return STATUS_NO_MEMORY; + } + + irpsp = IoGetNextIrpStackLocation( irp ); + irpsp->MajorFunction = IRP_MJ_CREATE; + irpsp->DeviceObject = device; + irpsp->CompletionRoutine = NULL; + irpsp->Parameters.Create.SecurityContext = NULL; /* FIXME */ + irpsp->Parameters.Create.Options = params->create.options; + irpsp->Parameters.Create.ShareAccess = params->create.sharing; + irpsp->Parameters.Create.FileAttributes = 0; + irpsp->Parameters.Create.EaLength = 0; + + irp->Tail.Overlay.OriginalFileObject = file; + irp->RequestorMode = UserMode; + irp->AssociatedIrp.SystemBuffer = NULL; + irp->UserBuffer = NULL; + irp->UserIosb = irp_handle; /* note: we abuse UserIosb to store the server irp handle */ + irp->UserEvent = NULL; + + if (device->DriverObject->MajorFunction[IRP_MJ_CREATE]) return dispatch_irp( device, irp ); + + irp->IoStatus.u.Status = STATUS_SUCCESS; + IoCompleteRequest( irp, IO_NO_INCREMENT ); + return STATUS_SUCCESS; +} + +/* process a close request for a given file */ +static NTSTATUS dispatch_close( const irp_params_t *params, void *in_buff, ULONG in_size, + ULONG out_size, HANDLE irp_handle ) +{ + IRP *irp; + IO_STACK_LOCATION *irpsp; + DEVICE_OBJECT *device; + FILE_OBJECT *file = wine_server_get_ptr( params->close.file ); + + if (!file) return STATUS_INVALID_HANDLE; + + device = file->DeviceObject; + + TRACE( "device %p file %p\n", device, file ); + + if (!(irp = IoAllocateIrp( device->StackSize, FALSE ))) + { + HeapFree( GetProcessHeap(), 0, file ); + return STATUS_NO_MEMORY; + } + + irpsp = IoGetNextIrpStackLocation( irp ); + irpsp->MajorFunction = IRP_MJ_CLOSE; + irpsp->DeviceObject = device; + irpsp->CompletionRoutine = NULL; + irpsp->Parameters.Create.SecurityContext = NULL; /* FIXME */ + irpsp->Parameters.Create.Options = params->create.options; + irpsp->Parameters.Create.ShareAccess = params->create.sharing; + irpsp->Parameters.Create.FileAttributes = 0; + irpsp->Parameters.Create.EaLength = 0; + + irp->Tail.Overlay.OriginalFileObject = file; + irp->RequestorMode = UserMode; + irp->AssociatedIrp.SystemBuffer = NULL; + irp->UserBuffer = NULL; + irp->UserIosb = irp_handle; /* note: we abuse UserIosb to store the server irp handle */ + irp->UserEvent = NULL; + + if (!device->DriverObject->MajorFunction[IRP_MJ_CLOSE]) + { + irp->IoStatus.u.Status = STATUS_SUCCESS; + IoCompleteRequest( irp, IO_NO_INCREMENT ); + } + else dispatch_irp( device, irp ); + + HeapFree( GetProcessHeap(), 0, file ); /* FIXME: async close processing not supported */ + return STATUS_SUCCESS; +} + /* process a read request for a given device */ -static NTSTATUS dispatch_read( DEVICE_OBJECT *device, const irp_params_t *params, - void *in_buff, ULONG in_size, ULONG out_size, HANDLE irp_handle ) +static NTSTATUS dispatch_read( const irp_params_t *params, void *in_buff, ULONG in_size, + ULONG out_size, HANDLE irp_handle ) { IRP *irp; void *out_buff; LARGE_INTEGER offset; IO_STACK_LOCATION *irpsp; + DEVICE_OBJECT *device; + FILE_OBJECT *file = wine_server_get_ptr( params->read.file ); - TRACE( "device %p size %u\n", device, out_size ); + if (!file) return STATUS_INVALID_HANDLE; + + device = file->DeviceObject; + if (!device->DriverObject->MajorFunction[IRP_MJ_READ]) return STATUS_NOT_SUPPORTED; + + TRACE( "device %p file %p size %u\n", device, file, out_size ); if (!(out_buff = HeapAlloc( GetProcessHeap(), 0, out_size ))) return STATUS_NO_MEMORY; @@ -174,6 +269,9 @@ return STATUS_NO_MEMORY; } + irp->Tail.Overlay.OriginalFileObject = file; + irp->RequestorMode = UserMode; + irpsp = IoGetNextIrpStackLocation( irp ); irpsp->Parameters.Read.Key = params->read.key; @@ -181,14 +279,21 @@ } /* process a write request for a given device */ -static NTSTATUS dispatch_write( DEVICE_OBJECT *device, const irp_params_t *params, - void *in_buff, ULONG in_size, ULONG out_size, HANDLE irp_handle ) +static NTSTATUS dispatch_write( const irp_params_t *params, void *in_buff, ULONG in_size, + ULONG out_size, HANDLE irp_handle ) { IRP *irp; LARGE_INTEGER offset; IO_STACK_LOCATION *irpsp; + DEVICE_OBJECT *device; + FILE_OBJECT *file = wine_server_get_ptr( params->write.file ); + + if (!file) return STATUS_INVALID_HANDLE; + + device = file->DeviceObject; + if (!device->DriverObject->MajorFunction[IRP_MJ_WRITE]) return STATUS_NOT_SUPPORTED; - TRACE( "device %p size %u\n", device, in_size ); + TRACE( "device %p file %p size %u\n", device, file, in_size ); offset.QuadPart = params->write.pos; @@ -197,6 +302,9 @@ &offset, NULL, irp_handle ))) return STATUS_NO_MEMORY; + irp->Tail.Overlay.OriginalFileObject = file; + irp->RequestorMode = UserMode; + irpsp = IoGetNextIrpStackLocation( irp ); irpsp->Parameters.Write.Key = params->write.key; @@ -204,29 +312,47 @@ } /* process a flush request for a given device */ -static NTSTATUS dispatch_flush( DEVICE_OBJECT *device, const irp_params_t *params, - void *in_buff, ULONG in_size, ULONG out_size, HANDLE irp_handle ) +static NTSTATUS dispatch_flush( const irp_params_t *params, void *in_buff, ULONG in_size, + ULONG out_size, HANDLE irp_handle ) { IRP *irp; + DEVICE_OBJECT *device; + FILE_OBJECT *file = wine_server_get_ptr( params->flush.file ); + + if (!file) return STATUS_INVALID_HANDLE; - TRACE( "device %p\n", device ); + device = file->DeviceObject; + if (!device->DriverObject->MajorFunction[IRP_MJ_FLUSH_BUFFERS]) return STATUS_NOT_SUPPORTED; + + TRACE( "device %p file %p\n", device, file ); /* note: we abuse UserIosb to store the server irp handle */ if (!(irp = IoBuildSynchronousFsdRequest( IRP_MJ_FLUSH_BUFFERS, device, in_buff, in_size, NULL, NULL, irp_handle ))) return STATUS_NO_MEMORY; + irp->Tail.Overlay.OriginalFileObject = file; + irp->RequestorMode = UserMode; + return dispatch_irp( device, irp ); } /* process an ioctl request for a given device */ -static NTSTATUS dispatch_ioctl( DEVICE_OBJECT *device, const irp_params_t *params, - void *in_buff, ULONG in_size, ULONG out_size, HANDLE irp_handle ) +static NTSTATUS dispatch_ioctl( const irp_params_t *params, void *in_buff, ULONG in_size, + ULONG out_size, HANDLE irp_handle ) { IRP *irp; void *out_buff = NULL; + DEVICE_OBJECT *device; + FILE_OBJECT *file = wine_server_get_ptr( params->ioctl.file ); + + if (!file) return STATUS_INVALID_HANDLE; + + device = file->DeviceObject; + if (!device->DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]) return STATUS_NOT_SUPPORTED; - TRACE( "ioctl %x device %p in_size %u out_size %u\n", params->ioctl.code, device, in_size, out_size ); + TRACE( "ioctl %x device %p file %p in_size %u out_size %u\n", + params->ioctl.code, device, file, in_size, out_size ); if ((params->ioctl.code & 3) == METHOD_BUFFERED) out_size = max( in_size, out_size ); @@ -248,17 +374,21 @@ HeapFree( GetProcessHeap(), 0, out_buff ); return STATUS_NO_MEMORY; } + + irp->Tail.Overlay.OriginalFileObject = file; + irp->RequestorMode = UserMode; + return dispatch_irp( device, irp ); } -typedef NTSTATUS (*dispatch_func)( DEVICE_OBJECT *device, const irp_params_t *params, - void *in_buff, ULONG in_size, ULONG out_size, HANDLE irp_handle ); +typedef NTSTATUS (*dispatch_func)( const irp_params_t *params, void *in_buff, ULONG in_size, + ULONG out_size, HANDLE irp_handle ); static const dispatch_func dispatch_funcs[IRP_MJ_MAXIMUM_FUNCTION + 1] = { - NULL, /* IRP_MJ_CREATE */ + dispatch_create, /* IRP_MJ_CREATE */ NULL, /* IRP_MJ_CREATE_NAMED_PIPE */ - NULL, /* IRP_MJ_CLOSE */ + dispatch_close, /* IRP_MJ_CLOSE */ dispatch_read, /* IRP_MJ_READ */ dispatch_write, /* IRP_MJ_WRITE */ NULL, /* IRP_MJ_QUERY_INFORMATION */ @@ -297,7 +427,6 @@ NTSTATUS status = STATUS_SUCCESS; irp_params_t irp_params; void *in_buff; - DEVICE_OBJECT *device = NULL; ULONG in_size = 4096, out_size = 0; HANDLE handles[2]; @@ -323,7 +452,6 @@ if (!(status = wine_server_call( req ))) { irp = wine_server_ptr_handle( reply->next ); - device = wine_server_get_ptr( reply->user_ptr ); irp_params = reply->params; client_tid = reply->client_tid; client_pid = reply->client_pid; @@ -342,16 +470,13 @@ switch(status) { case STATUS_SUCCESS: - if (irp_params.major > IRP_MJ_MAXIMUM_FUNCTION || - !dispatch_funcs[irp_params.major] || - !device->DriverObject->MajorFunction[irp_params.major]) + if (irp_params.major > IRP_MJ_MAXIMUM_FUNCTION || !dispatch_funcs[irp_params.major]) { WARN( "unsupported request %u\n", irp_params.major ); status = STATUS_NOT_SUPPORTED; break; } - status = dispatch_funcs[irp_params.major]( device, &irp_params, - in_buff, in_size, out_size, irp ); + status = dispatch_funcs[irp_params.major]( &irp_params, in_buff, in_size, out_size, irp ); if (status == STATUS_SUCCESS) irp = 0; /* status reported by IoCompleteRequest */ break; case STATUS_BUFFER_OVERFLOW: @@ -1142,12 +1267,14 @@ { HANDLE manager = get_device_manager(); void *out_buff = irp->UserBuffer; + FILE_OBJECT *file = irp->Tail.Overlay.OriginalFileObject; SERVER_START_REQ( set_irp_result ) { - req->manager = wine_server_obj_handle( manager ); - req->handle = wine_server_obj_handle( handle ); - req->status = irp->IoStatus.u.Status; + req->manager = wine_server_obj_handle( manager ); + req->handle = wine_server_obj_handle( handle ); + req->status = irp->IoStatus.u.Status; + req->file_ptr = wine_server_client_ptr( file ); if (irp->IoStatus.u.Status >= 0) { req->size = irp->IoStatus.Information; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/ntoskrnl.exe/ntoskrnl.exe.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/ntoskrnl.exe/ntoskrnl.exe.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/ntoskrnl.exe/ntoskrnl.exe.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/ntoskrnl.exe/ntoskrnl.exe.spec 2015-07-12 05:36:18.000000000 +0000 @@ -977,7 +977,7 @@ @ stub RtlCustomCPToUnicodeN @ stdcall RtlDecompressBuffer(long ptr long ptr long ptr) ntdll.RtlDecompressBuffer @ stub RtlDecompressChunks -@ stub RtlDecompressFragment +@ stdcall RtlDecompressFragment(long ptr long ptr long long ptr ptr) ntdll.RtlDecompressFragment @ stub RtlDelete @ stdcall RtlDeleteAce(ptr long) ntdll.RtlDeleteAce @ stdcall RtlDeleteAtomFromAtomTable(ptr long) ntdll.RtlDeleteAtomFromAtomTable diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/ole32/filelockbytes.c wine-staging-1.7.47~ubuntu14.10.1/dlls/ole32/filelockbytes.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/ole32/filelockbytes.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/ole32/filelockbytes.c 2015-07-12 05:36:18.000000000 +0000 @@ -386,6 +386,8 @@ pstatstg->cbSize.u.LowPart = GetFileSize(This->hfile, &pstatstg->cbSize.u.HighPart); /* FIXME: If the implementation is exported, we'll need to set other fields. */ + pstatstg->grfLocksSupported = LOCK_EXCLUSIVE|LOCK_ONLYONCE|WINE_LOCK_READ; + return S_OK; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/ole32/ole2.c wine-staging-1.7.47~ubuntu14.10.1/dlls/ole32/ole2.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/ole32/ole2.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/ole32/ole2.c 2015-07-12 05:36:18.000000000 +0000 @@ -2453,6 +2453,9 @@ if ( (keyboardState[VK_CONTROL] & 0x80) !=0) keyMask |= MK_CONTROL; + if ( (keyboardState[VK_MENU] & 0x80) !=0) + keyMask |= MK_ALT; + if ( (keyboardState[VK_LBUTTON] & 0x80) !=0) keyMask |= MK_LBUTTON; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/ole32/storage32.c wine-staging-1.7.47~ubuntu14.10.1/dlls/ole32/storage32.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/ole32/storage32.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/ole32/storage32.c 2015-07-12 05:36:18.000000000 +0000 @@ -2421,7 +2421,12 @@ /* * Enumerate the elements */ - IStorage_EnumElements( childStorage, 0, 0, 0, &elements); + hr = IStorage_EnumElements(childStorage, 0, 0, 0, &elements); + if (FAILED(hr)) + { + IStorage_Release(childStorage); + return hr; + } do { @@ -4817,9 +4822,31 @@ return S_OK; } +static HRESULT StorageImpl_LockRegion(StorageImpl *This, ULARGE_INTEGER offset, + ULARGE_INTEGER cb, DWORD dwLockType, BOOL *supported) +{ + if ((dwLockType & This->locks_supported) == 0) + { + if (supported) *supported = FALSE; + return S_OK; + } + + if (supported) *supported = TRUE; + return ILockBytes_LockRegion(This->lockBytes, offset, cb, dwLockType); +} + +static HRESULT StorageImpl_UnlockRegion(StorageImpl *This, ULARGE_INTEGER offset, + ULARGE_INTEGER cb, DWORD dwLockType) +{ + if ((dwLockType & This->locks_supported) == 0) + return S_OK; + + return ILockBytes_UnlockRegion(This->lockBytes, offset, cb, dwLockType); +} + /* Internal function */ static HRESULT StorageImpl_LockRegionSync(StorageImpl *This, ULARGE_INTEGER offset, - ULARGE_INTEGER cb, DWORD dwLockType) + ULARGE_INTEGER cb, DWORD dwLockType, BOOL *supported) { HRESULT hr; int delay = 0; @@ -4832,7 +4859,7 @@ do { - hr = ILockBytes_LockRegion(This->lockBytes, offset, cb, dwLockType); + hr = StorageImpl_LockRegion(This, offset, cb, dwLockType, supported); if (hr == STG_E_ACCESSDENIED || hr == STG_E_LOCKVIOLATION) { @@ -4852,17 +4879,12 @@ * * This can collide with another attempt to open the file in * exclusive mode, but it's unlikely, and someone would fail anyway. */ - hr = ILockBytes_LockRegion(This->lockBytes, sanity_offset, sanity_cb, 0); + hr = StorageImpl_LockRegion(This, sanity_offset, sanity_cb, WINE_LOCK_READ, NULL); if (hr == STG_E_ACCESSDENIED || hr == STG_E_LOCKVIOLATION) break; - if (hr == STG_E_INVALIDFUNCTION) - { - /* ignore this, lockbytes might support dwLockType but not 0 */ - hr = STG_E_ACCESSDENIED; - } if (SUCCEEDED(hr)) { - ILockBytes_UnlockRegion(This->lockBytes, sanity_offset, sanity_cb, 0); + StorageImpl_UnlockRegion(This, sanity_offset, sanity_cb, WINE_LOCK_READ); hr = STG_E_ACCESSDENIED; } @@ -4895,10 +4917,7 @@ cb.QuadPart = 1; } - hr = StorageImpl_LockRegionSync(This, offset, cb, LOCK_ONLYONCE); - - if (hr == STG_E_INVALIDFUNCTION) - hr = S_OK; + hr = StorageImpl_LockRegionSync(This, offset, cb, LOCK_ONLYONCE, NULL); return hr; } @@ -4920,10 +4939,7 @@ cb.QuadPart = 1; } - hr = ILockBytes_UnlockRegion(This->lockBytes, offset, cb, LOCK_ONLYONCE); - - if (hr == STG_E_INVALIDFUNCTION) - hr = S_OK; + hr = StorageImpl_UnlockRegion(This, offset, cb, LOCK_ONLYONCE); return hr; } @@ -4950,10 +4966,10 @@ offset.QuadPart = start; cb.QuadPart = 1 + end - start; - hr = ILockBytes_LockRegion(This->lockBytes, offset, cb, LOCK_ONLYONCE); - if (SUCCEEDED(hr)) ILockBytes_UnlockRegion(This->lockBytes, offset, cb, LOCK_ONLYONCE); + hr = StorageImpl_LockRegion(This, offset, cb, LOCK_ONLYONCE, NULL); + if (SUCCEEDED(hr)) StorageImpl_UnlockRegion(This, offset, cb, LOCK_ONLYONCE); - if (hr == STG_E_ACCESSDENIED || hr == STG_E_LOCKVIOLATION) + if (FAILED(hr)) return fail_hr; else return S_OK; @@ -4970,7 +4986,7 @@ for (i=start; i<=end; i++) { offset.QuadPart = i; - hr = ILockBytes_LockRegion(This->lockBytes, offset, cb, LOCK_ONLYONCE); + hr = StorageImpl_LockRegion(This, offset, cb, LOCK_ONLYONCE, NULL); if (hr != STG_E_ACCESSDENIED && hr != STG_E_LOCKVIOLATION) break; } @@ -4996,6 +5012,7 @@ ULARGE_INTEGER offset; ULARGE_INTEGER cb; DWORD share_mode = STGM_SHARE_MODE(openFlags); + BOOL supported; if (openFlags & STGM_NOSNAPSHOT) { @@ -5007,10 +5024,10 @@ /* Wrap all other locking inside a single lock so we can check ranges safely */ offset.QuadPart = RANGELOCK_CHECKLOCKS; cb.QuadPart = 1; - hr = StorageImpl_LockRegionSync(This, offset, cb, LOCK_ONLYONCE); + hr = StorageImpl_LockRegionSync(This, offset, cb, LOCK_ONLYONCE, &supported); /* If the ILockBytes doesn't support locking that's ok. */ - if (hr == STG_E_INVALIDFUNCTION) return S_OK; + if (!supported) return S_OK; else if (FAILED(hr)) return hr; hr = S_OK; @@ -5064,7 +5081,7 @@ offset.QuadPart = RANGELOCK_CHECKLOCKS; cb.QuadPart = 1; - ILockBytes_UnlockRegion(This->lockBytes, offset, cb, LOCK_ONLYONCE); + StorageImpl_UnlockRegion(This, offset, cb, LOCK_ONLYONCE); return hr; } @@ -5129,7 +5146,7 @@ if (This->locked_bytes[i] != 0) { offset.QuadPart = This->locked_bytes[i]; - ILockBytes_UnlockRegion(This->lockBytes, offset, cb, LOCK_ONLYONCE); + StorageImpl_UnlockRegion(This, offset, cb, LOCK_ONLYONCE); } } @@ -5196,7 +5213,8 @@ StorageImpl** result) { StorageImpl* This; - HRESULT hr = S_OK; + HRESULT hr = S_OK; + STATSTG stat; if ( FAILED( validateSTGM(openFlags) )) return STG_E_INVALIDFLAG; @@ -5242,7 +5260,17 @@ } if (SUCCEEDED(hr)) + hr = ILockBytes_Stat(This->lockBytes, &stat, STATFLAG_NONAME); + + if (SUCCEEDED(hr)) + { + This->locks_supported = stat.grfLocksSupported; + if (!hFile) + /* Don't try to use wine-internal locking flag with custom ILockBytes */ + This->locks_supported &= ~WINE_LOCK_READ; + hr = StorageImpl_GrabLocks(This, openFlags); + } if (SUCCEEDED(hr)) hr = StorageImpl_Refresh(This, TRUE, create); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/ole32/storage32.h wine-staging-1.7.47~ubuntu14.10.1/dlls/ole32/storage32.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/ole32/storage32.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/ole32/storage32.h 2015-07-12 05:36:18.000000000 +0000 @@ -411,6 +411,8 @@ BlockChainStream* blockChainCache[BLOCKCHAIN_CACHE_SIZE]; UINT blockChainToEvict; + ULONG locks_supported; + ILockBytes* lockBytes; ULONG locked_bytes[8]; @@ -517,6 +519,9 @@ #define RANGELOCK_FIRST RANGELOCK_UNK1_FIRST #define RANGELOCK_LAST RANGELOCK_UNK2_LAST +/* internal value for LockRegion/UnlockRegion */ +#define WINE_LOCK_READ 0x80000000 + /****************************************************************************** * Endian conversion macros diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/ole32/tests/storage32.c wine-staging-1.7.47~ubuntu14.10.1/dlls/ole32/tests/storage32.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/ole32/tests/storage32.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/ole32/tests/storage32.c 2015-07-12 05:36:18.000000000 +0000 @@ -57,6 +57,201 @@ return lstrcmpA(stra1, stra2); } +typedef struct TestLockBytes { + ILockBytes ILockBytes_iface; + LONG ref; + BYTE* contents; + ULONG size; + ULONG buffer_size; + HRESULT lock_hr; + ULONG locks_supported; + ULONG lock_called; +} TestLockBytes; + +static inline TestLockBytes *impl_from_ILockBytes(ILockBytes *iface) +{ + return CONTAINING_RECORD(iface, TestLockBytes, ILockBytes_iface); +} + +static HRESULT WINAPI TestLockBytes_QueryInterface(ILockBytes *iface, REFIID iid, + void **ppv) +{ + TestLockBytes *This = impl_from_ILockBytes(iface); + + if (!ppv) return E_INVALIDARG; + + if (IsEqualIID(&IID_IUnknown, iid) || + IsEqualIID(&IID_ILockBytes, iid)) + *ppv = &This->ILockBytes_iface; + else + return E_NOINTERFACE; + + IUnknown_AddRef((IUnknown*)*ppv); + return S_OK; +} + +static ULONG WINAPI TestLockBytes_AddRef(ILockBytes *iface) +{ + TestLockBytes *This = impl_from_ILockBytes(iface); + ULONG ref = InterlockedIncrement(&This->ref); + return ref; +} + +static ULONG WINAPI TestLockBytes_Release(ILockBytes *iface) +{ + TestLockBytes *This = impl_from_ILockBytes(iface); + ULONG ref = InterlockedDecrement(&This->ref); + return ref; +} + +static HRESULT WINAPI TestLockBytes_ReadAt(ILockBytes *iface, + ULARGE_INTEGER ulOffset, void *pv, ULONG cb, ULONG *pcbRead) +{ + TestLockBytes *This = impl_from_ILockBytes(iface); + ULONG dummy; + + if (!pv) return E_INVALIDARG; + + if (!pcbRead) pcbRead = &dummy; + + if (ulOffset.QuadPart >= This->size) + { + *pcbRead = 0; + return S_OK; + } + + cb = min(cb, This->size - ulOffset.QuadPart); + + *pcbRead = cb; + memcpy(pv, &This->contents[ulOffset.QuadPart], cb); + + return S_OK; +} + +static HRESULT WINAPI TestLockBytes_WriteAt(ILockBytes *iface, + ULARGE_INTEGER ulOffset, const void *pv, ULONG cb, ULONG *pcbWritten) +{ + TestLockBytes *This = impl_from_ILockBytes(iface); + HRESULT hr; + ULONG dummy; + + if (!pv) return E_INVALIDARG; + + if (!pcbWritten) pcbWritten = &dummy; + + if (ulOffset.QuadPart + cb > This->size) + { + ULARGE_INTEGER new_size; + new_size.QuadPart = ulOffset.QuadPart + cb; + hr = ILockBytes_SetSize(iface, new_size); + if (FAILED(hr)) return hr; + } + + *pcbWritten = cb; + memcpy(&This->contents[ulOffset.QuadPart], pv, cb); + + return S_OK; +} + +static HRESULT WINAPI TestLockBytes_Flush(ILockBytes *iface) +{ + return S_OK; +} + +static HRESULT WINAPI TestLockBytes_SetSize(ILockBytes *iface, + ULARGE_INTEGER cb) +{ + TestLockBytes *This = impl_from_ILockBytes(iface); + + if (This->buffer_size < cb.QuadPart) + { + ULONG new_buffer_size = max(This->buffer_size * 2, cb.QuadPart); + BYTE* new_buffer = HeapAlloc(GetProcessHeap(), 0, new_buffer_size); + if (!new_buffer) return E_OUTOFMEMORY; + memcpy(new_buffer, This->contents, This->size); + HeapFree(GetProcessHeap(), 0, This->contents); + This->contents = new_buffer; + } + + if (cb.QuadPart > This->size) + memset(&This->contents[This->size], 0, cb.QuadPart - This->size); + + This->size = cb.QuadPart; + + return S_OK; +} + +static HRESULT WINAPI TestLockBytes_LockRegion(ILockBytes *iface, + ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) +{ + TestLockBytes *This = impl_from_ILockBytes(iface); + This->lock_called++; + return This->lock_hr; +} + +static HRESULT WINAPI TestLockBytes_UnlockRegion(ILockBytes *iface, + ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) +{ + TestLockBytes *This = impl_from_ILockBytes(iface); + return This->lock_hr; +} + +static HRESULT WINAPI TestLockBytes_Stat(ILockBytes *iface, + STATSTG *pstatstg, DWORD grfStatFlag) +{ + TestLockBytes *This = impl_from_ILockBytes(iface); + static const WCHAR dummy_name[] = {'d','u','m','m','y',0}; + + if (!pstatstg) return E_INVALIDARG; + + memset(pstatstg, 0, sizeof(STATSTG)); + + if (!(grfStatFlag & STATFLAG_NONAME)) + { + pstatstg->pwcsName = CoTaskMemAlloc(sizeof(dummy_name)); + if (!pstatstg->pwcsName) return E_OUTOFMEMORY; + memcpy(pstatstg->pwcsName, dummy_name, sizeof(dummy_name)); + } + + pstatstg->type = STGTY_LOCKBYTES; + pstatstg->cbSize.QuadPart = This->size; + pstatstg->grfLocksSupported = This->locks_supported; + + return S_OK; +} + +static const ILockBytesVtbl TestLockBytes_Vtbl = { + TestLockBytes_QueryInterface, + TestLockBytes_AddRef, + TestLockBytes_Release, + TestLockBytes_ReadAt, + TestLockBytes_WriteAt, + TestLockBytes_Flush, + TestLockBytes_SetSize, + TestLockBytes_LockRegion, + TestLockBytes_UnlockRegion, + TestLockBytes_Stat +}; + +static void CreateTestLockBytes(TestLockBytes **This) +{ + *This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(**This)); + + if (*This) + { + (*This)->ILockBytes_iface.lpVtbl = &TestLockBytes_Vtbl; + (*This)->ref = 1; + } +} + +static void DeleteTestLockBytes(TestLockBytes *This) +{ + ok(This->ILockBytes_iface.lpVtbl == &TestLockBytes_Vtbl, "test lock bytes %p deleted with incorrect vtable\n", This); + ok(This->ref == 1, "test lock bytes %p deleted with %i references instead of 1\n", This, This->ref); + HeapFree(GetProcessHeap(), 0, This->contents); + HeapFree(GetProcessHeap(), 0, This); +} + static void test_hglobal_storage_stat(void) { ILockBytes *ilb = NULL; @@ -3645,6 +3840,54 @@ DeleteFileA(filenameA); } +static void test_custom_lockbytes(void) +{ + static const WCHAR stmname[] = { 'C','O','N','T','E','N','T','S',0 }; + TestLockBytes* lockbytes; + HRESULT hr; + IStorage* stg; + IStream* stm; + + CreateTestLockBytes(&lockbytes); + + hr = StgCreateDocfileOnILockBytes(&lockbytes->ILockBytes_iface, STGM_CREATE|STGM_READWRITE|STGM_TRANSACTED, 0, &stg); + ok(hr==S_OK, "StgCreateDocfileOnILockBytes failed %x\n", hr); + + hr = IStorage_CreateStream(stg, stmname, STGM_SHARE_EXCLUSIVE|STGM_READWRITE, 0, 0, &stm); + ok(hr==S_OK, "IStorage_CreateStream failed %x\n", hr); + + IStream_Release(stm); + + hr = IStorage_Commit(stg, 0); + + IStorage_Release(stg); + + ok(!lockbytes->lock_called, "unexpected call to LockRegion\n"); + + lockbytes->locks_supported = LOCK_WRITE|LOCK_EXCLUSIVE|LOCK_ONLYONCE; + + hr = StgCreateDocfileOnILockBytes(&lockbytes->ILockBytes_iface, STGM_CREATE|STGM_READWRITE|STGM_TRANSACTED, 0, &stg); + ok(hr==S_OK, "StgCreateDocfileOnILockBytes failed %x\n", hr); + + hr = IStorage_CreateStream(stg, stmname, STGM_SHARE_EXCLUSIVE|STGM_READWRITE, 0, 0, &stm); + ok(hr==S_OK, "IStorage_CreateStream failed %x\n", hr); + + IStream_Release(stm); + + hr = IStorage_Commit(stg, 0); + + IStorage_Release(stg); + + ok(lockbytes->lock_called, "expected LockRegion to be called\n"); + + lockbytes->lock_hr = STG_E_INVALIDFUNCTION; + + hr = StgCreateDocfileOnILockBytes(&lockbytes->ILockBytes_iface, STGM_CREATE|STGM_READWRITE|STGM_TRANSACTED, 0, &stg); + ok(hr==STG_E_INVALIDFUNCTION, "StgCreateDocfileOnILockBytes failed %x\n", hr); + + DeleteTestLockBytes(lockbytes); +} + START_TEST(storage32) { CHAR temp[MAX_PATH]; @@ -3693,4 +3936,5 @@ test_locking(); test_transacted_shared(); test_overwrite(); + test_custom_lockbytes(); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/oleaut32/tmarshal.c wine-staging-1.7.47~ubuntu14.10.1/dlls/oleaut32/tmarshal.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/oleaut32/tmarshal.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/oleaut32/tmarshal.c 2015-07-12 05:36:18.000000000 +0000 @@ -263,18 +263,71 @@ static ULONG WINAPI PSFacBuf_AddRef(LPPSFACTORYBUFFER iface) { return 2; } static ULONG WINAPI PSFacBuf_Release(LPPSFACTORYBUFFER iface) { return 1; } -static HRESULT -_get_typeinfo_for_iid(REFIID riid, ITypeInfo**ti) { - HRESULT hres; +struct ifacepsredirect_data +{ + ULONG size; + DWORD mask; + GUID iid; + ULONG nummethods; + GUID tlbid; + GUID base; + ULONG name_len; + ULONG name_offset; +}; + +struct tlibredirect_data +{ + ULONG size; + DWORD res; + ULONG name_len; + ULONG name_offset; + LANGID langid; + WORD flags; + ULONG help_len; + ULONG help_offset; + WORD major_version; + WORD minor_version; +}; + +static BOOL actctx_get_typelib_module(REFIID riid, WCHAR *module, DWORD len) +{ + struct ifacepsredirect_data *iface; + struct tlibredirect_data *tlib; + ACTCTX_SECTION_KEYED_DATA data; + WCHAR *ptrW; + + data.cbSize = sizeof(data); + if (!FindActCtxSectionGuid(0, NULL, ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION, + riid, &data)) + return FALSE; + + iface = (struct ifacepsredirect_data*)data.lpData; + if (!FindActCtxSectionGuid(0, NULL, ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION, + &iface->tlbid, &data)) + return FALSE; + + tlib = (struct tlibredirect_data*)data.lpData; + ptrW = (WCHAR*)((BYTE*)data.lpSectionBase + tlib->name_offset); + + if (tlib->name_len/sizeof(WCHAR) >= len) { + ERR("need larger module buffer, %u\n", tlib->name_len); + return FALSE; + } + + memcpy(module, ptrW, tlib->name_len); + module[tlib->name_len/sizeof(WCHAR)] = 0; + return TRUE; +} + +static HRESULT reg_get_typelib_module(REFIID riid, WCHAR *module, DWORD len) +{ HKEY ikey; REGSAM opposite = (sizeof(void*) == 8) ? KEY_WOW64_32KEY : KEY_WOW64_64KEY; BOOL is_wow64; char tlguid[200],typelibkey[300],interfacekey[300],ver[100]; char tlfn[260]; - OLECHAR tlfnW[260]; DWORD tlguidlen, verlen, type; LONG tlfnlen, err; - ITypeLib *tl; sprintf( interfacekey, "Interface\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\\Typelib", riid->Data1, riid->Data2, riid->Data3, @@ -318,19 +371,37 @@ } #endif } - MultiByteToWideChar(CP_ACP, 0, tlfn, -1, tlfnW, sizeof(tlfnW) / sizeof(tlfnW[0])); - hres = LoadTypeLib(tlfnW,&tl); - if (hres) { - ERR("Failed to load typelib for %s, but it should be there.\n",debugstr_guid(riid)); - return hres; + MultiByteToWideChar(CP_ACP, 0, tlfn, -1, module, len); + return S_OK; +} + +static HRESULT +_get_typeinfo_for_iid(REFIID riid, ITypeInfo **typeinfo) +{ + OLECHAR moduleW[260]; + ITypeLib *typelib; + HRESULT hres; + + *typeinfo = NULL; + + moduleW[0] = 0; + if (!actctx_get_typelib_module(riid, moduleW, sizeof(moduleW)/sizeof(moduleW[0]))) { + hres = reg_get_typelib_module(riid, moduleW, sizeof(moduleW)/sizeof(moduleW[0])); + if (FAILED(hres)) + return hres; } - hres = ITypeLib_GetTypeInfoOfGuid(tl,riid,ti); - if (hres) { - ERR("typelib does not contain info for %s?\n",debugstr_guid(riid)); - ITypeLib_Release(tl); + + hres = LoadTypeLib(moduleW, &typelib); + if (hres != S_OK) { + ERR("Failed to load typelib for %s, but it should be there.\n",debugstr_guid(riid)); return hres; } - ITypeLib_Release(tl); + + hres = ITypeLib_GetTypeInfoOfGuid(typelib, riid, typeinfo); + ITypeLib_Release(typelib); + if (hres != S_OK) + ERR("typelib does not contain info for %s\n", debugstr_guid(riid)); + return hres; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/psapi/tests/psapi_main.c wine-staging-1.7.47~ubuntu14.10.1/dlls/psapi/tests/psapi_main.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/psapi/tests/psapi_main.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/psapi/tests/psapi_main.c 2015-07-12 05:36:18.000000000 +0000 @@ -136,6 +136,11 @@ ok(ret == 1, "failed with %d\n", GetLastError()); SetLastError(0xdeadbeef); + ret = pEnumProcessModules(hpQV, NULL, sizeof(HMODULE), &cbNeeded); + ok(!ret, "succeeded\n"); + ok(GetLastError() == ERROR_NOACCESS, "expected error=ERROR_NOACCESS but got %d\n", GetLastError()); + + SetLastError(0xdeadbeef); ret = pEnumProcessModules(hpQV, &hMod, sizeof(HMODULE), &cbNeeded); if(ret != 1) return; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/qmgr/file.c wine-staging-1.7.47~ubuntu14.10.1/dlls/qmgr/file.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/qmgr/file.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/qmgr/file.c 2015-07-12 05:36:18.000000000 +0000 @@ -378,7 +378,7 @@ if (!(ses = WinHttpOpen(NULL, 0, NULL, NULL, WINHTTP_FLAG_ASYNC))) return FALSE; WinHttpSetStatusCallback(ses, progress_callback_http, WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS, 0); - if (!WinHttpSetOption(ses, WINHTTP_OPTION_CONTEXT_VALUE, file, sizeof(file))) goto done; + if (!WinHttpSetOption(ses, WINHTTP_OPTION_CONTEXT_VALUE, &file, sizeof(file))) goto done; if (!(con = WinHttpConnect(ses, uc->lpszHostName, uc->nPort, 0))) goto done; if (!(req = WinHttpOpenRequest(con, NULL, uc->lpszUrlPath, NULL, NULL, NULL, flags))) goto done; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/riched20/richole.c wine-staging-1.7.47~ubuntu14.10.1/dlls/riched20/richole.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/riched20/richole.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/riched20/richole.c 2015-07-12 05:36:18.000000000 +0000 @@ -2368,7 +2368,7 @@ { ITextRangeImpl *This = impl_from_ITextRange(me); - FIXME("(%p)->(%p %x %p): stub\n", This, debugstr_variant(v), format, ret); + FIXME("(%p)->(%s %x %p): stub\n", This, debugstr_variant(v), format, ret); if (!This->child.reole) return CO_E_RELEASED; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/riched20/run.c wine-staging-1.7.47~ubuntu14.10.1/dlls/riched20/run.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/riched20/run.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/riched20/run.c 2015-07-12 05:36:18.000000000 +0000 @@ -776,6 +776,7 @@ style = ME_ApplyStyle(editor->pBuffer->pDefaultStyle, mod); editor->pBuffer->pDefaultStyle->fmt = style->fmt; editor->pBuffer->pDefaultStyle->tm = style->tm; + ScriptFreeCache( &editor->pBuffer->pDefaultStyle->script_cache ); ME_ReleaseStyle(style); ME_MarkAllForWrapping(editor); /* pcf = editor->pBuffer->pDefaultStyle->fmt; */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/secur32/tests/schannel.c wine-staging-1.7.47~ubuntu14.10.1/dlls/secur32/tests/schannel.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/secur32/tests/schannel.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/secur32/tests/schannel.c 2015-07-12 05:36:18.000000000 +0000 @@ -22,6 +22,7 @@ #include #include #include +#include #define SECURITY_WIN32 #include #include @@ -114,6 +115,8 @@ 0x0a, 0x8c, 0xb4, 0x5c, 0x34, 0x78, 0xe0, 0x3c, 0x9c, 0xe9, 0xf3, 0x30, 0x9f, 0xa8, 0x76, 0x57, 0x92, 0x36 }; +static CHAR unisp_name_a[] = UNISP_NAME_A; + static void InitFunctionPtrs(void) { HMODULE advapi32dll; @@ -153,6 +156,81 @@ #undef GET_PROC } +static const char *algid_to_str(ALG_ID alg) +{ + static char buf[12]; + switch(alg) { +#define X(x) case x: return #x + X(CALG_MD2); + X(CALG_MD4); + X(CALG_MD5); + X(CALG_SHA1); /* same as CALG_SHA */ + X(CALG_MAC); + X(CALG_RSA_SIGN); + X(CALG_DSS_SIGN); + X(CALG_NO_SIGN); + X(CALG_RSA_KEYX); + X(CALG_DES); + X(CALG_3DES_112); + X(CALG_3DES); + X(CALG_DESX); + X(CALG_RC2); + X(CALG_RC4); + X(CALG_SEAL); + X(CALG_DH_SF); + X(CALG_DH_EPHEM); + X(CALG_AGREEDKEY_ANY); + X(CALG_KEA_KEYX); + X(CALG_HUGHES_MD5); + X(CALG_SKIPJACK); + X(CALG_TEK); + X(CALG_CYLINK_MEK); + X(CALG_SSL3_SHAMD5); + X(CALG_SSL3_MASTER); + X(CALG_SCHANNEL_MASTER_HASH); + X(CALG_SCHANNEL_MAC_KEY); + X(CALG_SCHANNEL_ENC_KEY); + X(CALG_PCT1_MASTER); + X(CALG_SSL2_MASTER); + X(CALG_TLS1_MASTER); + X(CALG_RC5); + X(CALG_HMAC); + X(CALG_TLS1PRF); + X(CALG_HASH_REPLACE_OWF); + X(CALG_AES_128); + X(CALG_AES_192); + X(CALG_AES_256); + X(CALG_AES); + X(CALG_SHA_256); + X(CALG_SHA_384); + X(CALG_SHA_512); + X(CALG_ECDH); + X(CALG_ECMQV); + X(CALG_ECDSA); +#undef X + } + + sprintf(buf, "%x", alg); + return buf; +} + +static void init_cred(SCHANNEL_CRED *cred) +{ + cred->dwVersion = SCHANNEL_CRED_VERSION; + cred->cCreds = 0; + cred->paCred = 0; + cred->hRootStore = NULL; + cred->cMappers = 0; + cred->aphMappers = NULL; + cred->cSupportedAlgs = 0; + cred->palgSupportedAlgs = NULL; + cred->grbitEnabledProtocols = 0; + cred->dwMinimumCipherStrength = 0; + cred->dwMaximumCipherStrength = 0; + cred->dwSessionLifespan = 0; + cred->dwFlags = 0; +} + static void test_strength(PCredHandle handle) { SecPkgCred_CipherStrengths strength = {-1,-1}; @@ -190,6 +268,57 @@ trace("Unknown flags: %x\n", protocols.grbitProtocol); } +static void test_supported_algs(CredHandle *handle) +{ + SecPkgCred_SupportedAlgs algs; + SECURITY_STATUS status; + unsigned i; + + status = pQueryCredentialsAttributesA(handle, SECPKG_ATTR_SUPPORTED_ALGS, &algs); + todo_wine ok(status == SEC_E_OK, "QueryCredentialsAttributes failed: %08x\n", status); + if(status != SEC_E_OK) + return; + + trace("Supported algorithms (%d):\n", algs.cSupportedAlgs); + for(i=0; i < algs.cSupportedAlgs; i++) + trace(" %s\n", algid_to_str(algs.palgSupportedAlgs[i])); + + pFreeContextBuffer(algs.palgSupportedAlgs); +} + +static void test_cread_attrs(void) +{ + SCHANNEL_CRED schannel_cred; + SECURITY_STATUS status; + CredHandle cred; + + status = pAcquireCredentialsHandleA(NULL, unisp_name_a, SECPKG_CRED_OUTBOUND, + NULL, NULL, NULL, NULL, &cred, NULL); + ok(status == SEC_E_OK, "AcquireCredentialsHandleA failed: %x\n", status); + + test_supported_protocols(&cred, 0); + test_supported_algs(&cred); + + status = pQueryCredentialsAttributesA(&cred, SECPKG_ATTR_SUPPORTED_PROTOCOLS, NULL); + ok(status == SEC_E_INTERNAL_ERROR, "QueryCredentialsAttributes failed: %08x, expected SEC_E_INTERNAL_ERROR\n", status); + + status = pQueryCredentialsAttributesA(&cred, SECPKG_ATTR_SUPPORTED_ALGS, NULL); + ok(status == SEC_E_INTERNAL_ERROR, "QueryCredentialsAttributes failed: %08x, expected SEC_E_INTERNAL_ERROR\n", status); + + pFreeCredentialsHandle(&cred); + + init_cred(&schannel_cred); + schannel_cred.grbitEnabledProtocols = SP_PROT_TLS1_CLIENT; + status = pAcquireCredentialsHandleA(NULL, unisp_name_a, SECPKG_CRED_OUTBOUND, + NULL, &schannel_cred, NULL, NULL, &cred, NULL); + ok(status == SEC_E_OK, "AcquireCredentialsHandleA failed: %x\n", status); + + test_supported_protocols(&cred, SP_PROT_TLS1_CLIENT); + test_supported_algs(&cred); + + pFreeCredentialsHandle(&cred); +} + static void testAcquireSecurityContext(void) { BOOL has_schannel = FALSE; @@ -202,7 +331,6 @@ SCHANNEL_CRED schanCred; PCCERT_CONTEXT certs[2]; HCRYPTPROV csp; - static CHAR unisp_name_a[] = UNISP_NAME_A; WCHAR ms_def_prov_w[MAX_PATH]; BOOL ret; HCRYPTKEY key; @@ -286,13 +414,8 @@ st = pAcquireCredentialsHandleA(NULL, unisp_name_a, SECPKG_CRED_OUTBOUND, NULL, NULL, NULL, NULL, &cred, NULL); ok(st == SEC_E_OK, "AcquireCredentialsHandleA failed: %08x\n", st); - if(st == SEC_E_OK) { - st = pQueryCredentialsAttributesA(&cred, SECPKG_ATTR_SUPPORTED_PROTOCOLS, NULL); - ok(st == SEC_E_INTERNAL_ERROR, "QueryCredentialsAttributes failed: %08x, expected SEC_E_INTERNAL_ERROR\n", st); - - test_supported_protocols(&cred, 0); + if(st == SEC_E_OK) pFreeCredentialsHandle(&cred); - } memset(&cred, 0, sizeof(cred)); st = pAcquireCredentialsHandleA(NULL, unisp_name_a, SECPKG_CRED_OUTBOUND, NULL, NULL, NULL, NULL, &cred, &exp); @@ -523,23 +646,6 @@ static const char http_request[] = "HEAD /test.html HTTP/1.1\r\nHost: www.winehq.org\r\nConnection: close\r\n\r\n"; -static void init_cred(SCHANNEL_CRED *cred) -{ - cred->dwVersion = SCHANNEL_CRED_VERSION; - cred->cCreds = 0; - cred->paCred = 0; - cred->hRootStore = NULL; - cred->cMappers = 0; - cred->aphMappers = NULL; - cred->cSupportedAlgs = 0; - cred->palgSupportedAlgs = NULL; - cred->grbitEnabledProtocols = SP_PROT_TLS1_CLIENT; - cred->dwMinimumCipherStrength = 0; - cred->dwMaximumCipherStrength = 0; - cred->dwSessionLifespan = 0; - cred->dwFlags = 0; -} - static void init_buffers(SecBufferDesc *desc, unsigned count, unsigned size) { desc->ulVersion = SECBUFFER_VERSION; @@ -678,6 +784,7 @@ /* Create client credentials */ init_cred(&cred); + cred.grbitEnabledProtocols = SP_PROT_TLS1_CLIENT; cred.dwFlags = SCH_CRED_NO_DEFAULT_CREDS|SCH_CRED_MANUAL_CRED_VALIDATION; status = pAcquireCredentialsHandleA(NULL, (SEC_CHAR *)UNISP_NAME_A, SECPKG_CRED_OUTBOUND, NULL, @@ -685,8 +792,6 @@ ok(status == SEC_E_OK, "AcquireCredentialsHandleA failed: %08x\n", status); if (status != SEC_E_OK) return; - test_supported_protocols(&cred_handle, SP_PROT_TLS1_CLIENT); - /* Initialize the connection */ init_buffers(&buffers[0], 4, buf_size); init_buffers(&buffers[1], 4, buf_size); @@ -916,6 +1021,7 @@ { InitFunctionPtrs(); + test_cread_attrs(); testAcquireSecurityContext(); test_communication(); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/shdocvw/shdocvw_main.c wine-staging-1.7.47~ubuntu14.10.1/dlls/shdocvw/shdocvw_main.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/shdocvw/shdocvw_main.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/shdocvw/shdocvw_main.c 2015-07-12 05:36:18.000000000 +0000 @@ -78,7 +78,7 @@ */ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv) { - TRACE("\n"); + TRACE("(%s %s %p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv); if(IsEqualGUID(&CLSID_WebBrowser, rclsid) || IsEqualGUID(&CLSID_WebBrowser_V1, rclsid) @@ -146,7 +146,8 @@ TRACE("%p 0x%x %p\n", hinst, fdwReason, fImpLoad); switch (fdwReason) { - case DLL_PROCESS_ATTACH: + case DLL_PROCESS_ATTACH: + DisableThreadLibraryCalls(hinst); break; case DLL_PROCESS_DETACH: if (fImpLoad) break; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/assoc.c wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/assoc.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/assoc.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/assoc.c 2015-07-12 05:36:18.000000000 +0000 @@ -745,7 +745,7 @@ static const WCHAR edit_flags[] = {'E','d','i','t','F','l','a','g','s',0}; IQueryAssociationsImpl *This = impl_from_IQueryAssociations(iface); - void *data; + void *data = NULL; DWORD size; HRESULT hres; @@ -761,10 +761,8 @@ return HRESULT_FROM_WIN32(ERROR_NO_ASSOCIATION); hres = ASSOC_GetValue(This->hkeyProgID, edit_flags, &data, &size); - if(FAILED(hres) || !pcbOut) - return hres; - - hres = ASSOC_ReturnData(pvOut, pcbOut, data, size); + if(SUCCEEDED(hres) && pcbOut) + hres = ASSOC_ReturnData(pvOut, pcbOut, data, size); HeapFree(GetProcessHeap(), 0, data); return hres; default: diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/pidl.c wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/pidl.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/pidl.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/pidl.c 2015-07-12 05:36:18.000000000 +0000 @@ -1477,6 +1477,7 @@ { /* We might be able to get IPersistFolder2 from a shellfolder. */ ret = SHGetIDListFromObject((IUnknown*)psf, ppidl); + IShellFolder_Release(psf); } IFolderView_Release(pfv); return ret; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/shell32_classes.idl wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/shell32_classes.idl --- wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/shell32_classes.idl 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/shell32_classes.idl 2015-07-12 05:36:18.000000000 +0000 @@ -45,7 +45,7 @@ [ helpstring("Known Folder Manager"), - threading(apartment), + threading(both), uuid(4df0c730-df9d-4ae3-9153-aa6b82e9795a) ] coclass KnownFolderManager { interface IKnownFolderManager; } @@ -99,7 +99,7 @@ [ helpstring("Shortcut"), - threading(apartment), + threading(both), uuid(00021401-0000-0000-c000-000000000046) ] coclass ShellLink { interface IShellLinkW; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/shellpath.c wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/shellpath.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/shellpath.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/shellpath.c 2015-07-12 05:36:18.000000000 +0000 @@ -5334,7 +5334,11 @@ hr = HRESULT_FROM_WIN32(RegGetValueW(HKEY_LOCAL_MACHINE, knownfolder->registryPath, szParentFolder, RRF_RT_REG_SZ, NULL, parentGuid, &dwSize)); if(SUCCEEDED(hr)) - IIDFromString(parentGuid, &pKFD->fidParent); + { + hr = IIDFromString(parentGuid, &pKFD->fidParent); + if(FAILED(hr)) + return hr; + } get_known_folder_dword(knownfolder->registryPath, szAttributes, &pKFD->dwAttributes); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/shfldr_desktop.c wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/shfldr_desktop.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/shfldr_desktop.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/shfldr_desktop.c 2015-07-12 05:36:18.000000000 +0000 @@ -106,6 +106,8 @@ TRACE ("(%p)->(%s,%p)\n", This, shdebugstr_guid (riid), ppvObj); + if (!ppvObj) return E_POINTER; + *ppvObj = NULL; if (IsEqualIID (riid, &IID_IUnknown) || diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/shlview.c wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/shlview.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/shlview.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/shlview.c 2015-07-12 05:36:18.000000000 +0000 @@ -2713,15 +2713,7 @@ TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppv); - if (!ppv) return E_POINTER; - - if (IsEqualIID(riid, &IID_IShellFolder)) - { - *ppv = This->pSFParent; - return S_OK; - } - - return E_NOINTERFACE; + return IShellFolder_QueryInterface(This->pSFParent, riid, ppv); } static HRESULT WINAPI FolderView_Item(IFolderView2 *iface, int index, PITEMID_CHILD *ppidl) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/tests/ebrowser.c wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/tests/ebrowser.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/tests/ebrowser.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/tests/ebrowser.c 2015-07-12 05:36:18.000000000 +0000 @@ -1469,7 +1469,7 @@ test_browse_pidl_sb(peb2, &ebev, pidl_relative, SBSP_RELATIVE, S_OK, 1, 1, 0, 1); ILFree(pidl_relative); - /* IShellFolder_Release(psf); */ + IShellFolder_Release(psf); IFolderView_Release(pfv); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/tests/shfldr_special.c wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/tests/shfldr_special.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/tests/shfldr_special.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/tests/shfldr_special.c 2015-07-12 05:36:18.000000000 +0000 @@ -77,6 +77,7 @@ attr = ~0; hr = IShellFolder_ParseDisplayName(psfDesktop, NULL, NULL, entire_network_path, &eaten, &pidl, &attr); + IShellFolder_Release(psfDesktop); if (hr == HRESULT_FROM_WIN32(ERROR_BAD_NET_NAME) || hr == HRESULT_FROM_WIN32(ERROR_NO_NET_OR_BAD_PATH) || hr == HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER)) @@ -125,6 +126,7 @@ "Unexpected attributes : %08x\n", attr); ILFree(pidl); + IShellFolder_Release(psfDesktop); } static void test_printers_folder(void) @@ -222,9 +224,24 @@ CoUninitialize(); } +static void test_desktop_folder(void) +{ + IShellFolder *psf; + HRESULT hr; + + hr = SHGetDesktopFolder(&psf); + ok(hr == S_OK, "Got %x\n", hr); + + hr = IShellFolder_QueryInterface(psf, &IID_IShellFolder, NULL); + ok(hr == E_POINTER, "Got %x\n", hr); + + IShellFolder_Release(psf); +} + START_TEST(shfldr_special) { test_parse_for_entire_network(); test_parse_for_control_panel(); test_printers_folder(); + test_desktop_folder(); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/tests/shlexec.c wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/tests/shlexec.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/tests/shlexec.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/tests/shlexec.c 2015-07-12 05:36:18.000000000 +0000 @@ -127,6 +127,8 @@ if (wait_rc == WAIT_TIMEOUT) { HWND wnd = FindWindowA("#32770", "Windows"); + if (!wnd) + wnd = FindWindowA("Shell_Flyout", ""); if (wnd != NULL) { SendMessageA(wnd, WM_CLOSE, 0, 0); @@ -1219,7 +1221,7 @@ *strW = 0; args = CommandLineToArgvW(strW, &numargs); - ok(numargs == 1, "expected 1 args, got %d\n", numargs); + ok(numargs == 1 || broken(numargs > 1), "expected 1 args, got %d\n", numargs); ok(!args || (!args[numargs] || broken(args[numargs] != NULL) /* before Vista */), "expected NULL-terminated list of commandline arguments\n"); if (numargs == 1) @@ -2523,7 +2525,12 @@ "unable to find argv0!\n"); } - GetTempPathA(sizeof(filename), filename); + /* Older versions (win 2k) fail tests if there is a space in + the path. */ + if (dllver.dwMajorVersion <= 5) + strcpy(filename, "c:\\"); + else + GetTempPathA(sizeof(filename), filename); GetTempFileNameA(filename, "wt", 0, tmpdir); GetLongPathNameA(tmpdir, tmpdir, sizeof(tmpdir)); DeleteFileA( tmpdir ); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/tests/shlview.c wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/tests/shlview.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/shell32/tests/shlview.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/shell32/tests/shlview.c 2015-07-12 05:36:18.000000000 +0000 @@ -634,6 +634,7 @@ IDropTarget *dt; HRESULT hr; RECT r = {0}; + ULONG ref1, ref2; hr = SHGetDesktopFolder(&desktop); ok(hr == S_OK, "got (0x%08x)\n", hr); @@ -667,7 +668,7 @@ hwnd2 = (HWND)0xdeadbeef; hr = IShellView_CreateViewWindow(view, NULL, &settings, &test_shellbrowser, &r, &hwnd2); ok(hr == E_UNEXPECTED, "got (0x%08x)\n", hr); - ok(hwnd2 == NULL, "got %p\n", hwnd_view); + ok(hwnd2 == NULL, "got %p\n", hwnd2); /* ::DragLeave without drag operation */ hr = IShellView_QueryInterface(view, &IID_IDropTarget, (void**)&dt); @@ -676,7 +677,29 @@ ok(hr == S_OK, "got (0x%08x)\n", hr); IDropTarget_Release(dt); - IShellView_Release(view); + IShellView_AddRef(view); + ref1 = IShellView_Release(view); + hr = IShellView_DestroyViewWindow(view); + ok(hr == S_OK, "got (0x%08x)\n", hr); + ok(!IsWindow(hwnd_view), "hwnd %p still valid\n", hwnd_view); + ref2 = IShellView_Release(view); + ok(ref1 > ref2, "expected %u > %u\n", ref1, ref2); + ref1 = ref2; + + /* Show that releasing the shell view does not destroy the window */ + hr = IShellFolder_CreateViewObject(desktop, NULL, &IID_IShellView, (void**)&view); + ok(hr == S_OK, "got (0x%08x)\n", hr); + hwnd_view = NULL; + hr = IShellView_CreateViewWindow(view, NULL, &settings, &test_shellbrowser, &r, &hwnd_view); + ok(hr == S_OK || broken(hr == S_FALSE), "got (0x%08x)\n", hr); + ok(hwnd_view != NULL, "got %p\n", hwnd_view); + ok(IsWindow(hwnd_view), "hwnd %p still valid\n", hwnd_view); + ref2 = IShellView_Release(view); + ok(ref2 != 0, "ref2 = %u\n", ref2); + ok(ref2 > ref1, "expected %u > %u\n", ref2, ref1); + ok(IsWindow(hwnd_view), "hwnd %p still valid\n", hwnd_view); + DestroyWindow(hwnd_view); + IShellFolder_Release(desktop); } @@ -688,12 +711,12 @@ IShellBrowser *browser; IFolderView2 *fv2; IFolderView *fv; + IUnknown *unk; HWND hwnd_view, hwnd_list; PITEMID_CHILD pidl; HRESULT hr; INT ret, count; POINT pt; - LONG ref1, ref2; RECT r; hr = SHGetDesktopFolder(&desktop); @@ -821,21 +844,24 @@ hr = IFolderView_GetFolder(fv, &IID_IShellFolder, NULL); ok(hr == E_POINTER, "got (0x%08x)\n", hr); - ref1 = IShellFolder_AddRef(desktop); - IShellFolder_Release(desktop); hr = IFolderView_GetFolder(fv, &IID_IShellFolder, (void**)&folder); ok(hr == S_OK, "got (0x%08x)\n", hr); - ref2 = IShellFolder_AddRef(desktop); - IShellFolder_Release(desktop); - ok(ref1 == ref2 || ref1 + 1 == ref2, /* >= vista */ - "expected same refcount, got %d\n", ref2); ok(desktop == folder, "\n"); + if (folder) IShellFolder_Release(folder); + + hr = IFolderView_GetFolder(fv, &IID_IUnknown, (void**)&unk); + ok(hr == S_OK, "got (0x%08x)\n", hr); + if (unk) IUnknown_Release(unk); hr = IFolderView_QueryInterface(fv, &IID_IFolderView2, (void**)&fv2); if (hr != S_OK) win_skip("IFolderView2 is not supported.\n"); if (fv2) IFolderView2_Release(fv2); + hr = IShellView_DestroyViewWindow(view); + ok(hr == S_OK, "got (0x%08x)\n", hr); + ok(!IsWindow(hwnd_view), "hwnd %p still valid\n", hwnd_view); + IShellBrowser_Release(browser); IFolderView_Release(fv); IShellView_Release(view); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/user32/hook.c wine-staging-1.7.47~ubuntu14.10.1/dlls/user32/hook.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/user32/hook.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/user32/hook.c 2015-07-12 05:36:18.000000000 +0000 @@ -413,7 +413,19 @@ } else if (info->proc) { + struct user_thread_info *thread_info = get_user_thread_info(); HMODULE free_module = 0; + + /* + * Windows protects from stack overflow in recursive hook calls. Different Windows + * allow different depths. + */ + if (thread_info->hook_call_depth >= 25) + { + WARN("Too many hooks called recursively, skipping call.\n"); + return 0; + } + TRACE( "calling hook %p %s code %x wp %lx lp %lx module %s\n", info->proc, hook_names[info->id-WH_MINHOOK], code, wparam, lparam, debugstr_w(info->module) ); @@ -421,16 +433,17 @@ if (!info->module[0] || (info->proc = get_hook_proc( info->proc, info->module, &free_module )) != NULL) { - struct user_thread_info *thread_info = get_user_thread_info(); HHOOK prev = thread_info->hook; BOOL prev_unicode = thread_info->hook_unicode; thread_info->hook = info->handle; thread_info->hook_unicode = info->next_unicode; + thread_info->hook_call_depth++; ret = call_hook_proc( info->proc, info->id, code, wparam, lparam, info->prev_unicode, info->next_unicode ); thread_info->hook = prev; thread_info->hook_unicode = prev_unicode; + thread_info->hook_call_depth--; if (free_module) FreeLibrary(free_module); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/user32/tests/input.c wine-staging-1.7.47~ubuntu14.10.1/dlls/user32/tests/input.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/user32/tests/input.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/user32/tests/input.c 2015-07-12 05:36:18.000000000 +0000 @@ -2427,6 +2427,69 @@ DestroyWindow(Wnd2); } +static DWORD WINAPI get_key_state_thread(void *arg) +{ + HANDLE *semaphores = arg; + DWORD result; + + ReleaseSemaphore(semaphores[0], 1, NULL); + result = WaitForSingleObject(semaphores[1], 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + + result = GetKeyState('X'); + ok((result & 0x8000) || broken(!(result & 0x8000)), /* > Win 2003 */ + "expected that highest bit is set, got %x\n", result); + + ReleaseSemaphore(semaphores[0], 1, NULL); + result = WaitForSingleObject(semaphores[1], 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + + result = GetKeyState('X'); + ok(!(result & 0x8000), "expected that highest bit is unset, got %x\n", result); + + return 0; +} + +static void test_GetKeyState(void) +{ + HANDLE semaphores[2]; + HANDLE thread; + DWORD result; + HWND hwnd; + + semaphores[0] = CreateSemaphoreA(NULL, 0, 1, NULL); + ok(semaphores[0] != NULL, "CreateSemaphoreA failed %u\n", GetLastError()); + semaphores[1] = CreateSemaphoreA(NULL, 0, 1, NULL); + ok(semaphores[1] != NULL, "CreateSemaphoreA failed %u\n", GetLastError()); + + hwnd = CreateWindowA("static", "Title", WS_OVERLAPPEDWINDOW | WS_VISIBLE, + 10, 10, 200, 200, NULL, NULL, NULL, NULL); + ok(hwnd != NULL, "CreateWindowA failed %u\n", GetLastError()); + + thread = CreateThread(NULL, 0, get_key_state_thread, semaphores, 0, NULL); + ok(thread != NULL, "CreateThread failed %u\n", GetLastError()); + result = WaitForSingleObject(semaphores[0], 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + + SetFocus(hwnd); + keybd_event('X', 0, 0, 0); + + ReleaseSemaphore(semaphores[1], 1, NULL); + result = WaitForSingleObject(semaphores[0], 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + + keybd_event('X', 0, KEYEVENTF_KEYUP, 0); + + ReleaseSemaphore(semaphores[1], 1, NULL); + result = WaitForSingleObject(thread, 1000); + ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); + CloseHandle(thread); + + DestroyWindow(hwnd); + CloseHandle(semaphores[0]); + CloseHandle(semaphores[1]); +} + START_TEST(input) { init_function_pointers(); @@ -2449,6 +2512,7 @@ test_keyboard_layout_name(); test_key_names(); test_attach_input(); + test_GetKeyState(); if(pGetMouseMovePointsEx) test_GetMouseMovePointsEx(); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/user32/tests/msg.c wine-staging-1.7.47~ubuntu14.10.1/dlls/user32/tests/msg.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/user32/tests/msg.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/user32/tests/msg.c 2015-07-12 05:36:18.000000000 +0000 @@ -6646,6 +6646,20 @@ RedrawWindow( hparent, NULL, 0, RDW_ERASENOW ); ok_sequence( WmEmptySeq, "WmChildPaintNc3", FALSE ); + /* WS_CLIPCHILDREN doesn't exclude children from update region */ + flush_sequence(); + RedrawWindow( hparent, NULL, 0, RDW_INVALIDATE | RDW_ERASE | RDW_NOCHILDREN ); + GetClientRect( hparent, &rect ); + SetRectRgn( hrgn, rect.left, rect.top, rect.right, rect.bottom ); + check_update_rgn( hparent, hrgn ); + flush_events(); + + RedrawWindow( hparent, NULL, 0, RDW_INVALIDATE | RDW_ERASE | RDW_ALLCHILDREN ); + GetClientRect( hparent, &rect ); + SetRectRgn( hrgn, rect.left, rect.top, rect.right, rect.bottom ); + check_update_rgn( hparent, hrgn ); + flush_events(); + /* test RDW_INTERNALPAINT behavior */ flush_sequence(); @@ -9182,6 +9196,54 @@ "unexpected error %d\n", GetLastError()); } +static HWND hook_hwnd; +static HHOOK recursive_hook; +static int hook_depth, max_hook_depth; + +static LRESULT WINAPI rec_get_message_hook(int code, WPARAM w, LPARAM l) +{ + LRESULT res; + MSG msg; + BOOL b; + + hook_depth++; + if(hook_depth > max_hook_depth) + max_hook_depth = hook_depth; + + b = PeekMessageW(&msg, hook_hwnd, 0, 0, PM_NOREMOVE); + ok(b, "PeekMessage failed\n"); + + res = CallNextHookEx(recursive_hook, code, w, l); + + hook_depth--; + return res; +} + +static void test_recursive_hook(void) +{ + MSG msg; + BOOL b; + + hook_hwnd = CreateWindowA("Static", NULL, WS_POPUP, 0, 0, 200, 60, NULL, NULL, NULL, NULL); + ok(hook_hwnd != NULL, "CreateWindow failed\n"); + + recursive_hook = SetWindowsHookExW(WH_GETMESSAGE, rec_get_message_hook, NULL, GetCurrentThreadId()); + ok(recursive_hook != NULL, "SetWindowsHookEx failed\n"); + + PostMessageW(hook_hwnd, WM_USER, 0, 0); + PostMessageW(hook_hwnd, WM_USER+1, 0, 0); + + hook_depth = 0; + GetMessageW(&msg, hook_hwnd, 0, 0); + ok(15 < max_hook_depth && max_hook_depth < 45, "max_hook_depth = %d\n", max_hook_depth); + trace("max_hook_depth = %d\n", max_hook_depth); + + b = UnhookWindowsHookEx(recursive_hook); + ok(b, "UnhokWindowsHookEx failed\n"); + + DestroyWindow(hook_hwnd); +} + static const struct message ScrollWindowPaint1[] = { { WM_PAINT, sent }, { WM_ERASEBKGND, sent|beginpaint }, @@ -14946,7 +15008,11 @@ test_timers(); test_timers_no_wnd(); test_timers_exceptions(); - if (hCBT_hook) test_set_hook(); + if (hCBT_hook) + { + test_set_hook(); + test_recursive_hook(); + } test_DestroyWindow(); test_DispatchMessage(); test_SendMessageTimeout(); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/user32/user32.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/user32/user32.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/user32/user32.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/user32/user32.spec 2015-07-12 05:36:18.000000000 +0000 @@ -697,6 +697,8 @@ @ stub ShowStartGlass @ stdcall ShowWindow(long long) @ stdcall ShowWindowAsync(long long) +@ stdcall ShutdownBlockReasonCreate(long wstr) +@ stdcall ShutdownBlockReasonDestroy(long) # @ stub SoftModalMessageBox @ stdcall SubtractRect(ptr ptr ptr) @ stdcall SwapMouseButton(long) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/user32/user_main.c wine-staging-1.7.47~ubuntu14.10.1/dlls/user32/user_main.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/user32/user_main.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/user32/user_main.c 2015-07-12 05:36:18.000000000 +0000 @@ -409,3 +409,23 @@ FIXME("(0x%x): stub\n", ServicesProcessId); return 0; } + +/*********************************************************************** + * ShutdownBlockReasonCreate (USER32.@) + */ +BOOL WINAPI ShutdownBlockReasonCreate(HWND hwnd, LPCWSTR reason) +{ + FIXME("(%p, %s): stub\n", hwnd, debugstr_w(reason)); + SetLastError( ERROR_CALL_NOT_IMPLEMENTED ); + return FALSE; +} + +/*********************************************************************** + * ShutdownBlockReasonDestroy (USER32.@) + */ +BOOL WINAPI ShutdownBlockReasonDestroy(HWND hwnd) +{ + FIXME("(%p): stub\n", hwnd); + SetLastError( ERROR_CALL_NOT_IMPLEMENTED ); + return FALSE; +} diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/user32/user_private.h wine-staging-1.7.47~ubuntu14.10.1/dlls/user32/user_private.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/user32/user_private.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/user32/user_private.h 2015-07-12 05:36:18.000000000 +0000 @@ -175,6 +175,7 @@ DWORD changed_mask; /* Current queue changed mask */ WORD recursion_count; /* SendMessage recursion counter */ WORD message_count; /* Get/PeekMessage loop counter */ + WORD hook_call_depth; /* Number of recursively called hook procs */ BOOL hook_unicode; /* Is current hook unicode? */ HHOOK hook; /* Current hook */ struct received_message_info *receive_info; /* Message being currently received */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/uxtheme/draw.c wine-staging-1.7.47~ubuntu14.10.1/dlls/uxtheme/draw.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/uxtheme/draw.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/uxtheme/draw.c 2015-07-12 05:36:18.000000000 +0000 @@ -1633,8 +1633,29 @@ * DrawThemeText (UXTHEME.@) */ HRESULT WINAPI DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, - LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, - DWORD dwTextFlags2, const RECT *pRect) + LPCWSTR pszText, int iCharCount, DWORD flags, + DWORD flags2, const RECT *pRect) +{ + DTTOPTS opts; + RECT rt; + + TRACE("%d %d\n", iPartId, iStateId); + + CopyRect(&rt, pRect); + + opts.dwSize = sizeof(opts); + if (flags2 & DTT_GRAYED) { + opts.dwFlags = DTT_TEXTCOLOR; + opts.crText = GetSysColor(COLOR_GRAYTEXT); + } + return DrawThemeTextEx(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, flags, &rt, &opts); +} + +/*********************************************************************** + * DrawThemeTextEx (UXTHEME.@) + */ +HRESULT WINAPI DrawThemeTextEx(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, + LPCWSTR pszText, int iCharCount, DWORD flags, RECT *rect, const DTTOPTS *options) { HRESULT hr; HFONT hFont = NULL; @@ -1643,11 +1664,15 @@ COLORREF textColor; COLORREF oldTextColor; int oldBkMode; - RECT rt; - - TRACE("%d %d: stub\n", iPartId, iStateId); + + TRACE("%p %p %d %d %s:%d 0x%08x %p %p\n", hTheme, hdc, iPartId, iStateId, + debugstr_wn(pszText, iCharCount), iCharCount, flags, rect, options); + if(!hTheme) return E_HANDLE; + + if (options->dwFlags & ~DTT_TEXTCOLOR) + FIXME("unsupported flags 0x%08x\n", options->dwFlags); hr = GetThemeFont(hTheme, hdc, iPartId, iStateId, TMT_FONT, &logfont); if(SUCCEEDED(hr)) { @@ -1655,19 +1680,19 @@ if(!hFont) TRACE("Failed to create font\n"); } - CopyRect(&rt, pRect); + if(hFont) oldFont = SelectObject(hdc, hFont); - - if(dwTextFlags2 & DTT_GRAYED) - textColor = GetSysColor(COLOR_GRAYTEXT); + + if (options->dwFlags & DTT_TEXTCOLOR) + textColor = options->crText; else { if(FAILED(GetThemeColor(hTheme, iPartId, iStateId, TMT_TEXTCOLOR, &textColor))) textColor = GetTextColor(hdc); } oldTextColor = SetTextColor(hdc, textColor); oldBkMode = SetBkMode(hdc, TRANSPARENT); - DrawTextW(hdc, pszText, iCharCount, &rt, dwTextFlags); + DrawTextW(hdc, pszText, iCharCount, rect, flags); SetBkMode(hdc, oldBkMode); SetTextColor(hdc, oldTextColor); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/uxtheme/uxtheme.spec wine-staging-1.7.47~ubuntu14.10.1/dlls/uxtheme/uxtheme.spec --- wine-staging-1.7.46~ubuntu14.10.1/dlls/uxtheme/uxtheme.spec 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/uxtheme/uxtheme.spec 2015-07-12 05:36:18.000000000 +0000 @@ -58,6 +58,7 @@ @ stdcall DrawThemeIcon(ptr ptr long long ptr ptr long) @ stdcall DrawThemeParentBackground(ptr ptr ptr) @ stdcall DrawThemeText(ptr ptr long long wstr long long long ptr) +@ stdcall DrawThemeTextEx(ptr ptr long long wstr long long ptr ptr) @ stdcall EnableThemeDialogTexture(ptr long) @ stdcall EnableTheming(long) @ stdcall EndBufferedAnimation(ptr long) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/vbscript/tests/regexp.vbs wine-staging-1.7.47~ubuntu14.10.1/dlls/vbscript/tests/regexp.vbs --- wine-staging-1.7.46~ubuntu14.10.1/dlls/vbscript/tests/regexp.vbs 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/vbscript/tests/regexp.vbs 2015-07-12 05:36:18.000000000 +0000 @@ -174,4 +174,21 @@ Call ok(x.Global = false, "RegExp.Global = " & x.Global) Call ok(x.Multiline = false, "RegExp.Multiline = " & x.Multiline) +set matches = x.execute("test") +Call ok(matches.Count = 1, "matches.Count = " & matches.Count) +x.pattern = "" +set matches = x.execute("test") +Call ok(matches.Count = 1, "matches.Count = " & matches.Count) +set match = matches.item(0) +Call ok(match.Value = "", "match.Value = " & match.Value) +x.global = true +set matches = x.execute("test") +Call ok(matches.Count = 5, "matches.Count = " & matches.Count) +set match = matches.item(0) +Call ok(match.Value = "", "match.Value = " & match.Value) +set match = matches.item(4) +Call ok(match.Value = "", "match.Value = " & match.Value) +matches = x.test("test") +Call ok(matches = true, "matches = " & matches) + Call reportSuccess() diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/vbscript/vbregexp.c wine-staging-1.7.47~ubuntu14.10.1/dlls/vbscript/vbregexp.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/vbscript/vbregexp.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/vbscript/vbregexp.c 2015-07-12 05:36:18.000000000 +0000 @@ -1189,29 +1189,23 @@ static HRESULT WINAPI RegExp2_put_Pattern(IRegExp2 *iface, BSTR pattern) { RegExp2 *This = impl_from_IRegExp2(iface); - WCHAR *p; - DWORD size; + WCHAR *new_pattern; TRACE("(%p)->(%s)\n", This, wine_dbgstr_w(pattern)); - if(!pattern) { - heap_free(This->pattern); - if(This->regexp) { - regexp_destroy(This->regexp); - This->regexp = NULL; - } - This->pattern = NULL; - return S_OK; + if(pattern && *pattern) { + SIZE_T size = (SysStringLen(pattern)+1) * sizeof(WCHAR); + new_pattern = heap_alloc(size); + if(!new_pattern) + return E_OUTOFMEMORY; + memcpy(new_pattern, pattern, size); + }else { + new_pattern = NULL; } - size = (SysStringLen(pattern)+1) * sizeof(WCHAR); - p = heap_alloc(size); - if(!p) - return E_OUTOFMEMORY; - heap_free(This->pattern); - This->pattern = p; - memcpy(p, pattern, size); + This->pattern = new_pattern; + if(This->regexp) { regexp_destroy(This->regexp); This->regexp = NULL; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/windowscodecs/icnsformat.c wine-staging-1.7.47~ubuntu14.10.1/dlls/windowscodecs/icnsformat.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/windowscodecs/icnsformat.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/windowscodecs/icnsformat.c 2015-07-12 05:36:18.000000000 +0000 @@ -179,7 +179,7 @@ if (This->icns_image != NULL) HeapFree(GetProcessHeap(), 0, This->icns_image); - IUnknown_Release((IUnknown*)This->encoder); + IWICBitmapEncoder_Release(&This->encoder->IWICBitmapEncoder_iface); HeapFree(GetProcessHeap(), 0, This); } @@ -489,7 +489,7 @@ if (IsEqualIID(&IID_IUnknown, iid) || IsEqualIID(&IID_IWICBitmapEncoder, iid)) { - *ppv = This; + *ppv = &This->IWICBitmapEncoder_iface; } else { @@ -639,7 +639,7 @@ frameEncode->committed = FALSE; *ppIFrameEncode = &frameEncode->IWICBitmapFrameEncode_iface; This->outstanding_commits++; - IUnknown_AddRef((IUnknown*)This); + IWICBitmapEncoder_AddRef(&This->IWICBitmapEncoder_iface); end: LeaveCriticalSection(&This->lock); @@ -725,8 +725,8 @@ InitializeCriticalSection(&This->lock); This->lock.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": IcnsEncoder.lock"); - ret = IUnknown_QueryInterface((IUnknown*)This, iid, ppv); - IUnknown_Release((IUnknown*)This); + ret = IWICBitmapEncoder_QueryInterface(&This->IWICBitmapEncoder_iface, iid, ppv); + IWICBitmapEncoder_Release(&This->IWICBitmapEncoder_iface); return ret; } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/context.c wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/context.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/context.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/context.c 2015-07-12 05:36:18.000000000 +0000 @@ -1376,7 +1376,7 @@ } } -BOOL context_debug_output_enabled(const struct wined3d_gl_info *gl_info) +static BOOL context_debug_output_enabled(const struct wined3d_gl_info *gl_info) { return gl_info->supported[ARB_DEBUG_OUTPUT] && (ERR_ON(d3d) || FIXME_ON(d3d) || WARN_ON(d3d_perf)); @@ -1407,6 +1407,40 @@ } } +HGLRC context_create_wgl_attribs(const struct wined3d_gl_info *gl_info, HDC hdc, HGLRC share_ctx) +{ + HGLRC ctx; + unsigned int ctx_attrib_idx = 0; + GLint ctx_attribs[7], ctx_flags = 0; + + if (context_debug_output_enabled(gl_info)) + ctx_flags = WGL_CONTEXT_DEBUG_BIT_ARB; + ctx_attribs[ctx_attrib_idx++] = WGL_CONTEXT_MAJOR_VERSION_ARB; + ctx_attribs[ctx_attrib_idx++] = gl_info->selected_gl_version >> 16; + ctx_attribs[ctx_attrib_idx++] = WGL_CONTEXT_MINOR_VERSION_ARB; + ctx_attribs[ctx_attrib_idx++] = gl_info->selected_gl_version & 0xffff; + if (gl_info->selected_gl_version >= MAKEDWORD_VERSION(3, 2)) + ctx_flags |= WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB; + if (ctx_flags) + { + ctx_attribs[ctx_attrib_idx++] = WGL_CONTEXT_FLAGS_ARB; + ctx_attribs[ctx_attrib_idx++] = ctx_flags; + } + ctx_attribs[ctx_attrib_idx] = 0; + + if (!(ctx = gl_info->p_wglCreateContextAttribsARB(hdc, share_ctx, ctx_attribs))) + { + if (ctx_flags & WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB) + { + ctx_attribs[ctx_attrib_idx - 1] &= ~WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB; + if (!(ctx = gl_info->p_wglCreateContextAttribsARB(hdc, share_ctx, ctx_attribs))) + WARN("Failed to create a WGL context with wglCreateContextAttribsARB, last error %#x.\n", + GetLastError()); + } + } + return ctx; +} + struct wined3d_context *context_create(struct wined3d_swapchain *swapchain, struct wined3d_surface *target, const struct wined3d_format *ds_format) { @@ -1557,22 +1591,8 @@ share_ctx = device->context_count ? device->contexts[0]->glCtx : NULL; if (gl_info->p_wglCreateContextAttribsARB) { - unsigned int ctx_attrib_idx = 0; - GLint ctx_attribs[3]; - - if (context_debug_output_enabled(gl_info)) - { - ctx_attribs[ctx_attrib_idx++] = WGL_CONTEXT_FLAGS_ARB; - ctx_attribs[ctx_attrib_idx++] = WGL_CONTEXT_DEBUG_BIT_ARB; - } - ctx_attribs[ctx_attrib_idx] = 0; - - if (!(ctx = gl_info->p_wglCreateContextAttribsARB(hdc, share_ctx, ctx_attribs))) - { - ERR("Failed to create a WGL context.\n"); - context_release(ret); + if (!(ctx = context_create_wgl_attribs(gl_info, hdc, share_ctx))) goto out; - } } else { diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/cs.c wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/cs.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/cs.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/cs.c 2015-07-12 05:36:18.000000000 +0000 @@ -858,7 +858,7 @@ const struct wined3d_cs_set_transform *op = data; cs->state.transforms[op->state] = *op->matrix; - if (op->state < WINED3D_TS_WORLD_MATRIX(cs->device->adapter->gl_info.limits.blends)) + if (op->state < WINED3D_TS_WORLD_MATRIX(cs->device->adapter->d3d_info.limits.ffp_vertex_blend_matrices)) device_invalidate_state(cs->device, STATE_TRANSFORM(op->state)); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/directx.c wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/directx.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/directx.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/directx.c 2015-07-12 05:36:18.000000000 +0000 @@ -279,19 +279,18 @@ ERR("Failed to restore previous GL context.\n"); } -static void wined3d_caps_gl_ctx_create_attribs(struct wined3d_caps_gl_ctx *caps_gl_ctx, - struct wined3d_gl_info *gl_info, const GLint *ctx_attribs) +static BOOL wined3d_caps_gl_ctx_create_attribs(struct wined3d_caps_gl_ctx *caps_gl_ctx, + struct wined3d_gl_info *gl_info) { HGLRC new_ctx; if (!(gl_info->p_wglCreateContextAttribsARB = (void *)wglGetProcAddress("wglCreateContextAttribsARB"))) - return; + return TRUE; - if (!(new_ctx = gl_info->p_wglCreateContextAttribsARB(caps_gl_ctx->dc, NULL, ctx_attribs))) + if (!(new_ctx = context_create_wgl_attribs(gl_info, caps_gl_ctx->dc, NULL))) { - ERR("Failed to create a context using wglCreateContextAttribsARB(), last error %#x.\n", GetLastError()); gl_info->p_wglCreateContextAttribsARB = NULL; - return; + return FALSE; } if (!wglMakeCurrent(caps_gl_ctx->dc, new_ctx)) @@ -300,12 +299,14 @@ if (!wglDeleteContext(new_ctx)) ERR("Failed to delete new context, last error %#x.\n", GetLastError()); gl_info->p_wglCreateContextAttribsARB = NULL; - return; + return TRUE; } if (!wglDeleteContext(caps_gl_ctx->gl_ctx)) ERR("Failed to delete old context, last error %#x.\n", GetLastError()); caps_gl_ctx->gl_ctx = new_ctx; + + return TRUE; } static BOOL wined3d_caps_gl_ctx_create(struct wined3d_caps_gl_ctx *ctx) @@ -2420,6 +2421,30 @@ } } +static void enumerate_gl_extensions(struct wined3d_gl_info *gl_info, + const struct wined3d_extension_map *map, unsigned int map_entries_count) +{ + const char *gl_extension_name; + unsigned int i, j; + GLint extensions_count; + + glGetIntegerv(GL_NUM_EXTENSIONS, &extensions_count); + for (i = 0; i < extensions_count; ++i) + { + gl_extension_name = (const char *)GL_EXTCALL(glGetStringi(GL_EXTENSIONS, i)); + TRACE("- %s.\n", debugstr_a(gl_extension_name)); + for (j = 0; j < map_entries_count; ++j) + { + if (!strcmp(gl_extension_name, map[j].extension_string)) + { + TRACE("FOUND: %s support.\n", map[j].extension_string); + gl_info->supported[map[j].extension] = TRUE; + break; + } + } + } +} + static void load_gl_funcs(struct wined3d_gl_info *gl_info) { #define USE_GL_FUNC(pfn) gl_info->gl_ops.ext.p_##pfn = (void *)wglGetProcAddress(#pfn); @@ -2912,6 +2937,7 @@ USE_GL_FUNC(glGetShaderInfoLog) /* OpenGL 2.0 */ USE_GL_FUNC(glGetShaderiv) /* OpenGL 2.0 */ USE_GL_FUNC(glGetShaderSource) /* OpenGL 2.0 */ + USE_GL_FUNC(glGetStringi) /* OpenGL 3.0 */ USE_GL_FUNC(glGetUniformfv) /* OpenGL 2.0 */ USE_GL_FUNC(glGetUniformiv) /* OpenGL 2.0 */ USE_GL_FUNC(glGetUniformLocation) /* OpenGL 2.0 */ @@ -3324,12 +3350,12 @@ struct fragment_caps fragment_caps; struct shader_caps shader_caps; const char *WGL_Extensions = NULL; - const char *GL_Extensions = NULL; enum wined3d_gl_vendor gl_vendor; enum wined3d_pci_device device; DWORD gl_version; HDC hdc; unsigned int i; + GLint context_profile = 0; TRACE("adapter %p.\n", adapter); @@ -3359,23 +3385,39 @@ } gl_version = wined3d_parse_gl_version(gl_version_str); - /* Parse the gl supported features, in theory enabling parts of our code appropriately. */ - GL_Extensions = (const char *)gl_info->gl_ops.gl.p_glGetString(GL_EXTENSIONS); - if (!GL_Extensions) - { - ERR("Received a NULL GL_EXTENSIONS.\n"); - return FALSE; - } + load_gl_funcs(gl_info); memset(gl_info->supported, 0, sizeof(gl_info->supported)); gl_info->supported[WINED3D_GL_EXT_NONE] = TRUE; + if (gl_version >= MAKEDWORD_VERSION(3, 2)) + { + glGetIntegerv(GL_CONTEXT_PROFILE_MASK, &context_profile); + checkGLcall("Querying context profile"); + } + if (context_profile & GL_CONTEXT_CORE_PROFILE_BIT) + TRACE("Got a core profile context.\n"); + else + gl_info->supported[WINED3D_GL_LEGACY_CONTEXT] = TRUE; + TRACE("GL extensions reported:\n"); - parse_extension_string(gl_info, GL_Extensions, gl_extension_map, - sizeof(gl_extension_map) / sizeof(*gl_extension_map)); + if (gl_info->supported[WINED3D_GL_LEGACY_CONTEXT]) + { + const char *gl_extensions = (const char *)gl_info->gl_ops.gl.p_glGetString(GL_EXTENSIONS); - /* Now work out what GL support this card really has. */ - load_gl_funcs( gl_info ); + if (!gl_extensions) + { + ERR("Received a NULL GL_EXTENSIONS.\n"); + return FALSE; + } + parse_extension_string(gl_info, gl_extensions, gl_extension_map, + sizeof(gl_extension_map) / sizeof(*gl_extension_map)); + } + else + { + enumerate_gl_extensions(gl_info, gl_extension_map, + sizeof(gl_extension_map) / sizeof(*gl_extension_map)); + } hdc = wglGetCurrentDC(); /* Not all GL drivers might offer WGL extensions e.g. VirtualBox. */ @@ -3465,11 +3507,21 @@ TRACE(" IMPLIED: ARB_vertex_array_bgra support (by EXT_vertex_array_bgra).\n"); gl_info->supported[ARB_VERTEX_ARRAY_BGRA] = TRUE; } + if (!gl_info->supported[EXT_TEXTURE_COMPRESSION_RGTC] && gl_info->supported[ARB_TEXTURE_COMPRESSION_RGTC]) + { + TRACE(" IMPLIED: EXT_texture_compression_rgtc support (by ARB_texture_compression_rgtc).\n"); + gl_info->supported[EXT_TEXTURE_COMPRESSION_RGTC] = TRUE; + } if (!gl_info->supported[ARB_TEXTURE_COMPRESSION_RGTC] && gl_info->supported[EXT_TEXTURE_COMPRESSION_RGTC]) { TRACE(" IMPLIED: ARB_texture_compression_rgtc support (by EXT_texture_compression_rgtc).\n"); gl_info->supported[ARB_TEXTURE_COMPRESSION_RGTC] = TRUE; } + if (gl_info->supported[ARB_TEXTURE_COMPRESSION_RGTC] && !gl_info->supported[ARB_TEXTURE_RG]) + { + TRACE("ARB_texture_rg not supported, disabling ARB_texture_compression_rgtc.\n"); + gl_info->supported[ARB_TEXTURE_COMPRESSION_RGTC] = FALSE; + } if (gl_info->supported[NV_TEXTURE_SHADER2]) { if (gl_info->supported[NV_REGISTER_COMBINERS]) @@ -3564,7 +3616,7 @@ adapter->fragment_pipe = select_fragment_implementation(gl_info, adapter->shader_backend); adapter->blitter = select_blit_implementation(gl_info, adapter->shader_backend); - adapter->shader_backend->shader_get_caps(&adapter->gl_info, &shader_caps); + adapter->shader_backend->shader_get_caps(gl_info, &shader_caps); adapter->d3d_info.vs_clipping = shader_caps.wined3d_caps & WINED3D_SHADER_CAP_VS_CLIPPING; adapter->d3d_info.limits.vs_version = shader_caps.vs_version; adapter->d3d_info.limits.gs_version = shader_caps.gs_version; @@ -3575,6 +3627,7 @@ adapter->vertex_pipe->vp_get_caps(gl_info, &vertex_caps); adapter->d3d_info.xyzrhw = vertex_caps.xyzrhw; adapter->d3d_info.ffp_generic_attributes = vertex_caps.ffp_generic_attributes; + adapter->d3d_info.limits.ffp_vertex_blend_matrices = vertex_caps.max_vertex_blend_matrices; adapter->fragment_pipe->get_caps(gl_info, &fragment_caps); adapter->d3d_info.limits.ffp_blend_stages = fragment_caps.MaxTextureBlendStages; @@ -4882,8 +4935,9 @@ if (!gl_info->supported[ARB_TEXTURE_NON_POWER_OF_TWO]) { - caps->TextureCaps |= WINED3DPTEXTURECAPS_POW2 | - WINED3DPTEXTURECAPS_NONPOW2CONDITIONAL; + caps->TextureCaps |= WINED3DPTEXTURECAPS_POW2; + if (gl_info->supported[WINED3D_GL_NORMALIZED_TEXRECT] || gl_info->supported[ARB_TEXTURE_RECTANGLE]) + caps->TextureCaps |= WINED3DPTEXTURECAPS_NONPOW2CONDITIONAL; } if (gl_info->supported[EXT_TEXTURE3D]) @@ -5655,11 +5709,15 @@ static BOOL wined3d_adapter_init(struct wined3d_adapter *adapter, UINT ordinal) { + static const DWORD supported_gl_versions[] = + { + MAKEDWORD_VERSION(3, 2), + MAKEDWORD_VERSION(1, 0), + }; struct wined3d_gl_info *gl_info = &adapter->gl_info; struct wined3d_caps_gl_ctx caps_gl_ctx = {0}; - unsigned int ctx_attrib_idx = 0; + unsigned int i; DISPLAY_DEVICEW display_device; - GLint ctx_attribs[3]; TRACE("adapter %p, ordinal %u.\n", adapter, ordinal); @@ -5705,13 +5763,28 @@ return FALSE; } - if (context_debug_output_enabled(gl_info)) + for (i = 0; i < ARRAY_SIZE(supported_gl_versions); ++i) + { + if (supported_gl_versions[i] <= wined3d_settings.max_gl_version) + break; + } + if (i == ARRAY_SIZE(supported_gl_versions)) + { + ERR_(winediag)("Requested invalid GL version %u.%u.\n", + wined3d_settings.max_gl_version >> 16, wined3d_settings.max_gl_version & 0xffff); + i = ARRAY_SIZE(supported_gl_versions) - 1; + } + + for (; i < ARRAY_SIZE(supported_gl_versions); ++i) { - ctx_attribs[ctx_attrib_idx++] = WGL_CONTEXT_FLAGS_ARB; - ctx_attribs[ctx_attrib_idx++] = WGL_CONTEXT_DEBUG_BIT_ARB; + gl_info->selected_gl_version = supported_gl_versions[i]; + + if (wined3d_caps_gl_ctx_create_attribs(&caps_gl_ctx, gl_info)) + break; + + WARN("Couldn't create an OpenGL %u.%u context, trying fallback to a lower version.\n", + supported_gl_versions[i] >> 16, supported_gl_versions[i] & 0xffff); } - ctx_attribs[ctx_attrib_idx] = 0; - wined3d_caps_gl_ctx_create_attribs(&caps_gl_ctx, gl_info, ctx_attribs); if (!wined3d_adapter_init_gl_caps(adapter)) { diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/glsl_shader.c wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/glsl_shader.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/glsl_shader.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/glsl_shader.c 2015-07-12 05:36:18.000000000 +0000 @@ -119,7 +119,7 @@ GLint uniform_b_locations[MAX_CONST_B]; GLint pos_fixup_location; - GLint modelview_matrix_location; + GLint modelview_matrix_location[MAX_VERTEX_BLENDS]; GLint projection_matrix_location; GLint normal_matrix_location; GLint texture_matrix_location[MAX_TEXTURES]; @@ -297,7 +297,9 @@ static const char *shader_glsl_get_version(const struct wined3d_gl_info *gl_info, const struct wined3d_shader_version *version) { - if (gl_info->glsl_version >= MAKEDWORD_VERSION(1, 30) && version->major >= 4) + if (!gl_info->supported[WINED3D_GL_LEGACY_CONTEXT]) + return "#version 150"; + else if (gl_info->glsl_version >= MAKEDWORD_VERSION(1, 30) && version && version->major >= 4) return "#version 130"; else return "#version 120"; @@ -1072,7 +1074,10 @@ struct wined3d_matrix mv; unsigned int i, j; - get_modelview_matrix(context, state, &mv); + if (prog->vs.normal_matrix_location == -1) + return; + + get_modelview_matrix(context, state, 0, &mv); if (context->swapchain->device->wined3d->flags & WINED3D_LEGACY_FFP_LIGHTING) invert_matrix_3d(&mv, &mv); else @@ -1318,13 +1323,28 @@ { struct wined3d_matrix mat; - get_modelview_matrix(context, state, &mat); - GL_EXTCALL(glUniformMatrix4fv(prog->vs.modelview_matrix_location, 1, FALSE, &mat._11)); + get_modelview_matrix(context, state, 0, &mat); + GL_EXTCALL(glUniformMatrix4fv(prog->vs.modelview_matrix_location[0], 1, FALSE, &mat._11)); checkGLcall("glUniformMatrix4fv"); shader_glsl_ffp_vertex_normalmatrix_uniform(context, state, prog); } + if (update_mask & WINED3D_SHADER_CONST_FFP_VERTEXBLEND) + { + struct wined3d_matrix mat; + + for (i = 1; i < MAX_VERTEX_BLENDS; ++i) + { + if (prog->vs.modelview_matrix_location[i] == -1) + break; + + get_modelview_matrix(context, state, i, &mat); + GL_EXTCALL(glUniformMatrix4fv(prog->vs.modelview_matrix_location[i], 1, FALSE, &mat._11)); + checkGLcall("glUniformMatrix4fv"); + } + } + if (update_mask & WINED3D_SHADER_CONST_FFP_PROJ) { struct wined3d_matrix projection; @@ -2498,18 +2518,23 @@ static void shader_glsl_get_sample_function(const struct wined3d_shader_context *ctx, DWORD resource_idx, DWORD flags, struct glsl_sample_function *sample_function) { - static const unsigned int type_coord_size[] = + static const struct { - 0, /* WINED3D_SHADER_RESOURCE_NONE */ - 1, /* WINED3D_SHADER_RESOURCE_BUFFER */ - 1, /* WINED3D_SHADER_RESOURCE_TEXTURE_1D */ - 2, /* WINED3D_SHADER_RESOURCE_TEXTURE_2D */ - 2, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DMS */ - 3, /* WINED3D_SHADER_RESOURCE_TEXTURE_3D */ - 3, /* WINED3D_SHADER_RESOURCE_TEXTURE_CUBE */ - 2, /* WINED3D_SHADER_RESOURCE_TEXTURE_1DARRAY */ - 3, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DARRAY */ - 3, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY */ + unsigned int coord_size; + const char *type_part; + } + resource_types[] = + { + {0, ""}, /* WINED3D_SHADER_RESOURCE_NONE */ + {1, ""}, /* WINED3D_SHADER_RESOURCE_BUFFER */ + {1, "1D"}, /* WINED3D_SHADER_RESOURCE_TEXTURE_1D */ + {2, "2D"}, /* WINED3D_SHADER_RESOURCE_TEXTURE_2D */ + {2, ""}, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DMS */ + {3, "3D"}, /* WINED3D_SHADER_RESOURCE_TEXTURE_3D */ + {3, "Cube"}, /* WINED3D_SHADER_RESOURCE_TEXTURE_CUBE */ + {2, ""}, /* WINED3D_SHADER_RESOURCE_TEXTURE_1DARRAY */ + {3, ""}, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DARRAY */ + {3, ""}, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY */ }; struct shader_glsl_ctx_priv *priv = ctx->backend_data; enum wined3d_shader_resource_type resource_type = ctx->reg_maps->resource_info[resource_idx].type; @@ -2525,6 +2550,12 @@ sample_function->data_type = ctx->reg_maps->resource_info[resource_idx].data_type; + if (resource_type >= ARRAY_SIZE(resource_types)) + { + ERR("Unexpected resource type %#x.\n", resource_type); + resource_type = WINED3D_SHADER_RESOURCE_TEXTURE_2D; + } + /* Note that there's no such thing as a projected cube texture. */ if (resource_type == WINED3D_SHADER_RESOURCE_TEXTURE_CUBE) projected = FALSE; @@ -2532,26 +2563,11 @@ if (shadow) base = "shadow"; - switch (resource_type) - { - case WINED3D_SHADER_RESOURCE_TEXTURE_1D: - type_part = "1D"; - break; - case WINED3D_SHADER_RESOURCE_TEXTURE_2D: - if (texrect) - type_part = "2DRect"; - else - type_part = "2D"; - break; - case WINED3D_SHADER_RESOURCE_TEXTURE_3D: - type_part = "3D"; - break; - case WINED3D_SHADER_RESOURCE_TEXTURE_CUBE: - type_part = "Cube"; - break; - default: - FIXME("Unhandled resource type %#x.\n", resource_type); - } + type_part = resource_types[resource_type].type_part; + if (resource_type == WINED3D_SHADER_RESOURCE_TEXTURE_2D && texrect) + type_part = "2DRect"; + if (!type_part[0]) + FIXME("Unhandled resource type %#x.\n", resource_type); if (!lod && grad && !gl_info->supported[EXT_GPU_SHADER4]) { @@ -2565,12 +2581,7 @@ string_buffer_sprintf(sample_function->name, "%s%s%s%s%s", base, type_part, projected ? "Proj" : "", lod ? "Lod" : grad ? "Grad" : "", suffix); - if (resource_type >= ARRAY_SIZE(type_coord_size)) - { - ERR("Unexpected resource type %#x.\n", resource_type); - resource_type = WINED3D_SHADER_RESOURCE_TEXTURE_2D; - } - coord_size = type_coord_size[resource_type]; + coord_size = resource_types[resource_type].coord_size; if (shadow) ++coord_size; sample_function->coord_mask = (1 << coord_size) - 1; @@ -2710,13 +2721,8 @@ const struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data; fixup = priv->cur_ps_args->color_fixup[sampler]; - if(priv->cur_ps_args->np2_fixup & (1 << sampler)) { - if(bias) { - FIXME("Biased sampling from NP2 textures is unsupported\n"); - } else { - np2_fixup = TRUE; - } - } + if (priv->cur_ps_args->np2_fixup & (1 << sampler)) + np2_fixup = TRUE; } else { @@ -2739,25 +2745,42 @@ break; } - if(bias) { - shader_addline(ins->ctx->buffer, ", %s)%s);\n", bias, dst_swizzle); - } else { - if (np2_fixup) { - const struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data; - const unsigned char idx = priv->cur_np2fixup_info->idx[sampler]; - - shader_addline(ins->ctx->buffer, " * ps_samplerNP2Fixup[%u].%s)%s);\n", idx >> 1, - (idx % 2) ? "zw" : "xy", dst_swizzle); - } else if(dx && dy) { - shader_addline(ins->ctx->buffer, ", %s, %s)%s);\n", dx, dy, dst_swizzle); - } else { - shader_addline(ins->ctx->buffer, ")%s);\n", dst_swizzle); + if (np2_fixup) + { + const struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data; + const unsigned char idx = priv->cur_np2fixup_info->idx[sampler]; + + switch (shader_glsl_get_write_mask_size(sample_function->coord_mask)) + { + case 1: + shader_addline(ins->ctx->buffer, " * ps_samplerNP2Fixup[%u].%s", + idx >> 1, (idx % 2) ? "z" : "x"); + break; + case 2: + shader_addline(ins->ctx->buffer, " * ps_samplerNP2Fixup[%u].%s", + idx >> 1, (idx % 2) ? "zw" : "xy"); + break; + case 3: + shader_addline(ins->ctx->buffer, " * vec3(ps_samplerNP2Fixup[%u].%s, 1.0)", + idx >> 1, (idx % 2) ? "zw" : "xy"); + break; + case 4: + shader_addline(ins->ctx->buffer, " * vec4(ps_samplerNP2Fixup[%u].%s, 1.0, 1.0)", + idx >> 1, (idx % 2) ? "zw" : "xy"); + break; } } + if (dx && dy) + shader_addline(ins->ctx->buffer, ", %s, %s)", dx, dy); + else if (bias) + shader_addline(ins->ctx->buffer, ", %s)", bias); + else + shader_addline(ins->ctx->buffer, ")"); - if(!is_identity_fixup(fixup)) { + shader_addline(ins->ctx->buffer, "%s);\n", dst_swizzle); + + if (!is_identity_fixup(fixup)) shader_glsl_color_correction(ins, fixup); - } } /***************************************************************************** @@ -3989,6 +4012,7 @@ shader_glsl_get_sample_function(ins->ctx, resource_idx, sample_flags, &sample_function); mask |= sample_function.coord_mask; + sample_function.coord_mask = mask; if (shader_version < WINED3D_SHADER_VERSION(2,0)) swizzle = WINED3DSP_NOSWIZZLE; else swizzle = ins->src[1].swizzle; @@ -5554,13 +5578,13 @@ static const struct attrib_info { const char type[6]; - const char name[20]; + const char name[24]; } attrib_info[] = { {"vec4", "ffp_attrib_position"}, /* WINED3D_FFP_POSITION */ - /* TODO: Vertex blending */ - {"vec4", ""}, /* WINED3D_FFP_BLENDWEIGHT */ + {"vec4", "ffp_attrib_blendweight"}, /* WINED3D_FFP_BLENDWEIGHT */ + /* TODO: Indexed vertex blending */ {"float", ""}, /* WINED3D_FFP_BLENDINDICES */ {"vec3", "ffp_attrib_normal"}, /* WINED3D_FFP_NORMAL */ {"float", "ffp_attrib_psize"}, /* WINED3D_FFP_PSIZE */ @@ -5572,8 +5596,7 @@ string_buffer_clear(buffer); - shader_addline(buffer, "#version 120\n"); - shader_addline(buffer, "\n"); + shader_addline(buffer, "%s\n", shader_glsl_get_version(gl_info, NULL)); for (i = 0; i < WINED3D_FFP_ATTRIBS_COUNT; ++i) { @@ -5583,7 +5606,7 @@ } shader_addline(buffer, "\n"); - shader_addline(buffer, "uniform mat4 ffp_modelview_matrix;\n"); + shader_addline(buffer, "uniform mat4 ffp_modelview_matrix[%u];\n", MAX_VERTEX_BLENDS); shader_addline(buffer, "uniform mat4 ffp_projection_matrix;\n"); shader_addline(buffer, "uniform mat3 ffp_normal_matrix;\n"); shader_addline(buffer, "uniform mat4 ffp_texture_matrix[%u];\n", MAX_TEXTURES); @@ -5643,6 +5666,8 @@ } } + shader_addline(buffer, "ffp_attrib_blendweight[%u] = 1.0;\n", settings->vertexblends); + if (settings->transformed) { shader_addline(buffer, "vec4 ec_pos = vec4(ffp_attrib_position.xyz, 1.0);\n"); @@ -5651,19 +5676,35 @@ } else { - shader_addline(buffer, "vec4 ec_pos = ffp_modelview_matrix * ffp_attrib_position;\n"); + for (i = 0; i < settings->vertexblends; ++i) + shader_addline(buffer, "ffp_attrib_blendweight[%u] -= ffp_attrib_blendweight[%u];\n", settings->vertexblends, i); + + shader_addline(buffer, "vec4 ec_pos = vec4(0.0);\n"); + for (i = 0; i < settings->vertexblends + 1; ++i) + shader_addline(buffer, "ec_pos += ffp_attrib_blendweight[%u] * (ffp_modelview_matrix[%u] * ffp_attrib_position);\n", i, i); + shader_addline(buffer, "gl_Position = ffp_projection_matrix * ec_pos;\n"); if (settings->clipping) shader_addline(buffer, "gl_ClipVertex = ec_pos;\n"); shader_addline(buffer, "ec_pos /= ec_pos.w;\n"); } - if (!settings->normal) - shader_addline(buffer, "vec3 normal = vec3(0.0);\n"); - else if (settings->normalize) - shader_addline(buffer, "vec3 normal = normalize(ffp_normal_matrix * ffp_attrib_normal);\n"); - else - shader_addline(buffer, "vec3 normal = ffp_normal_matrix * ffp_attrib_normal;\n"); + shader_addline(buffer, "vec3 normal = vec3(0.0);\n"); + if (settings->normal) + { + if (!settings->vertexblends) + { + shader_addline(buffer, "normal = ffp_normal_matrix * ffp_attrib_normal;\n"); + } + else + { + for (i = 0; i < settings->vertexblends + 1; ++i) + shader_addline(buffer, "normal += ffp_attrib_blendweight[%u] * (mat3(ffp_modelview_matrix[%u]) * ffp_attrib_normal);\n", i, i); + } + + if (settings->normalize) + shader_addline(buffer, "normal = normalize(normal);\n"); + } shader_glsl_ffp_vertex_lighting(buffer, settings, legacy_lighting); @@ -6072,7 +6113,7 @@ } lowest_disabled_stage = stage; - shader_addline(buffer, "#version 120\n"); + shader_addline(buffer, "%s\n", shader_glsl_get_version(gl_info, NULL)); if (gl_info->supported[ARB_TEXTURE_RECTANGLE]) shader_addline(buffer, "#extension GL_ARB_texture_rectangle : enable\n"); @@ -6436,7 +6477,11 @@ vs->pos_fixup_location = GL_EXTCALL(glGetUniformLocation(program_id, "posFixup")); - vs->modelview_matrix_location = GL_EXTCALL(glGetUniformLocation(program_id, "ffp_modelview_matrix")); + for (i = 0; i < MAX_VERTEX_BLENDS; ++i) + { + string_buffer_sprintf(name, "ffp_modelview_matrix[%u]", i); + vs->modelview_matrix_location[i] = GL_EXTCALL(glGetUniformLocation(program_id, name->buffer)); + } vs->projection_matrix_location = GL_EXTCALL(glGetUniformLocation(program_id, "ffp_projection_matrix")); vs->normal_matrix_location = GL_EXTCALL(glGetUniformLocation(program_id, "ffp_normal_matrix")); for (i = 0; i < MAX_TEXTURES; ++i) @@ -6584,7 +6629,7 @@ WORD attribs_map; struct wined3d_string_buffer *tmp_name; - if (!(context->shader_update_mask & (1 << WINED3D_SHADER_TYPE_VERTEX))) + if (!(context->shader_update_mask & (1 << WINED3D_SHADER_TYPE_VERTEX)) && ctx_data->glsl_program) { vs_id = ctx_data->glsl_program->vs.id; vs_list = &ctx_data->glsl_program->vs.shader_entry; @@ -6624,7 +6669,7 @@ vs_list = &ffp_shader->linked_programs; } - if (!(context->shader_update_mask & (1 << WINED3D_SHADER_TYPE_PIXEL))) + if (!(context->shader_update_mask & (1 << WINED3D_SHADER_TYPE_PIXEL)) && ctx_data->glsl_program) { ps_id = ctx_data->glsl_program->ps.id; ps_list = &ctx_data->glsl_program->ps.shader_entry; @@ -6809,6 +6854,15 @@ entry->constant_update_mask |= WINED3D_SHADER_CONST_FFP_MODELVIEW | WINED3D_SHADER_CONST_FFP_PROJ; + for (i = 1; i < MAX_VERTEX_BLENDS; ++i) + { + if (entry->vs.modelview_matrix_location[i] != -1) + { + entry->constant_update_mask |= WINED3D_SHADER_CONST_FFP_VERTEXBLEND; + break; + } + } + for (i = 0; i < MAX_TEXTURES; ++i) { if (entry->vs.texture_matrix_location[i] != -1) @@ -7674,7 +7728,7 @@ caps->xyzrhw = TRUE; caps->ffp_generic_attributes = TRUE; caps->max_active_lights = MAX_ACTIVE_LIGHTS; - caps->max_vertex_blend_matrices = 1; + caps->max_vertex_blend_matrices = MAX_VERTEX_BLENDS; caps->max_vertex_blend_matrix_index = 0; caps->vertex_processing_caps = WINED3DVTXPCAPS_TEXGEN | WINED3DVTXPCAPS_MATERIALSOURCE7 @@ -7808,27 +7862,26 @@ context->constant_update_mask |= WINED3D_SHADER_CONST_FFP_MODELVIEW; } +static void glsl_vertex_pipe_vertexblend(struct wined3d_context *context, + const struct wined3d_state *state, DWORD state_id) +{ + context->constant_update_mask |= WINED3D_SHADER_CONST_FFP_VERTEXBLEND; +} + static void glsl_vertex_pipe_view(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { const struct wined3d_gl_info *gl_info = context->gl_info; unsigned int k; context->constant_update_mask |= WINED3D_SHADER_CONST_FFP_MODELVIEW - | WINED3D_SHADER_CONST_FFP_LIGHTS; + | WINED3D_SHADER_CONST_FFP_LIGHTS + | WINED3D_SHADER_CONST_FFP_VERTEXBLEND; for (k = 0; k < gl_info->limits.clipplanes; ++k) { if (!isStateDirty(context, STATE_CLIPPLANE(k))) clipplane(context, state, STATE_CLIPPLANE(k)); } - - if (context->swapchain->device->vertexBlendUsed) - { - static int warned; - - if (!warned++) - FIXME("Vertex blending emulation.\n"); - } } static void glsl_vertex_pipe_projection(struct wined3d_context *context, @@ -7858,6 +7911,31 @@ context->constant_update_mask |= WINED3D_SHADER_CONST_FFP_TEXMATRIX; } +static void glsl_vertex_pipe_texmatrix_np2(struct wined3d_context *context, + const struct wined3d_state *state, DWORD state_id) +{ + DWORD sampler = state_id - STATE_SAMPLER(0); + const struct wined3d_texture *texture = state->textures[sampler]; + BOOL np2; + + if (!texture) + return; + + if (sampler >= MAX_TEXTURES) + return; + + if ((np2 = !(texture->flags & WINED3D_TEXTURE_POW2_MAT_IDENT)) + || context->lastWasPow2Texture & (1 << sampler)) + { + if (np2) + context->lastWasPow2Texture |= 1 << sampler; + else + context->lastWasPow2Texture &= ~(1 << sampler); + + context->constant_update_mask |= WINED3D_SHADER_CONST_FFP_TEXMATRIX; + } +} + static void glsl_vertex_pipe_material(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { @@ -7946,6 +8024,9 @@ {STATE_TRANSFORM(WINED3D_TS_TEXTURE6), {STATE_TEXTURESTAGE(6, WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), NULL }, WINED3D_GL_EXT_NONE }, {STATE_TRANSFORM(WINED3D_TS_TEXTURE7), {STATE_TEXTURESTAGE(7, WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), NULL }, WINED3D_GL_EXT_NONE }, {STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(0)), {STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(0)), glsl_vertex_pipe_world }, WINED3D_GL_EXT_NONE }, + {STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(1)), {STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(1)), glsl_vertex_pipe_vertexblend }, WINED3D_GL_EXT_NONE }, + {STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(2)), {STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(2)), glsl_vertex_pipe_vertexblend }, WINED3D_GL_EXT_NONE }, + {STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(3)), {STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(3)), glsl_vertex_pipe_vertexblend }, WINED3D_GL_EXT_NONE }, {STATE_TEXTURESTAGE(0, WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), {STATE_TEXTURESTAGE(0, WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), glsl_vertex_pipe_texmatrix}, WINED3D_GL_EXT_NONE }, {STATE_TEXTURESTAGE(1, WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), {STATE_TEXTURESTAGE(1, WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), glsl_vertex_pipe_texmatrix}, WINED3D_GL_EXT_NONE }, {STATE_TEXTURESTAGE(2, WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), {STATE_TEXTURESTAGE(2, WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), glsl_vertex_pipe_texmatrix}, WINED3D_GL_EXT_NONE }, @@ -7996,28 +8077,28 @@ * matrix. */ {STATE_SAMPLER(0), {0, NULL }, ARB_TEXTURE_NON_POWER_OF_TWO }, {STATE_SAMPLER(0), {0, NULL }, WINED3D_GL_NORMALIZED_TEXRECT}, - {STATE_SAMPLER(0), {STATE_SAMPLER(0), glsl_vertex_pipe_texmatrix}, WINED3D_GL_EXT_NONE }, + {STATE_SAMPLER(0), {STATE_SAMPLER(0), glsl_vertex_pipe_texmatrix_np2}, WINED3D_GL_EXT_NONE }, {STATE_SAMPLER(1), {0, NULL }, ARB_TEXTURE_NON_POWER_OF_TWO }, {STATE_SAMPLER(1), {0, NULL }, WINED3D_GL_NORMALIZED_TEXRECT}, - {STATE_SAMPLER(1), {STATE_SAMPLER(1), glsl_vertex_pipe_texmatrix}, WINED3D_GL_EXT_NONE }, + {STATE_SAMPLER(1), {STATE_SAMPLER(1), glsl_vertex_pipe_texmatrix_np2}, WINED3D_GL_EXT_NONE }, {STATE_SAMPLER(2), {0, NULL }, ARB_TEXTURE_NON_POWER_OF_TWO }, {STATE_SAMPLER(2), {0, NULL }, WINED3D_GL_NORMALIZED_TEXRECT}, - {STATE_SAMPLER(2), {STATE_SAMPLER(2), glsl_vertex_pipe_texmatrix}, WINED3D_GL_EXT_NONE }, + {STATE_SAMPLER(2), {STATE_SAMPLER(2), glsl_vertex_pipe_texmatrix_np2}, WINED3D_GL_EXT_NONE }, {STATE_SAMPLER(3), {0, NULL }, ARB_TEXTURE_NON_POWER_OF_TWO }, {STATE_SAMPLER(3), {0, NULL }, WINED3D_GL_NORMALIZED_TEXRECT}, - {STATE_SAMPLER(3), {STATE_SAMPLER(3), glsl_vertex_pipe_texmatrix}, WINED3D_GL_EXT_NONE }, + {STATE_SAMPLER(3), {STATE_SAMPLER(3), glsl_vertex_pipe_texmatrix_np2}, WINED3D_GL_EXT_NONE }, {STATE_SAMPLER(4), {0, NULL }, ARB_TEXTURE_NON_POWER_OF_TWO }, {STATE_SAMPLER(4), {0, NULL }, WINED3D_GL_NORMALIZED_TEXRECT}, - {STATE_SAMPLER(4), {STATE_SAMPLER(4), glsl_vertex_pipe_texmatrix}, WINED3D_GL_EXT_NONE }, + {STATE_SAMPLER(4), {STATE_SAMPLER(4), glsl_vertex_pipe_texmatrix_np2}, WINED3D_GL_EXT_NONE }, {STATE_SAMPLER(5), {0, NULL }, ARB_TEXTURE_NON_POWER_OF_TWO }, {STATE_SAMPLER(5), {0, NULL }, WINED3D_GL_NORMALIZED_TEXRECT}, - {STATE_SAMPLER(5), {STATE_SAMPLER(5), glsl_vertex_pipe_texmatrix}, WINED3D_GL_EXT_NONE }, + {STATE_SAMPLER(5), {STATE_SAMPLER(5), glsl_vertex_pipe_texmatrix_np2}, WINED3D_GL_EXT_NONE }, {STATE_SAMPLER(6), {0, NULL }, ARB_TEXTURE_NON_POWER_OF_TWO }, {STATE_SAMPLER(6), {0, NULL }, WINED3D_GL_NORMALIZED_TEXRECT}, - {STATE_SAMPLER(6), {STATE_SAMPLER(6), glsl_vertex_pipe_texmatrix}, WINED3D_GL_EXT_NONE }, + {STATE_SAMPLER(6), {STATE_SAMPLER(6), glsl_vertex_pipe_texmatrix_np2}, WINED3D_GL_EXT_NONE }, {STATE_SAMPLER(7), {0, NULL }, ARB_TEXTURE_NON_POWER_OF_TWO }, {STATE_SAMPLER(7), {0, NULL }, WINED3D_GL_NORMALIZED_TEXRECT}, - {STATE_SAMPLER(7), {STATE_SAMPLER(7), glsl_vertex_pipe_texmatrix}, WINED3D_GL_EXT_NONE }, + {STATE_SAMPLER(7), {STATE_SAMPLER(7), glsl_vertex_pipe_texmatrix_np2}, WINED3D_GL_EXT_NONE }, {STATE_POINT_ENABLE, {STATE_POINT_ENABLE, glsl_vertex_pipe_shader}, WINED3D_GL_EXT_NONE }, {0 /* Terminate */, {0, NULL }, WINED3D_GL_EXT_NONE }, }; @@ -8032,7 +8113,7 @@ * instead of using the immediate mode fallback. * - Similarly, we don't need the fallback for certain combinations of * material sources anymore. - * - Implement vertex blending and vertex tweening. + * - Implement vertex tweening. * - Handle WINED3D_TSS_TEXCOORD_INDEX in the shader, instead of duplicating * attribute arrays in load_tex_coords(). * - Per-vertex point sizes. */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/shader.c wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/shader.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/shader.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/shader.c 2015-07-12 05:36:18.000000000 +0000 @@ -409,16 +409,10 @@ static void shader_delete_constant_list(struct list *clist) { - struct wined3d_shader_lconst *constant; - struct list *ptr; + struct wined3d_shader_lconst *constant, *constant_next; - ptr = list_head(clist); - while (ptr) - { - constant = LIST_ENTRY(ptr, struct wined3d_shader_lconst, entry); - ptr = list_next(clist, ptr); + LIST_FOR_EACH_ENTRY_SAFE(constant, constant_next, clist, struct wined3d_shader_lconst, entry) HeapFree(GetProcessHeap(), 0, constant); - } list_init(clist); } @@ -2046,6 +2040,11 @@ TRACE("shader %p, byte_code %p, output_signature %p, float_const_count %u.\n", shader, byte_code, output_signature, float_const_count); + list_init(&shader->constantsF); + list_init(&shader->constantsB); + list_init(&shader->constantsI); + shader->lconst_inf_or_nan = FALSE; + fe = shader_select_frontend(*byte_code); if (!fe) { @@ -2064,12 +2063,6 @@ if (TRACE_ON(d3d_shader)) shader_trace_init(fe, shader->frontend_data, byte_code); - /* Initialize immediate constant lists. */ - list_init(&shader->constantsF); - list_init(&shader->constantsB); - list_init(&shader->constantsI); - shader->lconst_inf_or_nan = FALSE; - /* Second pass: figure out which registers are used, what the semantics are, etc. */ if (FAILED(hr = shader_get_registers_used(shader, fe, reg_maps, &shader->input_signature, &shader->output_signature, byte_code, float_const_count))) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/state.c wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/state.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/state.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/state.c 2015-07-12 05:36:18.000000000 +0000 @@ -1889,8 +1889,12 @@ static void state_swvp(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { + static int once; if (state->render_states[WINED3D_RS_SOFTWAREVERTEXPROCESSING]) - FIXME("Software vertex processing not implemented.\n"); + { + if (!once++) + FIXME("Software vertex processing not implemented.\n"); + } } static void get_src_and_opr(DWORD arg, BOOL is_alpha, GLenum* source, GLenum* operand) { @@ -3682,7 +3686,7 @@ gl_info->gl_ops.gl.p_glMatrixMode(GL_MODELVIEW); checkGLcall("glMatrixMode"); - get_modelview_matrix(context, state, &mat); + get_modelview_matrix(context, state, 0, &mat); gl_info->gl_ops.gl.p_glLoadMatrixf((GLfloat *)&mat); checkGLcall("glLoadMatrixf"); @@ -5753,7 +5757,7 @@ state_table[i].apply = state_undefined; } - start = STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(gl_info->limits.blends)); + start = STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(d3d_info->limits.ffp_vertex_blend_matrices)); last = STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(255)); for (i = start; i <= last; ++i) { diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/swapchain.c wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/swapchain.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/swapchain.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/swapchain.c 2015-07-12 05:36:18.000000000 +0000 @@ -351,10 +351,10 @@ if (backbuffer->container->flags & WINED3D_TEXTURE_NORMALIZED_COORDS) { - tex_left /= src_w; - tex_right /= src_w; - tex_top /= src_h; - tex_bottom /= src_h; + tex_left /= backbuffer->pow2Width; + tex_right /= backbuffer->pow2Width; + tex_top /= backbuffer->pow2Height; + tex_bottom /= backbuffer->pow2Height; } if (is_complex_fixup(backbuffer->resource.format->color_fixup)) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/utils.c wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/utils.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/utils.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/utils.c 2015-07-12 05:36:18.000000000 +0000 @@ -1269,6 +1269,11 @@ GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, 0, WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_COMPRESSED, + EXT_TEXTURE_COMPRESSION_RGTC, NULL}, + {WINED3DFMT_ATI2N, GL_COMPRESSED_RG_RGTC2, GL_COMPRESSED_RG_RGTC2, 0, + GL_RG, GL_UNSIGNED_BYTE, 0, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_COMPRESSED, ARB_TEXTURE_COMPRESSION_RGTC, NULL}, {WINED3DFMT_INTZ, GL_DEPTH24_STENCIL8_EXT, GL_DEPTH24_STENCIL8_EXT, 0, GL_DEPTH_STENCIL_EXT, GL_UNSIGNED_INT_24_8_EXT, 0, @@ -2381,7 +2386,7 @@ 1, CHANNEL_SOURCE_X, 1, CHANNEL_SOURCE_Y, 0, CHANNEL_SOURCE_Z, 0, CHANNEL_SOURCE_W); } - if (gl_info->supported[ARB_TEXTURE_COMPRESSION_RGTC]) + if (gl_info->supported[ARB_TEXTURE_COMPRESSION_RGTC] || gl_info->supported[EXT_TEXTURE_COMPRESSION_RGTC]) { idx = getFmtIdx(WINED3DFMT_ATI1N); gl_info->formats[idx].color_fixup = create_color_fixup_desc( @@ -3247,6 +3252,9 @@ TSTYPE_TO_STR(WINED3D_TS_TEXTURE6); TSTYPE_TO_STR(WINED3D_TS_TEXTURE7); TSTYPE_TO_STR(WINED3D_TS_WORLD_MATRIX(0)); + TSTYPE_TO_STR(WINED3D_TS_WORLD_MATRIX(1)); + TSTYPE_TO_STR(WINED3D_TS_WORLD_MATRIX(2)); + TSTYPE_TO_STR(WINED3D_TS_WORLD_MATRIX(3)); #undef TSTYPE_TO_STR default: if (tstype > 256 && tstype < 512) @@ -3468,12 +3476,13 @@ *mat = identity; } -void get_modelview_matrix(const struct wined3d_context *context, const struct wined3d_state *state, struct wined3d_matrix *mat) +void get_modelview_matrix(const struct wined3d_context *context, const struct wined3d_state *state, + unsigned int index, struct wined3d_matrix *mat) { if (context->last_was_rhw) get_identity_matrix(mat); else - multiply_matrix(mat, &state->transforms[WINED3D_TS_VIEW], &state->transforms[WINED3D_TS_WORLD_MATRIX(0)]); + multiply_matrix(mat, &state->transforms[WINED3D_TS_VIEW], &state->transforms[WINED3D_TS_WORLD_MATRIX(index)]); } void get_projection_matrix(const struct wined3d_context *context, const struct wined3d_state *state, @@ -4532,6 +4541,19 @@ return; } + switch (state->render_states[WINED3D_RS_VERTEXBLEND]) + { + case WINED3D_VBF_DISABLE: + case WINED3D_VBF_1WEIGHTS: + case WINED3D_VBF_2WEIGHTS: + case WINED3D_VBF_3WEIGHTS: + settings->vertexblends = state->render_states[WINED3D_RS_VERTEXBLEND]; + break; + default: + FIXME("Unsupported vertex blending: %d\n", state->render_states[WINED3D_RS_VERTEXBLEND]); + break; + } + settings->transformed = 0; settings->clipping = state->render_states[WINED3D_RS_CLIPPING] && state->render_states[WINED3D_RS_CLIPPLANEENABLE]; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/wined3d_gl.h wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/wined3d_gl.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/wined3d_gl.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/wined3d_gl.h 2015-07-12 05:36:18.000000000 +0000 @@ -162,6 +162,7 @@ /* Internally used */ WINED3D_GL_BLEND_EQUATION, WINED3D_GL_NORMALIZED_TEXRECT, + WINED3D_GL_LEGACY_CONTEXT, WINED3D_GL_VERSION_2_0, WINED3D_GL_EXT_COUNT, diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/wined3d_main.c wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/wined3d_main.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/wined3d_main.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/wined3d_main.c 2015-07-12 05:36:18.000000000 +0000 @@ -72,6 +72,7 @@ * where appropriate. */ struct wined3d_settings wined3d_settings = { + MAKEDWORD_VERSION(1, 0), /* Default to legacy OpenGL */ TRUE, /* Use of GLSL enabled by default */ ORM_FBO, /* Use FBOs to do offscreen rendering */ PCI_VENDOR_NONE,/* PCI Vendor ID */ @@ -199,6 +200,15 @@ if (hkey || appkey) { + if (!get_config_key_dword(hkey, appkey, "MaxVersionGL", &tmpvalue)) + { + if (tmpvalue != wined3d_settings.max_gl_version) + { + ERR_(winediag)("Setting maximum allowed wined3d GL version to %u.%u.\n", + tmpvalue >> 16, tmpvalue & 0xffff); + wined3d_settings.max_gl_version = tmpvalue; + } + } if ( !get_config_key( hkey, appkey, "UseGLSL", buffer, size) ) { if (!strcmp(buffer,"disabled")) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/wined3d_private.h wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/wined3d_private.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/wined3d/wined3d_private.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/wined3d/wined3d_private.h 2015-07-12 05:36:18.000000000 +0000 @@ -179,6 +179,7 @@ #define MAX_CONSTANT_BUFFERS 15 #define MAX_SAMPLER_OBJECTS 16 #define MAX_SHADER_RESOURCE_VIEWS 128 +#define MAX_VERTEX_BLENDS 4 struct min_lookup { @@ -261,9 +262,7 @@ * values in wined3d_main.c as well. */ struct wined3d_settings { - /* Ideally, we don't want the user to have to request GLSL. If the - * hardware supports GLSL, we should use it. However, until it's fully - * implemented, we'll leave it as a registry setting for developers. */ + DWORD max_gl_version; BOOL glslRequested; int offscreen_rendering_mode; unsigned short pci_vendor_id; @@ -296,25 +295,26 @@ WINED3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY, }; -#define WINED3D_SHADER_CONST_VS_F 0x00000001 -#define WINED3D_SHADER_CONST_VS_I 0x00000002 -#define WINED3D_SHADER_CONST_VS_B 0x00000004 -#define WINED3D_SHADER_CONST_VS_POINTSIZE 0x00000008 -#define WINED3D_SHADER_CONST_VS_POS_FIXUP 0x00000010 -#define WINED3D_SHADER_CONST_PS_F 0x00000020 -#define WINED3D_SHADER_CONST_PS_I 0x00000040 -#define WINED3D_SHADER_CONST_PS_B 0x00000080 -#define WINED3D_SHADER_CONST_PS_BUMP_ENV 0x00000100 -#define WINED3D_SHADER_CONST_PS_FOG 0x00000200 -#define WINED3D_SHADER_CONST_PS_Y_CORR 0x00000400 -#define WINED3D_SHADER_CONST_PS_NP2_FIXUP 0x00000800 -#define WINED3D_SHADER_CONST_FFP_MODELVIEW 0x00001000 -#define WINED3D_SHADER_CONST_FFP_PROJ 0x00002000 -#define WINED3D_SHADER_CONST_FFP_TEXMATRIX 0x00004000 -#define WINED3D_SHADER_CONST_FFP_MATERIAL 0x00008000 -#define WINED3D_SHADER_CONST_FFP_LIGHTS 0x00010000 -#define WINED3D_SHADER_CONST_FFP_PS 0x00020000 -#define WINED3D_SHADER_CONST_FFP_COLOR_KEY 0x00040000 +#define WINED3D_SHADER_CONST_VS_F 0x00000001 +#define WINED3D_SHADER_CONST_VS_I 0x00000002 +#define WINED3D_SHADER_CONST_VS_B 0x00000004 +#define WINED3D_SHADER_CONST_VS_POINTSIZE 0x00000008 +#define WINED3D_SHADER_CONST_VS_POS_FIXUP 0x00000010 +#define WINED3D_SHADER_CONST_PS_F 0x00000020 +#define WINED3D_SHADER_CONST_PS_I 0x00000040 +#define WINED3D_SHADER_CONST_PS_B 0x00000080 +#define WINED3D_SHADER_CONST_PS_BUMP_ENV 0x00000100 +#define WINED3D_SHADER_CONST_PS_FOG 0x00000200 +#define WINED3D_SHADER_CONST_PS_Y_CORR 0x00000400 +#define WINED3D_SHADER_CONST_PS_NP2_FIXUP 0x00000800 +#define WINED3D_SHADER_CONST_FFP_MODELVIEW 0x00001000 +#define WINED3D_SHADER_CONST_FFP_VERTEXBLEND 0x00002000 +#define WINED3D_SHADER_CONST_FFP_PROJ 0x00004000 +#define WINED3D_SHADER_CONST_FFP_TEXMATRIX 0x00008000 +#define WINED3D_SHADER_CONST_FFP_MATERIAL 0x00010000 +#define WINED3D_SHADER_CONST_FFP_LIGHTS 0x00020000 +#define WINED3D_SHADER_CONST_FFP_PS 0x00040000 +#define WINED3D_SHADER_CONST_FFP_COLOR_KEY 0x00080000 enum wined3d_shader_register_type { @@ -1400,7 +1400,7 @@ void context_check_fbo_status(const struct wined3d_context *context, GLenum target) DECLSPEC_HIDDEN; struct wined3d_context *context_create(struct wined3d_swapchain *swapchain, struct wined3d_surface *target, const struct wined3d_format *ds_format) DECLSPEC_HIDDEN; -BOOL context_debug_output_enabled(const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN; +HGLRC context_create_wgl_attribs(const struct wined3d_gl_info *gl_info, HDC hdc, HGLRC share_ctx) DECLSPEC_HIDDEN; void context_destroy(struct wined3d_device *device, struct wined3d_context *context) DECLSPEC_HIDDEN; void context_free_event_query(struct wined3d_event_query *query) DECLSPEC_HIDDEN; void context_free_occlusion_query(struct wined3d_occlusion_query *query) DECLSPEC_HIDDEN; @@ -1711,6 +1711,7 @@ struct wined3d_gl_info { + DWORD selected_gl_version; DWORD glsl_version; struct wined3d_gl_limits limits; DWORD reserved_glsl_constants, reserved_arb_constants; @@ -1743,6 +1744,7 @@ DWORD ps_uniform_count; UINT ffp_textures; UINT ffp_blend_stages; + UINT ffp_vertex_blend_matrices; }; typedef void (WINE_GLAPI *wined3d_ffp_attrib_func)(const void *data); @@ -1888,6 +1890,7 @@ DWORD specular_source : 2; DWORD transformed : 1; + DWORD vertexblends : 2; DWORD clipping : 1; DWORD normal : 1; DWORD normalize : 1; @@ -1898,7 +1901,7 @@ DWORD fog_mode : 2; DWORD texcoords : 8; /* MAX_TEXTURES */ DWORD ortho_fog : 1; - DWORD padding : 13; + DWORD padding : 11; DWORD texgen[MAX_TEXTURES]; }; @@ -3071,7 +3074,7 @@ void get_identity_matrix(struct wined3d_matrix *mat) DECLSPEC_HIDDEN; void get_modelview_matrix(const struct wined3d_context *context, const struct wined3d_state *state, - struct wined3d_matrix *mat) DECLSPEC_HIDDEN; + unsigned int index, struct wined3d_matrix *mat) DECLSPEC_HIDDEN; void get_projection_matrix(const struct wined3d_context *context, const struct wined3d_state *state, struct wined3d_matrix *mat) DECLSPEC_HIDDEN; void get_texture_matrix(const struct wined3d_context *context, const struct wined3d_state *state, diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/winex11.drv/event.c wine-staging-1.7.47~ubuntu14.10.1/dlls/winex11.drv/event.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/winex11.drv/event.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/winex11.drv/event.c 2015-07-12 05:36:18.000000000 +0000 @@ -949,35 +949,6 @@ /*********************************************************************** - * is_net_wm_state_maximized - */ -static BOOL is_net_wm_state_maximized( Display *display, struct x11drv_win_data *data ) -{ - Atom type, *state; - int format, ret = 0; - unsigned long i, count, remaining; - - if (!data->whole_window) return FALSE; - - if (!XGetWindowProperty( display, data->whole_window, x11drv_atom(_NET_WM_STATE), 0, - 65536/sizeof(CARD32), False, XA_ATOM, &type, &format, &count, - &remaining, (unsigned char **)&state )) - { - if (type == XA_ATOM && format == 32) - { - for (i = 0; i < count; i++) - { - if (state[i] == x11drv_atom(_NET_WM_STATE_MAXIMIZED_VERT) || - state[i] == x11drv_atom(_NET_WM_STATE_MAXIMIZED_HORZ)) - ret++; - } - } - XFree( state ); - } - return (ret == 2); -} - -/*********************************************************************** * reparent_notify */ static void reparent_notify( Display *display, HWND hwnd, Window xparent, int x, int y ) @@ -1132,7 +1103,8 @@ style = GetWindowLongW( data->hwnd, GWL_STYLE ); if ((style & WS_CAPTION) == WS_CAPTION) { - if (is_net_wm_state_maximized( event->display, data )) + read_net_wm_states( event->display, data ); + if ((data->net_wm_state & (1 << NET_WM_STATE_MAXIMIZED))) { if (!(style & WS_MAXIMIZE)) { @@ -1267,7 +1239,8 @@ if (data->iconic && data->wm_state == NormalState) /* restore window */ { data->iconic = FALSE; - if ((style & WS_CAPTION) == WS_CAPTION && is_net_wm_state_maximized( event->display, data )) + read_net_wm_states( event->display, data ); + if ((style & WS_CAPTION) == WS_CAPTION && (data->net_wm_state & (1 << NET_WM_STATE_MAXIMIZED))) { if ((style & WS_MAXIMIZEBOX) && !(style & WS_DISABLED)) { diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/winex11.drv/window.c wine-staging-1.7.47~ubuntu14.10.1/dlls/winex11.drv/window.c --- wine-staging-1.7.46~ubuntu14.10.1/dlls/winex11.drv/window.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/winex11.drv/window.c 2015-07-12 05:36:18.000000000 +0000 @@ -65,6 +65,15 @@ #define _NET_WM_STATE_ADD 1 #define _NET_WM_STATE_TOGGLE 2 +static const unsigned int net_wm_state_atoms[NB_NET_WM_STATES] = +{ + XATOM__NET_WM_STATE_FULLSCREEN, + XATOM__NET_WM_STATE_ABOVE, + XATOM__NET_WM_STATE_MAXIMIZED_VERT, + XATOM__NET_WM_STATE_SKIP_PAGER, + XATOM__NET_WM_STATE_SKIP_TASKBAR +}; + #define SWP_AGG_NOPOSCHANGE (SWP_NOSIZE | SWP_NOMOVE | SWP_NOCLIENTSIZE | SWP_NOCLIENTMOVE | SWP_NOZORDER) /* is cursor clipping active? */ @@ -960,15 +969,6 @@ */ void update_net_wm_states( struct x11drv_win_data *data ) { - static const unsigned int state_atoms[NB_NET_WM_STATES] = - { - XATOM__NET_WM_STATE_FULLSCREEN, - XATOM__NET_WM_STATE_ABOVE, - XATOM__NET_WM_STATE_MAXIMIZED_VERT, - XATOM__NET_WM_STATE_SKIP_PAGER, - XATOM__NET_WM_STATE_SKIP_TASKBAR - }; - DWORD i, style, ex_style, new_state = 0; if (!data->managed) return; @@ -1005,8 +1005,8 @@ if (!(new_state & (1 << i))) continue; TRACE( "setting wm state %u for unmapped window %p/%lx\n", i, data->hwnd, data->whole_window ); - atoms[count++] = X11DRV_Atoms[state_atoms[i] - FIRST_XATOM]; - if (state_atoms[i] == XATOM__NET_WM_STATE_MAXIMIZED_VERT) + atoms[count++] = X11DRV_Atoms[net_wm_state_atoms[i] - FIRST_XATOM]; + if (net_wm_state_atoms[i] == XATOM__NET_WM_STATE_MAXIMIZED_VERT) atoms[count++] = x11drv_atom(_NET_WM_STATE_MAXIMIZED_HORZ); } XChangeProperty( data->display, data->whole_window, x11drv_atom(_NET_WM_STATE), XA_ATOM, @@ -1034,8 +1034,8 @@ (new_state & (1 << i)) != 0, (data->net_wm_state & (1 << i)) != 0 ); xev.xclient.data.l[0] = (new_state & (1 << i)) ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE; - xev.xclient.data.l[1] = X11DRV_Atoms[state_atoms[i] - FIRST_XATOM]; - xev.xclient.data.l[2] = ((state_atoms[i] == XATOM__NET_WM_STATE_MAXIMIZED_VERT) ? + xev.xclient.data.l[1] = X11DRV_Atoms[net_wm_state_atoms[i] - FIRST_XATOM]; + xev.xclient.data.l[2] = ((net_wm_state_atoms[i] == XATOM__NET_WM_STATE_MAXIMIZED_VERT) ? x11drv_atom(_NET_WM_STATE_MAXIMIZED_HORZ) : 0); XSendEvent( data->display, root_window, False, SubstructureRedirectMask | SubstructureNotifyMask, &xev ); @@ -1044,6 +1044,47 @@ data->net_wm_state = new_state; } +/*********************************************************************** + * read_net_wm_states + */ +void read_net_wm_states( Display* display, struct x11drv_win_data *data ) +{ + Atom type, *state; + int format; + unsigned long i, j, count, remaining; + DWORD new_state = 0; + BOOL maximized_horz = FALSE; + + if (!data->whole_window) return; + + if (!XGetWindowProperty( display, data->whole_window, x11drv_atom(_NET_WM_STATE), 0, + 65536/sizeof(CARD32), False, XA_ATOM, &type, &format, &count, + &remaining, (unsigned char **)&state )) + { + if (type == XA_ATOM && format == 32) + { + for (i = 0; i < count; i++) + { + if (state[i] == x11drv_atom(_NET_WM_STATE_MAXIMIZED_HORZ)) + maximized_horz = TRUE; + for (j=0; j < NB_NET_WM_STATES; j++) + { + if (state[i] == X11DRV_Atoms[net_wm_state_atoms[j] - FIRST_XATOM]) + { + new_state |= 1 << j; + } + } + } + } + XFree( state ); + } + + if (!maximized_horz) + new_state &= ~(1 << NET_WM_STATE_MAXIMIZED); + + data->net_wm_state = new_state; +} + /*********************************************************************** * set_xembed_flags @@ -1335,7 +1376,13 @@ rgn = CreateRectRgnIndirect( &dst_rect ); SelectClipRgn( hdc_dst, rgn ); DeleteObject( rgn ); - ExcludeUpdateRgn( hdc_dst, hwnd ); + /* WS_CLIPCHILDREN doesn't exclude children from the window update + * region, and ExcludeUpdateRgn call may inappropriately clip valid + * child window contents from the copied parent window bits, but we + * still want to avoid copying invalid window bits when possible. + */ + if (!(GetWindowLongW( hwnd, GWL_STYLE ) & WS_CLIPCHILDREN )) + ExcludeUpdateRgn( hdc_dst, hwnd ); code = X11DRV_START_EXPOSURES; ExtEscape( hdc_dst, X11DRV_ESCAPE, sizeof(code), (LPSTR)&code, 0, NULL ); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/dlls/winex11.drv/x11drv.h wine-staging-1.7.47~ubuntu14.10.1/dlls/winex11.drv/x11drv.h --- wine-staging-1.7.46~ubuntu14.10.1/dlls/winex11.drv/x11drv.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/dlls/winex11.drv/x11drv.h 2015-07-12 05:36:18.000000000 +0000 @@ -576,6 +576,7 @@ extern void wait_for_withdrawn_state( HWND hwnd, BOOL set ) DECLSPEC_HIDDEN; extern Window init_clip_window(void) DECLSPEC_HIDDEN; extern void update_user_time( Time time ) DECLSPEC_HIDDEN; +extern void read_net_wm_states( Display *display, struct x11drv_win_data *data ) DECLSPEC_HIDDEN; extern void update_net_wm_states( struct x11drv_win_data *data ) DECLSPEC_HIDDEN; extern void make_window_embedded( struct x11drv_win_data *data ) DECLSPEC_HIDDEN; extern Window create_client_window( struct x11drv_win_data *data, const XVisualInfo *visual ) DECLSPEC_HIDDEN; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/d3drm.h wine-staging-1.7.47~ubuntu14.10.1/include/d3drm.h --- wine-staging-1.7.46~ubuntu14.10.1/include/d3drm.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/d3drm.h 2015-07-12 05:36:18.000000000 +0000 @@ -353,7 +353,7 @@ STDMETHOD(CreateMaterial)(THIS_ D3DVALUE, IDirect3DRMMaterial2 **material) PURE; STDMETHOD(CreateDevice)(THIS_ DWORD width, DWORD height, IDirect3DRMDevice3 **device) PURE; STDMETHOD(CreateDeviceFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw, - IDirectDrawSurface *surface, IDirect3DRMDevice3 **device) PURE; + IDirectDrawSurface *surface, DWORD flags, IDirect3DRMDevice3 **device) PURE; STDMETHOD(CreateDeviceFromD3D)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device, IDirect3DRMDevice3 **device) PURE; STDMETHOD(CreateDeviceFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid, @@ -411,7 +411,7 @@ #define IDirect3DRM3_CreateLightRGB(p,a,b,c,d,e) (p)->lpVtbl->CreateLightRGB(p,a,b,c,d,e) #define IDirect3DRM3_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b) #define IDirect3DRM3_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) -#define IDirect3DRM3_CreateDeviceFromSurface(p,a,b,c,d) (p)->lpVtbl->CreateDeviceFromSurface(p,a,b,c,d) +#define IDirect3DRM3_CreateDeviceFromSurface(p,a,b,c,d,e) (p)->lpVtbl->CreateDeviceFromSurface(p,a,b,c,d,e) #define IDirect3DRM3_CreateDeviceFromD3D(p,a,b,c) (p)->lpVtbl->CreateDeviceFromD3D(p,a,b,c) #define IDirect3DRM3_CreateDeviceFromClipper(p,a,b,c,d,e) (p)->lpVtbl->CreateDeviceFromClipper(p,a,b,c,d,e) #define IDirect3DRM3_CreateTextureFromSurface(p,a,b) (p)->lpVtbl->CreateTextureFromSurface(p,a,b) @@ -455,7 +455,7 @@ #define IDirect3DRM3_CreateLightRGB(p,a,b,c,d,e) (p)->CreateLightRGB(a,b,c,d,e) #define IDirect3DRM3_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b) #define IDirect3DRM3_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) -#define IDirect3DRM3_CreateDeviceFromSurface(p,a,b,c,d) (p)->CreateDeviceFromSurface(a,b,c,d) +#define IDirect3DRM3_CreateDeviceFromSurface(p,a,b,c,d,e) (p)->CreateDeviceFromSurface(a,b,c,d,e) #define IDirect3DRM3_CreateDeviceFromD3D(p,a,b,c) (p)->CreateDeviceFromD3D(a,b,c) #define IDirect3DRM3_CreateDeviceFromClipper(p,a,b,c,d,e) (p)->CreateDeviceFromClipper(a,b,c,d,e) #define IDirect3DRM3_CreateTextureFromSurface(p,a,b) (p)->CreateTextureFromSurface(a,b) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/ddk/hidclass.h wine-staging-1.7.47~ubuntu14.10.1/include/ddk/hidclass.h --- wine-staging-1.7.46~ubuntu14.10.1/include/ddk/hidclass.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/ddk/hidclass.h 2015-07-12 05:36:18.000000000 +0000 @@ -22,6 +22,8 @@ extern "C" { #endif +#define HID_REVISION 1 + DEFINE_GUID (GUID_DEVINTERFACE_HID, \ 0x4D1E55B2L, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30); @@ -56,6 +58,21 @@ #define IOCTL_HID_SET_DRIVER_CONFIG HID_BUFFER_CTL_CODE(101) #define IOCTL_HID_GET_MS_GENRE_DESCRIPTOR HID_OUT_CTL_CODE(121) +typedef struct _HID_COLLECTION_INFORMATION { + ULONG DescriptorSize; + BOOLEAN Polled; + UCHAR Reserved1[1]; + USHORT VendorID; + USHORT ProductID; + USHORT VersionNumber; +} HID_COLLECTION_INFORMATION, *PHID_COLLECTION_INFORMATION; + +typedef struct _HID_XFER_PACKET { + PUCHAR reportBuffer; + ULONG reportBufferLen; + UCHAR reportId; +} HID_XFER_PACKET, *PHID_XFER_PACKET; + #ifdef __cplusplus } #endif diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/ddk/hidpi.h wine-staging-1.7.47~ubuntu14.10.1/include/ddk/hidpi.h --- wine-staging-1.7.46~ubuntu14.10.1/include/ddk/hidpi.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/ddk/hidpi.h 2015-07-12 05:36:18.000000000 +0000 @@ -136,7 +136,14 @@ USHORT NumberFeatureDataIndices; } HIDP_CAPS, *PHIDP_CAPS; +NTSTATUS WINAPI HidP_GetButtonCaps(HIDP_REPORT_TYPE ReportType, PHIDP_BUTTON_CAPS ButtonCaps, PUSHORT ButtonCapsLength, PHIDP_PREPARSED_DATA PreparsedData); NTSTATUS WINAPI HidP_GetCaps(PHIDP_PREPARSED_DATA PreparsedData, PHIDP_CAPS Capabilities); +NTSTATUS WINAPI HidP_GetUsages(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection, PUSAGE UsageList, PULONG UsageLength, PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report, ULONG ReportLength); +NTSTATUS WINAPI HidP_GetUsageValue(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection, USAGE Usage, PULONG UsageValue, PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report, ULONG ReportLength); +NTSTATUS WINAPI HidP_GetValueCaps(HIDP_REPORT_TYPE ReportType, PHIDP_VALUE_CAPS ValueCaps, PUSHORT ValueCapsLength, PHIDP_PREPARSED_DATA PreparsedData); +NTSTATUS WINAPI HidP_InitializeReportForID(HIDP_REPORT_TYPE ReportType, UCHAR ReportID, PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report, ULONG ReportLength); +ULONG WINAPI HidP_MaxUsageListLength(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, PHIDP_PREPARSED_DATA PreparsedData); +NTSTATUS WINAPI HidP_GetScaledUsageValue(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection, USAGE Usage, PLONG UsageValue, PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report, ULONG ReportLength); #ifndef FACILITY_HID_ERROR_CODE #define FACILITY_HID_ERROR_CODE 0x11 diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/ddk/hidport.h wine-staging-1.7.47~ubuntu14.10.1/include/ddk/hidport.h --- wine-staging-1.7.46~ubuntu14.10.1/include/ddk/hidport.h 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/ddk/hidport.h 2015-07-12 05:36:18.000000000 +0000 @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2015 Aric Stewart + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __HIDPORT_H__ +#define __HIDPORT_H__ + +#include + +typedef struct _HID_MINIDRIVER_REGISTRATION +{ + ULONG Revision; + PDRIVER_OBJECT DriverObject; + PUNICODE_STRING RegistryPath; + ULONG DeviceExtensionSize; + BOOLEAN DevicesArePolled; + UCHAR Reserved[3]; +} HID_MINIDRIVER_REGISTRATION, *PHID_MINIDRIVER_REGISTRATION; + +NTSTATUS WINAPI HidRegisterMinidriver(PHID_MINIDRIVER_REGISTRATION MinidriverRegistration); + +#endif /* __HIDPORT_H__ */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/ddk/hidsdi.h wine-staging-1.7.47~ubuntu14.10.1/include/ddk/hidsdi.h --- wine-staging-1.7.46~ubuntu14.10.1/include/ddk/hidsdi.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/ddk/hidsdi.h 2015-07-12 05:36:18.000000000 +0000 @@ -19,18 +19,29 @@ #ifndef __WINE_HIDSDI_H #define __WINE_HIDSDI_H -#include "hidusage.h" -#include "hidpi.h" +#include +#include #ifndef WINE_NTSTATUS_DECLARED #define WINE_NTSTATUS_DECLARED typedef LONG NTSTATUS; #endif +typedef struct _HIDD_ATTRIBUTES { + ULONG Size; + USHORT VendorID; + USHORT ProductID; + USHORT VersionNumber; +} HIDD_ATTRIBUTES, *PHIDD_ATTRIBUTES; + BOOLEAN WINAPI HidD_GetFeature(HANDLE HidDeviceObject, PVOID ReportBuffer, ULONG ReportBufferLength); void WINAPI HidD_GetHidGuid(LPGUID guid); +BOOLEAN WINAPI HidD_GetInputReport(HANDLE HidDeviceObject, PVOID ReportBuffer, ULONG ReportBufferLength); BOOLEAN WINAPI HidD_GetManufacturerString(HANDLE HidDeviceObject, PVOID Buffer, ULONG BufferLength); BOOLEAN WINAPI HidD_GetProductString(HANDLE HidDeviceObject, PVOID Buffer, ULONG BufferLength); BOOLEAN WINAPI HidD_SetFeature(HANDLE HidDeviceObject, PVOID ReportBuffer, ULONG ReportBufferLength); +BOOLEAN WINAPI HidD_GetPreparsedData( HANDLE HidDeviceObject, PHIDP_PREPARSED_DATA *PreparsedData); +BOOLEAN WINAPI HidD_FreePreparsedData(PHIDP_PREPARSED_DATA PreparsedData); +BOOLEAN WINAPI HidD_GetAttributes(HANDLE HidDeviceObject, PHIDD_ATTRIBUTES Attr); #endif /* __WINE_HIDSDI_H */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/ddk/hidtypes.h wine-staging-1.7.47~ubuntu14.10.1/include/ddk/hidtypes.h --- wine-staging-1.7.46~ubuntu14.10.1/include/ddk/hidtypes.h 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/ddk/hidtypes.h 2015-07-12 05:36:18.000000000 +0000 @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2015 Aric Stewart + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ +#ifndef __HIDTYPES_H +#define __HIDTYPES_H + +typedef enum _HID_STRING_TYPE { + HID_STRING_INDEXED = 0, + HID_STRING_ID_IMANUFACTURER, + HID_STRING_ID_IPRODUCT, + HID_STRING_ID_ISERIALNUMBER, + HID_STRING_MAX +} HID_STRING_TYPE; + +#endif /* __HIDTYPES_H */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/ddk/wdm.h wine-staging-1.7.47~ubuntu14.10.1/include/ddk/wdm.h --- wine-staging-1.7.46~ubuntu14.10.1/include/ddk/wdm.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/ddk/wdm.h 2015-07-12 05:36:18.000000000 +0000 @@ -269,6 +269,11 @@ #define IRP_MN_SURPRISE_REMOVAL 0x17 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18 +#define IRP_MN_WAIT_WAKE 0x00 +#define IRP_MN_POWER_SEQUENCE 0x01 +#define IRP_MN_SET_POWER 0x02 +#define IRP_MN_QUERY_POWER 0x03 + #define IRP_QUOTA_CHARGED 0x01 #define IRP_ALLOCATED_MUST_SUCCEED 0x02 #define IRP_ALLOCATED_FIXED_SIZE 0x04 diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/dvdmedia.h wine-staging-1.7.47~ubuntu14.10.1/include/dvdmedia.h --- wine-staging-1.7.46~ubuntu14.10.1/include/dvdmedia.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/dvdmedia.h 2015-07-12 05:36:18.000000000 +0000 @@ -51,4 +51,18 @@ DWORD dwSequenceHeader[1]; } MPEG2VIDEOINFO; +#define AMINTERLACE_IsInterlaced 0x0001 +#define AMINTERLACE_1FieldPerSample 0x0002 +#define AMINTERLACE_Field1First 0x0004 +#define AMINTERLACE_UNUSED 0x0008 +#define AMINTERLACE_FieldPatField1Only 0x0000 +#define AMINTERLACE_FieldPatField2Only 0x0010 +#define AMINTERLACE_FieldPatBothRegular 0x0020 +#define AMINTERLACE_FieldPatBothIrregular 0x0030 +#define AMINTERLACE_FieldPatternMask 0x0030 +#define AMINTERLACE_DisplayModeBobOnly 0x0000 +#define AMINTERLACE_DisplayModeWeaveOnly 0x0040 +#define AMINTERLACE_DisplayModeBobOrWeave 0x0080 +#define AMINTERLACE_DisplayModeMask 0x00c0 + #endif /* __DVDMEDIA_H__ */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/Makefile.in wine-staging-1.7.47~ubuntu14.10.1/include/Makefile.in --- wine-staging-1.7.46~ubuntu14.10.1/include/Makefile.in 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/Makefile.in 2015-07-12 05:36:18.000000000 +0000 @@ -254,7 +254,9 @@ ddk/csq.h \ ddk/hidclass.h \ ddk/hidpi.h \ + ddk/hidport.h \ ddk/hidsdi.h \ + ddk/hidtypes.h \ ddk/imm.h \ ddk/mountmgr.h \ ddk/ntddcdvd.h \ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/uxtheme.h wine-staging-1.7.47~ubuntu14.10.1/include/uxtheme.h --- wine-staging-1.7.46~ubuntu14.10.1/include/uxtheme.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/uxtheme.h 2015-07-12 05:36:18.000000000 +0000 @@ -53,6 +53,46 @@ HRESULT WINAPI DrawThemeText(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,DWORD, const RECT*); +/* DTTOPTS.dwFlags bits */ +#define DTT_TEXTCOLOR 0x00000001 +#define DTT_BORDERCOLOR 0x00000002 +#define DTT_SHADOWCOLOR 0x00000004 +#define DTT_SHADOWTYPE 0x00000008 +#define DTT_SHADOWOFFSET 0x00000010 +#define DTT_BORDERSIZE 0x00000020 +#define DTT_FONTPROP 0x00000040 +#define DTT_COLORPROP 0x00000080 +#define DTT_STATEID 0x00000100 +#define DTT_CALCRECT 0x00000200 +#define DTT_APPLYOVERLAY 0x00000400 +#define DTT_GLOWSIZE 0x00000800 +#define DTT_CALLBACK 0x00001000 +#define DTT_COMPOSITED 0x00002000 +#define DTT_VALIDBITS 0x00003fff + +typedef int (WINAPI *DTT_CALLBACK_PROC)(HDC,LPWSTR,int,RECT*,UINT,LPARAM); + +typedef struct _DTTOPTS { + DWORD dwSize; + DWORD dwFlags; + COLORREF crText; + COLORREF crBorder; + COLORREF crShadow; + int iTextShadowType; + POINT ptShadowOffset; + int iBorderSize; + int iFontPropId; + int iColorPropId; + int iStateId; + BOOL fApplyOverlay; + int iGlowSize; + DTT_CALLBACK_PROC pfnDrawTextCallback; + LPARAM lParam; +} DTTOPTS, *PDTTOPTS; + +HRESULT WINAPI DrawThemeTextEx(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,RECT*, + const DTTOPTS*); + #define ETDT_DISABLE 0x00000001 #define ETDT_ENABLE 0x00000002 #define ETDT_USETABTEXTURE 0x00000004 diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/winbase.h wine-staging-1.7.47~ubuntu14.10.1/include/winbase.h --- wine-staging-1.7.46~ubuntu14.10.1/include/winbase.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/winbase.h 2015-07-12 05:36:18.000000000 +0000 @@ -2052,6 +2052,7 @@ #define GetNamedPipeHandleState WINELIB_NAME_AW(GetNamedPipeHandleState) WINBASEAPI BOOL WINAPI GetNamedPipeInfo(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD); WINBASEAPI VOID WINAPI GetNativeSystemInfo(LPSYSTEM_INFO); +WINBASEAPI BOOL WINAPI GetNumaProcessorNode(UCHAR,PUCHAR); WINADVAPI BOOL WINAPI GetNumberOfEventLogRecords(HANDLE,PDWORD); WINADVAPI BOOL WINAPI GetOldestEventLogRecord(HANDLE,PDWORD); WINBASEAPI BOOL WINAPI GetOverlappedResult(HANDLE,LPOVERLAPPED,LPDWORD,BOOL); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/wincodec.idl wine-staging-1.7.47~ubuntu14.10.1/include/wincodec.idl --- wine-staging-1.7.46~ubuntu14.10.1/include/wincodec.idl 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/wincodec.idl 2015-07-12 05:36:18.000000000 +0000 @@ -193,6 +193,9 @@ cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppBGR, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0e);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppBGRA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0f);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppPBGRA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x10);") +cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppRGB, 0xd98c6b95,0x3efe,0x47d6,0xbb,0x25,0xeb,0x17,0x48,0xab,0x0c,0xf1);") +cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppRGBA, 0xf5c7ad2d,0x6a8d,0x43dd,0xa7,0xa8,0xa2,0x99,0x35,0x26,0x1a,0xe9);") +cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppPRGBA, 0x3cc4a650,0xa527,0x4d37,0xa9,0x16,0x31,0x42,0xc7,0xeb,0xed,0xba);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat48bppRGB, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x15);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat64bppRGBA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x16);") diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/wincrypt.h wine-staging-1.7.47~ubuntu14.10.1/include/wincrypt.h --- wine-staging-1.7.46~ubuntu14.10.1/include/wincrypt.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/wincrypt.h 2015-07-12 05:36:18.000000000 +0000 @@ -1557,6 +1557,7 @@ #define ALG_SID_DSS_ANY 0 #define ALG_SID_DSS_PKCS 1 #define ALG_SID_DSS_DMS 2 +#define ALG_SID_ECDSA 3 /* DES SIDs */ #define ALG_SID_DES 1 @@ -1573,6 +1574,9 @@ #define ALG_SID_AES_192 15 #define ALG_SID_AES_256 16 #define ALG_SID_AES 17 +/* Fortezza */ +#define ALG_SID_SKIPJACK 10 +#define ALG_SID_TEK 11 /* Diffie-Hellmans SIDs */ #define ALG_SID_DH_SANDF 1 #define ALG_SID_DH_EPHEM 2 @@ -1609,6 +1613,8 @@ #define ALG_SID_SCHANNEL_ENC_KEY 7 #define ALG_SID_EXAMPLE 80 +#define ALG_SID_ECMQV 1 + /* Algorithm Definitions */ #define CALG_MD2 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2) #define CALG_MD4 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4) @@ -1626,14 +1632,20 @@ #define CALG_RSA_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY) #define CALG_DSS_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY) #define CALG_NO_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_ANY | ALG_SID_ANY) +#define CALG_ECDSA (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_ECDSA) #define CALG_DH_SF (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_SANDF) #define CALG_DH_EPHEM (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_EPHEM) +#define CALG_AGREEDKEY_ANY (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_AGREED_KEY_ANY) +#define CALG_KEA_KEYX (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_KEA) +#define CALG_HUGHES_MD5 (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY | ALG_SID_MD5) #define CALG_ECDH (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_ECDH) #define CALG_RSA_KEYX (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA | ALG_SID_RSA_ANY) +#define CALG_ECMQV (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY | ALG_SID_ECMQV) #define CALG_DES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DES) #define CALG_RC2 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_RC2) #define CALG_3DES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES) #define CALG_3DES_112 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES_112) +#define CALG_DESX (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DESX) #define CALG_AES_128 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_128) #define CALG_AES_192 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_192) #define CALG_AES_256 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_256) @@ -1641,6 +1653,9 @@ #define CALG_RC4 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC4) #define CALG_SEAL (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_SEAL) #define CALG_RC5 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC5) +#define CALG_SKIPJACK (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_SKIPJACK) +#define CALG_TEK (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_TEK) +#define CALG_CYLINK_MEK (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_CYLINK_MEK) #define CALG_SSL3_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL3_MASTER) #define CALG_SCHANNEL_MASTER_HASH (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MASTER_HASH) #define CALG_SCHANNEL_MAC_KEY (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MAC_KEY) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/wine/server_protocol.h wine-staging-1.7.47~ubuntu14.10.1/include/wine/server_protocol.h --- wine-staging-1.7.46~ubuntu14.10.1/include/wine/server_protocol.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/wine/server_protocol.h 2015-07-12 05:36:18.000000000 +0000 @@ -637,19 +637,42 @@ struct { unsigned int major; + unsigned int access; + unsigned int sharing; + unsigned int options; + client_ptr_t device; + } create; + struct + { + unsigned int major; + int __pad; + client_ptr_t file; + } close; + struct + { + unsigned int major; unsigned int key; + client_ptr_t file; file_pos_t pos; } read; struct { unsigned int major; unsigned int key; + client_ptr_t file; file_pos_t pos; } write; struct { unsigned int major; + int __pad; + client_ptr_t file; + } flush; + struct + { + unsigned int major; ioctl_code_t code; + client_ptr_t file; } ioctl; } irp_params_t; @@ -3193,9 +3216,10 @@ obj_handle_t manager; obj_handle_t handle; unsigned int status; + client_ptr_t file_ptr; data_size_t size; /* VARARG(data,bytes); */ - char __pad_28[4]; + char __pad_36[4]; }; struct set_irp_result_reply { @@ -4882,7 +4906,6 @@ struct get_next_device_request_reply { struct reply_header __header; - client_ptr_t user_ptr; irp_params_t params; obj_handle_t next; process_id_t client_pid; @@ -6073,6 +6096,6 @@ struct terminate_job_reply terminate_job_reply; }; -#define SERVER_PROTOCOL_VERSION 476 +#define SERVER_PROTOCOL_VERSION 481 #endif /* __WINE_WINE_SERVER_PROTOCOL_H */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/winerror.h wine-staging-1.7.47~ubuntu14.10.1/include/winerror.h --- wine-staging-1.7.46~ubuntu14.10.1/include/winerror.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/winerror.h 2015-07-12 05:36:18.000000000 +0000 @@ -3009,6 +3009,52 @@ #define DWRITE_E_FLOWDIRECTIONCONFLICTS _HRESULT_TYPEDEF_(0x8898500B) #define DWRITE_E_NOCOLOR _HRESULT_TYPEDEF_(0x8898500C) +#define D2DERR_WRONG_STATE _HRESULT_TYPEDEF_(0x88990001) +#define D2DERR_NOT_INITIALIZED _HRESULT_TYPEDEF_(0x88990002) +#define D2DERR_UNSUPPORTED_OPERATION _HRESULT_TYPEDEF_(0x88990003) +#define D2DERR_SCANNER_FAILED _HRESULT_TYPEDEF_(0x88990004) +#define D2DERR_SCREEN_ACCESS_DENIED _HRESULT_TYPEDEF_(0x88990005) +#define D2DERR_DISPLAY_STATE_INVALID _HRESULT_TYPEDEF_(0x88990006) +#define D2DERR_ZERO_VECTOR _HRESULT_TYPEDEF_(0x88990007) +#define D2DERR_INTERNAL_ERROR _HRESULT_TYPEDEF_(0x88990008) +#define D2DERR_DISPLAY_FORMAT_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x88990009) +#define D2DERR_INVALID_CALL _HRESULT_TYPEDEF_(0x8899000a) +#define D2DERR_NO_HARDWARE_DEVICE _HRESULT_TYPEDEF_(0x8899000b) +#define D2DERR_RECREATE_TARGET _HRESULT_TYPEDEF_(0x8899000c) +#define D2DERR_TOO_MANY_SHADER_ELEMENTS _HRESULT_TYPEDEF_(0x8899000d) +#define D2DERR_SHADER_COMPILE_FAILED _HRESULT_TYPEDEF_(0x8899000e) +#define D2DERR_MAX_TEXTURE_SIZE_EXCEEDED _HRESULT_TYPEDEF_(0x8899000f) +#define D2DERR_UNSUPPORTED_VERSION _HRESULT_TYPEDEF_(0x88990010) +#define D2DERR_BAD_NUMBER _HRESULT_TYPEDEF_(0x88990011) +#define D2DERR_WRONG_FACTORY _HRESULT_TYPEDEF_(0x88990012) +#define D2DERR_LAYER_ALREADY_IN_USE _HRESULT_TYPEDEF_(0x88990013) +#define D2DERR_POP_CALL_DID_NOT_MATCH_PUSH _HRESULT_TYPEDEF_(0x88990014) +#define D2DERR_WRONG_RESOURCE_DOMAIN _HRESULT_TYPEDEF_(0x88990015) +#define D2DERR_PUSH_POP_UNBALANCED _HRESULT_TYPEDEF_(0x88990016) +#define D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT _HRESULT_TYPEDEF_(0x88990017) +#define D2DERR_INCOMPATIBLE_BRUSH_TYPES _HRESULT_TYPEDEF_(0x88990018) +#define D2DERR_WIN32_ERROR _HRESULT_TYPEDEF_(0x88990019) +#define D2DERR_TARGET_NOT_GDI_COMPATIBLE _HRESULT_TYPEDEF_(0x8899001a) +#define D2DERR_TEXT_EFFECT_IS_WRONG_TYPE _HRESULT_TYPEDEF_(0x8899001b) +#define D2DERR_TEXT_RENDERER_NOT_RELEASED _HRESULT_TYPEDEF_(0x8899001c) +#define D2DERR_EXCEEDS_MAX_BITMAP_SIZE _HRESULT_TYPEDEF_(0x8899001d) +#define D2DERR_INVALID_GRAPH_CONFIGURATION _HRESULT_TYPEDEF_(0x8899001e) +#define D2DERR_INVALID_INTERNAL_GRAPH_CONFIGURATION _HRESULT_TYPEDEF_(0x8899001f) +#define D2DERR_CYCLIC_GRAPH _HRESULT_TYPEDEF_(0x88990020) +#define D2DERR_BITMAP_CANNOT_DRAW _HRESULT_TYPEDEF_(0x88990021) +#define D2DERR_OUTSTANDING_BITMAP_REFERENCES _HRESULT_TYPEDEF_(0x88990022) +#define D2DERR_ORIGINAL_TARGET_NOT_BOUND _HRESULT_TYPEDEF_(0x88990023) +#define D2DERR_INVALID_TARGET _HRESULT_TYPEDEF_(0x88990024) +#define D2DERR_BITMAP_BOUND_AS_TARGET _HRESULT_TYPEDEF_(0x88990025) +#define D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES _HRESULT_TYPEDEF_(0x88990026) +#define D2DERR_INTERMEDIATE_TOO_LARGE _HRESULT_TYPEDEF_(0x88990027) +#define D2DERR_EFFECT_IS_NOT_REGISTERED _HRESULT_TYPEDEF_(0x88990028) +#define D2DERR_INVALID_PROPERTY _HRESULT_TYPEDEF_(0x88990029) +#define D2DERR_NO_SUBPROPERTIES _HRESULT_TYPEDEF_(0x8899002a) +#define D2DERR_PRINT_JOB_CLOSED _HRESULT_TYPEDEF_(0x8899002b) +#define D2DERR_PRINT_FORMAT_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x8899002c) +#define D2DERR_TOO_MANY_TRANSFORM_INPUTS _HRESULT_TYPEDEF_(0x8899002d) + #define ERROR_AUDITING_DISABLED _HRESULT_TYPEDEF_(0xC0090001) #define ERROR_ALL_SIDS_FILTERED _HRESULT_TYPEDEF_(0xC0090002) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/winnls.h wine-staging-1.7.47~ubuntu14.10.1/include/winnls.h --- wine-staging-1.7.46~ubuntu14.10.1/include/winnls.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/winnls.h 2015-07-12 05:36:18.000000000 +0000 @@ -733,6 +733,7 @@ /* Define a bunch of callback types */ +typedef BOOL (CALLBACK *CALINFO_ENUMPROCEXEX)(LPWSTR,CALID,LPWSTR,LPARAM); #if defined(STRICT) typedef BOOL (CALLBACK *CALINFO_ENUMPROCA)(LPSTR); typedef BOOL (CALLBACK *CALINFO_ENUMPROCW)(LPWSTR); @@ -832,6 +833,7 @@ WINBASEAPI BOOL WINAPI EnumCalendarInfoExA(CALINFO_ENUMPROCEXA,LCID,CALID,CALTYPE); WINBASEAPI BOOL WINAPI EnumCalendarInfoExW(CALINFO_ENUMPROCEXW,LCID,CALID,CALTYPE); #define EnumCalendarInfoEx WINELIB_NAME_AW(EnumCalendarInfoEx) +WINBASEAPI BOOL WINAPI EnumCalendarInfoExEx(CALINFO_ENUMPROCEXEX,LPCWSTR,CALID,LPCWSTR,CALTYPE,LPARAM); WINBASEAPI BOOL WINAPI EnumDateFormatsA(DATEFMT_ENUMPROCA,LCID,DWORD); WINBASEAPI BOOL WINAPI EnumDateFormatsW(DATEFMT_ENUMPROCW,LCID,DWORD); #define EnumDateFormats WINELIB_NAME_AW(EnumDateFormats) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/winnt.h wine-staging-1.7.47~ubuntu14.10.1/include/winnt.h --- wine-staging-1.7.46~ubuntu14.10.1/include/winnt.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/winnt.h 2015-07-12 05:36:18.000000000 +0000 @@ -4829,6 +4829,12 @@ #define FILE_256_BYTE_ALIGNMENT 0x000000ff #define FILE_512_BYTE_ALIGNMENT 0x000001ff +#define COMPRESSION_FORMAT_NONE 0 +#define COMPRESSION_FORMAT_DEFAULT 1 +#define COMPRESSION_FORMAT_LZNT1 2 +#define COMPRESSION_ENGINE_STANDARD 0 +#define COMPRESSION_ENGINE_MAXIMUM 256 + #define MAILSLOT_NO_MESSAGE ((DWORD)-1) #define MAILSLOT_WAIT_FOREVER ((DWORD)-1) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/winternl.h wine-staging-1.7.47~ubuntu14.10.1/include/winternl.h --- wine-staging-1.7.46~ubuntu14.10.1/include/winternl.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/winternl.h 2015-07-12 05:36:18.000000000 +0000 @@ -2616,6 +2616,37 @@ NTSYSAPI NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR); #endif +/* Threadpool functions */ + +NTSYSAPI NTSTATUS WINAPI TpAllocCleanupGroup(TP_CLEANUP_GROUP **); +NTSYSAPI NTSTATUS WINAPI TpAllocPool(TP_POOL **,PVOID); +NTSYSAPI NTSTATUS WINAPI TpAllocTimer(TP_TIMER **,PTP_TIMER_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); +NTSYSAPI NTSTATUS WINAPI TpAllocWait(TP_WAIT **,PTP_WAIT_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); +NTSYSAPI NTSTATUS WINAPI TpAllocWork(TP_WORK **,PTP_WORK_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); +NTSYSAPI void WINAPI TpCallbackLeaveCriticalSectionOnCompletion(TP_CALLBACK_INSTANCE *,RTL_CRITICAL_SECTION *); +NTSYSAPI NTSTATUS WINAPI TpCallbackMayRunLong(TP_CALLBACK_INSTANCE *); +NTSYSAPI void WINAPI TpCallbackReleaseMutexOnCompletion(TP_CALLBACK_INSTANCE *,HANDLE); +NTSYSAPI void WINAPI TpCallbackReleaseSemaphoreOnCompletion(TP_CALLBACK_INSTANCE *,HANDLE,DWORD); +NTSYSAPI void WINAPI TpCallbackSetEventOnCompletion(TP_CALLBACK_INSTANCE *,HANDLE); +NTSYSAPI void WINAPI TpCallbackUnloadDllOnCompletion(TP_CALLBACK_INSTANCE *,HMODULE); +NTSYSAPI void WINAPI TpDisassociateCallback(TP_CALLBACK_INSTANCE *); +NTSYSAPI BOOL WINAPI TpIsTimerSet(TP_TIMER *); +NTSYSAPI void WINAPI TpPostWork(TP_WORK *); +NTSYSAPI void WINAPI TpReleaseCleanupGroup(TP_CLEANUP_GROUP *); +NTSYSAPI void WINAPI TpReleaseCleanupGroupMembers(TP_CLEANUP_GROUP *,BOOL,PVOID); +NTSYSAPI void WINAPI TpReleasePool(TP_POOL *); +NTSYSAPI void WINAPI TpReleaseTimer(TP_TIMER *); +NTSYSAPI void WINAPI TpReleaseWait(TP_WAIT *); +NTSYSAPI void WINAPI TpReleaseWork(TP_WORK *); +NTSYSAPI void WINAPI TpSetPoolMaxThreads(TP_POOL *,DWORD); +NTSYSAPI BOOL WINAPI TpSetPoolMinThreads(TP_POOL *,DWORD); +NTSYSAPI void WINAPI TpSetTimer(TP_TIMER *, LARGE_INTEGER *,LONG,LONG); +NTSYSAPI void WINAPI TpSetWait(TP_WAIT *,HANDLE,LARGE_INTEGER *); +NTSYSAPI NTSTATUS WINAPI TpSimpleTryPost(PTP_SIMPLE_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); +NTSYSAPI void WINAPI TpWaitForTimer(TP_TIMER *,BOOL); +NTSYSAPI void WINAPI TpWaitForWait(TP_WAIT *,BOOL); +NTSYSAPI void WINAPI TpWaitForWork(TP_WORK *,BOOL); + /* Wine internal functions */ NTSYSAPI NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret, diff -Nru wine-staging-1.7.46~ubuntu14.10.1/include/winuser.h wine-staging-1.7.47~ubuntu14.10.1/include/winuser.h --- wine-staging-1.7.46~ubuntu14.10.1/include/winuser.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/include/winuser.h 2015-07-12 05:36:18.000000000 +0000 @@ -3992,6 +3992,8 @@ WINUSERAPI BOOL WINAPI ShowOwnedPopups(HWND,BOOL); WINUSERAPI BOOL WINAPI ShowWindow(HWND,INT); WINUSERAPI BOOL WINAPI ShowWindowAsync(HWND,INT); +WINUSERAPI BOOL WINAPI ShutdownBlockReasonCreate(HWND,LPCWSTR); +WINUSERAPI BOOL WINAPI ShutdownBlockReasonDestroy(HWND); WINUSERAPI BOOL WINAPI SubtractRect(LPRECT,const RECT*,const RECT*); WINUSERAPI BOOL WINAPI SwapMouseButton(BOOL); WINUSERAPI BOOL WINAPI SwitchDesktop(HDESK); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/loader/wine.inf.in wine-staging-1.7.47~ubuntu14.10.1/loader/wine.inf.in --- wine-staging-1.7.46~ubuntu14.10.1/loader/wine.inf.in 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/loader/wine.inf.in 2015-07-12 05:36:18.000000000 +0000 @@ -445,6 +445,8 @@ HKLM,System\CurrentControlSet\Control\Class\{4d36e978-e325-11ce-bfc1-08002be10318},"Class",,"Ports" HKLM,System\CurrentControlSet\Control\Class\{6bdd1fc6-810f-11d0-bec7-08002be2092f},,,"Imaging devices" HKLM,System\CurrentControlSet\Control\Class\{6bdd1fc6-810f-11d0-bec7-08002be2092f},"Class",,"Image" +HKLM,System\CurrentControlSet\Control\Class\{745a17a0-74d3-11d0-b6fe-00a0c90f57da},,,"Human Interface Devices" +HKLM,System\CurrentControlSet\Control\Class\{745a17a0-74d3-11d0-b6fe-00a0c90f57da},"Class",,"HIDClass" [CurrentVersion] HKLM,%CurrentVersion%,"CommonFilesDir",,"%16427%" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/configure-Crosscompiling/0001-configure.ac-Search-for-otool-using-AC_CHECK_TOOL.patch wine-staging-1.7.47~ubuntu14.10.1/patches/configure-Crosscompiling/0001-configure.ac-Search-for-otool-using-AC_CHECK_TOOL.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/configure-Crosscompiling/0001-configure.ac-Search-for-otool-using-AC_CHECK_TOOL.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/configure-Crosscompiling/0001-configure.ac-Search-for-otool-using-AC_CHECK_TOOL.patch 2015-07-12 05:53:31.000000000 +0000 @@ -1,39 +1,34 @@ -From 463cba8291e1dba1f381e0930926bc0c4bc26916 Mon Sep 17 00:00:00 2001 +From c6b2b1df5a754ac292ee66d091d7892e8252c5c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sun, 21 Jun 2015 20:00:18 +0200 -Subject: configure.ac: Search for otool using AC_CHECK_TOOL. +Subject: configure.ac: Search for otool using AC_CHECK_TOOL. (v2) This is necessary to allow using otool from custom host toolchains like i686-apple-darwin12-otool. --- - aclocal.m4 | 2 +- - configure.ac | 1 + - 2 files changed, 2 insertions(+), 1 deletion(-) + aclocal.m4 | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aclocal.m4 b/aclocal.m4 -index 3d43721..9993de1 100644 +index 3d43721..f7a12f1 100644 --- a/aclocal.m4 +++ b/aclocal.m4 -@@ -62,7 +62,7 @@ LIBS="-l$1 $5 $LIBS" +@@ -42,6 +42,7 @@ dnl Usage: WINE_PATH_PKG_CONFIG + dnl + AC_DEFUN([WINE_PATH_SONAME_TOOLS], + [AC_PATH_PROG(LDD,ldd,true,/sbin:/usr/sbin:$PATH) ++AC_CHECK_TOOL(OTOOL,otool,otool) + AC_CHECK_TOOL(READELF,[readelf],true)]) + + AC_DEFUN([WINE_PATH_PKG_CONFIG], +@@ -62,7 +63,7 @@ LIBS="-l$1 $5 $LIBS" AC_LINK_IFELSE([AC_LANG_CALL([], [$2])], [case "$LIBEXT" in dll) AS_VAR_SET(ac_Lib,[`$ac_cv_path_LDD conftest.exe | grep "$1" | sed -e "s/dll.*/dll/"';2,$d'`]) ;; - dylib) AS_VAR_SET(ac_Lib,[`otool -L conftest$ac_exeext | grep "ac_lib_pattern\\.[[0-9A-Za-z.]]*dylib" | sed -e "s/^.*\/\(ac_lib_pattern\.[[0-9A-Za-z.]]*dylib\).*$/\1/"';2,$d'`]) ;; -+ dylib) AS_VAR_SET(ac_Lib,[`$ac_cv_prog_OTOOL -L conftest$ac_exeext | grep "ac_lib_pattern\\.[[0-9A-Za-z.]]*dylib" | sed -e "s/^.*\/\(ac_lib_pattern\.[[0-9A-Za-z.]]*dylib\).*$/\1/"';2,$d'`]) ;; ++ dylib) AS_VAR_SET(ac_Lib,[`$OTOOL -L conftest$ac_exeext | grep "ac_lib_pattern\\.[[0-9A-Za-z.]]*dylib" | sed -e "s/^.*\/\(ac_lib_pattern\.[[0-9A-Za-z.]]*dylib\).*$/\1/"';2,$d'`]) ;; *) AS_VAR_SET(ac_Lib,[`$READELF -d conftest$ac_exeext | grep "NEEDED.*ac_lib_pattern\\.$LIBEXT" | sed -e "s/^.*\\m4_dquote(\\(ac_lib_pattern\\.$LIBEXT[[^ ]]*\\)\\).*$/\1/"';2,$d'`]) AS_VAR_IF([ac_Lib],[], [AS_VAR_SET(ac_Lib,[`$LDD conftest$ac_exeext | grep "ac_lib_pattern\\.$LIBEXT" | sed -e "s/^.*\(ac_lib_pattern\.$LIBEXT[[^ ]]*\).*$/\1/"';2,$d'`])]) ;; -diff --git a/configure.ac b/configure.ac -index f9df3f0..3587a12 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -268,6 +268,7 @@ fi - - AC_CHECK_TOOLS(AR,[ar gar],ar) - AC_CHECK_TOOL(STRIP,strip,strip) -+AC_CHECK_TOOL(OTOOL,otool,otool) - AC_SUBST(ARFLAGS,rc) - AC_PROG_RANLIB - AC_PROG_LN_S -- -2.4.3 +2.4.4 diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/d3d11-D3D11CreateDeviceAndSwapChain/0001-d3d11-add-a-stub-for-D3D11CreateDeviceAndSwapChain.patch wine-staging-1.7.47~ubuntu14.10.1/patches/d3d11-D3D11CreateDeviceAndSwapChain/0001-d3d11-add-a-stub-for-D3D11CreateDeviceAndSwapChain.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/d3d11-D3D11CreateDeviceAndSwapChain/0001-d3d11-add-a-stub-for-D3D11CreateDeviceAndSwapChain.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/d3d11-D3D11CreateDeviceAndSwapChain/0001-d3d11-add-a-stub-for-D3D11CreateDeviceAndSwapChain.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -From 84ef0e10eed439613ce503470eb000f79628fe6c Mon Sep 17 00:00:00 2001 -From: Austin English -Date: Tue, 23 Dec 2014 18:30:51 -0600 -Subject: d3d11: add a stub for D3D11CreateDeviceAndSwapChain - ---- - dlls/d3d11/d3d11.spec | 2 +- - dlls/d3d11/d3d11_main.c | 12 ++++++++++++ - 2 files changed, 13 insertions(+), 1 deletion(-) - -diff --git a/dlls/d3d11/d3d11.spec b/dlls/d3d11/d3d11.spec -index 52d7bcb..2d6c877 100644 ---- a/dlls/d3d11/d3d11.spec -+++ b/dlls/d3d11/d3d11.spec -@@ -3,7 +3,7 @@ - @ stub D3D11CoreGetLayeredDeviceSize - @ stub D3D11CoreRegisterLayers - @ stdcall D3D11CreateDevice(ptr long ptr long ptr long long ptr ptr ptr) --@ stub D3D11CreateDeviceAndSwapChain -+@ stdcall D3D11CreateDeviceAndSwapChain(ptr long ptr long ptr long long ptr ptr ptr ptr ptr) - @ stub D3DKMTCloseAdapter - @ stub D3DKMTCreateAllocation - @ stub D3DKMTCreateContext -diff --git a/dlls/d3d11/d3d11_main.c b/dlls/d3d11/d3d11_main.c -index ec8236f..bf8f42f 100644 ---- a/dlls/d3d11/d3d11_main.c -+++ b/dlls/d3d11/d3d11_main.c -@@ -54,3 +54,15 @@ HRESULT WINAPI D3D11CreateDevice(IDXGIAdapter *adapter, D3D_DRIVER_TYPE driver_t - flags, feature_levels, levels, sdk_version, device, feature_level, context); - return E_OUTOFMEMORY; - } -+ -+HRESULT WINAPI D3D11CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D_DRIVER_TYPE driver_type, -+ HMODULE swrast, UINT flags, const D3D_FEATURE_LEVEL *feature_levels, UINT levels, -+ UINT sdk_version, const DXGI_SWAP_CHAIN_DESC *swapchain_desc, IDXGISwapChain **swapchain, -+ ID3D11Device **device, D3D_FEATURE_LEVEL *feature_level, ID3D11DeviceContext **immediate_context) -+{ -+ FIXME("adapter %p, driver_type %s, swrast %p, flags %#x, feature_levels %p, levels %#x, sdk_version %d, " -+ "swapchain_desc %p, swapchain %p, device %p, feature_level %p, immediate_context %p stub!\n", -+ adapter, debug_d3d_driver_type(driver_type), swrast, flags, feature_levels, levels, sdk_version, -+ swapchain_desc, swapchain, device, feature_level, immediate_context); -+ return E_INVALIDARG; -+} --- -2.3.5 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/d3d11-D3D11CreateDeviceAndSwapChain/definition wine-staging-1.7.47~ubuntu14.10.1/patches/d3d11-D3D11CreateDeviceAndSwapChain/definition --- wine-staging-1.7.46~ubuntu14.10.1/patches/d3d11-D3D11CreateDeviceAndSwapChain/definition 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/d3d11-D3D11CreateDeviceAndSwapChain/definition 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -Fixes: [33153] Add stub for d3d11.D3D11CreateDeviceAndSwapChain -Category: stable diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/d3drm-Specfile/0001-d3drm-Mark-DllCanUnloadNow-and-DllGetClassObject-as-.patch wine-staging-1.7.47~ubuntu14.10.1/patches/d3drm-Specfile/0001-d3drm-Mark-DllCanUnloadNow-and-DllGetClassObject-as-.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/d3drm-Specfile/0001-d3drm-Mark-DllCanUnloadNow-and-DllGetClassObject-as-.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/d3drm-Specfile/0001-d3drm-Mark-DllCanUnloadNow-and-DllGetClassObject-as-.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -From 348d1eafe2d80017509ebfb79832a7465fd1693b Mon Sep 17 00:00:00 2001 -From: Amine Khaldi -Date: Sun, 22 Feb 2015 22:39:25 +0100 -Subject: d3drm: Mark DllCanUnloadNow and DllGetClassObject as private. - ---- - dlls/d3drm/d3drm.spec | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/dlls/d3drm/d3drm.spec b/dlls/d3drm/d3drm.spec -index 4108a72..e83fb0b 100644 ---- a/dlls/d3drm/d3drm.spec -+++ b/dlls/d3drm/d3drm.spec -@@ -19,5 +19,5 @@ - @ stdcall D3DRMVectorScale(ptr ptr float) - @ stdcall D3DRMVectorSubtract(ptr ptr ptr) - @ stdcall Direct3DRMCreate(ptr) --@ stub DllCanUnloadNow --@ stub DllGetClassObject -+@ stub -private DllCanUnloadNow -+@ stub -private DllGetClassObject --- -2.3.0 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/d3drm-Specfile/definition wine-staging-1.7.47~ubuntu14.10.1/patches/d3drm-Specfile/definition --- wine-staging-1.7.46~ubuntu14.10.1/patches/d3drm-Specfile/definition 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/d3drm-Specfile/definition 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -Category: stable diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/dbghelp-Debug_Symbols/0001-dbghelp-Always-check-for-debug-symbols-in-BINDIR.patch wine-staging-1.7.47~ubuntu14.10.1/patches/dbghelp-Debug_Symbols/0001-dbghelp-Always-check-for-debug-symbols-in-BINDIR.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/dbghelp-Debug_Symbols/0001-dbghelp-Always-check-for-debug-symbols-in-BINDIR.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/dbghelp-Debug_Symbols/0001-dbghelp-Always-check-for-debug-symbols-in-BINDIR.patch 2015-07-12 05:53:31.000000000 +0000 @@ -1,4 +1,4 @@ -From 2f02387d53e803b7347d70ef8199bdd5c0d08732 Mon Sep 17 00:00:00 2001 +From 4ecefb9629cb3121da17e7d9573c5134dcdc74c6 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Mon, 6 Oct 2014 05:06:06 +0200 Subject: dbghelp: Always check for debug symbols in BINDIR. @@ -9,7 +9,7 @@ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dlls/dbghelp/Makefile.in b/dlls/dbghelp/Makefile.in -index e5d40b1..cfb5b3e 100644 +index e483693..03248a6 100644 --- a/dlls/dbghelp/Makefile.in +++ b/dlls/dbghelp/Makefile.in @@ -1,6 +1,6 @@ @@ -19,7 +19,7 @@ +EXTRADEFS = -D_IMAGEHLP_SOURCE_ -DDLLPREFIX='"$(DLLPREFIX)"' -DBINDIR="\"${bindir}\"" IMPORTS = psapi DELAYIMPORTS = version - EXTRALIBS = $(Z_LIBS) + EXTRALIBS = $(Z_LIBS) $(CORESERVICES_LIBS) $(COREFOUNDATION_LIBS) diff --git a/dlls/dbghelp/elf_module.c b/dlls/dbghelp/elf_module.c index b176143..8e22265 100644 --- a/dlls/dbghelp/elf_module.c @@ -40,5 +40,5 @@ load_offset, dyn_addr, elf_info); } -- -2.1.2 +2.4.4 diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/dwrite-VDMX/0001-dwrite-Avoid-dereferencing-NULL-pointer-for-fonts-wi.patch wine-staging-1.7.47~ubuntu14.10.1/patches/dwrite-VDMX/0001-dwrite-Avoid-dereferencing-NULL-pointer-for-fonts-wi.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/dwrite-VDMX/0001-dwrite-Avoid-dereferencing-NULL-pointer-for-fonts-wi.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/dwrite-VDMX/0001-dwrite-Avoid-dereferencing-NULL-pointer-for-fonts-wi.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,25 @@ +From ef42bee07f37038aa690ddf8c164c7fff8512a25 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sun, 12 Jul 2015 03:36:20 +0200 +Subject: dwrite: Avoid dereferencing NULL pointer for fonts without VDMX. + +--- + dlls/dwrite/opentype.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/dlls/dwrite/opentype.c b/dlls/dwrite/opentype.c +index 63e1b74..8d90c04 100644 +--- a/dlls/dwrite/opentype.c ++++ b/dlls/dwrite/opentype.c +@@ -1347,7 +1347,7 @@ static const struct VDMX_group *find_vdmx_group(const struct VDMX_Header *hdr) + BOOL opentype_get_vdmx_size(const void *data, INT emsize, UINT16 *ascent, UINT16 *descent) + { + const struct VDMX_Header *hdr = (const struct VDMX_Header*)data; +- const struct VDMX_group *group = find_vdmx_group(hdr); ++ const struct VDMX_group *group; + const struct VDMX_vTable *tables; + WORD recs, i; + +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/kernel32-GetNumaProcessorNode/0001-kernel32-tests-Add-tests-for-GetNumaProcessorNode.-v.patch wine-staging-1.7.47~ubuntu14.10.1/patches/kernel32-GetNumaProcessorNode/0001-kernel32-tests-Add-tests-for-GetNumaProcessorNode.-v.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/kernel32-GetNumaProcessorNode/0001-kernel32-tests-Add-tests-for-GetNumaProcessorNode.-v.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/kernel32-GetNumaProcessorNode/0001-kernel32-tests-Add-tests-for-GetNumaProcessorNode.-v.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ -From 1683ee187a990a2c55cc6db9b5fac120ca1bbaca Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Michael=20M=C3=BCller?= -Date: Sat, 18 Oct 2014 06:00:48 +0200 -Subject: kernel32/tests: Add tests for GetNumaProcessorNode. (v2) - -Changes in v2: - * Remove separate dlls/kernel32/tests/cpu.c file. - * Fix test failure on WinXP. ---- - dlls/kernel32/tests/process.c | 37 +++++++++++++++++++++++++++++++++++++ - 1 file changed, 37 insertions(+) - -diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c -index 6660af4..b4a435b 100644 ---- a/dlls/kernel32/tests/process.c -+++ b/dlls/kernel32/tests/process.c -@@ -3,6 +3,7 @@ - * - * Copyright 2002 Eric Pouech - * Copyright 2006 Dmitry Timoshkov -+ * Copyright 2014 Michael Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -74,6 +75,7 @@ static BOOL (WINAPI *pTerminateJobObject)(HANDLE job, UINT exit_code); - static BOOL (WINAPI *pQueryInformationJobObject)(HANDLE job, JOBOBJECTINFOCLASS class, LPVOID info, DWORD len, LPDWORD ret_len); - static BOOL (WINAPI *pSetInformationJobObject)(HANDLE job, JOBOBJECTINFOCLASS class, LPVOID info, DWORD len); - static HANDLE (WINAPI *pCreateIoCompletionPort)(HANDLE file, HANDLE existing_port, ULONG_PTR key, DWORD threads); -+static BOOL (WINAPI *pGetNumaProcessorNode)(UCHAR, PUCHAR); - - /* ############################### */ - static char base[MAX_PATH]; -@@ -227,6 +229,7 @@ static BOOL init(void) - pQueryInformationJobObject = (void *)GetProcAddress(hkernel32, "QueryInformationJobObject"); - pSetInformationJobObject = (void *)GetProcAddress(hkernel32, "SetInformationJobObject"); - pCreateIoCompletionPort = (void *)GetProcAddress(hkernel32, "CreateIoCompletionPort"); -+ pGetNumaProcessorNode = (void *)GetProcAddress(hkernel32, "GetNumaProcessorNode"); - return TRUE; - } - -@@ -2692,6 +2695,39 @@ static void test_StartupNoConsole(void) - #endif - } - -+static void test_GetNumaProcessorNode(void) -+{ -+ SYSTEM_INFO si; -+ UCHAR node; -+ BOOL ret; -+ int i; -+ -+ if (!pGetNumaProcessorNode) -+ { -+ skip("GetNumaProcessorNode is missing\n"); -+ return; -+ } -+ -+ GetSystemInfo(&si); -+ for (i = 0; i < 256; i++) -+ { -+ SetLastError(0xdeadbeef); -+ node = (i < si.dwNumberOfProcessors) ? 0xFF : 0xAA; -+ ret = pGetNumaProcessorNode(i, &node); -+ if (i < si.dwNumberOfProcessors) -+ { -+ ok(ret, "GetNumaProcessorNode returned FALSE for processor %d\n", i); -+ ok(node != 0xFF, "expected node != 0xFF, but got 0xFF\n"); -+ } -+ else -+ { -+ ok(!ret, "GetNumaProcessorNode returned TRUE for processor %d\n", i); -+ ok(node == 0xFF || broken(node == 0xAA) /* WinXP */, "expected node 0xFF, got %x\n", node); -+ ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); -+ } -+ } -+} -+ - START_TEST(process) - { - HANDLE job; -@@ -2741,6 +2777,7 @@ START_TEST(process) - test_RegistryQuota(); - test_DuplicateHandle(); - test_StartupNoConsole(); -+ test_GetNumaProcessorNode(); - /* things that can be tested: - * lookup: check the way program to be executed is searched - * handles: check the handle inheritance stuff (+sec options) --- -2.4.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/kernel32-GetNumaProcessorNode/0002-kernel32-Implement-GetNumaProcessorNode.-v2.patch wine-staging-1.7.47~ubuntu14.10.1/patches/kernel32-GetNumaProcessorNode/0002-kernel32-Implement-GetNumaProcessorNode.-v2.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/kernel32-GetNumaProcessorNode/0002-kernel32-Implement-GetNumaProcessorNode.-v2.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/kernel32-GetNumaProcessorNode/0002-kernel32-Implement-GetNumaProcessorNode.-v2.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,84 +0,0 @@ -From a228108e82fd231729cc6656c443af35b4249b23 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Michael=20M=C3=BCller?= -Date: Sat, 18 Oct 2014 05:57:32 +0200 -Subject: kernel32: Implement GetNumaProcessorNode. (v2) - -Changes in v2: - * Remove NULL-pointer check, it also crashes on Windows. ---- - dlls/kernel32/cpu.c | 21 +++++++++++++++++++++ - dlls/kernel32/kernel32.spec | 2 +- - dlls/kernel32/tests/process.c | 2 +- - include/winbase.h | 1 + - 4 files changed, 24 insertions(+), 2 deletions(-) - -diff --git a/dlls/kernel32/cpu.c b/dlls/kernel32/cpu.c -index f48fcf0..dc61763 100644 ---- a/dlls/kernel32/cpu.c -+++ b/dlls/kernel32/cpu.c -@@ -291,3 +291,24 @@ err: - } - return TRUE; - } -+ -+/*********************************************************************** -+ * GetNumaProcessorNode (KERNEL32.@) -+ */ -+BOOL WINAPI GetNumaProcessorNode(UCHAR processor, PUCHAR node) -+{ -+ SYSTEM_INFO si; -+ -+ TRACE( "(%d, %p)\n", processor, node ); -+ -+ GetSystemInfo(&si); -+ if (processor < si.dwNumberOfProcessors) -+ { -+ *node = 0; -+ return TRUE; -+ } -+ -+ *node = 0xFF; -+ SetLastError(ERROR_INVALID_PARAMETER); -+ return FALSE; -+} -diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec -index f9a0770..7703f2c 100644 ---- a/dlls/kernel32/kernel32.spec -+++ b/dlls/kernel32/kernel32.spec -@@ -746,7 +746,7 @@ - @ stdcall GetNumaNodeProcessorMask(long ptr) - # @ stub GetNumaNodeProcessorMaskEx - # @ stub GetNumaProcessorMap --# @ stub GetNumaProcessorNode -+@ stdcall GetNumaProcessorNode(long ptr) - # @ stub GetNumaProcessorNodeEx - # @ stub GetNumaProximityNode - # @ stub GetNumaProximityNodeEx -diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c -index b4a435b..4145dce 100644 ---- a/dlls/kernel32/tests/process.c -+++ b/dlls/kernel32/tests/process.c -@@ -2704,7 +2704,7 @@ static void test_GetNumaProcessorNode(void) - - if (!pGetNumaProcessorNode) - { -- skip("GetNumaProcessorNode is missing\n"); -+ win_skip("GetNumaProcessorNode is missing\n"); - return; - } - -diff --git a/include/winbase.h b/include/winbase.h -index cc1081e..f3249a7 100644 ---- a/include/winbase.h -+++ b/include/winbase.h -@@ -2052,6 +2052,7 @@ WINBASEAPI BOOL WINAPI GetNamedPipeHandleStateW(HANDLE,LPDWORD,LPDWORD,LP - #define GetNamedPipeHandleState WINELIB_NAME_AW(GetNamedPipeHandleState) - WINBASEAPI BOOL WINAPI GetNamedPipeInfo(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD); - WINBASEAPI VOID WINAPI GetNativeSystemInfo(LPSYSTEM_INFO); -+WINBASEAPI BOOL WINAPI GetNumaProcessorNode(UCHAR, PUCHAR); - WINADVAPI BOOL WINAPI GetNumberOfEventLogRecords(HANDLE,PDWORD); - WINADVAPI BOOL WINAPI GetOldestEventLogRecord(HANDLE,PDWORD); - WINBASEAPI BOOL WINAPI GetOverlappedResult(HANDLE,LPOVERLAPPED,LPDWORD,BOOL); --- -2.4.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/kernel32-GetNumaProcessorNode/definition wine-staging-1.7.47~ubuntu14.10.1/patches/kernel32-GetNumaProcessorNode/definition --- wine-staging-1.7.46~ubuntu14.10.1/patches/kernel32-GetNumaProcessorNode/definition 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/kernel32-GetNumaProcessorNode/definition 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -Fixes: [38660] Add implementation for kernel32.GetNumaProcessorNode diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/msvcrt-atof_strtod/0001-msvcrt-Avoid-crash-when-NULL-pointer-is-passed-to-at.patch wine-staging-1.7.47~ubuntu14.10.1/patches/msvcrt-atof_strtod/0001-msvcrt-Avoid-crash-when-NULL-pointer-is-passed-to-at.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/msvcrt-atof_strtod/0001-msvcrt-Avoid-crash-when-NULL-pointer-is-passed-to-at.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/msvcrt-atof_strtod/0001-msvcrt-Avoid-crash-when-NULL-pointer-is-passed-to-at.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,109 +0,0 @@ -From 5464947ce0bbc3f0da79231c5e366cd54d7888d1 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Michael=20M=C3=BCller?= -Date: Sat, 8 Nov 2014 22:39:28 +0100 -Subject: msvcrt: Avoid crash when NULL pointer is passed to atof / strtod - functions. - ---- - dlls/msvcrt/tests/string.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 57 insertions(+) - -diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c -index 9920df0..1a3c598 100644 ---- a/dlls/msvcrt/tests/string.c -+++ b/dlls/msvcrt/tests/string.c -@@ -89,6 +89,8 @@ static int (__cdecl *p_tolower)(int); - static size_t (__cdecl *p_mbrlen)(const char*, size_t, mbstate_t*); - static size_t (__cdecl *p_mbrtowc)(wchar_t*, const char*, size_t, mbstate_t*); - static int (__cdecl *p__atodbl_l)(_CRT_DOUBLE*,char*,_locale_t); -+static double (__cdecl *p__atof_l)(const char*,_locale_t); -+static double (__cdecl *p__strtod_l)(const char *,char**,_locale_t); - static int (__cdecl *p__strnset_s)(char*,size_t,int,size_t); - static int (__cdecl *p__wcsset_s)(wchar_t*,size_t,wchar_t); - -@@ -1678,6 +1680,28 @@ static void test__strtod(void) - ok(almost_equal(d, 0), "d = %lf\n", d); - ok(end == white_chars, "incorrect end (%d)\n", (int)(end-white_chars)); - -+ if (!p__strtod_l) -+ win_skip("_strtod_l not found\n"); -+ else -+ { -+ errno = EBADF; -+ d = strtod(NULL, NULL); -+ ok(almost_equal(d, 0.0), "d = %lf\n", d); -+ ok(errno == EINVAL, "errno = %x\n", errno); -+ -+ errno = EBADF; -+ end = (char *)0xdeadbeef; -+ d = strtod(NULL, &end); -+ ok(almost_equal(d, 0.0), "d = %lf\n", d); -+ ok(errno == EINVAL, "errno = %x\n", errno); -+ todo_wine ok(!end, "incorrect end ptr %p\n", end); -+ -+ errno = EBADF; -+ d = p__strtod_l(NULL, NULL, NULL); -+ ok(almost_equal(d, 0.0), "d = %lf\n", d); -+ ok(errno == EINVAL, "errno = %x\n", errno); -+ } -+ - /* Set locale with non '.' decimal point (',') */ - if(!setlocale(LC_ALL, "Polish")) { - win_skip("system with limited locales\n"); -@@ -2721,6 +2745,36 @@ static void test_atoi(void) - ok(r == 0, "atoi(4294967296) = %d\n", r); - } - -+static void test_atof(void) -+{ -+ double d; -+ -+ d = atof("0.0"); -+ ok(almost_equal(d, 0.0), "d = %lf\n", d); -+ -+ d = atof("1.0"); -+ ok(almost_equal(d, 1.0), "d = %lf\n", d); -+ -+ d = atof("-1.0"); -+ ok(almost_equal(d, -1.0), "d = %lf\n", d); -+ -+ if (!p__atof_l) -+ { -+ win_skip("_atof_l not found\n"); -+ return; -+ } -+ -+ errno = EBADF; -+ d = atof(NULL); -+ ok(almost_equal(d, 0.0), "d = %lf\n", d); -+ ok(errno == EINVAL, "errno = %x\n", errno); -+ -+ errno = EBADF; -+ d = p__atof_l(NULL, NULL); -+ ok(almost_equal(d, 0.0), "d = %lf\n", d); -+ ok(errno == EINVAL, "errno = %x\n", errno); -+} -+ - static void test_strncpy(void) - { - #define TEST_STRNCPY_LEN 10 -@@ -2959,6 +3013,8 @@ START_TEST(string) - p_mbrtowc = (void*)GetProcAddress(hMsvcrt, "mbrtowc"); - p_mbsrtowcs = (void*)GetProcAddress(hMsvcrt, "mbsrtowcs"); - p__atodbl_l = (void*)GetProcAddress(hMsvcrt, "_atodbl_l"); -+ p__atof_l = (void*)GetProcAddress(hMsvcrt, "_atof_l"); -+ p__strtod_l = (void*)GetProcAddress(hMsvcrt, "_strtod_l"); - p__strnset_s = (void*)GetProcAddress(hMsvcrt, "_strnset_s"); - p__wcsset_s = (void*)GetProcAddress(hMsvcrt, "_wcsset_s"); - -@@ -3015,6 +3071,7 @@ START_TEST(string) - test__stricmp(); - test__wcstoi64(); - test_atoi(); -+ test_atof(); - test_strncpy(); - test_strxfrm(); - test__strnset_s(); --- -2.4.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/msvcrt-atof_strtod/0002-msvcrt-Set-end-to-NULL-when-strtod-is-called-with-NU.patch wine-staging-1.7.47~ubuntu14.10.1/patches/msvcrt-atof_strtod/0002-msvcrt-Set-end-to-NULL-when-strtod-is-called-with-NU.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/msvcrt-atof_strtod/0002-msvcrt-Set-end-to-NULL-when-strtod-is-called-with-NU.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/msvcrt-atof_strtod/0002-msvcrt-Set-end-to-NULL-when-strtod-is-called-with-NU.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -From 826e80ab90bc03c4e156f3600ae8078b3c75e3ed Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Fri, 26 Jun 2015 10:35:50 +0200 -Subject: msvcrt: Set *end to NULL when strtod is called with NULL pointer - string. - ---- - dlls/msvcrt/string.c | 7 +++++-- - dlls/msvcrt/tests/string.c | 2 +- - 2 files changed, 6 insertions(+), 3 deletions(-) - -diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c -index fdeb4e0..980d492 100644 ---- a/dlls/msvcrt/string.c -+++ b/dlls/msvcrt/string.c -@@ -317,8 +317,11 @@ static double strtod_helper(const char *str, char **end, MSVCRT__locale_t locale - - if(err) - *err = 0; -- else -- if(!MSVCRT_CHECK_PMT(str != NULL)) return 0; -+ else if(!MSVCRT_CHECK_PMT(str != NULL)) { -+ if (end) -+ *end = NULL; -+ return 0; -+ } - - if(!locale) - locinfo = get_locinfo(); -diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c -index 1a3c598..83de762 100644 ---- a/dlls/msvcrt/tests/string.c -+++ b/dlls/msvcrt/tests/string.c -@@ -1694,7 +1694,7 @@ static void test__strtod(void) - d = strtod(NULL, &end); - ok(almost_equal(d, 0.0), "d = %lf\n", d); - ok(errno == EINVAL, "errno = %x\n", errno); -- todo_wine ok(!end, "incorrect end ptr %p\n", end); -+ ok(!end, "incorrect end ptr %p\n", end); - - errno = EBADF; - d = p__strtod_l(NULL, NULL, NULL); --- -2.4.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/msvcrt-atof_strtod/definition wine-staging-1.7.47~ubuntu14.10.1/patches/msvcrt-atof_strtod/definition --- wine-staging-1.7.46~ubuntu14.10.1/patches/msvcrt-atof_strtod/definition 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/msvcrt-atof_strtod/definition 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -Fixes: msvcrt.strtod should initialize *end with NULL on failure diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Coverity/0001-ntdll-Fix-incorrect-assignment-in-assert-statement-C.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Coverity/0001-ntdll-Fix-incorrect-assignment-in-assert-statement-C.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Coverity/0001-ntdll-Fix-incorrect-assignment-in-assert-statement-C.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Coverity/0001-ntdll-Fix-incorrect-assignment-in-assert-statement-C.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,25 @@ +From 4ffe94b77e7f50263d8e3ae5f3466a757f9d9d4e Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sat, 11 Jul 2015 15:28:27 +0200 +Subject: ntdll: Fix incorrect assignment in assert statement (Coverity). + +--- + dlls/ntdll/threadpool.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/dlls/ntdll/threadpool.c b/dlls/ntdll/threadpool.c +index a4e0619..23091f3 100644 +--- a/dlls/ntdll/threadpool.c ++++ b/dlls/ntdll/threadpool.c +@@ -1598,7 +1598,7 @@ static NTSTATUS tp_waitqueue_lock( struct threadpool_object *wait ) + struct waitqueue_bucket *bucket; + NTSTATUS status; + HANDLE thread; +- assert( wait->type = TP_OBJECT_TYPE_WAIT ); ++ assert( wait->type == TP_OBJECT_TYPE_WAIT ); + + wait->u.wait.signaled = 0; + wait->u.wait.bucket = NULL; +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0001-ntdll-Implement-semi-stub-for-RtlGetCompressionWorkS.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0001-ntdll-Implement-semi-stub-for-RtlGetCompressionWorkS.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0001-ntdll-Implement-semi-stub-for-RtlGetCompressionWorkS.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0001-ntdll-Implement-semi-stub-for-RtlGetCompressionWorkS.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,69 +0,0 @@ -From 8f2dbbc47749542a135c5410c94097d8b14e0a84 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Thu, 30 Oct 2014 17:19:42 +0100 -Subject: ntdll: Implement semi-stub for RtlGetCompressionWorkSpaceSize. - ---- - dlls/ntdll/rtl.c | 26 ++++++++++++++++++++------ - include/winnt.h | 6 ++++++ - 2 files changed, 26 insertions(+), 6 deletions(-) - -diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c -index 8f6f386..884a14a 100644 ---- a/dlls/ntdll/rtl.c -+++ b/dlls/ntdll/rtl.c -@@ -1215,14 +1215,28 @@ PSLIST_ENTRY WINAPI RtlInterlockedPushListSList(PSLIST_HEADER list, PSLIST_ENTRY - /****************************************************************************** - * RtlGetCompressionWorkSpaceSize [NTDLL.@] - */ --NTSTATUS WINAPI RtlGetCompressionWorkSpaceSize(USHORT CompressionFormatAndEngine, -- PULONG CompressBufferWorkSpaceSize, -- PULONG CompressFragmentWorkSpaceSize) -+NTSTATUS WINAPI RtlGetCompressionWorkSpaceSize(USHORT format, PULONG compress_workspace, -+ PULONG decompress_workspace) - { -- FIXME("0x%04x, %p, %p: stub!\n", CompressionFormatAndEngine, CompressBufferWorkSpaceSize, -- CompressFragmentWorkSpaceSize); -+ FIXME("0x%04x, %p, %p: semi-stub\n", format, compress_workspace, decompress_workspace); - -- return STATUS_NOT_IMPLEMENTED; -+ switch (format & ~COMPRESSION_ENGINE_MAXIMUM) -+ { -+ case COMPRESSION_FORMAT_LZNT1: -+ if (compress_workspace) -+ *compress_workspace = 16; /* FIXME */ -+ if (decompress_workspace) -+ *decompress_workspace = 0x1000; -+ return STATUS_SUCCESS; -+ -+ case COMPRESSION_FORMAT_NONE: -+ case COMPRESSION_FORMAT_DEFAULT: -+ return STATUS_INVALID_PARAMETER; -+ -+ default: -+ FIXME("format %d not implemented\n", format); -+ return STATUS_UNSUPPORTED_COMPRESSION; -+ } - } - - /****************************************************************************** -diff --git a/include/winnt.h b/include/winnt.h -index 709a93f..401e3ad 100644 ---- a/include/winnt.h -+++ b/include/winnt.h -@@ -4722,6 +4722,12 @@ typedef struct _QUOTA_LIMITS_EX { - #define FILE_256_BYTE_ALIGNMENT 0x000000ff - #define FILE_512_BYTE_ALIGNMENT 0x000001ff - -+#define COMPRESSION_FORMAT_NONE 0 -+#define COMPRESSION_FORMAT_DEFAULT 1 -+#define COMPRESSION_FORMAT_LZNT1 2 -+#define COMPRESSION_ENGINE_STANDARD 0 -+#define COMPRESSION_ENGINE_MAXIMUM 256 -+ - #define MAILSLOT_NO_MESSAGE ((DWORD)-1) - #define MAILSLOT_WAIT_FOREVER ((DWORD)-1) - --- -2.1.2 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0002-ntdll-Implement-semi-stub-for-RtlCompressBuffer.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0002-ntdll-Implement-semi-stub-for-RtlCompressBuffer.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0002-ntdll-Implement-semi-stub-for-RtlCompressBuffer.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0002-ntdll-Implement-semi-stub-for-RtlCompressBuffer.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,90 +0,0 @@ -From e487c879736038053aac64aa728ba35c78888e71 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Thu, 30 Oct 2014 17:24:26 +0100 -Subject: ntdll: Implement semi-stub for RtlCompressBuffer. - ---- - dlls/ntdll/rtl.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++-------- - 1 file changed, 54 insertions(+), 8 deletions(-) - -diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c -index 884a14a..b790910 100644 ---- a/dlls/ntdll/rtl.c -+++ b/dlls/ntdll/rtl.c -@@ -1239,19 +1239,65 @@ NTSTATUS WINAPI RtlGetCompressionWorkSpaceSize(USHORT format, PULONG compress_wo - } - } - -+/* compress data using LZNT1, currently only a stub */ -+static NTSTATUS lznt1_compress(UCHAR *src, ULONG src_size, UCHAR *dst, ULONG dst_size, -+ ULONG chunk_size, ULONG *final_size, UCHAR *workspace) -+{ -+ UCHAR *src_cur, *src_end, *dst_cur, *dst_end; -+ ULONG block_size; -+ -+ src_cur = src; -+ src_end = src + src_size; -+ dst_cur = dst; -+ dst_end = dst + dst_size; -+ -+ while (src_cur < src_end) -+ { -+ /* determine size of current chunk */ -+ block_size = min(0x1000, src_end - src_cur); -+ if (dst_cur + sizeof(WORD) + block_size > dst_end) -+ return STATUS_BUFFER_TOO_SMALL; -+ -+ /* write (uncompressed) chunk header */ -+ *(WORD *)dst_cur = 0x3000 | (block_size - 1); -+ dst_cur += sizeof(WORD); -+ -+ /* write chunk content */ -+ memcpy(dst_cur, src_cur, block_size); -+ dst_cur += block_size; -+ src_cur += block_size; -+ } -+ -+ if (final_size) -+ *final_size = dst_cur - dst; -+ -+ return STATUS_SUCCESS; -+} -+ - /****************************************************************************** - * RtlCompressBuffer [NTDLL.@] - */ --NTSTATUS WINAPI RtlCompressBuffer(USHORT CompressionFormatAndEngine, PUCHAR UncompressedBuffer, -- ULONG UncompressedBufferSize, PUCHAR CompressedBuffer, -- ULONG CompressedBufferSize, ULONG UncompressedChunkSize, -- PULONG FinalCompressedSize, PVOID WorkSpace) -+NTSTATUS WINAPI RtlCompressBuffer(USHORT format, PUCHAR uncompressed, ULONG uncompressed_size, -+ PUCHAR compressed, ULONG compressed_size, ULONG chunk_size, -+ PULONG final_size, PVOID workspace) - { -- FIXME("0x%04x, %p, %u, %p, %u, %u, %p, %p :stub\n", CompressionFormatAndEngine, UncompressedBuffer, -- UncompressedBufferSize, CompressedBuffer, CompressedBufferSize, UncompressedChunkSize, -- FinalCompressedSize, WorkSpace); -+ FIXME("0x%04x, %p, %u, %p, %u, %u, %p, %p :semi-stub\n", format, uncompressed, -+ uncompressed_size, compressed, compressed_size, chunk_size, final_size, workspace); - -- return STATUS_NOT_IMPLEMENTED; -+ switch (format & ~COMPRESSION_ENGINE_MAXIMUM) -+ { -+ case COMPRESSION_FORMAT_LZNT1: -+ return lznt1_compress(uncompressed, uncompressed_size, compressed, -+ compressed_size, chunk_size, final_size, workspace); -+ -+ case COMPRESSION_FORMAT_NONE: -+ case COMPRESSION_FORMAT_DEFAULT: -+ return STATUS_INVALID_PARAMETER; -+ -+ default: -+ FIXME("format %d not implemented\n", format); -+ return STATUS_UNSUPPORTED_COMPRESSION; -+ } - } - - /****************************************************************************** --- -2.1.2 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0003-ntdll-Implement-LZNT1-algorithm-for-RtlDecompressBuf.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0003-ntdll-Implement-LZNT1-algorithm-for-RtlDecompressBuf.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0003-ntdll-Implement-LZNT1-algorithm-for-RtlDecompressBuf.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0003-ntdll-Implement-LZNT1-algorithm-for-RtlDecompressBuf.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,288 +0,0 @@ -From ac70c24f5e811828739b6e8c51d1b3e26c6a5d04 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Thu, 30 Oct 2014 17:26:42 +0100 -Subject: ntdll: Implement LZNT1 algorithm for RtlDecompressBuffer. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Based on a patch by Michael Müller. ---- - dlls/ntdll/ntdll.spec | 2 +- - dlls/ntdll/rtl.c | 229 ++++++++++++++++++++++++++++++++++-- - dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +- - 3 files changed, 224 insertions(+), 9 deletions(-) - -diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec -index 7e95969..c79e942 100644 ---- a/dlls/ntdll/ntdll.spec -+++ b/dlls/ntdll/ntdll.spec -@@ -511,7 +511,7 @@ - @ stdcall RtlDecodePointer(ptr) - # @ stub RtlDecodeSystemPointer - @ stdcall RtlDecompressBuffer(long ptr long ptr long ptr) --@ stub RtlDecompressFragment -+@ stdcall RtlDecompressFragment(long ptr long ptr long long ptr ptr) - @ stub RtlDefaultNpAcl - @ stub RtlDelete - @ stdcall RtlDeleteAce(ptr long) -diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c -index b790910..c9715df 100644 ---- a/dlls/ntdll/rtl.c -+++ b/dlls/ntdll/rtl.c -@@ -1300,17 +1300,232 @@ NTSTATUS WINAPI RtlCompressBuffer(USHORT format, PUCHAR uncompressed, ULONG unco - } - } - -+/* decompress a single LZNT1 chunk */ -+static PUCHAR lznt1_decompress_chunk(UCHAR *dst, ULONG dst_size, UCHAR *src, ULONG src_size) -+{ -+ UCHAR *src_cur, *src_end, *dst_cur, *dst_end; -+ ULONG displacement_bits, length_bits; -+ ULONG code_displacement, code_length; -+ WORD flags, code; -+ -+ src_cur = src; -+ src_end = src + src_size; -+ dst_cur = dst; -+ dst_end = dst + dst_size; -+ -+ /* Partial decompression is no error on Windows. */ -+ while (src_cur < src_end && dst_cur < dst_end) -+ { -+ /* read flags header */ -+ flags = 0x8000 | *src_cur++; -+ -+ /* parse following 8 entities, either uncompressed data or backwards reference */ -+ while ((flags & 0xFF00) && src_cur < src_end) -+ { -+ if (flags & 1) -+ { -+ /* backwards reference */ -+ if (src_cur + sizeof(WORD) > src_end) -+ return NULL; -+ code = *(WORD *)src_cur; -+ src_cur += sizeof(WORD); -+ -+ /* find length / displacement bits */ -+ for (displacement_bits = 12; displacement_bits > 4; displacement_bits--) -+ if ((1 << (displacement_bits - 1)) < dst_cur - dst) break; -+ length_bits = 16 - displacement_bits; -+ code_length = (code & ((1 << length_bits) - 1)) + 3; -+ code_displacement = (code >> length_bits) + 1; -+ -+ /* ensure reference is valid */ -+ if (dst_cur < dst + code_displacement) -+ return NULL; -+ -+ /* copy bytes of chunk - we can't use memcpy() -+ * since source and dest can be overlapping */ -+ while (code_length--) -+ { -+ if (dst_cur >= dst_end) return dst_cur; -+ *dst_cur = *(dst_cur - code_displacement); -+ dst_cur++; -+ } -+ } -+ else -+ { -+ /* uncompressed data */ -+ if (dst_cur >= dst_end) return dst_cur; -+ *dst_cur++ = *src_cur++; -+ } -+ flags >>= 1; -+ } -+ -+ } -+ -+ return dst_cur; -+} -+ -+/* decompress data encoded with LZNT1 */ -+static NTSTATUS lznt1_decompress(UCHAR *dst, ULONG dst_size, UCHAR *src, ULONG src_size, -+ ULONG offset, ULONG *final_size, UCHAR *workspace) -+{ -+ UCHAR *src_cur, *src_end, *dst_cur, *dst_end, *ptr; -+ ULONG chunk_size, block_size; -+ WORD chunk_header; -+ -+ src_cur = src; -+ src_end = src + src_size; -+ dst_cur = dst; -+ dst_end = dst + dst_size; -+ -+ if (src_cur + sizeof(WCHAR) > src_end) -+ return STATUS_BAD_COMPRESSION_BUFFER; -+ -+ /* skip over chunks which have a big distance (>= 0x1000) to the destination offset */ -+ while (offset >= 0x1000 && src_cur + sizeof(WCHAR) <= src_end) -+ { -+ /* read chunk header and extract size */ -+ chunk_header = *(WORD *)src_cur; -+ src_cur += sizeof(WCHAR); -+ if (!chunk_header) goto out; -+ chunk_size = (chunk_header & 0xFFF) + 1; -+ -+ /* ensure we have enough buffer to process chunk */ -+ if (src_cur + chunk_size > src_end) -+ return STATUS_BAD_COMPRESSION_BUFFER; -+ -+ src_cur += chunk_size; -+ offset -= 0x1000; -+ } -+ -+ /* this chunk is can be included partially */ -+ if (offset && src_cur + sizeof(WCHAR) <= src_end) -+ { -+ /* read chunk header and extract size */ -+ chunk_header = *(WORD *)src_cur; -+ src_cur += sizeof(WCHAR); -+ if (!chunk_header) goto out; -+ chunk_size = (chunk_header & 0xFFF) + 1; -+ -+ /* ensure we have enough buffer to process chunk */ -+ if (src_cur + chunk_size > src_end) -+ return STATUS_BAD_COMPRESSION_BUFFER; -+ -+ if (dst_cur >= dst_end) -+ goto out; -+ -+ if (chunk_header & 0x8000) -+ { -+ /* compressed chunk */ -+ if (!workspace) return STATUS_ACCESS_VIOLATION; -+ ptr = lznt1_decompress_chunk(workspace, 0x1000, src_cur, chunk_size); -+ if (!ptr) return STATUS_BAD_COMPRESSION_BUFFER; -+ if (ptr - workspace > offset) -+ { -+ block_size = min((ptr - workspace) - offset, dst_end - dst_cur); -+ memcpy(dst_cur, workspace + offset, block_size); -+ dst_cur += block_size; -+ } -+ } -+ else -+ { -+ /* uncompressed chunk */ -+ if (chunk_size > offset) -+ { -+ block_size = min(chunk_size - offset, dst_end - dst_cur); -+ memcpy(dst_cur, src_cur + offset, block_size); -+ dst_cur += block_size; -+ } -+ } -+ -+ src_cur += chunk_size; -+ } -+ -+ while (src_cur + sizeof(WCHAR) <= src_end) -+ { -+ /* read chunk header and extract size */ -+ chunk_header = *(WORD *)src_cur; -+ src_cur += sizeof(WCHAR); -+ if (!chunk_header) goto out; -+ chunk_size = (chunk_header & 0xFFF) + 1; -+ -+ /* ensure we have enough buffer to process chunk */ -+ if (src_cur + chunk_size > src_end) -+ return STATUS_BAD_COMPRESSION_BUFFER; -+ -+ /* add padding if required */ -+ block_size = ((dst_cur - dst) + offset) & 0xFFF; -+ if (block_size) -+ { -+ block_size = 0x1000 - block_size; -+ if (dst_cur + block_size >= dst_end) -+ goto out; -+ memset(dst_cur, 0, block_size); -+ dst_cur += block_size; -+ } -+ else if (dst_cur >= dst_end) -+ goto out; -+ -+ if (chunk_header & 0x8000) -+ { -+ /* compressed chunk */ -+ dst_cur = lznt1_decompress_chunk(dst_cur, dst_end - dst_cur, src_cur, chunk_size); -+ if (!dst_cur) return STATUS_BAD_COMPRESSION_BUFFER; -+ } -+ else -+ { -+ /* uncompressed chunk */ -+ block_size = min(chunk_size, dst_end - dst_cur); -+ memcpy(dst_cur, src_cur, block_size); -+ dst_cur += block_size; -+ } -+ -+ src_cur += chunk_size; -+ } -+ -+out: -+ if (final_size) -+ *final_size = dst_cur - dst; -+ -+ return STATUS_SUCCESS; -+ -+} -+ - /****************************************************************************** -- * RtlDecompressBuffer [NTDLL.@] -+ * RtlDecompressFragment [NTDLL.@] - */ --NTSTATUS WINAPI RtlDecompressBuffer(USHORT CompressionFormat, PUCHAR UncompressedBuffer, -- ULONG UncompressedBufferSize, PUCHAR CompressedBuffer, -- ULONG CompressedBufferSize, PULONG FinalUncompressedSize) -+NTSTATUS RtlDecompressFragment(USHORT format, PUCHAR uncompressed, ULONG uncompressed_size, -+ PUCHAR compressed, ULONG compressed_size, ULONG offset, -+ PULONG final_size, PVOID workspace) - { -- FIXME("0x%04x, %p, %u, %p, %u, %p :stub\n", CompressionFormat, UncompressedBuffer, UncompressedBufferSize, -- CompressedBuffer, CompressedBufferSize, FinalUncompressedSize); - -- return STATUS_NOT_IMPLEMENTED; -+ TRACE("0x%04x, %p, %u, %p, %u, %u, %p, %p :stub\n", format, uncompressed, -+ uncompressed_size, compressed, compressed_size, offset, final_size, workspace); -+ -+ switch (format & ~COMPRESSION_ENGINE_MAXIMUM) -+ { -+ case COMPRESSION_FORMAT_LZNT1: -+ return lznt1_decompress(uncompressed, uncompressed_size, compressed, -+ compressed_size, offset, final_size, workspace); -+ -+ case COMPRESSION_FORMAT_NONE: -+ case COMPRESSION_FORMAT_DEFAULT: -+ return STATUS_INVALID_PARAMETER; -+ -+ default: -+ FIXME("format %d not implemented\n", format); -+ return STATUS_UNSUPPORTED_COMPRESSION; -+ } -+} -+ -+ -+/****************************************************************************** -+ * RtlDecompressBuffer [NTDLL.@] -+ */ -+NTSTATUS WINAPI RtlDecompressBuffer(USHORT format, PUCHAR uncompressed, ULONG uncompressed_size, -+ PUCHAR compressed, ULONG compressed_size, PULONG final_size) -+{ -+ return RtlDecompressFragment(format, uncompressed, uncompressed_size, -+ compressed, compressed_size, 0, final_size, NULL); - } - - /*********************************************************************** -diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec -index 4ead907..bfc3c59 100644 ---- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec -+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec -@@ -977,7 +977,7 @@ - @ stub RtlCustomCPToUnicodeN - @ stdcall RtlDecompressBuffer(long ptr long ptr long ptr) ntdll.RtlDecompressBuffer - @ stub RtlDecompressChunks --@ stub RtlDecompressFragment -+@ stdcall RtlDecompressFragment(long ptr long ptr long long ptr ptr) ntdll.RtlDecompressFragment - @ stub RtlDelete - @ stdcall RtlDeleteAce(ptr long) ntdll.RtlDeleteAce - @ stdcall RtlDeleteAtomFromAtomTable(ptr long) ntdll.RtlDeleteAtomFromAtomTable --- -2.1.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0004-ntdll-tests-Add-tests-for-Rtl-Decompress-Compress-Bu.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0004-ntdll-tests-Add-tests-for-Rtl-Decompress-Compress-Bu.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0004-ntdll-tests-Add-tests-for-Rtl-Decompress-Compress-Bu.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0004-ntdll-tests-Add-tests-for-Rtl-Decompress-Compress-Bu.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,783 +0,0 @@ -From ec029295815e271cfaf193997cdde3cf53df4a3b Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Thu, 30 Oct 2014 17:41:11 +0100 -Subject: ntdll/tests: Add tests for Rtl[Decompress|Compress]Buffer and - RtlGetCompressionWorkSpaceSize. - ---- - dlls/ntdll/tests/rtl.c | 740 +++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 740 insertions(+) - -diff --git a/dlls/ntdll/tests/rtl.c b/dlls/ntdll/tests/rtl.c -index e8eb04a..2f6c421 100644 ---- a/dlls/ntdll/tests/rtl.c -+++ b/dlls/ntdll/tests/rtl.c -@@ -92,6 +92,10 @@ static NTSTATUS (WINAPI *pRtlIpv4StringToAddressA)(PCSTR, BOOLEAN, PCSTR *, IN_ - static NTSTATUS (WINAPI *pLdrAddRefDll)(ULONG, HMODULE); - static NTSTATUS (WINAPI *pLdrLockLoaderLock)(ULONG, ULONG*, ULONG_PTR*); - static NTSTATUS (WINAPI *pLdrUnlockLoaderLock)(ULONG, ULONG_PTR); -+static NTSTATUS (WINAPI *pRtlGetCompressionWorkSpaceSize)(USHORT, PULONG, PULONG); -+static NTSTATUS (WINAPI *pRtlDecompressBuffer)(USHORT, PUCHAR, ULONG, const UCHAR*, ULONG, PULONG); -+static NTSTATUS (WINAPI *pRtlDecompressFragment)(USHORT, PUCHAR, ULONG, const UCHAR*, ULONG, ULONG, PULONG, PVOID); -+static NTSTATUS (WINAPI *pRtlCompressBuffer)(USHORT, const UCHAR*, ULONG, PUCHAR, ULONG, ULONG, PULONG, PVOID); - - static HMODULE hkernel32 = 0; - static BOOL (WINAPI *pIsWow64Process)(HANDLE, PBOOL); -@@ -139,6 +143,10 @@ static void InitFunctionPtrs(void) - pLdrAddRefDll = (void *)GetProcAddress(hntdll, "LdrAddRefDll"); - pLdrLockLoaderLock = (void *)GetProcAddress(hntdll, "LdrLockLoaderLock"); - pLdrUnlockLoaderLock = (void *)GetProcAddress(hntdll, "LdrUnlockLoaderLock"); -+ pRtlGetCompressionWorkSpaceSize = (void *)GetProcAddress(hntdll, "RtlGetCompressionWorkSpaceSize"); -+ pRtlDecompressBuffer = (void *)GetProcAddress(hntdll, "RtlDecompressBuffer"); -+ pRtlDecompressFragment = (void *)GetProcAddress(hntdll, "RtlDecompressFragment"); -+ pRtlCompressBuffer = (void *)GetProcAddress(hntdll, "RtlCompressBuffer"); - } - hkernel32 = LoadLibraryA("kernel32.dll"); - ok(hkernel32 != 0, "LoadLibrary failed\n"); -@@ -1599,6 +1607,735 @@ static void test_LdrLockLoaderLock(void) - pLdrUnlockLoaderLock(0, magic); - } - -+static void test_RtlGetCompressionWorkSpaceSize(void) -+{ -+ ULONG compress_workspace, decompress_workspace; -+ NTSTATUS status; -+ -+ if (!pRtlGetCompressionWorkSpaceSize) -+ { -+ win_skip("RtlGetCompressionWorkSpaceSize is not available\n"); -+ return; -+ } -+ -+ status = pRtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_NONE, &compress_workspace, -+ &decompress_workspace); -+ ok(status == STATUS_INVALID_PARAMETER, "got wrong status 0x%08x\n", status); -+ -+ status = pRtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_DEFAULT, &compress_workspace, -+ &decompress_workspace); -+ ok(status == STATUS_INVALID_PARAMETER, "got wrong status 0x%08x\n", status); -+ -+ status = pRtlGetCompressionWorkSpaceSize(0xFF, &compress_workspace, &decompress_workspace); -+ ok(status == STATUS_UNSUPPORTED_COMPRESSION, "got wrong status 0x%08x\n", status); -+ -+ compress_workspace = decompress_workspace = 0xdeadbeef; -+ status = pRtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_LZNT1, &compress_workspace, -+ &decompress_workspace); -+ ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); -+ ok(compress_workspace != 0, "got wrong compress_workspace %d\n", compress_workspace); -+ ok(decompress_workspace == 0x1000, "got wrong decompress_workspace %d\n", decompress_workspace); -+ -+ compress_workspace = decompress_workspace = 0xdeadbeef; -+ status = pRtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_MAXIMUM, -+ &compress_workspace, &decompress_workspace); -+ ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); -+ ok(compress_workspace != 0, "got wrong compress_workspace %d\n", compress_workspace); -+ ok(decompress_workspace == 0x1000, "got wrong decompress_workspace %d\n", decompress_workspace); -+} -+ -+/* helper for test_RtlDecompressBuffer, checks if a chunk is incomplete */ -+static BOOL is_incomplete_chunk(const UCHAR *compressed, ULONG compressed_size, BOOL check_all) -+{ -+ ULONG chunk_size; -+ if (compressed_size <= sizeof(WORD)) -+ return TRUE; -+ while (compressed_size >= sizeof(WORD)) -+ { -+ chunk_size = (*(WORD *)compressed & 0xFFF) + 1; -+ if (compressed_size < sizeof(WORD) + chunk_size) -+ return TRUE; -+ if (!check_all) -+ break; -+ compressed += sizeof(WORD) + chunk_size; -+ compressed_size -= sizeof(WORD) + chunk_size; -+ } -+ return FALSE; -+} -+ -+#define DECOMPRESS_BROKEN_TRUNCATED 1 -+#define DECOMPRESS_BROKEN_FRAGMENT0 2 -+#define DECOMPRESS_BROKEN_FRAGMENT1 4 -+#define DECOMPRESS_BROKEN_FRAGMENT4095 8 -+ -+static void test_RtlDecompressBuffer(void) -+{ -+ static const UCHAR test_multiple_chunks[] = {0x03, 0x30, 'W', 'i', 'n', 'e', -+ 0x03, 0x30, 'W', 'i', 'n', 'e'}; -+ static const struct -+ { -+ UCHAR compressed[32]; -+ ULONG compressed_size; -+ NTSTATUS status; -+ UCHAR uncompressed[32]; -+ ULONG uncompressed_size; -+ DWORD broken_flags; -+ } -+ test_lznt[] = -+ { -+ /* 4 byte uncompressed chunk */ -+ { -+ {0x03, 0x30, 'W', 'i', 'n', 'e'}, -+ 6, -+ STATUS_SUCCESS, -+ "Wine", -+ 4, -+ DECOMPRESS_BROKEN_FRAGMENT4095 | -+ DECOMPRESS_BROKEN_FRAGMENT1 | -+ DECOMPRESS_BROKEN_FRAGMENT0 -+ }, -+ /* 8 byte uncompressed chunk */ -+ { -+ {0x07, 0x30, 'W', 'i', 'n', 'e', 'W', 'i', 'n', 'e'}, -+ 10, -+ STATUS_SUCCESS, -+ "WineWine", -+ 8, -+ DECOMPRESS_BROKEN_FRAGMENT4095 | -+ DECOMPRESS_BROKEN_FRAGMENT1 | -+ DECOMPRESS_BROKEN_FRAGMENT0 -+ }, -+ /* 4 byte compressed chunk */ -+ { -+ {0x04, 0xB0, 0x00, 'W', 'i', 'n', 'e'}, -+ 7, -+ STATUS_SUCCESS, -+ "Wine", -+ 4 -+ }, -+ /* 8 byte compressed chunk */ -+ { -+ {0x08, 0xB0, 0x00, 'W', 'i', 'n', 'e', 'W', 'i', 'n', 'e'}, -+ 11, -+ STATUS_SUCCESS, -+ "WineWine", -+ 8 -+ }, -+ /* compressed chunk using backwards reference */ -+ { -+ {0x06, 0xB0, 0x10, 'W', 'i', 'n', 'e', 0x01, 0x30}, -+ 9, -+ STATUS_SUCCESS, -+ "WineWine", -+ 8, -+ DECOMPRESS_BROKEN_TRUNCATED -+ }, -+ /* compressed chunk using backwards reference with length > bytes_read */ -+ { -+ {0x06, 0xB0, 0x10, 'W', 'i', 'n', 'e', 0x05, 0x30}, -+ 9, -+ STATUS_SUCCESS, -+ "WineWineWine", -+ 12, -+ DECOMPRESS_BROKEN_TRUNCATED -+ }, -+ /* same as above, but unused bits != 0 */ -+ { -+ {0x06, 0xB0, 0x30, 'W', 'i', 'n', 'e', 0x01, 0x30}, -+ 9, -+ STATUS_SUCCESS, -+ "WineWine", -+ 8, -+ DECOMPRESS_BROKEN_TRUNCATED -+ }, -+ /* compressed chunk without backwards reference and unused bits != 0 */ -+ { -+ {0x01, 0xB0, 0x02, 'W'}, -+ 4, -+ STATUS_SUCCESS, -+ "W", -+ 1 -+ }, -+ /* termination sequence after first chunk */ -+ { -+ {0x03, 0x30, 'W', 'i', 'n', 'e', 0x00, 0x00, 0x03, 0x30, 'W', 'i', 'n', 'e'}, -+ 14, -+ STATUS_SUCCESS, -+ "Wine", -+ 4, -+ DECOMPRESS_BROKEN_FRAGMENT4095 | -+ DECOMPRESS_BROKEN_FRAGMENT1 | -+ DECOMPRESS_BROKEN_FRAGMENT0 -+ }, -+ /* compressed chunk using backwards reference with 4 bit offset, 12 bit length */ -+ { -+ {0x14, 0xB0, 0x00, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', -+ 0x00, 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', -+ 0x01, 0x01, 0xF0}, -+ 23, -+ STATUS_SUCCESS, -+ "ABCDEFGHIJKLMNOPABCD", -+ 20, -+ DECOMPRESS_BROKEN_TRUNCATED -+ }, -+ /* compressed chunk using backwards reference with 5 bit offset, 11 bit length */ -+ { -+ {0x15, 0xB0, 0x00, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', -+ 0x00, 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', -+ 0x02, 'A', 0x00, 0x78}, -+ 24, -+ STATUS_SUCCESS, -+ "ABCDEFGHIJKLMNOPABCD", -+ 20, -+ DECOMPRESS_BROKEN_TRUNCATED -+ }, -+ /* uncompressed chunk with invalid magic */ -+ { -+ {0x03, 0x20, 'W', 'i', 'n', 'e'}, -+ 6, -+ STATUS_SUCCESS, -+ "Wine", -+ 4, -+ DECOMPRESS_BROKEN_FRAGMENT4095 | -+ DECOMPRESS_BROKEN_FRAGMENT1 | -+ DECOMPRESS_BROKEN_FRAGMENT0 -+ }, -+ /* compressed chunk with invalid magic */ -+ { -+ {0x04, 0xA0, 0x00, 'W', 'i', 'n', 'e'}, -+ 7, -+ STATUS_SUCCESS, -+ "Wine", -+ 4 -+ }, -+ /* garbage byte after end of buffer */ -+ { -+ {0x00, 0xB0, 0x02, 0x01}, -+ 4, -+ STATUS_SUCCESS, -+ "", -+ 0 -+ }, -+ /* empty compressed chunk */ -+ { -+ {0x00, 0xB0, 0x00}, -+ 3, -+ STATUS_SUCCESS, -+ "", -+ 0 -+ }, -+ /* empty compressed chunk with unused bits != 0 */ -+ { -+ {0x00, 0xB0, 0x01}, -+ 3, -+ STATUS_SUCCESS, -+ "", -+ 0 -+ }, -+ /* empty input buffer */ -+ { -+ {}, -+ 0, -+ STATUS_BAD_COMPRESSION_BUFFER, -+ }, -+ /* incomplete chunk header */ -+ { -+ {0x01}, -+ 1, -+ STATUS_BAD_COMPRESSION_BUFFER -+ }, -+ /* incomplete chunk header */ -+ { -+ {0x00, 0x30}, -+ 2, -+ STATUS_BAD_COMPRESSION_BUFFER -+ }, -+ /* compressed chunk with invalid backwards reference */ -+ { -+ {0x06, 0xB0, 0x10, 'W', 'i', 'n', 'e', 0x05, 0x40}, -+ 9, -+ STATUS_BAD_COMPRESSION_BUFFER -+ }, -+ /* compressed chunk with incomplete backwards reference */ -+ { -+ {0x05, 0xB0, 0x10, 'W', 'i', 'n', 'e', 0x05}, -+ 8, -+ STATUS_BAD_COMPRESSION_BUFFER -+ }, -+ /* incomplete uncompressed chunk */ -+ { -+ {0x07, 0x30, 'W', 'i', 'n', 'e'}, -+ 6, -+ STATUS_BAD_COMPRESSION_BUFFER -+ }, -+ /* incomplete compressed chunk */ -+ { -+ {0x08, 0xB0, 0x00, 'W', 'i', 'n', 'e'}, -+ 7, -+ STATUS_BAD_COMPRESSION_BUFFER -+ }, -+ /* two compressed chunks, the second one incomplete */ -+ { -+ {0x00, 0xB0, 0x02, 0x00, 0xB0}, -+ 5, -+ STATUS_BAD_COMPRESSION_BUFFER, -+ } -+ }; -+ -+ static UCHAR buf[0x2000], workspace[0x1000]; -+ NTSTATUS status, expected_status; -+ ULONG final_size; -+ int i; -+ -+ if (!pRtlDecompressBuffer || !pRtlDecompressFragment) -+ { -+ win_skip("RtlDecompressBuffer or RtlDecompressFragment is not available\n"); -+ return; -+ } -+ -+ /* test compression format / engine */ -+ final_size = 0xdeadbeef; -+ status = pRtlDecompressBuffer(COMPRESSION_FORMAT_NONE, buf, sizeof(buf) - 1, test_lznt[0].compressed, -+ test_lznt[0].compressed_size, &final_size); -+ ok(status == STATUS_INVALID_PARAMETER, "got wrong status 0x%08x\n", status); -+ ok(final_size == 0xdeadbeef, "got wrong final_size %d\n", final_size); -+ -+ final_size = 0xdeadbeef; -+ status = pRtlDecompressBuffer(COMPRESSION_FORMAT_DEFAULT, buf, sizeof(buf) - 1, test_lznt[0].compressed, -+ test_lznt[0].compressed_size, &final_size); -+ ok(status == STATUS_INVALID_PARAMETER, "got wrong status 0x%08x\n", status); -+ ok(final_size == 0xdeadbeef, "got wrong final_size %d\n", final_size); -+ -+ final_size = 0xdeadbeef; -+ status = pRtlDecompressBuffer(0xFF, buf, sizeof(buf) - 1, test_lznt[0].compressed, -+ test_lznt[0].compressed_size, &final_size); -+ ok(status == STATUS_UNSUPPORTED_COMPRESSION, "got wrong status 0x%08x\n", status); -+ ok(final_size == 0xdeadbeef, "got wrong final_size %d\n", final_size); -+ -+ /* regular tests for RtlDecompressBuffer */ -+ for (i = 0; i < sizeof(test_lznt) / sizeof(test_lznt[0]); i++) -+ { -+ trace("Running test %d (compressed_size=%d, compressed_size=%d, status=%d)\n", -+ i, test_lznt[i].compressed_size, test_lznt[i].compressed_size, test_lznt[i].status); -+ -+ /* test with very big buffer */ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_lznt[i].compressed, -+ test_lznt[i].compressed_size, &final_size); -+ ok(status == test_lznt[i].status, "%d: got wrong status 0x%08x\n", i, status); -+ if (!status) -+ { -+ ok(final_size == test_lznt[i].uncompressed_size, -+ "%d: got wrong final_size %d\n", i, final_size); -+ ok(!memcmp(buf, test_lznt[i].uncompressed, test_lznt[i].uncompressed_size), -+ "%d: got wrong decoded data\n", i); -+ ok(buf[test_lznt[i].uncompressed_size] == 0x11, -+ "%d: buf[%d] overwritten\n", i, test_lznt[i].uncompressed_size); -+ } -+ -+ /* test that modifier for compression engine is ignored */ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_MAXIMUM, buf, sizeof(buf), -+ test_lznt[i].compressed, test_lznt[i].compressed_size, &final_size); -+ ok(status == test_lznt[i].status, "%d: got wrong status 0x%08x\n", i, status); -+ if (!status) -+ { -+ ok(final_size == test_lznt[i].uncompressed_size, -+ "%d: got wrong final_size %d\n", i, final_size); -+ ok(!memcmp(buf, test_lznt[i].uncompressed, test_lznt[i].uncompressed_size), -+ "%d: got wrong decoded data\n", i); -+ ok(buf[test_lznt[i].uncompressed_size] == 0x11, -+ "%d: buf[%d] overwritten\n", i, test_lznt[i].uncompressed_size); -+ } -+ -+ /* test with expected output size */ -+ if (test_lznt[i].uncompressed_size > 0) -+ { -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, test_lznt[i].uncompressed_size, -+ test_lznt[i].compressed, test_lznt[i].compressed_size, &final_size); -+ ok(status == test_lznt[i].status, "%d: got wrong status 0x%08x\n", i, status); -+ if (!status) -+ { -+ ok(final_size == test_lznt[i].uncompressed_size, -+ "%d: got wrong final_size %d\n", i, final_size); -+ ok(!memcmp(buf, test_lznt[i].uncompressed, test_lznt[i].uncompressed_size), -+ "%d: got wrong decoded data\n", i); -+ ok(buf[test_lznt[i].uncompressed_size] == 0x11, -+ "%d: buf[%d] overwritten\n", i, test_lznt[i].uncompressed_size); -+ } -+ } -+ -+ /* test with smaller output size */ -+ if (test_lznt[i].uncompressed_size > 1) -+ { -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, test_lznt[i].uncompressed_size - 1, -+ test_lznt[i].compressed, test_lznt[i].compressed_size, &final_size); -+ ok(status == test_lznt[i].status || broken(status == STATUS_BAD_COMPRESSION_BUFFER && -+ (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_TRUNCATED)), "%d: got wrong status 0x%08x\n", i, status); -+ if (!status) -+ { -+ ok(final_size == test_lznt[i].uncompressed_size - 1, -+ "%d: got wrong final_size %d\n", i, final_size); -+ ok(!memcmp(buf, test_lznt[i].uncompressed, test_lznt[i].uncompressed_size - 1), -+ "%d: got wrong decoded data\n", i); -+ ok(buf[test_lznt[i].uncompressed_size - 1] == 0x11, -+ "%d: buf[%d] overwritten\n", i, test_lznt[i].uncompressed_size - 1); -+ } -+ } -+ -+ /* test with zero output size */ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, 0, test_lznt[i].compressed, -+ test_lznt[i].compressed_size, &final_size); -+ if (is_incomplete_chunk(test_lznt[i].compressed, test_lznt[i].compressed_size, FALSE)) -+ { -+ ok(status == STATUS_BAD_COMPRESSION_BUFFER, "%d: got wrong status 0x%08x\n", i, status); -+ } -+ else -+ { -+ ok(status == STATUS_SUCCESS, "%d: got wrong status 0x%08x\n", i, status); -+ ok(final_size == 0, "%d: got wrong final_size %d\n", i, final_size); -+ ok(buf[0] == 0x11, "%d: buf[%d] overwritten\n", i, test_lznt[i].uncompressed_size); -+ } -+ -+ /* test RtlDecompressBuffer with offset = 0 */ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_lznt[i].compressed, -+ test_lznt[i].compressed_size, 0, &final_size, workspace); -+ ok(status == test_lznt[i].status || broken(status == STATUS_BAD_COMPRESSION_BUFFER && -+ (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_FRAGMENT0)), "%d: got wrong status 0x%08x\n", i, status); -+ if (!status) -+ { -+ ok(final_size == test_lznt[i].uncompressed_size, -+ "%d: got wrong final_size %d\n", i, final_size); -+ ok(!memcmp(buf, test_lznt[i].uncompressed, test_lznt[i].uncompressed_size), -+ "%d: got wrong decoded data\n", i); -+ ok(buf[test_lznt[i].uncompressed_size] == 0x11, -+ "%d: buf[%d] overwritten\n", i, test_lznt[i].uncompressed_size); -+ } -+ -+ /* test RtlDecompressBuffer with offset = 1 */ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_lznt[i].compressed, -+ test_lznt[i].compressed_size, 1, &final_size, workspace); -+ ok(status == test_lznt[i].status || broken(status == STATUS_BAD_COMPRESSION_BUFFER && -+ (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_FRAGMENT1)), "%d: got wrong status 0x%08x\n", i, status); -+ if (!status) -+ { -+ if (test_lznt[i].uncompressed_size == 0) -+ { -+ todo_wine -+ ok(final_size == 4095, -+ "%d: got wrong final size %d\n", i, final_size); -+ /* Buffer doesn't contain any useful value on Windows */ -+ ok(buf[4095] == 0x11, -+ "%d: buf[4095] overwritten\n", i); -+ } -+ else -+ { -+ ok(final_size == test_lznt[i].uncompressed_size - 1, -+ "%d: got wrong final_size %d\n", i, final_size); -+ ok(!memcmp(buf, test_lznt[i].uncompressed + 1, test_lznt[i].uncompressed_size - 1), -+ "%d: got wrong decoded data\n", i); -+ ok(buf[test_lznt[i].uncompressed_size - 1] == 0x11, -+ "%d: buf[%d] overwritten\n", i, test_lznt[i].uncompressed_size - 1); -+ } -+ } -+ -+ /* test RtlDecompressBuffer with offset = 4095 */ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_lznt[i].compressed, -+ test_lznt[i].compressed_size, 4095, &final_size, workspace); -+ ok(status == test_lznt[i].status || broken(status == STATUS_BAD_COMPRESSION_BUFFER && -+ (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_FRAGMENT4095)), "%d: got wrong status 0x%08x\n", i, status); -+ if (!status) -+ { -+ todo_wine -+ ok(final_size == 1, -+ "%d: got wrong final size %d\n", i, final_size); -+ todo_wine -+ ok(buf[0] == 0, -+ "%d: padding is not zero\n", i); -+ ok(buf[1] == 0x11, -+ "%d: buf[1] overwritten\n", i); -+ } -+ -+ /* test RtlDecompressBuffer with offset = 4096 */ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_lznt[i].compressed, -+ test_lznt[i].compressed_size, 4096, &final_size, workspace); -+ expected_status = is_incomplete_chunk(test_lznt[i].compressed, test_lznt[i].compressed_size, TRUE) ? -+ test_lznt[i].status : STATUS_SUCCESS; -+ ok(status == expected_status, "%d: got wrong status 0x%08x, expected 0x%08x\n", i, status, expected_status); -+ if (!status) -+ { -+ ok(final_size == 0, -+ "%d: got wrong final size %d\n", i, final_size); -+ ok(buf[0] == 0x11, -+ "%d: buf[4096] overwritten\n", i); -+ } -+ } -+ -+ /* test decoding of multiple chunks with pRtlDecompressBuffer */ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_multiple_chunks, -+ sizeof(test_multiple_chunks), &final_size); -+ ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); -+ if (!status) -+ { -+ ok(final_size == 4100, "got wrong final_size %d\n", final_size); -+ ok(!memcmp(buf, "Wine", 4), "got wrong decoded data at offset 0\n"); -+ ok(buf[4] == 0 && buf[4095] == 0, "padding is not zero\n"); -+ ok(!memcmp(buf + 4096, "Wine", 4), "got wrong decoded data at offset 4096\n"); -+ ok(buf[4100] == 0x11, "buf[4100] overwritten\n"); -+ } -+ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, 4097, test_multiple_chunks, -+ sizeof(test_multiple_chunks), &final_size); -+ ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); -+ if (!status) -+ { -+ ok(final_size == 4097, "got wrong final_size %d\n", final_size); -+ ok(!memcmp(buf, "Wine", 4), "got wrong decoded data at offset 0\n"); -+ ok(buf[4] == 0 && buf[4095] == 0, "padding is not zero\n"); -+ ok(buf[4096], "got wrong decoded data at offset 4096\n"); -+ ok(buf[4097] == 0x11, "buf[4097] overwritten\n"); -+ } -+ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, 4096, test_multiple_chunks, -+ sizeof(test_multiple_chunks), &final_size); -+ ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); -+ if (!status) -+ { -+ ok(final_size == 4, "got wrong final_size %d\n", final_size); -+ ok(!memcmp(buf, "Wine", 4), "got wrong decoded data at offset 0\n"); -+ ok(buf[4] == 0x11, "buf[4] overwritten\n"); -+ } -+ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, 4, test_multiple_chunks, -+ sizeof(test_multiple_chunks), &final_size); -+ ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); -+ if (!status) -+ { -+ ok(final_size == 4, "got wrong final_size %d\n", final_size); -+ ok(!memcmp(buf, "Wine", 4), "got wrong decoded data at offset 0\n"); -+ ok(buf[4] == 0x11, "buf[4] overwritten\n"); -+ } -+ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, 3, test_multiple_chunks, -+ sizeof(test_multiple_chunks), &final_size); -+ ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); -+ if (!status) -+ { -+ ok(final_size == 3, "got wrong final_size %d\n", final_size); -+ ok(!memcmp(buf, "Wine", 3), "got wrong decoded data at offset 0\n"); -+ ok(buf[3] == 0x11, "buf[3] overwritten\n"); -+ } -+ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, 0, test_multiple_chunks, -+ sizeof(test_multiple_chunks), &final_size); -+ ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); -+ if (!status) -+ { -+ ok(final_size == 0, "got wrong final_size %d\n", final_size); -+ ok(buf[0] == 0x11, "buf[0] overwritten\n"); -+ } -+ -+ /* test multiple chunks in combination with RtlDecompressBuffer and offset=1 */ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_multiple_chunks, -+ sizeof(test_multiple_chunks), 1, &final_size, workspace); -+ ok(status == STATUS_SUCCESS || broken(status == STATUS_BAD_COMPRESSION_BUFFER), -+ "got wrong status 0x%08x\n", status); -+ if (!status) -+ { -+ ok(final_size == 4099, "got wrong final_size %d\n", final_size); -+ ok(!memcmp(buf, "ine", 3), "got wrong decoded data at offset 0\n"); -+ ok(buf[3] == 0 && buf[4094] == 0, "padding is not zero\n"); -+ ok(!memcmp(buf + 4095, "Wine", 4), "got wrong decoded data at offset 4095\n"); -+ ok(buf[4099] == 0x11, "buf[4099] overwritten\n"); -+ } -+ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, 4096, test_multiple_chunks, -+ sizeof(test_multiple_chunks), 1, &final_size, workspace); -+ ok(status == STATUS_SUCCESS || broken(status == STATUS_BAD_COMPRESSION_BUFFER), -+ "got wrong status 0x%08x\n", status); -+ if (!status) -+ { -+ ok(final_size == 4096, "got wrong final_size %d\n", final_size); -+ ok(!memcmp(buf, "ine", 3), "got wrong decoded data at offset 0\n"); -+ ok(buf[3] == 0 && buf[4094] == 0, "padding is not zero\n"); -+ ok(buf[4095] == 'W', "got wrong decoded data at offset 4095\n"); -+ ok(buf[4096] == 0x11, "buf[4096] overwritten\n"); -+ } -+ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, 4095, test_multiple_chunks, -+ sizeof(test_multiple_chunks), 1, &final_size, workspace); -+ ok(status == STATUS_SUCCESS || broken(status == STATUS_BAD_COMPRESSION_BUFFER), -+ "got wrong status 0x%08x\n", status); -+ if (!status) -+ { -+ ok(final_size == 3, "got wrong final_size %d\n", final_size); -+ ok(!memcmp(buf, "ine", 3), "got wrong decoded data at offset 0\n"); -+ ok(buf[4] == 0x11, "buf[4] overwritten\n"); -+ } -+ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, 3, test_multiple_chunks, -+ sizeof(test_multiple_chunks), 1, &final_size, workspace); -+ ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); -+ if (!status) -+ { -+ ok(final_size == 3, "got wrong final_size %d\n", final_size); -+ ok(!memcmp(buf, "ine", 3), "got wrong decoded data at offset 0\n"); -+ ok(buf[3] == 0x11, "buf[3] overwritten\n"); -+ } -+ -+ /* test multiple chunks in combination with RtlDecompressBuffer and offset=4 */ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_multiple_chunks, -+ sizeof(test_multiple_chunks), 4, &final_size, workspace); -+ ok(status == STATUS_SUCCESS || broken(status == STATUS_BAD_COMPRESSION_BUFFER), -+ "got wrong status 0x%08x\n", status); -+ if (!status) -+ { -+ ok(final_size == 4096, "got wrong final_size %d\n", final_size); -+ ok(buf[0] == 0 && buf[4091] == 0, "padding is not zero\n"); -+ ok(!memcmp(buf + 4092, "Wine", 4), "got wrong decoded data at offset 4092\n"); -+ ok(buf[4096] == 0x11, "buf[4096] overwritten\n"); -+ } -+ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_multiple_chunks, -+ sizeof(test_multiple_chunks), 4095, &final_size, workspace); -+ ok(status == STATUS_SUCCESS || broken(status == STATUS_BAD_COMPRESSION_BUFFER), -+ "got wrong status 0x%08x\n", status); -+ if (!status) -+ { -+ ok(final_size == 5, "got wrong final_size %d\n", final_size); -+ ok(buf[0] == 0, "padding is not zero\n"); -+ ok(!memcmp(buf + 1, "Wine", 4), "got wrong decoded data at offset 1\n"); -+ ok(buf[5] == 0x11, "buf[5] overwritten\n"); -+ } -+ -+ final_size = 0xdeadbeef; -+ memset(buf, 0x11, sizeof(buf)); -+ status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_multiple_chunks, -+ sizeof(test_multiple_chunks), 4096, &final_size, workspace); -+ ok(status == STATUS_SUCCESS || broken(status == STATUS_BAD_COMPRESSION_BUFFER), -+ "got wrong status 0x%08x\n", status); -+ if (!status) -+ { -+ ok(final_size == 4, "got wrong final_size %d\n", final_size); -+ ok(!memcmp(buf, "Wine", 4), "got wrong decoded data at offset 0\n"); -+ ok(buf[4] == 0x11, "buf[4] overwritten\n"); -+ } -+ -+} -+ -+static void test_RtlCompressBuffer(void) -+{ -+ ULONG compress_workspace, decompress_workspace; -+ static const UCHAR test_buffer[] = "WineWineWine"; -+ static UCHAR buf1[0x1000], buf2[0x1000], *workspace; -+ ULONG final_size, buf_size; -+ NTSTATUS status; -+ -+ if (!pRtlCompressBuffer || !pRtlGetCompressionWorkSpaceSize) -+ { -+ win_skip("RtlCompressBuffer or RtlGetCompressionWorkSpaceSize is not available\n"); -+ return; -+ } -+ -+ compress_workspace = decompress_workspace = 0xdeadbeef; -+ status = pRtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_LZNT1, &compress_workspace, -+ &decompress_workspace); -+ ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); -+ ok(compress_workspace != 0, "got wrong compress_workspace %d\n", compress_workspace); -+ -+ workspace = HeapAlloc( GetProcessHeap(), 0, compress_workspace ); -+ ok(workspace != NULL, "HeapAlloc failed %x\n", GetLastError()); -+ -+ /* test compression format / engine */ -+ final_size = 0xdeadbeef; -+ status = pRtlCompressBuffer(COMPRESSION_FORMAT_NONE, test_buffer, sizeof(test_buffer), -+ buf1, sizeof(buf1) - 1, 4096, &final_size, workspace); -+ ok(status == STATUS_INVALID_PARAMETER, "got wrong status 0x%08x\n", status); -+ ok(final_size == 0xdeadbeef, "got wrong final_size %d\n", final_size); -+ -+ final_size = 0xdeadbeef; -+ status = pRtlCompressBuffer(COMPRESSION_FORMAT_DEFAULT, test_buffer, sizeof(test_buffer), -+ buf1, sizeof(buf1) - 1, 4096, &final_size, workspace); -+ ok(status == STATUS_INVALID_PARAMETER, "got wrong status 0x%08x\n", status); -+ ok(final_size == 0xdeadbeef, "got wrong final_size %d\n", final_size); -+ -+ final_size = 0xdeadbeef; -+ status = pRtlCompressBuffer(0xFF, test_buffer, sizeof(test_buffer), -+ buf1, sizeof(buf1) - 1, 4096, &final_size, workspace); -+ ok(status == STATUS_UNSUPPORTED_COMPRESSION, "got wrong status 0x%08x\n", status); -+ ok(final_size == 0xdeadbeef, "got wrong final_size %d\n", final_size); -+ -+ /* test compression */ -+ final_size = 0xdeadbeef; -+ memset(buf1, 0x11, sizeof(buf1)); -+ status = pRtlCompressBuffer(COMPRESSION_FORMAT_LZNT1, test_buffer, sizeof(test_buffer), -+ buf1, sizeof(buf1), 4096, &final_size, workspace); -+ ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); -+ ok((*(WORD *)buf1 & 0x7000) == 0x3000, "no chunk signature found %04x\n", *(WORD *)buf1); -+ buf_size = final_size; -+ todo_wine -+ ok(final_size < sizeof(test_buffer), "got wrong final_size %d\n", final_size); -+ -+ /* test decompression */ -+ final_size = 0xdeadbeef; -+ memset(buf2, 0x11, sizeof(buf2)); -+ status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf2, sizeof(buf2), -+ buf1, buf_size, &final_size); -+ ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); -+ ok(final_size == sizeof(test_buffer), "got wrong final_size %d\n", final_size); -+ ok(!memcmp(buf2, test_buffer, sizeof(test_buffer)), "got wrong decoded data\n"); -+ ok(buf2[sizeof(test_buffer)] == 0x11, "buf[%u] overwritten\n", (DWORD)sizeof(test_buffer)); -+ -+ /* buffer too small */ -+ final_size = 0xdeadbeef; -+ memset(buf1, 0x11, sizeof(buf1)); -+ status = pRtlCompressBuffer(COMPRESSION_FORMAT_LZNT1, test_buffer, sizeof(test_buffer), -+ buf1, 4, 4096, &final_size, workspace); -+ ok(status == STATUS_BUFFER_TOO_SMALL, "got wrong status 0x%08x\n", status); -+ -+ HeapFree(GetProcessHeap(), 0, workspace); -+} -+ - START_TEST(rtl) - { - InitFunctionPtrs(); -@@ -1625,4 +2362,7 @@ START_TEST(rtl) - test_RtlIpv4StringToAddress(); - test_LdrAddRefDll(); - test_LdrLockLoaderLock(); -+ test_RtlGetCompressionWorkSpaceSize(); -+ test_RtlDecompressBuffer(); -+ test_RtlCompressBuffer(); - } --- -2.3.1 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0005-ntdll-tests-Fix-various-test-failures-caused-by-brok.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0005-ntdll-tests-Fix-various-test-failures-caused-by-brok.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0005-ntdll-tests-Fix-various-test-failures-caused-by-brok.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/0005-ntdll-tests-Fix-various-test-failures-caused-by-brok.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,149 +0,0 @@ -From 8a8496e747ef2dff43763a3d3dfd7f1d68160adc Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Tue, 10 Mar 2015 20:09:59 +0100 -Subject: ntdll/tests: Fix various test failures caused by broken - RtlDecompressBuffer results. - ---- - dlls/ntdll/tests/rtl.c | 41 ++++++++++++++++++----------------------- - 1 file changed, 18 insertions(+), 23 deletions(-) - -diff --git a/dlls/ntdll/tests/rtl.c b/dlls/ntdll/tests/rtl.c -index 2f6c421..843e8e7 100644 ---- a/dlls/ntdll/tests/rtl.c -+++ b/dlls/ntdll/tests/rtl.c -@@ -1664,9 +1664,7 @@ static BOOL is_incomplete_chunk(const UCHAR *compressed, ULONG compressed_size, - } - - #define DECOMPRESS_BROKEN_TRUNCATED 1 --#define DECOMPRESS_BROKEN_FRAGMENT0 2 --#define DECOMPRESS_BROKEN_FRAGMENT1 4 --#define DECOMPRESS_BROKEN_FRAGMENT4095 8 -+#define DECOMPRESS_BROKEN_FRAGMENT 2 - - static void test_RtlDecompressBuffer(void) - { -@@ -1690,9 +1688,7 @@ static void test_RtlDecompressBuffer(void) - STATUS_SUCCESS, - "Wine", - 4, -- DECOMPRESS_BROKEN_FRAGMENT4095 | -- DECOMPRESS_BROKEN_FRAGMENT1 | -- DECOMPRESS_BROKEN_FRAGMENT0 -+ DECOMPRESS_BROKEN_FRAGMENT - }, - /* 8 byte uncompressed chunk */ - { -@@ -1701,9 +1697,7 @@ static void test_RtlDecompressBuffer(void) - STATUS_SUCCESS, - "WineWine", - 8, -- DECOMPRESS_BROKEN_FRAGMENT4095 | -- DECOMPRESS_BROKEN_FRAGMENT1 | -- DECOMPRESS_BROKEN_FRAGMENT0 -+ DECOMPRESS_BROKEN_FRAGMENT - }, - /* 4 byte compressed chunk */ - { -@@ -1763,9 +1757,7 @@ static void test_RtlDecompressBuffer(void) - STATUS_SUCCESS, - "Wine", - 4, -- DECOMPRESS_BROKEN_FRAGMENT4095 | -- DECOMPRESS_BROKEN_FRAGMENT1 | -- DECOMPRESS_BROKEN_FRAGMENT0 -+ DECOMPRESS_BROKEN_FRAGMENT - }, - /* compressed chunk using backwards reference with 4 bit offset, 12 bit length */ - { -@@ -1796,9 +1788,7 @@ static void test_RtlDecompressBuffer(void) - STATUS_SUCCESS, - "Wine", - 4, -- DECOMPRESS_BROKEN_FRAGMENT4095 | -- DECOMPRESS_BROKEN_FRAGMENT1 | -- DECOMPRESS_BROKEN_FRAGMENT0 -+ DECOMPRESS_BROKEN_FRAGMENT - }, - /* compressed chunk with invalid magic */ - { -@@ -1923,7 +1913,8 @@ static void test_RtlDecompressBuffer(void) - memset(buf, 0x11, sizeof(buf)); - status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_lznt[i].compressed, - test_lznt[i].compressed_size, &final_size); -- ok(status == test_lznt[i].status, "%d: got wrong status 0x%08x\n", i, status); -+ ok(status == test_lznt[i].status || broken(status == STATUS_BAD_COMPRESSION_BUFFER && -+ (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_FRAGMENT)), "%d: got wrong status 0x%08x\n", i, status); - if (!status) - { - ok(final_size == test_lznt[i].uncompressed_size, -@@ -1939,7 +1930,8 @@ static void test_RtlDecompressBuffer(void) - memset(buf, 0x11, sizeof(buf)); - status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_MAXIMUM, buf, sizeof(buf), - test_lznt[i].compressed, test_lznt[i].compressed_size, &final_size); -- ok(status == test_lznt[i].status, "%d: got wrong status 0x%08x\n", i, status); -+ ok(status == test_lznt[i].status || broken(status == STATUS_BAD_COMPRESSION_BUFFER && -+ (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_FRAGMENT)), "%d: got wrong status 0x%08x\n", i, status); - if (!status) - { - ok(final_size == test_lznt[i].uncompressed_size, -@@ -2011,7 +2003,7 @@ static void test_RtlDecompressBuffer(void) - status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_lznt[i].compressed, - test_lznt[i].compressed_size, 0, &final_size, workspace); - ok(status == test_lznt[i].status || broken(status == STATUS_BAD_COMPRESSION_BUFFER && -- (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_FRAGMENT0)), "%d: got wrong status 0x%08x\n", i, status); -+ (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_FRAGMENT)), "%d: got wrong status 0x%08x\n", i, status); - if (!status) - { - ok(final_size == test_lznt[i].uncompressed_size, -@@ -2028,7 +2020,7 @@ static void test_RtlDecompressBuffer(void) - status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_lznt[i].compressed, - test_lznt[i].compressed_size, 1, &final_size, workspace); - ok(status == test_lznt[i].status || broken(status == STATUS_BAD_COMPRESSION_BUFFER && -- (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_FRAGMENT1)), "%d: got wrong status 0x%08x\n", i, status); -+ (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_FRAGMENT)), "%d: got wrong status 0x%08x\n", i, status); - if (!status) - { - if (test_lznt[i].uncompressed_size == 0) -@@ -2057,7 +2049,7 @@ static void test_RtlDecompressBuffer(void) - status = pRtlDecompressFragment(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_lznt[i].compressed, - test_lznt[i].compressed_size, 4095, &final_size, workspace); - ok(status == test_lznt[i].status || broken(status == STATUS_BAD_COMPRESSION_BUFFER && -- (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_FRAGMENT4095)), "%d: got wrong status 0x%08x\n", i, status); -+ (test_lznt[i].broken_flags & DECOMPRESS_BROKEN_FRAGMENT)), "%d: got wrong status 0x%08x\n", i, status); - if (!status) - { - todo_wine -@@ -2092,7 +2084,8 @@ static void test_RtlDecompressBuffer(void) - memset(buf, 0x11, sizeof(buf)); - status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, sizeof(buf), test_multiple_chunks, - sizeof(test_multiple_chunks), &final_size); -- ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); -+ ok(status == STATUS_SUCCESS || broken(status == STATUS_BAD_COMPRESSION_BUFFER), -+ "got wrong status 0x%08x\n", status); - if (!status) - { - ok(final_size == 4100, "got wrong final_size %d\n", final_size); -@@ -2106,7 +2099,8 @@ static void test_RtlDecompressBuffer(void) - memset(buf, 0x11, sizeof(buf)); - status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, 4097, test_multiple_chunks, - sizeof(test_multiple_chunks), &final_size); -- ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); -+ ok(status == STATUS_SUCCESS || broken(status == STATUS_BAD_COMPRESSION_BUFFER), -+ "got wrong status 0x%08x\n", status); - if (!status) - { - ok(final_size == 4097, "got wrong final_size %d\n", final_size); -@@ -2120,7 +2114,8 @@ static void test_RtlDecompressBuffer(void) - memset(buf, 0x11, sizeof(buf)); - status = pRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, buf, 4096, test_multiple_chunks, - sizeof(test_multiple_chunks), &final_size); -- ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status); -+ ok(status == STATUS_SUCCESS || broken(status == STATUS_BAD_COMPRESSION_BUFFER), -+ "got wrong status 0x%08x\n", status); - if (!status) - { - ok(final_size == 4, "got wrong final_size %d\n", final_size); --- -2.3.1 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/definition wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/definition --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/definition 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-LZNT1_Compression/definition 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -Fixes: [37449] Support for RtlDecompressBuffer -Category: stable diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Revert_Security_Cookie/0001-Revert-ntdll-Randomize-security-cookie-when-availabl.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Revert_Security_Cookie/0001-Revert-ntdll-Randomize-security-cookie-when-availabl.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Revert_Security_Cookie/0001-Revert-ntdll-Randomize-security-cookie-when-availabl.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Revert_Security_Cookie/0001-Revert-ntdll-Randomize-security-cookie-when-availabl.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,51 @@ +From 2322a6e69849a1537724b0fe7dd08a3edea83e0c Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Fri, 10 Jul 2015 20:40:01 +0200 +Subject: Revert "ntdll: Randomize security cookie when available." + +This reverts commit 7e1c886fbfd362376b6aebe5381ab7d4433c3371. +--- + dlls/ntdll/virtual.c | 20 -------------------- + 1 file changed, 20 deletions(-) + +diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c +index 410e060..bc3f7cd 100644 +--- a/dlls/ntdll/virtual.c ++++ b/dlls/ntdll/virtual.c +@@ -1067,8 +1067,6 @@ static NTSTATUS map_image( HANDLE hmapping, int fd, char *base, SIZE_T total_siz + IMAGE_SECTION_HEADER sections[96]; + IMAGE_SECTION_HEADER *sec; + IMAGE_DATA_DIRECTORY *imports; +- IMAGE_LOAD_CONFIG_DIRECTORY *loadcfg; +- ULONG loadcfg_size; + NTSTATUS status = STATUS_CONFLICTING_ADDRESSES; + int i; + off_t pos; +@@ -1280,24 +1278,6 @@ static NTSTATUS map_image( HANDLE hmapping, int fd, char *base, SIZE_T total_siz + } + } + +- /* randomize security cookie */ +- +- loadcfg = RtlImageDirectoryEntryToData( (HMODULE)ptr, TRUE, +- IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG, &loadcfg_size ); +- if (loadcfg && loadcfg_size >= sizeof(*loadcfg)) +- { +- static ULONG seed; +- ULONG_PTR *cookie = (ULONG_PTR *)loadcfg->SecurityCookie; +- +- if (!seed) seed = NtGetTickCount() ^ GetCurrentProcessId(); +- if (cookie) +- { +- *cookie = RtlRandom( &seed ); +- if (sizeof(ULONG_PTR) > sizeof(ULONG)) /* fill up, but keep the highest word clear */ +- *cookie ^= (ULONG_PTR)RtlRandom( &seed ) << 16; +- } +- } +- + /* set the image protections */ + + VIRTUAL_SetProt( view, ptr, ROUND_SIZE( 0, header_size ), VPROT_COMMITTED | VPROT_READ ); +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Revert_Security_Cookie/definition wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Revert_Security_Cookie/definition --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Revert_Security_Cookie/definition 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Revert_Security_Cookie/definition 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,2 @@ +# Fixes: [38897] Revert patch causing crash in Word Viewer when opening docx files +Fixes: [38895] Revert patch causing crash in IrfanView when using the WebP plugin diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-RtlIpStringToAddress/0001-ntdll-tests-Tests-for-RtlIpv6StringToAddress-try-6.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-RtlIpStringToAddress/0001-ntdll-tests-Tests-for-RtlIpv6StringToAddress-try-6.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-RtlIpStringToAddress/0001-ntdll-tests-Tests-for-RtlIpv6StringToAddress-try-6.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-RtlIpStringToAddress/0001-ntdll-tests-Tests-for-RtlIpv6StringToAddress-try-6.patch 2015-07-12 05:53:31.000000000 +0000 @@ -1,4 +1,4 @@ -From 0200b5ccf86d7b87846f4d8c98f9ac0775e810d8 Mon Sep 17 00:00:00 2001 +From 14cab3188b8f83081a686892d94594a30abebf14 Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Sun, 8 Mar 2015 18:24:45 +0100 Subject: ntdll/tests: Tests for RtlIpv6StringToAddress (try 6) @@ -22,7 +22,7 @@ 1 file changed, 430 insertions(+) diff --git a/dlls/ntdll/tests/rtl.c b/dlls/ntdll/tests/rtl.c -index 2f6c421..d4c83c2 100644 +index 4903790..47acfe9 100644 --- a/dlls/ntdll/tests/rtl.c +++ b/dlls/ntdll/tests/rtl.c @@ -25,6 +25,7 @@ @@ -488,14 +488,14 @@ static void test_LdrAddRefDll(void) { HMODULE mod, mod2; -@@ -2360,6 +2789,7 @@ START_TEST(rtl) +@@ -2186,6 +2615,7 @@ START_TEST(rtl) test_RtlIpv4AddressToString(); test_RtlIpv4AddressToStringEx(); test_RtlIpv4StringToAddress(); + test_RtlIpv6StringToAddress(); test_LdrAddRefDll(); test_LdrLockLoaderLock(); - test_RtlGetCompressionWorkSpaceSize(); + test_RtlCompressBuffer(); -- -2.3.1 +2.4.5 diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-RtlIpStringToAddress/0002-ntdll-tests-Tests-for-RtlIpv6StringToAddressEx-try-6.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-RtlIpStringToAddress/0002-ntdll-tests-Tests-for-RtlIpv6StringToAddressEx-try-6.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-RtlIpStringToAddress/0002-ntdll-tests-Tests-for-RtlIpv6StringToAddressEx-try-6.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-RtlIpStringToAddress/0002-ntdll-tests-Tests-for-RtlIpv6StringToAddressEx-try-6.patch 2015-07-12 05:53:31.000000000 +0000 @@ -1,4 +1,4 @@ -From 486707397ce18ce3f92f0ffbc388626312d9f952 Mon Sep 17 00:00:00 2001 +From 7b6d523f37901554bfdb17e301dd25e50a899e22 Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Sun, 8 Mar 2015 18:24:50 +0100 Subject: ntdll/tests: Tests for RtlIpv6StringToAddressEx (try 6) @@ -21,7 +21,7 @@ 1 file changed, 268 insertions(+), 1 deletion(-) diff --git a/dlls/ntdll/tests/rtl.c b/dlls/ntdll/tests/rtl.c -index d4c83c2..b389d6f 100644 +index 47acfe9..f5bbbb3 100644 --- a/dlls/ntdll/tests/rtl.c +++ b/dlls/ntdll/tests/rtl.c @@ -92,6 +92,8 @@ static NTSTATUS (WINAPI *pRtlIpv4AddressToStringExA)(const IN_ADDR *, USHORT, L @@ -320,14 +320,14 @@ static void test_LdrAddRefDll(void) { HMODULE mod, mod2; -@@ -2790,6 +3056,7 @@ START_TEST(rtl) +@@ -2616,6 +2882,7 @@ START_TEST(rtl) test_RtlIpv4AddressToStringEx(); test_RtlIpv4StringToAddress(); test_RtlIpv6StringToAddress(); + test_RtlIpv6StringToAddressEx(); test_LdrAddRefDll(); test_LdrLockLoaderLock(); - test_RtlGetCompressionWorkSpaceSize(); + test_RtlCompressBuffer(); -- -2.3.1 +2.4.5 diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-RtlIpStringToAddress/definition wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-RtlIpStringToAddress/definition --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-RtlIpStringToAddress/definition 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-RtlIpStringToAddress/definition 2015-07-12 05:53:31.000000000 +0000 @@ -1,2 +1 @@ -Depends: ntdll-LZNT1_Compression Category: stable diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0001-ntdll-Implement-TpSimpleTryPost-and-basic-threadpool.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0001-ntdll-Implement-TpSimpleTryPost-and-basic-threadpool.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0001-ntdll-Implement-TpSimpleTryPost-and-basic-threadpool.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0001-ntdll-Implement-TpSimpleTryPost-and-basic-threadpool.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,448 +0,0 @@ -From f8c57c8ed3616f53bbed2d794f1e858ea5051f22 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Tue, 24 Feb 2015 05:42:07 +0100 -Subject: ntdll: Implement TpSimpleTryPost and basic threadpool infrastructure. - ---- - dlls/ntdll/ntdll.spec | 3 + - dlls/ntdll/tests/threadpool.c | 3 +- - dlls/ntdll/threadpool.c | 370 ++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 375 insertions(+), 1 deletion(-) - -diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec -index 28165ef..cd6b97c 100644 ---- a/dlls/ntdll/ntdll.spec -+++ b/dlls/ntdll/ntdll.spec -@@ -968,6 +968,9 @@ - @ stdcall RtlxOemStringToUnicodeSize(ptr) RtlOemStringToUnicodeSize - @ stdcall RtlxUnicodeStringToAnsiSize(ptr) RtlUnicodeStringToAnsiSize - @ stdcall RtlxUnicodeStringToOemSize(ptr) RtlUnicodeStringToOemSize -+@ stdcall TpAllocPool(ptr ptr) -+@ stdcall TpReleasePool(ptr) -+@ stdcall TpSimpleTryPost(ptr ptr ptr) - @ stdcall -ret64 VerSetConditionMask(int64 long long) - @ stdcall WinSqmIsOptedIn() - @ stdcall ZwAcceptConnectPort(ptr long ptr long long ptr) NtAcceptConnectPort -diff --git a/dlls/ntdll/tests/threadpool.c b/dlls/ntdll/tests/threadpool.c -index 2e31b34..6f164e9 100644 ---- a/dlls/ntdll/tests/threadpool.c -+++ b/dlls/ntdll/tests/threadpool.c -@@ -48,7 +48,7 @@ static BOOL init_threadpool(void) - - if (!pTpAllocPool) - { -- skip("Threadpool functions not supported, skipping tests\n"); -+ win_skip("Threadpool functions not supported, skipping tests\n"); - return FALSE; - } - -@@ -105,6 +105,7 @@ static void test_tp_simple(void) - environment.Version = 9999; - environment.Pool = pool; - status = pTpSimpleTryPost(simple_cb, semaphore, &environment); -+ todo_wine - ok(status == STATUS_INVALID_PARAMETER || broken(!status) /* Vista/2008 */, - "TpSimpleTryPost unexpectedly returned status %x\n", status); - if (!status) -diff --git a/dlls/ntdll/threadpool.c b/dlls/ntdll/threadpool.c -index 513c13d..cc5f8e9 100644 ---- a/dlls/ntdll/threadpool.c -+++ b/dlls/ntdll/threadpool.c -@@ -2,6 +2,7 @@ - * Thread pooling - * - * Copyright (c) 2006 Robert Shearman -+ * Copyright (c) 2014-2015 Sebastian Lackner - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -37,6 +38,10 @@ - - WINE_DEFAULT_DEBUG_CHANNEL(threadpool); - -+/* -+ * Old thread pooling API -+ */ -+ - #define OLD_WORKER_TIMEOUT 30000 /* 30 seconds */ - #define EXPIRE_NEVER (~(ULONGLONG)0) - #define TIMER_QUEUE_MAGIC 0x516d6954 /* TimQ */ -@@ -127,6 +132,64 @@ struct timer_queue - HANDLE thread; - }; - -+/* -+ * New object-oriented thread pooling API -+ */ -+ -+#define THREADPOOL_WORKER_TIMEOUT 5000 -+ -+/* internal threadpool representation */ -+struct threadpool -+{ -+ LONG refcount; -+ BOOL shutdown; -+ CRITICAL_SECTION cs; -+ /* pool of work items, locked via .cs */ -+ struct list pool; -+ RTL_CONDITION_VARIABLE update_event; -+ /* information about worker threads, locked via .cs */ -+ int max_workers; -+ int min_workers; -+ int num_workers; -+ int num_busy_workers; -+}; -+ -+enum threadpool_objtype -+{ -+ TP_OBJECT_TYPE_SIMPLE -+}; -+ -+/* internal threadpool object representation */ -+struct threadpool_object -+{ -+ LONG refcount; -+ BOOL shutdown; -+ /* read-only information */ -+ enum threadpool_objtype type; -+ struct threadpool *pool; -+ PVOID userdata; -+ /* information about the pool, locked via .pool->cs */ -+ struct list pool_entry; -+ LONG num_pending_callbacks; -+ LONG num_running_callbacks; -+ /* arguments for callback */ -+ union -+ { -+ struct -+ { -+ PTP_SIMPLE_CALLBACK callback; -+ } simple; -+ } u; -+}; -+ -+static inline struct threadpool *impl_from_TP_POOL( TP_POOL *pool ) -+{ -+ return (struct threadpool *)pool; -+} -+ -+static void CALLBACK threadpool_worker_proc( void *param ); -+static struct threadpool *default_threadpool = NULL; -+ - static inline LONG interlocked_inc( PLONG dest ) - { - return interlocked_xchg_add( dest, 1 ) + 1; -@@ -1044,3 +1107,310 @@ NTSTATUS WINAPI RtlDeleteTimer(HANDLE TimerQueue, HANDLE Timer, - - return status; - } -+ -+/* allocate a new threadpool (with at least one worker thread) */ -+static NTSTATUS tp_threadpool_alloc( struct threadpool **out ) -+{ -+ struct threadpool *pool; -+ NTSTATUS status; -+ HANDLE thread; -+ -+ pool = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*pool) ); -+ if (!pool) -+ return STATUS_NO_MEMORY; -+ -+ pool->refcount = 2; /* this thread + worker proc */ -+ pool->shutdown = FALSE; -+ -+ RtlInitializeCriticalSection( &pool->cs ); -+ pool->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": threadpool.cs"); -+ -+ list_init( &pool->pool ); -+ RtlInitializeConditionVariable( &pool->update_event ); -+ -+ pool->max_workers = 500; -+ pool->min_workers = 1; -+ pool->num_workers = 1; -+ pool->num_busy_workers = 0; -+ -+ status = RtlCreateUserThread( GetCurrentProcess(), NULL, FALSE, NULL, 0, 0, -+ threadpool_worker_proc, pool, &thread, NULL ); -+ if (status != STATUS_SUCCESS) -+ { -+ pool->cs.DebugInfo->Spare[0] = 0; -+ RtlDeleteCriticalSection( &pool->cs ); -+ RtlFreeHeap( GetProcessHeap(), 0, pool ); -+ return status; -+ } -+ NtClose( thread ); -+ -+ TRACE("allocated threadpool %p\n", pool); -+ -+ *out = pool; -+ return STATUS_SUCCESS; -+} -+ -+/* shutdown all threads of the threadpool */ -+static void tp_threadpool_shutdown( struct threadpool *pool ) -+{ -+ assert( pool != default_threadpool ); -+ -+ pool->shutdown = TRUE; -+ RtlWakeAllConditionVariable( &pool->update_event ); -+} -+ -+/* release a reference to a threadpool */ -+static BOOL tp_threadpool_release( struct threadpool *pool ) -+{ -+ if (interlocked_dec( &pool->refcount )) -+ return FALSE; -+ -+ TRACE("destroying threadpool %p\n", pool); -+ -+ assert( pool->shutdown ); -+ assert( list_empty( &pool->pool ) ); -+ -+ pool->cs.DebugInfo->Spare[0] = 0; -+ RtlDeleteCriticalSection( &pool->cs ); -+ -+ RtlFreeHeap( GetProcessHeap(), 0, pool ); -+ return TRUE; -+} -+ -+/* returns the threadpool based on the environment structure */ -+static struct threadpool *get_threadpool( TP_CALLBACK_ENVIRON *environment ) -+{ -+ struct threadpool *pool; -+ -+ if (environment) -+ { -+ pool = (struct threadpool *)environment->Pool; -+ if (pool) return pool; -+ } -+ -+ if (!default_threadpool) -+ { -+ if (tp_threadpool_alloc( &pool ) != STATUS_SUCCESS) -+ return NULL; -+ -+ if (interlocked_cmpxchg_ptr( (void *)&default_threadpool, pool, NULL ) != NULL) -+ { -+ tp_threadpool_shutdown( pool ); -+ tp_threadpool_release( pool ); -+ } -+ } -+ -+ return default_threadpool; -+} -+ -+/* initializes a new threadpool object */ -+static void tp_object_initialize( struct threadpool_object *object, struct threadpool *pool, -+ PVOID userdata, TP_CALLBACK_ENVIRON *environment ) -+{ -+ object->refcount = 1; -+ object->shutdown = FALSE; -+ -+ object->pool = pool; -+ object->userdata = userdata; -+ -+ memset( &object->pool_entry, 0, sizeof(object->pool_entry) ); -+ object->num_pending_callbacks = 0; -+ object->num_running_callbacks = 0; -+ -+ if (environment) -+ FIXME("environment not implemented yet\n"); -+ -+ /* Increase reference-count on the pool */ -+ interlocked_inc( &pool->refcount ); -+ -+ TRACE("allocated object %p of type %u\n", object, object->type); -+} -+ -+/* submits an object to a threadpool */ -+static void tp_object_submit( struct threadpool_object *object ) -+{ -+ struct threadpool *pool = object->pool; -+ -+ assert( !object->shutdown ); -+ assert( !pool->shutdown ); -+ -+ RtlEnterCriticalSection( &pool->cs ); -+ -+ /* Start new worker threads if required (and allowed) */ -+ if (pool->num_busy_workers >= pool->num_workers && pool->num_workers < pool->max_workers) -+ { -+ NTSTATUS status; -+ HANDLE thread; -+ -+ status = RtlCreateUserThread( GetCurrentProcess(), NULL, FALSE, NULL, 0, 0, -+ threadpool_worker_proc, pool, &thread, NULL ); -+ if (status == STATUS_SUCCESS) -+ { -+ interlocked_inc( &pool->refcount ); -+ pool->num_workers++; -+ NtClose( thread ); -+ goto out; -+ } -+ } -+ -+ assert( pool->num_workers > 0 ); -+ RtlWakeConditionVariable( &pool->update_event ); -+ -+out: -+ /* Queue work item into pool and increment refcount */ -+ interlocked_inc( &object->refcount ); -+ if (!object->num_pending_callbacks++) -+ list_add_tail( &pool->pool, &object->pool_entry ); -+ -+ RtlLeaveCriticalSection( &pool->cs ); -+} -+ -+/* mark an object as 'shutdown', submitting is no longer possible */ -+static void tp_object_shutdown( struct threadpool_object *object ) -+{ -+ object->shutdown = TRUE; -+} -+ -+/* release a reference to a threadpool object */ -+static BOOL tp_object_release( struct threadpool_object *object ) -+{ -+ if (interlocked_dec( &object->refcount )) -+ return FALSE; -+ -+ TRACE("destroying object %p of type %u\n", object, object->type); -+ -+ assert( object->shutdown ); -+ assert( !object->num_pending_callbacks ); -+ assert( !object->num_running_callbacks ); -+ -+ /* release reference to threadpool */ -+ tp_threadpool_release( object->pool ); -+ -+ RtlFreeHeap( GetProcessHeap(), 0, object ); -+ return TRUE; -+} -+ -+/* threadpool worker function */ -+static void CALLBACK threadpool_worker_proc( void *param ) -+{ -+ struct threadpool *pool = param; -+ LARGE_INTEGER timeout; -+ struct list *ptr; -+ -+ RtlEnterCriticalSection( &pool->cs ); -+ for (;;) -+ { -+ while ((ptr = list_head( &pool->pool ))) -+ { -+ struct threadpool_object *object = LIST_ENTRY( ptr, struct threadpool_object, pool_entry ); -+ assert( object->num_pending_callbacks > 0 ); -+ -+ /* If further pending callbacks are queued, move the work item to -+ * the end of the pool list. Otherwise remove it from the pool. */ -+ list_remove( &object->pool_entry ); -+ if (--object->num_pending_callbacks) -+ list_add_tail( &pool->pool, &object->pool_entry ); -+ -+ /* Leave critical section and do the actual callback. */ -+ object->num_running_callbacks++; -+ pool->num_busy_workers++; -+ RtlLeaveCriticalSection( &pool->cs ); -+ -+ switch (object->type) -+ { -+ case TP_OBJECT_TYPE_SIMPLE: -+ { -+ TRACE( "executing simple callback %p(NULL, %p)\n", -+ object->u.simple.callback, object->userdata ); -+ object->u.simple.callback( NULL, object->userdata ); -+ TRACE( "callback %p returned\n", object->u.simple.callback ); -+ break; -+ } -+ -+ default: -+ assert(0); -+ break; -+ } -+ -+ RtlEnterCriticalSection( &pool->cs ); -+ pool->num_busy_workers--; -+ object->num_running_callbacks--; -+ tp_object_release( object ); -+ } -+ -+ /* Shutdown worker thread if requested. */ -+ if (pool->shutdown) -+ break; -+ -+ /* Wait for new tasks or until timeout expires. Never terminate the last worker. */ -+ timeout.QuadPart = (ULONGLONG)THREADPOOL_WORKER_TIMEOUT * -10000; -+ if (RtlSleepConditionVariableCS( &pool->update_event, &pool->cs, &timeout ) == STATUS_TIMEOUT && -+ !list_head( &pool->pool ) && pool->num_workers > 1) -+ { -+ break; -+ } -+ } -+ pool->num_workers--; -+ RtlLeaveCriticalSection( &pool->cs ); -+ tp_threadpool_release( pool ); -+} -+ -+/*********************************************************************** -+ * TpAllocPool (NTDLL.@) -+ */ -+NTSTATUS WINAPI TpAllocPool( TP_POOL **out, PVOID reserved ) -+{ -+ TRACE("%p %p\n", out, reserved); -+ -+ if (reserved) -+ FIXME("reserved argument is nonzero (%p)", reserved); -+ -+ if (!out) -+ return STATUS_ACCESS_VIOLATION; -+ -+ return tp_threadpool_alloc( (struct threadpool **)out ); -+} -+ -+/*********************************************************************** -+ * TpReleasePool (NTDLL.@) -+ */ -+VOID WINAPI TpReleasePool( TP_POOL *pool ) -+{ -+ struct threadpool *this = impl_from_TP_POOL( pool ); -+ TRACE("%p\n", pool); -+ -+ if (this) -+ { -+ tp_threadpool_shutdown( this ); -+ tp_threadpool_release( this ); -+ } -+} -+ -+/*********************************************************************** -+ * TpSimpleTryPost (NTDLL.@) -+ */ -+NTSTATUS WINAPI TpSimpleTryPost( PTP_SIMPLE_CALLBACK callback, PVOID userdata, -+ TP_CALLBACK_ENVIRON *environment ) -+{ -+ struct threadpool_object *object; -+ struct threadpool *pool; -+ -+ TRACE("%p %p %p\n", callback, userdata, environment); -+ -+ if (!(pool = get_threadpool( environment ))) -+ return STATUS_NO_MEMORY; -+ -+ object = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*object) ); -+ if (!object) -+ return STATUS_NO_MEMORY; -+ -+ object->type = TP_OBJECT_TYPE_SIMPLE; -+ object->u.simple.callback = callback; -+ tp_object_initialize( object, pool, userdata, environment ); -+ -+ tp_object_submit( object ); -+ -+ tp_object_shutdown( object ); -+ tp_object_release( object ); -+ return STATUS_SUCCESS; -+} --- -2.3.5 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0002-ntdll-Implement-TpSetPool-Min-Max-Threads.-v2.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0002-ntdll-Implement-TpSetPool-Min-Max-Threads.-v2.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0002-ntdll-Implement-TpSetPool-Min-Max-Threads.-v2.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0002-ntdll-Implement-TpSetPool-Min-Max-Threads.-v2.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -From c362c574aa6611f80c6965ea66cbfab33e421d0f Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Wed, 4 Mar 2015 00:16:20 +0100 -Subject: ntdll: Implement TpSetPool[Min|Max]Threads. (v2) - ---- - dlls/ntdll/ntdll.spec | 2 ++ - dlls/ntdll/threadpool.c | 35 +++++++++++++++++++++++++++++++++++ - 2 files changed, 37 insertions(+) - -diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec -index cd6b97c..f755286 100644 ---- a/dlls/ntdll/ntdll.spec -+++ b/dlls/ntdll/ntdll.spec -@@ -970,6 +970,8 @@ - @ stdcall RtlxUnicodeStringToOemSize(ptr) RtlUnicodeStringToOemSize - @ stdcall TpAllocPool(ptr ptr) - @ stdcall TpReleasePool(ptr) -+@ stdcall TpSetPoolMaxThreads(ptr long) -+@ stdcall TpSetPoolMinThreads(ptr long) - @ stdcall TpSimpleTryPost(ptr ptr ptr) - @ stdcall -ret64 VerSetConditionMask(int64 long long) - @ stdcall WinSqmIsOptedIn() -diff --git a/dlls/ntdll/threadpool.c b/dlls/ntdll/threadpool.c -index cc5f8e9..cb2dcdd 100644 ---- a/dlls/ntdll/threadpool.c -+++ b/dlls/ntdll/threadpool.c -@@ -1387,6 +1387,41 @@ VOID WINAPI TpReleasePool( TP_POOL *pool ) - } - - /*********************************************************************** -+ * TpSetPoolMaxThreads (NTDLL.@) -+ */ -+VOID WINAPI TpSetPoolMaxThreads( TP_POOL *pool, DWORD maximum ) -+{ -+ struct threadpool *this = impl_from_TP_POOL( pool ); -+ TRACE("%p %d\n", pool, maximum); -+ -+ if (this) -+ { -+ RtlEnterCriticalSection( &this->cs ); -+ this->max_workers = max( maximum, 1 ); -+ this->min_workers = min( this->min_workers, this->max_workers ); -+ RtlLeaveCriticalSection( &this->cs ); -+ } -+} -+ -+/*********************************************************************** -+ * TpSetPoolMinThreads (NTDLL.@) -+ */ -+BOOL WINAPI TpSetPoolMinThreads( TP_POOL *pool, DWORD minimum ) -+{ -+ struct threadpool *this = impl_from_TP_POOL( pool ); -+ FIXME("%p %d: semi-stub\n", pool, minimum); -+ -+ if (this) -+ { -+ RtlEnterCriticalSection( &this->cs ); -+ this->min_workers = max( minimum, 1 ); -+ this->max_workers = max( this->min_workers, this->max_workers ); -+ RtlLeaveCriticalSection( &this->cs ); -+ } -+ return TRUE; -+} -+ -+/*********************************************************************** - * TpSimpleTryPost (NTDLL.@) - */ - NTSTATUS WINAPI TpSimpleTryPost( PTP_SIMPLE_CALLBACK callback, PVOID userdata, --- -2.3.5 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0003-ntdll-Implement-threadpool-cleanup-group-functions.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0003-ntdll-Implement-threadpool-cleanup-group-functions.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0003-ntdll-Implement-threadpool-cleanup-group-functions.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0003-ntdll-Implement-threadpool-cleanup-group-functions.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,382 +0,0 @@ -From 63ebc5c972502aaa60d50b1f6ca54f6a9646fca6 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Wed, 4 Mar 2015 00:52:18 +0100 -Subject: ntdll: Implement threadpool cleanup group functions. - ---- - dlls/ntdll/ntdll.spec | 3 + - dlls/ntdll/threadpool.c | 259 +++++++++++++++++++++++++++++++++++++++++++++++- - 2 files changed, 257 insertions(+), 5 deletions(-) - -diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec -index 88d915b..853ca09 100644 ---- a/dlls/ntdll/ntdll.spec -+++ b/dlls/ntdll/ntdll.spec -@@ -968,7 +968,10 @@ - @ stdcall RtlxOemStringToUnicodeSize(ptr) RtlOemStringToUnicodeSize - @ stdcall RtlxUnicodeStringToAnsiSize(ptr) RtlUnicodeStringToAnsiSize - @ stdcall RtlxUnicodeStringToOemSize(ptr) RtlUnicodeStringToOemSize -+@ stdcall TpAllocCleanupGroup(ptr) - @ stdcall TpAllocPool(ptr ptr) -+@ stdcall TpReleaseCleanupGroup(ptr) -+@ stdcall TpReleaseCleanupGroupMembers(ptr long ptr) - @ stdcall TpReleasePool(ptr) - @ stdcall TpSetPoolMaxThreads(ptr long) - @ stdcall TpSetPoolMinThreads(ptr long) -diff --git a/dlls/ntdll/threadpool.c b/dlls/ntdll/threadpool.c -index 16d9209..092fa6f 100644 ---- a/dlls/ntdll/threadpool.c -+++ b/dlls/ntdll/threadpool.c -@@ -167,9 +167,14 @@ struct threadpool_object - /* read-only information */ - enum threadpool_objtype type; - struct threadpool *pool; -+ struct threadpool_group *group; - PVOID userdata; -+ /* information about the group, locked via .group->cs */ -+ struct list group_entry; -+ BOOL is_group_member; - /* information about the pool, locked via .pool->cs */ - struct list pool_entry; -+ RTL_CONDITION_VARIABLE finished_event; - LONG num_pending_callbacks; - LONG num_running_callbacks; - /* arguments for callback */ -@@ -182,12 +187,30 @@ struct threadpool_object - } u; - }; - -+/* internal threadpool group representation */ -+struct threadpool_group -+{ -+ LONG refcount; -+ BOOL shutdown; -+ CRITICAL_SECTION cs; -+ /* list of group members, locked via .cs */ -+ struct list members; -+}; -+ - static inline struct threadpool *impl_from_TP_POOL( TP_POOL *pool ) - { - return (struct threadpool *)pool; - } - -+static inline struct threadpool_group *impl_from_TP_CLEANUP_GROUP( TP_CLEANUP_GROUP *group ) -+{ -+ return (struct threadpool_group *)group; -+} -+ - static void CALLBACK threadpool_worker_proc( void *param ); -+static void tp_object_submit( struct threadpool_object *object ); -+static void tp_object_shutdown( struct threadpool_object *object ); -+static BOOL tp_object_release( struct threadpool_object *object ); - static struct threadpool *default_threadpool = NULL; - - static inline LONG interlocked_inc( PLONG dest ) -@@ -1196,27 +1219,111 @@ static struct threadpool *get_default_threadpool( void ) - return default_threadpool; - } - -+/* allocates a new cleanup group */ -+static NTSTATUS tp_group_alloc( struct threadpool_group **out ) -+{ -+ struct threadpool_group *group; -+ -+ group = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*group) ); -+ if (!group) -+ return STATUS_NO_MEMORY; -+ -+ group->refcount = 1; -+ group->shutdown = FALSE; -+ -+ RtlInitializeCriticalSection( &group->cs ); -+ group->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": threadpool_group.cs"); -+ -+ list_init( &group->members ); -+ -+ TRACE("allocated group %p\n", group); -+ -+ *out = group; -+ return STATUS_SUCCESS; -+} -+ -+/* marks a cleanup group for shutdown */ -+static void tp_group_shutdown( struct threadpool_group *group ) -+{ -+ group->shutdown = TRUE; -+} -+ -+/* releases a reference to a cleanup group */ -+static BOOL tp_group_release( struct threadpool_group *group ) -+{ -+ if (interlocked_dec( &group->refcount )) -+ return FALSE; -+ -+ TRACE("destroying group %p\n", group); -+ -+ assert( group->shutdown ); -+ assert( list_empty( &group->members ) ); -+ -+ group->cs.DebugInfo->Spare[0] = 0; -+ RtlDeleteCriticalSection( &group->cs ); -+ -+ RtlFreeHeap( GetProcessHeap(), 0, group ); -+ return TRUE; -+} -+ - /* initializes a new threadpool object */ - static void tp_object_initialize( struct threadpool_object *object, struct threadpool *pool, - PVOID userdata, TP_CALLBACK_ENVIRON *environment ) - { -+ BOOL simple_cb = (object->type == TP_OBJECT_TYPE_SIMPLE); -+ - object->refcount = 1; - object->shutdown = FALSE; - - object->pool = pool; -+ object->group = NULL; - object->userdata = userdata; - -+ memset( &object->group_entry, 0, sizeof(object->group_entry) ); -+ object->is_group_member = FALSE; -+ - memset( &object->pool_entry, 0, sizeof(object->pool_entry) ); -+ RtlInitializeConditionVariable( &object->finished_event ); - object->num_pending_callbacks = 0; - object->num_running_callbacks = 0; - - if (environment) -- FIXME("environment not implemented yet\n"); -+ { -+ if (environment->Version != 1) -+ FIXME("unsupported environment version %u\n", environment->Version); -+ -+ object->group = impl_from_TP_CLEANUP_GROUP( environment->CleanupGroup ); -+ -+ WARN("environment not fully implemented yet\n"); -+ } - - /* Increase reference-count on the pool */ - interlocked_inc( &pool->refcount ); - - TRACE("allocated object %p of type %u\n", object, object->type); -+ -+ /* For simple callbacks we have to run tp_object_submit before adding this object -+ * to the cleanup group. As soon as the cleanup group members are released ->shutdown -+ * will be set, and tp_object_submit would fail with an assertion. */ -+ if (simple_cb) -+ tp_object_submit( object ); -+ -+ if (object->group) -+ { -+ struct threadpool_group *group = object->group; -+ interlocked_inc( &group->refcount ); -+ -+ RtlEnterCriticalSection( &group->cs ); -+ list_add_tail( &group->members, &object->group_entry ); -+ object->is_group_member = TRUE; -+ RtlLeaveCriticalSection( &group->cs ); -+ } -+ -+ if (simple_cb) -+ { -+ tp_object_shutdown( object ); -+ tp_object_release( object ); -+ } - } - - /* submits an object to a threadpool */ -@@ -1258,6 +1365,41 @@ out: - RtlLeaveCriticalSection( &pool->cs ); - } - -+static void tp_object_cancel( struct threadpool_object *object ) -+{ -+ struct threadpool *pool = object->pool; -+ LONG pending_callbacks = 0; -+ -+ RtlEnterCriticalSection( &pool->cs ); -+ -+ /* Remove the pending callbacks from the pool */ -+ if (object->num_pending_callbacks) -+ { -+ pending_callbacks = object->num_pending_callbacks; -+ object->num_pending_callbacks = 0; -+ list_remove( &object->pool_entry ); -+ } -+ -+ RtlLeaveCriticalSection( &pool->cs ); -+ -+ /* Release references */ -+ while (pending_callbacks--) -+ tp_object_release( object ); -+} -+ -+static void tp_object_wait( struct threadpool_object *object ) -+{ -+ struct threadpool *pool = object->pool; -+ -+ RtlEnterCriticalSection( &pool->cs ); -+ -+ /* Wait until there are no longer pending or running callbacks */ -+ while (object->num_pending_callbacks || object->num_running_callbacks) -+ RtlSleepConditionVariableCS( &object->finished_event, &pool->cs, NULL ); -+ -+ RtlLeaveCriticalSection( &pool->cs ); -+} -+ - /* mark an object as 'shutdown', submitting is no longer possible */ - static void tp_object_shutdown( struct threadpool_object *object ) - { -@@ -1276,6 +1418,22 @@ static BOOL tp_object_release( struct threadpool_object *object ) - assert( !object->num_pending_callbacks ); - assert( !object->num_running_callbacks ); - -+ /* release reference to the group */ -+ if (object->group) -+ { -+ struct threadpool_group *group = object->group; -+ -+ RtlEnterCriticalSection( &group->cs ); -+ if (object->is_group_member) -+ { -+ list_remove( &object->group_entry ); -+ object->is_group_member = FALSE; -+ } -+ RtlLeaveCriticalSection( &group->cs ); -+ -+ tp_group_release( group ); -+ } -+ - /* release reference to threadpool */ - tp_threadpool_release( object->pool ); - -@@ -1328,6 +1486,8 @@ static void CALLBACK threadpool_worker_proc( void *param ) - RtlEnterCriticalSection( &pool->cs ); - pool->num_busy_workers--; - object->num_running_callbacks--; -+ if (!object->num_pending_callbacks && !object->num_running_callbacks) -+ RtlWakeAllConditionVariable( &object->finished_event ); - tp_object_release( object ); - } - -@@ -1348,6 +1508,20 @@ static void CALLBACK threadpool_worker_proc( void *param ) - tp_threadpool_release( pool ); - } - -+ -+/*********************************************************************** -+ * TpAllocCleanupGroup (NTDLL.@) -+ */ -+NTSTATUS WINAPI TpAllocCleanupGroup( TP_CLEANUP_GROUP **out ) -+{ -+ TRACE("%p\n", out); -+ -+ if (!out) -+ return STATUS_ACCESS_VIOLATION; -+ -+ return tp_group_alloc( (struct threadpool_group **)out ); -+} -+ - /*********************************************************************** - * TpAllocPool (NTDLL.@) - */ -@@ -1365,6 +1539,85 @@ NTSTATUS WINAPI TpAllocPool( TP_POOL **out, PVOID reserved ) - } - - /*********************************************************************** -+ * TpReleaseCleanupGroup (NTDLL.@) -+ */ -+VOID WINAPI TpReleaseCleanupGroup( TP_CLEANUP_GROUP *group ) -+{ -+ struct threadpool_group *this = impl_from_TP_CLEANUP_GROUP( group ); -+ TRACE("%p\n", group); -+ -+ if (this) -+ { -+ tp_group_shutdown( this ); -+ tp_group_release( this ); -+ } -+} -+ -+/*********************************************************************** -+ * TpReleaseCleanupGroupMembers (NTDLL.@) -+ */ -+VOID WINAPI TpReleaseCleanupGroupMembers( TP_CLEANUP_GROUP *group, BOOL cancel_pending, PVOID userdata ) -+{ -+ struct threadpool_group *this = impl_from_TP_CLEANUP_GROUP( group ); -+ struct threadpool_object *object, *next; -+ struct list members; -+ -+ TRACE("%p %d %p\n", group, cancel_pending, userdata); -+ -+ if (!this) -+ return; -+ -+ RtlEnterCriticalSection( &this->cs ); -+ -+ /* Unset group, increase references, and mark objects for shutdown */ -+ LIST_FOR_EACH_ENTRY_SAFE( object, next, &this->members, struct threadpool_object, group_entry ) -+ { -+ assert( object->group == this ); -+ assert( object->is_group_member ); -+ -+ /* Simple callbacks are very special. The user doesn't hold any reference, so -+ * they would be released too early. Add one additional temporary reference. */ -+ if (object->type == TP_OBJECT_TYPE_SIMPLE) -+ { -+ if (interlocked_inc( &object->refcount ) == 1) -+ { -+ /* Object is basically already destroyed, but group reference -+ * was not deleted yet. We can safely ignore this object. */ -+ interlocked_dec( &object->refcount ); -+ list_remove( &object->group_entry ); -+ object->is_group_member = FALSE; -+ continue; -+ } -+ } -+ -+ object->is_group_member = FALSE; -+ tp_object_shutdown( object ); -+ } -+ -+ /* Move members to a local list */ -+ list_init( &members ); -+ list_move_tail( &members, &this->members ); -+ -+ RtlLeaveCriticalSection( &this->cs ); -+ -+ /* Cancel pending callbacks if requested */ -+ if (cancel_pending) -+ { -+ LIST_FOR_EACH_ENTRY( object, &members, struct threadpool_object, group_entry ) -+ { -+ tp_object_cancel( object ); -+ } -+ } -+ -+ /* Wait for remaining callbacks to finish */ -+ LIST_FOR_EACH_ENTRY_SAFE( object, next, &members, struct threadpool_object, group_entry ) -+ { -+ tp_object_wait( object ); -+ tp_object_release( object ); -+ } -+} -+ -+/*********************************************************************** - * TpReleasePool (NTDLL.@) - */ - VOID WINAPI TpReleasePool( TP_POOL *pool ) -@@ -1441,9 +1694,5 @@ NTSTATUS WINAPI TpSimpleTryPost( PTP_SIMPLE_CALLBACK callback, PVOID userdata, - object->u.simple.callback = callback; - tp_object_initialize( object, pool, userdata, environment ); - -- tp_object_submit( object ); -- -- tp_object_shutdown( object ); -- tp_object_release( object ); - return STATUS_SUCCESS; - } --- -2.3.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0004-ntdll-tests-Add-tests-for-TpAllocCleanupGroup-and-re.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0004-ntdll-tests-Add-tests-for-TpAllocCleanupGroup-and-re.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0004-ntdll-tests-Add-tests-for-TpAllocCleanupGroup-and-re.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0004-ntdll-tests-Add-tests-for-TpAllocCleanupGroup-and-re.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,102 +0,0 @@ -From f8532f86e968848db4b8e4f87d3556dfcaa753e8 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Wed, 4 Mar 2015 01:19:41 +0100 -Subject: ntdll/tests: Add tests for TpAllocCleanupGroup and related functions. - ---- - dlls/ntdll/tests/threadpool.c | 48 +++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 48 insertions(+) - -diff --git a/dlls/ntdll/tests/threadpool.c b/dlls/ntdll/tests/threadpool.c -index 6f164e9..effa7fc 100644 ---- a/dlls/ntdll/tests/threadpool.c -+++ b/dlls/ntdll/tests/threadpool.c -@@ -21,7 +21,10 @@ - #include "ntdll_test.h" - - static HMODULE hntdll = 0; -+static NTSTATUS (WINAPI *pTpAllocCleanupGroup)(TP_CLEANUP_GROUP **); - static NTSTATUS (WINAPI *pTpAllocPool)(TP_POOL **,PVOID); -+static VOID (WINAPI *pTpReleaseCleanupGroup)(TP_CLEANUP_GROUP *); -+static VOID (WINAPI *pTpReleaseCleanupGroupMembers)(TP_CLEANUP_GROUP *,BOOL,PVOID); - static VOID (WINAPI *pTpReleasePool)(TP_POOL *); - static NTSTATUS (WINAPI *pTpSimpleTryPost)(PTP_SIMPLE_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); - -@@ -42,7 +45,10 @@ static BOOL init_threadpool(void) - return FALSE; - } - -+ NTDLL_GET_PROC(TpAllocCleanupGroup); - NTDLL_GET_PROC(TpAllocPool); -+ NTDLL_GET_PROC(TpReleaseCleanupGroup); -+ NTDLL_GET_PROC(TpReleaseCleanupGroupMembers); - NTDLL_GET_PROC(TpReleasePool); - NTDLL_GET_PROC(TpSimpleTryPost); - -@@ -65,13 +71,23 @@ static void CALLBACK simple_cb(TP_CALLBACK_INSTANCE *instance, void *userdata) - ReleaseSemaphore(semaphore, 1, NULL); - } - -+static void CALLBACK simple2_cb(TP_CALLBACK_INSTANCE *instance, void *userdata) -+{ -+ trace("Running simple2 callback\n"); -+ Sleep(100); -+ InterlockedIncrement((LONG *)userdata); -+} -+ - static void test_tp_simple(void) - { - TP_CALLBACK_ENVIRON environment; -+ TP_CLEANUP_GROUP *group; - HANDLE semaphore; - NTSTATUS status; - TP_POOL *pool; -+ LONG userdata; - DWORD result; -+ int i; - - semaphore = CreateSemaphoreA(NULL, 0, 1, NULL); - ok(semaphore != NULL, "CreateSemaphoreA failed %u\n", GetLastError()); -@@ -114,7 +130,39 @@ static void test_tp_simple(void) - ok(result == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", result); - } - -+ /* allocate a cleanup group for synchronization */ -+ group = NULL; -+ status = pTpAllocCleanupGroup(&group); -+ ok(!status, "TpAllocCleanupGroup failed with status %x\n", status); -+ ok(group != NULL, "expected pool != NULL\n"); -+ -+ /* use cleanup group to wait for a simple callback */ -+ userdata = 0; -+ memset(&environment, 0, sizeof(environment)); -+ environment.Version = 1; -+ environment.Pool = pool; -+ environment.CleanupGroup = group; -+ status = pTpSimpleTryPost(simple2_cb, &userdata, &environment); -+ ok(!status, "TpSimpleTryPost failed with status %x\n", status); -+ pTpReleaseCleanupGroupMembers(group, FALSE, NULL); -+ ok(userdata == 1, "expected userdata = 1, got %u\n", userdata); -+ -+ /* test cancellation of pending simple callbacks */ -+ userdata = 0; -+ memset(&environment, 0, sizeof(environment)); -+ environment.Version = 1; -+ environment.Pool = pool; -+ environment.CleanupGroup = group; -+ for (i = 0; i < 100; i++) -+ { -+ status = pTpSimpleTryPost(simple2_cb, &userdata, &environment); -+ ok(!status, "TpSimpleTryPost failed with status %x\n", status); -+ } -+ pTpReleaseCleanupGroupMembers(group, TRUE, NULL); -+ ok(userdata < 100, "expected userdata < 100, got %u\n", userdata); -+ - /* cleanup */ -+ pTpReleaseCleanupGroup(group); - pTpReleasePool(pool); - CloseHandle(semaphore); - } --- -2.3.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0005-ntdll-Implement-threadpool-work-item-functions.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0005-ntdll-Implement-threadpool-work-item-functions.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0005-ntdll-Implement-threadpool-work-item-functions.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0005-ntdll-Implement-threadpool-work-item-functions.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,178 +0,0 @@ -From 20e50fe1839e89ef32df751130d5fc7b20ea095a Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Wed, 4 Mar 2015 01:30:57 +0100 -Subject: ntdll: Implement threadpool work item functions. - ---- - dlls/ntdll/ntdll.spec | 4 +++ - dlls/ntdll/threadpool.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++- - 2 files changed, 97 insertions(+), 1 deletion(-) - -diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec -index 7c01d43..2180ea9 100644 ---- a/dlls/ntdll/ntdll.spec -+++ b/dlls/ntdll/ntdll.spec -@@ -970,12 +970,16 @@ - @ stdcall RtlxUnicodeStringToOemSize(ptr) RtlUnicodeStringToOemSize - @ stdcall TpAllocCleanupGroup(ptr) - @ stdcall TpAllocPool(ptr ptr) -+@ stdcall TpAllocWork(ptr ptr ptr ptr) -+@ stdcall TpPostWork(ptr) - @ stdcall TpReleaseCleanupGroup(ptr) - @ stdcall TpReleaseCleanupGroupMembers(ptr long ptr) - @ stdcall TpReleasePool(ptr) -+@ stdcall TpReleaseWork(ptr) - @ stdcall TpSetPoolMaxThreads(ptr long) - @ stdcall TpSetPoolMinThreads(ptr long) - @ stdcall TpSimpleTryPost(ptr ptr ptr) -+@ stdcall TpWaitForWork(ptr long) - @ stdcall -ret64 VerSetConditionMask(int64 long long) - @ stdcall WinSqmIsOptedIn() - @ stdcall ZwAcceptConnectPort(ptr long ptr long long ptr) NtAcceptConnectPort -diff --git a/dlls/ntdll/threadpool.c b/dlls/ntdll/threadpool.c -index 9e0efee..e6bb626 100644 ---- a/dlls/ntdll/threadpool.c -+++ b/dlls/ntdll/threadpool.c -@@ -156,7 +156,8 @@ struct threadpool - - enum threadpool_objtype - { -- TP_OBJECT_TYPE_SIMPLE -+ TP_OBJECT_TYPE_SIMPLE, -+ TP_OBJECT_TYPE_WORK - }; - - /* internal threadpool object representation */ -@@ -184,6 +185,10 @@ struct threadpool_object - { - PTP_SIMPLE_CALLBACK callback; - } simple; -+ struct -+ { -+ PTP_WORK_CALLBACK callback; -+ } work; - } u; - }; - -@@ -202,6 +207,13 @@ static inline struct threadpool *impl_from_TP_POOL( TP_POOL *pool ) - return (struct threadpool *)pool; - } - -+static inline struct threadpool_object *impl_from_TP_WORK( TP_WORK *work ) -+{ -+ struct threadpool_object *object = (struct threadpool_object *)work; -+ assert( !object || object->type == TP_OBJECT_TYPE_WORK ); -+ return object; -+} -+ - static inline struct threadpool_group *impl_from_TP_CLEANUP_GROUP( TP_CLEANUP_GROUP *group ) - { - return (struct threadpool_group *)group; -@@ -1485,6 +1497,15 @@ static void CALLBACK threadpool_worker_proc( void *param ) - break; - } - -+ case TP_OBJECT_TYPE_WORK: -+ { -+ TRACE( "executing work callback %p(NULL, %p, %p)\n", -+ object->u.work.callback, object->userdata, object ); -+ object->u.work.callback( NULL, object->userdata, (TP_WORK *)object ); -+ TRACE( "callback %p returned\n", object->u.work.callback ); -+ break; -+ } -+ - default: - assert(0); - break; -@@ -1546,6 +1567,46 @@ NTSTATUS WINAPI TpAllocPool( TP_POOL **out, PVOID reserved ) - } - - /*********************************************************************** -+ * TpAllocWork (NTDLL.@) -+ */ -+NTSTATUS WINAPI TpAllocWork( TP_WORK **out, PTP_WORK_CALLBACK callback, PVOID userdata, -+ TP_CALLBACK_ENVIRON *environment ) -+{ -+ struct threadpool_object *object; -+ struct threadpool *pool; -+ -+ TRACE("%p %p %p %p\n", out, callback, userdata, environment); -+ -+ if (!(pool = get_threadpool( environment ))) -+ return STATUS_NO_MEMORY; -+ -+ object = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*object) ); -+ if (!object) -+ return STATUS_NO_MEMORY; -+ -+ object->type = TP_OBJECT_TYPE_WORK; -+ object->u.work.callback = callback; -+ tp_object_initialize( object, pool, userdata, environment ); -+ -+ *out = (TP_WORK *)object; -+ return STATUS_SUCCESS; -+} -+ -+/*********************************************************************** -+ * TpPostWork (NTDLL.@) -+ */ -+VOID WINAPI TpPostWork( TP_WORK *work ) -+{ -+ struct threadpool_object *this = impl_from_TP_WORK( work ); -+ TRACE("%p\n", work); -+ -+ if (this) -+ { -+ tp_object_submit( this ); -+ } -+} -+ -+/*********************************************************************** - * TpReleaseCleanupGroup (NTDLL.@) - */ - VOID WINAPI TpReleaseCleanupGroup( TP_CLEANUP_GROUP *group ) -@@ -1640,6 +1701,21 @@ VOID WINAPI TpReleasePool( TP_POOL *pool ) - } - - /*********************************************************************** -+ * TpReleaseWork (NTDLL.@) -+ */ -+VOID WINAPI TpReleaseWork( TP_WORK *work ) -+{ -+ struct threadpool_object *this = impl_from_TP_WORK( work ); -+ TRACE("%p\n", work); -+ -+ if (this) -+ { -+ tp_object_shutdown( this ); -+ tp_object_release( this ); -+ } -+} -+ -+/*********************************************************************** - * TpSetPoolMaxThreads (NTDLL.@) - */ - VOID WINAPI TpSetPoolMaxThreads( TP_POOL *pool, DWORD maximum ) -@@ -1698,3 +1774,19 @@ NTSTATUS WINAPI TpSimpleTryPost( PTP_SIMPLE_CALLBACK callback, PVOID userdata, - - return STATUS_SUCCESS; - } -+ -+/*********************************************************************** -+ * TpWaitForWork (NTDLL.@) -+ */ -+VOID WINAPI TpWaitForWork( TP_WORK *work, BOOL cancel_pending ) -+{ -+ struct threadpool_object *this = impl_from_TP_WORK( work ); -+ TRACE("%p %d\n", work, cancel_pending); -+ -+ if (this) -+ { -+ if (cancel_pending) -+ tp_object_cancel( this ); -+ tp_object_wait( this ); -+ } -+} --- -2.3.5 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0006-ntdll-tests-Add-basic-tests-for-threadpool-work-item.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0006-ntdll-tests-Add-basic-tests-for-threadpool-work-item.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0006-ntdll-tests-Add-basic-tests-for-threadpool-work-item.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0006-ntdll-tests-Add-basic-tests-for-threadpool-work-item.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,108 +0,0 @@ -From a0ad4f0f9186dbce96da918255f2c0cd5f4aae7f Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Wed, 4 Mar 2015 01:38:23 +0100 -Subject: ntdll/tests: Add basic tests for threadpool work items. - ---- - dlls/ntdll/tests/threadpool.c | 59 +++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 59 insertions(+) - -diff --git a/dlls/ntdll/tests/threadpool.c b/dlls/ntdll/tests/threadpool.c -index effa7fc..420979c 100644 ---- a/dlls/ntdll/tests/threadpool.c -+++ b/dlls/ntdll/tests/threadpool.c -@@ -23,10 +23,14 @@ - static HMODULE hntdll = 0; - static NTSTATUS (WINAPI *pTpAllocCleanupGroup)(TP_CLEANUP_GROUP **); - static NTSTATUS (WINAPI *pTpAllocPool)(TP_POOL **,PVOID); -+static NTSTATUS (WINAPI *pTpAllocWork)(TP_WORK **,PTP_WORK_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); -+static VOID (WINAPI *pTpPostWork)(TP_WORK *); - static VOID (WINAPI *pTpReleaseCleanupGroup)(TP_CLEANUP_GROUP *); - static VOID (WINAPI *pTpReleaseCleanupGroupMembers)(TP_CLEANUP_GROUP *,BOOL,PVOID); - static VOID (WINAPI *pTpReleasePool)(TP_POOL *); -+static VOID (WINAPI *pTpReleaseWork)(TP_WORK *); - static NTSTATUS (WINAPI *pTpSimpleTryPost)(PTP_SIMPLE_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); -+static VOID (WINAPI *pTpWaitForWork)(TP_WORK *,BOOL); - - #define NTDLL_GET_PROC(func) \ - do \ -@@ -47,10 +51,14 @@ static BOOL init_threadpool(void) - - NTDLL_GET_PROC(TpAllocCleanupGroup); - NTDLL_GET_PROC(TpAllocPool); -+ NTDLL_GET_PROC(TpAllocWork); -+ NTDLL_GET_PROC(TpPostWork); - NTDLL_GET_PROC(TpReleaseCleanupGroup); - NTDLL_GET_PROC(TpReleaseCleanupGroupMembers); - NTDLL_GET_PROC(TpReleasePool); -+ NTDLL_GET_PROC(TpReleaseWork); - NTDLL_GET_PROC(TpSimpleTryPost); -+ NTDLL_GET_PROC(TpWaitForWork); - - if (!pTpAllocPool) - { -@@ -167,10 +175,61 @@ static void test_tp_simple(void) - CloseHandle(semaphore); - } - -+static void CALLBACK work_cb(TP_CALLBACK_INSTANCE *instance, void *userdata, TP_WORK *work) -+{ -+ trace("Running work callback\n"); -+ Sleep(10); -+ InterlockedIncrement((LONG *)userdata); -+} -+ -+static void test_tp_work(void) -+{ -+ TP_CALLBACK_ENVIRON environment; -+ TP_WORK *work; -+ TP_POOL *pool; -+ NTSTATUS status; -+ LONG userdata; -+ int i; -+ -+ /* allocate new threadpool */ -+ pool = NULL; -+ status = pTpAllocPool(&pool, NULL); -+ ok(!status, "TpAllocPool failed with status %x\n", status); -+ ok(pool != NULL, "expected pool != NULL\n"); -+ -+ /* allocate new work item */ -+ work = NULL; -+ memset(&environment, 0, sizeof(environment)); -+ environment.Version = 1; -+ environment.Pool = pool; -+ status = pTpAllocWork(&work, work_cb, &userdata, &environment); -+ ok(!status, "TpAllocWork failed with status %x\n", status); -+ ok(work != NULL, "expected work != NULL\n"); -+ -+ /* post 10 identical work items at once */ -+ userdata = 0; -+ for (i = 0; i < 10; i++) -+ pTpPostWork(work); -+ pTpWaitForWork(work, FALSE); -+ ok(userdata == 10, "expected userdata = 10, got %u\n", userdata); -+ -+ /* add more tasks and cancel them immediately */ -+ userdata = 0; -+ for (i = 0; i < 10; i++) -+ pTpPostWork(work); -+ pTpWaitForWork(work, TRUE); -+ ok(userdata < 10, "expected userdata < 10, got %u\n", userdata); -+ -+ /* cleanup */ -+ pTpReleaseWork(work); -+ pTpReleasePool(pool); -+} -+ - START_TEST(threadpool) - { - if (!init_threadpool()) - return; - - test_tp_simple(); -+ test_tp_work(); - } --- -2.3.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0007-ntdll-tests-Add-threadpool-scheduler-tests-for-work-.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0007-ntdll-tests-Add-threadpool-scheduler-tests-for-work-.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0007-ntdll-tests-Add-threadpool-scheduler-tests-for-work-.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0007-ntdll-tests-Add-threadpool-scheduler-tests-for-work-.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,132 +0,0 @@ -From 792ceb3a01f63e523811d42d7a28f6e31a70e2f7 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Wed, 4 Mar 2015 01:45:11 +0100 -Subject: ntdll/tests: Add threadpool scheduler tests for work items. - ---- - dlls/ntdll/tests/threadpool.c | 83 +++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 83 insertions(+) - -diff --git a/dlls/ntdll/tests/threadpool.c b/dlls/ntdll/tests/threadpool.c -index 420979c..1cfd67b 100644 ---- a/dlls/ntdll/tests/threadpool.c -+++ b/dlls/ntdll/tests/threadpool.c -@@ -29,6 +29,7 @@ static VOID (WINAPI *pTpReleaseCleanupGroup)(TP_CLEANUP_GROUP *); - static VOID (WINAPI *pTpReleaseCleanupGroupMembers)(TP_CLEANUP_GROUP *,BOOL,PVOID); - static VOID (WINAPI *pTpReleasePool)(TP_POOL *); - static VOID (WINAPI *pTpReleaseWork)(TP_WORK *); -+static VOID (WINAPI *pTpSetPoolMaxThreads)(TP_POOL *,DWORD); - static NTSTATUS (WINAPI *pTpSimpleTryPost)(PTP_SIMPLE_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); - static VOID (WINAPI *pTpWaitForWork)(TP_WORK *,BOOL); - -@@ -57,6 +58,7 @@ static BOOL init_threadpool(void) - NTDLL_GET_PROC(TpReleaseCleanupGroupMembers); - NTDLL_GET_PROC(TpReleasePool); - NTDLL_GET_PROC(TpReleaseWork); -+ NTDLL_GET_PROC(TpSetPoolMaxThreads); - NTDLL_GET_PROC(TpSimpleTryPost); - NTDLL_GET_PROC(TpWaitForWork); - -@@ -182,6 +184,13 @@ static void CALLBACK work_cb(TP_CALLBACK_INSTANCE *instance, void *userdata, TP_ - InterlockedIncrement((LONG *)userdata); - } - -+static void CALLBACK work2_cb(TP_CALLBACK_INSTANCE *instance, void *userdata, TP_WORK *work) -+{ -+ trace("Running work2 callback\n"); -+ Sleep(10); -+ InterlockedExchangeAdd((LONG *)userdata, 0x10000); -+} -+ - static void test_tp_work(void) - { - TP_CALLBACK_ENVIRON environment; -@@ -225,6 +234,79 @@ static void test_tp_work(void) - pTpReleasePool(pool); - } - -+static void test_tp_work_scheduler(void) -+{ -+ TP_CALLBACK_ENVIRON environment; -+ TP_CLEANUP_GROUP *group; -+ TP_WORK *work, *work2; -+ TP_POOL *pool; -+ NTSTATUS status; -+ LONG userdata; -+ int i; -+ -+ /* allocate new threadpool */ -+ pool = NULL; -+ status = pTpAllocPool(&pool, NULL); -+ ok(!status, "TpAllocPool failed with status %x\n", status); -+ ok(pool != NULL, "expected pool != NULL\n"); -+ -+ /* we limit the pool to a single thread */ -+ pTpSetPoolMaxThreads(pool, 1); -+ -+ /* create a cleanup group */ -+ group = NULL; -+ status = pTpAllocCleanupGroup(&group); -+ ok(!status, "TpAllocCleanupGroup failed with status %x\n", status); -+ ok(group != NULL, "expected pool != NULL\n"); -+ -+ /* the first work item has no cleanup group associated */ -+ work = NULL; -+ memset(&environment, 0, sizeof(environment)); -+ environment.Version = 1; -+ environment.Pool = pool; -+ status = pTpAllocWork(&work, work_cb, &userdata, &environment); -+ ok(!status, "TpAllocWork failed with status %x\n", status); -+ ok(work != NULL, "expected work != NULL\n"); -+ -+ /* allocate a second work item with a cleanup group */ -+ work2 = NULL; -+ memset(&environment, 0, sizeof(environment)); -+ environment.Version = 1; -+ environment.Pool = pool; -+ environment.CleanupGroup = group; -+ status = pTpAllocWork(&work2, work2_cb, &userdata, &environment); -+ ok(!status, "TpAllocWork failed with status %x\n", status); -+ ok(work2 != NULL, "expected work2 != NULL\n"); -+ -+ /* the 'work' callbacks are not blocking execution of 'work2' callbacks */ -+ userdata = 0; -+ for (i = 0; i < 10; i++) -+ pTpPostWork(work); -+ for (i = 0; i < 10; i++) -+ pTpPostWork(work2); -+ Sleep(30); -+ pTpWaitForWork(work, TRUE); -+ pTpWaitForWork(work2, TRUE); -+ ok(userdata & 0xffff, "expected userdata & 0xffff != 0, got %u\n", userdata & 0xffff); -+ ok(userdata >> 16, "expected userdata >> 16 != 0, got %u\n", userdata >> 16); -+ -+ /* test ReleaseCleanupGroupMembers on a work item */ -+ userdata = 0; -+ for (i = 0; i < 100; i++) -+ pTpPostWork(work); -+ for (i = 0; i < 10; i++) -+ pTpPostWork(work2); -+ pTpReleaseCleanupGroupMembers(group, FALSE, NULL); -+ pTpWaitForWork(work, TRUE); -+ ok((userdata & 0xffff) < 100, "expected userdata & 0xffff < 100, got %u\n", userdata & 0xffff); -+ ok((userdata >> 16) == 10, "expected userdata >> 16 == 10, got %u\n", userdata >> 16); -+ -+ /* cleanup */ -+ pTpReleaseWork(work); -+ pTpReleaseCleanupGroup(group); -+ pTpReleasePool(pool); -+} -+ - START_TEST(threadpool) - { - if (!init_threadpool()) -@@ -232,4 +314,5 @@ START_TEST(threadpool) - - test_tp_simple(); - test_tp_work(); -+ test_tp_work_scheduler(); - } --- -2.3.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0008-ntdll-Add-support-for-threadpool-group-cancel-callba.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0008-ntdll-Add-support-for-threadpool-group-cancel-callba.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0008-ntdll-Add-support-for-threadpool-group-cancel-callba.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0008-ntdll-Add-support-for-threadpool-group-cancel-callba.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,82 +0,0 @@ -From 624d6ab353109a57dfe0d80053795ef64b6adc3e Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Wed, 4 Mar 2015 06:57:53 +0100 -Subject: ntdll: Add support for threadpool group cancel callback. - ---- - dlls/ntdll/threadpool.c | 17 ++++++++++++++--- - 1 file changed, 14 insertions(+), 3 deletions(-) - -diff --git a/dlls/ntdll/threadpool.c b/dlls/ntdll/threadpool.c -index 1989d56..e30d45c 100644 ---- a/dlls/ntdll/threadpool.c -+++ b/dlls/ntdll/threadpool.c -@@ -170,6 +170,7 @@ struct threadpool_object - struct threadpool *pool; - struct threadpool_group *group; - PVOID userdata; -+ PTP_CLEANUP_GROUP_CANCEL_CALLBACK group_cancel_callback; - /* information about the group, locked via .group->cs */ - struct list group_entry; - BOOL is_group_member; -@@ -1290,6 +1291,7 @@ static void tp_object_initialize( struct threadpool_object *object, struct threa - object->pool = pool; - object->group = NULL; - object->userdata = userdata; -+ object->group_cancel_callback = NULL; - - memset( &object->group_entry, 0, sizeof(object->group_entry) ); - object->is_group_member = FALSE; -@@ -1305,6 +1307,7 @@ static void tp_object_initialize( struct threadpool_object *object, struct threa - FIXME("unsupported environment version %u\n", environment->Version); - - object->group = impl_from_TP_CLEANUP_GROUP( environment->CleanupGroup ); -+ object->group_cancel_callback = environment->CleanupGroupCancelCallback; - - WARN("environment not fully implemented yet\n"); - } -@@ -1377,7 +1380,7 @@ out: - RtlLeaveCriticalSection( &pool->cs ); - } - --static void tp_object_cancel( struct threadpool_object *object ) -+static void tp_object_cancel( struct threadpool_object *object, BOOL group_cancel, PVOID userdata ) - { - struct threadpool *pool = object->pool; - LONG pending_callbacks = 0; -@@ -1394,6 +1397,14 @@ static void tp_object_cancel( struct threadpool_object *object ) - - RtlLeaveCriticalSection( &pool->cs ); - -+ /* Execute group cancellation callback if defined, and if this was actually a group cancel. */ -+ if (pending_callbacks && group_cancel && object->group_cancel_callback) -+ { -+ TRACE( "executing group cancel callback %p(%p, %p)\n", object->group_cancel_callback, object, userdata ); -+ object->group_cancel_callback( object, userdata ); -+ TRACE( "callback %p returned\n", object->group_cancel_callback ); -+ } -+ - /* Release references */ - while (pending_callbacks--) - tp_object_release( object ); -@@ -1673,7 +1684,7 @@ VOID WINAPI TpReleaseCleanupGroupMembers( TP_CLEANUP_GROUP *group, BOOL cancel_p - { - LIST_FOR_EACH_ENTRY( object, &members, struct threadpool_object, group_entry ) - { -- tp_object_cancel( object ); -+ tp_object_cancel( object, TRUE, userdata ); - } - } - -@@ -1791,7 +1802,7 @@ VOID WINAPI TpWaitForWork( TP_WORK *work, BOOL cancel_pending ) - if (this) - { - if (cancel_pending) -- tp_object_cancel( this ); -+ tp_object_cancel( this, FALSE, NULL ); - tp_object_wait( this ); - } - } --- -2.3.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0009-ntdll-Add-support-for-threadpool-finalization-callba.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0009-ntdll-Add-support-for-threadpool-finalization-callba.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0009-ntdll-Add-support-for-threadpool-finalization-callba.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0009-ntdll-Add-support-for-threadpool-finalization-callba.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -From d92b2f79160613f6d2f258cbf98624fee30844a8 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Wed, 4 Mar 2015 07:03:15 +0100 -Subject: ntdll: Add support for threadpool finalization callback. - ---- - dlls/ntdll/threadpool.c | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/dlls/ntdll/threadpool.c b/dlls/ntdll/threadpool.c -index e30d45c..927d31c 100644 ---- a/dlls/ntdll/threadpool.c -+++ b/dlls/ntdll/threadpool.c -@@ -171,6 +171,7 @@ struct threadpool_object - struct threadpool_group *group; - PVOID userdata; - PTP_CLEANUP_GROUP_CANCEL_CALLBACK group_cancel_callback; -+ PTP_SIMPLE_CALLBACK finalization_callback; - /* information about the group, locked via .group->cs */ - struct list group_entry; - BOOL is_group_member; -@@ -1292,6 +1293,7 @@ static void tp_object_initialize( struct threadpool_object *object, struct threa - object->group = NULL; - object->userdata = userdata; - object->group_cancel_callback = NULL; -+ object->finalization_callback = NULL; - - memset( &object->group_entry, 0, sizeof(object->group_entry) ); - object->is_group_member = FALSE; -@@ -1308,6 +1310,7 @@ static void tp_object_initialize( struct threadpool_object *object, struct threa - - object->group = impl_from_TP_CLEANUP_GROUP( environment->CleanupGroup ); - object->group_cancel_callback = environment->CleanupGroupCancelCallback; -+ object->finalization_callback = environment->FinalizationCallback; - - WARN("environment not fully implemented yet\n"); - } -@@ -1515,6 +1518,15 @@ static void CALLBACK threadpool_worker_proc( void *param ) - break; - } - -+ /* Execute finalization callback */ -+ if (object->finalization_callback) -+ { -+ TRACE( "executing finalization callback %p(NULL, %p)\n", -+ object->finalization_callback, object->userdata ); -+ object->finalization_callback( NULL, object->userdata ); -+ TRACE( "callback %p returned\n", object->finalization_callback ); -+ } -+ - RtlEnterCriticalSection( &pool->cs ); - pool->num_busy_workers--; - object->num_running_callbacks--; --- -2.3.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0010-ntdll-Implement-threadpool-RaceDll-environment-varia.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0010-ntdll-Implement-threadpool-RaceDll-environment-varia.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0010-ntdll-Implement-threadpool-RaceDll-environment-varia.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0010-ntdll-Implement-threadpool-RaceDll-environment-varia.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ -From a2fdd577db91938092d4c38d16a469ddf46189fb Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Wed, 4 Mar 2015 07:07:07 +0100 -Subject: ntdll: Implement threadpool RaceDll environment variable. - ---- - dlls/ntdll/threadpool.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/dlls/ntdll/threadpool.c b/dlls/ntdll/threadpool.c -index 927d31c..47f6f6f 100644 ---- a/dlls/ntdll/threadpool.c -+++ b/dlls/ntdll/threadpool.c -@@ -172,6 +172,7 @@ struct threadpool_object - PVOID userdata; - PTP_CLEANUP_GROUP_CANCEL_CALLBACK group_cancel_callback; - PTP_SIMPLE_CALLBACK finalization_callback; -+ HMODULE race_dll; - /* information about the group, locked via .group->cs */ - struct list group_entry; - BOOL is_group_member; -@@ -1294,6 +1295,7 @@ static void tp_object_initialize( struct threadpool_object *object, struct threa - object->userdata = userdata; - object->group_cancel_callback = NULL; - object->finalization_callback = NULL; -+ object->race_dll = NULL; - - memset( &object->group_entry, 0, sizeof(object->group_entry) ); - object->is_group_member = FALSE; -@@ -1311,10 +1313,15 @@ static void tp_object_initialize( struct threadpool_object *object, struct threa - object->group = impl_from_TP_CLEANUP_GROUP( environment->CleanupGroup ); - object->group_cancel_callback = environment->CleanupGroupCancelCallback; - object->finalization_callback = environment->FinalizationCallback; -+ object->race_dll = environment->RaceDll; - - WARN("environment not fully implemented yet\n"); - } - -+ /* Increase dll refcount */ -+ if (object->race_dll) -+ LdrAddRefDll( 0, object->race_dll ); -+ - /* Increase reference-count on the pool */ - interlocked_inc( &pool->refcount ); - -@@ -1463,6 +1470,10 @@ static BOOL tp_object_release( struct threadpool_object *object ) - /* release reference to threadpool */ - tp_threadpool_release( object->pool ); - -+ /* release reference to library */ -+ if (object->race_dll) -+ LdrUnloadDll( object->race_dll ); -+ - RtlFreeHeap( GetProcessHeap(), 0, object ); - return TRUE; - } --- -2.3.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0011-ntdll-Implement-TpCallbackMayRunLong-and-instance-st.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0011-ntdll-Implement-TpCallbackMayRunLong-and-instance-st.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0011-ntdll-Implement-TpCallbackMayRunLong-and-instance-st.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0011-ntdll-Implement-TpCallbackMayRunLong-and-instance-st.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,211 +0,0 @@ -From 11233cc79c1790974d7cb401e64f9f8dcc94e1f3 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Wed, 4 Mar 2015 07:25:35 +0100 -Subject: ntdll: Implement TpCallbackMayRunLong and instance structure. - ---- - dlls/ntdll/ntdll.spec | 1 + - dlls/ntdll/threadpool.c | 103 +++++++++++++++++++++++++++++++++++++++++++----- - 2 files changed, 94 insertions(+), 10 deletions(-) - -diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec -index 96edd67..b7f1555 100644 ---- a/dlls/ntdll/ntdll.spec -+++ b/dlls/ntdll/ntdll.spec -@@ -971,6 +971,7 @@ - @ stdcall TpAllocCleanupGroup(ptr) - @ stdcall TpAllocPool(ptr ptr) - @ stdcall TpAllocWork(ptr ptr ptr ptr) -+@ stdcall TpCallbackMayRunLong(ptr) - @ stdcall TpPostWork(ptr) - @ stdcall TpReleaseCleanupGroup(ptr) - @ stdcall TpReleaseCleanupGroupMembers(ptr long ptr) -diff --git a/dlls/ntdll/threadpool.c b/dlls/ntdll/threadpool.c -index 47f6f6f..d1733c8 100644 ---- a/dlls/ntdll/threadpool.c -+++ b/dlls/ntdll/threadpool.c -@@ -172,6 +172,7 @@ struct threadpool_object - PVOID userdata; - PTP_CLEANUP_GROUP_CANCEL_CALLBACK group_cancel_callback; - PTP_SIMPLE_CALLBACK finalization_callback; -+ BOOL may_run_long; - HMODULE race_dll; - /* information about the group, locked via .group->cs */ - struct list group_entry; -@@ -195,6 +196,14 @@ struct threadpool_object - } u; - }; - -+/* internal threadpool instance representation */ -+struct threadpool_instance -+{ -+ struct threadpool_object *object; -+ DWORD threadid; -+ BOOL may_run_long; -+}; -+ - /* internal threadpool group representation */ - struct threadpool_group - { -@@ -222,6 +231,11 @@ static inline struct threadpool_group *impl_from_TP_CLEANUP_GROUP( TP_CLEANUP_GR - return (struct threadpool_group *)group; - } - -+static inline struct threadpool_instance *impl_from_TP_CALLBACK_INSTANCE( TP_CALLBACK_INSTANCE *instance ) -+{ -+ return (struct threadpool_instance *)instance; -+} -+ - static void CALLBACK threadpool_worker_proc( void *param ); - static void tp_object_submit( struct threadpool_object *object ); - static void tp_object_shutdown( struct threadpool_object *object ); -@@ -1295,6 +1309,7 @@ static void tp_object_initialize( struct threadpool_object *object, struct threa - object->userdata = userdata; - object->group_cancel_callback = NULL; - object->finalization_callback = NULL; -+ object->may_run_long = 0; - object->race_dll = NULL; - - memset( &object->group_entry, 0, sizeof(object->group_entry) ); -@@ -1313,9 +1328,14 @@ static void tp_object_initialize( struct threadpool_object *object, struct threa - object->group = impl_from_TP_CLEANUP_GROUP( environment->CleanupGroup ); - object->group_cancel_callback = environment->CleanupGroupCancelCallback; - object->finalization_callback = environment->FinalizationCallback; -+ object->may_run_long = environment->u.s.LongFunction != 0; - object->race_dll = environment->RaceDll; - -- WARN("environment not fully implemented yet\n"); -+ if (environment->ActivationContext) -+ FIXME("activation context not supported yet\n"); -+ -+ if (environment->u.s.Persistent) -+ FIXME("persistent thread support not supported yet\n"); - } - - /* Increase dll refcount */ -@@ -1478,9 +1498,57 @@ static BOOL tp_object_release( struct threadpool_object *object ) - return TRUE; - } - -+/* initializes a threadpool instance structure */ -+static void tp_instance_initialize( struct threadpool_instance *instance, struct threadpool_object *object ) -+{ -+ instance->object = object; -+ instance->threadid = GetCurrentThreadId(); -+ instance->may_run_long = object->may_run_long; -+} -+ -+/* hint for the threadpool that the execution might take long, spawn additional workers */ -+static BOOL tp_instance_may_run_long( struct threadpool_instance *instance ) -+{ -+ struct threadpool_object *object; -+ struct threadpool *pool; -+ NTSTATUS status = STATUS_SUCCESS; -+ -+ if (instance->threadid != GetCurrentThreadId()) -+ { -+ ERR("called from wrong thread, ignoring\n"); -+ return FALSE; -+ } -+ -+ if (instance->may_run_long) -+ return TRUE; -+ -+ object = instance->object; -+ pool = object->pool; -+ RtlEnterCriticalSection( &pool->cs ); -+ -+ if (pool->num_busy_workers >= pool->num_workers && pool->num_workers < pool->max_workers) -+ { -+ HANDLE thread; -+ status = RtlCreateUserThread( GetCurrentProcess(), NULL, FALSE, NULL, 0, 0, -+ threadpool_worker_proc, pool, &thread, NULL ); -+ if (status == STATUS_SUCCESS) -+ { -+ interlocked_inc( &pool->refcount ); -+ pool->num_workers++; -+ NtClose( thread ); -+ } -+ } -+ -+ RtlLeaveCriticalSection( &pool->cs ); -+ instance->may_run_long = TRUE; -+ return !status; -+} -+ - /* threadpool worker function */ - static void CALLBACK threadpool_worker_proc( void *param ) - { -+ struct threadpool_instance instance; -+ TP_CALLBACK_INSTANCE *cb_instance = (TP_CALLBACK_INSTANCE *)&instance; - struct threadpool *pool = param; - LARGE_INTEGER timeout; - struct list *ptr; -@@ -1503,23 +1571,24 @@ static void CALLBACK threadpool_worker_proc( void *param ) - object->num_running_callbacks++; - pool->num_busy_workers++; - RtlLeaveCriticalSection( &pool->cs ); -+ tp_instance_initialize( &instance, object ); - - switch (object->type) - { - case TP_OBJECT_TYPE_SIMPLE: - { -- TRACE( "executing simple callback %p(NULL, %p)\n", -- object->u.simple.callback, object->userdata ); -- object->u.simple.callback( NULL, object->userdata ); -+ TRACE( "executing simple callback %p(%p, %p)\n", -+ object->u.simple.callback, cb_instance, object->userdata ); -+ object->u.simple.callback( cb_instance, object->userdata ); - TRACE( "callback %p returned\n", object->u.simple.callback ); - break; - } - - case TP_OBJECT_TYPE_WORK: - { -- TRACE( "executing work callback %p(NULL, %p, %p)\n", -- object->u.work.callback, object->userdata, object ); -- object->u.work.callback( NULL, object->userdata, (TP_WORK *)object ); -+ TRACE( "executing work callback %p(%p, %p, %p)\n", -+ object->u.work.callback, cb_instance, object->userdata, object ); -+ object->u.work.callback( cb_instance, object->userdata, (TP_WORK *)object ); - TRACE( "callback %p returned\n", object->u.work.callback ); - break; - } -@@ -1532,9 +1601,9 @@ static void CALLBACK threadpool_worker_proc( void *param ) - /* Execute finalization callback */ - if (object->finalization_callback) - { -- TRACE( "executing finalization callback %p(NULL, %p)\n", -- object->finalization_callback, object->userdata ); -- object->finalization_callback( NULL, object->userdata ); -+ TRACE( "executing finalization callback %p(%p, %p)\n", -+ object->finalization_callback, cb_instance, object->userdata ); -+ object->finalization_callback( cb_instance, object->userdata ); - TRACE( "callback %p returned\n", object->finalization_callback ); - } - -@@ -1627,6 +1696,20 @@ NTSTATUS WINAPI TpAllocWork( TP_WORK **out, PTP_WORK_CALLBACK callback, PVOID us - } - - /*********************************************************************** -+ * TpCallbackMayRunLong (NTDLL.@) -+ */ -+NTSTATUS WINAPI TpCallbackMayRunLong( TP_CALLBACK_INSTANCE *instance ) -+{ -+ struct threadpool_instance *this = impl_from_TP_CALLBACK_INSTANCE( instance ); -+ TRACE("%p\n", instance); -+ -+ if (!this) -+ return STATUS_ACCESS_VIOLATION; -+ -+ return tp_instance_may_run_long( this ); -+} -+ -+/*********************************************************************** - * TpPostWork (NTDLL.@) - */ - VOID WINAPI TpPostWork( TP_WORK *work ) --- -2.3.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0012-ntdll-Implement-TpDisassociateCallback.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0012-ntdll-Implement-TpDisassociateCallback.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0012-ntdll-Implement-TpDisassociateCallback.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0012-ntdll-Implement-TpDisassociateCallback.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,112 +0,0 @@ -From 472f35764b63622fd5887ac16194e8b5089f0fc6 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Wed, 4 Mar 2015 07:31:27 +0100 -Subject: ntdll: Implement TpDisassociateCallback. - ---- - dlls/ntdll/ntdll.spec | 1 + - dlls/ntdll/threadpool.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++--- - 2 files changed, 50 insertions(+), 3 deletions(-) - -diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec -index b7f1555..63426c5 100644 ---- a/dlls/ntdll/ntdll.spec -+++ b/dlls/ntdll/ntdll.spec -@@ -972,6 +972,7 @@ - @ stdcall TpAllocPool(ptr ptr) - @ stdcall TpAllocWork(ptr ptr ptr ptr) - @ stdcall TpCallbackMayRunLong(ptr) -+@ stdcall TpDisassociateCallback(ptr) - @ stdcall TpPostWork(ptr) - @ stdcall TpReleaseCleanupGroup(ptr) - @ stdcall TpReleaseCleanupGroupMembers(ptr long ptr) -diff --git a/dlls/ntdll/threadpool.c b/dlls/ntdll/threadpool.c -index d1733c8..4861ba6 100644 ---- a/dlls/ntdll/threadpool.c -+++ b/dlls/ntdll/threadpool.c -@@ -201,6 +201,7 @@ struct threadpool_instance - { - struct threadpool_object *object; - DWORD threadid; -+ BOOL disassociated; - BOOL may_run_long; - }; - -@@ -1503,9 +1504,37 @@ static void tp_instance_initialize( struct threadpool_instance *instance, struct - { - instance->object = object; - instance->threadid = GetCurrentThreadId(); -+ instance->disassociated = FALSE; - instance->may_run_long = object->may_run_long; - } - -+/* disassociates the current thread from the threadpool object */ -+static void tp_instance_disassociate_thread( struct threadpool_instance *instance ) -+{ -+ struct threadpool_object *object; -+ struct threadpool *pool; -+ -+ if (instance->threadid != GetCurrentThreadId()) -+ { -+ ERR("called from wrong thread, ignoring\n"); -+ return; -+ } -+ -+ if (instance->disassociated) -+ return; -+ -+ object = instance->object; -+ pool = object->pool; -+ RtlEnterCriticalSection( &pool->cs ); -+ -+ object->num_running_callbacks--; -+ if (!object->num_pending_callbacks && !object->num_running_callbacks) -+ RtlWakeAllConditionVariable( &object->finished_event ); -+ -+ RtlLeaveCriticalSection( &pool->cs ); -+ instance->disassociated = TRUE; -+} -+ - /* hint for the threadpool that the execution might take long, spawn additional workers */ - static BOOL tp_instance_may_run_long( struct threadpool_instance *instance ) - { -@@ -1609,9 +1638,12 @@ static void CALLBACK threadpool_worker_proc( void *param ) - - RtlEnterCriticalSection( &pool->cs ); - pool->num_busy_workers--; -- object->num_running_callbacks--; -- if (!object->num_pending_callbacks && !object->num_running_callbacks) -- RtlWakeAllConditionVariable( &object->finished_event ); -+ if (!instance.disassociated) -+ { -+ object->num_running_callbacks--; -+ if (!object->num_pending_callbacks && !object->num_running_callbacks) -+ RtlWakeAllConditionVariable( &object->finished_event ); -+ } - tp_object_release( object ); - } - -@@ -1710,6 +1742,20 @@ NTSTATUS WINAPI TpCallbackMayRunLong( TP_CALLBACK_INSTANCE *instance ) - } - - /*********************************************************************** -+ * TpDisassociateCallback (NTDLL.@) -+ */ -+VOID WINAPI TpDisassociateCallback( TP_CALLBACK_INSTANCE *instance ) -+{ -+ struct threadpool_instance *this = impl_from_TP_CALLBACK_INSTANCE( instance ); -+ TRACE("%p\n", instance); -+ -+ if (this) -+ { -+ tp_instance_disassociate_thread( this ); -+ } -+} -+ -+/*********************************************************************** - * TpPostWork (NTDLL.@) - */ - VOID WINAPI TpPostWork( TP_WORK *work ) --- -2.3.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0013-ntdll-Implement-various-TpCallback-OnCompletion-func.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0013-ntdll-Implement-various-TpCallback-OnCompletion-func.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0013-ntdll-Implement-various-TpCallback-OnCompletion-func.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0013-ntdll-Implement-various-TpCallback-OnCompletion-func.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,224 +0,0 @@ -From 16d0eb264d85a90fa7faf1b429dec1f4efe385a2 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Wed, 4 Mar 2015 07:40:02 +0100 -Subject: ntdll: Implement various TpCallback*OnCompletion functions. - ---- - dlls/ntdll/ntdll.spec | 5 ++ - dlls/ntdll/threadpool.c | 153 ++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 158 insertions(+) - -diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec -index 63426c5..6100a7e 100644 ---- a/dlls/ntdll/ntdll.spec -+++ b/dlls/ntdll/ntdll.spec -@@ -971,7 +971,12 @@ - @ stdcall TpAllocCleanupGroup(ptr) - @ stdcall TpAllocPool(ptr ptr) - @ stdcall TpAllocWork(ptr ptr ptr ptr) -+@ stdcall TpCallbackLeaveCriticalSectionOnCompletion(ptr ptr) - @ stdcall TpCallbackMayRunLong(ptr) -+@ stdcall TpCallbackReleaseMutexOnCompletion(ptr long) -+@ stdcall TpCallbackReleaseSemaphoreOnCompletion(ptr long long) -+@ stdcall TpCallbackSetEventOnCompletion(ptr long) -+@ stdcall TpCallbackUnloadDllOnCompletion(ptr long) - @ stdcall TpDisassociateCallback(ptr) - @ stdcall TpPostWork(ptr) - @ stdcall TpReleaseCleanupGroup(ptr) -diff --git a/dlls/ntdll/threadpool.c b/dlls/ntdll/threadpool.c -index 4861ba6..aa2d8e9 100644 ---- a/dlls/ntdll/threadpool.c -+++ b/dlls/ntdll/threadpool.c -@@ -203,6 +203,15 @@ struct threadpool_instance - DWORD threadid; - BOOL disassociated; - BOOL may_run_long; -+ struct -+ { -+ CRITICAL_SECTION *critical_section; -+ HANDLE mutex; -+ HANDLE semaphore; -+ LONG semaphore_count; -+ HANDLE event; -+ HMODULE library; -+ } cleanup; - }; - - /* internal threadpool group representation */ -@@ -1506,8 +1515,50 @@ static void tp_instance_initialize( struct threadpool_instance *instance, struct - instance->threadid = GetCurrentThreadId(); - instance->disassociated = FALSE; - instance->may_run_long = object->may_run_long; -+ instance->cleanup.critical_section = NULL; -+ instance->cleanup.mutex = NULL; -+ instance->cleanup.semaphore = NULL; -+ instance->cleanup.semaphore_count = 0; -+ instance->cleanup.event = NULL; -+ instance->cleanup.library = NULL; - } - -+static NTSTATUS tp_instance_cleanup( struct threadpool_instance *instance ) -+{ -+ NTSTATUS status; -+ -+ if (instance->cleanup.critical_section) -+ { -+ RtlLeaveCriticalSection( instance->cleanup.critical_section ); -+ } -+ if (instance->cleanup.mutex) -+ { -+ status = NtReleaseMutant( instance->cleanup.mutex, NULL ); -+ if (status != STATUS_SUCCESS) -+ return status; -+ } -+ if (instance->cleanup.semaphore) -+ { -+ status = NtReleaseSemaphore( instance->cleanup.semaphore, instance->cleanup.semaphore_count, NULL ); -+ if (status != STATUS_SUCCESS) -+ return status; -+ } -+ if (instance->cleanup.event) -+ { -+ status = NtSetEvent( instance->cleanup.event, NULL ); -+ if (status != STATUS_SUCCESS) -+ return status; -+ } -+ if (instance->cleanup.library) -+ { -+ status = LdrUnloadDll( instance->cleanup.library ); -+ if (status != STATUS_SUCCESS) -+ return status; -+ } -+ -+ return STATUS_SUCCESS; -+ } -+ - /* disassociates the current thread from the threadpool object */ - static void tp_instance_disassociate_thread( struct threadpool_instance *instance ) - { -@@ -1636,6 +1687,7 @@ static void CALLBACK threadpool_worker_proc( void *param ) - TRACE( "callback %p returned\n", object->finalization_callback ); - } - -+ tp_instance_cleanup( &instance ); - RtlEnterCriticalSection( &pool->cs ); - pool->num_busy_workers--; - if (!instance.disassociated) -@@ -1728,6 +1780,26 @@ NTSTATUS WINAPI TpAllocWork( TP_WORK **out, PTP_WORK_CALLBACK callback, PVOID us - } - - /*********************************************************************** -+ * TpCallbackLeaveCriticalSectionOnCompletion (NTDLL.@) -+ */ -+VOID WINAPI TpCallbackLeaveCriticalSectionOnCompletion( TP_CALLBACK_INSTANCE *instance, CRITICAL_SECTION *crit ) -+{ -+ struct threadpool_instance *this = impl_from_TP_CALLBACK_INSTANCE( instance ); -+ TRACE("%p %p\n", instance, crit); -+ -+ if (!this) -+ return; -+ -+ if (this->cleanup.critical_section) -+ { -+ FIXME("attempt to set multiple cleanup critical sections\n"); -+ return; -+ } -+ -+ this->cleanup.critical_section = crit; -+} -+ -+/*********************************************************************** - * TpCallbackMayRunLong (NTDLL.@) - */ - NTSTATUS WINAPI TpCallbackMayRunLong( TP_CALLBACK_INSTANCE *instance ) -@@ -1742,6 +1814,87 @@ NTSTATUS WINAPI TpCallbackMayRunLong( TP_CALLBACK_INSTANCE *instance ) - } - - /*********************************************************************** -+ * TpCallbackReleaseMutexOnCompletion (NTDLL.@) -+ */ -+VOID WINAPI TpCallbackReleaseMutexOnCompletion( TP_CALLBACK_INSTANCE *instance, HANDLE mutex ) -+{ -+ struct threadpool_instance *this = impl_from_TP_CALLBACK_INSTANCE( instance ); -+ TRACE("%p %p\n", instance, mutex); -+ -+ if (!this) -+ return; -+ -+ if (this->cleanup.mutex) -+ { -+ FIXME("attempt to set multiple cleanup mutexes\n"); -+ return; -+ } -+ -+ this->cleanup.mutex = mutex; -+} -+ -+/*********************************************************************** -+ * TpCallbackReleaseSemaphoreOnCompletion (NTDLL.@) -+ */ -+VOID WINAPI TpCallbackReleaseSemaphoreOnCompletion( TP_CALLBACK_INSTANCE *instance, HANDLE semaphore, DWORD count ) -+{ -+ struct threadpool_instance *this = impl_from_TP_CALLBACK_INSTANCE( instance ); -+ TRACE("%p %p %u\n", instance, semaphore, count); -+ -+ if (!this) -+ return; -+ -+ if (this->cleanup.semaphore) -+ { -+ FIXME("attempt to set multiple cleanup semaphores\n"); -+ return; -+ } -+ -+ this->cleanup.semaphore = semaphore; -+ this->cleanup.semaphore_count = count; -+} -+ -+/*********************************************************************** -+ * TpCallbackSetEventOnCompletion (NTDLL.@) -+ */ -+VOID WINAPI TpCallbackSetEventOnCompletion( TP_CALLBACK_INSTANCE *instance, HANDLE event ) -+{ -+ struct threadpool_instance *this = impl_from_TP_CALLBACK_INSTANCE( instance ); -+ TRACE("%p %p\n", instance, event); -+ -+ if (!this) -+ return; -+ -+ if (this->cleanup.event) -+ { -+ FIXME("attempt to set multiple cleanup events\n"); -+ return; -+ } -+ -+ this->cleanup.event = event; -+} -+ -+/*********************************************************************** -+ * TpCallbackUnloadDllOnCompletion (NTDLL.@) -+ */ -+VOID WINAPI TpCallbackUnloadDllOnCompletion( TP_CALLBACK_INSTANCE *instance, HMODULE module ) -+{ -+ struct threadpool_instance *this = impl_from_TP_CALLBACK_INSTANCE( instance ); -+ TRACE("%p %p\n", instance, module); -+ -+ if (!this) -+ return; -+ -+ if (this->cleanup.library) -+ { -+ FIXME("attempt to set multiple cleanup libraries\n"); -+ return; -+ } -+ -+ this->cleanup.library = module; -+} -+ -+/*********************************************************************** - * TpDisassociateCallback (NTDLL.@) - */ - VOID WINAPI TpDisassociateCallback( TP_CALLBACK_INSTANCE *instance ) --- -2.3.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0014-ntdll-Add-remaining-threadpool-functions-to-specfile.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0014-ntdll-Add-remaining-threadpool-functions-to-specfile.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0014-ntdll-Add-remaining-threadpool-functions-to-specfile.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0014-ntdll-Add-remaining-threadpool-functions-to-specfile.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,84 +0,0 @@ -From 01b8c400e280f1c033878cdc16f902a4c47c82df Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Wed, 4 Mar 2015 08:01:00 +0100 -Subject: ntdll: Add remaining threadpool functions to specfile. - ---- - dlls/ntdll/ntdll.spec | 43 +++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 43 insertions(+) - -diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec -index c42356c..681c75e 100644 ---- a/dlls/ntdll/ntdll.spec -+++ b/dlls/ntdll/ntdll.spec -@@ -968,24 +968,67 @@ - @ stdcall RtlxOemStringToUnicodeSize(ptr) RtlOemStringToUnicodeSize - @ stdcall RtlxUnicodeStringToAnsiSize(ptr) RtlUnicodeStringToAnsiSize - @ stdcall RtlxUnicodeStringToOemSize(ptr) RtlUnicodeStringToOemSize -+# @ stub TpAllocAlpcCompletion -+# @ stub TpAllocAlpcCompletionEx - @ stdcall TpAllocCleanupGroup(ptr) -+# @ stub TpAllocIoCompletion -+# @ stub TpAllocJobNotification - @ stdcall TpAllocPool(ptr ptr) -+# @ stub TpAllocTimer -+# @ stub TpAllocWait - @ stdcall TpAllocWork(ptr ptr ptr ptr) -+# @ stub TpAlpcRegisterCompletionList -+# @ stub TpAlpcUnregisterCompletionList -+# @ stub TpCallbackDetectedUnrecoverableError -+# @ stub TpCallbackIndependent - @ stdcall TpCallbackLeaveCriticalSectionOnCompletion(ptr ptr) - @ stdcall TpCallbackMayRunLong(ptr) - @ stdcall TpCallbackReleaseMutexOnCompletion(ptr long) - @ stdcall TpCallbackReleaseSemaphoreOnCompletion(ptr long long) -+# @ stub TpCallbackSendAlpcMessageOnCompletion -+# @ stub TpCallbackSendPendingAlpcMessage - @ stdcall TpCallbackSetEventOnCompletion(ptr long) - @ stdcall TpCallbackUnloadDllOnCompletion(ptr long) -+# @ stub TpCancelAsyncIoOperation -+# @ stub TpCaptureCaller -+# @ stub TpCheckTerminateWorker -+# @ stub TpDbgDumpHeapUsage -+# @ stub TpDbgSetLogRoutine -+# @ stub TpDisablePoolCallbackChecks - @ stdcall TpDisassociateCallback(ptr) -+# @ stub TpIsTimerSet - @ stdcall TpPostWork(ptr) -+# @ stub TpQueryPoolStackInformation -+# @ stub TpReleaseAlpcCompletion - @ stdcall TpReleaseCleanupGroup(ptr) - @ stdcall TpReleaseCleanupGroupMembers(ptr long ptr) -+# @ stub TpReleaseIoCompletion -+# @ stub TpReleaseJobNotification - @ stdcall TpReleasePool(ptr) -+# @ stub TpReleaseTimer -+# @ stub TpReleaseWait - @ stdcall TpReleaseWork(ptr) -+# @ stub TpSetDefaultPoolMaxThreads -+# @ stub TpSetDefaultPoolStackInformation - @ stdcall TpSetPoolMaxThreads(ptr long) -+# @ stub TpSetPoolMaxThreadsSoftLimit - @ stdcall TpSetPoolMinThreads(ptr long) -+# @ stub TpSetPoolStackInformation -+# @ stub TpSetPoolThreadBasePriority -+# @ stub TpSetPoolWorkerThreadIdleTimeout -+# @ stub TpSetTimer -+# @ stub TpSetTimerEx -+# @ stub TpSetWait -+# @ stub TpSetWaitEx - @ stdcall TpSimpleTryPost(ptr ptr ptr) -+# @ stub TpStartAsyncIoOperation -+# @ stub TpTimerOutstandingCallbackCount -+# @ stub TpTrimPools -+# @ stub TpWaitForAlpcCompletion -+# @ stub TpWaitForIoCompletion -+# @ stub TpWaitForJobNotification -+# @ stub TpWaitForTimer -+# @ stub TpWaitForWait - @ stdcall TpWaitForWork(ptr long) - @ stdcall -ret64 VerSetConditionMask(int64 long long) - @ stdcall WinSqmIsOptedIn() --- -2.3.5 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0015-ntdll-Implement-threadpool-timer-functions.-rev-2.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0015-ntdll-Implement-threadpool-timer-functions.-rev-2.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0015-ntdll-Implement-threadpool-timer-functions.-rev-2.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0015-ntdll-Implement-threadpool-timer-functions.-rev-2.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,533 +0,0 @@ -From 90370a65b5f492ebe3fafb5e35548eb4b6681dac Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Wed, 4 Mar 2015 08:19:47 +0100 -Subject: ntdll: Implement threadpool timer functions. (rev 2) - ---- - dlls/ntdll/ntdll.spec | 10 +- - dlls/ntdll/threadpool.c | 376 +++++++++++++++++++++++++++++++++++++++++++++++- - 2 files changed, 380 insertions(+), 6 deletions(-) - -diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec -index 19e63a5..7aa8bda 100644 ---- a/dlls/ntdll/ntdll.spec -+++ b/dlls/ntdll/ntdll.spec -@@ -974,7 +974,7 @@ - # @ stub TpAllocIoCompletion - # @ stub TpAllocJobNotification - @ stdcall TpAllocPool(ptr ptr) --# @ stub TpAllocTimer -+@ stdcall TpAllocTimer(ptr ptr ptr) - # @ stub TpAllocWait - @ stdcall TpAllocWork(ptr ptr ptr ptr) - # @ stub TpAlpcRegisterCompletionList -@@ -996,7 +996,7 @@ - # @ stub TpDbgSetLogRoutine - # @ stub TpDisablePoolCallbackChecks - @ stdcall TpDisassociateCallback(ptr) --# @ stub TpIsTimerSet -+@ stdcall TpIsTimerSet(ptr) - @ stdcall TpPostWork(ptr) - # @ stub TpQueryPoolStackInformation - # @ stub TpReleaseAlpcCompletion -@@ -1005,7 +1005,7 @@ - # @ stub TpReleaseIoCompletion - # @ stub TpReleaseJobNotification - @ stdcall TpReleasePool(ptr) --# @ stub TpReleaseTimer -+@ stdcall TpReleaseTimer(ptr) - # @ stub TpReleaseWait - @ stdcall TpReleaseWork(ptr) - # @ stub TpSetDefaultPoolMaxThreads -@@ -1016,7 +1016,7 @@ - # @ stub TpSetPoolStackInformation - # @ stub TpSetPoolThreadBasePriority - # @ stub TpSetPoolWorkerThreadIdleTimeout --# @ stub TpSetTimer -+@ stdcall TpSetTimer(ptr ptr long long) - # @ stub TpSetTimerEx - # @ stub TpSetWait - # @ stub TpSetWaitEx -@@ -1027,7 +1027,7 @@ - # @ stub TpWaitForAlpcCompletion - # @ stub TpWaitForIoCompletion - # @ stub TpWaitForJobNotification --# @ stub TpWaitForTimer -+@ stdcall TpWaitForTimer(ptr long) - # @ stub TpWaitForWait - @ stdcall TpWaitForWork(ptr long) - @ stdcall -ret64 VerSetConditionMask(int64 long long) -diff --git a/dlls/ntdll/threadpool.c b/dlls/ntdll/threadpool.c -index 351c1bd..493e0af 100644 ---- a/dlls/ntdll/threadpool.c -+++ b/dlls/ntdll/threadpool.c -@@ -157,7 +157,8 @@ struct threadpool - enum threadpool_objtype - { - TP_OBJECT_TYPE_SIMPLE, -- TP_OBJECT_TYPE_WORK -+ TP_OBJECT_TYPE_WORK, -+ TP_OBJECT_TYPE_TIMER - }; - - /* internal threadpool object representation */ -@@ -193,6 +194,18 @@ struct threadpool_object - { - PTP_WORK_CALLBACK callback; - } work; -+ struct -+ { -+ PTP_TIMER_CALLBACK callback; -+ /* information about the timer, locked via timerqueue.cs */ -+ BOOL timer_initialized; -+ BOOL timer_pending; -+ struct list timer_entry; -+ BOOL timer_set; -+ ULONGLONG timeout; -+ LONG period; -+ LONG window_length; -+ } timer; - } u; - }; - -@@ -224,6 +237,33 @@ struct threadpool_group - struct list members; - }; - -+/* global timerqueue object */ -+static RTL_CRITICAL_SECTION_DEBUG timerqueue_debug; -+ -+static struct -+{ -+ CRITICAL_SECTION cs; -+ BOOL thread_running; -+ LONG num_timers; -+ struct list pending_timers; -+ RTL_CONDITION_VARIABLE update_event; -+} -+timerqueue = -+{ -+ { &timerqueue_debug, -1, 0, 0, 0, 0 }, -+ FALSE, -+ 0, -+ LIST_INIT( timerqueue.pending_timers ), -+ RTL_CONDITION_VARIABLE_INIT -+}; -+ -+static RTL_CRITICAL_SECTION_DEBUG timerqueue_debug = -+{ -+ 0, 0, &timerqueue.cs, -+ { &timerqueue_debug.ProcessLocksList, &timerqueue_debug.ProcessLocksList }, -+ 0, 0, { (DWORD_PTR)(__FILE__ ": timerqueue.cs") } -+}; -+ - static inline struct threadpool *impl_from_TP_POOL( TP_POOL *pool ) - { - return (struct threadpool *)pool; -@@ -236,6 +276,13 @@ static inline struct threadpool_object *impl_from_TP_WORK( TP_WORK *work ) - return object; - } - -+static inline struct threadpool_object *impl_from_TP_TIMER( TP_TIMER *timer ) -+{ -+ struct threadpool_object *object = (struct threadpool_object *)timer; -+ assert( !object || object->type == TP_OBJECT_TYPE_TIMER ); -+ return object; -+} -+ - static inline struct threadpool_group *impl_from_TP_CLEANUP_GROUP( TP_CLEANUP_GROUP *group ) - { - return (struct threadpool_group *)group; -@@ -247,6 +294,7 @@ static inline struct threadpool_instance *impl_from_TP_CALLBACK_INSTANCE( TP_CAL - } - - static void CALLBACK threadpool_worker_proc( void *param ); -+static void CALLBACK timerqueue_thread_proc( void *param ); - static void tp_object_submit( struct threadpool_object *object ); - static void tp_object_shutdown( struct threadpool_object *object ); - static BOOL tp_object_release( struct threadpool_object *object ); -@@ -1170,6 +1218,230 @@ NTSTATUS WINAPI RtlDeleteTimer(HANDLE TimerQueue, HANDLE Timer, - return status; - } - -+static NTSTATUS tp_timerqueue_acquire( struct threadpool_object *timer ) -+{ -+ NTSTATUS status = STATUS_SUCCESS; -+ assert( timer->type == TP_OBJECT_TYPE_TIMER ); -+ -+ timer->u.timer.timer_initialized = TRUE; -+ timer->u.timer.timer_pending = FALSE; -+ memset( &timer->u.timer.timer_entry, 0, sizeof(timer->u.timer.timer_entry) ); -+ timer->u.timer.timer_set = FALSE; -+ timer->u.timer.timeout = 0; -+ timer->u.timer.period = 0; -+ timer->u.timer.window_length = 0; -+ -+ RtlEnterCriticalSection( &timerqueue.cs ); -+ -+ if (!timerqueue.thread_running) -+ { -+ HANDLE thread; -+ status = RtlCreateUserThread( GetCurrentProcess(), NULL, FALSE, NULL, 0, 0, -+ timerqueue_thread_proc, NULL, &thread, NULL ); -+ if (status == STATUS_SUCCESS) -+ { -+ NtClose( thread ); -+ timerqueue.thread_running = TRUE; -+ } -+ } -+ -+ if (!status) timerqueue.num_timers++; -+ RtlLeaveCriticalSection( &timerqueue.cs ); -+ return status; -+} -+ -+static void tp_timerqueue_release( struct threadpool_object *timer ) -+{ -+ assert( timer->type == TP_OBJECT_TYPE_TIMER ); -+ RtlEnterCriticalSection( &timerqueue.cs ); -+ if (timer->u.timer.timer_initialized) -+ { -+ -+ if (timer->u.timer.timer_pending) -+ { -+ list_remove( &timer->u.timer.timer_entry ); -+ timer->u.timer.timer_pending = FALSE; -+ } -+ -+ if (!--timerqueue.num_timers) -+ { -+ assert( list_empty( &timerqueue.pending_timers ) ); -+ RtlWakeAllConditionVariable( &timerqueue.update_event ); -+ } -+ -+ timer->u.timer.timer_initialized = FALSE; -+ } -+ RtlLeaveCriticalSection( &timerqueue.cs ); -+} -+ -+static void tp_timerqueue_update_timer( struct threadpool_object *new_timer, LARGE_INTEGER *timeout, -+ LONG period, LONG window_length ) -+{ -+ BOOL submit_timer = FALSE; -+ struct threadpool_object *timer; -+ ULONGLONG when; -+ -+ assert( new_timer->type == TP_OBJECT_TYPE_TIMER ); -+ RtlEnterCriticalSection( &timerqueue.cs ); -+ assert( new_timer->u.timer.timer_initialized ); -+ -+ /* Remember if the timer is set or unset */ -+ new_timer->u.timer.timer_set = timeout != NULL; -+ -+ if (timeout) -+ { -+ when = timeout->QuadPart; -+ -+ /* A timeout of zero means that the timer should be submitted immediately */ -+ if (when == 0) -+ { -+ submit_timer = TRUE; -+ if (!period) -+ { -+ timeout = NULL; -+ goto update_timer; -+ } -+ when = (ULONGLONG)period * -10000; -+ } -+ -+ /* Convert relative timeout to absolute */ -+ if ((LONGLONG)when < 0) -+ { -+ LARGE_INTEGER now; -+ NtQuerySystemTime( &now ); -+ when = now.QuadPart - when; -+ } -+ } -+ -+update_timer: -+ -+ /* If timer is still pending, then remove the old one */ -+ if (new_timer->u.timer.timer_pending) -+ { -+ list_remove( &new_timer->u.timer.timer_entry ); -+ memset( &new_timer->u.timer.timer_entry, 0, sizeof(new_timer->u.timer.timer_entry) ); -+ new_timer->u.timer.timer_pending = FALSE; -+ } -+ -+ /* Timer should be enabled again, add it to the queue */ -+ if (timeout) -+ { -+ new_timer->u.timer.timeout = when; -+ new_timer->u.timer.period = period; -+ new_timer->u.timer.window_length = window_length; -+ -+ /* insert new_timer into the timer queue */ -+ LIST_FOR_EACH_ENTRY( timer, &timerqueue.pending_timers, struct threadpool_object, u.timer.timer_entry ) -+ { -+ assert( timer->type == TP_OBJECT_TYPE_TIMER ); -+ if (new_timer->u.timer.timeout < timer->u.timer.timeout) -+ break; -+ } -+ list_add_before( &timer->u.timer.timer_entry, &new_timer->u.timer.timer_entry ); -+ -+ /* wake up thread if it should expire earlier than before */ -+ if (list_head( &timerqueue.pending_timers ) == &new_timer->u.timer.timer_entry ) -+ RtlWakeAllConditionVariable( &timerqueue.update_event ); -+ -+ new_timer->u.timer.timer_pending = TRUE; -+ } -+ -+ RtlLeaveCriticalSection( &timerqueue.cs ); -+ -+ if (submit_timer) -+ tp_object_submit( new_timer ); -+} -+ -+static void CALLBACK timerqueue_thread_proc( void *param ) -+{ -+ LARGE_INTEGER now, timeout; -+ ULONGLONG timeout_lower, timeout_upper; -+ struct threadpool_object *other_timer; -+ struct list *ptr; -+ -+ RtlEnterCriticalSection( &timerqueue.cs ); -+ -+ for (;;) -+ { -+ NtQuerySystemTime( &now ); -+ -+ while ((ptr = list_head( &timerqueue.pending_timers ))) -+ { -+ struct threadpool_object *timer = LIST_ENTRY( ptr, struct threadpool_object, u.timer.timer_entry ); -+ assert( timer->type == TP_OBJECT_TYPE_TIMER ); -+ -+ /* Timeout didn't expire yet, nothing to do */ -+ if (timer->u.timer.timeout > now.QuadPart) -+ break; -+ -+ /* Queue a new callback in one of the worker threads */ -+ list_remove( &timer->u.timer.timer_entry ); -+ tp_object_submit( timer ); -+ -+ /* Requeue the timer, except its marked for shutdown */ -+ if (!timer->shutdown && timer->u.timer.period) -+ { -+ /* Update the timeout, make sure its at least the current time (to avoid too many work items) */ -+ timer->u.timer.timeout += (ULONGLONG)timer->u.timer.period * 10000; -+ if (timer->u.timer.timeout <= now.QuadPart) -+ timer->u.timer.timeout = now.QuadPart + 1; -+ -+ /* Insert timer back into the timer queue */ -+ LIST_FOR_EACH_ENTRY( other_timer, &timerqueue.pending_timers, struct threadpool_object, u.timer.timer_entry ) -+ { -+ assert( other_timer->type == TP_OBJECT_TYPE_TIMER ); -+ if (timer->u.timer.timeout < other_timer->u.timer.timeout) -+ break; -+ } -+ list_add_before( &other_timer->u.timer.timer_entry, &timer->u.timer.timer_entry ); -+ } -+ else -+ { -+ /* The element is no longer queued */ -+ timer->u.timer.timer_pending = FALSE; -+ } -+ } -+ -+ /* Determine next timeout - we use the window_length arguments to optimize wakeup times */ -+ timeout_lower = timeout_upper = TIMEOUT_INFINITE; -+ LIST_FOR_EACH_ENTRY( other_timer, &timerqueue.pending_timers, struct threadpool_object, u.timer.timer_entry ) -+ { -+ ULONGLONG new_timeout_upper; -+ assert( other_timer->type == TP_OBJECT_TYPE_TIMER ); -+ if (other_timer->u.timer.timeout >= timeout_upper) -+ break; -+ -+ timeout_lower = other_timer->u.timer.timeout; -+ new_timeout_upper = timeout_lower + (ULONGLONG)other_timer->u.timer.window_length * 10000; -+ -+ if (timeout_upper > new_timeout_upper) -+ timeout_upper = new_timeout_upper; -+ } -+ -+ -+ if (!timerqueue.num_timers) -+ { -+ /* All timers have been destroyed, if no new timers are created within some amount of -+ * time, then we can shutdown this thread. */ -+ timeout.QuadPart = (ULONGLONG)THREADPOOL_WORKER_TIMEOUT * -10000; -+ if (RtlSleepConditionVariableCS( &timerqueue.update_event, -+ &timerqueue.cs, &timeout ) == STATUS_TIMEOUT && !timerqueue.num_timers) -+ { -+ break; -+ } -+ } -+ else -+ { -+ /* Wait for timer update events or until the next timer expires. */ -+ timeout.QuadPart = timeout_lower; -+ RtlSleepConditionVariableCS( &timerqueue.update_event, &timerqueue.cs, &timeout ); -+ } -+ } -+ -+ timerqueue.thread_running = FALSE; -+ RtlLeaveCriticalSection( &timerqueue.cs ); -+} -+ - /* allocate a new threadpool (with at least one worker thread) */ - static NTSTATUS tp_threadpool_alloc( struct threadpool **out ) - { -@@ -1473,6 +1745,9 @@ static void tp_object_wait( struct threadpool_object *object ) - /* mark an object as 'shutdown', submitting is no longer possible */ - static void tp_object_shutdown( struct threadpool_object *object ) - { -+ if (object->type == TP_OBJECT_TYPE_TIMER) -+ tp_timerqueue_release( object ); -+ - object->shutdown = TRUE; - } - -@@ -1680,6 +1955,15 @@ static void CALLBACK threadpool_worker_proc( void *param ) - break; - } - -+ case TP_OBJECT_TYPE_TIMER: -+ { -+ TRACE( "executing timer callback %p(%p, %p, %p)\n", -+ object->u.timer.callback, cb_instance, object->userdata, object ); -+ object->u.timer.callback( cb_instance, object->userdata, (TP_TIMER *)object ); -+ TRACE( "callback %p returned\n", object->u.timer.callback ); -+ break; -+ } -+ - default: - assert(0); - break; -@@ -1754,6 +2038,41 @@ NTSTATUS WINAPI TpAllocPool( TP_POOL **out, PVOID reserved ) - } - - /*********************************************************************** -+ * TpAllocTimer (NTDLL.@) -+ */ -+NTSTATUS WINAPI TpAllocTimer( TP_TIMER **out, PTP_TIMER_CALLBACK callback, PVOID userdata, -+ TP_CALLBACK_ENVIRON *environment ) -+{ -+ struct threadpool_object *object; -+ struct threadpool *pool; -+ NTSTATUS status; -+ -+ TRACE("%p %p %p %p\n", out, callback, userdata, environment); -+ -+ if (!(pool = get_threadpool( environment ))) -+ return STATUS_NO_MEMORY; -+ -+ object = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*object) ); -+ if (!object) -+ return STATUS_NO_MEMORY; -+ -+ object->type = TP_OBJECT_TYPE_TIMER; -+ object->u.timer.callback = callback; -+ -+ status = tp_timerqueue_acquire( object ); -+ if (status) -+ { -+ RtlFreeHeap( GetProcessHeap(), 0, object ); -+ return status; -+ } -+ -+ tp_object_initialize( object, pool, userdata, environment ); -+ -+ *out = (TP_TIMER *)object; -+ return STATUS_SUCCESS; -+} -+ -+/*********************************************************************** - * TpAllocWork (NTDLL.@) - */ - NTSTATUS WINAPI TpAllocWork( TP_WORK **out, PTP_WORK_CALLBACK callback, PVOID userdata, -@@ -1909,6 +2228,17 @@ VOID WINAPI TpDisassociateCallback( TP_CALLBACK_INSTANCE *instance ) - } - - /*********************************************************************** -+ * TpIsTimerSet (NTDLL.@) -+ */ -+BOOL WINAPI TpIsTimerSet( TP_TIMER *timer ) -+{ -+ struct threadpool_object *this = impl_from_TP_TIMER( timer ); -+ TRACE("%p\n", timer); -+ -+ return this ? this->u.timer.timer_set : FALSE; -+} -+ -+/*********************************************************************** - * TpPostWork (NTDLL.@) - */ - VOID WINAPI TpPostWork( TP_WORK *work ) -@@ -2017,6 +2347,21 @@ VOID WINAPI TpReleasePool( TP_POOL *pool ) - } - - /*********************************************************************** -+ * TpReleaseTimer (NTDLL.@) -+ */ -+VOID WINAPI TpReleaseTimer( TP_TIMER *timer ) -+{ -+ struct threadpool_object *this = impl_from_TP_TIMER( timer ); -+ TRACE("%p\n", timer); -+ -+ if (this) -+ { -+ tp_object_shutdown( this ); -+ tp_object_release( this ); -+ } -+} -+ -+/*********************************************************************** - * TpReleaseWork (NTDLL.@) - */ - VOID WINAPI TpReleaseWork( TP_WORK *work ) -@@ -2065,6 +2410,20 @@ BOOL WINAPI TpSetPoolMinThreads( TP_POOL *pool, DWORD minimum ) - } - - /*********************************************************************** -+ * TpSetTimer (NTDLL.@) -+ */ -+VOID WINAPI TpSetTimer( TP_TIMER *timer, LARGE_INTEGER *timeout, LONG period, LONG window_length ) -+{ -+ struct threadpool_object *this = impl_from_TP_TIMER( timer ); -+ TRACE("%p %p %u %u\n", timer, timeout, period, window_length); -+ -+ if (this) -+ { -+ tp_timerqueue_update_timer( this, timeout, period, window_length ); -+ } -+} -+ -+/*********************************************************************** - * TpSimpleTryPost (NTDLL.@) - */ - NTSTATUS WINAPI TpSimpleTryPost( PTP_SIMPLE_CALLBACK callback, PVOID userdata, -@@ -2090,6 +2449,21 @@ NTSTATUS WINAPI TpSimpleTryPost( PTP_SIMPLE_CALLBACK callback, PVOID userdata, - } - - /*********************************************************************** -+ * TpWaitForTimer (NTDLL.@) -+ */ -+VOID WINAPI TpWaitForTimer( TP_TIMER *timer, BOOL cancel_pending ) -+{ -+ struct threadpool_object *this = impl_from_TP_TIMER( timer ); -+ TRACE("%p %d\n", timer, cancel_pending); -+ if (this) -+ { -+ if (cancel_pending) -+ tp_object_cancel( this, FALSE, NULL ); -+ tp_object_wait( this ); -+ } -+} -+ -+/*********************************************************************** - * TpWaitForWork (NTDLL.@) - */ - VOID WINAPI TpWaitForWork( TP_WORK *work, BOOL cancel_pending ) --- -2.3.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0016-ntdll-tests-Add-tests-for-Tp-threadpool-functions.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0016-ntdll-tests-Add-tests-for-Tp-threadpool-functions.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0016-ntdll-tests-Add-tests-for-Tp-threadpool-functions.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0016-ntdll-tests-Add-tests-for-Tp-threadpool-functions.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,530 +0,0 @@ -From 4a3ad1401f815720b35b0ab48e6ab1cc08835f5e Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Wed, 4 Mar 2015 13:17:04 +0100 -Subject: ntdll/tests: Add tests for Tp* threadpool functions. - ---- - dlls/ntdll/tests/threadpool.c | 470 ++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 470 insertions(+) - -diff --git a/dlls/ntdll/tests/threadpool.c b/dlls/ntdll/tests/threadpool.c -index 1cfd67b..b44b0f5 100644 ---- a/dlls/ntdll/tests/threadpool.c -+++ b/dlls/ntdll/tests/threadpool.c -@@ -22,15 +22,37 @@ - - static HMODULE hntdll = 0; - static NTSTATUS (WINAPI *pTpAllocCleanupGroup)(TP_CLEANUP_GROUP **); -+static NTSTATUS (WINAPI *pTpAllocIoCompletion)(TP_IO **,HANDLE,PTP_WIN32_IO_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); - static NTSTATUS (WINAPI *pTpAllocPool)(TP_POOL **,PVOID); -+static NTSTATUS (WINAPI *pTpAllocTimer)(TP_TIMER **,PTP_TIMER_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); -+static NTSTATUS (WINAPI *pTpAllocWait)(TP_WAIT **,PTP_WAIT_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); - static NTSTATUS (WINAPI *pTpAllocWork)(TP_WORK **,PTP_WORK_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); -+static VOID (WINAPI *pTpCallbackLeaveCriticalSectionOnCompletion)(TP_CALLBACK_INSTANCE *,CRITICAL_SECTION *); -+static NTSTATUS (WINAPI *pTpCallbackMayRunLong)(TP_CALLBACK_INSTANCE *); -+static VOID (WINAPI *pTpCallbackReleaseMutexOnCompletion)(TP_CALLBACK_INSTANCE *,HANDLE); -+static VOID (WINAPI *pTpCallbackReleaseSemaphoreOnCompletion)(TP_CALLBACK_INSTANCE *,HANDLE,DWORD); -+static VOID (WINAPI *pTpCallbackSetEventOnCompletion)(TP_CALLBACK_INSTANCE *,HANDLE); -+static VOID (WINAPI *pTpCallbackUnloadDllOnCompletion)(TP_CALLBACK_INSTANCE *,HMODULE); -+static VOID (WINAPI *pTpCancelAsyncIoOperation)(TP_IO *); -+static VOID (WINAPI *pTpDisassociateCallback)(TP_CALLBACK_INSTANCE *); -+static BOOL (WINAPI *pTpIsTimerSet)(TP_TIMER *); - static VOID (WINAPI *pTpPostWork)(TP_WORK *); - static VOID (WINAPI *pTpReleaseCleanupGroup)(TP_CLEANUP_GROUP *); - static VOID (WINAPI *pTpReleaseCleanupGroupMembers)(TP_CLEANUP_GROUP *,BOOL,PVOID); -+static VOID (WINAPI *pTpReleaseIoCompletion)(TP_IO *); - static VOID (WINAPI *pTpReleasePool)(TP_POOL *); -+static VOID (WINAPI *pTpReleaseTimer)(TP_TIMER *); -+static VOID (WINAPI *pTpReleaseWait)(TP_WAIT *); - static VOID (WINAPI *pTpReleaseWork)(TP_WORK *); - static VOID (WINAPI *pTpSetPoolMaxThreads)(TP_POOL *,DWORD); -+static BOOL (WINAPI *pTpSetPoolMinThreads)(TP_POOL *,DWORD); -+static VOID (WINAPI *pTpSetTimer)(TP_TIMER *,LARGE_INTEGER *,LONG,LONG); -+static VOID (WINAPI *pTpSetWait)(TP_WAIT *,HANDLE,LARGE_INTEGER *); - static NTSTATUS (WINAPI *pTpSimpleTryPost)(PTP_SIMPLE_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); -+static VOID (WINAPI *pTpStartAsyncIoOperation)(TP_IO *); -+static VOID (WINAPI *pTpWaitForIoCompletion)(TP_IO *,BOOL); -+static VOID (WINAPI *pTpWaitForTimer)(TP_TIMER *,BOOL); -+static VOID (WINAPI *pTpWaitForWait)(TP_WAIT *,BOOL); - static VOID (WINAPI *pTpWaitForWork)(TP_WORK *,BOOL); - - #define NTDLL_GET_PROC(func) \ -@@ -51,15 +73,37 @@ static BOOL init_threadpool(void) - } - - NTDLL_GET_PROC(TpAllocCleanupGroup); -+ NTDLL_GET_PROC(TpAllocIoCompletion); - NTDLL_GET_PROC(TpAllocPool); -+ NTDLL_GET_PROC(TpAllocTimer); -+ NTDLL_GET_PROC(TpAllocWait); - NTDLL_GET_PROC(TpAllocWork); -+ NTDLL_GET_PROC(TpCallbackLeaveCriticalSectionOnCompletion); -+ NTDLL_GET_PROC(TpCallbackMayRunLong); -+ NTDLL_GET_PROC(TpCallbackReleaseMutexOnCompletion); -+ NTDLL_GET_PROC(TpCallbackReleaseSemaphoreOnCompletion); -+ NTDLL_GET_PROC(TpCallbackSetEventOnCompletion); -+ NTDLL_GET_PROC(TpCallbackUnloadDllOnCompletion); -+ NTDLL_GET_PROC(TpCancelAsyncIoOperation); -+ NTDLL_GET_PROC(TpDisassociateCallback); -+ NTDLL_GET_PROC(TpIsTimerSet); - NTDLL_GET_PROC(TpPostWork); - NTDLL_GET_PROC(TpReleaseCleanupGroup); - NTDLL_GET_PROC(TpReleaseCleanupGroupMembers); -+ NTDLL_GET_PROC(TpReleaseIoCompletion); - NTDLL_GET_PROC(TpReleasePool); -+ NTDLL_GET_PROC(TpReleaseTimer); -+ NTDLL_GET_PROC(TpReleaseWait); - NTDLL_GET_PROC(TpReleaseWork); - NTDLL_GET_PROC(TpSetPoolMaxThreads); -+ NTDLL_GET_PROC(TpSetPoolMinThreads); -+ NTDLL_GET_PROC(TpSetTimer); -+ NTDLL_GET_PROC(TpSetWait); - NTDLL_GET_PROC(TpSimpleTryPost); -+ NTDLL_GET_PROC(TpStartAsyncIoOperation); -+ NTDLL_GET_PROC(TpWaitForIoCompletion); -+ NTDLL_GET_PROC(TpWaitForTimer); -+ NTDLL_GET_PROC(TpWaitForWait); - NTDLL_GET_PROC(TpWaitForWork); - - if (!pTpAllocPool) -@@ -307,6 +351,425 @@ static void test_tp_work_scheduler(void) - pTpReleasePool(pool); - } - -+static void CALLBACK instance_cb(TP_CALLBACK_INSTANCE *instance, void *userdata) -+{ -+ trace("Running instance callback\n"); -+ pTpCallbackMayRunLong(instance); -+ Sleep(100); -+ InterlockedIncrement( (LONG *)userdata ); -+} -+ -+static void CALLBACK instance2_cb(TP_CALLBACK_INSTANCE *instance, void *userdata) -+{ -+ trace("Running instance2 callback\n"); -+ ok(*(LONG *)userdata == 1, "expected *userdata = 1, got %u\n", *(LONG *)userdata); -+ InterlockedIncrement( (LONG *)userdata ); -+} -+ -+static void CALLBACK instance3_cb(TP_CALLBACK_INSTANCE *instance, void *userdata) -+{ -+ trace("Running instance3 callback\n"); -+ pTpDisassociateCallback(instance); -+ Sleep(100); -+ InterlockedIncrement( (LONG *)userdata ); -+} -+ -+static void CALLBACK instance4_cb(TP_CALLBACK_INSTANCE *instance, void *userdata) -+{ -+ trace("Running instance4 callback\n"); -+ pTpCallbackReleaseSemaphoreOnCompletion(instance, userdata, 1); -+} -+ -+static HANDLE instance_finalization_semaphore; -+ -+static void CALLBACK instance_finalization_cb(TP_CALLBACK_INSTANCE *instance, void *userdata) -+{ -+ DWORD ret; -+ trace("Running instance finalization callback\n"); -+ ok(*(LONG *)userdata == 1, "expected *userdata = 1, got %u\n", *(LONG *)userdata); -+ -+ /* Make sure that this callback is called before the regular instance cleanup tasks */ -+ ret = WaitForSingleObject(instance_finalization_semaphore, 100); -+ ok(ret == WAIT_TIMEOUT, "expected ret = WAIT_TIMEOUT, got %u\n", ret); -+ -+ InterlockedIncrement( (LONG *)userdata ); -+} -+ -+static void CALLBACK instance5_cb(TP_CALLBACK_INSTANCE *instance, void *userdata) -+{ -+ trace("Running instance5 callback\n"); -+ pTpCallbackReleaseSemaphoreOnCompletion(instance, instance_finalization_semaphore, 1); -+ InterlockedIncrement( (LONG *)userdata ); -+} -+ -+ -+static void test_tp_instance(void) -+{ -+ TP_CALLBACK_ENVIRON environment; -+ TP_CLEANUP_GROUP *group; -+ TP_POOL *pool; -+ NTSTATUS status; -+ LONG userdata; -+ HANDLE semaphore; -+ DWORD ret; -+ -+ /* Allocate new threadpool */ -+ pool = NULL; -+ status = pTpAllocPool(&pool, NULL); -+ ok(!status, "TpAllocPool failed with status %x\n", status); -+ ok(pool != NULL, "expected pool != NULL\n"); -+ -+ /* We limit the pool to a single thread */ -+ pTpSetPoolMaxThreads(pool, 1); -+ -+ /* Test behaviour of TpCallbackMayRunLong when the max number of threads is reached */ -+ userdata = 0; -+ memset(&environment, 0, sizeof(environment)); -+ environment.Version = 1; -+ environment.Pool = pool; -+ status = pTpSimpleTryPost(instance_cb, &userdata, &environment); -+ ok(!status, "TpSimpleTryPost failed with status %x\n", status); -+ status = pTpSimpleTryPost(instance2_cb, &userdata, &environment); -+ ok(!status, "TpSimpleTryPost failed with status %x\n", status); -+ while (userdata != 2) Sleep(10); -+ -+ /* Test behaviour of TpDisassociateCallback on wait functions */ -+ group = NULL; -+ status = pTpAllocCleanupGroup(&group); -+ ok(!status, "TpAllocCleanupGroup failed with status %x\n", status); -+ ok(group != NULL, "expected pool != NULL\n"); -+ -+ userdata = 0; -+ memset(&environment, 0, sizeof(environment)); -+ environment.Version = 1; -+ environment.Pool = pool; -+ environment.CleanupGroup = group; -+ status = pTpSimpleTryPost(instance3_cb, &userdata, &environment); -+ ok(!status, "TpSimpleTryPost failed with status %x\n", status); -+ -+ pTpReleaseCleanupGroupMembers(group, FALSE, NULL); -+ todo_wine /* behaviour contradicts the MSDN description? */ -+ ok(userdata == 1, "expected userdata = 1, got %u\n", userdata); -+ while (userdata == 0) Sleep(10); -+ -+ pTpReleaseCleanupGroup(group); -+ -+ /* Test for TpCallbackReleaseSemaphoreOnCompletion */ -+ semaphore = CreateSemaphoreW(NULL, 0, 1, NULL); -+ ok(semaphore != NULL, "failed to create semaphore\n"); -+ memset(&environment, 0, sizeof(environment)); -+ environment.Version = 1; -+ environment.Pool = pool; -+ status = pTpSimpleTryPost(instance4_cb, semaphore, &environment); -+ ok(!status, "TpSimpleTryPost failed with status %x\n", status); -+ ret = WaitForSingleObject(semaphore, 1000); -+ ok(ret == WAIT_OBJECT_0, "expected ret = WAIT_OBJECT_0, got %u\n", ret); -+ -+ /* Test for finalization callback */ -+ userdata = 0; -+ instance_finalization_semaphore = semaphore; -+ memset(&environment, 0, sizeof(environment)); -+ environment.Version = 1; -+ environment.Pool = pool; -+ environment.FinalizationCallback = instance_finalization_cb; -+ status = pTpSimpleTryPost(instance5_cb, &userdata, &environment); -+ ok(!status, "TpSimpleTryPost failed with status %x\n", status); -+ ret = WaitForSingleObject(semaphore, 1000); -+ ok(ret == WAIT_OBJECT_0, "expected ret = WAIT_OBJECT_0, got %u\n", ret); -+ while (userdata != 2) Sleep(10); -+ -+ CloseHandle(semaphore); -+ -+ /* Cleanup */ -+ pTpReleasePool(pool); -+} -+ -+static DWORD group_cancel_tid; -+ -+static void CALLBACK group_cancel_cleanup_cb(void *object, void *userdata) -+{ -+ trace("Running group cancel cleanup callback\n"); -+ InterlockedIncrement( (LONG *)userdata ); -+ group_cancel_tid = GetCurrentThreadId(); -+} -+ -+static void CALLBACK group_cancel_cb(TP_CALLBACK_INSTANCE *instance, void *userdata) -+{ -+ trace("Running group cancel callback\n"); -+ pTpCallbackMayRunLong(instance); -+ Sleep(100); -+ ok(*(LONG *)userdata == 1, "expected *userdata = 1, got %u\n", *(LONG *)userdata); -+ InterlockedIncrement( (LONG *)userdata ); -+} -+ -+static void CALLBACK dummy_cb(TP_CALLBACK_INSTANCE *instance, void *userdata) -+{ -+ ok(0, "Unexpected call to dummy_cb function\n"); -+} -+ -+static void test_tp_group_cancel(void) -+{ -+ TP_CALLBACK_ENVIRON environment; -+ TP_CLEANUP_GROUP *group; -+ TP_WORK *work; -+ TP_POOL *pool; -+ NTSTATUS status; -+ LONG userdata, userdata2; -+ int i; -+ -+ /* Allocate new threadpool */ -+ pool = NULL; -+ status = pTpAllocPool(&pool, NULL); -+ ok(!status, "TpAllocPool failed with status %x\n", status); -+ ok(pool != NULL, "expected pool != NULL\n"); -+ -+ /* We limit the pool to a single thread */ -+ pTpSetPoolMaxThreads(pool, 1); -+ -+ /* Allocate a cleanup group */ -+ group = NULL; -+ status = pTpAllocCleanupGroup(&group); -+ ok(!status, "TpAllocCleanupGroup failed with status %x\n", status); -+ ok(group != NULL, "expected pool != NULL\n"); -+ -+ /* Test execution of cancellation callback */ -+ userdata = 0; -+ memset(&environment, 0, sizeof(environment)); -+ environment.Version = 1; -+ environment.Pool = pool; -+ status = pTpSimpleTryPost(group_cancel_cb, &userdata, &environment); -+ ok(!status, "TpSimpleTryPost failed with status %x\n", status); -+ -+ memset(&environment, 0, sizeof(environment)); -+ environment.Version = 1; -+ environment.Pool = pool; -+ environment.CleanupGroup = group; -+ environment.CleanupGroupCancelCallback = group_cancel_cleanup_cb; -+ status = pTpSimpleTryPost(dummy_cb, NULL, &environment); -+ ok(!status, "TpSimpleTryPost failed with status %x\n", status); -+ -+ group_cancel_tid = 0; -+ pTpReleaseCleanupGroupMembers(group, TRUE, &userdata); -+ ok(userdata == 1, "expected userdata = 1, got %u\n", userdata); -+ ok(group_cancel_tid == GetCurrentThreadId(), "expected tid %x, got %x\n", -+ GetCurrentThreadId(), group_cancel_tid); -+ while (userdata != 2) Sleep(10); -+ -+ /* Test cancellation callback for elements with multiple instances */ -+ /* Allocate new work item */ -+ work = NULL; -+ memset(&environment, 0, sizeof(environment)); -+ environment.Version = 1; -+ environment.Pool = pool; -+ environment.CleanupGroup = group; -+ environment.CleanupGroupCancelCallback = group_cancel_cleanup_cb; -+ status = pTpAllocWork(&work, work_cb, &userdata, &environment); -+ ok(!status, "TpAllocWork failed with status %x\n", status); -+ ok(work != NULL, "expected work != NULL\n"); -+ -+ /* Post 10 identical work items at once */ -+ userdata = userdata2 = 0; -+ for (i = 0; i < 10; i++) -+ pTpPostWork(work); -+ -+ /* Check if we get multiple cancellation callbacks */ -+ group_cancel_tid = 0; -+ pTpReleaseCleanupGroupMembers(group, TRUE, &userdata2); -+ ok(userdata < 10, "expected userdata < 10, got %u\n", userdata); -+ ok(userdata2 == 1, "expected only one cancellation callback, got %u\n", userdata2); -+ ok(group_cancel_tid == GetCurrentThreadId(), "expected tid %x, got %x\n", -+ GetCurrentThreadId(), group_cancel_tid); -+ -+ /* Cleanup */ -+ pTpReleaseCleanupGroup(group); -+ pTpReleasePool(pool); -+} -+ -+static void CALLBACK timer_cb(TP_CALLBACK_INSTANCE *instance, void *userdata, TP_TIMER *timer) -+{ -+ trace("Running timer callback\n"); -+ InterlockedIncrement( (LONG *)userdata ); -+} -+ -+static void test_tp_timer(void) -+{ -+ TP_CALLBACK_ENVIRON environment; -+ TP_TIMER *timer; -+ TP_POOL *pool; -+ NTSTATUS status; -+ LONG userdata; -+ BOOL success; -+ LARGE_INTEGER when; -+ DWORD ticks; -+ -+ /* Allocate new threadpool */ -+ pool = NULL; -+ status = pTpAllocPool(&pool, NULL); -+ ok(!status, "TpAllocPool failed with status %x\n", status); -+ ok(pool != NULL, "expected pool != NULL\n"); -+ -+ /* Allocate new timer item */ -+ timer = NULL; -+ memset(&environment, 0, sizeof(environment)); -+ environment.Version = 1; -+ environment.Pool = pool; -+ status = pTpAllocTimer(&timer, timer_cb, &userdata, &environment); -+ ok(!status, "TpAllocTimer failed with status %x\n", status); -+ ok(timer != NULL, "expected timer != NULL\n"); -+ -+ success = pTpIsTimerSet(timer); -+ ok(!success, "expected TpIsTimerSet(...) = FALSE\n"); -+ -+ /* Set a relative timeout */ -+ userdata = 0; -+ when.QuadPart = (ULONGLONG)500 * -10000; -+ pTpSetTimer(timer, &when, 0, 0); -+ success = pTpIsTimerSet(timer); -+ ok(success, "expected TpIsTimerSet(...) = TRUE\n"); -+ -+ /* Wait until timer has triggered */ -+ pTpWaitForTimer(timer, FALSE); -+ Sleep(250); -+ ok(userdata == 0, "expected userdata = 0, got %u\n", userdata); -+ while (userdata == 0) Sleep(10); -+ ok(userdata == 1, "expected userdata = 1, got %u\n", userdata); -+ success = pTpIsTimerSet(timer); -+ ok(success, "expected TpIsTimerSet(...) = TRUE\n"); -+ -+ /* Set an absolute timeout */ -+ userdata = 0; -+ NtQuerySystemTime( &when ); -+ when.QuadPart += (ULONGLONG)500 * 10000; -+ pTpSetTimer(timer, &when, 0, 0); -+ success = pTpIsTimerSet(timer); -+ ok(success, "expected TpIsTimerSet(...) = TRUE\n"); -+ -+ /* Wait until timer has triggered */ -+ pTpWaitForTimer(timer, FALSE); -+ Sleep(250); -+ ok(userdata == 0, "expected userdata = 0, got %u\n", userdata); -+ while (userdata == 0) Sleep(10); -+ ok(userdata == 1, "expected userdata = 1, got %u\n", userdata); -+ success = pTpIsTimerSet(timer); -+ ok(success, "expected TpIsTimerSet(...) = TRUE\n"); -+ -+ /* Test a relative timeout repeated periodically */ -+ userdata = 0; -+ when.QuadPart = (ULONGLONG)50 * -10000; -+ pTpSetTimer(timer, &when, 50, 0); -+ success = pTpIsTimerSet(timer); -+ ok(success, "expected TpIsTimerSet(...) = TRUE\n"); -+ -+ /* Wait until the timer was triggered a couple of times */ -+ ticks = GetTickCount(); -+ while (userdata < 100) Sleep(10); -+ ticks = GetTickCount() - ticks; -+ pTpSetTimer(timer, NULL, 0, 0); -+ pTpWaitForTimer(timer, TRUE); -+ ok(ticks >= 4500 && ticks <= 5500, "expected approximately 5000 ticks, got %u\n", ticks); -+ success = pTpIsTimerSet(timer); -+ ok(!success, "expected TpIsTimerSet(...) = FALSE\n"); -+ -+ /* Test with zero timeout, we expect a call immediately */ -+ userdata = 0; -+ when.QuadPart = 0; -+ pTpSetTimer(timer, &when, 0, 0); -+ success = pTpIsTimerSet(timer); -+ ok(success, "expected TpIsTimerSet(...) = TRUE\n"); -+ -+ /* Wait until timer has triggered */ -+ pTpWaitForTimer(timer, FALSE); -+ ok(userdata == 1 || broken(userdata == 0) /* Win 8 */, -+ "expected userdata = 1, got %u\n", userdata); -+ while (userdata == 0) Sleep(10); -+ success = pTpIsTimerSet(timer); -+ ok(success, "expected TpIsTimerSet(...) = TRUE\n"); -+ -+ /* Unset the timer again */ -+ pTpSetTimer(timer, NULL, 0, 0); -+ success = pTpIsTimerSet(timer); -+ ok(!success, "expected TpIsTimerSet(...) = FALSE\n"); -+ -+ /* Cleanup */ -+ pTpReleaseTimer(timer); -+ pTpReleasePool(pool); -+} -+ -+static void CALLBACK window_length_cb(TP_CALLBACK_INSTANCE *instance, void *userdata, TP_TIMER *timer) -+{ -+ trace("Running window length callback\n"); -+ (*(DWORD *)userdata) = GetTickCount(); -+} -+ -+static void test_tp_window_length(void) -+{ -+ TP_CALLBACK_ENVIRON environment; -+ TP_TIMER *timer, *timer2; -+ DWORD ticks, ticks2; -+ TP_POOL *pool; -+ NTSTATUS status; -+ LARGE_INTEGER when; -+ -+ /* Allocate new threadpool */ -+ pool = NULL; -+ status = pTpAllocPool(&pool, NULL); -+ ok(!status, "TpAllocPool failed with status %x\n", status); -+ ok(pool != NULL, "expected pool != NULL\n"); -+ -+ /* Allocate two identical timers */ -+ timer = NULL; -+ memset(&environment, 0, sizeof(environment)); -+ environment.Version = 1; -+ environment.Pool = pool; -+ status = pTpAllocTimer(&timer, window_length_cb, &ticks, &environment); -+ ok(!status, "TpAllocTimer failed with status %x\n", status); -+ ok(timer != NULL, "expected timer != NULL\n"); -+ -+ timer2 = NULL; -+ status = pTpAllocTimer(&timer2, window_length_cb, &ticks2, &environment); -+ ok(!status, "TpAllocTimer failed with status %x\n", status); -+ ok(timer2 != NULL, "expected timer2 != NULL\n"); -+ -+ /* Choose parameters so that timers are not merged */ -+ ticks = ticks2 = 0; -+ NtQuerySystemTime( &when ); -+ when.QuadPart += (ULONGLONG)500 * 10000; -+ pTpSetTimer(timer2, &when, 0, 0); -+ Sleep(50); -+ when.QuadPart -= (ULONGLONG)400 * 10000; -+ pTpSetTimer(timer, &when, 0, 200); -+ while (!ticks || !ticks2) Sleep(10); -+ ok(ticks2 >= ticks + 150, "expected that timers are not merged\n"); -+ -+ /* On Windows the timers also get merged in this case */ -+ ticks = ticks2 = 0; -+ NtQuerySystemTime( &when ); -+ when.QuadPart += (ULONGLONG)100 * 10000; -+ pTpSetTimer(timer, &when, 0, 450); -+ Sleep(50); -+ when.QuadPart += (ULONGLONG)400 * 10000; -+ pTpSetTimer(timer2, &when, 0, 0); -+ while (!ticks || !ticks2) Sleep(10); -+ todo_wine -+ ok(ticks2 >= ticks - 50 && ticks2 <= ticks + 50, "expected that timers are merged\n"); -+ -+ /* Timers will be merged */ -+ ticks = ticks2 = 0; -+ NtQuerySystemTime( &when ); -+ when.QuadPart += (ULONGLONG)500 * 10000; -+ pTpSetTimer(timer2, &when, 0, 0); -+ Sleep(50); -+ when.QuadPart -= (ULONGLONG)400 * 10000; -+ pTpSetTimer(timer, &when, 0, 450); -+ while (!ticks || !ticks2) Sleep(10); -+ ok(ticks2 >= ticks - 50 && ticks2 <= ticks + 50, "expected that timers are merged\n"); -+ -+ /* Cleanup */ -+ pTpReleaseTimer(timer); -+ pTpReleaseTimer(timer2); -+ pTpReleasePool(pool); -+} -+ - START_TEST(threadpool) - { - if (!init_threadpool()) -@@ -315,4 +778,11 @@ START_TEST(threadpool) - test_tp_simple(); - test_tp_work(); - test_tp_work_scheduler(); -+ test_tp_instance(); -+ test_tp_group_cancel(); -+ test_tp_timer(); -+ test_tp_window_length(); -+ -+ /* FIXME: Make sure worker threads have terminated before. */ -+ Sleep(100); - } --- -2.3.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0017-kernel32-Forward-various-threadpool-functions-to-ntd.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0017-kernel32-Forward-various-threadpool-functions-to-ntd.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0017-kernel32-Forward-various-threadpool-functions-to-ntd.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0017-kernel32-Forward-various-threadpool-functions-to-ntd.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,342 +0,0 @@ -From 6a7aaa0145d32fde06229bae7f8cb879ea2ac182 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Sun, 1 Feb 2015 19:41:13 +0100 -Subject: kernel32: Forward various threadpool functions to ntdll. - ---- - dlls/kernel32/kernel32.spec | 48 ++++++++++---------- - dlls/kernel32/tests/thread.c | 6 +-- - dlls/kernel32/thread.c | 101 +++++++++++++++++++++++++++++++++++++++++++ - include/winternl.h | 27 ++++++++++++ - 4 files changed, 155 insertions(+), 27 deletions(-) - -diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec -index 1179af2..f65f894 100644 ---- a/dlls/kernel32/kernel32.spec -+++ b/dlls/kernel32/kernel32.spec -@@ -204,7 +204,7 @@ - @ stdcall BuildCommDCBAndTimeoutsA(str ptr ptr) - @ stdcall BuildCommDCBAndTimeoutsW(wstr ptr ptr) - @ stdcall BuildCommDCBW(wstr ptr) --# @ stub CallbackMayRunLong -+@ stdcall CallbackMayRunLong(ptr) ntdll.TpCallbackMayRunLong - @ stdcall CallNamedPipeA(str ptr long ptr long ptr long) - @ stdcall CallNamedPipeW(wstr ptr long ptr long ptr long) - @ stub CancelDeviceWakeupRequest -@@ -228,13 +228,13 @@ - # @ stub ClosePrivateNamespace - @ stdcall CloseProfileUserMapping() - @ stub CloseSystemHandle --# @ stub CloseThreadpool --# @ stub CloseThreadpoolCleanupGroup --# @ stub CloseThreadpoolCleanupGroupMembers -+@ stdcall CloseThreadpool(ptr) ntdll.TpReleasePool -+@ stdcall CloseThreadpoolCleanupGroup(ptr) ntdll.TpReleaseCleanupGroup -+@ stdcall CloseThreadpoolCleanupGroupMembers(ptr long ptr) ntdll.TpReleaseCleanupGroupMembers - # @ stub CloseThreadpoolIo --# @ stub CloseThreadpoolTimer -+@ stdcall CloseThreadpoolTimer(ptr) ntdll.TpReleaseTimer - # @ stub CloseThreadpoolWait --# @ stub CloseThreadpoolWork -+@ stdcall CloseThreadpoolWork(ptr) ntdll.TpReleaseWork - @ stdcall CmdBatNotification(long) - @ stdcall CommConfigDialogA(str long ptr) - @ stdcall CommConfigDialogW(wstr long ptr) -@@ -331,12 +331,12 @@ - @ stdcall CreateSymbolicLinkW(wstr wstr long) - @ stdcall CreateTapePartition(long long long long) - @ stdcall CreateThread(ptr long ptr long long ptr) --# @ stub CreateThreadpool --# @ stub CreateThreadpoolCleanupGroup -+@ stdcall CreateThreadpool(ptr) -+@ stdcall CreateThreadpoolCleanupGroup() - # @ stub CreateThreadpoolIo --# @ stub CreateThreadpoolTimer -+@ stdcall CreateThreadpoolTimer(ptr ptr ptr) - # @ stub CreateThreadpoolWait --# @ stub CreateThreadpoolWork -+@ stdcall CreateThreadpoolWork(ptr ptr ptr) - @ stdcall CreateTimerQueue () - @ stdcall CreateTimerQueueTimer(ptr long ptr ptr long long long) - @ stdcall CreateToolhelp32Snapshot(long long) -@@ -369,7 +369,7 @@ - @ stdcall DeleteFileW(wstr) - # @ stub DeleteProcThreadAttributeList - # @ stub DisableThreadProfiling --# @ stub DisassociateCurrentThreadFromCallback -+@ stdcall DisassociateCurrentThreadFromCallback(ptr) ntdll.TpDisassociateCallback - @ stdcall DeleteTimerQueue(long) - @ stdcall DeleteTimerQueueEx (long long) - @ stdcall DeleteTimerQueueTimer(long long long) -@@ -495,7 +495,6 @@ - @ stdcall FindFirstVolumeMountPointA(str ptr long) - @ stdcall FindFirstVolumeMountPointW(wstr ptr long) - @ stdcall FindFirstVolumeW(ptr long) --# @ stub FreeLibraryWhenCallbackReturns - @ stdcall FindNextChangeNotification(long) - @ stdcall FindNextFileA(long ptr) - # @ stub FindNextFileNameW -@@ -533,6 +532,7 @@ - @ stub -i386 FreeLSCallback - @ stdcall FreeLibrary(long) - @ stdcall FreeLibraryAndExitThread(long long) -+@ stdcall FreeLibraryWhenCallbackReturns(ptr ptr) ntdll.TpCallbackUnloadDllOnCompletion - @ stdcall FreeResource(long) - @ stdcall -i386 -private FreeSLCallback(long) krnl386.exe16.FreeSLCallback - @ stub FreeUserPhysicalPages -@@ -980,7 +980,7 @@ - @ stub -i386 IsSLCallback - @ stdcall IsSystemResumeAutomatic() - @ stdcall IsThreadAFiber() --# @ stub IsThreadpoolTimerSet -+@ stdcall IsThreadpoolTimerSet(ptr) ntdll.TpIsTimerSet - # @ stub IsTimeZoneRedirectionEnabled - # @ stub IsValidCalDateTime - @ stdcall IsValidCodePage(long) -@@ -1034,7 +1034,7 @@ - @ stdcall LZSeek(long long long) - @ stdcall LZStart() - @ stdcall LeaveCriticalSection(ptr) ntdll.RtlLeaveCriticalSection --# @ stub LeaveCriticalSectionWhenCallbackReturns -+@ stdcall LeaveCriticalSectionWhenCallbackReturns(ptr ptr) ntdll.TpCallbackLeaveCriticalSectionOnCompletion - # @ stub LoadAppInitDlls - @ stdcall LoadLibraryA(str) - @ stdcall LoadLibraryExA( str long long) -@@ -1251,9 +1251,9 @@ - @ stdcall ReinitializeCriticalSection(ptr) - @ stdcall ReleaseActCtx(ptr) - @ stdcall ReleaseMutex(long) --# @ stub ReleaseMutexWhenCallbackReturns -+@ stdcall ReleaseMutexWhenCallbackReturns(ptr long) ntdll.TpCallbackReleaseMutexOnCompletion - @ stdcall ReleaseSemaphore(long long ptr) --# @ stub ReleaseSemaphoreWhenCallbackReturns -+@ stdcall ReleaseSemaphoreWhenCallbackReturns(ptr long long) ntdll.TpCallbackReleaseSemaphoreOnCompletion - @ stdcall ReleaseSRWLockExclusive(ptr) ntdll.RtlReleaseSRWLockExclusive - @ stdcall ReleaseSRWLockShared(ptr) ntdll.RtlReleaseSRWLockShared - @ stdcall RemoveDirectoryA(str) -@@ -1384,7 +1384,7 @@ - @ stdcall SetEnvironmentVariableW(wstr wstr) - @ stdcall SetErrorMode(long) - @ stdcall SetEvent(long) --# @ stub SetEventWhenCallbackReturns -+@ stdcall SetEventWhenCallbackReturns(ptr long) ntdll.TpCallbackSetEventOnCompletion - @ stdcall SetFileApisToANSI() - @ stdcall SetFileApisToOEM() - @ stdcall SetFileAttributesA(str long) -@@ -1453,9 +1453,9 @@ - # @ stub SetThreadToken - @ stdcall SetThreadUILanguage(long) - # @ stub SetThreadpoolStackInformation --# @ stub SetThreadpoolThreadMaximum --# @ stub SetThreadpoolThreadMinimum --# @ stub SetThreadpoolTimer -+@ stdcall SetThreadpoolThreadMaximum(ptr long) ntdll.TpSetPoolMaxThreads -+@ stdcall SetThreadpoolThreadMinimum(ptr long) ntdll.TpSetPoolMinThreads -+@ stdcall SetThreadpoolTimer(ptr ptr long long) - # @ stub SetThreadpoolWait - @ stdcall SetTimeZoneInformation(ptr) - @ stub SetTimerQueueTimer -@@ -1481,7 +1481,7 @@ - # @ stub SortCloseHandle - # @ stub SortGetHandle - # @ stub StartThreadpoolIo --# @ stub SubmitThreadpoolWork -+@ stdcall SubmitThreadpoolWork(ptr) ntdll.TpPostWork - @ stdcall SuspendThread(long) - @ stdcall SwitchToFiber(ptr) - @ stdcall SwitchToThread() -@@ -1508,7 +1508,7 @@ - @ stdcall TryAcquireSRWLockExclusive(ptr) ntdll.RtlTryAcquireSRWLockExclusive - @ stdcall TryAcquireSRWLockShared(ptr) ntdll.RtlTryAcquireSRWLockShared - @ stdcall TryEnterCriticalSection(ptr) ntdll.RtlTryEnterCriticalSection --# @ stub TrySubmitThreadpoolCallback -+@ stdcall TrySubmitThreadpoolCallback(ptr ptr ptr) ntdll.TpSimpleTryPost - @ stdcall TzSpecificLocalTimeToSystemTime(ptr ptr ptr) - # @ stub TzSpecificLocalTimeToSystemTimeEx - # @ stub -arch=x86_64 uaw_lstrcmpW -@@ -1570,9 +1570,9 @@ - @ stdcall WaitForSingleObject(long long) - @ stdcall WaitForSingleObjectEx(long long long) - # @ stub WaitForThreadpoolIoCallbacks --# @ stub WaitForThreadpoolTimerCallbacks -+@ stdcall WaitForThreadpoolTimerCallbacks(ptr long) ntdll.TpWaitForTimer - # @ stub WaitForThreadpoolWaitCallbacks --# @ stub WaitForThreadpoolWorkCallbacks -+@ stdcall WaitForThreadpoolWorkCallbacks(ptr long) ntdll.TpWaitForWork - @ stdcall WaitNamedPipeA (str long) - @ stdcall WaitNamedPipeW (wstr long) - @ stdcall WakeAllConditionVariable(ptr) ntdll.RtlWakeAllConditionVariable -diff --git a/dlls/kernel32/tests/thread.c b/dlls/kernel32/tests/thread.c -index d3ecd2a..25801b2 100644 ---- a/dlls/kernel32/tests/thread.c -+++ b/dlls/kernel32/tests/thread.c -@@ -1627,8 +1627,8 @@ static void test_threadpool(void) - int workcalled = 0; - - if (!pCreateThreadpool) { -- todo_wine win_skip("thread pool apis not supported.\n"); -- return; -+ win_skip("thread pool apis not supported.\n"); -+ return; - } - - work = pCreateThreadpoolWork(threadpool_workcallback, &workcalled, NULL); -@@ -1640,7 +1640,7 @@ static void test_threadpool(void) - ok (workcalled == 1, "expected work to be called once, got %d\n", workcalled); - - pool = pCreateThreadpool(NULL); -- todo_wine ok (pool != NULL, "CreateThreadpool failed\n"); -+ ok (pool != NULL, "CreateThreadpool failed\n"); - } - - static void test_reserved_tls(void) -diff --git a/dlls/kernel32/thread.c b/dlls/kernel32/thread.c -index 3dabf94..945fe0b 100644 ---- a/dlls/kernel32/thread.c -+++ b/dlls/kernel32/thread.c -@@ -860,3 +860,104 @@ BOOL WINAPI GetThreadPreferredUILanguages( DWORD flags, PULONG count, PCZZWSTR b - *buffersize = 0; - return TRUE; - } -+ -+/*********************************************************************** -+ * CreateThreadpool (KERNEL32.@) -+ */ -+PTP_POOL WINAPI CreateThreadpool( PVOID reserved ) -+{ -+ TP_POOL *pool; -+ NTSTATUS status; -+ -+ TRACE( "%p\n", reserved ); -+ -+ status = TpAllocPool( &pool, reserved ); -+ if (status) -+ { -+ SetLastError( RtlNtStatusToDosError(status) ); -+ return NULL; -+ } -+ -+ return pool; -+} -+ -+/*********************************************************************** -+ * CreateThreadpoolCleanupGroup (KERNEL32.@) -+ */ -+PTP_CLEANUP_GROUP WINAPI CreateThreadpoolCleanupGroup( void ) -+{ -+ TP_CLEANUP_GROUP *group; -+ NTSTATUS status; -+ -+ TRACE( "\n" ); -+ -+ status = TpAllocCleanupGroup( &group ); -+ if (status) -+ { -+ SetLastError( RtlNtStatusToDosError(status) ); -+ return NULL; -+ } -+ -+ return group; -+} -+ -+/*********************************************************************** -+ * CreateThreadpoolTimer (KERNEL32.@) -+ */ -+PTP_TIMER WINAPI CreateThreadpoolTimer( PTP_TIMER_CALLBACK callback, PVOID userdata, -+ TP_CALLBACK_ENVIRON *environment ) -+{ -+ TP_TIMER *timer; -+ NTSTATUS status; -+ -+ TRACE( "%p, %p, %p\n", callback, userdata, environment ); -+ -+ status = TpAllocTimer( &timer, callback, userdata, environment ); -+ if (status) -+ { -+ SetLastError( RtlNtStatusToDosError(status) ); -+ return NULL; -+ } -+ -+ return timer; -+} -+ -+/*********************************************************************** -+ * CreateThreadpoolWork (KERNEL32.@) -+ */ -+PTP_WORK WINAPI CreateThreadpoolWork( PTP_WORK_CALLBACK callback, PVOID userdata, -+ TP_CALLBACK_ENVIRON *environment ) -+{ -+ TP_WORK *work; -+ NTSTATUS status; -+ -+ TRACE( "%p, %p, %p\n", callback, userdata, environment ); -+ -+ status = TpAllocWork( &work, callback, userdata, environment ); -+ if (status) -+ { -+ SetLastError( RtlNtStatusToDosError(status) ); -+ return NULL; -+ } -+ -+ return work; -+} -+ -+/*********************************************************************** -+ * SetThreadpoolTimer (KERNEL32.@) -+ */ -+VOID WINAPI SetThreadpoolTimer( TP_TIMER *timer, FILETIME *due_time, -+ DWORD period, DWORD window_length ) -+{ -+ LARGE_INTEGER timeout; -+ -+ TRACE( "%p, %p, %u, %u\n", timer, due_time, period, window_length ); -+ -+ if (due_time) -+ { -+ timeout.u.LowPart = due_time->dwLowDateTime; -+ timeout.u.HighPart = due_time->dwHighDateTime; -+ } -+ -+ TpSetTimer( timer, due_time ? &timeout : NULL, period, window_length ); -+} -diff --git a/include/winternl.h b/include/winternl.h -index f88001f..4f16d24 100644 ---- a/include/winternl.h -+++ b/include/winternl.h -@@ -2596,6 +2596,33 @@ NTSYSAPI LONGLONG WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG); - NTSYSAPI NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR); - #endif - -+/* Threadpool functions */ -+ -+NTSYSAPI NTSTATUS WINAPI TpAllocCleanupGroup(TP_CLEANUP_GROUP **); -+NTSYSAPI NTSTATUS WINAPI TpAllocPool(TP_POOL **,PVOID); -+NTSYSAPI NTSTATUS WINAPI TpAllocTimer(TP_TIMER **,PTP_TIMER_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); -+NTSYSAPI NTSTATUS WINAPI TpAllocWork(TP_WORK **,PTP_WORK_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); -+NTSYSAPI void WINAPI TpCallbackLeaveCriticalSectionOnCompletion(TP_CALLBACK_INSTANCE *,RTL_CRITICAL_SECTION *); -+NTSYSAPI NTSTATUS WINAPI TpCallbackMayRunLong(TP_CALLBACK_INSTANCE *); -+NTSYSAPI void WINAPI TpCallbackReleaseMutexOnCompletion(TP_CALLBACK_INSTANCE *,HANDLE); -+NTSYSAPI void WINAPI TpCallbackReleaseSemaphoreOnCompletion(TP_CALLBACK_INSTANCE *,HANDLE,DWORD); -+NTSYSAPI void WINAPI TpCallbackSetEventOnCompletion(TP_CALLBACK_INSTANCE *,HANDLE); -+NTSYSAPI void WINAPI TpCallbackUnloadDllOnCompletion(TP_CALLBACK_INSTANCE *,HMODULE); -+NTSYSAPI void WINAPI TpDisassociateCallback(TP_CALLBACK_INSTANCE *); -+NTSYSAPI BOOL WINAPI TpIsTimerSet(TP_TIMER *); -+NTSYSAPI void WINAPI TpPostWork(TP_WORK *); -+NTSYSAPI void WINAPI TpReleaseCleanupGroup(TP_CLEANUP_GROUP *); -+NTSYSAPI void WINAPI TpReleaseCleanupGroupMembers(TP_CLEANUP_GROUP *,BOOL,PVOID); -+NTSYSAPI void WINAPI TpReleasePool(TP_POOL *); -+NTSYSAPI void WINAPI TpReleaseTimer(TP_TIMER *); -+NTSYSAPI void WINAPI TpReleaseWork(TP_WORK *); -+NTSYSAPI void WINAPI TpSetPoolMaxThreads(TP_POOL *,DWORD); -+NTSYSAPI BOOL WINAPI TpSetPoolMinThreads(TP_POOL *,DWORD); -+NTSYSAPI void WINAPI TpSetTimer(TP_TIMER *, LARGE_INTEGER *,LONG,LONG); -+NTSYSAPI NTSTATUS WINAPI TpSimpleTryPost(PTP_SIMPLE_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); -+NTSYSAPI void WINAPI TpWaitForTimer(TP_TIMER *,BOOL); -+NTSYSAPI void WINAPI TpWaitForWork(TP_WORK *,BOOL); -+ - /* Wine internal functions */ - - NTSYSAPI NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret, --- -2.3.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0018-ntdll-Implement-threadpool-wait-objects.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0018-ntdll-Implement-threadpool-wait-objects.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0018-ntdll-Implement-threadpool-wait-objects.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0018-ntdll-Implement-threadpool-wait-objects.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,683 +0,0 @@ -From 8e1c71f635b4005958e8f8b3a8b3bd654367f71c Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Wed, 4 Mar 2015 13:33:25 +0100 -Subject: ntdll: Implement threadpool wait objects. - ---- - dlls/ntdll/ntdll.spec | 8 +- - dlls/ntdll/threadpool.c | 472 +++++++++++++++++++++++++++++++++++++++++++++++- - 2 files changed, 469 insertions(+), 11 deletions(-) - -diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec -index 21f39de..9093eb8 100644 ---- a/dlls/ntdll/ntdll.spec -+++ b/dlls/ntdll/ntdll.spec -@@ -975,7 +975,7 @@ - # @ stub TpAllocJobNotification - @ stdcall TpAllocPool(ptr ptr) - @ stdcall TpAllocTimer(ptr ptr ptr) --# @ stub TpAllocWait -+@ stdcall TpAllocWait(ptr ptr ptr ptr) - @ stdcall TpAllocWork(ptr ptr ptr ptr) - # @ stub TpAlpcRegisterCompletionList - # @ stub TpAlpcUnregisterCompletionList -@@ -1006,7 +1006,7 @@ - # @ stub TpReleaseJobNotification - @ stdcall TpReleasePool(ptr) - @ stdcall TpReleaseTimer(ptr) --# @ stub TpReleaseWait -+@ stdcall TpReleaseWait(ptr) - @ stdcall TpReleaseWork(ptr) - # @ stub TpSetDefaultPoolMaxThreads - # @ stub TpSetDefaultPoolStackInformation -@@ -1018,7 +1018,7 @@ - # @ stub TpSetPoolWorkerThreadIdleTimeout - @ stdcall TpSetTimer(ptr ptr long long) - # @ stub TpSetTimerEx --# @ stub TpSetWait -+@ stdcall TpSetWait(ptr long ptr) - # @ stub TpSetWaitEx - @ stdcall TpSimpleTryPost(ptr ptr ptr) - # @ stub TpStartAsyncIoOperation -@@ -1028,7 +1028,7 @@ - # @ stub TpWaitForIoCompletion - # @ stub TpWaitForJobNotification - @ stdcall TpWaitForTimer(ptr long) --# @ stub TpWaitForWait -+@ stdcall TpWaitForWait(ptr long) - @ stdcall TpWaitForWork(ptr long) - @ stdcall -ret64 VerSetConditionMask(int64 long long) - @ stdcall WinSqmIsOptedIn() -diff --git a/dlls/ntdll/threadpool.c b/dlls/ntdll/threadpool.c -index a973409..7df8cb1 100644 ---- a/dlls/ntdll/threadpool.c -+++ b/dlls/ntdll/threadpool.c -@@ -137,6 +137,7 @@ struct timer_queue - */ - - #define THREADPOOL_WORKER_TIMEOUT 5000 -+#define MAXIMUM_WAITQUEUE_OBJECTS (MAXIMUM_WAIT_OBJECTS - 1) - - /* internal threadpool representation */ - struct threadpool -@@ -158,7 +159,8 @@ enum threadpool_objtype - { - TP_OBJECT_TYPE_SIMPLE, - TP_OBJECT_TYPE_WORK, -- TP_OBJECT_TYPE_TIMER -+ TP_OBJECT_TYPE_TIMER, -+ TP_OBJECT_TYPE_WAIT - }; - - /* internal threadpool object representation */ -@@ -206,6 +208,17 @@ struct threadpool_object - LONG period; - LONG window_length; - } timer; -+ struct -+ { -+ PTP_WAIT_CALLBACK callback; -+ LONG signaled; -+ /* information about the wait, locked via waitqueue.cs */ -+ struct waitqueue_bucket *bucket; -+ BOOL wait_pending; -+ struct list wait_entry; -+ ULONGLONG timeout; -+ HANDLE handle; -+ } wait; - } u; - }; - -@@ -264,6 +277,38 @@ static RTL_CRITICAL_SECTION_DEBUG timerqueue_debug = - 0, 0, { (DWORD_PTR)(__FILE__ ": timerqueue.cs") } - }; - -+struct waitqueue_bucket -+{ -+ struct list bucket_entry; -+ LONG num_waits; -+ struct list reserved; -+ struct list waits; -+ HANDLE update_event; -+}; -+ -+/* global waitqueue object */ -+static RTL_CRITICAL_SECTION_DEBUG waitqueue_debug; -+ -+static struct -+{ -+ CRITICAL_SECTION cs; -+ LONG num_buckets; -+ struct list buckets; -+} -+waitqueue = -+{ -+ { &waitqueue_debug, -1, 0, 0, 0, 0 }, -+ 0, -+ LIST_INIT( waitqueue.buckets ) -+}; -+ -+static RTL_CRITICAL_SECTION_DEBUG waitqueue_debug = -+{ -+ 0, 0, &waitqueue.cs, -+ { &waitqueue_debug.ProcessLocksList, &waitqueue_debug.ProcessLocksList }, -+ 0, 0, { (DWORD_PTR)(__FILE__ ": waitqueue.cs") } -+}; -+ - static inline struct threadpool *impl_from_TP_POOL( TP_POOL *pool ) - { - return (struct threadpool *)pool; -@@ -283,6 +328,13 @@ static inline struct threadpool_object *impl_from_TP_TIMER( TP_TIMER *timer ) - return object; - } - -+static inline struct threadpool_object *impl_from_TP_WAIT( TP_WAIT *wait ) -+{ -+ struct threadpool_object *object = (struct threadpool_object *)wait; -+ assert( !object || object->type == TP_OBJECT_TYPE_WAIT ); -+ return object; -+} -+ - static inline struct threadpool_group *impl_from_TP_CLEANUP_GROUP( TP_CLEANUP_GROUP *group ) - { - return (struct threadpool_group *)group; -@@ -295,7 +347,8 @@ static inline struct threadpool_instance *impl_from_TP_CALLBACK_INSTANCE( TP_CAL - - static void CALLBACK threadpool_worker_proc( void *param ); - static void CALLBACK timerqueue_thread_proc( void *param ); --static void tp_object_submit( struct threadpool_object *object ); -+static void CALLBACK waitqueue_thread_proc( void *param ); -+static void tp_object_submit( struct threadpool_object *object, BOOL success ); - static void tp_object_shutdown( struct threadpool_object *object ); - static BOOL tp_object_release( struct threadpool_object *object ); - static struct threadpool *default_threadpool = NULL; -@@ -1349,7 +1402,7 @@ update_timer: - RtlLeaveCriticalSection( &timerqueue.cs ); - - if (submit_timer) -- tp_object_submit( new_timer ); -+ tp_object_submit( new_timer, FALSE ); - } - - static void CALLBACK timerqueue_thread_proc( void *param ) -@@ -1376,7 +1429,7 @@ static void CALLBACK timerqueue_thread_proc( void *param ) - - /* Queue a new callback in one of the worker threads */ - list_remove( &timer->u.timer.timer_entry ); -- tp_object_submit( timer ); -+ tp_object_submit( timer, FALSE ); - - /* Requeue the timer, except its marked for shutdown */ - if (!timer->shutdown && timer->u.timer.period) -@@ -1442,6 +1495,301 @@ static void CALLBACK timerqueue_thread_proc( void *param ) - RtlLeaveCriticalSection( &timerqueue.cs ); - } - -+static NTSTATUS tp_waitqueue_acquire( struct threadpool_object *wait ) -+{ -+ struct waitqueue_bucket *bucket; -+ NTSTATUS status; -+ HANDLE thread; -+ assert( wait->type = TP_OBJECT_TYPE_WAIT ); -+ -+ wait->u.wait.signaled = 0; -+ wait->u.wait.bucket = NULL; -+ wait->u.wait.wait_pending = FALSE; -+ memset( &wait->u.wait.wait_entry, 0, sizeof(wait->u.wait.wait_entry) ); -+ wait->u.wait.timeout = 0; -+ wait->u.wait.handle = INVALID_HANDLE_VALUE; -+ -+ RtlEnterCriticalSection( &waitqueue.cs ); -+ -+ LIST_FOR_EACH_ENTRY( bucket, &waitqueue.buckets, struct waitqueue_bucket, bucket_entry ) -+ { -+ if (bucket->num_waits < MAXIMUM_WAITQUEUE_OBJECTS) -+ { -+ bucket->num_waits++; -+ wait->u.wait.bucket = bucket; -+ list_add_tail( &bucket->reserved, &wait->u.wait.wait_entry ); -+ -+ status = STATUS_SUCCESS; -+ goto out; -+ } -+ } -+ -+ bucket = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*bucket) ); -+ if (!bucket) -+ { -+ status = STATUS_NO_MEMORY; -+ goto out; -+ } -+ -+ bucket->num_waits = 1; -+ list_init( &bucket->reserved ); -+ list_init( &bucket->waits ); -+ -+ status = NtCreateEvent( &bucket->update_event, EVENT_ALL_ACCESS, NULL, SynchronizationEvent, FALSE ); -+ if (status) -+ { -+ RtlFreeHeap( GetProcessHeap(), 0, bucket ); -+ goto out; -+ } -+ -+ status = RtlCreateUserThread( GetCurrentProcess(), NULL, FALSE, NULL, 0, 0, -+ waitqueue_thread_proc, bucket, &thread, NULL ); -+ if (status == STATUS_SUCCESS) -+ { -+ waitqueue.num_buckets++; -+ list_add_tail( &waitqueue.buckets, &bucket->bucket_entry ); -+ -+ wait->u.wait.bucket = bucket; -+ list_add_tail( &bucket->reserved, &wait->u.wait.wait_entry ); -+ -+ NtClose( thread ); -+ } -+ else -+ { -+ NtClose( bucket->update_event ); -+ RtlFreeHeap( GetProcessHeap(), 0, bucket ); -+ } -+ -+out: -+ RtlLeaveCriticalSection( &waitqueue.cs ); -+ return status; -+} -+ -+/* Decrement the refcount of a timer queue. */ -+static void tp_waitqueue_release( struct threadpool_object *wait ) -+{ -+ assert( wait->type == TP_OBJECT_TYPE_WAIT ); -+ RtlEnterCriticalSection( &waitqueue.cs ); -+ -+ if (wait->u.wait.bucket) -+ { -+ struct waitqueue_bucket *bucket = wait->u.wait.bucket; -+ assert( bucket->num_waits > 0 ); -+ -+ bucket->num_waits--; -+ list_remove( &wait->u.wait.wait_entry ); -+ NtSetEvent( bucket->update_event, NULL ); -+ -+ wait->u.wait.bucket = NULL; -+ } -+ -+ RtlLeaveCriticalSection( &waitqueue.cs ); -+} -+ -+static void tp_waitqueue_update_wait( struct threadpool_object *new_wait, HANDLE handle, LARGE_INTEGER *timeout ) -+{ -+ BOOL submit_wait = FALSE; -+ -+ assert( new_wait->type == TP_OBJECT_TYPE_WAIT ); -+ RtlEnterCriticalSection( &waitqueue.cs ); -+ assert( new_wait->u.wait.bucket ); -+ -+ /* update wait handle */ -+ new_wait->u.wait.handle = handle; -+ -+ /* for performance reasons we only wake up when something has changed */ -+ if (handle || new_wait->u.wait.wait_pending) -+ { -+ struct waitqueue_bucket *bucket = new_wait->u.wait.bucket; -+ list_remove( &new_wait->u.wait.wait_entry ); -+ -+ if (handle) -+ { -+ ULONGLONG when = TIMEOUT_INFINITE; -+ -+ if (timeout) -+ { -+ when = timeout->QuadPart; -+ -+ /* A timeout of zero means that the wait should be submitted immediately */ -+ if (when == 0) -+ { -+ submit_wait = TRUE; -+ goto remove_wait; -+ } -+ -+ /* Convert relative timeout to absolute */ -+ if ((LONGLONG)when < 0) -+ { -+ LARGE_INTEGER now; -+ NtQuerySystemTime( &now ); -+ when = now.QuadPart - when; -+ } -+ } -+ -+ list_add_tail( &bucket->waits, &new_wait->u.wait.wait_entry ); -+ new_wait->u.wait.wait_pending = TRUE; -+ new_wait->u.wait.timeout = when; -+ } -+ else -+ { -+remove_wait: -+ list_add_tail( &bucket->reserved, &new_wait->u.wait.wait_entry ); -+ new_wait->u.wait.wait_pending = FALSE; -+ } -+ -+ NtSetEvent( bucket->update_event, NULL ); -+ } -+ -+ RtlLeaveCriticalSection( &waitqueue.cs ); -+ -+ if (submit_wait) -+ tp_object_submit( new_wait, FALSE ); -+} -+ -+static void CALLBACK waitqueue_thread_proc( void *param ) -+{ -+ HANDLE handles[MAXIMUM_WAITQUEUE_OBJECTS + 1]; -+ struct threadpool_object *objects[MAXIMUM_WAITQUEUE_OBJECTS]; -+ struct waitqueue_bucket *bucket = param; -+ LARGE_INTEGER now, timeout; -+ struct threadpool_object *wait, *next; -+ DWORD num_handles; -+ NTSTATUS status; -+ -+ RtlEnterCriticalSection( &waitqueue.cs ); -+ -+ for (;;) -+ { -+ NtQuerySystemTime( &now ); -+ timeout.QuadPart = TIMEOUT_INFINITE; -+ num_handles = 0; -+ -+ LIST_FOR_EACH_ENTRY_SAFE( wait, next, &bucket->waits, struct threadpool_object, u.wait.wait_entry ) -+ { -+ assert( wait->type == TP_OBJECT_TYPE_WAIT ); -+ -+ /* Timeout expired or object was signaled */ -+ if (wait->u.wait.timeout <= now.QuadPart) -+ { -+ list_remove( &wait->u.wait.wait_entry ); -+ list_add_tail( &bucket->reserved, &wait->u.wait.wait_entry ); -+ tp_object_submit( wait, FALSE ); -+ } -+ else -+ { -+ if (wait->u.wait.timeout < timeout.QuadPart) -+ timeout.QuadPart = wait->u.wait.timeout; -+ -+ /* We will have to wait for this object - keep a reference to make sure it doesn't get destroyed */ -+ assert( num_handles < MAXIMUM_WAITQUEUE_OBJECTS ); -+ interlocked_inc( &wait->refcount ); -+ objects[num_handles] = wait; -+ handles[num_handles] = wait->u.wait.handle; -+ num_handles++; -+ } -+ } -+ -+ if (!bucket->num_waits) -+ { -+ assert( num_handles == 0 ); -+ -+ /* All wait objects have been destroyed, if there are no new wait objects within some -+ * amount of time, then we can shutdown this thread. */ -+ RtlLeaveCriticalSection( &waitqueue.cs ); -+ timeout.QuadPart = (ULONGLONG)THREADPOOL_WORKER_TIMEOUT * -10000; -+ status = NtWaitForMultipleObjects( 1, &bucket->update_event, TRUE, FALSE, &timeout ); -+ RtlEnterCriticalSection( &waitqueue.cs ); -+ -+ if (status == STATUS_TIMEOUT && !bucket->num_waits) -+ break; -+ } -+ else -+ { -+ handles[num_handles] = bucket->update_event; -+ -+ /* Wait for a wait queue update event or until an event is triggered */ -+ RtlLeaveCriticalSection( &waitqueue.cs ); -+ status = NtWaitForMultipleObjects( num_handles + 1, handles, TRUE, FALSE, &timeout ); -+ RtlEnterCriticalSection( &waitqueue.cs ); -+ -+ if (status >= STATUS_WAIT_0 && status < STATUS_WAIT_0 + num_handles) -+ { -+ wait = objects[status - STATUS_WAIT_0]; -+ assert( wait->type == TP_OBJECT_TYPE_WAIT ); -+ -+ if (wait->u.wait.bucket) -+ { -+ assert( wait->u.wait.bucket == bucket ); -+ list_remove( &wait->u.wait.wait_entry ); -+ list_add_tail( &bucket->reserved, &wait->u.wait.wait_entry ); -+ tp_object_submit( wait, TRUE ); -+ } -+ else -+ FIXME("Wait object triggered while object was destroyed, race-condition.\n"); -+ } -+ -+ while (num_handles) -+ { -+ wait = objects[--num_handles]; -+ assert( wait->type == TP_OBJECT_TYPE_WAIT ); -+ tp_object_release( wait ); -+ } -+ } -+ -+ /* Try to merge with other buckets */ -+ if (waitqueue.num_buckets > 1 && bucket->num_waits && bucket->num_waits < MAXIMUM_WAITQUEUE_OBJECTS / 2) -+ { -+ struct waitqueue_bucket *other_bucket; -+ LIST_FOR_EACH_ENTRY( other_bucket, &waitqueue.buckets, struct waitqueue_bucket, bucket_entry ) -+ { -+ if (other_bucket != bucket && other_bucket->num_waits && -+ other_bucket->num_waits + bucket->num_waits <= MAXIMUM_WAITQUEUE_OBJECTS) -+ { -+ other_bucket->num_waits += bucket->num_waits; -+ bucket->num_waits = 0; -+ -+ LIST_FOR_EACH_ENTRY( wait, &bucket->reserved, struct threadpool_object, u.wait.wait_entry ) -+ { -+ assert( wait->type == TP_OBJECT_TYPE_WAIT ); -+ wait->u.wait.bucket = other_bucket; -+ } -+ list_move_tail( &other_bucket->reserved, &bucket->reserved ); -+ -+ LIST_FOR_EACH_ENTRY( wait, &bucket->waits, struct threadpool_object, u.wait.wait_entry ) -+ { -+ assert( wait->type == TP_OBJECT_TYPE_WAIT ); -+ wait->u.wait.bucket = other_bucket; -+ } -+ list_move_tail( &other_bucket->waits, &bucket->waits ); -+ -+ /* we will not terminate immediately, but instead after a timeout. Make sure that this -+ * bucket appears as the last one in the list, otherwise there is a high risk that -+ * elements will be added again. */ -+ list_remove( &bucket->bucket_entry ); -+ list_add_tail( &waitqueue.buckets, &bucket->bucket_entry ); -+ -+ NtSetEvent( other_bucket->update_event, NULL ); -+ break; -+ } -+ } -+ } -+ } -+ -+ waitqueue.num_buckets--; -+ list_remove( &bucket->bucket_entry ); -+ if (!waitqueue.num_buckets) -+ assert( list_empty( &waitqueue.buckets ) ); -+ RtlLeaveCriticalSection( &waitqueue.cs ); -+ -+ assert( bucket->num_waits == 0 ); -+ assert( list_empty( &bucket->reserved ) ); -+ assert( list_empty( &bucket->waits ) ); -+ -+ NtClose( bucket->update_event ); -+ RtlFreeHeap( GetProcessHeap(), 0, bucket ); -+} -+ - /* allocate a new threadpool (with at least one worker thread) */ - static NTSTATUS tp_threadpool_alloc( struct threadpool **out ) - { -@@ -1640,7 +1988,7 @@ static void tp_object_initialize( struct threadpool_object *object, struct threa - * to the cleanup group. As soon as the cleanup group members are released ->shutdown - * will be set, and tp_object_submit would fail with an assertion. */ - if (simple_cb) -- tp_object_submit( object ); -+ tp_object_submit( object, FALSE ); - - if (object->group) - { -@@ -1661,7 +2009,7 @@ static void tp_object_initialize( struct threadpool_object *object, struct threa - } - - /* submits an object to a threadpool */ --static void tp_object_submit( struct threadpool_object *object ) -+static void tp_object_submit( struct threadpool_object *object, BOOL success ) - { - struct threadpool *pool = object->pool; - -@@ -1696,6 +2044,10 @@ out: - if (!object->num_pending_callbacks++) - list_add_tail( &pool->pool, &object->pool_entry ); - -+ /* increment success counter by one */ -+ if (object->type == TP_OBJECT_TYPE_WAIT && success) -+ object->u.wait.signaled++; -+ - RtlLeaveCriticalSection( &pool->cs ); - } - -@@ -1714,6 +2066,9 @@ static void tp_object_cancel( struct threadpool_object *object, BOOL group_cance - list_remove( &object->pool_entry ); - } - -+ if (object->type == TP_OBJECT_TYPE_WAIT) -+ object->u.wait.signaled = 0; -+ - RtlLeaveCriticalSection( &pool->cs ); - - /* Execute group cancellation callback if defined, and if this was actually a group cancel. */ -@@ -1747,6 +2102,8 @@ static void tp_object_shutdown( struct threadpool_object *object ) - { - if (object->type == TP_OBJECT_TYPE_TIMER) - tp_timerqueue_release( object ); -+ else if (object->type == TP_OBJECT_TYPE_WAIT) -+ tp_waitqueue_release( object ); - - object->shutdown = TRUE; - } -@@ -1912,6 +2269,7 @@ static void CALLBACK threadpool_worker_proc( void *param ) - struct threadpool_instance instance; - TP_CALLBACK_INSTANCE *cb_instance = (TP_CALLBACK_INSTANCE *)&instance; - struct threadpool *pool = param; -+ TP_WAIT_RESULT wait_result; - LARGE_INTEGER timeout; - struct list *ptr; - -@@ -1929,6 +2287,18 @@ static void CALLBACK threadpool_worker_proc( void *param ) - if (--object->num_pending_callbacks) - list_add_tail( &pool->pool, &object->pool_entry ); - -+ /* for wait objects, determine if the object was signaled or if this -+ * is a timeout. */ -+ if (object->type == TP_OBJECT_TYPE_WAIT) -+ { -+ if (object->u.wait.signaled > 0) -+ { -+ wait_result = WAIT_OBJECT_0; -+ object->u.wait.signaled--; -+ } -+ else wait_result = WAIT_TIMEOUT; -+ } -+ - /* Leave critical section and do the actual callback. */ - object->num_running_callbacks++; - pool->num_busy_workers++; -@@ -1964,6 +2334,15 @@ static void CALLBACK threadpool_worker_proc( void *param ) - break; - } - -+ case TP_OBJECT_TYPE_WAIT: -+ { -+ TRACE( "executing wait callback %p(%p, %p, %p, %u)\n", -+ object->u.wait.callback, cb_instance, object->userdata, object, wait_result ); -+ object->u.wait.callback( cb_instance, object->userdata, (TP_WAIT *)object, wait_result ); -+ TRACE( "callback %p returned\n", object->u.wait.callback ); -+ break; -+ } -+ - default: - assert(0); - break; -@@ -2073,6 +2452,41 @@ NTSTATUS WINAPI TpAllocTimer( TP_TIMER **out, PTP_TIMER_CALLBACK callback, PVOID - } - - /*********************************************************************** -+ * TpAllocWait (NTDLL.@) -+ */ -+NTSTATUS WINAPI TpAllocWait( TP_WAIT **out, PTP_WAIT_CALLBACK callback, PVOID userdata, -+ TP_CALLBACK_ENVIRON *environment ) -+{ -+ struct threadpool_object *object; -+ struct threadpool *pool; -+ NTSTATUS status; -+ -+ TRACE("%p %p %p %p\n", out, callback, userdata, environment); -+ -+ if (!(pool = get_threadpool( environment ))) -+ return STATUS_NO_MEMORY; -+ -+ object = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*object) ); -+ if (!object) -+ return STATUS_NO_MEMORY; -+ -+ object->type = TP_OBJECT_TYPE_WAIT; -+ object->u.wait.callback = callback; -+ -+ status = tp_waitqueue_acquire( object ); -+ if (status) -+ { -+ RtlFreeHeap( GetProcessHeap(), 0, object ); -+ return status; -+ } -+ -+ tp_object_initialize( object, pool, userdata, environment ); -+ -+ *out = (TP_WAIT *)object; -+ return STATUS_SUCCESS; -+} -+ -+/*********************************************************************** - * TpAllocWork (NTDLL.@) - */ - NTSTATUS WINAPI TpAllocWork( TP_WORK **out, PTP_WORK_CALLBACK callback, PVOID userdata, -@@ -2248,7 +2662,7 @@ VOID WINAPI TpPostWork( TP_WORK *work ) - - if (this) - { -- tp_object_submit( this ); -+ tp_object_submit( this, FALSE ); - } - } - -@@ -2362,6 +2776,21 @@ VOID WINAPI TpReleaseTimer( TP_TIMER *timer ) - } - - /*********************************************************************** -+ * TpReleaseWait (NTDLL.@) -+ */ -+VOID WINAPI TpReleaseWait( TP_WAIT *wait ) -+{ -+ struct threadpool_object *this = impl_from_TP_WAIT( wait ); -+ TRACE("%p\n", wait); -+ -+ if (this) -+ { -+ tp_object_shutdown( this ); -+ tp_object_release( this ); -+ } -+} -+ -+/*********************************************************************** - * TpReleaseWork (NTDLL.@) - */ - VOID WINAPI TpReleaseWork( TP_WORK *work ) -@@ -2426,6 +2855,20 @@ VOID WINAPI TpSetTimer( TP_TIMER *timer, LARGE_INTEGER *timeout, LONG period, LO - } - - /*********************************************************************** -+ * TpSetWait (KERNEL32.@) -+ */ -+VOID WINAPI TpSetWait( TP_WAIT *wait, HANDLE handle, LARGE_INTEGER *timeout ) -+{ -+ struct threadpool_object *this = impl_from_TP_WAIT( wait ); -+ TRACE("%p %p %p\n", wait, handle, timeout); -+ -+ if (this) -+ { -+ tp_waitqueue_update_wait( this, handle, timeout ); -+ } -+} -+ -+/*********************************************************************** - * TpSimpleTryPost (NTDLL.@) - */ - NTSTATUS WINAPI TpSimpleTryPost( PTP_SIMPLE_CALLBACK callback, PVOID userdata, -@@ -2466,6 +2909,21 @@ VOID WINAPI TpWaitForTimer( TP_TIMER *timer, BOOL cancel_pending ) - } - - /*********************************************************************** -+ * TpWaitForWait (KERNEL32.@) -+ */ -+VOID WINAPI TpWaitForWait( TP_WAIT *wait, BOOL cancel_pending ) -+{ -+ struct threadpool_object *this = impl_from_TP_WAIT( wait ); -+ TRACE("%p %d\n", wait, cancel_pending); -+ if (this) -+ { -+ if (cancel_pending) -+ tp_object_cancel( this, FALSE, NULL ); -+ tp_object_wait( this ); -+ } -+} -+ -+/*********************************************************************** - * TpWaitForWork (NTDLL.@) - */ - VOID WINAPI TpWaitForWork( TP_WORK *work, BOOL cancel_pending ) --- -2.3.5 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0019-ntdll-tests-Add-tests-for-threadpool-wait-objects.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0019-ntdll-tests-Add-tests-for-threadpool-wait-objects.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0019-ntdll-tests-Add-tests-for-threadpool-wait-objects.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0019-ntdll-tests-Add-tests-for-threadpool-wait-objects.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,317 +0,0 @@ -From 8f4a1b78d16cd1977ef52c55b0729db006fcfb2b Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Fri, 6 Feb 2015 20:09:41 +0100 -Subject: ntdll/tests: Add tests for threadpool wait objects. - ---- - dlls/ntdll/tests/threadpool.c | 287 ++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 287 insertions(+) - -diff --git a/dlls/ntdll/tests/threadpool.c b/dlls/ntdll/tests/threadpool.c -index b44b0f5..0e845ce 100644 ---- a/dlls/ntdll/tests/threadpool.c -+++ b/dlls/ntdll/tests/threadpool.c -@@ -770,6 +770,291 @@ static void test_tp_window_length(void) - pTpReleasePool(pool); - } - -+static void CALLBACK wait_cb(TP_CALLBACK_INSTANCE *instance, void *userdata, TP_WAIT *wait, TP_WAIT_RESULT result) -+{ -+ trace("Running wait callback\n"); -+ -+ if (result == WAIT_OBJECT_0) -+ InterlockedIncrement((LONG *)userdata); -+ else if (result == WAIT_TIMEOUT) -+ InterlockedExchangeAdd((LONG *)userdata, 0x10000); -+ else -+ ok(0, "unexpected result %u\n", result); -+} -+ -+static void test_tp_wait(void) -+{ -+ TP_CALLBACK_ENVIRON environment; -+ HANDLE semaphore; -+ TP_WAIT *wait, *wait2; -+ TP_POOL *pool; -+ NTSTATUS status; -+ LONG userdata; -+ LARGE_INTEGER when; -+ DWORD ret; -+ -+ /* Allocate new threadpool */ -+ pool = NULL; -+ status = pTpAllocPool(&pool, NULL); -+ ok(!status, "TpAllocPool failed with status %x\n", status); -+ ok(pool != NULL, "expected pool != NULL\n"); -+ -+ /* Allocate new wait items */ -+ wait = NULL; -+ memset(&environment, 0, sizeof(environment)); -+ environment.Version = 1; -+ environment.Pool = pool; -+ status = pTpAllocWait(&wait, wait_cb, &userdata, &environment); -+ ok(!status, "TpAllocWait failed with status %x\n", status); -+ ok(wait != NULL, "expected wait != NULL\n"); -+ -+ wait2 = NULL; -+ status = pTpAllocWait(&wait2, wait_cb, &userdata, &environment); -+ ok(!status, "TpAllocWait failed with status %x\n", status); -+ ok(wait != NULL, "expected wait != NULL\n"); -+ -+ semaphore = CreateSemaphoreW(NULL, 0, 1, NULL); -+ ok(semaphore != NULL, "failed to create semaphore\n"); -+ -+ /* Infinite timeout, signal the semaphore immediately */ -+ userdata = 0; -+ pTpSetWait(wait, semaphore, NULL); -+ ReleaseSemaphore(semaphore, 1, NULL); -+ Sleep(50); -+ ok(userdata == 1, "expected userdata = 1, got %u\n", userdata); -+ -+ /* Relative timeout, no event */ -+ userdata = 0; -+ when.QuadPart = (ULONGLONG)50 * -10000; -+ pTpSetWait(wait, semaphore, &when); -+ Sleep(100); -+ pTpWaitForWait(wait, FALSE); -+ ok(userdata == 0x10000, "expected userdata = 0x10000, got %u\n", userdata); -+ ret = WaitForSingleObject(semaphore, 50); -+ ok(ret == WAIT_TIMEOUT, "expected ret = WAIT_TIMEOUT, got %u\n", ret); -+ -+ /* Relative timeout, with event */ -+ userdata = 0; -+ when.QuadPart = (ULONGLONG)500 * -10000; -+ pTpSetWait(wait, semaphore, &when); -+ pTpWaitForWait(wait, TRUE); -+ Sleep(250); -+ ReleaseSemaphore(semaphore, 1, NULL); -+ Sleep(50); -+ pTpWaitForWait(wait, FALSE); -+ ok(userdata == 1, "expected userdata = 1, got %u\n", userdata); -+ ret = WaitForSingleObject(semaphore, 50); -+ ok(ret == WAIT_TIMEOUT, "expected ret = WAIT_TIMEOUT, got %u\n", ret); -+ -+ /* Absolute timeout, no event */ -+ userdata = 0; -+ NtQuerySystemTime( &when ); -+ when.QuadPart += (ULONGLONG)50 * 10000; -+ pTpSetWait(wait, semaphore, &when); -+ Sleep(100); -+ pTpWaitForWait(wait, FALSE); -+ ok(userdata == 0x10000, "expected userdata = 0x10000, got %u\n", userdata); -+ ret = WaitForSingleObject(semaphore, 50); -+ ok(ret == WAIT_TIMEOUT, "expected ret = WAIT_TIMEOUT, got %u\n", ret); -+ -+ /* Absolute timeout, with event */ -+ userdata = 0; -+ NtQuerySystemTime( &when ); -+ when.QuadPart += (ULONGLONG)500 * 10000; -+ pTpSetWait(wait, semaphore, &when); -+ pTpWaitForWait(wait, TRUE); -+ Sleep(250); -+ ReleaseSemaphore(semaphore, 1, NULL); -+ Sleep(50); -+ pTpWaitForWait(wait, FALSE); -+ ok(userdata == 1, "expected userdata = 1, got %u\n", userdata); -+ ret = WaitForSingleObject(semaphore, 50); -+ ok(ret == WAIT_TIMEOUT, "expected ret = WAIT_TIMEOUT, got %u\n", ret); -+ -+ /* Trigger event immediately */ -+ userdata = 0; -+ when.QuadPart = 0; -+ pTpSetWait(wait, semaphore, &when); -+ pTpWaitForWait(wait, FALSE); -+ ok(userdata == 0x10000, "expected userdata = 0x10000, got %u\n", userdata); -+ ret = WaitForSingleObject(semaphore, 50); -+ ok(ret == WAIT_TIMEOUT, "expected ret = WAIT_TIMEOUT, got %u\n", ret); -+ -+ /* Cancel a pending wait */ -+ userdata = 0; -+ when.QuadPart = (ULONGLONG)500 * -10000; -+ pTpSetWait(wait, semaphore, &when); -+ pTpWaitForWait(wait, TRUE); -+ Sleep(250); -+ pTpSetWait(wait, NULL, (void *)0xdeadbeef); -+ Sleep(50); -+ ReleaseSemaphore(semaphore, 1, NULL); -+ Sleep(50); -+ ok(userdata == 0, "expected userdata = 0, got %u\n", userdata); -+ ret = WaitForSingleObject(semaphore, 1000); -+ ok(ret == WAIT_OBJECT_0, "expected ret = WAIT_OBJECT_0, got %u\n", ret); -+ -+ /* Test with INVALID_HANDLE_VALUE */ -+ userdata = 0; -+ when.QuadPart = 0; -+ pTpSetWait(wait, INVALID_HANDLE_VALUE, &when); -+ Sleep(50); -+ ok(userdata == 0x10000, "expected userdata = 0x10000, got %u\n", userdata); -+ -+ /* Cancel a pending wait with INVALID_HANDLE_VALUE */ -+ userdata = 0; -+ when.QuadPart = (ULONGLONG)500 * -10000; -+ pTpSetWait(wait, semaphore, &when); -+ pTpWaitForWait(wait, TRUE); -+ Sleep(250); -+ when.QuadPart = (ULONGLONG)100 * -10000; -+ pTpSetWait(wait, INVALID_HANDLE_VALUE, &when); -+ Sleep(250); -+ ok(userdata == 0x10000, "expected userdata = 0x10000, got %u\n", userdata); -+ -+ /* Add two objects with the same semaphore */ -+ userdata = 0; -+ pTpSetWait(wait, semaphore, NULL); -+ pTpSetWait(wait2, semaphore, NULL); -+ ok(userdata == 0, "expected userdata = 0, got %u\n", userdata); -+ ReleaseSemaphore(semaphore, 1, NULL); -+ Sleep(10); -+ pTpWaitForWait(wait, FALSE); -+ pTpWaitForWait(wait2, FALSE); -+ ok(userdata == 1, "expected userdata = 1, got %u\n", userdata); -+ ret = WaitForSingleObject(semaphore, 50); -+ ok(ret == WAIT_TIMEOUT, "expected ret = WAIT_TIMEOUT, got %u\n", ret); -+ -+ CloseHandle(semaphore); -+ semaphore = CreateSemaphoreW(NULL, 0, 2, NULL); -+ ok(semaphore != NULL, "failed to create semaphore\n"); -+ -+ /* Repeat test above, but with a semaphore of count 2 */ -+ userdata = 0; -+ pTpSetWait(wait, semaphore, NULL); -+ pTpSetWait(wait2, semaphore, NULL); -+ ok(userdata == 0, "expected userdata = 0, got %u\n", userdata); -+ ReleaseSemaphore(semaphore, 2, NULL); -+ Sleep(10); -+ pTpWaitForWait(wait, FALSE); -+ pTpWaitForWait(wait2, FALSE); -+ ok(userdata == 2, "expected userdata = 2, got %u\n", userdata); -+ ret = WaitForSingleObject(semaphore, 50); -+ ok(ret == WAIT_TIMEOUT, "expected ret = WAIT_TIMEOUT, got %u\n", ret); -+ -+ CloseHandle(semaphore); -+ -+ /* Cleanup */ -+ pTpReleaseWait(wait2); -+ pTpReleaseWait(wait); -+ pTpReleasePool(pool); -+} -+ -+static LONG multi_wait_callbacks; -+static DWORD multi_wait_result; -+ -+static void CALLBACK multi_wait_cb(TP_CALLBACK_INSTANCE *instance, void *userdata, TP_WAIT *wait, TP_WAIT_RESULT result) -+{ -+ DWORD index = (DWORD)(DWORD_PTR)userdata; -+ InterlockedIncrement(&multi_wait_callbacks); -+ -+ if (result == WAIT_OBJECT_0) -+ multi_wait_result = index; -+ else if (result == WAIT_TIMEOUT) -+ multi_wait_result = 0x10000 | index; -+ else -+ ok(0, "unexpected result %u\n", result); -+} -+ -+static void test_tp_multi_wait(void) -+{ -+ TP_CALLBACK_ENVIRON environment; -+ HANDLE semaphores[512]; -+ TP_WAIT *waits[512]; -+ TP_POOL *pool; -+ NTSTATUS status; -+ LARGE_INTEGER when; -+ int i; -+ -+ /* Allocate new threadpool */ -+ pool = NULL; -+ status = pTpAllocPool(&pool, NULL); -+ ok(!status, "TpAllocPool failed with status %x\n", status); -+ ok(pool != NULL, "expected pool != NULL\n"); -+ -+ memset(&environment, 0, sizeof(environment)); -+ environment.Version = 1; -+ environment.Pool = pool; -+ -+ /* Create semaphores, wait objects and enable them */ -+ for (i = 0; i < sizeof(semaphores)/sizeof(semaphores[0]); i++) -+ { -+ semaphores[i] = CreateSemaphoreW(NULL, 0, 1, NULL); -+ ok(semaphores[i] != NULL, "failed to create semaphores[%d]\n", i); -+ -+ waits[i] = NULL; -+ status = pTpAllocWait(&waits[i], multi_wait_cb, (void *)(DWORD_PTR)i, &environment); -+ ok(!status, "TpAllocWait failed with status %x\n", status); -+ ok(waits[i] != NULL, "expected waits[%d] != NULL\n", i); -+ -+ pTpSetWait(waits[i], semaphores[i], NULL); -+ } -+ -+ /* Now test releasing the semaphores */ -+ for (i = 0; i < sizeof(semaphores)/sizeof(semaphores[0]); i++) -+ { -+ multi_wait_callbacks = 0; -+ multi_wait_result = 0; -+ -+ ReleaseSemaphore(semaphores[i], 1, NULL); -+ while (multi_wait_callbacks == 0) Sleep(10); -+ ok(multi_wait_callbacks == 1, "expected multi_wait_callbacks = 1, got %u\n", multi_wait_callbacks); -+ ok(multi_wait_result == i, "expected multi_wait_result = %u, got %u\n", multi_wait_result, i); -+ -+ pTpSetWait(waits[i], semaphores[i], NULL); -+ } -+ -+ /* Now again in the reversed order */ -+ for (i = sizeof(semaphores)/sizeof(semaphores[0]) - 1; i >= 0; i--) -+ { -+ multi_wait_callbacks = 0; -+ multi_wait_result = 0; -+ -+ ReleaseSemaphore(semaphores[i], 1, NULL); -+ while (multi_wait_callbacks == 0) Sleep(10); -+ ok(multi_wait_callbacks == 1, "expected multi_wait_callbacks = 1, got %u\n", multi_wait_callbacks); -+ ok(multi_wait_result == i, "expected multi_wait_result = %u, got %u\n", multi_wait_result, i); -+ -+ pTpSetWait(waits[i], semaphores[i], NULL); -+ } -+ -+ /* Now test with a timeout */ -+ multi_wait_callbacks = 0; -+ multi_wait_result = 0; -+ for (i = 0; i < sizeof(semaphores)/sizeof(semaphores[0]); i++) -+ { -+ when.QuadPart = 0; -+ pTpSetWait(waits[i], semaphores[i], &when); -+ } -+ Sleep(50); -+ ok(multi_wait_callbacks == sizeof(semaphores)/sizeof(semaphores[0]), -+ "got wrong multi_wait_callbacks %u\n", multi_wait_callbacks); -+ ok(multi_wait_result >> 16, "expected multi_wait_result >> 16 != 0\n"); -+ -+ /* Add them all again, we want that the wait is pending while destroying it */ -+ for (i = 0; i < sizeof(semaphores)/sizeof(semaphores[0]); i++) -+ pTpSetWait(waits[i], semaphores[i], NULL); -+ -+ /* Destroy the objects and semaphores */ -+ for (i = 0; i < sizeof(semaphores)/sizeof(semaphores[0]); i++) -+ { -+ pTpReleaseWait(waits[i]); -+ NtClose(semaphores[i]); -+ } -+ -+ pTpReleasePool(pool); -+} -+ - START_TEST(threadpool) - { - if (!init_threadpool()) -@@ -782,6 +1067,8 @@ START_TEST(threadpool) - test_tp_group_cancel(); - test_tp_timer(); - test_tp_window_length(); -+ test_tp_wait(); -+ test_tp_multi_wait(); - - /* FIXME: Make sure worker threads have terminated before. */ - Sleep(100); --- -2.4.0 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0020-kernel32-Forward-threadpool-wait-functions-to-ntdll.patch wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0020-kernel32-Forward-threadpool-wait-functions-to-ntdll.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0020-kernel32-Forward-threadpool-wait-functions-to-ntdll.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/0020-kernel32-Forward-threadpool-wait-functions-to-ntdll.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,140 +0,0 @@ -From bd2b6f3c1602f5bd24781ae12052994cae0bad73 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Fri, 6 Feb 2015 20:24:27 +0100 -Subject: kernel32: Forward threadpool wait functions to ntdll. - ---- - dlls/kernel32/kernel32.spec | 8 ++++---- - dlls/kernel32/thread.c | 43 +++++++++++++++++++++++++++++++++++++++++++ - include/winternl.h | 4 ++++ - 3 files changed, 51 insertions(+), 4 deletions(-) - -diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec -index f65f894..4eba956 100644 ---- a/dlls/kernel32/kernel32.spec -+++ b/dlls/kernel32/kernel32.spec -@@ -233,7 +233,7 @@ - @ stdcall CloseThreadpoolCleanupGroupMembers(ptr long ptr) ntdll.TpReleaseCleanupGroupMembers - # @ stub CloseThreadpoolIo - @ stdcall CloseThreadpoolTimer(ptr) ntdll.TpReleaseTimer --# @ stub CloseThreadpoolWait -+@ stdcall CloseThreadpoolWait(ptr) ntdll.TpReleaseWait - @ stdcall CloseThreadpoolWork(ptr) ntdll.TpReleaseWork - @ stdcall CmdBatNotification(long) - @ stdcall CommConfigDialogA(str long ptr) -@@ -335,7 +335,7 @@ - @ stdcall CreateThreadpoolCleanupGroup() - # @ stub CreateThreadpoolIo - @ stdcall CreateThreadpoolTimer(ptr ptr ptr) --# @ stub CreateThreadpoolWait -+@ stdcall CreateThreadpoolWait(ptr ptr ptr) - @ stdcall CreateThreadpoolWork(ptr ptr ptr) - @ stdcall CreateTimerQueue () - @ stdcall CreateTimerQueueTimer(ptr long ptr ptr long long long) -@@ -1456,7 +1456,7 @@ - @ stdcall SetThreadpoolThreadMaximum(ptr long) ntdll.TpSetPoolMaxThreads - @ stdcall SetThreadpoolThreadMinimum(ptr long) ntdll.TpSetPoolMinThreads - @ stdcall SetThreadpoolTimer(ptr ptr long long) --# @ stub SetThreadpoolWait -+@ stdcall SetThreadpoolWait(ptr long ptr) - @ stdcall SetTimeZoneInformation(ptr) - @ stub SetTimerQueueTimer - # @ stub -arch=x86_64 SetUmsThreadInformation -@@ -1571,7 +1571,7 @@ - @ stdcall WaitForSingleObjectEx(long long long) - # @ stub WaitForThreadpoolIoCallbacks - @ stdcall WaitForThreadpoolTimerCallbacks(ptr long) ntdll.TpWaitForTimer --# @ stub WaitForThreadpoolWaitCallbacks -+@ stdcall WaitForThreadpoolWaitCallbacks(ptr long) ntdll.TpWaitForWait - @ stdcall WaitForThreadpoolWorkCallbacks(ptr long) ntdll.TpWaitForWork - @ stdcall WaitNamedPipeA (str long) - @ stdcall WaitNamedPipeW (wstr long) -diff --git a/dlls/kernel32/thread.c b/dlls/kernel32/thread.c -index 945fe0b..89b0b60 100644 ---- a/dlls/kernel32/thread.c -+++ b/dlls/kernel32/thread.c -@@ -923,6 +923,27 @@ PTP_TIMER WINAPI CreateThreadpoolTimer( PTP_TIMER_CALLBACK callback, PVOID userd - } - - /*********************************************************************** -+ * CreateThreadpoolWait (KERNEL32.@) -+ */ -+PTP_WAIT WINAPI CreateThreadpoolWait( PTP_WAIT_CALLBACK callback, PVOID userdata, -+ TP_CALLBACK_ENVIRON *environment ) -+{ -+ TP_WAIT *wait; -+ NTSTATUS status; -+ -+ TRACE( "%p, %p, %p\n", callback, userdata, environment ); -+ -+ status = TpAllocWait( &wait, callback, userdata, environment ); -+ if (status) -+ { -+ SetLastError( RtlNtStatusToDosError(status) ); -+ return NULL; -+ } -+ -+ return wait; -+} -+ -+/*********************************************************************** - * CreateThreadpoolWork (KERNEL32.@) - */ - PTP_WORK WINAPI CreateThreadpoolWork( PTP_WORK_CALLBACK callback, PVOID userdata, -@@ -961,3 +982,25 @@ VOID WINAPI SetThreadpoolTimer( TP_TIMER *timer, FILETIME *due_time, - - TpSetTimer( timer, due_time ? &timeout : NULL, period, window_length ); - } -+ -+/*********************************************************************** -+ * SetThreadpoolWait (KERNEL32.@) -+ */ -+VOID WINAPI SetThreadpoolWait( TP_WAIT *wait, HANDLE handle, FILETIME *due_time ) -+{ -+ LARGE_INTEGER timeout; -+ -+ TRACE( "%p, %p, %p\n", wait, handle, due_time ); -+ -+ if (!handle) -+ { -+ due_time = NULL; -+ } -+ else if (due_time) -+ { -+ timeout.u.LowPart = due_time->dwLowDateTime; -+ timeout.u.HighPart = due_time->dwHighDateTime; -+ } -+ -+ TpSetWait( wait, handle, due_time ? &timeout : NULL ); -+} -diff --git a/include/winternl.h b/include/winternl.h -index 4f16d24..ee38c48 100644 ---- a/include/winternl.h -+++ b/include/winternl.h -@@ -2601,6 +2601,7 @@ NTSYSAPI NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PC - NTSYSAPI NTSTATUS WINAPI TpAllocCleanupGroup(TP_CLEANUP_GROUP **); - NTSYSAPI NTSTATUS WINAPI TpAllocPool(TP_POOL **,PVOID); - NTSYSAPI NTSTATUS WINAPI TpAllocTimer(TP_TIMER **,PTP_TIMER_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); -+NTSYSAPI NTSTATUS WINAPI TpAllocWait(TP_WAIT **,PTP_WAIT_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); - NTSYSAPI NTSTATUS WINAPI TpAllocWork(TP_WORK **,PTP_WORK_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); - NTSYSAPI void WINAPI TpCallbackLeaveCriticalSectionOnCompletion(TP_CALLBACK_INSTANCE *,RTL_CRITICAL_SECTION *); - NTSYSAPI NTSTATUS WINAPI TpCallbackMayRunLong(TP_CALLBACK_INSTANCE *); -@@ -2615,12 +2616,15 @@ NTSYSAPI void WINAPI TpReleaseCleanupGroup(TP_CLEANUP_GROUP *); - NTSYSAPI void WINAPI TpReleaseCleanupGroupMembers(TP_CLEANUP_GROUP *,BOOL,PVOID); - NTSYSAPI void WINAPI TpReleasePool(TP_POOL *); - NTSYSAPI void WINAPI TpReleaseTimer(TP_TIMER *); -+NTSYSAPI void WINAPI TpReleaseWait(TP_WAIT *); - NTSYSAPI void WINAPI TpReleaseWork(TP_WORK *); - NTSYSAPI void WINAPI TpSetPoolMaxThreads(TP_POOL *,DWORD); - NTSYSAPI BOOL WINAPI TpSetPoolMinThreads(TP_POOL *,DWORD); - NTSYSAPI void WINAPI TpSetTimer(TP_TIMER *, LARGE_INTEGER *,LONG,LONG); -+NTSYSAPI void WINAPI TpSetWait(TP_WAIT *,HANDLE,LARGE_INTEGER *); - NTSYSAPI NTSTATUS WINAPI TpSimpleTryPost(PTP_SIMPLE_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); - NTSYSAPI void WINAPI TpWaitForTimer(TP_TIMER *,BOOL); -+NTSYSAPI void WINAPI TpWaitForWait(TP_WAIT *,BOOL); - NTSYSAPI void WINAPI TpWaitForWork(TP_WORK *,BOOL); - - /* Wine internal functions */ --- -2.3.3 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/definition wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/definition --- wine-staging-1.7.46~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/definition 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/ntdll-Vista_Threadpool/definition 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -Fixes: [35192] Add implementation for CreateThreadpool -Fixes: [32531] Implement threadpool work items -Fixes: [37306] Implement threadpool timers -Fixes: Implement threadpool wait objects diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/patchinstall.sh wine-staging-1.7.47~ubuntu14.10.1/patches/patchinstall.sh --- wine-staging-1.7.46~ubuntu14.10.1/patches/patchinstall.sh 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/patchinstall.sh 2015-07-12 05:53:31.000000000 +0000 @@ -51,11 +51,11 @@ # Show version information version() { - echo "Wine Staging 1.7.46" + echo "Wine Staging 1.7.47" echo "Copyright (C) 2014-2015 the Wine Staging project authors." echo "" echo "Patchset to be applied on upstream Wine:" - echo " commit ae6efa469bfaecade30e160d195d607bdcdcc6ae" + echo " commit 744f7b69bf4692265588e10650090ca2f5129ccd" echo "" } @@ -87,11 +87,9 @@ enable_configure_Absolute_RPATH="$1" enable_configure_Crosscompiling="$1" enable_crypt32_CMS_Certificates="$1" - enable_d3d11_D3D11CreateDeviceAndSwapChain="$1" enable_d3d9_DesktopWindow="$1" enable_d3d9_Skip_Tests="$1" enable_d3d9_Surface_Refcount="$1" - enable_d3drm_Specfile="$1" enable_d3dx9_24_ID3DXEffect="$1" enable_d3dx9_25_ID3DXEffect="$1" enable_d3dx9_26_ID3DXEffect="$1" @@ -114,6 +112,7 @@ enable_dinput_Events="$1" enable_dsound_EAX="$1" enable_dsound_Fast_Mixer="$1" + enable_dwrite_VDMX="$1" enable_dxgi_GetDesc="$1" enable_dxva2_Video_Decoder="$1" enable_fltmgr_Stub_SYS="$1" @@ -132,7 +131,6 @@ enable_kernel32_CopyFileEx="$1" enable_kernel32_GetFinalPathNameByHandle="$1" enable_kernel32_GetLogicalProcessorInformationEx="$1" - enable_kernel32_GetNumaProcessorNode="$1" enable_kernel32_InsertMode="$1" enable_kernel32_Named_Pipe="$1" enable_kernel32_NeedCurrentDirectoryForExePath="$1" @@ -149,12 +147,12 @@ enable_mscoree_CorValidateImage="$1" enable_msvcp90_basic_string_dtor="$1" enable_msvcrt_Math_Precision="$1" - enable_msvcrt_atof_strtod="$1" enable_msvfw32_Image_Size="$1" enable_ntdll_APC_Performance="$1" enable_ntdll_APC_Start_Process="$1" enable_ntdll_Activation_Context="$1" enable_ntdll_CLI_Images="$1" + enable_ntdll_Coverity="$1" enable_ntdll_DOS_Attributes="$1" enable_ntdll_DeviceType_Systemroot="$1" enable_ntdll_DllRedirects="$1" @@ -168,16 +166,15 @@ enable_ntdll_Heap_FreeLists="$1" enable_ntdll_Hide_Wine_Exports="$1" enable_ntdll_Junction_Points="$1" - enable_ntdll_LZNT1_Compression="$1" enable_ntdll_NtQueryEaFile="$1" enable_ntdll_NtQuerySection="$1" enable_ntdll_NtSetLdtEntries="$1" enable_ntdll_Pipe_SpecialCharacters="$1" + enable_ntdll_Revert_Security_Cookie="$1" enable_ntdll_RtlIpStringToAddress="$1" enable_ntdll_ThreadTime="$1" enable_ntdll_Threading="$1" enable_ntdll_User_Shared_Data="$1" - enable_ntdll_Vista_Threadpool="$1" enable_ntdll_WRITECOPY="$1" enable_ntdll_WinSqm="$1" enable_ntdll_WriteWatches="$1" @@ -238,10 +235,12 @@ enable_user32_Painting="$1" enable_user32_ScrollWindowEx="$1" enable_user32_WndProc="$1" - enable_vcomp_Stub_Functions="$1" + enable_vcomp_Functions="$1" enable_version_VerQueryValue="$1" enable_wbemdisp_ISWbemSecurity="$1" + enable_wbemdisp_Timeout="$1" enable_wiaservc_IEnumWIA_DEV_INFO="$1" + enable_widl_Buffer_Overflow="$1" enable_windowscodecs_GIF_Decoder="$1" enable_windowscodecs_TIFF_Decoder="$1" enable_wine_inf_Performance="$1" @@ -257,6 +256,7 @@ enable_wined3d_CSMT_Helper="$1" enable_wined3d_CSMT_Main="$1" enable_wined3d_DXTn="$1" + enable_wined3d_MESA_GPU_Info="$1" enable_wined3d_Multisampling="$1" enable_wined3d_Revert_PixelFormat="$1" enable_wined3d_UnhandledBlendFactor="$1" @@ -273,6 +273,7 @@ enable_winex11_Window_Style="$1" enable_winex11_XEMBED="$1" enable_winex11_wglShareLists="$1" + enable_winhttp_System_Proxy_Autoconfig="$1" enable_wininet_Cleanup="$1" enable_wininet_ParseX509EncodedCertificateForListBoxEntry="$1" enable_winmm_Delay_Import_Depends="$1" @@ -337,9 +338,6 @@ crypt32-CMS_Certificates) enable_crypt32_CMS_Certificates="$2" ;; - d3d11-D3D11CreateDeviceAndSwapChain) - enable_d3d11_D3D11CreateDeviceAndSwapChain="$2" - ;; d3d9-DesktopWindow) enable_d3d9_DesktopWindow="$2" ;; @@ -349,9 +347,6 @@ d3d9-Surface_Refcount) enable_d3d9_Surface_Refcount="$2" ;; - d3drm-Specfile) - enable_d3drm_Specfile="$2" - ;; d3dx9_24-ID3DXEffect) enable_d3dx9_24_ID3DXEffect="$2" ;; @@ -418,6 +413,9 @@ dsound-Fast_Mixer) enable_dsound_Fast_Mixer="$2" ;; + dwrite-VDMX) + enable_dwrite_VDMX="$2" + ;; dxgi-GetDesc) enable_dxgi_GetDesc="$2" ;; @@ -472,9 +470,6 @@ kernel32-GetLogicalProcessorInformationEx) enable_kernel32_GetLogicalProcessorInformationEx="$2" ;; - kernel32-GetNumaProcessorNode) - enable_kernel32_GetNumaProcessorNode="$2" - ;; kernel32-InsertMode) enable_kernel32_InsertMode="$2" ;; @@ -523,9 +518,6 @@ msvcrt-Math_Precision) enable_msvcrt_Math_Precision="$2" ;; - msvcrt-atof_strtod) - enable_msvcrt_atof_strtod="$2" - ;; msvfw32-Image_Size) enable_msvfw32_Image_Size="$2" ;; @@ -541,6 +533,9 @@ ntdll-CLI_Images) enable_ntdll_CLI_Images="$2" ;; + ntdll-Coverity) + enable_ntdll_Coverity="$2" + ;; ntdll-DOS_Attributes) enable_ntdll_DOS_Attributes="$2" ;; @@ -580,9 +575,6 @@ ntdll-Junction_Points) enable_ntdll_Junction_Points="$2" ;; - ntdll-LZNT1_Compression) - enable_ntdll_LZNT1_Compression="$2" - ;; ntdll-NtQueryEaFile) enable_ntdll_NtQueryEaFile="$2" ;; @@ -595,6 +587,9 @@ ntdll-Pipe_SpecialCharacters) enable_ntdll_Pipe_SpecialCharacters="$2" ;; + ntdll-Revert_Security_Cookie) + enable_ntdll_Revert_Security_Cookie="$2" + ;; ntdll-RtlIpStringToAddress) enable_ntdll_RtlIpStringToAddress="$2" ;; @@ -607,9 +602,6 @@ ntdll-User_Shared_Data) enable_ntdll_User_Shared_Data="$2" ;; - ntdll-Vista_Threadpool) - enable_ntdll_Vista_Threadpool="$2" - ;; ntdll-WRITECOPY) enable_ntdll_WRITECOPY="$2" ;; @@ -790,8 +782,8 @@ user32-WndProc) enable_user32_WndProc="$2" ;; - vcomp-Stub_Functions) - enable_vcomp_Stub_Functions="$2" + vcomp-Functions) + enable_vcomp_Functions="$2" ;; version-VerQueryValue) enable_version_VerQueryValue="$2" @@ -799,9 +791,15 @@ wbemdisp-ISWbemSecurity) enable_wbemdisp_ISWbemSecurity="$2" ;; + wbemdisp-Timeout) + enable_wbemdisp_Timeout="$2" + ;; wiaservc-IEnumWIA_DEV_INFO) enable_wiaservc_IEnumWIA_DEV_INFO="$2" ;; + widl-Buffer_Overflow) + enable_widl_Buffer_Overflow="$2" + ;; windowscodecs-GIF_Decoder) enable_windowscodecs_GIF_Decoder="$2" ;; @@ -847,6 +845,9 @@ wined3d-DXTn) enable_wined3d_DXTn="$2" ;; + wined3d-MESA_GPU_Info) + enable_wined3d_MESA_GPU_Info="$2" + ;; wined3d-Multisampling) enable_wined3d_Multisampling="$2" ;; @@ -895,6 +896,9 @@ winex11-wglShareLists) enable_winex11_wglShareLists="$2" ;; + winhttp-System_Proxy_Autoconfig) + enable_winhttp_System_Proxy_Autoconfig="$2" + ;; wininet-Cleanup) enable_wininet_Cleanup="$2" ;; @@ -1297,18 +1301,12 @@ if test "$enable_configure_Absolute_RPATH" -gt 1; then abort "Patchset configure-Absolute_RPATH disabled, but category-stable depends on that." fi - if test "$enable_d3d11_D3D11CreateDeviceAndSwapChain" -gt 1; then - abort "Patchset d3d11-D3D11CreateDeviceAndSwapChain disabled, but category-stable depends on that." - fi if test "$enable_d3d9_Skip_Tests" -gt 1; then abort "Patchset d3d9-Skip_Tests disabled, but category-stable depends on that." fi if test "$enable_d3d9_Surface_Refcount" -gt 1; then abort "Patchset d3d9-Surface_Refcount disabled, but category-stable depends on that." fi - if test "$enable_d3drm_Specfile" -gt 1; then - abort "Patchset d3drm-Specfile disabled, but category-stable depends on that." - fi if test "$enable_d3dx9_24_ID3DXEffect" -gt 1; then abort "Patchset d3dx9_24-ID3DXEffect disabled, but category-stable depends on that." fi @@ -1408,9 +1406,6 @@ if test "$enable_ntdll_Heap_FreeLists" -gt 1; then abort "Patchset ntdll-Heap_FreeLists disabled, but category-stable depends on that." fi - if test "$enable_ntdll_LZNT1_Compression" -gt 1; then - abort "Patchset ntdll-LZNT1_Compression disabled, but category-stable depends on that." - fi if test "$enable_ntdll_NtSetLdtEntries" -gt 1; then abort "Patchset ntdll-NtSetLdtEntries disabled, but category-stable depends on that." fi @@ -1532,10 +1527,8 @@ enable_Staging=1 enable_combase_String=1 enable_configure_Absolute_RPATH=1 - enable_d3d11_D3D11CreateDeviceAndSwapChain=1 enable_d3d9_Skip_Tests=1 enable_d3d9_Surface_Refcount=1 - enable_d3drm_Specfile=1 enable_d3dx9_24_ID3DXEffect=1 enable_d3dx9_25_ID3DXEffect=1 enable_d3dx9_26_ID3DXEffect=1 @@ -1569,7 +1562,6 @@ enable_ntdll_Fix_Alignment=1 enable_ntdll_FreeBSD_Directory=1 enable_ntdll_Heap_FreeLists=1 - enable_ntdll_LZNT1_Compression=1 enable_ntdll_NtSetLdtEntries=1 enable_ntdll_Pipe_SpecialCharacters=1 enable_ntdll_RtlIpStringToAddress=1 @@ -1618,6 +1610,13 @@ enable_wined3d_CSMT_Helper=1 fi +if test "$enable_wined3d_MESA_GPU_Info" -eq 1; then + if test "$enable_wined3d_Accounting" -gt 1; then + abort "Patchset wined3d-Accounting disabled, but wined3d-MESA_GPU_Info depends on that." + fi + enable_wined3d_Accounting=1 +fi + if test "$enable_wined3d_CSMT_Helper" -eq 1; then if test "$enable_makedep_PARENTSPEC" -gt 1; then abort "Patchset makedep-PARENTSPEC disabled, but wined3d-CSMT_Helper depends on that." @@ -1749,13 +1748,6 @@ enable_ws2_32_WriteWatches=1 fi -if test "$enable_ntdll_RtlIpStringToAddress" -eq 1; then - if test "$enable_ntdll_LZNT1_Compression" -gt 1; then - abort "Patchset ntdll-LZNT1_Compression disabled, but ntdll-RtlIpStringToAddress depends on that." - fi - enable_ntdll_LZNT1_Compression=1 -fi - if test "$enable_ntdll_Junction_Points" -eq 1; then if test "$enable_ntdll_Fix_Free" -gt 1; then abort "Patchset ntdll-Fix_Free disabled, but ntdll-Junction_Points depends on that." @@ -2132,7 +2124,7 @@ patch_apply configure-Crosscompiling/0001-configure.ac-Search-for-otool-using-AC_CHECK_TOOL.patch patch_apply configure-Crosscompiling/0002-configure.ac-Remove-check-for-strength-reduce-bug.patch ( - echo '+ { "Michael Müller", "configure.ac: Search for otool using AC_CHECK_TOOL.", 1 },'; + echo '+ { "Michael Müller", "configure.ac: Search for otool using AC_CHECK_TOOL.", 2 },'; echo '+ { "Michael Müller", "configure.ac: Remove check for strength-reduce bug.", 1 },'; ) >> "$patchlist" fi @@ -2152,21 +2144,6 @@ ) >> "$patchlist" fi -# Patchset d3d11-D3D11CreateDeviceAndSwapChain -# | -# | This patchset fixes the following Wine bugs: -# | * [#33153] Add stub for d3d11.D3D11CreateDeviceAndSwapChain -# | -# | Modified files: -# | * dlls/d3d11/d3d11.spec, dlls/d3d11/d3d11_main.c -# | -if test "$enable_d3d11_D3D11CreateDeviceAndSwapChain" -eq 1; then - patch_apply d3d11-D3D11CreateDeviceAndSwapChain/0001-d3d11-add-a-stub-for-D3D11CreateDeviceAndSwapChain.patch - ( - echo '+ { "Austin English", "d3d11: add a stub for D3D11CreateDeviceAndSwapChain.", 1 },'; - ) >> "$patchlist" -fi - # Patchset d3d9-DesktopWindow # | # | Modified files: @@ -2206,18 +2183,6 @@ ) >> "$patchlist" fi -# Patchset d3drm-Specfile -# | -# | Modified files: -# | * dlls/d3drm/d3drm.spec -# | -if test "$enable_d3drm_Specfile" -eq 1; then - patch_apply d3drm-Specfile/0001-d3drm-Mark-DllCanUnloadNow-and-DllGetClassObject-as-.patch - ( - echo '+ { "Amine Khaldi", "d3drm: Mark DllCanUnloadNow and DllGetClassObject as private.", 1 },'; - ) >> "$patchlist" -fi - # Patchset d3dx9_25-ID3DXEffect # | # | This patchset fixes the following Wine bugs: @@ -2615,6 +2580,18 @@ ) >> "$patchlist" fi +# Patchset dwrite-VDMX +# | +# | Modified files: +# | * dlls/dwrite/opentype.c +# | +if test "$enable_dwrite_VDMX" -eq 1; then + patch_apply dwrite-VDMX/0001-dwrite-Avoid-dereferencing-NULL-pointer-for-fonts-wi.patch + ( + echo '+ { "Sebastian Lackner", "dwrite: Avoid dereferencing NULL pointer for fonts without VDMX.", 1 },'; + ) >> "$patchlist" +fi + # Patchset dxgi-GetDesc # | # | This patchset fixes the following Wine bugs: @@ -3001,23 +2978,6 @@ ) >> "$patchlist" fi -# Patchset kernel32-GetNumaProcessorNode -# | -# | This patchset fixes the following Wine bugs: -# | * [#38660] Add implementation for kernel32.GetNumaProcessorNode -# | -# | Modified files: -# | * dlls/kernel32/cpu.c, dlls/kernel32/kernel32.spec, dlls/kernel32/tests/process.c, include/winbase.h -# | -if test "$enable_kernel32_GetNumaProcessorNode" -eq 1; then - patch_apply kernel32-GetNumaProcessorNode/0001-kernel32-tests-Add-tests-for-GetNumaProcessorNode.-v.patch - patch_apply kernel32-GetNumaProcessorNode/0002-kernel32-Implement-GetNumaProcessorNode.-v2.patch - ( - echo '+ { "Michael Müller", "kernel32/tests: Add tests for GetNumaProcessorNode.", 2 },'; - echo '+ { "Michael Müller", "kernel32: Implement GetNumaProcessorNode.", 2 },'; - ) >> "$patchlist" -fi - # Patchset kernel32-InsertMode # | # | Modified files: @@ -3303,20 +3263,6 @@ ) >> "$patchlist" fi -# Patchset msvcrt-atof_strtod -# | -# | Modified files: -# | * dlls/msvcrt/string.c, dlls/msvcrt/tests/string.c -# | -if test "$enable_msvcrt_atof_strtod" -eq 1; then - patch_apply msvcrt-atof_strtod/0001-msvcrt-Avoid-crash-when-NULL-pointer-is-passed-to-at.patch - patch_apply msvcrt-atof_strtod/0002-msvcrt-Set-end-to-NULL-when-strtod-is-called-with-NU.patch - ( - echo '+ { "Michael Müller", "msvcrt: Avoid crash when NULL pointer is passed to atof / strtod functions.", 1 },'; - echo '+ { "Sebastian Lackner", "msvcrt: Set *end to NULL when strtod is called with NULL pointer string.", 1 },'; - ) >> "$patchlist" -fi - # Patchset msvfw32-Image_Size # | # | This patchset fixes the following Wine bugs: @@ -3383,6 +3329,18 @@ ) >> "$patchlist" fi +# Patchset ntdll-Coverity +# | +# | Modified files: +# | * dlls/ntdll/threadpool.c +# | +if test "$enable_ntdll_Coverity" -eq 1; then + patch_apply ntdll-Coverity/0001-ntdll-Fix-incorrect-assignment-in-assert-statement-C.patch + ( + echo '+ { "Sebastian Lackner", "ntdll: Fix incorrect assignment in assert statement (Coverity).", 1 },'; + ) >> "$patchlist" +fi + # Patchset ntdll-DOS_Attributes # | # | This patchset fixes the following Wine bugs: @@ -3596,29 +3554,6 @@ ) >> "$patchlist" fi -# Patchset ntdll-LZNT1_Compression -# | -# | This patchset fixes the following Wine bugs: -# | * [#37449] Support for RtlDecompressBuffer -# | -# | Modified files: -# | * dlls/ntdll/ntdll.spec, dlls/ntdll/rtl.c, dlls/ntdll/tests/rtl.c, dlls/ntoskrnl.exe/ntoskrnl.exe.spec, include/winnt.h -# | -if test "$enable_ntdll_LZNT1_Compression" -eq 1; then - patch_apply ntdll-LZNT1_Compression/0001-ntdll-Implement-semi-stub-for-RtlGetCompressionWorkS.patch - patch_apply ntdll-LZNT1_Compression/0002-ntdll-Implement-semi-stub-for-RtlCompressBuffer.patch - patch_apply ntdll-LZNT1_Compression/0003-ntdll-Implement-LZNT1-algorithm-for-RtlDecompressBuf.patch - patch_apply ntdll-LZNT1_Compression/0004-ntdll-tests-Add-tests-for-Rtl-Decompress-Compress-Bu.patch - patch_apply ntdll-LZNT1_Compression/0005-ntdll-tests-Fix-various-test-failures-caused-by-brok.patch - ( - echo '+ { "Sebastian Lackner", "ntdll: Implement semi-stub for RtlGetCompressionWorkSpaceSize.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll: Implement semi-stub for RtlCompressBuffer.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll: Implement LZNT1 algorithm for RtlDecompressBuffer.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll/tests: Add tests for Rtl[Decompress|Compress]Buffer and RtlGetCompressionWorkSpaceSize.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll/tests: Fix various test failures caused by broken RtlDecompressBuffer results.", 1 },'; - ) >> "$patchlist" -fi - # Patchset ntdll-NtQuerySection # | # | This patchset fixes the following Wine bugs: @@ -3667,6 +3602,21 @@ ) >> "$patchlist" fi +# Patchset ntdll-Revert_Security_Cookie +# | +# | This patchset fixes the following Wine bugs: +# | * [#38895] Revert patch causing crash in IrfanView when using the WebP plugin +# | +# | Modified files: +# | * dlls/ntdll/virtual.c +# | +if test "$enable_ntdll_Revert_Security_Cookie" -eq 1; then + patch_apply ntdll-Revert_Security_Cookie/0001-Revert-ntdll-Randomize-security-cookie-when-availabl.patch + ( + echo '+ { "Sebastian Lackner", "Revert \"ntdll: Randomize security cookie when available.\".", 1 },'; + ) >> "$patchlist" +fi + # Patchset ntdll-RtlIpStringToAddress # | # | Modified files: @@ -3728,62 +3678,6 @@ ) >> "$patchlist" fi -# Patchset ntdll-Vista_Threadpool -# | -# | This patchset fixes the following Wine bugs: -# | * [#35192] Add implementation for CreateThreadpool -# | * [#32531] Implement threadpool work items -# | * [#37306] Implement threadpool timers -# | -# | Modified files: -# | * dlls/kernel32/kernel32.spec, dlls/kernel32/tests/thread.c, dlls/kernel32/thread.c, dlls/ntdll/ntdll.spec, -# | dlls/ntdll/tests/threadpool.c, dlls/ntdll/threadpool.c, include/winternl.h -# | -if test "$enable_ntdll_Vista_Threadpool" -eq 1; then - patch_apply ntdll-Vista_Threadpool/0001-ntdll-Implement-TpSimpleTryPost-and-basic-threadpool.patch - patch_apply ntdll-Vista_Threadpool/0002-ntdll-Implement-TpSetPool-Min-Max-Threads.-v2.patch - patch_apply ntdll-Vista_Threadpool/0003-ntdll-Implement-threadpool-cleanup-group-functions.patch - patch_apply ntdll-Vista_Threadpool/0004-ntdll-tests-Add-tests-for-TpAllocCleanupGroup-and-re.patch - patch_apply ntdll-Vista_Threadpool/0005-ntdll-Implement-threadpool-work-item-functions.patch - patch_apply ntdll-Vista_Threadpool/0006-ntdll-tests-Add-basic-tests-for-threadpool-work-item.patch - patch_apply ntdll-Vista_Threadpool/0007-ntdll-tests-Add-threadpool-scheduler-tests-for-work-.patch - patch_apply ntdll-Vista_Threadpool/0008-ntdll-Add-support-for-threadpool-group-cancel-callba.patch - patch_apply ntdll-Vista_Threadpool/0009-ntdll-Add-support-for-threadpool-finalization-callba.patch - patch_apply ntdll-Vista_Threadpool/0010-ntdll-Implement-threadpool-RaceDll-environment-varia.patch - patch_apply ntdll-Vista_Threadpool/0011-ntdll-Implement-TpCallbackMayRunLong-and-instance-st.patch - patch_apply ntdll-Vista_Threadpool/0012-ntdll-Implement-TpDisassociateCallback.patch - patch_apply ntdll-Vista_Threadpool/0013-ntdll-Implement-various-TpCallback-OnCompletion-func.patch - patch_apply ntdll-Vista_Threadpool/0014-ntdll-Add-remaining-threadpool-functions-to-specfile.patch - patch_apply ntdll-Vista_Threadpool/0015-ntdll-Implement-threadpool-timer-functions.-rev-2.patch - patch_apply ntdll-Vista_Threadpool/0016-ntdll-tests-Add-tests-for-Tp-threadpool-functions.patch - patch_apply ntdll-Vista_Threadpool/0017-kernel32-Forward-various-threadpool-functions-to-ntd.patch - patch_apply ntdll-Vista_Threadpool/0018-ntdll-Implement-threadpool-wait-objects.patch - patch_apply ntdll-Vista_Threadpool/0019-ntdll-tests-Add-tests-for-threadpool-wait-objects.patch - patch_apply ntdll-Vista_Threadpool/0020-kernel32-Forward-threadpool-wait-functions-to-ntdll.patch - ( - echo '+ { "Sebastian Lackner", "ntdll: Implement TpSimpleTryPost and basic threadpool infrastructure.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll: Implement TpSetPool[Min|Max]Threads.", 2 },'; - echo '+ { "Sebastian Lackner", "ntdll: Implement threadpool cleanup group functions.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll/tests: Add tests for TpAllocCleanupGroup and related functions.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll: Implement threadpool work item functions.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll/tests: Add basic tests for threadpool work items.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll/tests: Add threadpool scheduler tests for work items.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll: Add support for threadpool group cancel callback.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll: Add support for threadpool finalization callback.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll: Implement threadpool RaceDll environment variable.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll: Implement TpCallbackMayRunLong and instance structure.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll: Implement TpDisassociateCallback.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll: Implement various TpCallback*OnCompletion functions.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll: Add remaining threadpool functions to specfile.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll: Implement threadpool timer functions.", 2 },'; - echo '+ { "Sebastian Lackner", "ntdll/tests: Add tests for Tp* threadpool functions.", 1 },'; - echo '+ { "Sebastian Lackner", "kernel32: Forward various threadpool functions to ntdll.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll: Implement threadpool wait objects.", 1 },'; - echo '+ { "Sebastian Lackner", "ntdll/tests: Add tests for threadpool wait objects.", 1 },'; - echo '+ { "Sebastian Lackner", "kernel32: Forward threadpool wait functions to ntdll.", 1 },'; - ) >> "$patchlist" -fi - # Patchset ntdll-WinSqm # | # | This patchset fixes the following Wine bugs: @@ -4253,7 +4147,6 @@ # Patchset server-Key_State # | # | This patchset fixes the following Wine bugs: -# | * [#27238] Fallback to global key state for threads without a queue # | * [#31899] Implement locking and synchronization of key states # | * [#35907] Fix caps lock state issues with multiple processes # | @@ -4721,33 +4614,40 @@ ) >> "$patchlist" fi -# Patchset vcomp-Stub_Functions +# Patchset vcomp-Functions # | # | This patchset fixes the following Wine bugs: -# | * [#31640] Implement additional stubs for vcomp dlls +# | * [#31640] Implement various vcomp functions # | # | Modified files: -# | * configure.ac, dlls/vcomp/Makefile.in, dlls/vcomp/fork.c, dlls/vcomp/main.c, dlls/vcomp/tests/Makefile.in, -# | dlls/vcomp/tests/fork.c, dlls/vcomp/tests/vcomp.manifest, dlls/vcomp/tests/vcomp.rc, dlls/vcomp/tests/work.c, -# | dlls/vcomp/vcomp.spec, dlls/vcomp/vcomp_private.h, dlls/vcomp/work.c, dlls/vcomp100/vcomp100.spec, +# | * configure.ac, dlls/vcomp/main.c, dlls/vcomp/tests/Makefile.in, dlls/vcomp/tests/vcomp.c, +# | dlls/vcomp/tests/vcomp.manifest, dlls/vcomp/tests/vcomp.rc, dlls/vcomp/vcomp.spec, dlls/vcomp100/vcomp100.spec, # | dlls/vcomp90/vcomp90.spec # | -if test "$enable_vcomp_Stub_Functions" -eq 1; then - patch_apply vcomp-Stub_Functions/0001-vcomp-single-threaded-implementation-of-_vcomp_fork.patch - patch_apply vcomp-Stub_Functions/0002-vcomp-better-stubs-for-_vcomp_for_static_simple_init.patch - patch_apply vcomp-Stub_Functions/0003-vcomp-better-stub-for-_vcomp_for_static_init.patch - patch_apply vcomp-Stub_Functions/0004-vcomp-implement-omp_in_parallel.patch - patch_apply vcomp-Stub_Functions/0005-vcomp-better-stubs-for-_vcomp_for_dynamic_init-_vcom.patch - patch_apply vcomp-Stub_Functions/0006-vcomp-better-stubs-for-_vcomp_sections_init-_vcomp_s.patch - patch_apply vcomp-Stub_Functions/0007-vcomp-Add-a-warning-that-multithreading-is-not-yet-s.patch - ( - echo '+ { "Dan Kegel", "vcomp: single-threaded implementation of _vcomp_fork.", 1 },'; - echo '+ { "Dan Kegel", "vcomp: better stubs for _vcomp_for_static_simple_init, _vcomp_for_static_end.", 1 },'; - echo '+ { "Dan Kegel", "vcomp: better stub for _vcomp_for_static_init.", 1 },'; - echo '+ { "Dan Kegel", "vcomp: implement omp_in_parallel.", 1 },'; - echo '+ { "Dan Kegel", "vcomp: better stubs for _vcomp_for_dynamic_init, _vcomp_for_dynamic_next.", 1 },'; - echo '+ { "Dan Kegel", "vcomp: better stubs for _vcomp_sections_init, _vcomp_sections_next.", 1 },'; - echo '+ { "Sebastian Lackner", "vcomp: Add a warning that multithreading is not yet supported.", 1 },'; +if test "$enable_vcomp_Functions" -eq 1; then + patch_apply vcomp-Functions/0001-vcomp-Implement-stub-for-_vcomp_fork.patch + patch_apply vcomp-Functions/0002-vcomp-Add-basic-worker-thread-infrastructure.patch + patch_apply vcomp-Functions/0003-vcomp-tests-Add-initial-tests-for-_vcomp_fork.patch + patch_apply vcomp-Functions/0004-vcomp-Implement-_vcomp_for_static_simple_init-and-_v.patch + patch_apply vcomp-Functions/0005-vcomp-tests-Add-tests-for-_vcomp_for_static_simple_i.patch + patch_apply vcomp-Functions/0006-vcomp-Implement-_vcomp_for_static_init.patch + patch_apply vcomp-Functions/0007-vcomp-tests-Add-tests-for-_vcomp_for_static_init.patch + patch_apply vcomp-Functions/0008-vcomp-Implement-_vcomp_barrier.patch + patch_apply vcomp-Functions/0009-vcomp-Implement-omp_in_parallel.patch + patch_apply vcomp-Functions/0010-vcomp-Implement-_vcomp_sections_init-and-_vcomp_sect.patch + patch_apply vcomp-Functions/0011-vcomp-Implement-_vcomp_for_dynamic_init-and-_vcomp_f.patch + ( + echo '+ { "Dan Kegel", "vcomp: Implement stub for _vcomp_fork.", 1 },'; + echo '+ { "Sebastian Lackner", "vcomp: Add basic worker thread infrastructure.", 1 },'; + echo '+ { "Dan Kegel", "vcomp/tests: Add initial tests for _vcomp_fork.", 1 },'; + echo '+ { "Sebastian Lackner", "vcomp: Implement _vcomp_for_static_simple_init and _vcomp_for_static_end.", 1 },'; + echo '+ { "Sebastian Lackner", "vcomp/tests: Add tests for _vcomp_for_static_simple_init.", 1 },'; + echo '+ { "Sebastian Lackner", "vcomp: Implement _vcomp_for_static_init.", 1 },'; + echo '+ { "Sebastian Lackner", "vcomp/tests: Add tests for _vcomp_for_static_init.", 1 },'; + echo '+ { "Sebastian Lackner", "vcomp: Implement _vcomp_barrier.", 1 },'; + echo '+ { "Sebastian Lackner", "vcomp: Implement omp_in_parallel.", 1 },'; + echo '+ { "Sebastian Lackner", "vcomp: Implement _vcomp_sections_init and _vcomp_sections_next and add tests.", 1 },'; + echo '+ { "Sebastian Lackner", "vcomp: Implement _vcomp_for_dynamic_init and _vcomp_for_dynamic_next and add tests.", 1 },'; ) >> "$patchlist" fi @@ -4775,6 +4675,21 @@ ) >> "$patchlist" fi +# Patchset wbemdisp-Timeout +# | +# | This patchset fixes the following Wine bugs: +# | * [#37618] Silence repeated wbemprox "timeout not supported" fixme +# | +# | Modified files: +# | * dlls/wbemprox/class.c +# | +if test "$enable_wbemdisp_Timeout" -eq 1; then + patch_apply wbemdisp-Timeout/0001-wbemprox-Silence-repeated-timeout-not-supported-fixm.patch + ( + echo '+ { "Jarkko Korpi", "wbemprox: Silence repeated \"timeout not supported\" fixme.", 1 },'; + ) >> "$patchlist" +fi + # Patchset wiaservc-IEnumWIA_DEV_INFO # | # | This patchset fixes the following Wine bugs: @@ -4790,6 +4705,21 @@ ) >> "$patchlist" fi +# Patchset widl-Buffer_Overflow +# | +# | This patchset fixes the following Wine bugs: +# | * [#37129] Increase buffer size in widl/typegen.c to avoid buffer overflow +# | +# | Modified files: +# | * tools/widl/typegen.c +# | +if test "$enable_widl_Buffer_Overflow" -eq 1; then + patch_apply widl-Buffer_Overflow/0001-widl-Increase-buffer-size-in-typegen.c.patch + ( + echo '+ { "Jarkko Korpi", "widl: Increase buffer size in typegen.c.", 1 },'; + ) >> "$patchlist" +fi + # Patchset windowscodecs-GIF_Decoder # | # | This patchset fixes the following Wine bugs: @@ -4928,18 +4858,16 @@ # | * [#38697] Allow to enable/disable InsertMode in wineconsole settings # | # | Modified files: -# | * programs/wineconsole/dialog.c, programs/wineconsole/registry.c, programs/wineconsole/winecon_private.h, -# | programs/wineconsole/wineconsole.c, programs/wineconsole/wineconsole.rc, programs/wineconsole/wineconsole_res.h +# | * programs/wineconsole/dialog.c, programs/wineconsole/wineconsole.c, programs/wineconsole/wineconsole.rc, +# | programs/wineconsole/wineconsole_res.h # | if test "$enable_wineconsole_Insert_Mode" -eq 1; then patch_apply wineconsole-Insert_Mode/0001-wineconsole-Rearrange-user-dialog-to-make-space-for-.patch patch_apply wineconsole-Insert_Mode/0002-wineconsole-Improve-semantics-of-some-poorly-worded-.patch - patch_apply wineconsole-Insert_Mode/0003-wineconsole-Add-InsertMode-to-HKCU.patch - patch_apply wineconsole-Insert_Mode/0004-wineconsole-Add-InsertMode-to-the-user-dialog.patch + patch_apply wineconsole-Insert_Mode/0003-wineconsole-Add-InsertMode-to-the-user-dialog.patch ( echo '+ { "Hugh McMaster", "wineconsole: Rearrange user dialog to make space for InsertMode checkbox.", 1 },'; echo '+ { "Hugh McMaster", "wineconsole: Improve semantics of some poorly-worded resource strings.", 1 },'; - echo '+ { "Hugh McMaster", "wineconsole: Add InsertMode to HKCU.", 1 },'; echo '+ { "Hugh McMaster", "wineconsole: Add InsertMode to the user dialog.", 1 },'; ) >> "$patchlist" fi @@ -4972,6 +4900,18 @@ ) >> "$patchlist" fi +# Patchset wined3d-MESA_GPU_Info +# | +# | Modified files: +# | * dlls/wined3d/directx.c, dlls/wined3d/wined3d_gl.h, dlls/winex11.drv/opengl.c, include/wine/wgl_driver.h +# | +if test "$enable_wined3d_MESA_GPU_Info" -eq 1; then + patch_apply wined3d-MESA_GPU_Info/0001-wined3d-Use-pci-and-memory-information-from-MESA-if-.patch + ( + echo '+ { "Michael Müller", "wined3d: Use pci and memory information from MESA if possible.", 1 },'; + ) >> "$patchlist" +fi + # Patchset wined3d-Multisampling # | # | This patchset fixes the following Wine bugs: @@ -4992,7 +4932,6 @@ # | This patchset fixes the following Wine bugs: # | * [#35655] Fix wined3d performance drop introduced by pixelformat changes. # | * [#35718] Fix flickering introduced by pixelformat changes. -# | * [#35950] Fix black screen on startup introduced by pixelformat changes. # | * [#35975] Fix gray screen on startup introduced by pixelformat changes. # | * [#36900] Fix missing video introduced by pixelformat changes. # | @@ -5661,6 +5600,18 @@ ) >> "$patchlist" fi +# Patchset winhttp-System_Proxy_Autoconfig +# | +# | Modified files: +# | * dlls/winhttp/session.c +# | +if test "$enable_winhttp_System_Proxy_Autoconfig" -eq 1; then + patch_apply winhttp-System_Proxy_Autoconfig/0001-winhttp-Silence-repeated-no-support-on-this-platform.patch + ( + echo '+ { "Jarkko Korpi", "winhttp: Silence repeated \"no support on this platform\" message.", 1 },'; + ) >> "$patchlist" +fi + # Patchset wininet-Cleanup # | # | This patchset fixes the following Wine bugs: diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/server-Key_State/0002-server-Implement-locking-and-synchronization-of-keys.patch wine-staging-1.7.47~ubuntu14.10.1/patches/server-Key_State/0002-server-Implement-locking-and-synchronization-of-keys.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/server-Key_State/0002-server-Implement-locking-and-synchronization-of-keys.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/server-Key_State/0002-server-Implement-locking-and-synchronization-of-keys.patch 2015-07-12 05:53:31.000000000 +0000 @@ -1,13 +1,13 @@ -From 786c3fd3cfc26cb0eb116ca0f8d28a9640722404 Mon Sep 17 00:00:00 2001 +From 8be0b58eb1712de2f8ca04842fbd22cf5faa5f38 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner -Date: Thu, 12 Mar 2015 02:56:21 +0100 +Date: Fri, 10 Jul 2015 16:13:53 +0200 Subject: server: Implement locking and synchronization of keystate buffer. (rev 2) --- dlls/comctl32/tests/listview.c | 1 + - server/queue.c | 58 +++++++++++++++++++++++++++++++++++++++++- - 2 files changed, 58 insertions(+), 1 deletion(-) + server/queue.c | 43 +++++++++++++++++++++++++++++++++++++++++- + 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c index 3edb25a..3ec4181 100644 @@ -22,7 +22,7 @@ /* Set SHIFT key released */ diff --git a/server/queue.c b/server/queue.c -index 35ee532..f278861 100644 +index e4b2969..ab8bb29 100644 --- a/server/queue.c +++ b/server/queue.c @@ -113,6 +113,7 @@ struct thread_input @@ -129,11 +129,7 @@ /* first check for sent messages */ if ((ptr = list_head( &queue->msg_list[SEND_MESSAGE] ))) { -@@ -2857,13 +2893,33 @@ DECL_HANDLER(get_key_state) - } - else - { -+ unsigned char *keystate; +@@ -2861,7 +2897,12 @@ DECL_HANDLER(get_key_state) if (!(thread = get_thread_from_id( req->tid ))) return; if (thread->queue) { @@ -145,25 +141,8 @@ + reply->state = thread->queue->input->keystate[req->key & 0xff]; + } set_reply_data( thread->queue->input->keystate, size ); -+ release_object( thread ); -+ return; - } - release_object( thread ); -+ -+ /* fallback to desktop keystate */ -+ if (!(desktop = get_thread_desktop( current, 0 ))) return; -+ if (req->key >= 0) -+ reply->state = desktop->keystate[req->key & 0xff] & ~0x40; -+ if ((keystate = set_reply_data_size( size ))) -+ { -+ unsigned int i; -+ for (i = 0; i < size; i++) -+ keystate[i] = desktop->keystate[i] & ~0x40; -+ } -+ release_object( desktop ); - } - } - + release_object( thread ); + return; -- -2.4.2 +2.4.5 diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/server-Key_State/definition wine-staging-1.7.47~ubuntu14.10.1/patches/server-Key_State/definition --- wine-staging-1.7.46~ubuntu14.10.1/patches/server-Key_State/definition 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/server-Key_State/definition 2015-07-12 05:53:31.000000000 +0000 @@ -1,3 +1,3 @@ -Fixes: [27238] Fallback to global key state for threads without a queue +# Fixes: [27238] Fallback to global key state for threads without a queue Fixes: [31899] Implement locking and synchronization of key states Fixes: [35907] Fix caps lock state issues with multiple processes diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/server-Shared_Memory/0004-user32-Avoid-unnecessary-wineserver-calls-in-PeekMes.patch wine-staging-1.7.47~ubuntu14.10.1/patches/server-Shared_Memory/0004-user32-Avoid-unnecessary-wineserver-calls-in-PeekMes.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/server-Shared_Memory/0004-user32-Avoid-unnecessary-wineserver-calls-in-PeekMes.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/server-Shared_Memory/0004-user32-Avoid-unnecessary-wineserver-calls-in-PeekMes.patch 2015-07-12 05:53:31.000000000 +0000 @@ -1,15 +1,15 @@ -From 00f5e4db4532c964e1f6ada2d40ac9f21ba30c3e Mon Sep 17 00:00:00 2001 +From abf362b37a3424926d233b8997cb6c7b6a42b0c4 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Thu, 19 Mar 2015 02:07:24 +0100 Subject: user32: Avoid unnecessary wineserver calls in PeekMessage/GetMessage. --- dlls/user32/message.c | 13 +++++++++++++ - dlls/user32/user_private.h | 1 + - 2 files changed, 14 insertions(+) + dlls/user32/user_private.h | 3 ++- + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/dlls/user32/message.c b/dlls/user32/message.c -index e54ed92..dbfd427 100644 +index 5a76523..d47fee4 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c @@ -2740,6 +2740,18 @@ static BOOL peek_message( MSG *msg, HWND hwnd, UINT first, UINT last, UINT flags @@ -40,9 +40,18 @@ { req->flags = flags; diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h -index 445fd40..1c87de4 100644 +index d3affb0..4de34c7 100644 --- a/dlls/user32/user_private.h +++ b/dlls/user32/user_private.h +@@ -176,7 +176,7 @@ struct user_thread_info + WORD recursion_count; /* SendMessage recursion counter */ + WORD message_count; /* Get/PeekMessage loop counter */ + WORD hook_call_depth; /* Number of recursively called hook procs */ +- BOOL hook_unicode; /* Is current hook unicode? */ ++ WORD hook_unicode; /* Is current hook unicode? */ + HHOOK hook; /* Current hook */ + struct received_message_info *receive_info; /* Message being currently received */ + struct wm_char_mapping_data *wmchar_data; /* Data for WM_CHAR mappings */ @@ -184,6 +184,7 @@ struct user_thread_info DWORD GetMessagePosVal; /* Value for GetMessagePos */ ULONG_PTR GetMessageExtraInfoVal; /* Value for GetMessageExtraInfo */ @@ -52,5 +61,5 @@ HWND top_window; /* Desktop window */ HWND msg_window; /* HWND_MESSAGE parent window */ -- -2.3.5 +2.4.4 diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0001-vcomp-Implement-stub-for-_vcomp_fork.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0001-vcomp-Implement-stub-for-_vcomp_fork.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0001-vcomp-Implement-stub-for-_vcomp_fork.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0001-vcomp-Implement-stub-for-_vcomp_fork.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,165 @@ +From 6404654fd885acbf0e563d9b5070d321986b5b8d Mon Sep 17 00:00:00 2001 +From: Dan Kegel +Date: Sat, 11 Jul 2015 06:50:26 +0200 +Subject: vcomp: Implement stub for _vcomp_fork. + +--- + dlls/vcomp/main.c | 93 +++++++++++++++++++++++++++++++++++++++++++++ + dlls/vcomp/vcomp.spec | 2 +- + dlls/vcomp100/vcomp100.spec | 2 +- + dlls/vcomp90/vcomp90.spec | 2 +- + 4 files changed, 96 insertions(+), 3 deletions(-) + +diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c +index ab2a372..26f6c67 100644 +--- a/dlls/vcomp/main.c ++++ b/dlls/vcomp/main.c +@@ -3,6 +3,7 @@ + * vcomp implementation + * + * Copyright 2011 Austin English ++ * Copyright 2012 Dan Kegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public +@@ -107,6 +108,98 @@ void CDECL _vcomp_single_end(void) + TRACE("stub\n"); + } + ++void CDECL _vcomp_fork_call_wrapper(void *wrapper, int nargs, __ms_va_list args); ++ ++void WINAPIV _vcomp_fork(BOOL ifval, int nargs, void *wrapper, ...) ++{ ++ __ms_va_list valist; ++ ++ TRACE("(%d, %d, %p, ...)\n", ifval, nargs, wrapper); ++ ++ __ms_va_start(valist, wrapper); ++ _vcomp_fork_call_wrapper(wrapper, nargs, valist); ++ __ms_va_end(valist); ++} ++ ++#if defined(__i386__) ++__ASM_GLOBAL_FUNC( _vcomp_fork_call_wrapper, ++ "pushl %ebp\n\t" ++ __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") ++ __ASM_CFI(".cfi_rel_offset %ebp,0\n\t") ++ "movl %esp,%ebp\n\t" ++ __ASM_CFI(".cfi_def_cfa_register %ebp\n\t") ++ "pushl %esi\n\t" ++ __ASM_CFI(".cfi_rel_offset %esi,-4\n\t") ++ "pushl %edi\n\t" ++ __ASM_CFI(".cfi_rel_offset %edi,-8\n\t") ++ "movl 12(%ebp),%edx\n\t" ++ "movl %esp,%edi\n\t" ++ "shll $2,%edx\n\t" ++ "jz 1f\n\t" ++ "subl %edx,%edi\n\t" ++ "andl $~15,%edi\n\t" ++ "movl %edi,%esp\n\t" ++ "movl 12(%ebp),%ecx\n\t" ++ "movl 16(%ebp),%esi\n\t" ++ "cld\n\t" ++ "rep; movsl\n" ++ "1:\tcall *8(%ebp)\n\t" ++ "leal -8(%ebp),%esp\n\t" ++ "popl %edi\n\t" ++ __ASM_CFI(".cfi_same_value %edi\n\t") ++ "popl %esi\n\t" ++ __ASM_CFI(".cfi_same_value %esi\n\t") ++ "popl %ebp\n\t" ++ __ASM_CFI(".cfi_def_cfa %esp,4\n\t") ++ __ASM_CFI(".cfi_same_value %ebp\n\t") ++ "ret" ) ++ ++#elif defined(__x86_64__) ++ ++__ASM_GLOBAL_FUNC( _vcomp_fork_call_wrapper, ++ "pushq %rbp\n\t" ++ __ASM_CFI(".cfi_adjust_cfa_offset 8\n\t") ++ __ASM_CFI(".cfi_rel_offset %rbp,0\n\t") ++ "movq %rsp,%rbp\n\t" ++ __ASM_CFI(".cfi_def_cfa_register %rbp\n\t") ++ "pushq %rsi\n\t" ++ __ASM_CFI(".cfi_rel_offset %rsi,-8\n\t") ++ "pushq %rdi\n\t" ++ __ASM_CFI(".cfi_rel_offset %rdi,-16\n\t") ++ "movq %rcx,%rax\n\t" ++ "movq $4,%rcx\n\t" ++ "cmp %rcx,%rdx\n\t" ++ "cmovgq %rdx,%rcx\n\t" ++ "leaq 0(,%rcx,8),%rdx\n\t" ++ "subq %rdx,%rsp\n\t" ++ "andq $~15,%rsp\n\t" ++ "movq %rsp,%rdi\n\t" ++ "movq %r8,%rsi\n\t" ++ "rep; movsq\n\t" ++ "movq 0(%rsp),%rcx\n\t" ++ "movq 8(%rsp),%rdx\n\t" ++ "movq 16(%rsp),%r8\n\t" ++ "movq 24(%rsp),%r9\n\t" ++ "callq *%rax\n\t" ++ "leaq -16(%rbp),%rsp\n\t" ++ "popq %rdi\n\t" ++ __ASM_CFI(".cfi_same_value %rdi\n\t") ++ "popq %rsi\n\t" ++ __ASM_CFI(".cfi_same_value %rsi\n\t") ++ __ASM_CFI(".cfi_def_cfa_register %rsp\n\t") ++ "popq %rbp\n\t" ++ __ASM_CFI(".cfi_adjust_cfa_offset -8\n\t") ++ __ASM_CFI(".cfi_same_value %rbp\n\t") ++ "ret") ++#else ++ ++void CDECL _vcomp_fork_call_wrapper(void *wrapper, int nargs, __ms_va_list args) ++{ ++ ERR("Not implemented for this architecture\n"); ++} ++ ++#endif ++ + BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) + { + TRACE("(0x%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved); +diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec +index 306dd15..d446574 100644 +--- a/dlls/vcomp/vcomp.spec ++++ b/dlls/vcomp/vcomp.spec +@@ -64,7 +64,7 @@ + @ stub _vcomp_for_static_init_i8 + @ stub _vcomp_for_static_simple_init + @ stub _vcomp_for_static_simple_init_i8 +-@ stub _vcomp_fork ++@ varargs _vcomp_fork(long long ptr) + @ stub _vcomp_get_thread_num + @ stub _vcomp_leave_critsect + @ stub _vcomp_master_barrier +diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec +index 39cf91c..2c04e91 100644 +--- a/dlls/vcomp100/vcomp100.spec ++++ b/dlls/vcomp100/vcomp100.spec +@@ -64,7 +64,7 @@ + @ stub _vcomp_for_static_init_i8 + @ stub _vcomp_for_static_simple_init + @ stub _vcomp_for_static_simple_init_i8 +-@ stub _vcomp_fork ++@ varargs _vcomp_fork(long long ptr) vcomp._vcomp_fork + @ stub _vcomp_get_thread_num + @ stub _vcomp_leave_critsect + @ stub _vcomp_master_barrier +diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec +index 39cf91c..2c04e91 100644 +--- a/dlls/vcomp90/vcomp90.spec ++++ b/dlls/vcomp90/vcomp90.spec +@@ -64,7 +64,7 @@ + @ stub _vcomp_for_static_init_i8 + @ stub _vcomp_for_static_simple_init + @ stub _vcomp_for_static_simple_init_i8 +-@ stub _vcomp_fork ++@ varargs _vcomp_fork(long long ptr) vcomp._vcomp_fork + @ stub _vcomp_get_thread_num + @ stub _vcomp_leave_critsect + @ stub _vcomp_master_barrier +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0002-vcomp-Add-basic-worker-thread-infrastructure.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0002-vcomp-Add-basic-worker-thread-infrastructure.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0002-vcomp-Add-basic-worker-thread-infrastructure.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0002-vcomp-Add-basic-worker-thread-infrastructure.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,311 @@ +From e3f58ae29d504bd1f2287566878b7d6674bd5484 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sat, 11 Jul 2015 18:53:41 +0200 +Subject: vcomp: Add basic worker thread infrastructure. + +--- + dlls/vcomp/main.c | 221 +++++++++++++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 211 insertions(+), 10 deletions(-) + +diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c +index 26f6c67..9de9721 100644 +--- a/dlls/vcomp/main.c ++++ b/dlls/vcomp/main.c +@@ -4,6 +4,7 @@ + * + * Copyright 2011 Austin English + * Copyright 2012 Dan Kegel ++ * Copyright 2015 Sebastian Lackner + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public +@@ -23,13 +24,68 @@ + #include "config.h" + + #include ++#include + + #include "windef.h" + #include "winbase.h" + #include "wine/debug.h" ++#include "wine/list.h" + + WINE_DEFAULT_DEBUG_CHANNEL(vcomp); + ++static HMODULE vcomp_module; ++static struct list vcomp_idle_threads = LIST_INIT(vcomp_idle_threads); ++static DWORD vcomp_context_tls = TLS_OUT_OF_INDEXES; ++static DWORD vcomp_max_threads = 32; ++static DWORD vcomp_num_threads = 1; ++ ++static RTL_CRITICAL_SECTION vcomp_section; ++static RTL_CRITICAL_SECTION_DEBUG critsect_debug = ++{ ++ 0, 0, &vcomp_section, ++ { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, ++ 0, 0, { (DWORD_PTR)(__FILE__ ": vcomp_section") } ++}; ++static RTL_CRITICAL_SECTION vcomp_section = { &critsect_debug, -1, 0, 0, 0, 0 }; ++ ++struct vcomp_thread_info ++{ ++ struct list entry; ++ CONDITION_VARIABLE cond; ++ ++ /* current task */ ++ struct vcomp_team_info *team; ++ DWORD thread_num; ++}; ++ ++struct vcomp_team_info ++{ ++ CONDITION_VARIABLE cond; ++ DWORD num_threads; ++ DWORD finished_threads; ++ ++ /* callback arguments */ ++ unsigned int nargs; ++ void *wrapper; ++ __ms_va_list valist; ++}; ++ ++static inline struct vcomp_thread_info *vcomp_get_thread_info(void) ++{ ++ return (struct vcomp_thread_info *)TlsGetValue(vcomp_context_tls); ++} ++ ++static inline struct vcomp_team_info *vcomp_get_team_info(void) ++{ ++ struct vcomp_thread_info *thread_info = vcomp_get_thread_info(); ++ return thread_info ? thread_info->team : NULL; ++} ++ ++static inline void vcomp_set_thread_info(struct vcomp_thread_info *thread_info) ++{ ++ TlsSetValue(vcomp_context_tls, thread_info); ++} ++ + int CDECL omp_get_dynamic(void) + { + TRACE("stub\n"); +@@ -39,7 +95,7 @@ int CDECL omp_get_dynamic(void) + int CDECL omp_get_max_threads(void) + { + TRACE("stub\n"); +- return 1; ++ return vcomp_max_threads; + } + + int CDECL omp_get_nested(void) +@@ -56,14 +112,22 @@ int CDECL omp_get_num_procs(void) + + int CDECL omp_get_num_threads(void) + { +- TRACE("stub\n"); +- return 1; ++ struct vcomp_team_info *team_info; ++ ++ TRACE("()\n"); ++ ++ team_info = vcomp_get_team_info(); ++ return team_info ? team_info->num_threads : 1; + } + + int CDECL omp_get_thread_num(void) + { +- TRACE("stub\n"); +- return 0; ++ struct vcomp_thread_info *thread_info; ++ ++ TRACE("()\n"); ++ ++ thread_info = vcomp_get_thread_info(); ++ return thread_info ? thread_info->thread_num : 0; + } + + /* Time in seconds since "some time in the past" */ +@@ -85,6 +149,7 @@ void CDECL omp_set_nested(int nested) + void CDECL omp_set_num_threads(int num_threads) + { + TRACE("(%d): stub\n", num_threads); ++ vcomp_num_threads = max(1, min(num_threads, vcomp_max_threads)); + } + + void CDECL _vcomp_barrier(void) +@@ -94,7 +159,8 @@ void CDECL _vcomp_barrier(void) + + void CDECL _vcomp_set_num_threads(int num_threads) + { +- TRACE("(%d): stub\n", num_threads); ++ TRACE("(%d)\n", num_threads); ++ vcomp_num_threads = max(1, min(num_threads, vcomp_max_threads)); + } + + int CDECL _vcomp_single_begin(int flags) +@@ -110,15 +176,139 @@ void CDECL _vcomp_single_end(void) + + void CDECL _vcomp_fork_call_wrapper(void *wrapper, int nargs, __ms_va_list args); + ++static DWORD WINAPI _vcomp_fork_worker(void *param) ++{ ++ struct vcomp_thread_info *thread_info = param; ++ vcomp_set_thread_info(thread_info); ++ ++ TRACE("starting worker thread %p\n", thread_info); ++ ++ EnterCriticalSection(&vcomp_section); ++ for (;;) ++ { ++ struct vcomp_team_info *team = thread_info->team; ++ if (team != NULL) ++ { ++ /* Leave critical section and execute callback. */ ++ LeaveCriticalSection(&vcomp_section); ++ _vcomp_fork_call_wrapper(team->wrapper, team->nargs, team->valist); ++ EnterCriticalSection(&vcomp_section); ++ ++ /* Detach current thread from team. */ ++ thread_info->team = NULL; ++ list_remove(&thread_info->entry); ++ list_add_tail(&vcomp_idle_threads, &thread_info->entry); ++ if (++team->finished_threads >= team->num_threads) ++ WakeAllConditionVariable(&team->cond); ++ } ++ ++ if (!SleepConditionVariableCS(&thread_info->cond, &vcomp_section, 5000) && ++ GetLastError() == ERROR_TIMEOUT && !thread_info->team) ++ { ++ break; ++ } ++ } ++ list_remove(&thread_info->entry); ++ LeaveCriticalSection(&vcomp_section); ++ ++ TRACE("terminating worker thread %p\n", thread_info); ++ HeapFree(GetProcessHeap(), 0, thread_info); ++ FreeLibraryAndExitThread(vcomp_module, 0); ++ return 0; ++} ++ + void WINAPIV _vcomp_fork(BOOL ifval, int nargs, void *wrapper, ...) + { +- __ms_va_list valist; ++ struct vcomp_thread_info thread_info, *prev_thread_info; ++ struct vcomp_team_info team_info; ++ DWORD num_threads = vcomp_num_threads; /* FIXME */ ++ BOOL parallel = ifval; + + TRACE("(%d, %d, %p, ...)\n", ifval, nargs, wrapper); + +- __ms_va_start(valist, wrapper); +- _vcomp_fork_call_wrapper(wrapper, nargs, valist); +- __ms_va_end(valist); ++ /* Initialize members of team_info. */ ++ InitializeConditionVariable(&team_info.cond); ++ team_info.num_threads = 1; ++ team_info.finished_threads = 0; ++ team_info.nargs = nargs; ++ team_info.wrapper = wrapper; ++ __ms_va_start(team_info.valist, wrapper); ++ ++ /* Initialize members of thread_info. */ ++ list_init(&thread_info.entry); ++ InitializeConditionVariable(&thread_info.cond); ++ thread_info.team = &team_info; ++ thread_info.thread_num = 0; ++ ++ if (parallel) ++ { ++ struct list *ptr; ++ EnterCriticalSection(&vcomp_section); ++ ++ /* Try to reuse idle threads. */ ++ while (team_info.num_threads < num_threads && ++ (ptr = list_head( &vcomp_idle_threads ))) ++ { ++ struct vcomp_thread_info *info = LIST_ENTRY(ptr, struct vcomp_thread_info, entry); ++ list_remove(&info->entry); ++ list_add_tail(&thread_info.entry, &info->entry); ++ info->team = &team_info; ++ info->thread_num = team_info.num_threads++; ++ WakeAllConditionVariable(&info->cond); ++ } ++ ++ /* Spawn additional new threads. */ ++ while (team_info.num_threads < num_threads) ++ { ++ struct vcomp_thread_info *info; ++ HMODULE module; ++ HANDLE thread; ++ ++ info = HeapAlloc(GetProcessHeap(), 0, sizeof(*info)); ++ if (!info) break; ++ ++ InitializeConditionVariable(&info->cond); ++ info->team = &team_info; ++ info->thread_num = team_info.num_threads; ++ ++ thread = CreateThread(NULL, 0, _vcomp_fork_worker, info, 0, NULL); ++ if (!thread) ++ { ++ HeapFree(GetProcessHeap(), 0, info); ++ break; ++ } ++ ++ GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, ++ (const WCHAR *)vcomp_module, &module); ++ ++ list_add_tail(&thread_info.entry, &info->entry); ++ team_info.num_threads++; ++ CloseHandle(thread); ++ } ++ ++ LeaveCriticalSection(&vcomp_section); ++ } ++ ++ /* Call the callback in the context of the new team. */ ++ prev_thread_info = vcomp_get_thread_info(); ++ vcomp_set_thread_info(&thread_info); ++ _vcomp_fork_call_wrapper(team_info.wrapper, team_info.nargs, team_info.valist); ++ vcomp_set_thread_info(prev_thread_info); ++ ++ /* Implicit join, wait for other tasks. */ ++ if (parallel) ++ { ++ EnterCriticalSection(&vcomp_section); ++ ++ team_info.finished_threads++; ++ while (team_info.finished_threads < team_info.num_threads) ++ SleepConditionVariableCS(&team_info.cond, &vcomp_section, INFINITE); ++ ++ LeaveCriticalSection(&vcomp_section); ++ assert(list_empty(&thread_info.entry)); ++ } ++ ++ __ms_va_end(team_info.valist); + } + + #if defined(__i386__) +@@ -208,8 +398,19 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) + { + case DLL_WINE_PREATTACH: + return FALSE; /* prefer native version */ ++ + case DLL_PROCESS_ATTACH: ++ vcomp_module = hinstDLL; + DisableThreadLibraryCalls(hinstDLL); ++ if ((vcomp_context_tls = TlsAlloc()) == TLS_OUT_OF_INDEXES) ++ { ++ ERR("Failed to allocate TLS index\n"); ++ return FALSE; ++ } ++ break; ++ ++ case DLL_PROCESS_DETACH: ++ TlsFree(vcomp_context_tls); + break; + } + +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0003-vcomp-tests-Add-initial-tests-for-_vcomp_fork.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0003-vcomp-tests-Add-initial-tests-for-_vcomp_fork.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0003-vcomp-tests-Add-initial-tests-for-_vcomp_fork.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0003-vcomp-tests-Add-initial-tests-for-_vcomp_fork.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,230 @@ +From 92cd559115925b61b980a784efacb0ccdd7029d0 Mon Sep 17 00:00:00 2001 +From: Dan Kegel +Date: Sat, 11 Jul 2015 03:56:04 +0200 +Subject: vcomp/tests: Add initial tests for _vcomp_fork. + +--- + configure.ac | 3 +- + dlls/vcomp/tests/Makefile.in | 7 +++ + dlls/vcomp/tests/vcomp.c | 122 ++++++++++++++++++++++++++++++++++++++++ + dlls/vcomp/tests/vcomp.manifest | 21 +++++++ + dlls/vcomp/tests/vcomp.rc | 22 ++++++++ + 5 files changed, 174 insertions(+), 1 deletion(-) + create mode 100644 dlls/vcomp/tests/Makefile.in + create mode 100644 dlls/vcomp/tests/vcomp.c + create mode 100644 dlls/vcomp/tests/vcomp.manifest + create mode 100644 dlls/vcomp/tests/vcomp.rc + +diff --git a/configure.ac b/configure.ac +index 3eaec29..a36fc4b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3321,7 +3321,8 @@ WINE_CONFIG_DLL(uxtheme,,[implib]) + WINE_CONFIG_TEST(dlls/uxtheme/tests) + WINE_CONFIG_DLL(vbscript,,[clean]) + WINE_CONFIG_TEST(dlls/vbscript/tests,[clean]) +-WINE_CONFIG_DLL(vcomp) ++WINE_CONFIG_DLL(vcomp,,[implib]) ++WINE_CONFIG_TEST(dlls/vcomp/tests) + WINE_CONFIG_DLL(vcomp100) + WINE_CONFIG_DLL(vcomp90) + WINE_CONFIG_DLL(vdhcp.vxd,enable_win16) +diff --git a/dlls/vcomp/tests/Makefile.in b/dlls/vcomp/tests/Makefile.in +new file mode 100644 +index 0000000..08a5b7f +--- /dev/null ++++ b/dlls/vcomp/tests/Makefile.in +@@ -0,0 +1,7 @@ ++TESTDLL = vcomp.dll ++ ++C_SRCS = \ ++ vcomp.c ++ ++RC_SRCS = \ ++ vcomp.rc +diff --git a/dlls/vcomp/tests/vcomp.c b/dlls/vcomp/tests/vcomp.c +new file mode 100644 +index 0000000..5c6a861 +--- /dev/null ++++ b/dlls/vcomp/tests/vcomp.c +@@ -0,0 +1,122 @@ ++/* ++ * Unit test suite for vcomp fork/join implementation ++ * ++ * Copyright 2012 Dan Kegel ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ */ ++ ++#include "wine/test.h" ++ ++static const int is_win64 = (sizeof(void *) > sizeof(int)); ++ ++static HMODULE hvcomp = 0; ++static void (WINAPIV *p_vcomp_fork)(BOOL ifval, int nargs, void *wrapper, ...); ++static int (CDECL *pomp_get_max_threads)(void); ++ ++#define VCOMP_GET_PROC(func) \ ++ do \ ++ { \ ++ p ## func = (void *)GetProcAddress(hvcomp, #func); \ ++ if (!p ## func) trace("Failed to get address for %s\n", #func); \ ++ } \ ++ while (0) ++ ++static BOOL init_vcomp(void) ++{ ++ hvcomp = LoadLibraryA("vcomp.dll"); ++ if (!hvcomp) ++ { ++ win_skip("vcomp.dll not installed\n"); ++ return FALSE; ++ } ++ ++ VCOMP_GET_PROC(_vcomp_fork); ++ VCOMP_GET_PROC(omp_get_max_threads); ++ ++ return TRUE; ++} ++ ++#undef VCOMP_GET_PROC ++ ++static void CDECL _test_vcomp_fork_ptr(LONG *a, LONG *b, LONG *c, LONG *d, LONG *e) ++{ ++ InterlockedIncrement(a); ++ InterlockedIncrement(b); ++ InterlockedIncrement(c); ++ InterlockedIncrement(d); ++ InterlockedIncrement(e); ++} ++ ++static void CDECL _test_vcomp_fork_uintptr(UINT_PTR a, UINT_PTR b, UINT_PTR c, UINT_PTR d, UINT_PTR e) ++{ ++ ok(a == 1, "expected a = 1, got %p\n", (void *)a); ++ ok(b == MAXUINT_PTR - 2, "expected b = MAXUINT_PTR - 2, got %p\n", (void *)b); ++ ok(c == 3, "expected c = 3, got %p\n", (void *)c); ++ ok(d == MAXUINT_PTR - 4, "expected d = MAXUINT_PTR - 4, got %p\n", (void *)d); ++ ok(e == 5, "expected e = 5, got %p\n", (void *)e); ++} ++ ++static void CDECL _test_vcomp_fork_float(float a, float b, float c, float d, float e) ++{ ++ ok(1.4999 < a && a < 1.5001, "expected a = 1.5, got %f\n", a); ++ ok(2.4999 < b && b < 2.5001, "expected b = 2.5, got %f\n", b); ++ ok(3.4999 < c && c < 3.5001, "expected c = 3.5, got %f\n", c); ++ ok(4.4999 < d && d < 4.5001, "expected d = 4.5, got %f\n", d); ++ ok(5.4999 < e && e < 5.5001, "expected e = 5.5, got %f\n", e); ++} ++ ++static void test_vcomp_fork(void) ++{ ++ LONG a, b, c, d, e; ++ int n = pomp_get_max_threads(); ++ ++ a = 0; b = 1; c = 2; d = 3; e = 4; ++ p_vcomp_fork(FALSE, 5, _test_vcomp_fork_ptr, &a, &b, &c, &d, &e); ++ ok(a == 1, "expected a = 1, got %u\n", a); ++ ok(b == 2, "expected b = 2, got %u\n", b); ++ ok(c == 3, "expected c = 3, got %u\n", c); ++ ok(d == 4, "expected d = 4, got %u\n", d); ++ ok(e == 5, "expected e = 5, got %u\n", e); ++ ++ a = 0; b = 1; c = 2; d = 3; e = 4; ++ p_vcomp_fork(TRUE, 5, _test_vcomp_fork_ptr, &a, &b, &c, &d, &e); ++ ok(a > 0 && a <= (n + 0), "expected a > 0 && a <= (n + 0), got %u\n", a); ++ ok(b > 1 && b <= (n + 1), "expected b > 1 && b <= (n + 1), got %u\n", b); ++ ok(c > 2 && c <= (n + 2), "expected c > 2 && c <= (n + 2), got %u\n", c); ++ ok(d > 3 && d <= (n + 3), "expected d > 3 && d <= (n + 3), got %u\n", d); ++ ok(e > 4 && e <= (n + 4), "expected e > 4 && e <= (n + 4), got %u\n", e); ++ ++ p_vcomp_fork(TRUE, 5, _test_vcomp_fork_uintptr, (UINT_PTR)1, (UINT_PTR)(MAXUINT_PTR - 2), ++ (UINT_PTR)3, (UINT_PTR)(MAXUINT_PTR - 4), (UINT_PTR)5); ++ ++ if (is_win64) ++ skip("skipping float test on x86_64\n"); ++ else ++ { ++ void (CDECL *func)(BOOL, int, void *, float, float, float, float, float) = (void *)p_vcomp_fork; ++ func(TRUE, 5, _test_vcomp_fork_float, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f); ++ } ++} ++ ++START_TEST(vcomp) ++{ ++ if (!init_vcomp()) ++ return; ++ ++ test_vcomp_fork(); ++ ++ FreeLibrary(hvcomp); ++} +diff --git a/dlls/vcomp/tests/vcomp.manifest b/dlls/vcomp/tests/vcomp.manifest +new file mode 100644 +index 0000000..6c8bd91 +--- /dev/null ++++ b/dlls/vcomp/tests/vcomp.manifest +@@ -0,0 +1,21 @@ ++ ++ ++ ++Wine vcomp test suite ++ ++ ++ ++ ++ ++ +diff --git a/dlls/vcomp/tests/vcomp.rc b/dlls/vcomp/tests/vcomp.rc +new file mode 100644 +index 0000000..c5f1d25 +--- /dev/null ++++ b/dlls/vcomp/tests/vcomp.rc +@@ -0,0 +1,22 @@ ++/* ++ * Copyright (c) 2012 Dan Kegel ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ */ ++ ++#include "winuser.h" ++ ++/* @makedep: vcomp.manifest */ ++1 RT_MANIFEST vcomp.manifest +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0004-vcomp-Implement-_vcomp_for_static_simple_init-and-_v.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0004-vcomp-Implement-_vcomp_for_static_simple_init-and-_v.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0004-vcomp-Implement-_vcomp_for_static_simple_init-and-_v.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0004-vcomp-Implement-_vcomp_for_static_simple_init-and-_v.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,168 @@ +From f455eb53b0d527874fb95bdc652d1a31cd8fa93a Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sat, 11 Jul 2015 18:59:41 +0200 +Subject: vcomp: Implement _vcomp_for_static_simple_init and + _vcomp_for_static_end. + +--- + dlls/vcomp/main.c | 90 +++++++++++++++++++++++++++++++++++++++++++++ + dlls/vcomp/vcomp.spec | 4 +- + dlls/vcomp100/vcomp100.spec | 4 +- + dlls/vcomp90/vcomp90.spec | 4 +- + 4 files changed, 96 insertions(+), 6 deletions(-) + +diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c +index 9de9721..400f93a 100644 +--- a/dlls/vcomp/main.c ++++ b/dlls/vcomp/main.c +@@ -174,6 +174,96 @@ void CDECL _vcomp_single_end(void) + TRACE("stub\n"); + } + ++void CDECL _vcomp_for_static_simple_init(unsigned int first, unsigned int last, int step, BOOL forward, ++ unsigned int *begin, unsigned int *end) ++{ ++ struct vcomp_thread_info *thread_info = vcomp_get_thread_info(); ++ struct vcomp_team_info *team_info = thread_info->team; ++ unsigned int iterations, per_thread, remaining; ++ DWORD num_threads, thread_num; ++ ++ TRACE("(%d, %d, %d, %d, %p, %p)\n", first, last, step, forward, begin, end); ++ ++ num_threads = team_info->num_threads; ++ thread_num = thread_info->thread_num; ++ ++ if (num_threads == 1) ++ { ++ *begin = first; ++ *end = last; ++ return; ++ } ++ ++ if (step <= 0) ++ { ++ *begin = 0; ++ *end = forward ? -1 : 1; ++ return; ++ } ++ ++ if (forward) ++ { ++ DWORD64 last64 = last; ++ if (last64 < first) ++ last64 += 0x100000000; ++ ++ iterations = 1 + (last64 - first) / step; ++ per_thread = iterations / num_threads; ++ remaining = iterations - per_thread * num_threads; ++ ++ if (thread_num < remaining) ++ { ++ per_thread++; ++ } ++ else if (per_thread) ++ { ++ first += remaining * step; ++ } ++ else ++ { ++ *begin = first; ++ *end = first - step; ++ return; ++ } ++ ++ *begin = first + per_thread * thread_num * step; ++ *end = *begin + (per_thread - 1) * step; ++ } ++ else ++ { ++ DWORD first64 = first; ++ if (first64 < last) ++ first64 += 0x100000000; ++ ++ iterations = 1 + (first64 - last) / step; ++ per_thread = iterations / num_threads; ++ remaining = iterations - per_thread * num_threads; ++ ++ if (thread_num < remaining) ++ { ++ per_thread++; ++ } ++ else if (per_thread) ++ { ++ first64 -= remaining * step; ++ } ++ else ++ { ++ *begin = first64; ++ *end = first64 + step; ++ return; ++ } ++ ++ *begin = first64 - per_thread * thread_num * step; ++ *end = *begin - (per_thread - 1) * step; ++ } ++} ++ ++void CDECL _vcomp_for_static_end(void) ++{ ++ TRACE("()\n"); ++} ++ + void CDECL _vcomp_fork_call_wrapper(void *wrapper, int nargs, __ms_va_list args); + + static DWORD WINAPI _vcomp_fork_worker(void *param) +diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec +index d446574..b14edca 100644 +--- a/dlls/vcomp/vcomp.spec ++++ b/dlls/vcomp/vcomp.spec +@@ -59,10 +59,10 @@ + @ stub _vcomp_for_dynamic_init_i8 + @ stub _vcomp_for_dynamic_next + @ stub _vcomp_for_dynamic_next_i8 +-@ stub _vcomp_for_static_end ++@ cdecl _vcomp_for_static_end() + @ stub _vcomp_for_static_init + @ stub _vcomp_for_static_init_i8 +-@ stub _vcomp_for_static_simple_init ++@ cdecl _vcomp_for_static_simple_init(long long long long ptr ptr) + @ stub _vcomp_for_static_simple_init_i8 + @ varargs _vcomp_fork(long long ptr) + @ stub _vcomp_get_thread_num +diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec +index 2c04e91..89e0972 100644 +--- a/dlls/vcomp100/vcomp100.spec ++++ b/dlls/vcomp100/vcomp100.spec +@@ -59,10 +59,10 @@ + @ stub _vcomp_for_dynamic_init_i8 + @ stub _vcomp_for_dynamic_next + @ stub _vcomp_for_dynamic_next_i8 +-@ stub _vcomp_for_static_end ++@ cdecl _vcomp_for_static_end() vcomp._vcomp_for_static_end + @ stub _vcomp_for_static_init + @ stub _vcomp_for_static_init_i8 +-@ stub _vcomp_for_static_simple_init ++@ cdecl _vcomp_for_static_simple_init(long long long long ptr ptr) vcomp._vcomp_for_static_simple_init + @ stub _vcomp_for_static_simple_init_i8 + @ varargs _vcomp_fork(long long ptr) vcomp._vcomp_fork + @ stub _vcomp_get_thread_num +diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec +index 2c04e91..89e0972 100644 +--- a/dlls/vcomp90/vcomp90.spec ++++ b/dlls/vcomp90/vcomp90.spec +@@ -59,10 +59,10 @@ + @ stub _vcomp_for_dynamic_init_i8 + @ stub _vcomp_for_dynamic_next + @ stub _vcomp_for_dynamic_next_i8 +-@ stub _vcomp_for_static_end ++@ cdecl _vcomp_for_static_end() vcomp._vcomp_for_static_end + @ stub _vcomp_for_static_init + @ stub _vcomp_for_static_init_i8 +-@ stub _vcomp_for_static_simple_init ++@ cdecl _vcomp_for_static_simple_init(long long long long ptr ptr) vcomp._vcomp_for_static_simple_init + @ stub _vcomp_for_static_simple_init_i8 + @ varargs _vcomp_fork(long long ptr) vcomp._vcomp_fork + @ stub _vcomp_get_thread_num +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0005-vcomp-tests-Add-tests-for-_vcomp_for_static_simple_i.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0005-vcomp-tests-Add-tests-for-_vcomp_for_static_simple_i.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0005-vcomp-tests-Add-tests-for-_vcomp_for_static_simple_i.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0005-vcomp-tests-Add-tests-for-_vcomp_for_static_simple_i.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,275 @@ +From af8411c2c51708c2edbc620b3d775bf5a08144f9 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sat, 11 Jul 2015 05:12:39 +0200 +Subject: vcomp/tests: Add tests for _vcomp_for_static_simple_init. + +--- + dlls/vcomp/tests/vcomp.c | 228 +++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 228 insertions(+) + +diff --git a/dlls/vcomp/tests/vcomp.c b/dlls/vcomp/tests/vcomp.c +index 5c6a861..1971b6d 100644 +--- a/dlls/vcomp/tests/vcomp.c ++++ b/dlls/vcomp/tests/vcomp.c +@@ -23,8 +23,15 @@ + static const int is_win64 = (sizeof(void *) > sizeof(int)); + + static HMODULE hvcomp = 0; ++static void (CDECL *p_vcomp_barrier)(void); ++static void (CDECL *p_vcomp_for_static_end)(void); ++static void (CDECL *p_vcomp_for_static_simple_init)(unsigned int first, unsigned int last, int step, ++ BOOL forward, unsigned int *begin, unsigned int *end); + static void (WINAPIV *p_vcomp_fork)(BOOL ifval, int nargs, void *wrapper, ...); + static int (CDECL *pomp_get_max_threads)(void); ++static int (CDECL *pomp_get_num_threads)(void); ++static int (CDECL *pomp_get_thread_num)(void); ++static void (CDECL *pomp_set_num_threads)(int num_threads); + + #define VCOMP_GET_PROC(func) \ + do \ +@@ -43,8 +50,14 @@ static BOOL init_vcomp(void) + return FALSE; + } + ++ VCOMP_GET_PROC(_vcomp_barrier); ++ VCOMP_GET_PROC(_vcomp_for_static_end); ++ VCOMP_GET_PROC(_vcomp_for_static_simple_init); + VCOMP_GET_PROC(_vcomp_fork); + VCOMP_GET_PROC(omp_get_max_threads); ++ VCOMP_GET_PROC(omp_get_num_threads); ++ VCOMP_GET_PROC(omp_get_thread_num); ++ VCOMP_GET_PROC(omp_set_num_threads); + + return TRUE; + } +@@ -111,12 +124,227 @@ static void test_vcomp_fork(void) + } + } + ++static void CDECL _test_vcomp_for_static_simple_init(void) ++{ ++ static const struct ++ { ++ unsigned int first; ++ unsigned int last; ++ int step; ++ BOOL forward; ++ } ++ tests[] = ++ { ++ /* loop forward, step 1 */ ++ { 0, 0, 1, TRUE }, ++ { 0, 1, 1, TRUE }, ++ { 0, 2, 1, TRUE }, ++ { 0, 3, 1, TRUE }, ++ { 0, 0x10000000, 1, TRUE }, ++ { 0, 0x20000000, 1, TRUE }, ++ { 0, 0x40000000, 1, TRUE }, ++ { 0, 0x80000000, 1, TRUE }, ++ ++ /* loop forward, varying step */ ++ { 0, 100, 1, TRUE }, ++ { 0, 100, 5, TRUE }, ++ { 0, 100, 10, TRUE }, ++ { 0, 100, 25, TRUE }, ++ { 0, 100, 50, TRUE }, ++ { 0, 100, 75, TRUE }, ++ { 0, 100, 100, TRUE }, ++ { 0, 100, 150, TRUE }, ++ ++ /* empty loop forward, varying step */ ++ { 50, 50, 3, TRUE }, ++ { 50, 50, 2, TRUE }, ++ { 50, 50, 1, TRUE }, ++ { 50, 50, 0, TRUE }, ++ { 50, 50, -1, TRUE }, ++ { 50, 50, -2, TRUE }, ++ { 50, 50, -3, TRUE }, ++ ++ /* loop backward, step 1 */ ++ { 0, 0, 1, FALSE }, ++ { 1, 0, 1, FALSE }, ++ { 2, 0, 1, FALSE }, ++ { 3, 0, 1, FALSE }, ++ { 0x10000000, 0, 1, FALSE }, ++ { 0x20000000, 0, 1, FALSE }, ++ { 0x40000000, 0, 1, FALSE }, ++ { 0x80000000, 0, 1, FALSE }, ++ ++ /* loop backward, varying step */ ++ { 100, 0, 1, FALSE }, ++ { 100, 0, 5, FALSE }, ++ { 100, 0, 10, FALSE }, ++ { 100, 0, 25, FALSE }, ++ { 100, 0, 50, FALSE }, ++ { 100, 0, 75, FALSE }, ++ { 100, 0, 100, FALSE }, ++ { 100, 0, 150, FALSE }, ++ ++ /* empty loop backward, varying step */ ++ { 50, 50, 3, FALSE }, ++ { 50, 50, 2, FALSE }, ++ { 50, 50, 1, FALSE }, ++ { 50, 50, 0, FALSE }, ++ { 50, 50, -1, FALSE }, ++ { 50, 50, -2, FALSE }, ++ { 50, 50, -3, FALSE }, ++ ++ /* test overflow in forward loop */ ++ { 0, 0, 1, TRUE }, ++ { 1, 0, 1, TRUE }, ++ { 2, 0, 1, TRUE }, ++ { 3, 0, 1, TRUE }, ++ { 0x10000000, 0, 1, TRUE }, ++ { 0x20000000, 0, 1, TRUE }, ++ { 0x40000000, 0, 1, TRUE }, ++ { 0x80000000, 0, 1, TRUE }, ++ ++ { 100, 0, 1, TRUE }, ++ { 100, 0, 5, TRUE }, ++ { 100, 0, 10, TRUE }, ++ { 100, 0, 25, TRUE }, ++ { 100, 0, 50, TRUE }, ++ { 100, 0, 75, TRUE }, ++ { 100, 0, 100, TRUE }, ++ { 100, 0, 150, TRUE }, ++ ++ /* test overflow in backward loop */ ++ { 0, 0, 1, FALSE }, ++ { 0, 1, 1, FALSE }, ++ { 0, 2, 1, FALSE }, ++ { 0, 3, 1, FALSE }, ++ { 0, 0x10000000, 1, FALSE }, ++ { 0, 0x20000000, 1, FALSE }, ++ { 0, 0x40000000, 1, FALSE }, ++ { 0, 0x80000000, 1, FALSE }, ++ ++ { 0, 100, 1, FALSE }, ++ { 0, 100, 5, FALSE }, ++ { 0, 100, 10, FALSE }, ++ { 0, 100, 25, FALSE }, ++ { 0, 100, 50, FALSE }, ++ { 0, 100, 75, FALSE }, ++ { 0, 100, 100, FALSE }, ++ { 0, 100, 150, FALSE }, ++ }; ++ unsigned int begin, end, expected_begin, expected_end; ++ int thread_num = pomp_get_thread_num(); ++ int num_threads = pomp_get_num_threads(); ++ int i; ++ ++ for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) ++ { ++ unsigned int iterations, per_thread, remaining; ++ DWORD64 first = tests[i].first; ++ DWORD64 last = tests[i].last; ++ int step = tests[i].step; ++ ++ if (num_threads == 1) ++ { ++ expected_begin = first; ++ expected_end = last; ++ goto done; ++ } ++ ++ if (tests[i].forward) ++ { ++ if (tests[i].step <= 0) ++ { ++ expected_begin = 0; ++ expected_end = -1; ++ goto done; ++ } ++ ++ if (last < first) ++ last += 0x100000000; ++ ++ iterations = 1 + (last - first) / step; ++ per_thread = iterations / num_threads; ++ remaining = iterations - per_thread * num_threads; ++ ++ if (thread_num < remaining) ++ per_thread++; ++ else if (per_thread) ++ first += remaining * step; ++ else ++ { ++ expected_begin = first; ++ expected_end = first - step; ++ goto done; ++ } ++ ++ expected_begin = first + per_thread * thread_num * step; ++ expected_end = expected_begin + (per_thread - 1) * step; ++ } ++ else ++ { ++ if (tests[i].step <= 0) ++ { ++ expected_begin = 0; ++ expected_end = 1; ++ goto done; ++ } ++ ++ if (first < last) ++ first += 0x100000000; ++ ++ iterations = 1 + (first - last) / step; ++ per_thread = iterations / num_threads; ++ remaining = iterations - per_thread * num_threads; ++ ++ if (thread_num < remaining) ++ per_thread++; ++ else if (per_thread) ++ first -= remaining * step; ++ else ++ { ++ expected_begin = first; ++ expected_end = first + step; ++ goto done; ++ } ++ ++ expected_begin = first - per_thread * thread_num * step; ++ expected_end = expected_begin - (per_thread - 1) * step; ++ } ++ ++done: ++ begin = end = 0xdeadbeef; ++ p_vcomp_for_static_simple_init(tests[i].first, tests[i].last, tests[i].step, ++ tests[i].forward, &begin, &end); ++ ++ ok(begin == expected_begin, "%d:%d/%d: expected begin = %u, got %u\n", ++ i, thread_num, num_threads, expected_begin, end); ++ ok(end == expected_end, "%d:%d/%d: expected end = %u, got %u\n", ++ i, thread_num, num_threads, expected_end, end); ++ ++ p_vcomp_for_static_end(); ++ p_vcomp_barrier(); ++ } ++} ++ ++static void test_vcomp_for_static_simple_init(void) ++{ ++ int i; ++ ++ for (i = 1; i <= 4; i++) ++ { ++ trace("Running tests with %d threads\n", i); ++ pomp_set_num_threads(i); ++ p_vcomp_fork(TRUE, 0, _test_vcomp_for_static_simple_init); ++ } ++} ++ + START_TEST(vcomp) + { + if (!init_vcomp()) + return; + + test_vcomp_fork(); ++ test_vcomp_for_static_simple_init(); + + FreeLibrary(hvcomp); + } +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0006-vcomp-Implement-_vcomp_for_static_init.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0006-vcomp-Implement-_vcomp_for_static_init.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0006-vcomp-Implement-_vcomp_for_static_init.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0006-vcomp-Implement-_vcomp_for_static_init.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,127 @@ +From 721c89ed7aec4a9ae8f0a5f7b0efeee838c08985 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sat, 11 Jul 2015 19:19:00 +0200 +Subject: vcomp: Implement _vcomp_for_static_init. + +--- + dlls/vcomp/main.c | 62 +++++++++++++++++++++++++++++++++++++++++++++ + dlls/vcomp/vcomp.spec | 2 +- + dlls/vcomp100/vcomp100.spec | 2 +- + dlls/vcomp90/vcomp90.spec | 2 +- + 4 files changed, 65 insertions(+), 3 deletions(-) + +diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c +index 400f93a..2eeea3b 100644 +--- a/dlls/vcomp/main.c ++++ b/dlls/vcomp/main.c +@@ -259,6 +259,68 @@ void CDECL _vcomp_for_static_simple_init(unsigned int first, unsigned int last, + } + } + ++void CDECL _vcomp_for_static_init(int first, int last, int step, int chunksize, unsigned int *loops, ++ int *begin, int *end, int *next, int *lastchunk) ++{ ++ struct vcomp_thread_info *thread_info = vcomp_get_thread_info(); ++ struct vcomp_team_info *team_info = thread_info->team; ++ unsigned int iterations, num_chunks, per_thread, remaining; ++ DWORD num_threads, thread_num; ++ ++ TRACE("(%d, %d, %d, %d, %p, %p, %p, %p, %p)\n", ++ first, last, step, chunksize, loops, begin, end, next, lastchunk); ++ ++ num_threads = team_info->num_threads; ++ thread_num = thread_info->thread_num; ++ ++ if (chunksize < 1) ++ chunksize = 1; ++ ++ if (num_threads == 1 && chunksize > 1) ++ { ++ *loops = 1; ++ *begin = first; ++ *end = last; ++ *next = chunksize; ++ *lastchunk = first; ++ } ++ else if (last > first) ++ { ++ iterations = 1 + (last - first) / step; ++ num_chunks = (iterations + chunksize - 1) / chunksize; ++ per_thread = num_chunks / num_threads; ++ remaining = num_chunks - per_thread * num_threads; ++ ++ *loops = per_thread + (thread_num < remaining); ++ *begin = first + thread_num * chunksize * step; ++ *end = *begin + (chunksize - 1) * step; ++ *next = chunksize * num_threads * step; ++ *lastchunk = first + (num_chunks - 1) * chunksize * step; ++ ++ } ++ else if (last < first) ++ { ++ iterations = 1 + (first - last) / step; ++ num_chunks = (iterations + chunksize - 1) / chunksize; ++ per_thread = num_chunks / num_threads; ++ remaining = num_chunks - per_thread * num_threads; ++ ++ *loops = per_thread + (thread_num < remaining); ++ *begin = first - thread_num * chunksize * step; ++ *end = *begin - (chunksize - 1) * step; ++ *next = - chunksize * num_threads * step; ++ *lastchunk = first - (num_chunks - 1) * chunksize * step; ++ } ++ else ++ { ++ *loops = (thread_num == 0); ++ *begin = first; ++ *end = last; ++ *next = 0; ++ *lastchunk = first; ++ } ++} ++ + void CDECL _vcomp_for_static_end(void) + { + TRACE("()\n"); +diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec +index b14edca..8bc66e8 100644 +--- a/dlls/vcomp/vcomp.spec ++++ b/dlls/vcomp/vcomp.spec +@@ -60,7 +60,7 @@ + @ stub _vcomp_for_dynamic_next + @ stub _vcomp_for_dynamic_next_i8 + @ cdecl _vcomp_for_static_end() +-@ stub _vcomp_for_static_init ++@ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) + @ stub _vcomp_for_static_init_i8 + @ cdecl _vcomp_for_static_simple_init(long long long long ptr ptr) + @ stub _vcomp_for_static_simple_init_i8 +diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec +index 89e0972..f008e2e 100644 +--- a/dlls/vcomp100/vcomp100.spec ++++ b/dlls/vcomp100/vcomp100.spec +@@ -60,7 +60,7 @@ + @ stub _vcomp_for_dynamic_next + @ stub _vcomp_for_dynamic_next_i8 + @ cdecl _vcomp_for_static_end() vcomp._vcomp_for_static_end +-@ stub _vcomp_for_static_init ++@ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) vcomp._vcomp_for_static_init + @ stub _vcomp_for_static_init_i8 + @ cdecl _vcomp_for_static_simple_init(long long long long ptr ptr) vcomp._vcomp_for_static_simple_init + @ stub _vcomp_for_static_simple_init_i8 +diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec +index 89e0972..f008e2e 100644 +--- a/dlls/vcomp90/vcomp90.spec ++++ b/dlls/vcomp90/vcomp90.spec +@@ -60,7 +60,7 @@ + @ stub _vcomp_for_dynamic_next + @ stub _vcomp_for_dynamic_next_i8 + @ cdecl _vcomp_for_static_end() vcomp._vcomp_for_static_end +-@ stub _vcomp_for_static_init ++@ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) vcomp._vcomp_for_static_init + @ stub _vcomp_for_static_init_i8 + @ cdecl _vcomp_for_static_simple_init(long long long long ptr ptr) vcomp._vcomp_for_static_simple_init + @ stub _vcomp_for_static_simple_init_i8 +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0007-vcomp-tests-Add-tests-for-_vcomp_for_static_init.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0007-vcomp-tests-Add-tests-for-_vcomp_for_static_init.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0007-vcomp-tests-Add-tests-for-_vcomp_for_static_init.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0007-vcomp-tests-Add-tests-for-_vcomp_for_static_init.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,243 @@ +From 9cea1ba140eb5d8ecd70eab4a68e309cd80fd454 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sat, 11 Jul 2015 06:08:08 +0200 +Subject: vcomp/tests: Add tests for _vcomp_for_static_init. + +--- + dlls/vcomp/tests/vcomp.c | 199 +++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 199 insertions(+) + +diff --git a/dlls/vcomp/tests/vcomp.c b/dlls/vcomp/tests/vcomp.c +index 1971b6d..96806fd 100644 +--- a/dlls/vcomp/tests/vcomp.c ++++ b/dlls/vcomp/tests/vcomp.c +@@ -25,6 +25,8 @@ static const int is_win64 = (sizeof(void *) > sizeof(int)); + static HMODULE hvcomp = 0; + static void (CDECL *p_vcomp_barrier)(void); + static void (CDECL *p_vcomp_for_static_end)(void); ++static void (CDECL *p_vcomp_for_static_init)(int first, int last, int step, int chunksize, unsigned int *loops, ++ int *begin, int *end, int *next, int *lastchunk); + static void (CDECL *p_vcomp_for_static_simple_init)(unsigned int first, unsigned int last, int step, + BOOL forward, unsigned int *begin, unsigned int *end); + static void (WINAPIV *p_vcomp_fork)(BOOL ifval, int nargs, void *wrapper, ...); +@@ -52,6 +54,7 @@ static BOOL init_vcomp(void) + + VCOMP_GET_PROC(_vcomp_barrier); + VCOMP_GET_PROC(_vcomp_for_static_end); ++ VCOMP_GET_PROC(_vcomp_for_static_init); + VCOMP_GET_PROC(_vcomp_for_static_simple_init); + VCOMP_GET_PROC(_vcomp_fork); + VCOMP_GET_PROC(omp_get_max_threads); +@@ -338,6 +341,201 @@ static void test_vcomp_for_static_simple_init(void) + } + } + ++static void CDECL _test_vcomp_for_static_init(void) ++{ ++ static const struct ++ { ++ int first; ++ int last; ++ int step; ++ int chunksize; ++ } ++ tests[] = ++ { ++ /* loop forward, step 1 */ ++ { 0, 0, 1, 1 }, ++ { 0, 1, 1, 1 }, ++ { 0, 2, 1, 1 }, ++ { 0, 3, 1, 1 }, ++ { 0, 0x10000000, 1, 1 }, ++ { 0, 0x20000000, 1, 1 }, ++ { 0, 0x40000000, 1, 1 }, ++ { 0, (int)0x80000000, 1, 1 }, ++ ++ /* loop forward, varying step */ ++ {0, 100, 1, 1}, ++ {0, 100, 5, 1}, ++ {0, 100, 10, 1}, ++ {0, 100, 25, 1}, ++ {0, 100, 50, 1}, ++ {0, 100, 75, 1}, ++ {0, 100, 100, 1}, ++ {0, 100, 150, 1}, ++ ++ /* empty loop forward, varying step */ ++ { 50, 50, 3, 1 }, ++ { 50, 50, 2, 1 }, ++ { 50, 50, 1, 1 }, ++ /*{ 50, 50, 0, 1 }, - generates a division by zero exception */ ++ { 50, 50, -1, 1 }, ++ { 50, 50, -2, 1 }, ++ { 50, 50, -3, 1 }, ++ ++ /* loop backwards, step 1 */ ++ { 0, 0, 1, 1 }, ++ { 1, 0, 1, 1 }, ++ { 2, 0, 1, 1 }, ++ { 3, 0, 1, 1 }, ++ { 0x10000000, 0, 1, 1 }, ++ { 0x20000000, 0, 1, 1 }, ++ { 0x40000000, 0, 1, 1 }, ++ { (int)0x80000000, 0, 1, 1 }, ++ ++ /* loop backwards, varying step */ ++ {100, 0, 1, 1}, ++ {100, 0, 5, 1}, ++ {100, 0, 10, 1}, ++ {100, 0, 25, 1}, ++ {100, 0, 50, 1}, ++ {100, 0, 75, 1}, ++ {100, 0, 100, 1}, ++ {100, 0, 150, 1}, ++ ++ /* loop forward, varying chunksize */ ++ {0, 100, 1, 1}, ++ {0, 100, 1, 5}, ++ {0, 100, 1, 10}, ++ {0, 100, 1, 25}, ++ {0, 100, 1, 50}, ++ {0, 100, 1, 75}, ++ {0, 100, 1, 100}, ++ {0, 100, 1, 150}, ++ ++ {0, 100, 7, 1}, ++ {0, 100, 7, 5}, ++ {0, 100, 7, 10}, ++ {0, 100, 7, 25}, ++ {0, 100, 7, 50}, ++ {0, 100, 7, 75}, ++ {0, 100, 7, 100}, ++ {0, 100, 7, 150}, ++ ++ /* loop backwards, varying chunksize */ ++ {100, 0, 1, 1}, ++ {100, 0, 1, 5}, ++ {100, 0, 1, 10}, ++ {100, 0, 1, 25}, ++ {100, 0, 1, 50}, ++ {100, 0, 1, 75}, ++ {100, 0, 1, 100}, ++ {100, 0, 1, 150}, ++ ++ {100, 0, 7, 1}, ++ {100, 0, 7, 5}, ++ {100, 0, 7, 10}, ++ {100, 0, 7, 25}, ++ {100, 0, 7, 50}, ++ {100, 0, 7, 75}, ++ {100, 0, 7, 100}, ++ {100, 0, 7, 150}, ++ ++ }; ++ int begin, end, expected_begin, expected_end; ++ unsigned int loops, expected_loops; ++ int lastchunk, expected_lastchunk; ++ int chunksize, expected_chunksize; ++ int thread_num = pomp_get_thread_num(); ++ int num_threads = pomp_get_num_threads(); ++ int i; ++ ++ for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) ++ { ++ unsigned int iterations, num_chunks, per_thread, remaining; ++ int first = tests[i].first; ++ int last = tests[i].last; ++ int step = tests[i].step; ++ chunksize = tests[i].chunksize; ++ ++ if (chunksize < 1) ++ chunksize = 1; ++ ++ if (num_threads == 1 && chunksize > 1) ++ { ++ expected_loops = 1; ++ expected_begin = first; ++ expected_end = last; ++ expected_chunksize = chunksize; ++ expected_lastchunk = first; ++ } ++ else if (last > first) ++ { ++ iterations = 1 + (last - first) / step; ++ num_chunks = (iterations + chunksize - 1) / chunksize; ++ per_thread = num_chunks / num_threads; ++ remaining = num_chunks - per_thread * num_threads; ++ ++ expected_loops = per_thread + (thread_num < remaining); ++ expected_begin = first + thread_num * chunksize * step; ++ expected_end = expected_begin + (chunksize - 1) * step; ++ expected_chunksize = chunksize * num_threads * step; ++ expected_lastchunk = first + (num_chunks - 1) * chunksize * step; ++ ++ } ++ else if (last < first) ++ { ++ iterations = 1 + (first - last) / step; ++ num_chunks = (iterations + chunksize - 1) / chunksize; ++ per_thread = num_chunks / num_threads; ++ remaining = num_chunks - per_thread * num_threads; ++ ++ expected_loops = per_thread + (thread_num < remaining); ++ expected_begin = first - thread_num * chunksize * step; ++ expected_end = expected_begin - (chunksize - 1) * step; ++ expected_chunksize = - chunksize * num_threads * step; ++ expected_lastchunk = first - (num_chunks - 1) * chunksize * step; ++ } ++ else ++ { ++ expected_loops = (thread_num == 0); ++ expected_begin = first; ++ expected_end = last; ++ expected_chunksize = 0; ++ expected_lastchunk = first; ++ } ++ ++ loops = begin = end = chunksize = lastchunk = 0xdeadbeef; ++ p_vcomp_for_static_init(tests[i].first, tests[i].last, tests[i].step, tests[i].chunksize, ++ &loops, &begin, &end, &chunksize, &lastchunk); ++ ++ ok(loops == expected_loops, "%d:%d/%d: expected loops = %u, got %u\n", ++ i, thread_num, num_threads, expected_loops, loops); ++ ok(begin == expected_begin || broken(begin == 0xdeadbeef && first == last && thread_num > 0), ++ "%d:%d/%d: expected begin = %u, got %u\n", i, thread_num, num_threads, expected_begin, end); ++ ok(end == expected_end || broken(end == 0xdeadbeef && first == last && thread_num > 0), ++ "%d:%d/%d: expected end = %u, got %u\n", i, thread_num, num_threads, expected_end, end); ++ ok(chunksize == expected_chunksize || broken(chunksize == (int)0xdeadbeef && first == last) || ++ broken(chunksize != expected_chunksize && num_threads == 1), ++ "%d:%d/%d: expected chunksize = %u, got %u\n", i, thread_num, num_threads, expected_chunksize, chunksize); ++ ok(lastchunk == expected_lastchunk || broken(lastchunk == 0xdeadbeef && first == last && thread_num > 0), ++ "%d:%d/%d: expected lastchunk = %u, got %u\n", i, thread_num, num_threads, expected_lastchunk, lastchunk); ++ ++ p_vcomp_for_static_end(); ++ p_vcomp_barrier(); ++ } ++} ++ ++static void test_vcomp_for_static_init(void) ++{ ++ int i; ++ ++ for (i = 1; i <= 4; i++) ++ { ++ trace("Running tests with %d threads\n", i); ++ pomp_set_num_threads(i); ++ p_vcomp_fork(TRUE, 0, _test_vcomp_for_static_init); ++ } ++} ++ + START_TEST(vcomp) + { + if (!init_vcomp()) +@@ -345,6 +543,7 @@ START_TEST(vcomp) + + test_vcomp_fork(); + test_vcomp_for_static_simple_init(); ++ test_vcomp_for_static_init(); + + FreeLibrary(hvcomp); + } +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0008-vcomp-Implement-_vcomp_barrier.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0008-vcomp-Implement-_vcomp_barrier.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0008-vcomp-Implement-_vcomp_barrier.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0008-vcomp-Implement-_vcomp_barrier.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,66 @@ +From 8732b345bcab27edc68eda1ab35095d72a817899 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sat, 11 Jul 2015 19:38:24 +0200 +Subject: vcomp: Implement _vcomp_barrier. + +--- + dlls/vcomp/main.c | 29 ++++++++++++++++++++++++++++- + 1 file changed, 28 insertions(+), 1 deletion(-) + +diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c +index 2eeea3b..4f3471a 100644 +--- a/dlls/vcomp/main.c ++++ b/dlls/vcomp/main.c +@@ -68,6 +68,10 @@ struct vcomp_team_info + unsigned int nargs; + void *wrapper; + __ms_va_list valist; ++ ++ /* barrier */ ++ DWORD barrier; ++ DWORD barrier_count; + }; + + static inline struct vcomp_thread_info *vcomp_get_thread_info(void) +@@ -154,7 +158,28 @@ void CDECL omp_set_num_threads(int num_threads) + + void CDECL _vcomp_barrier(void) + { +- TRACE("stub\n"); ++ struct vcomp_team_info *team_info; ++ ++ TRACE("()\n"); ++ ++ team_info = vcomp_get_team_info(); ++ EnterCriticalSection(&vcomp_section); ++ ++ team_info->barrier_count++; ++ if (team_info->barrier_count >= team_info->num_threads) ++ { ++ team_info->barrier++; ++ team_info->barrier_count = 0; ++ WakeAllConditionVariable(&team_info->cond); ++ } ++ else ++ { ++ DWORD barrier = team_info->barrier; ++ while (team_info->barrier == barrier) ++ SleepConditionVariableCS(&team_info->cond, &vcomp_section, INFINITE); ++ } ++ ++ LeaveCriticalSection(&vcomp_section); + } + + void CDECL _vcomp_set_num_threads(int num_threads) +@@ -385,6 +410,8 @@ void WINAPIV _vcomp_fork(BOOL ifval, int nargs, void *wrapper, ...) + team_info.nargs = nargs; + team_info.wrapper = wrapper; + __ms_va_start(team_info.valist, wrapper); ++ team_info.barrier = 0; ++ team_info.barrier_count = 0; + + /* Initialize members of thread_info. */ + list_init(&thread_info.entry); +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0009-vcomp-Implement-omp_in_parallel.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0009-vcomp-Implement-omp_in_parallel.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0009-vcomp-Implement-omp_in_parallel.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0009-vcomp-Implement-omp_in_parallel.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,71 @@ +From aad24232add010020898eaa1a0934cb353c123f2 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sat, 11 Jul 2015 19:41:29 +0200 +Subject: vcomp: Implement omp_in_parallel. + +--- + dlls/vcomp/main.c | 6 ++++++ + dlls/vcomp/vcomp.spec | 2 +- + dlls/vcomp100/vcomp100.spec | 2 +- + dlls/vcomp90/vcomp90.spec | 2 +- + 4 files changed, 9 insertions(+), 3 deletions(-) + +diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c +index 4f3471a..fccad93 100644 +--- a/dlls/vcomp/main.c ++++ b/dlls/vcomp/main.c +@@ -351,6 +351,12 @@ void CDECL _vcomp_for_static_end(void) + TRACE("()\n"); + } + ++int CDECL omp_in_parallel(void) ++{ ++ TRACE("()\n"); ++ return vcomp_get_team_info() != NULL; ++} ++ + void CDECL _vcomp_fork_call_wrapper(void *wrapper, int nargs, __ms_va_list args); + + static DWORD WINAPI _vcomp_fork_worker(void *param) +diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec +index 8bc66e8..156233f 100644 +--- a/dlls/vcomp/vcomp.spec ++++ b/dlls/vcomp/vcomp.spec +@@ -98,7 +98,7 @@ + @ cdecl omp_get_thread_num() + @ stub omp_get_wtick + @ cdecl omp_get_wtime() +-@ stub omp_in_parallel ++@ cdecl omp_in_parallel() + @ stub omp_init_lock + @ stub omp_init_nest_lock + @ cdecl omp_set_dynamic(long) +diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec +index f008e2e..dd276d0 100644 +--- a/dlls/vcomp100/vcomp100.spec ++++ b/dlls/vcomp100/vcomp100.spec +@@ -98,7 +98,7 @@ + @ cdecl omp_get_thread_num() vcomp.omp_get_thread_num + @ stub omp_get_wtick + @ cdecl omp_get_wtime() vcomp.omp_get_wtime +-@ stub omp_in_parallel ++@ cdecl omp_in_parallel() vcomp.omp_in_parallel + @ stub omp_init_lock + @ stub omp_init_nest_lock + @ cdecl omp_set_dynamic(long) vcomp.omp_set_dynamic +diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec +index f008e2e..dd276d0 100644 +--- a/dlls/vcomp90/vcomp90.spec ++++ b/dlls/vcomp90/vcomp90.spec +@@ -98,7 +98,7 @@ + @ cdecl omp_get_thread_num() vcomp.omp_get_thread_num + @ stub omp_get_wtick + @ cdecl omp_get_wtime() vcomp.omp_get_wtime +-@ stub omp_in_parallel ++@ cdecl omp_in_parallel() vcomp.omp_in_parallel + @ stub omp_init_lock + @ stub omp_init_nest_lock + @ cdecl omp_set_dynamic(long) vcomp.omp_set_dynamic +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0010-vcomp-Implement-_vcomp_sections_init-and-_vcomp_sect.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0010-vcomp-Implement-_vcomp_sections_init-and-_vcomp_sect.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0010-vcomp-Implement-_vcomp_sections_init-and-_vcomp_sect.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0010-vcomp-Implement-_vcomp_sections_init-and-_vcomp_sect.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,244 @@ +From 77d6daebca21cfb4209a8281abac2b9db0d7a1b4 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sat, 11 Jul 2015 21:29:41 +0200 +Subject: vcomp: Implement _vcomp_sections_init and _vcomp_sections_next and + add tests. + +--- + dlls/vcomp/main.c | 49 +++++++++++++++++++++++++++++++++++++++++++++ + dlls/vcomp/tests/vcomp.c | 49 +++++++++++++++++++++++++++++++++++++++++++++ + dlls/vcomp/vcomp.spec | 4 ++-- + dlls/vcomp100/vcomp100.spec | 4 ++-- + dlls/vcomp90/vcomp90.spec | 4 ++-- + 5 files changed, 104 insertions(+), 6 deletions(-) + +diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c +index fccad93..db47ff6 100644 +--- a/dlls/vcomp/main.c ++++ b/dlls/vcomp/main.c +@@ -56,6 +56,9 @@ struct vcomp_thread_info + /* current task */ + struct vcomp_team_info *team; + DWORD thread_num; ++ ++ /* section */ ++ DWORD section; + }; + + struct vcomp_team_info +@@ -72,6 +75,11 @@ struct vcomp_team_info + /* barrier */ + DWORD barrier; + DWORD barrier_count; ++ ++ /* section */ ++ DWORD section; ++ DWORD num_sections; ++ DWORD section_index; + }; + + static inline struct vcomp_thread_info *vcomp_get_thread_info(void) +@@ -357,6 +365,43 @@ int CDECL omp_in_parallel(void) + return vcomp_get_team_info() != NULL; + } + ++void CDECL _vcomp_sections_init(int n) ++{ ++ struct vcomp_thread_info *thread_info = vcomp_get_thread_info(); ++ struct vcomp_team_info *team_info = thread_info->team; ++ ++ TRACE("(%d)\n", n); ++ ++ EnterCriticalSection(&vcomp_section); ++ thread_info->section++; ++ if ((int)(thread_info->section - team_info->section) > 0) ++ { ++ /* first thread in a new section */ ++ team_info->section = thread_info->section; ++ team_info->num_sections = n; ++ team_info->section_index = 0; ++ } ++ LeaveCriticalSection(&vcomp_section); ++} ++ ++int CDECL _vcomp_sections_next(void) ++{ ++ struct vcomp_thread_info *thread_info = vcomp_get_thread_info(); ++ struct vcomp_team_info *team_info = thread_info->team; ++ int i = -1; ++ ++ TRACE("()\n"); ++ ++ EnterCriticalSection(&vcomp_section); ++ if (thread_info->section == team_info->section && ++ team_info->section_index < team_info->num_sections) ++ { ++ i = team_info->section_index++; ++ } ++ LeaveCriticalSection(&vcomp_section); ++ return i; ++} ++ + void CDECL _vcomp_fork_call_wrapper(void *wrapper, int nargs, __ms_va_list args); + + static DWORD WINAPI _vcomp_fork_worker(void *param) +@@ -418,12 +463,14 @@ void WINAPIV _vcomp_fork(BOOL ifval, int nargs, void *wrapper, ...) + __ms_va_start(team_info.valist, wrapper); + team_info.barrier = 0; + team_info.barrier_count = 0; ++ team_info.section = -1; + + /* Initialize members of thread_info. */ + list_init(&thread_info.entry); + InitializeConditionVariable(&thread_info.cond); + thread_info.team = &team_info; + thread_info.thread_num = 0; ++ thread_info.section = 0; + + if (parallel) + { +@@ -439,6 +486,7 @@ void WINAPIV _vcomp_fork(BOOL ifval, int nargs, void *wrapper, ...) + list_add_tail(&thread_info.entry, &info->entry); + info->team = &team_info; + info->thread_num = team_info.num_threads++; ++ info->section = 0; + WakeAllConditionVariable(&info->cond); + } + +@@ -455,6 +503,7 @@ void WINAPIV _vcomp_fork(BOOL ifval, int nargs, void *wrapper, ...) + InitializeConditionVariable(&info->cond); + info->team = &team_info; + info->thread_num = team_info.num_threads; ++ info->section = 0; + + thread = CreateThread(NULL, 0, _vcomp_fork_worker, info, 0, NULL); + if (!thread) +diff --git a/dlls/vcomp/tests/vcomp.c b/dlls/vcomp/tests/vcomp.c +index 96806fd..902a836 100644 +--- a/dlls/vcomp/tests/vcomp.c ++++ b/dlls/vcomp/tests/vcomp.c +@@ -30,6 +30,8 @@ static void (CDECL *p_vcomp_for_static_init)(int first, int last, int step, i + static void (CDECL *p_vcomp_for_static_simple_init)(unsigned int first, unsigned int last, int step, + BOOL forward, unsigned int *begin, unsigned int *end); + static void (WINAPIV *p_vcomp_fork)(BOOL ifval, int nargs, void *wrapper, ...); ++static void (CDECL *p_vcomp_sections_init)(int n); ++static int (CDECL *p_vcomp_sections_next)(void); + static int (CDECL *pomp_get_max_threads)(void); + static int (CDECL *pomp_get_num_threads)(void); + static int (CDECL *pomp_get_thread_num)(void); +@@ -57,6 +59,8 @@ static BOOL init_vcomp(void) + VCOMP_GET_PROC(_vcomp_for_static_init); + VCOMP_GET_PROC(_vcomp_for_static_simple_init); + VCOMP_GET_PROC(_vcomp_fork); ++ VCOMP_GET_PROC(_vcomp_sections_init); ++ VCOMP_GET_PROC(_vcomp_sections_next); + VCOMP_GET_PROC(omp_get_max_threads); + VCOMP_GET_PROC(omp_get_num_threads); + VCOMP_GET_PROC(omp_get_thread_num); +@@ -536,6 +540,50 @@ static void test_vcomp_for_static_init(void) + } + } + ++static void CDECL _test_vcomp_sections_init(LONG *a, LONG *b, LONG *c) ++{ ++ int i; ++ ++ p_vcomp_sections_init(20); ++ while ((i = p_vcomp_sections_next()) != -1) ++ { ++ InterlockedIncrement(a); ++ Sleep(50); ++ } ++ ++ p_vcomp_sections_init(30); ++ while ((i = p_vcomp_sections_next()) != -1) ++ { ++ InterlockedIncrement(b); ++ Sleep(50); ++ } ++ ++ p_vcomp_sections_init(40); ++ while ((i = p_vcomp_sections_next()) != -1) ++ { ++ InterlockedIncrement(c); ++ Sleep(50); ++ } ++} ++ ++static void test_vcomp_sections_init(void) ++{ ++ LONG a, b, c; ++ int i; ++ ++ for (i = 1; i <= 4; i++) ++ { ++ trace("Running tests with %d threads\n", i); ++ pomp_set_num_threads(i); ++ ++ a = b = c = 0; ++ p_vcomp_fork(TRUE, 3, _test_vcomp_sections_init, &a, &b, &c); ++ ok(a == 20, "expected a = 20, got %d\n", a); ++ ok(b == 30, "expected b = 30, got %d\n", b); ++ ok(c == 40, "expected c = 40, got %d\n", c); ++ } ++} ++ + START_TEST(vcomp) + { + if (!init_vcomp()) +@@ -544,6 +592,7 @@ START_TEST(vcomp) + test_vcomp_fork(); + test_vcomp_for_static_simple_init(); + test_vcomp_for_static_init(); ++ test_vcomp_sections_init(); + + FreeLibrary(hvcomp); + } +diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec +index 156233f..7083ce4 100644 +--- a/dlls/vcomp/vcomp.spec ++++ b/dlls/vcomp/vcomp.spec +@@ -83,8 +83,8 @@ + @ stub _vcomp_reduction_u2 + @ stub _vcomp_reduction_u4 + @ stub _vcomp_reduction_u8 +-@ stub _vcomp_sections_init +-@ stub _vcomp_sections_next ++@ cdecl _vcomp_sections_init(long) ++@ cdecl _vcomp_sections_next() + @ cdecl _vcomp_set_num_threads(long) + @ cdecl _vcomp_single_begin(long) + @ cdecl _vcomp_single_end() +diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec +index dd276d0..56c7ae3 100644 +--- a/dlls/vcomp100/vcomp100.spec ++++ b/dlls/vcomp100/vcomp100.spec +@@ -83,8 +83,8 @@ + @ stub _vcomp_reduction_u2 + @ stub _vcomp_reduction_u4 + @ stub _vcomp_reduction_u8 +-@ stub _vcomp_sections_init +-@ stub _vcomp_sections_next ++@ cdecl _vcomp_sections_init(long) vcomp._vcomp_sections_init ++@ cdecl _vcomp_sections_next() vcomp._vcomp_sections_next + @ cdecl _vcomp_set_num_threads(long) vcomp._vcomp_set_num_threads + @ cdecl _vcomp_single_begin(long) vcomp._vcomp_single_begin + @ cdecl _vcomp_single_end() vcomp._vcomp_single_end +diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec +index dd276d0..56c7ae3 100644 +--- a/dlls/vcomp90/vcomp90.spec ++++ b/dlls/vcomp90/vcomp90.spec +@@ -83,8 +83,8 @@ + @ stub _vcomp_reduction_u2 + @ stub _vcomp_reduction_u4 + @ stub _vcomp_reduction_u8 +-@ stub _vcomp_sections_init +-@ stub _vcomp_sections_next ++@ cdecl _vcomp_sections_init(long) vcomp._vcomp_sections_init ++@ cdecl _vcomp_sections_next() vcomp._vcomp_sections_next + @ cdecl _vcomp_set_num_threads(long) vcomp._vcomp_set_num_threads + @ cdecl _vcomp_single_begin(long) vcomp._vcomp_single_begin + @ cdecl _vcomp_single_end() vcomp._vcomp_single_end +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0011-vcomp-Implement-_vcomp_for_dynamic_init-and-_vcomp_f.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0011-vcomp-Implement-_vcomp_for_dynamic_init-and-_vcomp_f.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/0011-vcomp-Implement-_vcomp_for_dynamic_init-and-_vcomp_f.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/0011-vcomp-Implement-_vcomp_for_dynamic_init-and-_vcomp_f.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,296 @@ +From f29610acbf9ce393b772520f6041acce9d1aefd8 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sat, 11 Jul 2015 23:28:31 +0200 +Subject: vcomp: Implement _vcomp_for_dynamic_init and _vcomp_for_dynamic_next + and add tests. + +--- + dlls/vcomp/main.c | 93 +++++++++++++++++++++++++++++++++++++++++++++ + dlls/vcomp/tests/vcomp.c | 53 ++++++++++++++++++++++++++ + dlls/vcomp/vcomp.spec | 4 +- + dlls/vcomp100/vcomp100.spec | 4 +- + dlls/vcomp90/vcomp90.spec | 4 +- + 5 files changed, 152 insertions(+), 6 deletions(-) + +diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c +index db47ff6..3a1e9ee 100644 +--- a/dlls/vcomp/main.c ++++ b/dlls/vcomp/main.c +@@ -59,6 +59,9 @@ struct vcomp_thread_info + + /* section */ + DWORD section; ++ ++ /* dynamic */ ++ DWORD dynamic; + }; + + struct vcomp_team_info +@@ -80,6 +83,15 @@ struct vcomp_team_info + DWORD section; + DWORD num_sections; + DWORD section_index; ++ ++ /* dynamic */ ++ DWORD dynamic; ++ DWORD dynamic_forward; ++ DWORD dynamic_first; ++ DWORD dynamic_iterations; ++ int dynamic_step; ++ DWORD dynamic_chunksize; ++ DWORD dynamic_min_chunksize; + }; + + static inline struct vcomp_thread_info *vcomp_get_thread_info(void) +@@ -402,6 +414,83 @@ int CDECL _vcomp_sections_next(void) + return i; + } + ++void CDECL _vcomp_for_dynamic_init(int flags, int first, int last, int step, int chunksize) ++{ ++ struct vcomp_thread_info *thread_info = vcomp_get_thread_info(); ++ struct vcomp_team_info *team_info = thread_info->team; ++ unsigned int iterations; ++ BOOL forward = (flags & 0x40) != 0; ++ ++ TRACE("(%d, %d, %d, %d, %d)\n", flags, first, last, step, chunksize); ++ ++ EnterCriticalSection(&vcomp_section); ++ thread_info->dynamic++; ++ if ((int)(thread_info->dynamic - team_info->dynamic) > 0) ++ { ++ /* first thread in a new for_dynamic */ ++ ++ if (forward) ++ { ++ DWORD64 last64 = last; ++ if (last64 < first) ++ last64 += 0x100000000; ++ iterations = 1 + (last64 - first) / step; ++ } ++ else ++ { ++ DWORD first64 = first; ++ if (first64 < last) ++ first64 += 0x100000000; ++ iterations = 1 + (first64 - last) / step; ++ } ++ ++ team_info->dynamic = thread_info->dynamic; ++ team_info->dynamic_forward = forward; ++ team_info->dynamic_first = first; ++ team_info->dynamic_iterations = iterations; ++ team_info->dynamic_step = step; ++ team_info->dynamic_chunksize = max(1, iterations / team_info->num_threads); ++ team_info->dynamic_min_chunksize = max(1, chunksize); ++ } ++ LeaveCriticalSection(&vcomp_section); ++} ++ ++int CDECL _vcomp_for_dynamic_next(int *begin, int *end) ++{ ++ struct vcomp_thread_info *thread_info = vcomp_get_thread_info(); ++ struct vcomp_team_info *team_info = thread_info->team; ++ unsigned int iterations = 0; ++ ++ TRACE("(%p, %p)\n", begin, end); ++ ++ EnterCriticalSection(&vcomp_section); ++ if (thread_info->dynamic == team_info->dynamic && ++ team_info->dynamic_iterations != 0) ++ { ++ iterations = min(team_info->dynamic_iterations, team_info->dynamic_chunksize); ++ team_info->dynamic_iterations -= iterations; ++ ++ if (team_info->dynamic_forward) ++ { ++ *begin = team_info->dynamic_first; ++ *end = team_info->dynamic_first + (iterations - 1) * team_info->dynamic_step; ++ team_info->dynamic_first += iterations * team_info->dynamic_step; ++ } ++ else ++ { ++ *begin = team_info->dynamic_first; ++ *end = team_info->dynamic_first - (iterations - 1) * team_info->dynamic_step; ++ team_info->dynamic_first -= iterations * team_info->dynamic_step; ++ } ++ ++ team_info->dynamic_chunksize = ++ max((team_info->dynamic_chunksize * 3 + 2)/4, team_info->dynamic_min_chunksize); ++ } ++ LeaveCriticalSection(&vcomp_section); ++ ++ return (iterations != 0); ++} ++ + void CDECL _vcomp_fork_call_wrapper(void *wrapper, int nargs, __ms_va_list args); + + static DWORD WINAPI _vcomp_fork_worker(void *param) +@@ -464,6 +553,7 @@ void WINAPIV _vcomp_fork(BOOL ifval, int nargs, void *wrapper, ...) + team_info.barrier = 0; + team_info.barrier_count = 0; + team_info.section = -1; ++ team_info.dynamic = -1; + + /* Initialize members of thread_info. */ + list_init(&thread_info.entry); +@@ -471,6 +561,7 @@ void WINAPIV _vcomp_fork(BOOL ifval, int nargs, void *wrapper, ...) + thread_info.team = &team_info; + thread_info.thread_num = 0; + thread_info.section = 0; ++ thread_info.dynamic = 0; + + if (parallel) + { +@@ -487,6 +578,7 @@ void WINAPIV _vcomp_fork(BOOL ifval, int nargs, void *wrapper, ...) + info->team = &team_info; + info->thread_num = team_info.num_threads++; + info->section = 0; ++ info->dynamic = 0; + WakeAllConditionVariable(&info->cond); + } + +@@ -504,6 +596,7 @@ void WINAPIV _vcomp_fork(BOOL ifval, int nargs, void *wrapper, ...) + info->team = &team_info; + info->thread_num = team_info.num_threads; + info->section = 0; ++ info->dynamic = 0; + + thread = CreateThread(NULL, 0, _vcomp_fork_worker, info, 0, NULL); + if (!thread) +diff --git a/dlls/vcomp/tests/vcomp.c b/dlls/vcomp/tests/vcomp.c +index 902a836..4273680 100644 +--- a/dlls/vcomp/tests/vcomp.c ++++ b/dlls/vcomp/tests/vcomp.c +@@ -24,6 +24,8 @@ static const int is_win64 = (sizeof(void *) > sizeof(int)); + + static HMODULE hvcomp = 0; + static void (CDECL *p_vcomp_barrier)(void); ++static void (CDECL *p_vcomp_for_dynamic_init)(int flags, int first, int last, int step, int chunksize); ++static int (CDECL *p_vcomp_for_dynamic_next)(int *begin, int *end); + static void (CDECL *p_vcomp_for_static_end)(void); + static void (CDECL *p_vcomp_for_static_init)(int first, int last, int step, int chunksize, unsigned int *loops, + int *begin, int *end, int *next, int *lastchunk); +@@ -55,6 +57,8 @@ static BOOL init_vcomp(void) + } + + VCOMP_GET_PROC(_vcomp_barrier); ++ VCOMP_GET_PROC(_vcomp_for_dynamic_init); ++ VCOMP_GET_PROC(_vcomp_for_dynamic_next); + VCOMP_GET_PROC(_vcomp_for_static_end); + VCOMP_GET_PROC(_vcomp_for_static_init); + VCOMP_GET_PROC(_vcomp_for_static_simple_init); +@@ -584,6 +588,54 @@ static void test_vcomp_sections_init(void) + } + } + ++static void CDECL _test_vcomp_for_dynamic_init(LONG *a, LONG *b, LONG *c) ++{ ++ int begin, end; ++ ++ p_vcomp_for_dynamic_init(0x40, 1, 100000, 1, 30); ++ while (p_vcomp_for_dynamic_next(&begin, &end)) ++ { ++ InterlockedExchangeAdd(a, end - begin + 1); ++ Sleep(50); ++ } ++ ++ p_vcomp_for_dynamic_init(0, 1337, 1, 1, 50); ++ while (p_vcomp_for_dynamic_next(&begin, &end)) ++ { ++ InterlockedExchangeAdd(b, begin - end + 1); ++ Sleep(50); ++ } ++ ++ p_vcomp_for_dynamic_init(0x40, 1, 100000, 7, 30); ++ while (p_vcomp_for_dynamic_next(&begin, &end)) ++ { ++ while (begin <= end) ++ { ++ InterlockedIncrement(c); ++ begin += 7; ++ } ++ Sleep(50); ++ } ++} ++ ++static void test_vcomp_for_dynamic_init(void) ++{ ++ LONG a, b, c; ++ int i; ++ ++ for (i = 1; i <= 4; i++) ++ { ++ trace("Running tests with %d threads\n", i); ++ pomp_set_num_threads(i); ++ ++ a = b = c = 0; ++ p_vcomp_fork(TRUE, 3, _test_vcomp_for_dynamic_init, &a, &b, &c); ++ ok(a == 100000, "expected a = 100000, got %d\n", a); ++ ok(b == 1337, "expected b = 1337, got %d\n", b); ++ ok(c == 14286, "expected c = 14286, got %d\n", c); ++ } ++} ++ + START_TEST(vcomp) + { + if (!init_vcomp()) +@@ -593,6 +645,7 @@ START_TEST(vcomp) + test_vcomp_for_static_simple_init(); + test_vcomp_for_static_init(); + test_vcomp_sections_init(); ++ test_vcomp_for_dynamic_init(); + + FreeLibrary(hvcomp); + } +diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec +index 7083ce4..1b02a65 100644 +--- a/dlls/vcomp/vcomp.spec ++++ b/dlls/vcomp/vcomp.spec +@@ -55,9 +55,9 @@ + @ stub _vcomp_copyprivate_receive + @ stub _vcomp_enter_critsect + @ stub _vcomp_flush +-@ stub _vcomp_for_dynamic_init ++@ cdecl _vcomp_for_dynamic_init(long long long long long) + @ stub _vcomp_for_dynamic_init_i8 +-@ stub _vcomp_for_dynamic_next ++@ cdecl _vcomp_for_dynamic_next(ptr ptr) + @ stub _vcomp_for_dynamic_next_i8 + @ cdecl _vcomp_for_static_end() + @ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) +diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec +index 56c7ae3..ab93ec2 100644 +--- a/dlls/vcomp100/vcomp100.spec ++++ b/dlls/vcomp100/vcomp100.spec +@@ -55,9 +55,9 @@ + @ stub _vcomp_copyprivate_receive + @ stub _vcomp_enter_critsect + @ stub _vcomp_flush +-@ stub _vcomp_for_dynamic_init ++@ cdecl _vcomp_for_dynamic_init(long long long long long) vcomp._vcomp_for_dynamic_init + @ stub _vcomp_for_dynamic_init_i8 +-@ stub _vcomp_for_dynamic_next ++@ cdecl _vcomp_for_dynamic_next(ptr ptr) vcomp._vcomp_for_dynamic_next + @ stub _vcomp_for_dynamic_next_i8 + @ cdecl _vcomp_for_static_end() vcomp._vcomp_for_static_end + @ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) vcomp._vcomp_for_static_init +diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec +index 56c7ae3..ab93ec2 100644 +--- a/dlls/vcomp90/vcomp90.spec ++++ b/dlls/vcomp90/vcomp90.spec +@@ -55,9 +55,9 @@ + @ stub _vcomp_copyprivate_receive + @ stub _vcomp_enter_critsect + @ stub _vcomp_flush +-@ stub _vcomp_for_dynamic_init ++@ cdecl _vcomp_for_dynamic_init(long long long long long) vcomp._vcomp_for_dynamic_init + @ stub _vcomp_for_dynamic_init_i8 +-@ stub _vcomp_for_dynamic_next ++@ cdecl _vcomp_for_dynamic_next(ptr ptr) vcomp._vcomp_for_dynamic_next + @ stub _vcomp_for_dynamic_next_i8 + @ cdecl _vcomp_for_static_end() vcomp._vcomp_for_static_end + @ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) vcomp._vcomp_for_static_init +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/definition wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/definition --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Functions/definition 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Functions/definition 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1 @@ +Fixes: [31640] Implement various vcomp functions diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Stub_Functions/0001-vcomp-single-threaded-implementation-of-_vcomp_fork.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Stub_Functions/0001-vcomp-single-threaded-implementation-of-_vcomp_fork.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Stub_Functions/0001-vcomp-single-threaded-implementation-of-_vcomp_fork.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Stub_Functions/0001-vcomp-single-threaded-implementation-of-_vcomp_fork.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,484 +0,0 @@ -From 90156f8a04061c7d0629f46dd640c09bccb0122c Mon Sep 17 00:00:00 2001 -From: Dan Kegel -Date: Fri, 12 Oct 2012 22:31:39 -0700 -Subject: vcomp: single-threaded implementation of _vcomp_fork - ---- - configure.ac | 3 +- - dlls/vcomp/Makefile.in | 1 + - dlls/vcomp/fork.c | 161 ++++++++++++++++++++++++++++++++++++++++ - dlls/vcomp/tests/Makefile.in | 8 ++ - dlls/vcomp/tests/fork.c | 153 ++++++++++++++++++++++++++++++++++++++ - dlls/vcomp/tests/vcomp.manifest | 21 ++++++ - dlls/vcomp/tests/vcomp.rc | 22 ++++++ - dlls/vcomp/vcomp.spec | 2 +- - dlls/vcomp100/vcomp100.spec | 2 +- - dlls/vcomp90/vcomp90.spec | 2 +- - 10 files changed, 371 insertions(+), 4 deletions(-) - create mode 100644 dlls/vcomp/fork.c - create mode 100644 dlls/vcomp/tests/Makefile.in - create mode 100644 dlls/vcomp/tests/fork.c - create mode 100644 dlls/vcomp/tests/vcomp.manifest - create mode 100644 dlls/vcomp/tests/vcomp.rc - -diff --git a/configure.ac b/configure.ac -index a931730..8c51410 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -3290,7 +3290,8 @@ WINE_CONFIG_DLL(uxtheme,,[implib]) - WINE_CONFIG_TEST(dlls/uxtheme/tests) - WINE_CONFIG_DLL(vbscript,,[clean]) - WINE_CONFIG_TEST(dlls/vbscript/tests,[clean]) --WINE_CONFIG_DLL(vcomp) -+WINE_CONFIG_DLL(vcomp,,[implib]) -+WINE_CONFIG_TEST(dlls/vcomp/tests) - WINE_CONFIG_DLL(vcomp100) - WINE_CONFIG_DLL(vcomp90) - WINE_CONFIG_DLL(vdhcp.vxd,enable_win16) -diff --git a/dlls/vcomp/Makefile.in b/dlls/vcomp/Makefile.in -index a54a86f..5bd0074 100644 ---- a/dlls/vcomp/Makefile.in -+++ b/dlls/vcomp/Makefile.in -@@ -1,4 +1,5 @@ - MODULE = vcomp.dll - - C_SRCS = \ -+ fork.c \ - main.c -diff --git a/dlls/vcomp/fork.c b/dlls/vcomp/fork.c -new file mode 100644 -index 0000000..13a7b56 ---- /dev/null -+++ b/dlls/vcomp/fork.c -@@ -0,0 +1,161 @@ -+/* -+ * vcomp fork/join implementation -+ * -+ * Copyright 2012 Dan Kegel -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#include "config.h" -+ -+#include -+ -+#include "windef.h" -+#include "winbase.h" -+#include "wine/debug.h" -+ -+WINE_DEFAULT_DEBUG_CHANNEL(vcomp); -+ -+void CDECL _vcomp_fork_call_wrapper(void *wrapper, int nargs, __ms_va_list args); -+ -+/* When Visual C encounters a '#pragma omp parallel' directive, -+ * it wraps the next statement in a function, and passes the address -+ * of the wrapper function to _vcomp_fork, which calls that function-- -+ * possibly after spawning extra copies on new threads. -+ * -+ * If the directive has an if() clause, the value passed to the if clause -+ * is passed as the first argument to _vcomp_fork; if it is false, -+ * or if OMP_NUM_THREADS is 1, or omp_set_num_threads(1) has been called, -+ * or if too many threads are already in use, native _vcomp_fork doesn't spawn -+ * any extra threads, it just calls the wrapper function. -+ * -+ * The OpenMP standard allows implementations to fall back to executing -+ * everything on a single thread, so that's what we'll do for now; -+ * our _vcomp_fork will simply call the wrapper function. -+ * That's enough to make many, but not all, apps run correctly. -+ * -+ * If the statement being wrapped refers to variables from an outer scope, -+ * Visual C passes them to _vcomp_fork and thence the wrapper as follows: -+ * - Unchanging ints are always passed by value -+ * - Unchanging floats are passed by value on i386, but by reference on amd64 -+ * - Everything else is passed by reference -+ * -+ * The call to _vcomp_fork is synthesized by the compiler; -+ * user code isn't even aware that a call is being made. And the callee -+ * (_vcomp_fork) is also under Visual C's control. Thus the compiler -+ * is free to use a nonstandard ABI for this call. And it does, in that -+ * float arguments are not promoted to double. (Some apps -+ * that use floats would probably be very annoyed if they were silently -+ * promoted to doubles by "#pragma omp parallel".) -+ * -+ * The call from _vcomp_fork to the wrapper function also doesn't quite -+ * follow the normal win32/win64 calling conventions: -+ * 1) Since Visual C never passes floats or doubles by value to the -+ * wrapper on amd64, native vcomp.dll does not copy floating point parameters -+ * to registers, contrary to the win64 ABI. Manual tests confirm this. -+ * 2) Since the wrapper itself doesn't use varargs at all, _vcomp_fork can't -+ * just pass an __ms_va_list; it has to push the arguments onto the stack again. -+ * This can't be done in C, so we use assembly in _vcomp_fork_call_wrapper. -+ * (That function is a close copy of call_method in oleaut32/typelib.c, -+ * with unneeded instructions removed.) -+ */ -+ -+void WINAPIV _vcomp_fork(BOOL ifval, int nargs, void *wrapper, ...) -+{ -+ __ms_va_list valist; -+ TRACE("(%d, %d, %p, ...)\n", ifval, nargs, wrapper); -+ __ms_va_start(valist, wrapper); -+ _vcomp_fork_call_wrapper(wrapper, nargs, valist); -+ __ms_va_end(valist); -+} -+ -+#if defined(__i386__) -+__ASM_GLOBAL_FUNC( _vcomp_fork_call_wrapper, -+ "pushl %ebp\n\t" -+ __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") -+ __ASM_CFI(".cfi_rel_offset %ebp,0\n\t") -+ "movl %esp,%ebp\n\t" -+ __ASM_CFI(".cfi_def_cfa_register %ebp\n\t") -+ "pushl %esi\n\t" -+ __ASM_CFI(".cfi_rel_offset %esi,-4\n\t") -+ "pushl %edi\n\t" -+ __ASM_CFI(".cfi_rel_offset %edi,-8\n\t") -+ "movl 12(%ebp),%edx\n\t" -+ "movl %esp,%edi\n\t" -+ "shll $2,%edx\n\t" -+ "jz 1f\n\t" -+ "subl %edx,%edi\n\t" -+ "andl $~15,%edi\n\t" -+ "movl %edi,%esp\n\t" -+ "movl 12(%ebp),%ecx\n\t" -+ "movl 16(%ebp),%esi\n\t" -+ "cld\n\t" -+ "rep; movsl\n" -+ "1:\tcall *8(%ebp)\n\t" -+ "leal -8(%ebp),%esp\n\t" -+ "popl %edi\n\t" -+ __ASM_CFI(".cfi_same_value %edi\n\t") -+ "popl %esi\n\t" -+ __ASM_CFI(".cfi_same_value %esi\n\t") -+ "popl %ebp\n\t" -+ __ASM_CFI(".cfi_def_cfa %esp,4\n\t") -+ __ASM_CFI(".cfi_same_value %ebp\n\t") -+ "ret" ) -+ -+#elif defined(__x86_64__) -+ -+__ASM_GLOBAL_FUNC( _vcomp_fork_call_wrapper, -+ "pushq %rbp\n\t" -+ __ASM_CFI(".cfi_adjust_cfa_offset 8\n\t") -+ __ASM_CFI(".cfi_rel_offset %rbp,0\n\t") -+ "movq %rsp,%rbp\n\t" -+ __ASM_CFI(".cfi_def_cfa_register %rbp\n\t") -+ "pushq %rsi\n\t" -+ __ASM_CFI(".cfi_rel_offset %rsi,-8\n\t") -+ "pushq %rdi\n\t" -+ __ASM_CFI(".cfi_rel_offset %rdi,-16\n\t") -+ "movq %rcx,%rax\n\t" -+ "movq $4,%rcx\n\t" -+ "cmp %rcx,%rdx\n\t" -+ "cmovgq %rdx,%rcx\n\t" -+ "leaq 0(,%rcx,8),%rdx\n\t" -+ "subq %rdx,%rsp\n\t" -+ "andq $~15,%rsp\n\t" -+ "movq %rsp,%rdi\n\t" -+ "movq %r8,%rsi\n\t" -+ "rep; movsq\n\t" -+ "movq 0(%rsp),%rcx\n\t" -+ "movq 8(%rsp),%rdx\n\t" -+ "movq 16(%rsp),%r8\n\t" -+ "movq 24(%rsp),%r9\n\t" -+ "callq *%rax\n\t" -+ "leaq -16(%rbp),%rsp\n\t" -+ "popq %rdi\n\t" -+ __ASM_CFI(".cfi_same_value %rdi\n\t") -+ "popq %rsi\n\t" -+ __ASM_CFI(".cfi_same_value %rsi\n\t") -+ __ASM_CFI(".cfi_def_cfa_register %rsp\n\t") -+ "popq %rbp\n\t" -+ __ASM_CFI(".cfi_adjust_cfa_offset -8\n\t") -+ __ASM_CFI(".cfi_same_value %rbp\n\t") -+ "ret") -+#else -+ -+void CDECL _vcomp_fork_call_wrapper(void *wrapper, int nargs, __ms_va_list args) -+{ -+ ERR("Not implemented for this architecture\n"); -+} -+ -+#endif -diff --git a/dlls/vcomp/tests/Makefile.in b/dlls/vcomp/tests/Makefile.in -new file mode 100644 -index 0000000..81430a3 ---- /dev/null -+++ b/dlls/vcomp/tests/Makefile.in -@@ -0,0 +1,8 @@ -+TESTDLL = vcomp.dll -+IMPORTS = vcomp -+ -+C_SRCS = \ -+ fork.c -+ -+RC_SRCS = \ -+ vcomp.rc -diff --git a/dlls/vcomp/tests/fork.c b/dlls/vcomp/tests/fork.c -new file mode 100644 -index 0000000..a6f176c ---- /dev/null -+++ b/dlls/vcomp/tests/fork.c -@@ -0,0 +1,153 @@ -+/* -+ * Unit test suite for vcomp fork/join implementation -+ * -+ * Copyright 2012 Dan Kegel -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#include "wine/test.h" -+ -+static const int is_win64 = (sizeof(void *) > sizeof(int)); -+ -+static void WINAPIV (*p_vcomp_fork)(BOOL ifval, int nargs, void *wrapper, ...); -+static int CDECL (*pomp_get_max_threads)(void); -+ -+#define GETFUNC(x) do { p##x = (void*)GetProcAddress(vcomp, #x); ok(p##x != NULL, "Export '%s' not found\n", #x); } while(0) -+ -+static BOOL init(void) -+{ -+ HMODULE vcomp = LoadLibraryA("vcomp.dll"); -+ if (!vcomp) -+ { -+ win_skip("vcomp.dll not installed\n"); -+ return FALSE; -+ } -+ -+ GETFUNC(_vcomp_fork); -+ GETFUNC(omp_get_max_threads); -+ -+ return TRUE; -+} -+ -+/* Test whether a variety of types are passed correctly. -+ * Pass five of each because the first four parameters are -+ * handled differently on amd64, and we want to test both -+ * ways. -+ */ -+ -+static void CDECL _test_vcomp_fork_ptr_worker(LONG volatile *a, LONG volatile *b, LONG volatile *c, LONG volatile *d, LONG volatile *e) -+{ -+ InterlockedIncrement(a); -+ InterlockedIncrement(b); -+ InterlockedIncrement(c); -+ InterlockedIncrement(d); -+ InterlockedIncrement(e); -+} -+ -+static void test_vcomp_fork_ptr(void) -+{ -+ LONG volatile a, b, c, d, e; -+ int n; -+ -+ /* #pragma omp parallel if(FALSE) shared(a, b, c, d, e) -+ * { InterlockedIncrement(&a); ... InterlockedIncrement(&e); } -+ */ -+ a=0; b=1; c=2; d=3; e=4; -+ p_vcomp_fork(FALSE, 5, _test_vcomp_fork_ptr_worker, &a, &b, &c, &d, &e); -+ ok(a == 1, "a == 1\n"); -+ ok(b == 2, "a == 2\n"); -+ ok(c == 3, "a == 3\n"); -+ ok(d == 4, "a == 4\n"); -+ ok(e == 5, "a == 5\n"); -+ -+ /* #pragma omp parallel if(TRUE) shared(a, b, c, d, e) -+ * { InterlockedIncrement(&a); ... InterlockedIncrement(&e); } -+ */ -+ a=0; b=1; c=2; d=3; e=4; -+ n = pomp_get_max_threads(); -+ p_vcomp_fork(TRUE, 5, _test_vcomp_fork_ptr_worker, &a, &b, &c, &d, &e); -+ ok(a > 0 && a <= (n+0), "a > 0 && a <= (n+0)\n"); -+ ok(b > 1 && b <= (n+1), "b > 1 && b <= (n+1)\n"); -+ ok(c > 2 && c <= (n+2), "c > 2 && c <= (n+2)\n"); -+ ok(d > 3 && d <= (n+3), "d > 3 && d <= (n+3)\n"); -+ ok(e > 4 && e <= (n+4), "e > 4 && e <= (n+4)\n"); -+} -+ -+static void CDECL _test_vcomp_fork_uintptr_worker(UINT_PTR a, UINT_PTR b, UINT_PTR c, UINT_PTR d, UINT_PTR e) -+{ -+ ok(a == 1, "expected a == 1\n"); -+ ok(b == MAXUINT_PTR-2, "expected b == MAXUINT_PTR-2\n"); -+ ok(c == 3, "expected c == 3\n"); -+ ok(d == MAXUINT_PTR-4, "expected d == MAXUINT_PTR-4\n"); -+ ok(e == 5, "expected e == 5\n"); -+} -+ -+static void test_vcomp_fork_uintptr(void) -+{ -+ /* test_vcomp_fork_ptr ought to have been enough, but probably -+ * didn't vary all the bits of the high word, so do that here. -+ */ -+ p_vcomp_fork(TRUE, 5, _test_vcomp_fork_uintptr_worker, \ -+ (UINT_PTR)1, (UINT_PTR)(MAXUINT_PTR-2), \ -+ (UINT_PTR)3, (UINT_PTR)(MAXUINT_PTR)-4, (UINT_PTR) 5); -+} -+ -+static void CDECL _test_vcomp_fork_float_worker(float a, float b, float c, float d, float e) -+{ -+ ok(1.4999 < a && a < 1.5001, "expected a == 1.5, got %f\n", a); -+ ok(2.4999 < b && b < 2.5001, "expected b == 2.5, got %f\n", b); -+ ok(3.4999 < c && c < 3.5001, "expected c == 3.5, got %f\n", c); -+ ok(4.4999 < d && d < 4.5001, "expected d == 4.5, got %f\n", d); -+ ok(5.4999 < e && e < 5.5001, "expected e == 5.5, got %f\n", e); -+} -+ -+static void test_vcomp_fork_float(void) -+{ -+ static void CDECL (*p_vcomp_fork_f5)(BOOL, int, void *, float, float, float, float, float); -+ -+ if (is_win64) -+ { -+ skip("Skipping float test on x86_64.\n"); -+ return; -+ } -+ -+ /* -+ * 32 bit Visual C sometimes passes 32 bit floats by value to -+ * the wrapper, so verify that here. -+ * -+ * x86-64 Visual C has not yet been observed passing 32 bit floats by -+ * value to the wrapper, and indeed _vcomp_fork does not even copy the -+ * first four args to floating point registers, so this test fails -+ * on x86-64 for the first four arguments even on native. -+ * Therefore don't run it. (It's hard to write a reliable test to show -+ * this, since the floating point registers might just happen -+ * to have the right values once in a blue moon.) -+ */ -+ -+ /* Avoid float promotion by using a prototype tailored for this call */ -+ p_vcomp_fork_f5 = (void *)p_vcomp_fork; -+ p_vcomp_fork_f5(TRUE, 5, _test_vcomp_fork_float_worker, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f); -+} -+ -+START_TEST(fork) -+{ -+ if (!init()) -+ return; -+ -+ test_vcomp_fork_ptr(); -+ test_vcomp_fork_uintptr(); -+ test_vcomp_fork_float(); -+} -diff --git a/dlls/vcomp/tests/vcomp.manifest b/dlls/vcomp/tests/vcomp.manifest -new file mode 100644 -index 0000000..6c8bd91 ---- /dev/null -+++ b/dlls/vcomp/tests/vcomp.manifest -@@ -0,0 +1,21 @@ -+ -+ -+ -+Wine vcomp test suite -+ -+ -+ -+ -+ -+ -diff --git a/dlls/vcomp/tests/vcomp.rc b/dlls/vcomp/tests/vcomp.rc -new file mode 100644 -index 0000000..c5f1d25 ---- /dev/null -+++ b/dlls/vcomp/tests/vcomp.rc -@@ -0,0 +1,22 @@ -+/* -+ * Copyright (c) 2012 Dan Kegel -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#include "winuser.h" -+ -+/* @makedep: vcomp.manifest */ -+1 RT_MANIFEST vcomp.manifest -diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec -index 306dd15..d446574 100644 ---- a/dlls/vcomp/vcomp.spec -+++ b/dlls/vcomp/vcomp.spec -@@ -64,7 +64,7 @@ - @ stub _vcomp_for_static_init_i8 - @ stub _vcomp_for_static_simple_init - @ stub _vcomp_for_static_simple_init_i8 --@ stub _vcomp_fork -+@ varargs _vcomp_fork(long long ptr) - @ stub _vcomp_get_thread_num - @ stub _vcomp_leave_critsect - @ stub _vcomp_master_barrier -diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec -index 39cf91c..2c04e91 100644 ---- a/dlls/vcomp100/vcomp100.spec -+++ b/dlls/vcomp100/vcomp100.spec -@@ -64,7 +64,7 @@ - @ stub _vcomp_for_static_init_i8 - @ stub _vcomp_for_static_simple_init - @ stub _vcomp_for_static_simple_init_i8 --@ stub _vcomp_fork -+@ varargs _vcomp_fork(long long ptr) vcomp._vcomp_fork - @ stub _vcomp_get_thread_num - @ stub _vcomp_leave_critsect - @ stub _vcomp_master_barrier -diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec -index 39cf91c..2c04e91 100644 ---- a/dlls/vcomp90/vcomp90.spec -+++ b/dlls/vcomp90/vcomp90.spec -@@ -64,7 +64,7 @@ - @ stub _vcomp_for_static_init_i8 - @ stub _vcomp_for_static_simple_init - @ stub _vcomp_for_static_simple_init_i8 --@ stub _vcomp_fork -+@ varargs _vcomp_fork(long long ptr) vcomp._vcomp_fork - @ stub _vcomp_get_thread_num - @ stub _vcomp_leave_critsect - @ stub _vcomp_master_barrier --- -2.2.1 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Stub_Functions/0002-vcomp-better-stubs-for-_vcomp_for_static_simple_init.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Stub_Functions/0002-vcomp-better-stubs-for-_vcomp_for_static_simple_init.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Stub_Functions/0002-vcomp-better-stubs-for-_vcomp_for_static_simple_init.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Stub_Functions/0002-vcomp-better-stubs-for-_vcomp_for_static_simple_init.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,233 +0,0 @@ -From c0369b34efc51c992be270a9e4eaef33b3cbf3d5 Mon Sep 17 00:00:00 2001 -From: Dan Kegel -Date: Sun, 14 Oct 2012 20:40:31 -0700 -Subject: vcomp: better stubs for _vcomp_for_static_simple_init, - _vcomp_for_static_end - ---- - dlls/vcomp/Makefile.in | 3 +- - dlls/vcomp/tests/Makefile.in | 3 +- - dlls/vcomp/tests/work.c | 83 ++++++++++++++++++++++++++++++++++++++++++++ - dlls/vcomp/vcomp.spec | 4 +-- - dlls/vcomp/work.c | 41 ++++++++++++++++++++++ - dlls/vcomp100/vcomp100.spec | 4 +-- - dlls/vcomp90/vcomp90.spec | 4 +-- - 7 files changed, 134 insertions(+), 8 deletions(-) - create mode 100644 dlls/vcomp/tests/work.c - create mode 100644 dlls/vcomp/work.c - -diff --git a/dlls/vcomp/Makefile.in b/dlls/vcomp/Makefile.in -index 5bd0074..dfff21a 100644 ---- a/dlls/vcomp/Makefile.in -+++ b/dlls/vcomp/Makefile.in -@@ -2,4 +2,5 @@ MODULE = vcomp.dll - - C_SRCS = \ - fork.c \ -- main.c -+ main.c \ -+ work.c -diff --git a/dlls/vcomp/tests/Makefile.in b/dlls/vcomp/tests/Makefile.in -index 81430a3..f1479ab 100644 ---- a/dlls/vcomp/tests/Makefile.in -+++ b/dlls/vcomp/tests/Makefile.in -@@ -2,7 +2,8 @@ TESTDLL = vcomp.dll - IMPORTS = vcomp - - C_SRCS = \ -- fork.c -+ fork.c \ -+ work.c - - RC_SRCS = \ - vcomp.rc -diff --git a/dlls/vcomp/tests/work.c b/dlls/vcomp/tests/work.c -new file mode 100644 -index 0000000..e8d3f2c ---- /dev/null -+++ b/dlls/vcomp/tests/work.c -@@ -0,0 +1,83 @@ -+/* -+ * Unit test suite for vcomp work-sharing implementation -+ * -+ * Copyright 2012 Dan Kegel -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#include "wine/test.h" -+ -+static void WINAPIV (*p_vcomp_fork)(DWORD parallel, int nargs, void *helper, ...); -+static void CDECL (*p_vcomp_for_static_end)(void); -+static void CDECL (*p_vcomp_for_static_simple_init)(int first, int last, int mystep, int step, int *pfirst, int *plast); -+ -+#define GETFUNC(x) do { p##x = (void*)GetProcAddress(vcomp, #x); ok(p##x != NULL, "Export '%s' not found\n", #x); } while(0) -+ -+static BOOL init(void) -+{ -+ HMODULE vcomp = LoadLibraryA("vcomp.dll"); -+ if (!vcomp) -+ { -+ win_skip("vcomp.dll not installed\n"); -+ return FALSE; -+ } -+ -+ GETFUNC(_vcomp_fork); -+ GETFUNC(_vcomp_for_static_end); -+ GETFUNC(_vcomp_for_static_simple_init); -+ -+ return TRUE; -+} -+ -+static LONG volatile ncalls; -+static LONG volatile nsum; -+ -+static void CDECL _test_vcomp_for_static_simple_init_worker(void) -+{ -+ int i, my_limit; -+ -+ InterlockedIncrement(&ncalls); -+ -+ /* for (i=0; i<=12; i++) */ -+ p_vcomp_for_static_simple_init(0, 12, 1, 1, &i, &my_limit); -+ -+ while (i <= my_limit) -+ { -+ int j; -+ for (j=0; j= 1, "expected >= 1 call, got %d\n", ncalls); -+ ok(nsum == 6*13, "expected sum 6*13, got %d\n", nsum); -+} -+ -+START_TEST(work) -+{ -+ if (!init()) -+ return; -+ -+ test_vcomp_for_static_simple_init(); -+} -diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec -index d446574..b14edca 100644 ---- a/dlls/vcomp/vcomp.spec -+++ b/dlls/vcomp/vcomp.spec -@@ -59,10 +59,10 @@ - @ stub _vcomp_for_dynamic_init_i8 - @ stub _vcomp_for_dynamic_next - @ stub _vcomp_for_dynamic_next_i8 --@ stub _vcomp_for_static_end -+@ cdecl _vcomp_for_static_end() - @ stub _vcomp_for_static_init - @ stub _vcomp_for_static_init_i8 --@ stub _vcomp_for_static_simple_init -+@ cdecl _vcomp_for_static_simple_init(long long long long ptr ptr) - @ stub _vcomp_for_static_simple_init_i8 - @ varargs _vcomp_fork(long long ptr) - @ stub _vcomp_get_thread_num -diff --git a/dlls/vcomp/work.c b/dlls/vcomp/work.c -new file mode 100644 -index 0000000..0f9ff78 ---- /dev/null -+++ b/dlls/vcomp/work.c -@@ -0,0 +1,41 @@ -+/* -+ * vcomp work-sharing implementation -+ * -+ * Copyright 2012 Dan Kegel -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#include "config.h" -+ -+#include -+ -+#include "windef.h" -+#include "winbase.h" -+#include "wine/debug.h" -+ -+WINE_DEFAULT_DEBUG_CHANNEL(vcomp); -+ -+void CDECL _vcomp_for_static_simple_init(int first, int last, int mystep, int step, int *pfirst, int *plast) -+{ -+ TRACE("(%d, %d, %d, %d, %p, %p): stub\n", first, last, mystep, step, pfirst, plast); -+ *pfirst = first; -+ *plast = last; -+} -+ -+void CDECL _vcomp_for_static_end(void) -+{ -+ TRACE("stub\n"); -+} -diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec -index 2c04e91..89e0972 100644 ---- a/dlls/vcomp100/vcomp100.spec -+++ b/dlls/vcomp100/vcomp100.spec -@@ -59,10 +59,10 @@ - @ stub _vcomp_for_dynamic_init_i8 - @ stub _vcomp_for_dynamic_next - @ stub _vcomp_for_dynamic_next_i8 --@ stub _vcomp_for_static_end -+@ cdecl _vcomp_for_static_end() vcomp._vcomp_for_static_end - @ stub _vcomp_for_static_init - @ stub _vcomp_for_static_init_i8 --@ stub _vcomp_for_static_simple_init -+@ cdecl _vcomp_for_static_simple_init(long long long long ptr ptr) vcomp._vcomp_for_static_simple_init - @ stub _vcomp_for_static_simple_init_i8 - @ varargs _vcomp_fork(long long ptr) vcomp._vcomp_fork - @ stub _vcomp_get_thread_num -diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec -index 2c04e91..89e0972 100644 ---- a/dlls/vcomp90/vcomp90.spec -+++ b/dlls/vcomp90/vcomp90.spec -@@ -59,10 +59,10 @@ - @ stub _vcomp_for_dynamic_init_i8 - @ stub _vcomp_for_dynamic_next - @ stub _vcomp_for_dynamic_next_i8 --@ stub _vcomp_for_static_end -+@ cdecl _vcomp_for_static_end() vcomp._vcomp_for_static_end - @ stub _vcomp_for_static_init - @ stub _vcomp_for_static_init_i8 --@ stub _vcomp_for_static_simple_init -+@ cdecl _vcomp_for_static_simple_init(long long long long ptr ptr) vcomp._vcomp_for_static_simple_init - @ stub _vcomp_for_static_simple_init_i8 - @ varargs _vcomp_fork(long long ptr) vcomp._vcomp_fork - @ stub _vcomp_get_thread_num --- -2.2.1 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Stub_Functions/0003-vcomp-better-stub-for-_vcomp_for_static_init.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Stub_Functions/0003-vcomp-better-stub-for-_vcomp_for_static_init.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Stub_Functions/0003-vcomp-better-stub-for-_vcomp_for_static_init.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Stub_Functions/0003-vcomp-better-stub-for-_vcomp_for_static_init.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,153 +0,0 @@ -From fadfe0d8a2483066f6f0137b2fb6d6efa3090db8 Mon Sep 17 00:00:00 2001 -From: Dan Kegel -Date: Sun, 14 Oct 2012 20:42:35 -0700 -Subject: vcomp: better stub for _vcomp_for_static_init - ---- - dlls/vcomp/tests/work.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ - dlls/vcomp/vcomp.spec | 2 +- - dlls/vcomp/work.c | 11 +++++++++++ - dlls/vcomp100/vcomp100.spec | 2 +- - dlls/vcomp90/vcomp90.spec | 2 +- - 5 files changed, 59 insertions(+), 3 deletions(-) - -diff --git a/dlls/vcomp/tests/work.c b/dlls/vcomp/tests/work.c -index e8d3f2c..2a76227 100644 ---- a/dlls/vcomp/tests/work.c -+++ b/dlls/vcomp/tests/work.c -@@ -22,6 +22,7 @@ - - static void WINAPIV (*p_vcomp_fork)(DWORD parallel, int nargs, void *helper, ...); - static void CDECL (*p_vcomp_for_static_end)(void); -+static void CDECL (*p_vcomp_for_static_init)(int first, int last, int mystep, int chunksize, int *pnloops, int *pfirst, int *plast, int *pchunksize, int *pfinalchunkstart); - static void CDECL (*p_vcomp_for_static_simple_init)(int first, int last, int mystep, int step, int *pfirst, int *plast); - - #define GETFUNC(x) do { p##x = (void*)GetProcAddress(vcomp, #x); ok(p##x != NULL, "Export '%s' not found\n", #x); } while(0) -@@ -37,6 +38,7 @@ static BOOL init(void) - - GETFUNC(_vcomp_fork); - GETFUNC(_vcomp_for_static_end); -+ GETFUNC(_vcomp_for_static_init); - GETFUNC(_vcomp_for_static_simple_init); - - return TRUE; -@@ -45,6 +47,48 @@ static BOOL init(void) - static LONG volatile ncalls; - static LONG volatile nsum; - -+static void CDECL _test_vcomp_for_static_init_worker(void) -+{ -+ const int my_start = 0; -+ const int my_end = 12; -+ const int my_incr = 1; -+ const int my_chunksize = 1; -+ int nloops, chunkstart, chunkend, chunksize, finalchunkstart; -+ -+ InterlockedIncrement(&ncalls); -+ -+ /* for (i=0; i<=12; i++) */ -+ p_vcomp_for_static_init(my_start, my_end, my_incr, my_chunksize, -+ &nloops, &chunkstart, &chunkend, &chunksize, &finalchunkstart); -+ -+ do -+ { -+ int i; -+ if (chunkstart == finalchunkstart) chunkend = my_end; -+ -+ for (i=chunkstart; i <= chunkend; i += my_incr) -+ { -+ int j; -+ for (j=0; j 0); -+ -+ p_vcomp_for_static_end(); -+} -+ -+static void test_vcomp_for_static_init(void) -+{ -+ ncalls = 0; -+ nsum = 0; -+ p_vcomp_fork(1, 0, _test_vcomp_for_static_init_worker); -+ ok(ncalls >= 1, "expected >= 1 call, got %d\n", ncalls); -+ ok(nsum == 6*13, "expected sum 6*13, got %d\n", nsum); -+} -+ - static void CDECL _test_vcomp_for_static_simple_init_worker(void) - { - int i, my_limit; -@@ -79,5 +123,6 @@ START_TEST(work) - if (!init()) - return; - -+ test_vcomp_for_static_init(); - test_vcomp_for_static_simple_init(); - } -diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec -index b14edca..8bc66e8 100644 ---- a/dlls/vcomp/vcomp.spec -+++ b/dlls/vcomp/vcomp.spec -@@ -60,7 +60,7 @@ - @ stub _vcomp_for_dynamic_next - @ stub _vcomp_for_dynamic_next_i8 - @ cdecl _vcomp_for_static_end() --@ stub _vcomp_for_static_init -+@ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) - @ stub _vcomp_for_static_init_i8 - @ cdecl _vcomp_for_static_simple_init(long long long long ptr ptr) - @ stub _vcomp_for_static_simple_init_i8 -diff --git a/dlls/vcomp/work.c b/dlls/vcomp/work.c -index 0f9ff78..82df26e 100644 ---- a/dlls/vcomp/work.c -+++ b/dlls/vcomp/work.c -@@ -28,6 +28,17 @@ - - WINE_DEFAULT_DEBUG_CHANNEL(vcomp); - -+void CDECL _vcomp_for_static_init(int first, int last, int mystep, int chunksize, int *pnloops, int *pfirst, int *plast, int *pchunksize, int *pfinalchunkstart) -+{ -+ TRACE("(%d, %d, %d, %d, %p, %p, %p, %p, %p): stub\n", -+ first, last, mystep, chunksize, pnloops, pfirst, plast, pchunksize, pfinalchunkstart); -+ *pfirst = first; -+ *plast = last; -+ *pfinalchunkstart = last; -+ *pnloops = 1; -+ *pchunksize = 0; /* moot, since nloops=1 */ -+} -+ - void CDECL _vcomp_for_static_simple_init(int first, int last, int mystep, int step, int *pfirst, int *plast) - { - TRACE("(%d, %d, %d, %d, %p, %p): stub\n", first, last, mystep, step, pfirst, plast); -diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec -index 89e0972..f008e2e 100644 ---- a/dlls/vcomp100/vcomp100.spec -+++ b/dlls/vcomp100/vcomp100.spec -@@ -60,7 +60,7 @@ - @ stub _vcomp_for_dynamic_next - @ stub _vcomp_for_dynamic_next_i8 - @ cdecl _vcomp_for_static_end() vcomp._vcomp_for_static_end --@ stub _vcomp_for_static_init -+@ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) vcomp._vcomp_for_static_init - @ stub _vcomp_for_static_init_i8 - @ cdecl _vcomp_for_static_simple_init(long long long long ptr ptr) vcomp._vcomp_for_static_simple_init - @ stub _vcomp_for_static_simple_init_i8 -diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec -index 89e0972..f008e2e 100644 ---- a/dlls/vcomp90/vcomp90.spec -+++ b/dlls/vcomp90/vcomp90.spec -@@ -60,7 +60,7 @@ - @ stub _vcomp_for_dynamic_next - @ stub _vcomp_for_dynamic_next_i8 - @ cdecl _vcomp_for_static_end() vcomp._vcomp_for_static_end --@ stub _vcomp_for_static_init -+@ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) vcomp._vcomp_for_static_init - @ stub _vcomp_for_static_init_i8 - @ cdecl _vcomp_for_static_simple_init(long long long long ptr ptr) vcomp._vcomp_for_static_simple_init - @ stub _vcomp_for_static_simple_init_i8 --- -2.2.1 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Stub_Functions/0004-vcomp-implement-omp_in_parallel.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Stub_Functions/0004-vcomp-implement-omp_in_parallel.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Stub_Functions/0004-vcomp-implement-omp_in_parallel.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Stub_Functions/0004-vcomp-implement-omp_in_parallel.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,254 +0,0 @@ -From 659f7394d0c3e4c969e0b0f66689433fd133febd Mon Sep 17 00:00:00 2001 -From: Dan Kegel -Date: Wed, 17 Oct 2012 09:15:06 -0700 -Subject: vcomp: implement omp_in_parallel - ---- - dlls/vcomp/fork.c | 32 +++++++++++++++++++++++++++++ - dlls/vcomp/main.c | 12 +++++++++++ - dlls/vcomp/tests/fork.c | 50 +++++++++++++++++++++++++++++++++++++++++++++ - dlls/vcomp/vcomp.spec | 2 +- - dlls/vcomp/vcomp_private.h | 19 +++++++++++++++++ - dlls/vcomp100/vcomp100.spec | 2 +- - dlls/vcomp90/vcomp90.spec | 2 +- - 7 files changed, 116 insertions(+), 3 deletions(-) - create mode 100644 dlls/vcomp/vcomp_private.h - -diff --git a/dlls/vcomp/fork.c b/dlls/vcomp/fork.c -index 13a7b56..49399c6 100644 ---- a/dlls/vcomp/fork.c -+++ b/dlls/vcomp/fork.c -@@ -25,6 +25,22 @@ - #include "windef.h" - #include "winbase.h" - #include "wine/debug.h" -+#include "vcomp_private.h" -+ -+struct vcomp_team -+{ -+ struct vcomp_team *parent; -+}; -+ -+static inline struct vcomp_team *vcomp_get_team(void) -+{ -+ return (struct vcomp_team *)TlsGetValue(vcomp_context_tls); -+} -+ -+static inline void vcomp_set_team(struct vcomp_team *team) -+{ -+ TlsSetValue(vcomp_context_tls, team); -+} - - WINE_DEFAULT_DEBUG_CHANNEL(vcomp); - -@@ -75,10 +91,18 @@ void CDECL _vcomp_fork_call_wrapper(void *wrapper, int nargs, __ms_va_list args) - void WINAPIV _vcomp_fork(BOOL ifval, int nargs, void *wrapper, ...) - { - __ms_va_list valist; -+ struct vcomp_team team; -+ - TRACE("(%d, %d, %p, ...)\n", ifval, nargs, wrapper); -+ -+ team.parent = vcomp_get_team(); -+ vcomp_set_team(&team); -+ - __ms_va_start(valist, wrapper); - _vcomp_fork_call_wrapper(wrapper, nargs, valist); - __ms_va_end(valist); -+ -+ vcomp_set_team(team.parent); - } - - #if defined(__i386__) -@@ -159,3 +183,11 @@ void CDECL _vcomp_fork_call_wrapper(void *wrapper, int nargs, __ms_va_list args) - } - - #endif -+ -+int CDECL omp_in_parallel(void) -+{ -+ int val = (vcomp_get_team() != NULL); -+ -+ TRACE("returning %d\n", val); -+ return val; -+} -diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c -index ab2a372..e37cf16 100644 ---- a/dlls/vcomp/main.c -+++ b/dlls/vcomp/main.c -@@ -26,9 +26,12 @@ - #include "windef.h" - #include "winbase.h" - #include "wine/debug.h" -+#include "vcomp_private.h" - - WINE_DEFAULT_DEBUG_CHANNEL(vcomp); - -+DWORD vcomp_context_tls; -+ - int CDECL omp_get_dynamic(void) - { - TRACE("stub\n"); -@@ -117,6 +120,15 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) - return FALSE; /* prefer native version */ - case DLL_PROCESS_ATTACH: - DisableThreadLibraryCalls(hinstDLL); -+ -+ if ((vcomp_context_tls = TlsAlloc()) == TLS_OUT_OF_INDEXES) -+ { -+ ERR("Failed to allocate TLS index\n"); -+ return FALSE; -+ } -+ break; -+ case DLL_PROCESS_DETACH: -+ TlsFree(vcomp_context_tls); - break; - } - -diff --git a/dlls/vcomp/tests/fork.c b/dlls/vcomp/tests/fork.c -index a6f176c..3d11504 100644 ---- a/dlls/vcomp/tests/fork.c -+++ b/dlls/vcomp/tests/fork.c -@@ -24,6 +24,9 @@ static const int is_win64 = (sizeof(void *) > sizeof(int)); - - static void WINAPIV (*p_vcomp_fork)(BOOL ifval, int nargs, void *wrapper, ...); - static int CDECL (*pomp_get_max_threads)(void); -+static int CDECL (*pomp_get_num_threads)(void); -+static int CDECL (*pomp_in_parallel)(void); -+static void CDECL (*pomp_set_num_threads)(int); - - #define GETFUNC(x) do { p##x = (void*)GetProcAddress(vcomp, #x); ok(p##x != NULL, "Export '%s' not found\n", #x); } while(0) - -@@ -36,6 +39,9 @@ static BOOL init(void) - return FALSE; - } - -+ GETFUNC(omp_get_num_threads); -+ GETFUNC(omp_in_parallel); -+ GETFUNC(omp_set_num_threads); - GETFUNC(_vcomp_fork); - GETFUNC(omp_get_max_threads); - -@@ -142,6 +148,49 @@ static void test_vcomp_fork_float(void) - p_vcomp_fork_f5(TRUE, 5, _test_vcomp_fork_float_worker, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f); - } - -+#define NLOOPS_SHORT 5 -+#define SLEEP_MS_SHORT 50 -+ -+static void CDECL _test_omp_in_parallel_nested_worker(LONG volatile *psum) -+{ -+ if (pomp_in_parallel()) -+ InterlockedIncrement(psum); -+} -+ -+static void CDECL _test_omp_in_parallel_worker(LONG volatile *psum) -+{ -+ int i; -+ InterlockedIncrement(psum); -+ for (i=0; i -Date: Mon, 15 Oct 2012 21:01:30 -0700 -Subject: vcomp: better stubs for _vcomp_for_dynamic_init, - _vcomp_for_dynamic_next - ---- - dlls/vcomp/fork.c | 15 ----------- - dlls/vcomp/tests/work.c | 66 +++++++++++++++++++++++++++++++++++++++++++++ - dlls/vcomp/vcomp.spec | 4 +-- - dlls/vcomp/vcomp_private.h | 37 +++++++++++++++++++++++++ - dlls/vcomp/work.c | 47 ++++++++++++++++++++++++++++++++ - dlls/vcomp100/vcomp100.spec | 4 +-- - dlls/vcomp90/vcomp90.spec | 4 +-- - 7 files changed, 156 insertions(+), 21 deletions(-) - -diff --git a/dlls/vcomp/fork.c b/dlls/vcomp/fork.c -index 49399c6..5af2021 100644 ---- a/dlls/vcomp/fork.c -+++ b/dlls/vcomp/fork.c -@@ -27,21 +27,6 @@ - #include "wine/debug.h" - #include "vcomp_private.h" - --struct vcomp_team --{ -- struct vcomp_team *parent; --}; -- --static inline struct vcomp_team *vcomp_get_team(void) --{ -- return (struct vcomp_team *)TlsGetValue(vcomp_context_tls); --} -- --static inline void vcomp_set_team(struct vcomp_team *team) --{ -- TlsSetValue(vcomp_context_tls, team); --} -- - WINE_DEFAULT_DEBUG_CHANNEL(vcomp); - - void CDECL _vcomp_fork_call_wrapper(void *wrapper, int nargs, __ms_va_list args); -diff --git a/dlls/vcomp/tests/work.c b/dlls/vcomp/tests/work.c -index 2a76227..5abe0e1 100644 ---- a/dlls/vcomp/tests/work.c -+++ b/dlls/vcomp/tests/work.c -@@ -21,12 +21,18 @@ - #include "wine/test.h" - - static void WINAPIV (*p_vcomp_fork)(DWORD parallel, int nargs, void *helper, ...); -+static void CDECL (*p_vcomp_for_dynamic_init)(int flags, int first, int last, int mystep, int chunksize); -+static int CDECL (*p_vcomp_for_dynamic_next)(int *pcounter, int *pchunklimit); - static void CDECL (*p_vcomp_for_static_end)(void); - static void CDECL (*p_vcomp_for_static_init)(int first, int last, int mystep, int chunksize, int *pnloops, int *pfirst, int *plast, int *pchunksize, int *pfinalchunkstart); - static void CDECL (*p_vcomp_for_static_simple_init)(int first, int last, int mystep, int step, int *pfirst, int *plast); - - #define GETFUNC(x) do { p##x = (void*)GetProcAddress(vcomp, #x); ok(p##x != NULL, "Export '%s' not found\n", #x); } while(0) - -+/* Matches definitions in ../vcomp_private.h */ -+#define VCOMP_DYNAMIC_FOR_FLAGS_DOWN 0x0 -+#define VCOMP_DYNAMIC_FOR_FLAGS_UP 0x40 -+ - static BOOL init(void) - { - HMODULE vcomp = LoadLibraryA("vcomp.dll"); -@@ -37,6 +43,8 @@ static BOOL init(void) - } - - GETFUNC(_vcomp_fork); -+ GETFUNC(_vcomp_for_dynamic_init); -+ GETFUNC(_vcomp_for_dynamic_next); - GETFUNC(_vcomp_for_static_end); - GETFUNC(_vcomp_for_static_init); - GETFUNC(_vcomp_for_static_simple_init); -@@ -47,6 +55,63 @@ static BOOL init(void) - static LONG volatile ncalls; - static LONG volatile nsum; - -+static void CDECL _test_vcomp_for_dynamic_worker_up(void) -+{ -+ int i, limit; -+ -+ InterlockedIncrement(&ncalls); -+ -+ /* pragma omp schedule(dynamic,16) */ -+ /* for (i=0; i<=17; i++) */ -+ p_vcomp_for_dynamic_init(VCOMP_DYNAMIC_FOR_FLAGS_UP, 0, 17, 1, 16); -+ while (p_vcomp_for_dynamic_next(&i, &limit)) -+ { -+ for (; i<=limit; i++) -+ { -+ int j; -+ for (j=0; j=0; i--) */ -+ p_vcomp_for_dynamic_init(VCOMP_DYNAMIC_FOR_FLAGS_DOWN, 17, 0, 1, 16); -+ while (p_vcomp_for_dynamic_next(&i, &limit)) -+ { -+ for (; i>=limit; i--) -+ { -+ int j; -+ for (j=0; j= 1, "expected >= 1 call, got %d\n", ncalls); -+ ok(nsum == 9*17, "expected sum 9*17, got %d\n", nsum); -+ -+ /* for (i=17; i>=0; i--) nsum += i; */ -+ ncalls = 0; -+ nsum = 0; -+ p_vcomp_fork(1, 0, _test_vcomp_for_dynamic_worker_down); -+ ok(ncalls >= 1, "expected >= 1 call, got %d\n", ncalls); -+ ok(nsum == 9*17, "expected sum 9*17, got %d\n", nsum); -+} -+ - static void CDECL _test_vcomp_for_static_init_worker(void) - { - const int my_start = 0; -@@ -123,6 +188,7 @@ START_TEST(work) - if (!init()) - return; - -+ test_vcomp_for_dynamic(); - test_vcomp_for_static_init(); - test_vcomp_for_static_simple_init(); - } -diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec -index 156233f..f603660 100644 ---- a/dlls/vcomp/vcomp.spec -+++ b/dlls/vcomp/vcomp.spec -@@ -55,9 +55,9 @@ - @ stub _vcomp_copyprivate_receive - @ stub _vcomp_enter_critsect - @ stub _vcomp_flush --@ stub _vcomp_for_dynamic_init -+@ cdecl _vcomp_for_dynamic_init(long long long long long) - @ stub _vcomp_for_dynamic_init_i8 --@ stub _vcomp_for_dynamic_next -+@ cdecl _vcomp_for_dynamic_next(ptr ptr) - @ stub _vcomp_for_dynamic_next_i8 - @ cdecl _vcomp_for_static_end() - @ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) -diff --git a/dlls/vcomp/vcomp_private.h b/dlls/vcomp/vcomp_private.h -index 50c4643..d3a7005 100644 ---- a/dlls/vcomp/vcomp_private.h -+++ b/dlls/vcomp/vcomp_private.h -@@ -1,4 +1,7 @@ - /* -+ * vcmp wine internal private include file -+ * -+ * Copyright 2012 Dan Kegel - * Copyright 2015 Sebastian Lackner - * - * This library is free software; you can redistribute it and/or -@@ -16,4 +19,38 @@ - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -+#ifndef __WINE_VCOMP_PRIVATE_H -+#define __WINE_VCOMP_PRIVATE_H -+ -+struct vcomp_team -+{ -+ struct vcomp_team *parent; -+ union -+ { -+ struct -+ { -+ int counter; -+ int step; -+ int iterations_remaining; -+ int chunksize; -+ int flags; -+ } dyn_for; -+ } work; -+}; -+ - extern DWORD vcomp_context_tls DECLSPEC_HIDDEN; -+ -+static inline struct vcomp_team *vcomp_get_team(void) -+{ -+ return (struct vcomp_team *)TlsGetValue(vcomp_context_tls); -+} -+ -+static inline void vcomp_set_team(struct vcomp_team *team) -+{ -+ TlsSetValue(vcomp_context_tls, team); -+} -+ -+#define VCOMP_DYNAMIC_FOR_FLAGS_DOWN 0x0 -+#define VCOMP_DYNAMIC_FOR_FLAGS_UP 0x40 -+ -+#endif -diff --git a/dlls/vcomp/work.c b/dlls/vcomp/work.c -index 82df26e..87bce93 100644 ---- a/dlls/vcomp/work.c -+++ b/dlls/vcomp/work.c -@@ -25,9 +25,56 @@ - #include "windef.h" - #include "winbase.h" - #include "wine/debug.h" -+#include "vcomp_private.h" - - WINE_DEFAULT_DEBUG_CHANNEL(vcomp); - -+void CDECL _vcomp_for_dynamic_init(int flags, int first, int last, int mystep, int chunksize) -+{ -+ struct vcomp_team *pt = vcomp_get_team(); -+ -+ TRACE("(%d, %d, %d, %d, %d): stub\n", flags, first, last, mystep, chunksize); -+ -+ pt->work.dyn_for.counter = first; -+ pt->work.dyn_for.chunksize = chunksize; -+ pt->work.dyn_for.flags = flags; -+ pt->work.dyn_for.step = mystep; -+ if (flags & VCOMP_DYNAMIC_FOR_FLAGS_UP) -+ pt->work.dyn_for.iterations_remaining = 1 + (last - first) / mystep; -+ else -+ pt->work.dyn_for.iterations_remaining = 1 + (first - last) / mystep; -+} -+ -+int CDECL _vcomp_for_dynamic_next(int *pcounter, int *pchunklimit) -+{ -+ struct vcomp_team *pt = vcomp_get_team(); -+ int n; -+ -+ TRACE("(%p, %p): stub.\n", pcounter, pchunklimit); -+ -+ n = pt->work.dyn_for.chunksize; -+ if (n > pt->work.dyn_for.iterations_remaining) -+ n = pt->work.dyn_for.iterations_remaining; -+ -+ *pcounter = pt->work.dyn_for.counter; -+ -+ if (pt->work.dyn_for.flags & VCOMP_DYNAMIC_FOR_FLAGS_UP) -+ { -+ pt->work.dyn_for.counter += pt->work.dyn_for.step * n; -+ *pchunklimit = pt->work.dyn_for.counter - 1; -+ } -+ else -+ { -+ pt->work.dyn_for.counter -= pt->work.dyn_for.step * n; -+ *pchunklimit = pt->work.dyn_for.counter + 1; -+ } -+ pt->work.dyn_for.iterations_remaining -= n; -+ -+ TRACE("counter %d, iterations_remaining %d, n %d, returning %d\n", -+ pt->work.dyn_for.counter, pt->work.dyn_for.iterations_remaining, n, (n > 0)); -+ return (n > 0); -+} -+ - void CDECL _vcomp_for_static_init(int first, int last, int mystep, int chunksize, int *pnloops, int *pfirst, int *plast, int *pchunksize, int *pfinalchunkstart) - { - TRACE("(%d, %d, %d, %d, %p, %p, %p, %p, %p): stub\n", -diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec -index dd276d0..48d5e3f 100644 ---- a/dlls/vcomp100/vcomp100.spec -+++ b/dlls/vcomp100/vcomp100.spec -@@ -55,9 +55,9 @@ - @ stub _vcomp_copyprivate_receive - @ stub _vcomp_enter_critsect - @ stub _vcomp_flush --@ stub _vcomp_for_dynamic_init -+@ cdecl _vcomp_for_dynamic_init(long long long long long) vcomp._vcomp_for_dynamic_init - @ stub _vcomp_for_dynamic_init_i8 --@ stub _vcomp_for_dynamic_next -+@ cdecl _vcomp_for_dynamic_next(ptr ptr) vcomp._vcomp_for_dynamic_next - @ stub _vcomp_for_dynamic_next_i8 - @ cdecl _vcomp_for_static_end() vcomp._vcomp_for_static_end - @ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) vcomp._vcomp_for_static_init -diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec -index dd276d0..48d5e3f 100644 ---- a/dlls/vcomp90/vcomp90.spec -+++ b/dlls/vcomp90/vcomp90.spec -@@ -55,9 +55,9 @@ - @ stub _vcomp_copyprivate_receive - @ stub _vcomp_enter_critsect - @ stub _vcomp_flush --@ stub _vcomp_for_dynamic_init -+@ cdecl _vcomp_for_dynamic_init(long long long long long) vcomp._vcomp_for_dynamic_init - @ stub _vcomp_for_dynamic_init_i8 --@ stub _vcomp_for_dynamic_next -+@ cdecl _vcomp_for_dynamic_next(ptr ptr) vcomp._vcomp_for_dynamic_next - @ stub _vcomp_for_dynamic_next_i8 - @ cdecl _vcomp_for_static_end() vcomp._vcomp_for_static_end - @ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) vcomp._vcomp_for_static_init --- -2.2.1 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Stub_Functions/0006-vcomp-better-stubs-for-_vcomp_sections_init-_vcomp_s.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Stub_Functions/0006-vcomp-better-stubs-for-_vcomp_sections_init-_vcomp_s.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Stub_Functions/0006-vcomp-better-stubs-for-_vcomp_sections_init-_vcomp_s.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Stub_Functions/0006-vcomp-better-stubs-for-_vcomp_sections_init-_vcomp_s.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,180 +0,0 @@ -From 8069c24409570d48c59bb103539d1ea1fd835c36 Mon Sep 17 00:00:00 2001 -From: Dan Kegel -Date: Mon, 15 Oct 2012 21:09:56 -0700 -Subject: vcomp: better stubs for _vcomp_sections_init, _vcomp_sections_next - ---- - dlls/vcomp/tests/work.c | 34 ++++++++++++++++++++++++++++++++++ - dlls/vcomp/vcomp.spec | 4 ++-- - dlls/vcomp/vcomp_private.h | 5 +++++ - dlls/vcomp/work.c | 18 ++++++++++++++++++ - dlls/vcomp100/vcomp100.spec | 4 ++-- - dlls/vcomp90/vcomp90.spec | 4 ++-- - 6 files changed, 63 insertions(+), 6 deletions(-) - -diff --git a/dlls/vcomp/tests/work.c b/dlls/vcomp/tests/work.c -index 5abe0e1..981f741 100644 ---- a/dlls/vcomp/tests/work.c -+++ b/dlls/vcomp/tests/work.c -@@ -20,12 +20,15 @@ - - #include "wine/test.h" - -+static void WINAPIV (*p_vcomp_barrier)(void); - static void WINAPIV (*p_vcomp_fork)(DWORD parallel, int nargs, void *helper, ...); - static void CDECL (*p_vcomp_for_dynamic_init)(int flags, int first, int last, int mystep, int chunksize); - static int CDECL (*p_vcomp_for_dynamic_next)(int *pcounter, int *pchunklimit); - static void CDECL (*p_vcomp_for_static_end)(void); - static void CDECL (*p_vcomp_for_static_init)(int first, int last, int mystep, int chunksize, int *pnloops, int *pfirst, int *plast, int *pchunksize, int *pfinalchunkstart); - static void CDECL (*p_vcomp_for_static_simple_init)(int first, int last, int mystep, int step, int *pfirst, int *plast); -+static void CDECL (*p_vcomp_sections_init)(int n); -+static int CDECL (*p_vcomp_sections_next)(void); - - #define GETFUNC(x) do { p##x = (void*)GetProcAddress(vcomp, #x); ok(p##x != NULL, "Export '%s' not found\n", #x); } while(0) - -@@ -42,12 +45,15 @@ static BOOL init(void) - return FALSE; - } - -+ GETFUNC(_vcomp_barrier); - GETFUNC(_vcomp_fork); - GETFUNC(_vcomp_for_dynamic_init); - GETFUNC(_vcomp_for_dynamic_next); - GETFUNC(_vcomp_for_static_end); - GETFUNC(_vcomp_for_static_init); - GETFUNC(_vcomp_for_static_simple_init); -+ GETFUNC(_vcomp_sections_init); -+ GETFUNC(_vcomp_sections_next); - - return TRUE; - } -@@ -183,6 +189,33 @@ static void test_vcomp_for_static_simple_init(void) - ok(nsum == 6*13, "expected sum 6*13, got %d\n", nsum); - } - -+int section_calls[3]; -+ -+static void CDECL _test_vcomp_sections_worker(void) -+{ -+ p_vcomp_sections_init(3); -+ -+ for (;;) -+ { -+ int i = p_vcomp_sections_next(); -+ if (i < 0 || i >= 3) break; -+ section_calls[i]++; -+ } -+ -+ p_vcomp_barrier(); -+} -+ -+static void test_vcomp_sections(void) -+{ -+ section_calls[0] = 0; -+ section_calls[1] = 0; -+ section_calls[2] = 0; -+ p_vcomp_fork(1, 0, _test_vcomp_sections_worker); -+ ok(section_calls[0] == 1, "section 0 not called once\n"); -+ ok(section_calls[1] == 1, "section 1 not called once\n"); -+ ok(section_calls[2] == 1, "section 2 not called once\n"); -+} -+ - START_TEST(work) - { - if (!init()) -@@ -191,4 +224,5 @@ START_TEST(work) - test_vcomp_for_dynamic(); - test_vcomp_for_static_init(); - test_vcomp_for_static_simple_init(); -+ test_vcomp_sections(); - } -diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec -index f603660..1b02a65 100644 ---- a/dlls/vcomp/vcomp.spec -+++ b/dlls/vcomp/vcomp.spec -@@ -83,8 +83,8 @@ - @ stub _vcomp_reduction_u2 - @ stub _vcomp_reduction_u4 - @ stub _vcomp_reduction_u8 --@ stub _vcomp_sections_init --@ stub _vcomp_sections_next -+@ cdecl _vcomp_sections_init(long) -+@ cdecl _vcomp_sections_next() - @ cdecl _vcomp_set_num_threads(long) - @ cdecl _vcomp_single_begin(long) - @ cdecl _vcomp_single_end() -diff --git a/dlls/vcomp/vcomp_private.h b/dlls/vcomp/vcomp_private.h -index d3a7005..3d6c22b 100644 ---- a/dlls/vcomp/vcomp_private.h -+++ b/dlls/vcomp/vcomp_private.h -@@ -35,6 +35,11 @@ struct vcomp_team - int chunksize; - int flags; - } dyn_for; -+ struct -+ { -+ int counter; -+ int nsect; -+ } sections; - } work; - }; - -diff --git a/dlls/vcomp/work.c b/dlls/vcomp/work.c -index 87bce93..4370ec5 100644 ---- a/dlls/vcomp/work.c -+++ b/dlls/vcomp/work.c -@@ -97,3 +97,21 @@ void CDECL _vcomp_for_static_end(void) - { - TRACE("stub\n"); - } -+ -+void CDECL _vcomp_sections_init(int n) -+{ -+ struct vcomp_team *pt = vcomp_get_team(); -+ TRACE("(%d): stub\n", n); -+ pt->work.sections.counter = 0; -+ pt->work.sections.nsect = n; -+} -+ -+int CDECL _vcomp_sections_next(void) -+{ -+ struct vcomp_team *pt = vcomp_get_team(); -+ int i = pt->work.sections.counter++; -+ if (i >= pt->work.sections.nsect) -+ i = -1; -+ TRACE("stub; returning %d\n", i); -+ return i; -+} -diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec -index 48d5e3f..ab93ec2 100644 ---- a/dlls/vcomp100/vcomp100.spec -+++ b/dlls/vcomp100/vcomp100.spec -@@ -83,8 +83,8 @@ - @ stub _vcomp_reduction_u2 - @ stub _vcomp_reduction_u4 - @ stub _vcomp_reduction_u8 --@ stub _vcomp_sections_init --@ stub _vcomp_sections_next -+@ cdecl _vcomp_sections_init(long) vcomp._vcomp_sections_init -+@ cdecl _vcomp_sections_next() vcomp._vcomp_sections_next - @ cdecl _vcomp_set_num_threads(long) vcomp._vcomp_set_num_threads - @ cdecl _vcomp_single_begin(long) vcomp._vcomp_single_begin - @ cdecl _vcomp_single_end() vcomp._vcomp_single_end -diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec -index 48d5e3f..ab93ec2 100644 ---- a/dlls/vcomp90/vcomp90.spec -+++ b/dlls/vcomp90/vcomp90.spec -@@ -83,8 +83,8 @@ - @ stub _vcomp_reduction_u2 - @ stub _vcomp_reduction_u4 - @ stub _vcomp_reduction_u8 --@ stub _vcomp_sections_init --@ stub _vcomp_sections_next -+@ cdecl _vcomp_sections_init(long) vcomp._vcomp_sections_init -+@ cdecl _vcomp_sections_next() vcomp._vcomp_sections_next - @ cdecl _vcomp_set_num_threads(long) vcomp._vcomp_set_num_threads - @ cdecl _vcomp_single_begin(long) vcomp._vcomp_single_begin - @ cdecl _vcomp_single_end() vcomp._vcomp_single_end --- -2.2.1 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Stub_Functions/0007-vcomp-Add-a-warning-that-multithreading-is-not-yet-s.patch wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Stub_Functions/0007-vcomp-Add-a-warning-that-multithreading-is-not-yet-s.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Stub_Functions/0007-vcomp-Add-a-warning-that-multithreading-is-not-yet-s.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Stub_Functions/0007-vcomp-Add-a-warning-that-multithreading-is-not-yet-s.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -From 5748aa15dd5e619714e9a04a033b30bd1fdae7d7 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Thu, 29 Jan 2015 00:18:47 +0100 -Subject: vcomp: Add a warning that multithreading is not yet supported. - ---- - dlls/vcomp/main.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c -index e37cf16..1dd57dd 100644 ---- a/dlls/vcomp/main.c -+++ b/dlls/vcomp/main.c -@@ -126,6 +126,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) - ERR("Failed to allocate TLS index\n"); - return FALSE; - } -+ -+ FIXME("Builtin vcomp doesn't support multithreading, use native library for better performance.\n"); - break; - case DLL_PROCESS_DETACH: - TlsFree(vcomp_context_tls); --- -2.2.1 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Stub_Functions/definition wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Stub_Functions/definition --- wine-staging-1.7.46~ubuntu14.10.1/patches/vcomp-Stub_Functions/definition 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/vcomp-Stub_Functions/definition 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -Fixes: [31640] Implement additional stubs for vcomp dlls diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/wbemdisp-Timeout/0001-wbemprox-Silence-repeated-timeout-not-supported-fixm.patch wine-staging-1.7.47~ubuntu14.10.1/patches/wbemdisp-Timeout/0001-wbemprox-Silence-repeated-timeout-not-supported-fixm.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/wbemdisp-Timeout/0001-wbemprox-Silence-repeated-timeout-not-supported-fixm.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/wbemdisp-Timeout/0001-wbemprox-Silence-repeated-timeout-not-supported-fixm.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,29 @@ +From de11056b08110b83c3ce9e2f90c16280d6c74193 Mon Sep 17 00:00:00 2001 +From: Jarkko Korpi +Date: Mon, 6 Jul 2015 23:47:07 +0300 +Subject: wbemprox: Silence repeated "timeout not supported" fixme. + +--- + dlls/wbemprox/class.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/dlls/wbemprox/class.c b/dlls/wbemprox/class.c +index afb9f8c..5ce0381 100644 +--- a/dlls/wbemprox/class.c ++++ b/dlls/wbemprox/class.c +@@ -120,7 +120,11 @@ static HRESULT WINAPI enum_class_object_Next( + + if (!uCount) return WBEM_S_FALSE; + if (!apObjects || !puReturned) return WBEM_E_INVALID_PARAMETER; +- if (lTimeout != WBEM_INFINITE) FIXME("timeout not supported\n"); ++ if (lTimeout != WBEM_INFINITE) ++ { ++ static int once; ++ if (!once++) FIXME("timeout not supported\n"); ++ } + + *puReturned = 0; + if (ec->index >= view->count) return WBEM_S_FALSE; +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/wbemdisp-Timeout/definition wine-staging-1.7.47~ubuntu14.10.1/patches/wbemdisp-Timeout/definition --- wine-staging-1.7.46~ubuntu14.10.1/patches/wbemdisp-Timeout/definition 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/wbemdisp-Timeout/definition 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1 @@ +Fixes: [37618] Silence repeated wbemprox "timeout not supported" fixme diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/widl-Buffer_Overflow/0001-widl-Increase-buffer-size-in-typegen.c.patch wine-staging-1.7.47~ubuntu14.10.1/patches/widl-Buffer_Overflow/0001-widl-Increase-buffer-size-in-typegen.c.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/widl-Buffer_Overflow/0001-widl-Increase-buffer-size-in-typegen.c.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/widl-Buffer_Overflow/0001-widl-Increase-buffer-size-in-typegen.c.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,25 @@ +From 6f484b8e9cb7dcfcc8c3f0103012576b43572422 Mon Sep 17 00:00:00 2001 +From: Jarkko Korpi +Date: Fri, 10 Jul 2015 18:49:44 +0300 +Subject: widl: Increase buffer size in typegen.c. + +--- + tools/widl/typegen.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c +index 4bb4cc4..045a5b7 100644 +--- a/tools/widl/typegen.c ++++ b/tools/widl/typegen.c +@@ -1142,7 +1142,7 @@ static unsigned char get_func_oi2_flags( const var_t *func ) + static unsigned int write_new_procformatstring_type(FILE *file, int indent, const var_t *var, + int is_return, unsigned int *stack_offset) + { +- char buffer[64]; ++ char buffer[128]; + unsigned int stack_size, typestring_offset; + unsigned short flags; + unsigned char fc = get_parameter_fc( var, is_return, &flags, &stack_size, &typestring_offset ); +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/widl-Buffer_Overflow/definition wine-staging-1.7.47~ubuntu14.10.1/patches/widl-Buffer_Overflow/definition --- wine-staging-1.7.46~ubuntu14.10.1/patches/widl-Buffer_Overflow/definition 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/widl-Buffer_Overflow/definition 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1 @@ +Fixes: [37129] Increase buffer size in widl/typegen.c to avoid buffer overflow diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/wineconsole-Insert_Mode/0003-wineconsole-Add-InsertMode-to-HKCU.patch wine-staging-1.7.47~ubuntu14.10.1/patches/wineconsole-Insert_Mode/0003-wineconsole-Add-InsertMode-to-HKCU.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/wineconsole-Insert_Mode/0003-wineconsole-Add-InsertMode-to-HKCU.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/wineconsole-Insert_Mode/0003-wineconsole-Add-InsertMode-to-HKCU.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,79 +0,0 @@ -From 8ff887be7e2b57523f19534c1c83ae3e5111aa23 Mon Sep 17 00:00:00 2001 -From: Hugh McMaster -Date: Thu, 28 May 2015 21:30:08 +1000 -Subject: wineconsole: Add InsertMode to HKCU - ---- - programs/wineconsole/registry.c | 13 +++++++++++-- - programs/wineconsole/winecon_private.h | 1 + - 2 files changed, 12 insertions(+), 2 deletions(-) - -diff --git a/programs/wineconsole/registry.c b/programs/wineconsole/registry.c -index 2805f2a..c1d04c1 100644 ---- a/programs/wineconsole/registry.c -+++ b/programs/wineconsole/registry.c -@@ -40,6 +40,7 @@ static const WCHAR wszFontSize[] = {'F','o','n','t','S','i','z','e',0}; - static const WCHAR wszFontWeight[] = {'F','o','n','t','W','e','i','g','h','t',0}; - static const WCHAR wszHistoryBufferSize[] = {'H','i','s','t','o','r','y','B','u','f','f','e','r','S','i','z','e',0}; - static const WCHAR wszHistoryNoDup[] = {'H','i','s','t','o','r','y','N','o','D','u','p',0}; -+static const WCHAR wszInsertMode[] = {'I','n','s','e','r','t','M','o','d','e',0}; - static const WCHAR wszMenuMask[] = {'M','e','n','u','M','a','s','k',0}; - static const WCHAR wszQuickEdit[] = {'Q','u','i','c','k','E','d','i','t',0}; - static const WCHAR wszScreenBufferSize[] = {'S','c','r','e','e','n','B','u','f','f','e','r','S','i','z','e',0}; -@@ -48,10 +49,10 @@ static const WCHAR wszWindowSize[] = {'W','i','n','d','o','w','S','i','z' - - void WINECON_DumpConfig(const char* pfx, const struct config_data* cfg) - { -- WINE_TRACE("%s cell=(%u,%u) cursor=(%d,%d) attr=%02x font=%s/%u hist=%u/%d flags=%c%c msk=%08x sb=(%u,%u) win=(%u,%u)x(%u,%u) edit=%u registry=%s\n", -+ WINE_TRACE("%s cell=(%u,%u) cursor=(%d,%d) attr=%02x font=%s/%u hist=%u/%d flags=%c%c%c msk=%08x sb=(%u,%u) win=(%u,%u)x(%u,%u) edit=%u registry=%s\n", - pfx, cfg->cell_width, cfg->cell_height, cfg->cursor_size, cfg->cursor_visible, cfg->def_attr, - wine_dbgstr_w(cfg->face_name), cfg->font_weight, cfg->history_size, cfg->history_nodup ? 1 : 2, -- cfg->quick_edit ? 'Q' : 'q', cfg->exit_on_die ? 'X' : 'x', -+ cfg->insert_mode ? 'I' : 'i', cfg->quick_edit ? 'Q' : 'q', cfg->exit_on_die ? 'X' : 'x', - cfg->menu_mask, cfg->sb_width, cfg->sb_height, cfg->win_pos.X, cfg->win_pos.Y, cfg->win_width, cfg->win_height, - cfg->edition_mode, - wine_dbgstr_w(cfg->registry)); -@@ -126,6 +127,10 @@ static void WINECON_RegLoadHelper(HKEY hConKey, struct config_data* cfg) - cfg->history_nodup = val; - - count = sizeof(val); -+ if (!RegQueryValueExW(hConKey, wszInsertMode, 0, &type, (LPBYTE)&val, &count)) -+ cfg->insert_mode = val; -+ -+ count = sizeof(val); - if (!RegQueryValueExW(hConKey, wszMenuMask, 0, &type, (LPBYTE)&val, &count)) - cfg->menu_mask = val; - -@@ -175,6 +180,7 @@ void WINECON_RegLoad(const WCHAR* appname, struct config_data* cfg) - cfg->font_weight = 0; - cfg->history_size = 50; - cfg->history_nodup = 0; -+ cfg->insert_mode = 1; - cfg->menu_mask = 0; - cfg->quick_edit = 0; - cfg->sb_height = 25; -@@ -245,6 +251,9 @@ static void WINECON_RegSaveHelper(HKEY hConKey, const struct config_data* cfg) - val = cfg->history_nodup; - RegSetValueExW(hConKey, wszHistoryNoDup, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); - -+ val = cfg->insert_mode; -+ RegSetValueExW(hConKey, wszInsertMode, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); -+ - val = cfg->menu_mask; - RegSetValueExW(hConKey, wszMenuMask, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); - -diff --git a/programs/wineconsole/winecon_private.h b/programs/wineconsole/winecon_private.h -index eec4171..2178dd0 100644 ---- a/programs/wineconsole/winecon_private.h -+++ b/programs/wineconsole/winecon_private.h -@@ -36,6 +36,7 @@ struct config_data { - DWORD font_weight; - DWORD history_size; /* number of commands in history buffer */ - DWORD history_nodup; /* TRUE if commands are not stored twice in buffer */ -+ DWORD insert_mode; /* TRUE to insert text at the cursor location; FALSE to overwrite it */ - DWORD menu_mask; /* MK_CONTROL MK_SHIFT mask to drive submenu opening */ - DWORD quick_edit; /* whether mouse ops are sent to app (false) or used for content selection (true) */ - unsigned sb_width; /* active screen buffer width */ --- -2.4.1 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/wineconsole-Insert_Mode/0003-wineconsole-Add-InsertMode-to-the-user-dialog.patch wine-staging-1.7.47~ubuntu14.10.1/patches/wineconsole-Insert_Mode/0003-wineconsole-Add-InsertMode-to-the-user-dialog.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/wineconsole-Insert_Mode/0003-wineconsole-Add-InsertMode-to-the-user-dialog.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/wineconsole-Insert_Mode/0003-wineconsole-Add-InsertMode-to-the-user-dialog.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,126 @@ +From 51f0cd8d176e8889b969ba9f02de67041c30b313 Mon Sep 17 00:00:00 2001 +From: Hugh McMaster +Date: Thu, 28 May 2015 21:53:55 +1000 +Subject: wineconsole: Add InsertMode to the user dialog + +--- + programs/wineconsole/dialog.c | 5 +++++ + programs/wineconsole/wineconsole.c | 32 +++++++++++++++++++++++++++++++- + programs/wineconsole/wineconsole.rc | 1 + + programs/wineconsole/wineconsole_res.h | 1 + + 4 files changed, 38 insertions(+), 1 deletion(-) + +diff --git a/programs/wineconsole/dialog.c b/programs/wineconsole/dialog.c +index 8573d07..493990d 100644 +--- a/programs/wineconsole/dialog.c ++++ b/programs/wineconsole/dialog.c +@@ -76,6 +76,8 @@ static INT_PTR WINAPI WCUSER_OptionDlgProc(HWND hDlg, UINT msg, WPARAM wParam, L + SetDlgItemInt(hDlg, IDC_OPT_HIST_SIZE, di->config.history_size, FALSE); + SendDlgItemMessageW(hDlg, IDC_OPT_HIST_NODOUBLE, BM_SETCHECK, + (di->config.history_nodup) ? BST_CHECKED : BST_UNCHECKED, 0); ++ SendDlgItemMessageW(hDlg, IDC_OPT_INSERT_MODE, BM_SETCHECK, ++ (di->config.insert_mode) ? BST_CHECKED : BST_UNCHECKED, 0); + SendDlgItemMessageW(hDlg, IDC_OPT_CONF_CTRL, BM_SETCHECK, + (di->config.menu_mask & MK_CONTROL) ? BST_CHECKED : BST_UNCHECKED, 0); + SendDlgItemMessageW(hDlg, IDC_OPT_CONF_SHIFT, BM_SETCHECK, +@@ -121,6 +123,9 @@ static INT_PTR WINAPI WCUSER_OptionDlgProc(HWND hDlg, UINT msg, WPARAM wParam, L + val = (IsDlgButtonChecked(hDlg, IDC_OPT_HIST_NODOUBLE) & BST_CHECKED) != 0; + di->config.history_nodup = val; + ++ val = (IsDlgButtonChecked(hDlg, IDC_OPT_INSERT_MODE) & BST_CHECKED) != 0; ++ di->config.insert_mode = val; ++ + val = 0; + if (IsDlgButtonChecked(hDlg, IDC_OPT_CONF_CTRL) & BST_CHECKED) val |= MK_CONTROL; + if (IsDlgButtonChecked(hDlg, IDC_OPT_CONF_SHIFT) & BST_CHECKED) val |= MK_SHIFT; +diff --git a/programs/wineconsole/wineconsole.c b/programs/wineconsole/wineconsole.c +index ed5f816..b7a968c 100644 +--- a/programs/wineconsole/wineconsole.c ++++ b/programs/wineconsole/wineconsole.c +@@ -150,6 +150,25 @@ static BOOL WINECON_SetHistoryMode(HANDLE hConIn, int mode) + } + + /****************************************************************** ++ * WINECON_SetInsertMode ++ * ++ * ++ */ ++static void WINECON_SetInsertMode(HANDLE hConIn, int enable) ++{ ++ DWORD mode; ++ ++ if (GetConsoleMode( hConIn, &mode )) ++ { ++ if (enable) ++ mode |= ENABLE_INSERT_MODE|ENABLE_EXTENDED_FLAGS; ++ else ++ mode &= ~ENABLE_INSERT_MODE; ++ SetConsoleMode( hConIn, mode ); ++ } ++} ++ ++/****************************************************************** + * WINECON_GetConsoleTitle + * + * +@@ -397,6 +416,11 @@ void WINECON_SetConfig(struct inner_data* data, const struct config_data* cf + data->curcfg.history_nodup = cfg->history_nodup; + WINECON_SetHistoryMode(data->hConIn, cfg->history_nodup); + } ++ if (data->curcfg.insert_mode != cfg->insert_mode) ++ { ++ data->curcfg.insert_mode = cfg->insert_mode; ++ WINECON_SetInsertMode(data->hConIn, cfg->insert_mode); ++ } + data->curcfg.menu_mask = cfg->menu_mask; + data->curcfg.quick_edit = cfg->quick_edit; + if (1 /* FIXME: font info has changed */) +@@ -533,7 +557,12 @@ static void WINECON_Delete(struct inner_data* data) + */ + static BOOL WINECON_GetServerConfig(struct inner_data* data) + { +- BOOL ret; ++ BOOL ret; ++ DWORD mode; ++ ++ if (!GetConsoleMode( data->hConIn, &mode )) mode = 0; ++ data->curcfg.insert_mode = (mode & (ENABLE_INSERT_MODE|ENABLE_EXTENDED_FLAGS)) == ++ (ENABLE_INSERT_MODE|ENABLE_EXTENDED_FLAGS); + + SERVER_START_REQ(get_console_input_info) + { +@@ -545,6 +574,7 @@ static BOOL WINECON_GetServerConfig(struct inner_data* data) + } + SERVER_END_REQ; + if (!ret) return FALSE; ++ + SERVER_START_REQ(get_console_output_info) + { + req->handle = wine_server_obj_handle( data->hConOut ); +diff --git a/programs/wineconsole/wineconsole.rc b/programs/wineconsole/wineconsole.rc +index 4226ba3..a3afa1b 100644 +--- a/programs/wineconsole/wineconsole.rc ++++ b/programs/wineconsole/wineconsole.rc +@@ -66,6 +66,7 @@ FONT 8, "MS Shell Dlg" + + GROUPBOX "Console", -1, 80, 5, 120, 54, BS_GROUPBOX + AUTOCHECKBOX "&QuickEdit mode", IDC_OPT_QUICK_EDIT, 84, 18, 70, 10, WS_TABSTOP ++ AUTOCHECKBOX "&Insert mode", IDC_OPT_INSERT_MODE, 84, 30, 70, 10, WS_TABSTOP + + GROUPBOX "Popup menu", -1, 5, 61, 70, 42, BS_GROUPBOX + AUTOCHECKBOX "&Control", IDC_OPT_CONF_CTRL, 9, 74, 60, 10, WS_TABSTOP +diff --git a/programs/wineconsole/wineconsole_res.h b/programs/wineconsole/wineconsole_res.h +index ac62b58..8261fd5 100644 +--- a/programs/wineconsole/wineconsole_res.h ++++ b/programs/wineconsole/wineconsole_res.h +@@ -70,6 +70,7 @@ + #define IDC_OPT_CONF_CTRL 0x0107 + #define IDC_OPT_CONF_SHIFT 0x0108 + #define IDC_OPT_QUICK_EDIT 0x0109 ++#define IDC_OPT_INSERT_MODE 0x0110 + + #define IDC_FNT_LIST_FONT 0x0201 + #define IDC_FNT_LIST_SIZE 0x0202 +-- +2.4.1 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/wineconsole-Insert_Mode/0004-wineconsole-Add-InsertMode-to-the-user-dialog.patch wine-staging-1.7.47~ubuntu14.10.1/patches/wineconsole-Insert_Mode/0004-wineconsole-Add-InsertMode-to-the-user-dialog.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/wineconsole-Insert_Mode/0004-wineconsole-Add-InsertMode-to-the-user-dialog.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/wineconsole-Insert_Mode/0004-wineconsole-Add-InsertMode-to-the-user-dialog.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,126 +0,0 @@ -From 51f0cd8d176e8889b969ba9f02de67041c30b313 Mon Sep 17 00:00:00 2001 -From: Hugh McMaster -Date: Thu, 28 May 2015 21:53:55 +1000 -Subject: wineconsole: Add InsertMode to the user dialog - ---- - programs/wineconsole/dialog.c | 5 +++++ - programs/wineconsole/wineconsole.c | 32 +++++++++++++++++++++++++++++++- - programs/wineconsole/wineconsole.rc | 1 + - programs/wineconsole/wineconsole_res.h | 1 + - 4 files changed, 38 insertions(+), 1 deletion(-) - -diff --git a/programs/wineconsole/dialog.c b/programs/wineconsole/dialog.c -index 8573d07..493990d 100644 ---- a/programs/wineconsole/dialog.c -+++ b/programs/wineconsole/dialog.c -@@ -76,6 +76,8 @@ static INT_PTR WINAPI WCUSER_OptionDlgProc(HWND hDlg, UINT msg, WPARAM wParam, L - SetDlgItemInt(hDlg, IDC_OPT_HIST_SIZE, di->config.history_size, FALSE); - SendDlgItemMessageW(hDlg, IDC_OPT_HIST_NODOUBLE, BM_SETCHECK, - (di->config.history_nodup) ? BST_CHECKED : BST_UNCHECKED, 0); -+ SendDlgItemMessageW(hDlg, IDC_OPT_INSERT_MODE, BM_SETCHECK, -+ (di->config.insert_mode) ? BST_CHECKED : BST_UNCHECKED, 0); - SendDlgItemMessageW(hDlg, IDC_OPT_CONF_CTRL, BM_SETCHECK, - (di->config.menu_mask & MK_CONTROL) ? BST_CHECKED : BST_UNCHECKED, 0); - SendDlgItemMessageW(hDlg, IDC_OPT_CONF_SHIFT, BM_SETCHECK, -@@ -121,6 +123,9 @@ static INT_PTR WINAPI WCUSER_OptionDlgProc(HWND hDlg, UINT msg, WPARAM wParam, L - val = (IsDlgButtonChecked(hDlg, IDC_OPT_HIST_NODOUBLE) & BST_CHECKED) != 0; - di->config.history_nodup = val; - -+ val = (IsDlgButtonChecked(hDlg, IDC_OPT_INSERT_MODE) & BST_CHECKED) != 0; -+ di->config.insert_mode = val; -+ - val = 0; - if (IsDlgButtonChecked(hDlg, IDC_OPT_CONF_CTRL) & BST_CHECKED) val |= MK_CONTROL; - if (IsDlgButtonChecked(hDlg, IDC_OPT_CONF_SHIFT) & BST_CHECKED) val |= MK_SHIFT; -diff --git a/programs/wineconsole/wineconsole.c b/programs/wineconsole/wineconsole.c -index ed5f816..b7a968c 100644 ---- a/programs/wineconsole/wineconsole.c -+++ b/programs/wineconsole/wineconsole.c -@@ -150,6 +150,25 @@ static BOOL WINECON_SetHistoryMode(HANDLE hConIn, int mode) - } - - /****************************************************************** -+ * WINECON_SetInsertMode -+ * -+ * -+ */ -+static void WINECON_SetInsertMode(HANDLE hConIn, int enable) -+{ -+ DWORD mode; -+ -+ if (GetConsoleMode( hConIn, &mode )) -+ { -+ if (enable) -+ mode |= ENABLE_INSERT_MODE|ENABLE_EXTENDED_FLAGS; -+ else -+ mode &= ~ENABLE_INSERT_MODE; -+ SetConsoleMode( hConIn, mode ); -+ } -+} -+ -+/****************************************************************** - * WINECON_GetConsoleTitle - * - * -@@ -397,6 +416,11 @@ void WINECON_SetConfig(struct inner_data* data, const struct config_data* cf - data->curcfg.history_nodup = cfg->history_nodup; - WINECON_SetHistoryMode(data->hConIn, cfg->history_nodup); - } -+ if (data->curcfg.insert_mode != cfg->insert_mode) -+ { -+ data->curcfg.insert_mode = cfg->insert_mode; -+ WINECON_SetInsertMode(data->hConIn, cfg->insert_mode); -+ } - data->curcfg.menu_mask = cfg->menu_mask; - data->curcfg.quick_edit = cfg->quick_edit; - if (1 /* FIXME: font info has changed */) -@@ -533,7 +557,12 @@ static void WINECON_Delete(struct inner_data* data) - */ - static BOOL WINECON_GetServerConfig(struct inner_data* data) - { -- BOOL ret; -+ BOOL ret; -+ DWORD mode; -+ -+ if (!GetConsoleMode( data->hConIn, &mode )) mode = 0; -+ data->curcfg.insert_mode = (mode & (ENABLE_INSERT_MODE|ENABLE_EXTENDED_FLAGS)) == -+ (ENABLE_INSERT_MODE|ENABLE_EXTENDED_FLAGS); - - SERVER_START_REQ(get_console_input_info) - { -@@ -545,6 +574,7 @@ static BOOL WINECON_GetServerConfig(struct inner_data* data) - } - SERVER_END_REQ; - if (!ret) return FALSE; -+ - SERVER_START_REQ(get_console_output_info) - { - req->handle = wine_server_obj_handle( data->hConOut ); -diff --git a/programs/wineconsole/wineconsole.rc b/programs/wineconsole/wineconsole.rc -index 4226ba3..a3afa1b 100644 ---- a/programs/wineconsole/wineconsole.rc -+++ b/programs/wineconsole/wineconsole.rc -@@ -66,6 +66,7 @@ FONT 8, "MS Shell Dlg" - - GROUPBOX "Console", -1, 80, 5, 120, 54, BS_GROUPBOX - AUTOCHECKBOX "&QuickEdit mode", IDC_OPT_QUICK_EDIT, 84, 18, 70, 10, WS_TABSTOP -+ AUTOCHECKBOX "&Insert mode", IDC_OPT_INSERT_MODE, 84, 30, 70, 10, WS_TABSTOP - - GROUPBOX "Popup menu", -1, 5, 61, 70, 42, BS_GROUPBOX - AUTOCHECKBOX "&Control", IDC_OPT_CONF_CTRL, 9, 74, 60, 10, WS_TABSTOP -diff --git a/programs/wineconsole/wineconsole_res.h b/programs/wineconsole/wineconsole_res.h -index ac62b58..8261fd5 100644 ---- a/programs/wineconsole/wineconsole_res.h -+++ b/programs/wineconsole/wineconsole_res.h -@@ -70,6 +70,7 @@ - #define IDC_OPT_CONF_CTRL 0x0107 - #define IDC_OPT_CONF_SHIFT 0x0108 - #define IDC_OPT_QUICK_EDIT 0x0109 -+#define IDC_OPT_INSERT_MODE 0x0110 - - #define IDC_FNT_LIST_FONT 0x0201 - #define IDC_FNT_LIST_SIZE 0x0202 --- -2.4.1 - diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/wined3d-CSMT_Main/0046-wined3d-Hackily-introduce-a-multithreaded-command-st.patch wine-staging-1.7.47~ubuntu14.10.1/patches/wined3d-CSMT_Main/0046-wined3d-Hackily-introduce-a-multithreaded-command-st.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/wined3d-CSMT_Main/0046-wined3d-Hackily-introduce-a-multithreaded-command-st.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/wined3d-CSMT_Main/0046-wined3d-Hackily-introduce-a-multithreaded-command-st.patch 2015-07-12 05:53:31.000000000 +0000 @@ -1,4 +1,4 @@ -From 449e8ea8593261284351648eb19504e8e8769dde Mon Sep 17 00:00:00 2001 +From 37df70888f1e9c12f63d5fc3a511ec34fce4b10d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20D=C3=B6singer?= Date: Tue, 1 Oct 2013 14:31:56 +0200 Subject: wined3d: Hackily introduce a multithreaded command stream @@ -10,7 +10,7 @@ 3 files changed, 368 insertions(+), 39 deletions(-) diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c -index 639dc4f..9247d98 100644 +index daebc94..40c04db 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -24,8 +24,19 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d); @@ -467,7 +467,7 @@ { const struct wined3d_d3d_info *d3d_info = &cs->device->adapter->d3d_info; const struct wined3d_cs_set_texture *op = data; -@@ -708,6 +885,8 @@ static void wined3d_cs_exec_set_texture(struct wined3d_cs *cs, const void *data) +@@ -710,6 +887,8 @@ static void wined3d_cs_exec_set_texture(struct wined3d_cs *cs, const void *data) if (new_use_color_key) device_invalidate_state(cs->device, STATE_COLOR_KEY); @@ -476,7 +476,7 @@ } void wined3d_cs_emit_set_texture(struct wined3d_cs *cs, UINT stage, struct wined3d_texture *texture) -@@ -722,12 +901,14 @@ void wined3d_cs_emit_set_texture(struct wined3d_cs *cs, UINT stage, struct wined +@@ -724,12 +903,14 @@ void wined3d_cs_emit_set_texture(struct wined3d_cs *cs, UINT stage, struct wined cs->ops->submit(cs); } @@ -492,7 +492,7 @@ } void wined3d_cs_emit_set_shader_resource_view(struct wined3d_cs *cs, enum wined3d_shader_type type, -@@ -744,12 +925,14 @@ void wined3d_cs_emit_set_shader_resource_view(struct wined3d_cs *cs, enum wined3 +@@ -746,12 +927,14 @@ void wined3d_cs_emit_set_shader_resource_view(struct wined3d_cs *cs, enum wined3 cs->ops->submit(cs); } @@ -508,7 +508,7 @@ } void wined3d_cs_emit_set_sampler(struct wined3d_cs *cs, enum wined3d_shader_type type, -@@ -766,13 +949,15 @@ void wined3d_cs_emit_set_sampler(struct wined3d_cs *cs, enum wined3d_shader_type +@@ -768,13 +951,15 @@ void wined3d_cs_emit_set_sampler(struct wined3d_cs *cs, enum wined3d_shader_type cs->ops->submit(cs); } @@ -525,7 +525,7 @@ } void wined3d_cs_emit_set_shader(struct wined3d_cs *cs, enum wined3d_shader_type type, struct wined3d_shader *shader) -@@ -787,12 +972,14 @@ void wined3d_cs_emit_set_shader(struct wined3d_cs *cs, enum wined3d_shader_type +@@ -789,12 +974,14 @@ void wined3d_cs_emit_set_shader(struct wined3d_cs *cs, enum wined3d_shader_type cs->ops->submit(cs); } @@ -541,7 +541,7 @@ } void wined3d_cs_emit_set_render_state(struct wined3d_cs *cs, enum wined3d_render_state state, DWORD value) -@@ -807,12 +994,14 @@ void wined3d_cs_emit_set_render_state(struct wined3d_cs *cs, enum wined3d_render +@@ -809,12 +996,14 @@ void wined3d_cs_emit_set_render_state(struct wined3d_cs *cs, enum wined3d_render cs->ops->submit(cs); } @@ -557,7 +557,7 @@ } void wined3d_cs_emit_set_texture_state(struct wined3d_cs *cs, UINT stage, -@@ -829,12 +1018,14 @@ void wined3d_cs_emit_set_texture_state(struct wined3d_cs *cs, UINT stage, +@@ -831,12 +1020,14 @@ void wined3d_cs_emit_set_texture_state(struct wined3d_cs *cs, UINT stage, cs->ops->submit(cs); } @@ -573,7 +573,7 @@ } void wined3d_cs_emit_set_sampler_state(struct wined3d_cs *cs, UINT sampler_idx, -@@ -851,13 +1042,15 @@ void wined3d_cs_emit_set_sampler_state(struct wined3d_cs *cs, UINT sampler_idx, +@@ -853,13 +1044,15 @@ void wined3d_cs_emit_set_sampler_state(struct wined3d_cs *cs, UINT sampler_idx, cs->ops->submit(cs); } @@ -584,14 +584,14 @@ - cs->state.transforms[op->state] = *op->matrix; + cs->state.transforms[op->state] = op->matrix; - if (op->state < WINED3D_TS_WORLD_MATRIX(cs->device->adapter->gl_info.limits.blends)) + if (op->state < WINED3D_TS_WORLD_MATRIX(cs->device->adapter->d3d_info.limits.ffp_vertex_blend_matrices)) device_invalidate_state(cs->device, STATE_TRANSFORM(op->state)); + + return sizeof(*op); } void wined3d_cs_emit_set_transform(struct wined3d_cs *cs, enum wined3d_transform_state state, -@@ -868,17 +1061,19 @@ void wined3d_cs_emit_set_transform(struct wined3d_cs *cs, enum wined3d_transform +@@ -870,17 +1063,19 @@ void wined3d_cs_emit_set_transform(struct wined3d_cs *cs, enum wined3d_transform op = cs->ops->require_space(cs, sizeof(*op)); op->opcode = WINED3D_CS_OP_SET_TRANSFORM; op->state = state; @@ -614,7 +614,7 @@ } void wined3d_cs_emit_set_clip_plane(struct wined3d_cs *cs, UINT plane_idx, const struct wined3d_vec4 *plane) -@@ -888,12 +1083,12 @@ void wined3d_cs_emit_set_clip_plane(struct wined3d_cs *cs, UINT plane_idx, const +@@ -890,12 +1085,12 @@ void wined3d_cs_emit_set_clip_plane(struct wined3d_cs *cs, UINT plane_idx, const op = cs->ops->require_space(cs, sizeof(*op)); op->opcode = WINED3D_CS_OP_SET_CLIP_PLANE; op->plane_idx = plane_idx; @@ -629,7 +629,7 @@ { const struct wined3d_cs_set_color_key *op = data; struct wined3d_texture *texture = op->texture; -@@ -954,6 +1149,8 @@ static void wined3d_cs_exec_set_color_key(struct wined3d_cs *cs, const void *dat +@@ -956,6 +1151,8 @@ static void wined3d_cs_exec_set_color_key(struct wined3d_cs *cs, const void *dat break; } } @@ -638,7 +638,7 @@ } void wined3d_cs_emit_set_color_key(struct wined3d_cs *cs, struct wined3d_texture *texture, -@@ -976,12 +1173,14 @@ void wined3d_cs_emit_set_color_key(struct wined3d_cs *cs, struct wined3d_texture +@@ -978,12 +1175,14 @@ void wined3d_cs_emit_set_color_key(struct wined3d_cs *cs, struct wined3d_texture cs->ops->submit(cs); } @@ -655,7 +655,7 @@ } void wined3d_cs_emit_set_material(struct wined3d_cs *cs, const struct wined3d_material *material) -@@ -990,12 +1189,12 @@ void wined3d_cs_emit_set_material(struct wined3d_cs *cs, const struct wined3d_ma +@@ -992,12 +1191,12 @@ void wined3d_cs_emit_set_material(struct wined3d_cs *cs, const struct wined3d_ma op = cs->ops->require_space(cs, sizeof(*op)); op->opcode = WINED3D_CS_OP_SET_MATERIAL; @@ -670,7 +670,7 @@ { struct wined3d_adapter *adapter = cs->device->adapter; HRESULT hr; -@@ -1005,6 +1204,8 @@ static void wined3d_cs_exec_reset_state(struct wined3d_cs *cs, const void *data) +@@ -1007,6 +1206,8 @@ static void wined3d_cs_exec_reset_state(struct wined3d_cs *cs, const void *data) if (FAILED(hr = state_init(&cs->state, &adapter->gl_info, &adapter->d3d_info, WINED3D_STATE_NO_REF | WINED3D_STATE_INIT_DEFAULT))) ERR("Failed to initialize CS state, hr %#x.\n", hr); @@ -679,7 +679,7 @@ } void wined3d_cs_emit_reset_state(struct wined3d_cs *cs) -@@ -1017,8 +1218,9 @@ void wined3d_cs_emit_reset_state(struct wined3d_cs *cs) +@@ -1019,8 +1220,9 @@ void wined3d_cs_emit_reset_state(struct wined3d_cs *cs) cs->ops->submit(cs); } @@ -690,7 +690,7 @@ /* WINED3D_CS_OP_PRESENT */ wined3d_cs_exec_present, /* WINED3D_CS_OP_CLEAR */ wined3d_cs_exec_clear, /* WINED3D_CS_OP_DRAW */ wined3d_cs_exec_draw, -@@ -1077,6 +1279,58 @@ static const struct wined3d_cs_ops wined3d_cs_st_ops = +@@ -1079,6 +1281,58 @@ static const struct wined3d_cs_ops wined3d_cs_st_ops = wined3d_cs_st_submit, }; @@ -749,7 +749,7 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) { const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; -@@ -1102,12 +1356,60 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) +@@ -1104,12 +1358,60 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) return NULL; } @@ -838,10 +838,10 @@ if (appkey) RegCloseKey( appkey ); diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h -index 089faa4..2addced 100644 +index 59f9772..01c045b 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h -@@ -278,6 +278,7 @@ struct wined3d_settings +@@ -279,6 +279,7 @@ struct wined3d_settings unsigned int max_sm_gs; unsigned int max_sm_ps; BOOL no_3d; @@ -849,7 +849,7 @@ }; extern struct wined3d_settings wined3d_settings DECLSPEC_HIDDEN; -@@ -2573,6 +2574,18 @@ HRESULT state_init(struct wined3d_state *state, const struct wined3d_gl_info *gl +@@ -2589,6 +2590,18 @@ HRESULT state_init(struct wined3d_state *state, const struct wined3d_gl_info *gl const struct wined3d_d3d_info *d3d_info, DWORD flags) DECLSPEC_HIDDEN; void state_unbind_resources(struct wined3d_state *state) DECLSPEC_HIDDEN; @@ -868,7 +868,7 @@ struct wined3d_cs_ops { void *(*require_space)(struct wined3d_cs *cs, size_t size); -@@ -2584,9 +2597,14 @@ struct wined3d_cs +@@ -2600,9 +2613,14 @@ struct wined3d_cs const struct wined3d_cs_ops *ops; struct wined3d_device *device; struct wined3d_state state; @@ -884,5 +884,5 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) DECLSPEC_HIDDEN; -- -2.3.5 +2.4.4 diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/wined3d-CSMT_Main/9999-IfDefined.patch wine-staging-1.7.47~ubuntu14.10.1/patches/wined3d-CSMT_Main/9999-IfDefined.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/wined3d-CSMT_Main/9999-IfDefined.patch 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/wined3d-CSMT_Main/9999-IfDefined.patch 2015-07-12 05:53:31.000000000 +0000 @@ -408,7 +408,7 @@ float scale; union -@@ -4174,9 +4206,15 @@ +@@ -4178,9 +4210,15 @@ } } } else { @@ -424,7 +424,7 @@ WARN("unsupported blending in openGl\n"); } } -@@ -4530,7 +4568,11 @@ +@@ -4534,7 +4572,11 @@ static void viewport_miscpart(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { @@ -436,7 +436,7 @@ const struct wined3d_gl_info *gl_info = context->gl_info; struct wined3d_viewport vp = state->viewport; -@@ -4708,7 +4750,11 @@ +@@ -4712,7 +4754,11 @@ } else { @@ -448,7 +448,7 @@ UINT height; UINT width; -@@ -4772,7 +4818,11 @@ +@@ -4776,7 +4822,11 @@ void state_srgbwrite(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { @@ -1099,7 +1099,7 @@ diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c -@@ -3514,7 +3514,11 @@ +@@ -3523,7 +3523,11 @@ float y_offset = context->render_offscreen ? (center_offset - (2.0f * y) - h) / h : (center_offset - (2.0f * y) - h) / -h; @@ -1111,7 +1111,7 @@ state->render_states[WINED3D_RS_ZENABLE] : WINED3D_ZB_FALSE; float z_scale = zenable ? 2.0f : 0.0f; float z_offset = zenable ? -1.0f : 0.0f; -@@ -3637,6 +3641,7 @@ +@@ -3646,6 +3650,7 @@ /* case WINED3D_TTFF_COUNT1: Won't ever get here. */ case WINED3D_TTFF_COUNT2: mat._13 = mat._23 = mat._33 = mat._43 = 0.0f; @@ -1119,7 +1119,7 @@ /* OpenGL divides the first 3 vertex coord by the 4th by default, * which is essentially the same as D3DTTFF_PROJECTED. Make sure that * the 4th coord evaluates to 1.0 to eliminate that. -@@ -3649,6 +3654,20 @@ +@@ -3658,6 +3663,20 @@ * A more serious problem occurs if the app passes 4 coordinates in, and the * 4th is != 1.0(opengl default). This would have to be fixed in draw_strided_slow * or a replacement shader. */ @@ -1140,7 +1140,7 @@ default: mat._14 = mat._24 = mat._34 = 0.0f; mat._44 = 1.0f; } -@@ -4104,7 +4123,11 @@ +@@ -4113,7 +4132,11 @@ unsigned int i; DWORD ttff; DWORD cop, aop, carg0, carg1, carg2, aarg0, aarg1, aarg2; @@ -1155,7 +1155,7 @@ diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c --- a/dlls/wined3d/wined3d_main.c +++ b/dlls/wined3d/wined3d_main.c -@@ -85,8 +85,10 @@ +@@ -86,8 +86,10 @@ ~0U, /* No GS shader model limit by default. */ ~0U, /* No PS shader model limit by default. */ FALSE, /* 3D support enabled by default. */ @@ -1166,7 +1166,7 @@ }; struct wined3d * CDECL wined3d_create(DWORD flags) -@@ -306,6 +308,7 @@ +@@ -316,6 +318,7 @@ TRACE("Disabling 3D support.\n"); wined3d_settings.no_3d = TRUE; } @@ -1174,7 +1174,7 @@ if (!get_config_key(hkey, appkey, "CSMT", buffer, size) && !strcmp(buffer,"disabled")) { -@@ -322,6 +325,9 @@ +@@ -332,6 +335,9 @@ FIXME_(winediag)("Experimental wined3d CSMT feature is currently %s.\n", wined3d_settings.cs_multithreaded ? "enabled" : "disabled"); @@ -1291,7 +1291,7 @@ diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c -@@ -1475,6 +1475,7 @@ +@@ -1509,6 +1509,7 @@ goto out; } @@ -1299,7 +1299,7 @@ ret->current_fb.render_targets = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ret->current_fb.render_targets) * gl_info->limits.buffers); ret->current_fb.rt_size = gl_info->limits.buffers; -@@ -1483,6 +1484,7 @@ +@@ -1517,6 +1518,7 @@ if (device->context_count) ret->offscreenBuffer = device->contexts[0]->offscreenBuffer; @@ -1307,7 +1307,7 @@ /* Initialize the texture unit mapping to a 1:1 mapping */ for (s = 0; s < MAX_COMBINED_SAMPLERS; ++s) { -@@ -1801,7 +1803,9 @@ +@@ -1821,7 +1823,9 @@ out: device->shader_backend->shader_free_context_data(ret); device->adapter->fragment_pipe->free_context_data(ret); @@ -1317,7 +1317,7 @@ HeapFree(GetProcessHeap(), 0, ret->free_event_queries); HeapFree(GetProcessHeap(), 0, ret->free_occlusion_queries); HeapFree(GetProcessHeap(), 0, ret->free_timestamp_queries); -@@ -1836,7 +1840,9 @@ +@@ -1856,7 +1860,9 @@ device->shader_backend->shader_free_context_data(context); device->adapter->fragment_pipe->free_context_data(context); @@ -1327,7 +1327,7 @@ HeapFree(GetProcessHeap(), 0, context->draw_buffers); HeapFree(GetProcessHeap(), 0, context->blit_targets); device_context_remove(device, context); -@@ -2244,7 +2250,11 @@ +@@ -2264,7 +2270,11 @@ return TRUE; } @@ -1339,7 +1339,7 @@ static void context_validate_onscreen_formats(struct wined3d_context *context, const struct wined3d_rendertarget_view *depth_stencil) { -@@ -2260,6 +2270,7 @@ +@@ -2280,6 +2290,7 @@ WARN("Depth stencil format is not supported by WGL, rendering the backbuffer in an FBO\n"); /* The currently active context is the necessary context to access the swapchain's onscreen buffers */ @@ -1347,7 +1347,7 @@ wined3d_resource_load_location(&context->current_rt->resource, context, WINED3D_LOCATION_TEXTURE_RGB); swapchain->render_to_fbo = TRUE; swapchain_update_draw_bindings(swapchain); -@@ -2274,6 +2285,22 @@ +@@ -2294,6 +2305,22 @@ return context_generate_rt_mask_from_surface(rt); else return context_generate_rt_mask(context->offscreenBuffer); @@ -1370,7 +1370,7 @@ } /* Context activation is done by the caller. */ -@@ -2305,7 +2332,11 @@ +@@ -2325,7 +2352,11 @@ } else { @@ -1382,7 +1382,7 @@ } cur_mask = context->current_fbo ? &context->current_fbo->rt_mask : &context->draw_buffers_mask; -@@ -2352,7 +2383,11 @@ +@@ -2372,7 +2403,11 @@ DWORD rt_mask = 0, *cur_mask; UINT i; @@ -1394,7 +1394,7 @@ || rt_count != context->gl_info->limits.buffers) { if (!context_validate_rt_config(rt_count, rts, dsv)) -@@ -2394,11 +2429,17 @@ +@@ -2414,11 +2449,17 @@ } else { @@ -1412,7 +1412,7 @@ } else if (wined3d_settings.offscreen_rendering_mode == ORM_FBO && (!rt_count || wined3d_resource_is_offscreen(rts[0]->resource))) -@@ -2411,7 +2452,11 @@ +@@ -2431,7 +2472,11 @@ } else { @@ -1424,7 +1424,7 @@ rt_count ? wined3d_rendertarget_view_get_surface(rts[0]) : NULL); } -@@ -2446,6 +2491,7 @@ +@@ -2466,6 +2511,7 @@ return TRUE; } @@ -1432,7 +1432,7 @@ static DWORD find_draw_buffers_mask(const struct wined3d_context *context, const struct wined3d_state *state) { struct wined3d_rendertarget_view **rts = state->fb.render_targets; -@@ -2455,6 +2501,18 @@ +@@ -2475,6 +2521,18 @@ if (wined3d_settings.offscreen_rendering_mode != ORM_FBO) return context_generate_rt_mask_no_fbo(context, wined3d_rendertarget_view_get_surface(rts[0])); @@ -1451,7 +1451,7 @@ else if (!context->render_offscreen) return context_generate_rt_mask_from_surface(wined3d_rendertarget_view_get_surface(rts[0])); -@@ -2477,8 +2535,14 @@ +@@ -2497,8 +2555,14 @@ /* Context activation is done by the caller. */ void context_state_fb(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { @@ -1466,7 +1466,7 @@ DWORD *cur_mask; if (wined3d_settings.offscreen_rendering_mode == ORM_FBO) -@@ -2509,8 +2573,10 @@ +@@ -2529,8 +2593,10 @@ context_apply_draw_buffers(context, rt_mask); *cur_mask = rt_mask; } @@ -1477,7 +1477,7 @@ } static void context_map_stage(struct wined3d_context *context, DWORD stage, DWORD unit) -@@ -2748,12 +2814,22 @@ +@@ -2768,12 +2834,22 @@ /* Context activation is done by the caller. */ void context_state_drawbuf(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { @@ -1500,7 +1500,7 @@ if (rt_mask != *cur_mask) { context_apply_draw_buffers(context, rt_mask); -@@ -2955,7 +3031,11 @@ +@@ -2975,7 +3051,11 @@ { if (state->vertex_declaration->half_float_conv_needed && !stream_info->all_vbo) { @@ -1512,7 +1512,7 @@ context->use_immediate_mode_draw = TRUE; } else -@@ -3095,11 +3175,19 @@ +@@ -3115,11 +3195,19 @@ } /* Context activation is done by the caller. */ @@ -1532,7 +1532,7 @@ unsigned int i, j; WORD map; -@@ -3131,12 +3219,17 @@ +@@ -3151,12 +3239,17 @@ for (i = 0, map = context->stream_info.use_map; map; map >>= 1, ++i) { if (map & 1) @@ -1550,7 +1550,7 @@ } if (state->index_buffer) { -@@ -3240,7 +3333,11 @@ +@@ -3260,7 +3353,11 @@ if (texture->texture_srgb.name) wined3d_texture_load(texture, context, TRUE); wined3d_texture_load(texture, context, FALSE); @@ -1747,7 +1747,7 @@ #include #include #include -@@ -279,8 +307,10 @@ +@@ -278,8 +306,10 @@ unsigned int max_sm_gs; unsigned int max_sm_ps; BOOL no_3d; @@ -1846,7 +1846,7 @@ void context_apply_fbo_state_blit(struct wined3d_context *context, GLenum target, struct wined3d_surface *render_target, struct wined3d_surface *depth_stencil, DWORD location) DECLSPEC_HIDDEN; void context_active_texture(struct wined3d_context *context, const struct wined3d_gl_info *gl_info, -@@ -1980,7 +2039,11 @@ +@@ -1983,7 +2042,11 @@ struct wined3d_state { DWORD flags; @@ -1858,7 +1858,7 @@ struct wined3d_vertex_declaration *vertex_declaration; struct wined3d_stream_output stream_output[MAX_STREAM_OUT]; -@@ -2025,6 +2088,7 @@ +@@ -2028,6 +2091,7 @@ DWORD render_states[WINEHIGHEST_RENDER_STATE + 1]; }; @@ -1866,7 +1866,7 @@ struct wined3d_gl_bo { GLuint name; -@@ -2033,6 +2097,7 @@ +@@ -2036,6 +2100,7 @@ UINT size; }; @@ -1874,7 +1874,7 @@ #define WINED3D_UNMAPPED_STAGE ~0U /* Multithreaded flag. Removed from the public header to signal that -@@ -2088,11 +2153,23 @@ +@@ -2091,11 +2156,23 @@ struct wined3d_rendertarget_view *back_buffer_view; struct wined3d_swapchain **swapchains; UINT swapchain_count; @@ -1898,7 +1898,7 @@ /* For rendering to a texture using glCopyTexImage */ GLuint depth_blt_texture; -@@ -2103,6 +2180,9 @@ +@@ -2106,6 +2183,9 @@ UINT xScreenSpace; UINT yScreenSpace; UINT cursorWidth, cursorHeight; @@ -1908,7 +1908,7 @@ HCURSOR hardwareCursor; /* The Wine logo texture */ -@@ -2134,6 +2214,7 @@ +@@ -2137,6 +2217,7 @@ UINT message, WPARAM wparam, LPARAM lparam, WNDPROC proc) DECLSPEC_HIDDEN; void device_resource_add(struct wined3d_device *device, struct wined3d_resource *resource) DECLSPEC_HIDDEN; void device_resource_released(struct wined3d_device *device, struct wined3d_resource *resource) DECLSPEC_HIDDEN; @@ -1916,7 +1916,7 @@ void device_invalidate_state(const struct wined3d_device *device, DWORD state) DECLSPEC_HIDDEN; void device_invalidate_shader_constants(const struct wined3d_device *device, DWORD mask) DECLSPEC_HIDDEN; void device_exec_update_texture(struct wined3d_context *context, struct wined3d_texture *src_texture, -@@ -2145,6 +2226,11 @@ +@@ -2148,6 +2229,11 @@ void device_create_dummy_textures(struct wined3d_device *device, struct wined3d_context *context) DECLSPEC_HIDDEN; void device_delete_opengl_contexts_cs(struct wined3d_device *device, struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN; @@ -1928,7 +1928,7 @@ static inline BOOL isStateDirty(const struct wined3d_context *context, DWORD state) { -@@ -2161,9 +2247,11 @@ +@@ -2164,9 +2250,11 @@ ULONG (*resource_incref)(struct wined3d_resource *resource); ULONG (*resource_decref)(struct wined3d_resource *resource); void (*resource_unload)(struct wined3d_resource *resource); @@ -1940,7 +1940,7 @@ }; struct wined3d_resource -@@ -2188,6 +2276,7 @@ +@@ -2191,6 +2279,7 @@ UINT depth; UINT size; DWORD priority; @@ -1948,7 +1948,7 @@ void *heap_memory, *map_heap_memory, *user_memory, *bitmap_data; UINT custom_row_pitch, custom_slice_pitch; struct wined3d_gl_bo *buffer, *map_buffer; -@@ -2195,6 +2284,11 @@ +@@ -2198,6 +2287,11 @@ DWORD locations; LONG access_fence; BOOL unmap_dirtify; @@ -1960,7 +1960,7 @@ void *parent; const struct wined3d_parent_ops *parent_ops; -@@ -2219,6 +2313,7 @@ +@@ -2222,6 +2316,7 @@ void *parent, const struct wined3d_parent_ops *parent_ops, const struct wined3d_resource_ops *resource_ops) DECLSPEC_HIDDEN; void resource_unload(struct wined3d_resource *resource) DECLSPEC_HIDDEN; @@ -1968,7 +1968,7 @@ DWORD wined3d_resource_access_from_location(DWORD location) DECLSPEC_HIDDEN; BOOL wined3d_resource_allocate_sysmem(struct wined3d_resource *resource) DECLSPEC_HIDDEN; void wined3d_resource_changed(struct wined3d_resource *resource, -@@ -2265,6 +2360,15 @@ +@@ -2268,6 +2363,15 @@ { while(InterlockedCompareExchange(&resource->access_fence, 0, 0)); } @@ -1984,7 +1984,7 @@ /* Tests show that the start address of resources is 32 byte aligned */ #define RESOURCE_ALIGNMENT 16 -@@ -2349,7 +2453,9 @@ +@@ -2352,7 +2456,9 @@ void wined3d_texture_apply_sampler_desc(struct wined3d_texture *texture, const struct wined3d_sampler_desc *sampler_desc, const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN; @@ -1994,7 +1994,7 @@ void wined3d_texture_bind(struct wined3d_texture *texture, struct wined3d_context *context, BOOL srgb) DECLSPEC_HIDDEN; void wined3d_texture_bind_and_dirtify(struct wined3d_texture *texture, -@@ -2383,9 +2489,16 @@ +@@ -2386,9 +2492,16 @@ struct wined3d_resource resource; struct wined3d_texture *container; @@ -2011,7 +2011,7 @@ }; static inline struct wined3d_volume *volume_from_resource(struct wined3d_resource *resource) -@@ -2393,6 +2506,7 @@ +@@ -2396,6 +2509,7 @@ return CONTAINING_RECORD(resource, struct wined3d_volume, resource); } @@ -2019,7 +2019,7 @@ HRESULT wined3d_volume_create(struct wined3d_texture *container, const struct wined3d_resource_desc *desc, unsigned int level, struct wined3d_volume **volume) DECLSPEC_HIDDEN; void wined3d_volume_destroy(struct wined3d_volume *volume) DECLSPEC_HIDDEN; -@@ -2405,6 +2519,23 @@ +@@ -2408,6 +2522,23 @@ struct wined3d_surface_dib { HBITMAP DIBsection; @@ -2043,7 +2043,7 @@ UINT bitmap_size; }; -@@ -2430,7 +2561,11 @@ +@@ -2433,7 +2564,11 @@ struct wined3d_surface_ops { HRESULT (*surface_private_setup)(struct wined3d_surface *surface); @@ -2055,7 +2055,7 @@ }; struct wined3d_surface -@@ -2438,12 +2573,25 @@ +@@ -2441,12 +2576,25 @@ struct wined3d_resource resource; const struct wined3d_surface_ops *surface_ops; struct wined3d_texture *container; @@ -2081,7 +2081,7 @@ GLuint rb_multisample; GLuint rb_resolved; GLenum texture_target; -@@ -2487,10 +2635,19 @@ +@@ -2490,10 +2638,19 @@ GLenum surface_get_gl_buffer(const struct wined3d_surface *surface) DECLSPEC_HIDDEN; void surface_get_drawable_size(const struct wined3d_surface *surface, const struct wined3d_context *context, unsigned int *width, unsigned int *height) DECLSPEC_HIDDEN; @@ -2101,7 +2101,7 @@ void surface_modify_ds_location(struct wined3d_surface *surface, DWORD location, UINT w, UINT h) DECLSPEC_HIDDEN; void surface_prepare_rb(struct wined3d_surface *surface, const struct wined3d_gl_info *gl_info, BOOL multisample) DECLSPEC_HIDDEN; -@@ -2502,6 +2659,7 @@ +@@ -2505,6 +2662,7 @@ const struct wined3d_gl_info *gl_info, void *mem, unsigned int pitch) DECLSPEC_HIDDEN; HRESULT surface_upload_from_surface(struct wined3d_surface *dst_surface, const POINT *dst_point, struct wined3d_surface *src_surface, const RECT *src_rect) DECLSPEC_HIDDEN; @@ -2109,7 +2109,7 @@ HRESULT wined3d_surface_create(struct wined3d_texture *container, const struct wined3d_resource_desc *desc, GLenum target, unsigned int level, unsigned int layer, DWORD flags, struct wined3d_surface **surface) DECLSPEC_HIDDEN; -@@ -2520,6 +2678,21 @@ +@@ -2523,6 +2681,21 @@ void draw_textured_quad(const struct wined3d_surface *src_surface, struct wined3d_context *context, const RECT *src_rect, const RECT *dst_rect, enum wined3d_texture_filter_type filter) DECLSPEC_HIDDEN; void surface_flip(struct wined3d_surface *front, struct wined3d_surface *back) DECLSPEC_HIDDEN; @@ -2131,7 +2131,7 @@ /* Surface flags: */ #define SFLAG_DIBSECTION 0x00000001 /* Has a DIB section attached for GetDC. */ -@@ -2567,8 +2740,10 @@ +@@ -2570,8 +2743,10 @@ BOOL half_float_conv_needed; }; @@ -2142,7 +2142,7 @@ struct wined3d_saved_states { DWORD transform[(HIGHEST_TRANSFORMSTATE >> 5) + 1]; -@@ -2636,6 +2811,7 @@ +@@ -2639,6 +2814,7 @@ void stateblock_init_contained_states(struct wined3d_stateblock *stateblock) DECLSPEC_HIDDEN; void state_cleanup(struct wined3d_state *state) DECLSPEC_HIDDEN; @@ -2150,7 +2150,7 @@ HRESULT state_init(struct wined3d_state *state, const struct wined3d_gl_info *gl_info, const struct wined3d_d3d_info *d3d_info, DWORD flags) DECLSPEC_HIDDEN; void state_unbind_resources(struct wined3d_state *state) DECLSPEC_HIDDEN; -@@ -2686,6 +2862,32 @@ +@@ -2689,6 +2865,32 @@ void wined3d_cs_destroy(struct wined3d_cs *cs) DECLSPEC_HIDDEN; void wined3d_cs_switch_onscreen_ds(struct wined3d_cs *cs, struct wined3d_context *context, struct wined3d_surface *depth_stencil) DECLSPEC_HIDDEN; @@ -2183,7 +2183,7 @@ void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT *rects, DWORD flags, const struct wined3d_color *color, float depth, DWORD stencil) DECLSPEC_HIDDEN; -@@ -2735,6 +2937,7 @@ +@@ -2738,6 +2940,7 @@ void wined3d_cs_emit_set_vertex_declaration(struct wined3d_cs *cs, struct wined3d_vertex_declaration *declaration) DECLSPEC_HIDDEN; void wined3d_cs_emit_set_viewport(struct wined3d_cs *cs, const struct wined3d_viewport *viewport) DECLSPEC_HIDDEN; @@ -2191,7 +2191,7 @@ void wined3d_cs_emit_set_consts_f(struct wined3d_cs *cs, UINT start_register, const float *constants, UINT vector4f_count, enum wined3d_shader_type type) DECLSPEC_HIDDEN; void wined3d_cs_emit_set_consts_b(struct wined3d_cs *cs, UINT start_register, -@@ -2794,6 +2997,7 @@ +@@ -2797,6 +3000,7 @@ struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN; void wined3d_cs_emit_getdc(struct wined3d_cs *cs, struct wined3d_surface *surface) DECLSPEC_HIDDEN; void wined3d_cs_emit_releasedc(struct wined3d_cs *cs, struct wined3d_surface *surface) DECLSPEC_HIDDEN; @@ -2199,7 +2199,7 @@ /* Direct3D terminology with little modifications. We do not have an issued state * because only the driver knows about it, but we have a created state because d3d -@@ -2808,8 +3012,12 @@ +@@ -2811,8 +3015,12 @@ struct wined3d_query_ops { HRESULT (*query_get_data)(struct wined3d_query *query, void *data, DWORD data_size, DWORD flags); @@ -2212,7 +2212,7 @@ }; struct wined3d_query -@@ -2823,12 +3031,16 @@ +@@ -2826,12 +3034,16 @@ enum wined3d_query_type type; DWORD data_size; void *extendedData; @@ -2229,7 +2229,7 @@ /* TODO: Add tests and support for FLOAT16_4 POSITIONT, D3DCOLOR position, other * fixed function semantics as D3DCOLOR or FLOAT16 */ -@@ -2855,7 +3067,9 @@ +@@ -2858,7 +3070,9 @@ GLenum buffer_object_usage; GLenum buffer_type_hint; DWORD flags; @@ -2239,7 +2239,7 @@ void *map_ptr; struct wined3d_map_range *maps; -@@ -2880,11 +3094,15 @@ +@@ -2883,11 +3097,15 @@ BYTE *buffer_get_sysmem(struct wined3d_buffer *This, struct wined3d_context *context) DECLSPEC_HIDDEN; void buffer_internal_preload(struct wined3d_buffer *buffer, struct wined3d_context *context, const struct wined3d_state *state) DECLSPEC_HIDDEN; @@ -2255,7 +2255,7 @@ struct wined3d_rendertarget_view { -@@ -2923,8 +3141,10 @@ +@@ -2926,8 +3144,10 @@ return surface_from_resource(resource); } @@ -2266,7 +2266,7 @@ struct wined3d_shader_resource_view { LONG refcount; -@@ -2937,8 +3157,12 @@ +@@ -2940,8 +3160,12 @@ struct wined3d_swapchain_ops { void (*swapchain_present)(struct wined3d_swapchain *swapchain, const RECT *src_rect, @@ -2279,7 +2279,7 @@ }; struct wined3d_swapchain -@@ -2978,8 +3202,10 @@ +@@ -2981,8 +3205,10 @@ HDC swapchain_get_backup_dc(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN; void swapchain_update_draw_bindings(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN; void swapchain_update_render_to_fbo(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN; @@ -2290,7 +2290,7 @@ /***************************************************************************** * Utility function prototypes -@@ -3183,7 +3409,9 @@ +@@ -3186,7 +3412,9 @@ void shader_generate_main(const struct wined3d_shader *shader, struct wined3d_string_buffer *buffer, const struct wined3d_shader_reg_maps *reg_maps, const DWORD *byte_code, void *backend_ctx) DECLSPEC_HIDDEN; BOOL shader_match_semantic(const char *semantic_name, enum wined3d_decl_usage usage) DECLSPEC_HIDDEN; @@ -4512,7 +4512,7 @@ diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c -@@ -1528,9 +1528,17 @@ +@@ -1548,9 +1548,17 @@ const struct wined3d_shader_reg_maps *reg_maps, const struct shader_glsl_ctx_priv *ctx_priv) { const struct wined3d_shader_version *version = ®_maps->shader_version; @@ -4530,7 +4530,7 @@ unsigned int i, extra_constants_needed = 0; const struct wined3d_shader_lconst *lconst; const char *prefix; -@@ -1790,7 +1798,11 @@ +@@ -1810,7 +1818,11 @@ { UINT in_count = min(vec4_varyings(version->major, gl_info), shader->limits->packed_input); @@ -4542,7 +4542,7 @@ shader_addline(buffer, "varying vec4 %s_link[%u];\n", prefix, in_count); shader_addline(buffer, "vec4 %s_in[%u];\n", prefix, in_count); } -@@ -1831,6 +1843,7 @@ +@@ -1851,6 +1863,7 @@ } else { @@ -4550,7 +4550,7 @@ /* This happens because we do not have proper tracking of the * constant registers that are actually used, only the max * limit of the shader version. -@@ -1839,6 +1852,23 @@ +@@ -1859,6 +1872,23 @@ * it and just create the uniform. */ FIXME("Cannot find a free uniform for vpos correction params\n"); @@ -5463,7 +5463,7 @@ + const struct wined3d_cs_set_transform *op = data; + + cs->state.transforms[op->state] = *op->matrix; -+ if (op->state < WINED3D_TS_WORLD_MATRIX(cs->device->adapter->gl_info.limits.blends)) ++ if (op->state < WINED3D_TS_WORLD_MATRIX(cs->device->adapter->d3d_info.limits.ffp_vertex_blend_matrices)) + device_invalidate_state(cs->device, STATE_TRANSFORM(op->state)); +} + @@ -9081,7 +9081,7 @@ diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c --- a/dlls/wined3d/shader.c +++ b/dlls/wined3d/shader.c -@@ -1873,7 +1873,11 @@ +@@ -1867,7 +1867,11 @@ } } @@ -9093,7 +9093,7 @@ { HeapFree(GetProcessHeap(), 0, shader->output_signature.elements); HeapFree(GetProcessHeap(), 0, shader->input_signature.elements); -@@ -2132,10 +2136,16 @@ +@@ -2125,10 +2129,16 @@ if (!refcount) { @@ -9110,7 +9110,7 @@ } return refcount; -@@ -2412,7 +2422,11 @@ +@@ -2405,7 +2415,11 @@ memset(args, 0, sizeof(*args)); /* FIXME: Make sure all bits are set. */ if (!gl_info->supported[ARB_FRAMEBUFFER_SRGB] && state->render_states[WINED3D_RS_SRGBWRITEENABLE]) { @@ -9614,7 +9614,7 @@ diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c -@@ -5341,9 +5341,15 @@ +@@ -5395,9 +5395,15 @@ DebugBreak(); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/wined3d-MESA_GPU_Info/0001-wined3d-Use-pci-and-memory-information-from-MESA-if-.patch wine-staging-1.7.47~ubuntu14.10.1/patches/wined3d-MESA_GPU_Info/0001-wined3d-Use-pci-and-memory-information-from-MESA-if-.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/wined3d-MESA_GPU_Info/0001-wined3d-Use-pci-and-memory-information-from-MESA-if-.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/wined3d-MESA_GPU_Info/0001-wined3d-Use-pci-and-memory-information-from-MESA-if-.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,189 @@ +From 32306d330e7da6eb0bf3d20d5f755bfffa8d4109 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michael=20M=C3=BCller?= +Date: Sat, 11 Jul 2015 04:06:27 +0200 +Subject: wined3d: Use pci and memory information from MESA if possible. + +--- + dlls/wined3d/directx.c | 25 +++++++++++++++++++++ + dlls/wined3d/wined3d_gl.h | 1 + + dlls/winex11.drv/opengl.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++ + include/wine/wgl_driver.h | 2 ++ + 4 files changed, 85 insertions(+) + +diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c +index 9ee4a0e..48cc92b 100644 +--- a/dlls/wined3d/directx.c ++++ b/dlls/wined3d/directx.c +@@ -231,6 +231,7 @@ static const struct wined3d_extension_map wgl_extension_map[] = + {"WGL_ARB_pixel_format", WGL_ARB_PIXEL_FORMAT }, + {"WGL_EXT_swap_control", WGL_EXT_SWAP_CONTROL }, + {"WGL_WINE_pixel_format_passthrough", WGL_WINE_PIXEL_FORMAT_PASSTHROUGH}, ++ {"WGL_WINE_gpu_info", WGL_WINE_GPU_INFO }, + }; + + /********************************************************** +@@ -1407,9 +1408,22 @@ static void init_driver_info(struct wined3d_gl_info *gl_info, struct wined3d_dri + if (driver_info->vendor != PCI_VENDOR_NONE || driver_info->device != PCI_DEVICE_NONE) + { + static unsigned int once; ++ unsigned int real_vendor, real_device; + + TRACE("GPU override %04x:%04x.\n", wined3d_settings.pci_vendor_id, wined3d_settings.pci_device_id); + ++ if (gl_info->supported[WGL_WINE_GPU_INFO] && ++ gl_info->gl_ops.ext.p_wglGetPCIInfoWINE(&real_vendor, &real_device)) ++ { ++ if (get_gpu_description(real_vendor, real_device)) ++ { ++ vendor = real_vendor; ++ device = real_device; ++ } ++ else if (!once++) ++ ERR_(winediag)("Could not find GPU info for %04x:%04x.\n", real_vendor, real_device); ++ } ++ + driver_info->vendor = wined3d_settings.pci_vendor_id; + if (driver_info->vendor == PCI_VENDOR_NONE) + driver_info->vendor = vendor; +@@ -1513,6 +1527,17 @@ static void init_driver_info(struct wined3d_gl_info *gl_info, struct wined3d_dri + wine_dbgstr_longlong(driver_info->vram_bytes)); + } + ++ if (gl_info->supported[WGL_WINE_GPU_INFO]) ++ { ++ unsigned int vram_mb; ++ if (gl_info->gl_ops.ext.p_wglGetMemoryInfoWINE(&vram_mb)) ++ { ++ driver_info->vram_bytes = (UINT64)vram_mb * 1024 * 1024; ++ TRACE("Got 0x%s as video memory from wglGetGPUInfoWINE.\n", ++ wine_dbgstr_longlong(driver_info->vram_bytes)); ++ } ++ } ++ + if (wined3d_settings.emulated_textureram) + { + TRACE("Overriding amount of video memory with 0x%s bytes.\n", +diff --git a/dlls/wined3d/wined3d_gl.h b/dlls/wined3d/wined3d_gl.h +index 3007516..38c1661 100644 +--- a/dlls/wined3d/wined3d_gl.h ++++ b/dlls/wined3d/wined3d_gl.h +@@ -160,6 +160,7 @@ enum wined3d_gl_extension + WGL_ARB_PIXEL_FORMAT, + WGL_EXT_SWAP_CONTROL, + WGL_WINE_PIXEL_FORMAT_PASSTHROUGH, ++ WGL_WINE_GPU_INFO, + /* Internally used */ + WINED3D_GL_BLEND_EQUATION, + WINED3D_GL_NORMALIZED_TEXRECT, +diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c +index 7b8ba82..42816a2 100644 +--- a/dlls/winex11.drv/opengl.c ++++ b/dlls/winex11.drv/opengl.c +@@ -175,6 +175,18 @@ typedef XID GLXPbuffer; + /** GLX_NV_float_buffer */ + #define GLX_FLOAT_COMPONENTS_NV 0x20B0 + ++/** GLX_MESA_query_renderer */ ++#define GLX_RENDERER_VENDOR_ID_MESA 0x8183 ++#define GLX_RENDERER_DEVICE_ID_MESA 0x8184 ++#define GLX_RENDERER_VERSION_MESA 0x8185 ++#define GLX_RENDERER_ACCELERATED_MESA 0x8186 ++#define GLX_RENDERER_VIDEO_MEMORY_MESA 0x8187 ++#define GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA 0x8188 ++#define GLX_RENDERER_PREFERRED_PROFILE_MESA 0x8189 ++#define GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA 0x818A ++#define GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA 0x818B ++#define GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA 0x818C ++#define GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA 0x818D + + struct WineGLInfo { + const char *glVersion; +@@ -405,6 +417,7 @@ static void (*pglXFreeMemoryNV)(GLvoid *pointer); + /* MESA GLX Extensions */ + static void (*pglXCopySubBufferMESA)(Display *dpy, GLXDrawable drawable, int x, int y, int width, int height); + static int (*pglXSwapIntervalMESA)(unsigned int interval); ++static Bool (*pglXQueryCurrentRendererIntegerMESA)(int attribute, unsigned int *value); + + /* Standard OpenGL */ + static void (*pglFinish)(void); +@@ -658,6 +671,7 @@ static BOOL has_opengl(void) + /* NV GLX Extension */ + LOAD_FUNCPTR(glXAllocateMemoryNV); + LOAD_FUNCPTR(glXFreeMemoryNV); ++ LOAD_FUNCPTR(glXQueryCurrentRendererIntegerMESA); + #undef LOAD_FUNCPTR + + if(!X11DRV_WineGL_InitOpenglInfo()) goto failed; +@@ -3061,6 +3075,42 @@ static BOOL X11DRV_wglSwapIntervalEXT(int interval) + } + + /** ++ * X11DRV_wglGetPCIInfoWINE ++ * ++ * WINE-specific function to get the PCI vendor / device id. ++ */ ++static BOOL X11DRV_wglGetPCIInfoWINE(unsigned int *vendor, unsigned int *device) ++{ ++ TRACE("(%p, %p)\n", vendor, device); ++ ++ if (!pglXQueryCurrentRendererIntegerMESA || !vendor || !device) ++ return FALSE; ++ ++ if (!pglXQueryCurrentRendererIntegerMESA(GLX_RENDERER_VENDOR_ID_MESA, vendor)) ++ return FALSE; ++ ++ if (!pglXQueryCurrentRendererIntegerMESA(GLX_RENDERER_DEVICE_ID_MESA, device)) ++ return FALSE; ++ ++ return TRUE; ++} ++ ++/** ++ * X11DRV_wglGetMemoryInfoWINE ++ * ++ * WINE-specific function to get the available video memory (in MB). ++ */ ++static BOOL X11DRV_wglGetMemoryInfoWINE(unsigned int *memory) ++{ ++ TRACE("(%p)\n", memory); ++ ++ if (!pglXQueryCurrentRendererIntegerMESA || !memory) ++ return FALSE; ++ ++ return pglXQueryCurrentRendererIntegerMESA(GLX_RENDERER_VIDEO_MEMORY_MESA, memory); ++} ++ ++/** + * X11DRV_wglSetPixelFormatWINE + * + * WGL_WINE_pixel_format_passthrough: wglSetPixelFormatWINE +@@ -3211,6 +3261,13 @@ static void X11DRV_WineGL_LoadExtensions(void) + + /* WINE-specific WGL Extensions */ + ++ if (has_extension(WineGLInfo.glxExtensions, "GLX_MESA_query_renderer")) ++ { ++ register_extension( "WGL_WINE_gpu_info" ); ++ opengl_funcs.ext.p_wglGetPCIInfoWINE = X11DRV_wglGetPCIInfoWINE; ++ opengl_funcs.ext.p_wglGetMemoryInfoWINE = X11DRV_wglGetMemoryInfoWINE; ++ } ++ + /* In WineD3D we need the ability to set the pixel format more than once (e.g. after a device reset). + * The default wglSetPixelFormat doesn't allow this, so add our own which allows it. + */ +diff --git a/include/wine/wgl_driver.h b/include/wine/wgl_driver.h +index c52185d..046b604 100644 +--- a/include/wine/wgl_driver.h ++++ b/include/wine/wgl_driver.h +@@ -2903,6 +2903,8 @@ struct opengl_funcs + BOOL (WINE_GLAPI *p_wglSetPbufferAttribARB)(struct wgl_pbuffer *,const int*); + BOOL (WINE_GLAPI *p_wglSetPixelFormatWINE)(HDC,int); + BOOL (WINE_GLAPI *p_wglSwapIntervalEXT)(int); ++ BOOL (WINE_GLAPI *p_wglGetPCIInfoWINE)(unsigned int *, unsigned int *); ++ BOOL (WINE_GLAPI *p_wglGetMemoryInfoWINE)(unsigned int *); + } ext; + }; + +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/wined3d-MESA_GPU_Info/definition wine-staging-1.7.47~ubuntu14.10.1/patches/wined3d-MESA_GPU_Info/definition --- wine-staging-1.7.46~ubuntu14.10.1/patches/wined3d-MESA_GPU_Info/definition 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/wined3d-MESA_GPU_Info/definition 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,2 @@ +Fixes: Use GLX_MESA_query_renderer extension to get more exact GPU infos +Depends: wined3d-Accounting diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/wined3d-Revert_PixelFormat/definition wine-staging-1.7.47~ubuntu14.10.1/patches/wined3d-Revert_PixelFormat/definition --- wine-staging-1.7.46~ubuntu14.10.1/patches/wined3d-Revert_PixelFormat/definition 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/wined3d-Revert_PixelFormat/definition 2015-07-12 05:53:31.000000000 +0000 @@ -1,6 +1,6 @@ Fixes: [35655] Fix wined3d performance drop introduced by pixelformat changes. Fixes: [35718] Fix flickering introduced by pixelformat changes. -Fixes: [35950] Fix black screen on startup introduced by pixelformat changes. +#Fixes: [35950] Fix black screen on startup introduced by pixelformat changes. Fixes: [35975] Fix gray screen on startup introduced by pixelformat changes. Fixes: [36900] Fix missing video introduced by pixelformat changes. Category: stable diff -Nru wine-staging-1.7.46~ubuntu14.10.1/patches/winhttp-System_Proxy_Autoconfig/0001-winhttp-Silence-repeated-no-support-on-this-platform.patch wine-staging-1.7.47~ubuntu14.10.1/patches/winhttp-System_Proxy_Autoconfig/0001-winhttp-Silence-repeated-no-support-on-this-platform.patch --- wine-staging-1.7.46~ubuntu14.10.1/patches/winhttp-System_Proxy_Autoconfig/0001-winhttp-Silence-repeated-no-support-on-this-platform.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/patches/winhttp-System_Proxy_Autoconfig/0001-winhttp-Silence-repeated-no-support-on-this-platform.patch 2015-07-12 05:53:31.000000000 +0000 @@ -0,0 +1,26 @@ +From e449ba207a501ae85ae23a1b0c84e91eea90caf6 Mon Sep 17 00:00:00 2001 +From: Jarkko Korpi +Date: Mon, 6 Jul 2015 21:07:26 +0300 +Subject: winhttp: Silence repeated "no support on this platform" message. + +--- + dlls/winhttp/session.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/dlls/winhttp/session.c b/dlls/winhttp/session.c +index 1b54288..c84c69a 100644 +--- a/dlls/winhttp/session.c ++++ b/dlls/winhttp/session.c +@@ -1339,7 +1339,8 @@ static BOOL get_system_proxy_autoconfig_url( char *buf, DWORD buflen ) + CFRelease( settings ); + return ret; + #else +- FIXME( "no support on this platform\n" ); ++ static int once; ++ if (!once++) FIXME( "no support on this platform\n" ); + return FALSE; + #endif + } +-- +2.4.5 + diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/ar.po wine-staging-1.7.47~ubuntu14.10.1/po/ar.po --- wine-staging-1.7.46~ubuntu14.10.1/po/ar.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/ar.po 2015-07-12 05:36:18.000000000 +0000 @@ -9487,7 +9487,7 @@ msgid "Referral hop limit exceeded" msgstr "تم تجاوز الحد الأقصى للتحويلات" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9495,7 +9495,7 @@ "لم تنفذ بعد\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: الملف غير موجود\n" @@ -9576,11 +9576,20 @@ msgstr "ساعة واين" #: cmd.rc:40 +#, fuzzy +#| msgid "" +#| "CALL is used within a batch file to execute commands\n" +#| "from another batch file. When the batch file exits, control returns to\n" +#| "the file which called it. The CALL command may supply parameters to the\n" +#| "called procedure.\n" +#| "\n" +#| "Changes to default directory, environment variables etc made within a\n" +#| "called procedure are inherited by the caller.\n" msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" @@ -9593,7 +9602,7 @@ "يمكن بواسطة النداء تغيير الادلة و تطبيق المتغيرات و أي\n" "أوامر أخرى مطلوبة بواسطة المنادي .\n" -#: cmd.rc:43 +#: cmd.rc:44 #, fuzzy #| msgid "" #| "CD is the short version of CHDIR. It changes the current\n" @@ -9605,42 +9614,52 @@ "CD <المجلد>\n" "هو اختصار لأمر تغيير المجلد حيث انه يقوم بتغيير المجلد الحالي.\n" -#: cmd.rc:44 +#: cmd.rc:47 #, fuzzy #| msgid "CHDIR changes the current default directory.\n" msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR يغير المجلد الافتراضي الحالي.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS يقوم بمسح شاشة الطرفية.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY يقوم بنسخ الملفات.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY يقوم بتغيير جهاز الإدخال والإخراج.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE يقوم بإظهار أو تعديل التاريخ.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL يقوم بحذف ملف أو مجموعة ملفات.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR يعرض قائمة بمحتويات المجلد الحالي.\n" -#: cmd.rc:62 +#: cmd.rc:75 +#, fuzzy +#| msgid "" +#| "ECHO displays on the current terminal device.\n" +#| "\n" +#| "ECHO ON causes all subsequent commands in a batch file to be displayed\n" +#| "on the terminal device before they are executed.\n" +#| "\n" +#| "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" +#| "default). The ECHO OFF command can be prevented from displaying by\n" +#| "preceding it with an @ sign.\n" msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9655,11 +9674,11 @@ "default). يقوم هذا اﻷمر بحظر عرض الأوامر المنفذة بواسطة المخطوطة\n" "والغير مسبوقة بإشارة @.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE يقوم بحذف ملف أو مجموعة ملفات.\n" -#: cmd.rc:71 +#: cmd.rc:85 #, fuzzy #| msgid "" #| "The FOR command is used to execute a command for each of a set of files.\n" @@ -9676,16 +9695,28 @@ "\n" "الصيغة: FOR %variable IN (set) DO command\n" -#: cmd.rc:83 +#: cmd.rc:97 +#, fuzzy +#| msgid "" +#| "The GOTO command transfers execution to another statement within a\n" +#| "batch file.\n" +#| "\n" +#| "The label which is the target of a GOTO may be up to 255 characters\n" +#| "long but may not include spaces (this is different from other operating\n" +#| "systems). If two or more identical labels exist in a batch file the\n" +#| "first one will always be executed. Attempting to GOTO a nonexistent\n" +#| "label terminates the batch file execution.\n" +#| "\n" +#| "GOTO has no effect when used interactively.\n" msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" @@ -9700,7 +9731,7 @@ "\n" "لا يملك الأمر GOTO أي تأثير عند استخدامه ببيئة غير نشطة.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9709,7 +9740,7 @@ "يقوم بعرض المساعدة لأمر معين ، وفي حال إطلاقه يقوم بعرض المساعدة الخاصة بسطر " "الأوامر.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9729,7 +9760,7 @@ "في الصيغة الثانية يجب إحاطة كلًا من السلسلتين بعلامات الاقتباس\n" "عملية المقارنة حساسة من هذه الناحية.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9743,21 +9774,31 @@ "يتطلب الامر توكيدًا منك بعد اختيارك الاسم الجديد.\n" "يمكنك إظهار الاسم الحالي بالأمر VOL.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD هي اختصار لـ MKDIR.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR يحاول إنشاء مجلد فرعي.\n" -#: cmd.rc:113 +#: cmd.rc:131 +#, fuzzy +#| msgid "" +#| "MOVE relocates a file or directory to a new point within the file " +#| "system.\n" +#| "\n" +#| "If the item being moved is a directory then all the files and " +#| "subdirectories\n" +#| "below the item are moved as well.\n" +#| "\n" +#| "MOVE fails if the old and new locations are on different DOS drive " +#| "letters.\n" msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" @@ -9769,13 +9810,24 @@ "\n" "MOVE تفشل عملية النقل في حال كان المصدر و الوجهة ليسا على قرص واحد.\n" -#: cmd.rc:124 +#: cmd.rc:142 +#, fuzzy +#| msgid "" +#| "PATH displays or changes the cmd search path.\n" +#| "\n" +#| "Entering PATH will display the current PATH setting (initially taken\n" +#| "from the registry). To change the setting follow the\n" +#| "PATH command with the new value.\n" +#| "\n" +#| "It is also possible to modify the PATH by using the PATH environment\n" +#| "variable, for example:\n" +#| "PATH %PATH%;c:\\temp\n" msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9791,19 +9843,49 @@ "مع المتغيرات ، مثلًا:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 +#, fuzzy +#| msgid "" +#| "PAUSE displays a message on the screen asking the user to press a key.\n" +#| "\n" +#| "It is mainly useful in batch files to allow the user to read the output\n" +#| "of a previous command before it scrolls off the screen.\n" msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE يقوم بإظهار رسالة تطلب من المستخدم الضغط على مفتاح.\n" "\n" "هذا الأمر مفيد في ملفات المخطوطات للسماح للمستخدم بقراءة\n" "مخرجات الأوامر السابقة قبل تمرير الشاشة.\n" -#: cmd.rc:151 +#: cmd.rc:169 +#, fuzzy +#| msgid "" +#| "PROMPT sets the command-line prompt.\n" +#| "\n" +#| "The string following the PROMPT command (and the space immediately " +#| "after)\n" +#| "appears at the beginning of the line when cmd is waiting for input.\n" +#| "\n" +#| "The following character strings have the special meaning shown:\n" +#| "\n" +#| "$$ Dollar sign $_ Linefeed $b Pipe sign (|)\n" +#| "$d Current date $e Escape $g > sign\n" +#| "$l < sign $n Current drive $p Current path\n" +#| "$q Equal sign $t Current time $v cmd version\n" +#| "\n" +#| "Note that entering the PROMPT command without a prompt-string resets the\n" +#| "prompt to the default, which is the current directory (which includes " +#| "the\n" +#| "current drive letter) followed by a greater-than (>) sign.\n" +#| "(like a command PROMPT $p$g).\n" +#| "\n" +#| "The prompt can also be changed by altering the PROMPT environment " +#| "variable,\n" +#| "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9845,35 +9927,57 @@ "يمكن أيضًا تعديل التلقينات بواسطة المتغير البيئي PROMT\n" "أي أن الأمر 'SET PROMPT=text' يعطي نفس نتيجة 'PROMPT text'.\n" -#: cmd.rc:155 +#: cmd.rc:173 +#, fuzzy +#| msgid "" +#| "A command line beginning with REM (followed by a space) performs no\n" +#| "action, and can therefore be used as a comment in a batch file.\n" msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" "إن أي سطر أمري يبدأ بـ REM متبوعة بمسافة لن يؤدي\n" "أي عمل ، ويمكن استعماله كتعليق ضمن المخطوط.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "REN هي اختصار لـ RENAME.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME لإعادة تسمية الملف.\n" -#: cmd.rc:161 +#: cmd.rc:181 #, fuzzy #| msgid "RD is the short version of RMDIR. It deletes a subdirectory.\n" msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD هي اختصار لـ RMDIR.\n" -#: cmd.rc:162 +#: cmd.rc:183 #, fuzzy #| msgid "RMDIR deletes a subdirectory.\n" msgid "RMDIR deletes a directory.\n" msgstr "RMDIR يحذف مجلدًا فرعيًا.\n" -#: cmd.rc:206 +#: cmd.rc:229 +#, fuzzy +#| msgid "" +#| "SET displays or changes the cmd environment variables.\n" +#| "\n" +#| "SET without parameters shows all of the current environment.\n" +#| "\n" +#| "To create or modify an environment variable the syntax is:\n" +#| "\n" +#| "SET =\n" +#| "\n" +#| "where and are character strings. There must be no\n" +#| "space before the equals sign, nor can the variable name\n" +#| "have embedded spaces.\n" +#| "\n" +#| "Under Wine, the environment of the underlying operating system is\n" +#| "included into the Win32 environment, there will generally therefore be\n" +#| "many more values than in a native Win32 implementation. Note that it is\n" +#| "not possible to affect the operating system environment from within cmd.\n" msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9883,14 +9987,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET يقوم بإظهار او تغيير المتغيرات البيئية في سطر الاوامر.\n" "\n" @@ -9909,44 +10012,79 @@ "بالغضافة إلى قيم Win32 الأصلية ، مع ملاحظة عدم الإمكانية\n" "على التأثير على بيئة النظام من خلال سطر أوامر واين.\n" -#: cmd.rc:211 -msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +#: cmd.rc:234 +#, fuzzy +#| msgid "" +#| "SHIFT is used in a batch file to remove one parameter from the head of\n" +#| "the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" +#| "if called from the command line.\n" +msgid "" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "SHIFT يستخدم هذا الأمر في المخطوطات لحذف معامل من رأس القائمة وحتى موضعه\n" "مثلًا استبدال المعامل 1 بالمعامل 2 و هكذا ، مع ملاحظة أن الأمر .\n" "لا يملك اي تأثير إذا استخدم مباشرة دون مخطوطة.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 +#, fuzzy +#| msgid "" +#| "Start a program, or open a document in the program normally used for " +#| "files with that suffix.\n" +#| "Usage:\n" +#| "start [options] program_filename [...]\n" +#| "start [options] document_filename\n" +#| "\n" +#| "Options:\n" +#| "\"title\" Specifies the title of the child windows.\n" +#| "/d directory Start the program in the specified directory.\n" +#| "/b Don't create a new console for the program.\n" +#| "/i Start the program with fresh environment variables.\n" +#| "/min Start the program minimized.\n" +#| "/max Start the program maximized.\n" +#| "/low Start the program in the idle priority class.\n" +#| "/normal Start the program in the normal priority class.\n" +#| "/high Start the program in the high priority class.\n" +#| "/realtime Start the program in the realtime priority class.\n" +#| "/abovenormal Start the program in the abovenormal priority class.\n" +#| "/belownormal Start the program in the belownormal priority class.\n" +#| "/node n Start the program on the specified NUMA node.\n" +#| "/affinity mask Start the program with the specified affinity mask.\n" +#| "/wait Wait for the started program to finish, then exit with its " +#| "exit code.\n" +#| "/unix Use a Unix filename and start the file like windows " +#| "explorer.\n" +#| "/ProgIDOpen Open a document using the specified progID.\n" +#| "/? Display this help and exit.\n" msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" "يقوم ببدء برنامج أو فتح مستند بالبرنامج الذي يفتحه كملحق.\n" "الاستخدام:\n" @@ -9974,24 +10112,28 @@ "/ProgIDOpen افتح المستند باستخدام معرف برنامجي محدد.\n" "/? أظهر هذه المساعدة ثم اخرج.\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME لعرض أو ضبط توقيت النظام.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE لضبط عنوان نافذة سطر الأوامر.\n" -#: cmd.rc:219 +#: cmd.rc:244 +#, fuzzy +#| msgid "" +#| "TYPE copies to the console device (or elsewhere\n" +#| "if redirected). No check is made that the file is readable text.\n" msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" "TYPE \n" "يقوم بعرض ملف معين على سطر الاوامر ( أو بمكان آخر ) دون التحقق ما إذا كان " "الملف نصيًا.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10009,23 +10151,27 @@ "\n" "إشارة التحقق لا تملك عملا في واين.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER يظهر إصدارة سطر الأوامر الحالية.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL يظهر اسم القسم في القرص.\n" -#: cmd.rc:237 +#: cmd.rc:263 +#, fuzzy +#| msgid "" +#| "ENDLOCAL ends localization of environment changes in a batch file\n" +#| "which were introduced by a preceding SETLOCAL.\n" msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" "ENDLOCAL ينهي عملية أقلمة المتغيرات البيئية من مخطوطة\n" "و التي قدمة بواسطة SETLOCAL.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10041,23 +10187,33 @@ "ياتي أولًا ، وفي هذه النقطة المتغيرات البيئية السابقة\n" "سيعاد تحميلها.\n" -#: cmd.rc:248 +#: cmd.rc:275 #, fuzzy #| msgid "" #| "PUSHD saves the current directory onto a\n" #| "stack, and then changes the current directory to the supplied one.\n" msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" "PUSHD يحفظ الدليل الحالي في حافظته\n" "ثم ينتقل إلى الدليل المعطى.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD يقوم بتغيير المجلد الحالي إلى نظيره المحفوظ بواسطة PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 +#, fuzzy +#| msgid "" +#| "ASSOC shows or modifies file extension associations.\n" +#| "\n" +#| "Syntax: ASSOC [.ext[=[fileType]]]\n" +#| "\n" +#| "ASSOC without parameters displays current file associations.\n" +#| "If used with only a file extension, displays the current association.\n" +#| "Specifying no file type after the equal sign removes the current " +#| "association, if any.\n" msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10065,7 +10221,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC يقوم بعرض او تعديل اقترانات أنواع الملفات.\n" @@ -10077,17 +10233,29 @@ "في حال عدم كتابة أي شيء بعد إشارة المساواة سقوم بحذف الاقتران الحالي إن كان " "موجودا.\n" -#: cmd.rc:269 +#: cmd.rc:300 +#, fuzzy +#| msgid "" +#| "FTYPE shows or modifies open commands associated with file types.\n" +#| "\n" +#| "Syntax: FTYPE [fileType[=[openCommand]]]\n" +#| "\n" +#| "Without parameters, shows the file types for which open command strings " +#| "are currently defined.\n" +#| "If used with only a file type, displays the associated open command " +#| "string, if any.\n" +#| "Specifying no open command after the equal sign removes the command " +#| "string associated to the specified file type.\n" msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE يقوم بإظهار وتعديل أوامر الفتح المقترنة بأنواع الملفات، وصيغته.\n" @@ -10101,29 +10269,38 @@ "في حال عدم وضع أي معامل بعد إشارة المساواة = ستقوم الاداة بحذف أمر الاقتران " "الموجود للنوع المحدد من الملفات.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE يقوم بعرض المخرجات سواء من ملف أو من القنوات في صفحات.\n" -#: cmd.rc:275 +#: cmd.rc:308 +#, fuzzy +#| msgid "" +#| "CHOICE displays a text and waits, until the User\n" +#| "presses an allowed Key from a selectable list.\n" +#| "CHOICE is mainly used to build a menu selection in a batch file.\n" msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" "CHOICE يقوم بعرض النصوص ثم ينتظر المستخدم حتى\n" "يضغط المفتاح المتاح من قائمة الاختيارات.\n" "CHOICE تستخدم هذه الاداة بشكل رئيسي لبناء قائمة اختيارات ضمن المخطوطة.\n" -#: cmd.rc:279 +#: cmd.rc:312 +#, fuzzy +#| msgid "" +#| "EXIT terminates the current command session and returns\n" +#| "to the operating system or shell from which you invoked cmd.\n" msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" "EXIT يقوم بإنهاء جلسة الأوامر الحالية ، ويعود إلى نظام\n" "التشغيل أو إلى الصدفة التي شغلت منها سطر الأوامر.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10203,112 +10380,112 @@ "\n" "أدخل HELP <أمر> لعرض معلومات أكثر عن الأوامر المدرجة أعلاه.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "هل أنت متاكد ؟" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "Y" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 #, fuzzy #| msgid "File association missing for extension '%1'\n" msgid "File association missing for extension %1\n" msgstr "لا يتوفر اقتران مع هذا النوع من الملفات '%1'\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "لا يوجد أمر مفتوح مقترن بنوع الملفات '%1'\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "الكتابة فوق %1 ؟" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "أكثر..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "الخط المعالج في المخطوطة يبدو مقطوعًا . استخدم:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "نقص في الإدخالات\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "خطأ بنيوي\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "لا يوجد مساعدة في %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "الهدف الذي ترغب في الذهاب إليه غير موجود\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "التاريخ الحالي هو %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "التوقيت الحالي هو %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "أدخل التاريخ الجديد: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "أدخل التوقيت الجديد: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "متغير البيئة %1 غير معرف\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "فشل فتح '%1'\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "لم يتمكن من استدعاء هذا الاسم خارج المخطوطة\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "A" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "احذف %1 ؟" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "الصدى هو %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "التحقق هو %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "تحقق حيث انها يجب ان تكون مشغلة أو مطفأة\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "خطأ في المعامل\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10316,72 +10493,72 @@ "الرقم التسلسلي للقسم هو %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "اسم القسم ( 11 محرفًا ) أو أضغط مفتاح الإدخال لتركه فارغًا ؟" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "المسار غير موجود\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "اضغط أي مفتاح للاستمرار... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "سطر أوامر واين" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "إضافي؟ " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "سطر الإدخال طويل جدًا.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "القسم الموجود في المحرك %1!c! هو %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "القسم الموجود في المحرك %1!c! لا يملك اسمًا.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Yes|No)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Yes|No|All)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "لا يمكن استكشاف '%1' كأمر داخلي أو خارجي و لا حتى مخطوطة.\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "خطأ القسمة على الصفر.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "معمول متوقع.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "عامل متوقع.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "عدم تطابق في المعترضات .\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11992,7 +12169,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12001,7 +12178,7 @@ "لم يتمكن التطبيق من العمل ، أو أنه لا يوجد اقتران مع هذا النوعمن الملفات.\n" "فشل التطبيق" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "لم يتمكن من ترجمة دليل يونكس المعطى إلى دليل دوس." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/bg.po wine-staging-1.7.47~ubuntu14.10.1/po/bg.po --- wine-staging-1.7.46~ubuntu14.10.1/po/bg.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/bg.po 2015-07-12 05:36:18.000000000 +0000 @@ -9525,13 +9525,13 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" msgstr "" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 #, fuzzy msgid "%1: File Not Found\n" msgstr "Файлът не е намерен" @@ -9596,66 +9596,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9664,27 +9664,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9696,7 +9696,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9705,47 +9705,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9768,29 +9767,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9800,68 +9799,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9872,21 +9871,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9896,17 +9895,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9914,42 +9913,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -9991,183 +9990,183 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 #, fuzzy msgid "No help available for %1\n" msgstr "Не е наличен; " -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 #, fuzzy msgid "Delete %1?" msgstr "Из&трий" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr "" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr "" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11819,14 +11818,14 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" "ShellExecuteEx failed" msgstr "" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/ca.po wine-staging-1.7.47~ubuntu14.10.1/po/ca.po --- wine-staging-1.7.46~ubuntu14.10.1/po/ca.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/ca.po 2015-07-12 05:36:18.000000000 +0000 @@ -9550,7 +9550,7 @@ msgid "Referral hop limit exceeded" msgstr "Límit de salta de referències superat" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9558,7 +9558,7 @@ "Encara no implementat\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: Fitxer no trobat\n" @@ -9642,10 +9642,10 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" @@ -9658,7 +9658,7 @@ "El procediment trucant hereta els canvis al directori per defecte,\n" "variables d'entorn etc. fets dins d'un procediment trucat.\n" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" @@ -9666,40 +9666,40 @@ "CD és la versió curta de CHDIR. Canvia el directori per defecte\n" "actual.\n" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR canvia el directori per defecte actual.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS esborra la pantalla de la consola.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY copia un fitxer.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY canvia el dispositiu d'entrada/sortida.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE mostra o canvia la data de sistema.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL suprimeix un fitxer o conjunt de fitxers.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR mostra els continguts d'un directori.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9715,11 +9715,11 @@ "ECHO OFF desfà l'efecte d'un ECHO ON anterior (ECHO està OFF per defecte).\n" "Precedir l'ordre ECHO OFF amb la signe @ prevé que es mostri.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE suprimeix un fitxer o conjunt de fitxers.\n" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9734,16 +9734,16 @@ "\n" "S'ha de doblar el signe % quan s'utilitza FOR en un fitxer batch.\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" @@ -9758,7 +9758,7 @@ "\n" "GOTO no té cap efecte quan s'utilitza de forma interactiva.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9766,7 +9766,7 @@ "HELP mostra detalls d'ajuda breus sobre un tema.\n" "HELP sense argument mostra tots els ordres integrats de CMD.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9783,11 +9783,10 @@ " IF [NOT] cadena1==cadena2 ordre\n" " IF [NOT] ERRORLEVEL nombre ordre\n" "\n" -"En la segona forma de la comanda, cadena1 i cadena2 han de ser entre " -"cometes\n" -"dobles. La comparació no distingeix entre majúscules i minúscules.\n" +"En la segona forma de la comanda, cadena1 i cadena2 han de ser entre\n" +"cometes dobles. La comparació no distingeix entre majúscules i minúscules.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9801,21 +9800,20 @@ "L'ordre us demanarà l'etiqueta nova de volum per a la unitat donada.\n" "Podeu mostrar l'etiqueta de volum del disc amb l'ordre VOL.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD és la versió curta de MKDIR. Crea un subdirectori.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR crea un subdirectori.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" @@ -9825,16 +9823,16 @@ "Si l'element que es mou és un directori, després tots els fitxers i\n" "subdirectoris a sota de l'element es mouen també.\n" "\n" -"MOVE falla si els llocs antics i els nous es troben en lletres d'unitat\n" -"DOS diferents.\n" +"MOVE falla si els llocs antics i els nous es troben en lletres d'unitat DOS\n" +"diferents.\n" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9850,12 +9848,12 @@ "per exemple:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE mostra un missatge en la pantalla demanant que l'usuari premi una " "tecla.\n" @@ -9864,7 +9862,7 @@ "llegeixi la sortida d'un ordre anterior abans que es desplaci fora de la\n" "pantalla.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9908,33 +9906,33 @@ "L'indicador també es pot canviar per modificar la variable d'entorn PROMPT,\n" "així que l'ordre 'SET PROMPT=text' té el mateix efecte que 'PROMPT text'.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" "Una línia d'ordres que comença amb REM (seguit per un espai) no realitza\n" "cap acció, i per tant es pot utilitzar com a comentari en un fitxer batch.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" "REN és la versió curta de RENAME. Canvia el nom d'un " "fitxer.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "REN canvia el nom d'un fitxer.\n" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD és la versió curta de RMDIR. Suprimeix un directori.\n" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "RMDIR suprimeix un directori.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9944,14 +9942,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET mostra o canvia les variables d'entorn de cmd.\n" "\n" @@ -9970,44 +9967,45 @@ "implementació nativa de Win32. Tingueu en compte que no és possible afectar\n" "l'entorn del sistema operatiu des de dins del cmd.\n" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "S'utilitza SHIFT en un fitxer batch per a eliminar un paràmetre del cap de\n" "la llista, de manera que el paràmetre 2 es converteix en el paràmetre 1\n" "etc. No té cap efecte si es truca des de la línia d'ordres.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" "Inicia un programa, o obre un document en el programa que normalment " "s'utilitza\n" @@ -10017,7 +10015,7 @@ "start [opcions] nom_de_fitxer_de_document\n" "\n" "Opcions:\n" -"\"títol\" Especifica el títol de les finistres filles.\n" +"\"títol\" Especifica el títol de les finistres filles.\n" "/d directori Inicia el programa en el directori especificat.\n" "/b No creïs una consola nova per al programa.\n" "/i Inicia el programa amb variables d'entorn fresques.\n" @@ -10039,23 +10037,23 @@ "/ProgIDOpen Obre un document utilitzant la progID especificada.\n" "/? Mostra aquesta ajuda i surt.\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME defineix o mostra l'hora actual del sistema.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE defineix el títol de la finestra del cmd.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" "TYPE copia al dispositiu de consola (o un\n" "altre lloc si es redirieix). No es comprova que el fitxer és text llegible.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10074,23 +10072,23 @@ "\n" "La bandera de verificació no té cap funció en el Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER mostra la versió del cmd que s'està executant.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL mostra l'etiqueta de volum d'un dispositiu de disc.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -"ENDLOCAL acaba la localització de canvis d'entorn en un fitxer batch,\n" -"els quals un SETLOCAL anterior ha introduït.\n" +"ENDLOCAL acaba la localització de canvis d'entorn en un fitxer batch, els\n" +"quals un SETLOCAL anterior ha introduït.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10106,19 +10104,19 @@ "fitxer, el que passi primer), al qual punt la configuració de l'entorn\n" "anterior es restaura.\n" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -"PUSHD desa el directori actual en una pila, i després canvia\n" -"el directori actual al proveït.\n" +"PUSHD desa el directori actual en una pila, i després canvia el\n" +"directori actual al proveït.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD canvia el directori actual a l'últim desat amb PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10126,7 +10124,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC mostra o modifica les associacions d'extensió de fitxer.\n" @@ -10138,17 +10136,17 @@ "Especificar cap tipus de fitxer després del signe igual elimina\n" "l'associació actual, si hi ha.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE mostra o modifica els ordres d'obertura associats amb els tipus de\n" @@ -10163,15 +10161,15 @@ "Especificar cap ordre d'obertura després del signe igual elimina la cadena\n" "d'ordre associada al tipus de fitxer especificat.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" "MORE mostra la sortida dels fitxers o l'entrada de canonada en pàgines.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" "CHOICE mostra un text i espera fins que l'usuari premi una tecla permesa\n" @@ -10179,15 +10177,15 @@ "CHOICE s'utilitza principalment per a construir un menú de selecció en un\n" "fitxer batch.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" "EXIT acaba la sessió d'ordres actual i torna al sistema operatiu o shell\n" "des del qual heu invocat cmd.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10269,112 +10267,112 @@ "Introduïu HELP per més informació sobre qualsevulla de les ordres\n" "anteriors.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Esteu segur?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "S" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Manca una associació de fitxer per a l'extensió %1\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "No hi ha cap ordre d'obertura associat amb el tipus de fitxer '%1'\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Voleu sobreescriure %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Més..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" "Hi ha hagut una línia possiblement truncada en el processament batch.\n" "S'està utilitzant:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Manca un paràmetre\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Error de sintaxi\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Cap ajuda disponible per a %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Destinació del GOTO no trobat\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "La data actual és %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "L'hora actual és %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Introduïu data nova: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Introduïu hora nova: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Variable d'entorn %1 no definida\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "S'ha fallat en obrir '%1'\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "No es pot trucar a una etiqueta de batch fora d'un script batch\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "T" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Voleu suprimir %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "L'eco està %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "La verificació està %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "La verificació ha d'estar ON o OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Error de paràmetre\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10382,73 +10380,73 @@ "El número serial del volum és %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Etiqueta de volum (11 caràcters, per a cap)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "No s'ha trobat PATH\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Premeu qualsevol tecla per a continuar... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Indicador d'Ordres del Wine" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "Microsoft Windows %1!S!\n" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Voleu més? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "La línia d'entrada és massa llarga.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "El volum en la unitat %1!c! és %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "El volum en la unitat %1!c! no té etiqueta.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Sí|No)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Sí|No|Tots)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" "No es pot reconèixer '%1' com a ordre intern ni extern, ni script batch.\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "Havia un error de divisió per zero.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "S'esperava un operant.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "S'esperava un operador.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "Hi ha una discòrdia de parèntesis.\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12082,7 +12080,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "regsvr32: S'ha desinstal·lat el DLL '%1' amb èxit\n" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12092,7 +12090,7 @@ "fitxer especificat.\n" "Ha fallat el ShellExecuteEx" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" "No s'ha pogut traduir el nom de fitxer d'Unix especificat a un nom de fitxer " diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/cs.po wine-staging-1.7.47~ubuntu14.10.1/po/cs.po --- wine-staging-1.7.46~ubuntu14.10.1/po/cs.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/cs.po 2015-07-12 05:36:18.000000000 +0000 @@ -9446,7 +9446,7 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9454,7 +9454,7 @@ "Doposud neimplementováno\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: Soubor nebyl nalezen\n" @@ -9518,24 +9518,22 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -"CALL je užíván ke spuštění příkazů\n" -"z jiného dávkového souboru. Když se běh volaného dávkového souboru ukončí, " -"kontrola se vrátí\n" -"volajícímu souboru. Příkaz CALL může předávat parametry\n" -"volané proceduře.\n" +"CALL je užíván ke spuštění příkazů z jiného dávkového\n" +"souboru. Když se běh volaného dávkového souboru ukončí, kontrola se vrátí\n" +"volajícímu souboru. Příkaz CALL může předávat parametry volané proceduře.\n" "\n" -"Změny výchozího adresáře, proměnných prostředí atd. provedené\n" -"volanou procedurou jsou zděděny volajícím.\n" +"Změny výchozího adresáře, proměnných prostředí atd. provedené volanou\n" +"procedurou jsou zděděny volajícím.\n" -#: cmd.rc:43 +#: cmd.rc:44 #, fuzzy #| msgid "" #| "CD is the short version of CHDIR. It changes the current\n" @@ -9543,46 +9541,44 @@ msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" -msgstr "" -"CD je zkratkou pro CHDIR.\n" -"Přenese Vás do určené složky.\n" +msgstr "CD je zkratkou pro CHDIR. Přenese Vás do určené složky.\n" -#: cmd.rc:44 +#: cmd.rc:47 #, fuzzy #| msgid "CHDIR changes the current default directory.\n" msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR přenese Vás do určené složky.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS vymaže obrazovku terminálu.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY zkopíruje soubor.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY změní vstupně/výstupní zařízení.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE zobrazí či změní systémové datum.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL smaže jeden či více zadaných souborů.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR vypíše obsah složky.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9593,15 +9589,14 @@ "ECHO ON způsobí, že všechny následující příkazy v dávkovém souboru budou\n" "zobrazeny na terminálovém zařízení před svým spuštěním.\n" "\n" -"ECHO OFF vypisování příkazů zakáže (ECHO je OFF defaultně.\n" -"Předsadí-li se příkazu ECHO OFF @ nebude příkaz ECHO OFF vypsán\n" -"na terminálové zařízení.\n" +"ECHO OFF vypisování příkazů zakáže (ECHO je OFF defaultně). Předsadí-li se\n" +"příkazu ECHO OFF @ nebude příkaz ECHO OFF vypsán na terminálové zařízení.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE smaže jeden či více souborů.\n" -#: cmd.rc:71 +#: cmd.rc:85 #, fuzzy #| msgid "" #| "The FOR command is used to execute a command for each of a set of files.\n" @@ -9618,40 +9613,39 @@ "\n" "Syntaxe: FOR %proměnná IN (skupina souborů) DO akce\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -"Příkaz GOTO předá výkon na jiné místo\n" -"v dávkovém souboru.\n" +"Příkaz GOTO předá výkon na jiné místo v dávkovém souboru.\n" "\n" -"Návěští, kterým se označuje cíl skoku GOTO může být až 255 znaků\n" -"dlouhé. Nesmí však obsahovat mezery (odlišné chování od jiných operačních\n" -"systémů). Existují-li dvě nebo více stejných návěští v jednom dávkovém\n" -"souboru, pak první bude vykonáno. Skok GOTO na neexistující návěští\n" -"ukončí výkon dávkového souboru.\n" +"Návěští, kterým se označuje cíl skoku GOTO může být až 255 znaků dlouhé.\n" +"Nesmí však obsahovat mezery (odlišné chování od jiných operačních systémů).\n" +"Existují-li dvě nebo více stejných návěští v jednom dávkovém souboru, pak\n" +"první bude vykonáno. Skok GOTO na neexistující návěští ukončí výkon\n" +"dávkového souboru.\n" "\n" "GOTO se nedá použít interaktivně.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" "HELP zobrazí stručnou nápovědu k datému tématu.\n" -"HELP bez argumentů zobrazí nápovědu pro všechny příkazy, které jsou součástí " -"CMD.\n" +"HELP bez argumentů zobrazí nápovědu pro všechny příkazy, které jsou\n" +"součástí CMD.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9671,7 +9665,7 @@ "Ve druhé formě příkazu musí být řetězec1 a řetězec2 uzavřeny v dvojitých\n" "uvozovkách. Srovnání nezohledňuje velikost písmen.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9685,21 +9679,20 @@ "Budete vyzváni k zadání jmenovky.\n" "Jmenovku si můžete zobrazit příkazem VOL.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD je zkratka pro MKDIR. Vytvoří podsložku.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR vytvoří podsložku.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" @@ -9707,16 +9700,17 @@ "\n" "Je-li přesouván adresář, jsou přesunuty všechny jeho podadresáře a soubory.\n" "\n" -"MOVE selže jsou-li zdrojová a cílová oblast na jednotkách s jinými DOS " +"MOVE selže jsou-li zdrojová a cílová oblast na jednotkách s jinými DOS\n" "písmeny disků.\n" -#: cmd.rc:124 +#: cmd.rc:142 +#, fuzzy msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9728,19 +9722,18 @@ "je to hodnota převzatá ze souboru wine.conf). Ke změně připojte k příkazu\n" "PATH novou cestu.\n" "\n" -"Je taktéž možné změnit PATH použitím proměnné prostředí PATH,\n" -"například:\n" +"Je taktéž možné změnit PATH použitím proměnné prostředí PATH, například:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 #, fuzzy msgid "" "PROMPT sets the command-line prompt.\n" @@ -9765,8 +9758,8 @@ msgstr "" "PROMPT nastaví výzvu příkazového řádku.\n" "\n" -"Řetězec za příkazem PROMPT (a mezerou bezprostředně za PROMPT)\n" -"se zobrazí na začátku každé nové příkazové řádky.\n" +"Řetězec za příkazem PROMPT (a mezerou bezprostředně za PROMPT) se zobrazí\n" +"na začátku každé nové příkazové řádky.\n" "\n" "Tyto znaky mají v řetězcích speciální význam:\n" "\n" @@ -9776,44 +9769,43 @@ "$l Znaménko menší než $n Písmeno disku $p Cesta\n" "$q Rovnítko $t Čas $v Verze cmd\n" "\n" -"PROMPT bez parametrů resetuje prompt na defaultní,\n" -"který je složen z cesty k současnému adresáři (včetně písmena disku\n" -") a znaménka větší než (>).\n" +"PROMPT bez parametrů resetuje prompt na defaultní, který je složen z cesty\n" +"k současnému adresáři (včetně písmena disku) a znaménka větší než (>).\n" "(jako je v DOS-u PROMPT $p$g).\n" "\n" -"Prompt může být změněn i změnou proměnné prostředí PROMPT,\n" -"čili příkaz 'SET PROMPT=text' má tentýž efekt jako 'PROMPT text'\n" +"Prompt může být změněn i změnou proměnné prostředí PROMPT, čili příkaz\n" +"'SET PROMPT=text' má tentýž efekt jako 'PROMPT text'\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -"Řádky začínající REM (následovaným mezerou)\n" -"nejsou vykonány. REM je proto používán jako komentářový příkaz.\n" +"Řádky začínající REM (následovaným mezerou) nejsou vykonány. REM je proto\n" +"používán jako komentářový příkaz.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" "REN je zkratkou pro RENAME. Přejmenuje určený soubor.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME přejmenuje soubor.\n" -#: cmd.rc:161 +#: cmd.rc:181 #, fuzzy #| msgid "RD is the short version of RMDIR. It deletes a subdirectory.\n" msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD je zkratkou pro RMDIR. Smaže zadanou podsložku.\n" -#: cmd.rc:162 +#: cmd.rc:183 #, fuzzy #| msgid "RMDIR deletes a subdirectory.\n" msgid "RMDIR deletes a directory.\n" msgstr "RMDIR smaže podsložku.\n" -#: cmd.rc:206 +#: cmd.rc:229 #, fuzzy msgid "" "SET displays or changes the cmd environment variables.\n" @@ -9824,14 +9816,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET zobrazí nebo změní proměnné prostředí cmd.\n" "\n" @@ -9841,73 +9832,72 @@ "\n" "SET =\n" "\n" -"kde a musí být prosta mezer\n" -"a speciálních znaků a mezi rovnítko \n" -"nesmí být mezery.\n" +"kde a musí být prosta mezer a speciálních znaků a mezi\n" +" rovnítko nesmí být mezery.\n" "\n" -"Ve Wine jsou viditelné proměnné prostředí operačního\n" -"systému, ve kterém je Wine spuštěn. Proto uvidíte mnohem víc proměnných\n" -"prostředí, než u nativní Win32 implementace. Není možné\n" -"měnit proměnné prostředí hostitelského operačního systému z cmd.\n" +"Ve Wine jsou viditelné proměnné prostředí operačního systému, ve kterém je\n" +"Wine spuštěn. Proto uvidíte mnohem víc proměnných prostředí, než u nativní\n" +"Win32 implementace. Není možné měnit proměnné prostředí hostitelského\n" +"operačního systému z cmd.\n" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -"SHIFT užíván v dávkových souborech k odstranění jednoho parametru ze " -"začátku\n" -"jejich seznamu, takže parametr 2 se stane parametrem 1 atd. Nemá žádný\n" -"efekt, je-li zadán na příkazovou řádku.\n" +"SHIFT užíván v dávkových souborech k odstranění jednoho parametru ze\n" +"začátku jejich seznamu, takže parametr 2 se stane parametrem 1 atd. Nemá\n" +"žádný efekt, je-li zadán na příkazovou řádku.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME nastaví či zobrazí aktuální systémový čas.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE <řetězec> nastaví titulek terminálového okna.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -"TYPE vypíše na konzolové zařízení (nebo jinam,\n" -"je-li výstup přesměrován). Není zjišťováno, bude-li vypsán čitelný text.\n" +"TYPE vypíše na konzolové zařízení (nebo jinam, je-li\n" +"výstup přesměrován). Není zjišťováno, bude-li vypsán čitelný text.\n" -#: cmd.rc:228 +#: cmd.rc:253 #, fuzzy msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" @@ -9927,23 +9917,23 @@ "\n" "Příznak verify nemá ve Wine žádnou funkci.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER zobrazí verzi spuštěného programu cmd.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL zobrazí označení svazku diskového zařízení.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -"ENDLOCAL zakončuje lokalizaci změn prostředí v dávkovém souboru\n" -"které byly zavedeny předchozím SETLOCAL.\n" +"ENDLOCAL zakončuje lokalizaci změn prostředí v dávkovém souboru které byly\n" +"zavedeny předchozím SETLOCAL.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9953,17 +9943,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9971,44 +9961,44 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE zobrazuje obsah souborů či směrovaný vstup po obrazovkách.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT ukončí běžící sezení a vrátí kontrolu operačnímu systému\n" -"nebo příkazovému interpretu, ze kterého byl cmd spuštěn.\n" +"EXIT ukončí běžící sezení a vrátí kontrolu operačnímu systému nebo\n" +"příkazovému interpretu, ze kterého byl cmd spuštěn.\n" -#: cmd.rc:317 +#: cmd.rc:351 #, fuzzy msgid "" "CMD built-in commands are:\n" @@ -10079,113 +10069,113 @@ "VOL\t\tUkáže jmenovku disku\n" "EXIT\t\tUkončí CMD\n" "\n" -"Zadejte HELP pro podrobnější informace o některém z výše uvedených " -"příkazů\n" +"Zadejte HELP pro podrobnější informace o některém z výše uvedených\n" +"příkazů.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Jste si jist(á)?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "A" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Pro soubory s příponou %1 není přiřazena aplikace\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Pro otevírání souboru typu „%1“ není přiřazen žádný soubor\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Přepsat %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Více..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "Řádek v dávkovém zpracování je možná zkrácen. Použití:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Chybějící argument\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Chyba syntaxe\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Pro %1 není k dispozici nápověda\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Cíl určený, v GOTO, nebyl nalezen\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Aktuální datum je %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Aktuální čas je %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Zadejte nový čas: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Zadejte nové datum: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Proměnná prostředí %1 není definovaná\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Otevření „%1“ se nezdařilo\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Nelze volat označení dávky vně dávkového skriptu\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "V" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Smazat %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Chyba parametru\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10193,72 +10183,72 @@ "Sériové číslo svazku je %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Název svazku (max. 11 znaků, pro vynechání stiskněte )?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "(proměnná) PATH nenalezena\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Pro pokračování stiskněte libovolnou klávesu... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Příkazový řádek Wine" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Více? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "Vstupní řádek je příliš dlouhý.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "Svazek na disku %1!c! je %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "Svazek na disku %1!c! není pojmenován.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Ano|Ne)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Ano|Ne|Vše)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "Chyba – dělení nulou.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "Očekáván operand.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "Očekáván operátor.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11868,7 +11858,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -11878,7 +11868,7 @@ "souborem.\n" "ShellExecuteEx selhal" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" "Nepodařilo se přeložit zadané Unixové jméno souboru na DOSové jméno souboru." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/da.po wine-staging-1.7.47~ubuntu14.10.1/po/da.po --- wine-staging-1.7.46~ubuntu14.10.1/po/da.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/da.po 2015-07-12 05:36:18.000000000 +0000 @@ -9606,7 +9606,7 @@ msgid "Referral hop limit exceeded" msgstr "Grænse for henvisnings hop overskredet" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9614,7 +9614,7 @@ "Ikke implementeret endnu\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: Filen ikke fundet\n" @@ -9696,23 +9696,23 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -"«CALL » bruges i en batch fil for at udføre kommandoer\n" -"fra en anden batchfil. Når den batchfil afslutter, returneres\n" -"kontrollen til filen som kaldte den. CALL-kommandoen kan give parametere\n" -"til den kaldte procedure.\n" +"«CALL » bruges i en batch fil for at udføre kommandoer fra en\n" +"anden batchfil. Når den batchfil afslutter, returneres kontrollen til filen\n" +"som kaldte den. CALL-kommandoen kan give parametere til den kaldte\n" +"procedure.\n" "\n" "ændringer i arbejdsmappen, miljøvariabler etc. lavet af den kaldte\n" "proceduren arves af kalderen.\n" -#: cmd.rc:43 +#: cmd.rc:44 #, fuzzy #| msgid "" #| "CD is the short version of CHDIR. It changes the current\n" @@ -9721,45 +9721,45 @@ "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -"CD «mappe» er den korte form af CHDIR. Den ændrer arbejdsmappen\n" -"til det angivne.\n" +"CD «mappe» er den korte form af CHDIR. Den ændrer arbejdsmappen til det\n" +"angivne.\n" -#: cmd.rc:44 +#: cmd.rc:47 #, fuzzy #| msgid "CHDIR changes the current default directory.\n" msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR «mappe» ændrer arbejdsmappe til det angivne.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS sletter konsolskærmen.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY kopierer en fil.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY ændrer input/output enheden.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE viser eller ændrer systemets dato.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL sletter en eller flere filer.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR viser indholdet af en mappe.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9774,11 +9774,11 @@ "standard). «ECHO OFF»-kommandoen kan hindres fra at vises ved at pladsere\n" "et @-tegn foran den.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE sletter en eller flere filer.\n" -#: cmd.rc:71 +#: cmd.rc:85 #, fuzzy #| msgid "" #| "The FOR command is used to execute a command for each of a set of files.\n" @@ -9795,31 +9795,31 @@ "\n" "Syntaks: FOR %variabel IN (sæt) DO kommando\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" "GOTO kommandoen flytter kørslen til et andet sted i en batchfil.\n" "\n" -"Etiketten som er destination til GOTO kan være op til 255 tegn langt, men " -"må\n" -"ikke indeholde mellemrum (dette er forskelligt fra andre operativsystemer).\n" +"Etiketten som er destination til GOTO kan være op til 255 tegn langt, men\n" +"må ikke indeholde mellemrum (dette er forskelligt fra andre\n" +"operativsystemer).\n" "Hvis der findes to eller flere identiske etiketter i en batchfil, køres den\n" "første altid. Hvis en GOTO peger på en ikke eksisterende etiket afbryders\n" "kørslen af den batchfil.\n" "\n" "GOTO har ingen effekt når den bruges interaktivt.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9827,7 +9827,7 @@ "HELP viser en kort hjælp om emnet.\n" "HELP uden argumenter viser alle CMD indbyggede kommandoer.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9847,7 +9847,7 @@ "I kommando form nummer to skal streng1 og streng2 omsluttes af dobbelte\n" "anførselstegn. Der skeldnes ikke mellem store og små bogstaver.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9861,38 +9861,38 @@ "Kommandoen vil bede om det nye volumenavn for drevet.\n" "Du kan vise et drevs volumenavn med VOL-kommandoen.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD er den korte form af MKDIR. Den laver en mappe.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR laver en mappe.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" "MOVE flytter en fil eller mappe til et nyt sted indenfor filsystemet.\n" "\n" -"Hvis elementet som flyttes er en mappe, så flyttes filerne og\n" -"undermapperne i den også.\n" +"Hvis elementet som flyttes er en mappe, så flyttes filerne og undermapperne\n" +"i den også.\n" "\n" "MOVE fejler hvis den gamle og nye pladsering har forskellige drevbogstaver.\n" -#: cmd.rc:124 +#: cmd.rc:142 +#, fuzzy msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9900,20 +9900,20 @@ msgstr "" "PATH viser eller ændrer CMD's søgesti.\n" "\n" -"PATH viser den gældende PATH-indstillingen (dette er\n" -"i begyndelsen værdien opgivet i filen «wine.conf»). PATH-\n" -"kommandoen efterfølges med et nyt navn for at ændre indstillingen.\n" +"PATH viser den gældende PATH-indstillingen (dette er i begyndelsen værdien\n" +"opgivet i filen «wine.conf»). PATH-kommandoen efterfølges med et nyt navn\n" +"for at ændre indstillingen.\n" "\n" "Det er også muligt at ændre PATH ved at bruge miljøvariablen PATH, for\n" "eksempel:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE viser meldingen 'Tryk Enter for at fortsætte', og venter på at\n" "brugeren trykker Enter.\n" @@ -9921,7 +9921,7 @@ "Dette er hovedsageligt nyttigt i batchfiler, for at lade brugeren læse\n" "uddata fra en tidligere kommando før det forsvinder væk fra skærmen.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9956,42 +9956,42 @@ "$q = tegn $t Tidsstempel $v CMD version\n" "\n" "Bemærk at bruges PROMPT-kommandoen uden en tekststrenge tilbagestilles\n" -"klartegnet til standardværdien, som er arbejdsmappen (inkluderet\n" -"drev) efterfulgt af et større end (>) tegn.\n" +"klartegnet til standardværdien, som er arbejdsmappen (inkluderet drev)\n" +"efterfulgt af et større end (>) tegn.\n" "(Som en kommando PROMPT $p$g.)\n" "\n" -"Klartegnet kan også ændres ved ændre miljøvariablen PROMPT, så\n" -"kommandoen «SET PROMPT=tekst» har samme effekt som «PROMPT tekst».\n" +"Klartegnet kan også ændres ved ændre miljøvariablen PROMPT, så kommandoen\n" +"«SET PROMPT=tekst» har samme effekt som «PROMPT tekst».\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -"En kommandolinje som begynder med REM (efterfulgt af et mellemrum)\n" -"udfører ingen handling, og kan derfor bruges som kommentar i en batchfil.\n" +"En kommandolinje som begynder med REM (efterfulgt af et mellemrum) udfører\n" +"ingen handling, og kan derfor bruges som kommentar i en batchfil.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "REN er den korte form af RENAME. Det omdøber en fil.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME omdøber en fil.\n" -#: cmd.rc:161 +#: cmd.rc:181 #, fuzzy #| msgid "RD is the short version of RMDIR. It deletes a subdirectory.\n" msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD er den korte form af RMDIR. Den sletter en mappe.\n" -#: cmd.rc:162 +#: cmd.rc:183 #, fuzzy #| msgid "RMDIR deletes a subdirectory.\n" msgid "RMDIR deletes a directory.\n" msgstr "RMDIR sletter en mappe.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -10001,14 +10001,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET viser eller ændrer miljøvariablene i CMD.\n" "\n" @@ -10018,72 +10017,72 @@ "\n" "SET =\n" "\n" -"hvor og er tekststrenge. Der må ikke være mellemrum\n" -"før lighedstegnet, og variabelnavnet kan heller ikke indeholde mellemrum.\n" +"hvor og er tekststrenge. Der må ikke være mellemrum før\n" +"lighedstegnet, og variabelnavnet kan heller ikke indeholde mellemrum.\n" "\n" -"I Wine er miljøvariablene i det underliggende operativsystemet\n" -"inkludert i Win32-miljøet, og der er derfor mange flere\n" -"værdier end i et normalt Win32-miljø. Vær opmærksom på at man ikke kan\n" -"ændre miljøet i det underliggende operativsystem fra CMD.\n" +"I Wine er miljøvariablene i det underliggende operativsystemet inkludert i\n" +"Win32-miljøet, og der er derfor mange flere værdier end i et normalt Win32-\n" +"miljø. Vær opmærksom på at man ikke kan ændre miljøet i det underliggende\n" +"operativsystem fra CMD.\n" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -"SHIFT bruges i en batchfil for at fjerne det første parameter i en\n" -"liste, sådan at parameter 2 bliver parameter 1 og så videre. Den har ingen\n" -"effekt hvis det bruges fra kommandolinjen.\n" +"SHIFT bruges i en batchfil for at fjerne det første parameter i en liste,\n" +"sådan at parameter 2 bliver parameter 1 og så videre. Den har ingen effekt\n" +"hvis det bruges fra kommandolinjen.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME sætter eller viser systemets tid.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE angiver titlen for kommando vinduet.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -"«TYPE » kopierer til konsolenheden (eller et andet\n" -"sted hvis det omdirigeres). Det kontrolleres ikke om filen er læselig " -"tekst.\n" +"«TYPE » kopierer til konsolenheden (eller et andet sted\n" +"hvis det omdirigeres). Det kontrolleres ikke om filen er læselig tekst.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10102,23 +10101,23 @@ "\n" "«Verify»-flagget har ingen funktion i Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER viser hvilken version af cmd du kører.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL viser drev betegnelsen for disk drevet.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -"ENDLOCAL afslutter en lokal ændring af miljø variable i en batcfil\n" -"som blev startet af en foregående SETLOCAL.\n" +"ENDLOCAL afslutter en lokal ændring af miljø variable i en batcfil som blev\n" +"startet af en foregående SETLOCAL.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10129,29 +10128,28 @@ msgstr "" "SETLOCAL starter en lokal ændring af miljø variable i en batchfil.\n" "\n" -"Miljø variable ændringer gjort efter en SETLOCAL er lokale i en batchfil, " -"og\n" -"er aktive indtil den næste ENDLOCAL bliver mødt eller slutning af filen,\n" +"Miljø variable ændringer gjort efter en SETLOCAL er lokale i en batchfil,\n" +"og er aktive indtil den næste ENDLOCAL bliver mødt eller slutning af filen,\n" "hvad der end kommer først. På dette tidspunkt genskabes tidligere miljø\n" "variable værdier.\n" -#: cmd.rc:248 +#: cmd.rc:275 #, fuzzy #| msgid "" #| "PUSHD saves the current directory onto a\n" #| "stack, and then changes the current directory to the supplied one.\n" msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" "PUSHD lagrer arbejdsmappen på en stak og ændrer derefter\n" "arbejdsmappen til det som er angivet.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD ændrer arbejdsmappen til det som sidst blev gemt med PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10159,7 +10157,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC viser eller ændrer filendelse tilknytninger.\n" @@ -10171,54 +10169,53 @@ "Angives ingen filtype efter lighedstegnet, fjernes den nuværende\n" "tilknytning, hvis der er en.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE viser eller ændrer åbnings kommandoer tilknyttet en fil type.\n" "\n" "Syntaks: FTYPE [filtype[=[åbnings kommando]]]\n" "\n" -"Uden parametre vises filtyper for hvilken en åbnings kommando allerede er " -"defineret.\n" -"Hvis brugt med kun en filtype, vises den tilknyttede åbnings kommando " -"streng, hvis der en.\n" -"Angives ingen åbnings kommando efter lighedstegnet fjernes åbnings " +"Uden parametre vises filtyper for hvilken en åbnings kommando allerede er\n" +"defineret. Hvis brugt med kun en filtype, vises den tilknyttede åbnings\n" +"kommando streng, hvis der en.\n" +"Angives ingen åbnings kommando efter lighedstegnet fjernes åbnings\n" "kommandoen der er tilknyttet den angivne fil type.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" "MORE lader dig bladre gennem indhold af filer eller inddata fra et rør.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE viser en tekst og venter indtil brugeren\n" -"trykker en godkendt tast fra en valg liste.\n" +"CHOICE viser en tekst og venter indtil brugeren trykker en godkendt tast\n" +"fra en valg liste.\n" "CHIOCE bliver hovedsaglig brug til menu valg i en batchfil.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" "EXIT afslutter gældende CMD og returnerer til operativsystemet eller det\n" "program CMD blev startet af.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10298,110 +10295,110 @@ "\n" "Skriv «HELP » for mere information om kommandoerne ovenover.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Er du sikker?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "J" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Manglende filtilknytning for endelsen %1\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Ingen åben kommando er tilknyttet filtypen '%1'\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Overskriv %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Mere..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "Linje i batchfil muligvis forkortet. Bruger:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Argument mangler\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Syntaks fejl\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Ingen hjælp tilgængelig for %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "GOTO Destination ikke fundet\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Nuværende dato er %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Nuværende tid er %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Skriv ny dato: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Skriv ny tid: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Miljøvariable %1 er ikke defineret\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Kunne ikke åbne «%1»\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Kan ikke kalde batch label udenfor batchfil\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "A" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Slet %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Echo er %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Verify er %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verify skal være ON eller OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Parameter fejl\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10409,74 +10406,74 @@ "Volume serienummeret er %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Volumen's etiket (11 karakterer, ENTER for ingen)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH ikke fundet\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Tryk på en tast for at fortsætte... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Wine kommandoprompt" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Mere? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "Input linjen er for lang.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "Volume i drev %1!c! er %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "Volume in drev %1!c! har intet navn.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Ja|Nej)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Ja|Nej|Alle)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 #, fuzzy #| msgid "Unexpected network error.\n" msgid "Expected an operator.\n" msgstr "Uventet netværksfejl.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12129,7 +12126,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12139,7 +12136,7 @@ "med den specifikke fil.\n" "ShellExecuteEx fejlet" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "Kunne ikke oversætte det angivne Unix filnavn til et DOS filnavn." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/de.po wine-staging-1.7.47~ubuntu14.10.1/po/de.po --- wine-staging-1.7.46~ubuntu14.10.1/po/de.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/de.po 2015-07-12 05:36:18.000000000 +0000 @@ -9516,7 +9516,7 @@ msgid "Referral hop limit exceeded" msgstr "Überschreitung der maximalen Anzahl von Weiterleitungen" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9524,7 +9524,7 @@ "Noch nicht implementiert\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: Datei nicht gefunden\n" @@ -9608,23 +9608,23 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" "CALL wird in einer Batchdatei genutzt, um Befehle aus\n" -"einer anderen Batchdatei auszuführen. Wenn die Batchdatei endet, kehrt\n" -"die Kontrolle zu der Datei zurück, die sie aufgerufen hat. Der CALL Befehl\n" -"kann Parameter an die aufgerufene Prozedur übergeben.\n" +"einer anderen Batchdatei auszuführen. Wenn die Batchdatei endet, kehrt die\n" +"Kontrolle zu der Datei zurück, die sie aufgerufen hat. Der CALL Befehl kann\n" +"Parameter an die aufgerufene Prozedur übergeben.\n" "\n" "Änderungen am aktuellen Verzeichnis, Umgebungsvariablen usw. innerhalb\n" "einer gerufenen Prozedur werden von der aufrufenden geerbt.\n" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" @@ -9632,46 +9632,46 @@ "CD ist die Kurzform von CHDIR. Es wechselt das aktuelle\n" "Verzeichnis.\n" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR wechselt in ein Verzeichnis.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS löscht den Bildschirminhalt der Konsole.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY kopiert eine Datei.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY Ändert das Eingabe/Ausgabe - Gerät.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE zeigt oder ändert das Systemdatum.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL löscht eine oder mehrere Dateien.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR listet den Inhalt eines Verzeichnisses.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -"ECHO zeigt die auf dem aktuellen " +"ECHO zeigt die auf dem aktuellen\n" "Terminalgerät.\n" "\n" "ECHO ON bewirkt, dass alle nachfolgenden Befehle in einer Batchdatei zuerst\n" @@ -9681,11 +9681,11 @@ "auf OFF) um. Um den ECHO OFF Befehl nicht anzeigen zu lassen, kann vor\n" "diesen ein @ Zeichen gesetzt werden.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE löscht die angegebenen Dateien.\n" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9701,16 +9701,16 @@ "Das %-Zeichen muss doppelt angegeben werden, wenn FOR in Batchdateien\n" "verwendet wird.\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" @@ -9718,15 +9718,15 @@ "einer Batchdatei.\n" "\n" "Das Label, das Ziel eines GOTOs ist, kann bis zu 255 Zeichen lang sein,\n" -"darf aber keine Leerzeichen enthalten (dies ist ein Unterschied\n" -"zu anderen Betriebssystemen). Wenn zwei oder mehr identische Labels\n" -"in einer Batchdatei existieren, dann wird stets zum ersten davon\n" -"gesprungen. Der Versuch, mit GOTO zu einem nicht vorhandenen Label\n" -"zu springen, beendet die Ausführung der Batchdatei.\n" +"darf aber keine Leerzeichen enthalten (dies ist ein Unterschied zu anderen\n" +"Betriebssystemen). Wenn zwei oder mehr identische Labels in einer\n" +"Batchdatei existieren, dann wird stets zum ersten davon gesprungen. Der\n" +"Versuch, mit GOTO zu einem nicht vorhandenen Label zu springen, beendet die\n" +"Ausführung der Batchdatei.\n" "\n" "GOTO hat keine Auswirkungen, wenn es interaktiv genutzt wird.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9734,7 +9734,7 @@ "HELP zeigt eine kurze Hilfe zu einem Thema.\n" "HELP ohne Argumente zeigt alle eingebauten CMD-Befehle.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9752,10 +9752,10 @@ " IF [NOT] ERRORLEVEL Nummer Befehl\n" "\n" "In der zweiten Form des Befehls müssen die beiden Zeichenketten in\n" -"doppelten Anführungszeichen stehen. Der Vergleich beachtet keine Groß- und " +"doppelten Anführungszeichen stehen. Der Vergleich beachtet keine Groß- und\n" "Kleinschreibung.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9767,43 +9767,42 @@ "\n" "Syntax: LABEL [Laufwerk:]\n" "Der Befehl wartet auf die Eingabe einer neuen Bezeichnung für das\n" -"angegebene Laufwerk. Sie können sich auch die Laufwerksbezeichnung\n" -"mit dem VOL Befehl anzeigen lassen.\n" +"angegebene Laufwerk. Sie können sich auch die Laufwerksbezeichnung mit dem\n" +"VOL Befehl anzeigen lassen.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD ist die Kurzform von MKDIR.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR erstellt ein Verzeichnis.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" "MOVE verschiebt eine Datei oder ein Verzeichnis zu einem neuen Punkt im\n" "Dateisystem.\n" "\n" -"Ist das zu verschiebende Objekt ein Verzeichnis, dann werden alle Dateien " +"Ist das zu verschiebende Objekt ein Verzeichnis, dann werden alle Dateien\n" "und Unterverzeichnisse unterhalb des Objektes genauso verschoben.\n" "\n" -"MOVE schlägt fehl, wenn die alte und die neue Position auf verschiedenen DOS " -"Laufwerken sind.\n" +"MOVE schlägt fehl, wenn die alte und die neue Position auf verschiedenen\n" +"DOS Laufwerken sind.\n" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9812,28 +9811,28 @@ "PATH ändert oder zeigt den CMD Suchpfad an.\n" "\n" "Nach der Eingabe von PATH wird die aktuelle PATH-Einstellung angezeigt\n" -"(ursprünglich aus der Registry). Um die Einstellung zu ändern, muss\n" -"nach dem PATH Befehl der neue Wert angegeben werden.\n" +"(ursprünglich aus der Registry). Um die Einstellung zu ändern, muss nach\n" +"dem PATH Befehl der neue Wert angegeben werden.\n" "\n" "Es ist auch möglich, den PATH mit Hilfe der PATH Umgebungsvariable zu\n" "modifizieren. Zum Beispiel:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -"PAUSE lässt eine Meldung auf dem Bildschirm erscheinen, die zum Drücken " +"PAUSE lässt eine Meldung auf dem Bildschirm erscheinen, die zum Drücken\n" "einer Taste auffordert.\n" "\n" -"Dies wird hauptsächlich in Batchdateien genutzt, um dem Benutzer\n" -"zu erlauben, die Ausgabe eines vorherigen Befehls zu lesen,\n" -"bevor sie durch Scrollen vom Bildschirm verschwindet.\n" +"Dies wird hauptsächlich in Batchdateien genutzt, um dem Benutzer zu\n" +"erlauben, die Ausgabe eines vorherigen Befehls zu lesen, bevor sie durch\n" +"Scrollen vom Bildschirm verschwindet.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9869,41 +9868,40 @@ "$q Gleichheitszeichen $t aktuelle Zeit $v cmd Version\n" "\n" "Hinweis: Die Eingabe des PROMPT Befehls ohne eine Prompt-Zeichenkette,\n" -"setzt den Prompt auf den Standardwert zurück, dieser entspricht dem " -"aktuellen\n" -"Verzeichnis (inklusive dem aktuellen Laufwerksbuchstaben), gefolgt von\n" -"einem Größerzeichen (>) (genau wie der PROMPT $p$g Befehl).\n" -"\n" -"Der Prompt kann auch durch Änderung der PROMPT Umgebungsvariable\n" -"angepasst werden, folglich hat der Befehl 'SET PROMPT=Text' die gleiche\n" -"Auswirkung wie 'PROMPT Text'.\n" +"setzt den Prompt auf den Standardwert zurück, dieser entspricht dem\n" +"aktuellen Verzeichnis (inklusive dem aktuellen Laufwerksbuchstaben),\n" +"gefolgt von einem Größerzeichen (>) (genau wie der PROMPT $p$g Befehl).\n" +"\n" +"Der Prompt kann auch durch Änderung der PROMPT Umgebungsvariable angepasst\n" +"werden, folglich hat der Befehl 'SET PROMPT=Text' die gleiche Auswirkung\n" +"wie 'PROMPT Text'.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" "Beginnt eine Befehlszeile mit REM (gefolgt von einem Leerzeichen) wird\n" "keine Aktion ausgeführt, sie kann daher auch als Kommentar in einer\n" "Batchdatei genutzt werden.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "REN ist die Kurzform von RENAME.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME benennt die angegebenen Dateien um.\n" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD ist die Kurzform von RMDIR. Löscht ein Verzeichnis.\n" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "RMDIR löscht das angegebene Verzeichnis.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9913,14 +9911,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET ändert oder zeigt die CMD Umgebungsvariablen an.\n" "\n" @@ -9936,97 +9933,97 @@ "\n" "In Wine werden die Umgebungsvariablen des darunterliegenden Betriebssystems\n" "mit in die Win32 Umgebung eingebunden, deshalb gibt es gewöhnlich mehr\n" -"Werte als es sie in einer ursprünglichen Win32 Realisierung gäbe. " -"Anmerkung:\n" -"Es ist nicht möglich die Umgebungsvariablen des Betriebssystems vom CMD\n" -"aus zu beeinflussen.\n" - -#: cmd.rc:211 -msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"Werte als es sie in einer ursprünglichen Win32 Realisierung gäbe.\n" +"Anmerkung: Es ist nicht möglich die Umgebungsvariablen des Betriebssystems\n" +"vom CMD aus zu beeinflussen.\n" + +#: cmd.rc:234 +msgid "" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "SHIFT wird in einer Batchdatei genutzt, um einen Parameter vom Anfang der\n" -"Liste zu entfernen, so das der Parameter 2 zu Parameter 1 wird und so " -"weiter.\n" -"Es hat keine Auswirkungen, wenn es von der Befehlszeile aus aufgerufen " -"wird.\n" +"Liste zu entfernen, so das der Parameter 2 zu Parameter 1 wird und so\n" +"weiter. Es hat keine Auswirkungen, wenn es von der Befehlszeile aus\n" +"aufgerufen wird.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -"Startet ein Programm, oder öffnet ein Dokument in dem Programm, das " +"Startet ein Programm, oder öffnet ein Dokument in dem Programm, das\n" "normalerweise für Dateien mit dieser Dateiendung benutzt wird.\n" "Aufruf:\n" "start [Optionen] Dateiname_Programm [...]\n" "start [Optionen] Dateiname_Dokument\n" "\n" "Optionen:\n" -"\"titel\" Spezifiziert den Titel für Kindfenster.\n" -"/d Ordner Startet das Programm im angegebenen Verzeichnis.\n" -"/b Für dieses Programm wird keine neue Konsole erstellt.\n" -"/i Startet das Programm mit einem neuen Satz Umgebungsvariablen.\n" -"/min Startet das Programm minimiert.\n" -"/max Startet das Programm maximiert.\n" -"/low Startet das Programm in der Leerlauf-Prioritätsklasse.\n" -"/normal Startet das Programm in der normalen Prioritätsklasse.\n" -"/high Startet das Programm in der hohen Prioritätsklasse.\n" -"/realtime Startet das Programm in der Echtzeit-Prioritätsklasse.\n" -"/abovenormal Startet das Programm in der gehobenen Prioritätsklasse.\n" -"/belownormal Startet das Programm in der abgesenkten Prioritätsklasse.\n" -"/node Startet das Programm auf dem angegebenen NUMA-Knoten.\n" +"\"titel\" Spezifiziert den Titel für Kindfenster.\n" +"/d Ordner Startet das Programm im angegebenen Verzeichnis.\n" +"/b Für dieses Programm wird keine neue Konsole erstellt.\n" +"/i Startet das Programm mit einem neuen Satz\n" +" Umgebungsvariablen.\n" +"/min Startet das Programm minimiert.\n" +"/max Startet das Programm maximiert.\n" +"/low Startet das Programm in der Leerlauf-Prioritätsklasse.\n" +"/normal Startet das Programm in der normalen Prioritätsklasse.\n" +"/high Startet das Programm in der hohen Prioritätsklasse.\n" +"/realtime Startet das Programm in der Echtzeit-Prioritätsklasse.\n" +"/abovenormal Startet das Programm in der gehobenen Prioritätsklasse.\n" +"/belownormal Startet das Programm in der abgesenkten Prioritätsklasse.\n" +"/node Startet das Programm auf dem angegebenen NUMA-Knoten.\n" "/affinity Maske Startet das Programm mit der angegebenen Affinitätsmaske.\n" -"/wait Wartet, bis das Programm endet und beendet sich selbst mit " -"dessen Exitcode.\n" -"/unix Öffnet einen Unix-Dateinamen wie mit dem Windows-Explorer.\n" -"/ProgIDOpen Öffnet ein Dokument mit der angegebenen progID.\n" -"/? Zeigt diese Hilfe an und beendet sich.\n" +"/wait Wartet, bis das Programm endet und beendet sich selbst mit\n" +" dessen Exitcode.\n" +"/unix Öffnet einen Unix-Dateinamen wie mit dem Windows-Explorer.\n" +"/ProgIDOpen Öffnet ein Dokument mit der angegebenen progID.\n" +"/? Zeigt diese Hilfe an und beendet sich.\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME Setzt oder zeigt die aktuelle Systemzeit an.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE setzt den Fenstertitel für das CMD-Fenster.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -"TYPE kopiert zu dem Konsolengerät (oder dorthin, wohin\n" -"dies umgeleitet wurde). Es wird keine Überprüfung vorgenommen, ob die\n" -"Datei lesbaren Text enthält.\n" +"TYPE kopiert zu dem Konsolengerät (oder dorthin, wohin dies\n" +"umgeleitet wurde). Es wird keine Überprüfung vorgenommen, ob die Datei\n" +"lesbaren Text enthält.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10045,23 +10042,23 @@ "\n" "Das Verify Flag hat keine Funktion in Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER zeigt die aktuelle Version von CMD an.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL zeigt die Datenträgernummer an.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -"ENDLOCAL beendet die Begrenzung der Gültigkeit von Änderungen\n" -"die von einer Stapelverarbeitungsdatei mit SETLOCAL gestartet wurde.\n" +"ENDLOCAL beendet die Begrenzung der Gültigkeit von Änderungen die von einer\n" +"Stapelverarbeitungsdatei mit SETLOCAL gestartet wurde.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10073,25 +10070,25 @@ "SETLOCAL startet die Begrenzung der Gültigkeit von Änderungen.\n" "\n" "Änderungen der Umgebung nach SETLOCAL sind lokal zur\n" -"Stapelverarbeitungsdatei und werden bis zum nächsten ENDLOCAL\n" -"vorgehalten (oder bis zum Ende der Datei falls dies zuerst kommt).\n" -"Ab diesem Punkt wird die vorherige Umgebung wiederhergestellt.\n" +"Stapelverarbeitungsdatei und werden bis zum nächsten ENDLOCAL vorgehalten\n" +"(oder bis zum Ende der Datei falls dies zuerst kommt). Ab diesem Punkt wirt\n" +"die vorherige Umgebung wiederhergestellt.\n" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -"PUSHD speichert das aktuelle Verzeichnis auf einem\n" -"Stack und wechselt das Arbeitsverzeichnis zu dem angegebenen.\n" +"PUSHD speichert das aktuelle Verzeichnis auf einem Stack und\n" +"wechselt das Arbeitsverzeichnis zu dem angegebenen.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -"POPD wechselt das Arbeitsverzeichnis zu dem zuletzt\n" -"mit PUSHD gespeicherten.\n" +"POPD wechselt das Arbeitsverzeichnis zu dem zuletzt mit PUSHD " +"gespeicherten.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10099,7 +10096,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC zeigt oder ändert die Zuordnung von Dateierweiterungen.\n" @@ -10111,17 +10108,17 @@ "Ohne Zuordnung nach dem Gleichheitszeichen wird die aktuelle Zuordnung\n" "gelöscht, falls es eine gab.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE zeigt oder ändert den Öffnen-Befehl der Zuordnung einer " @@ -10129,36 +10126,36 @@ "\n" "Syntax: FTYPE [Dateityp[=[Öffnen-Befehl]]]\n" "\n" -"Zeigt ohne Parameter die Dateitypen für die aktuell Öffnen-Befehle definiert " -"sind.\n" -"Mit nur einem Dateityp, wird der aktuelle Öffnen-Befehl angezeigt, wenn es " +"Zeigt ohne Parameter die Dateitypen für die aktuell Öffnen-Befehle\n" +"definiert sind.\n" +"Mit nur einem Dateityp, wird der aktuelle Öffnen-Befehl angezeigt, wenn es\n" "einen gibt.\n" -"Ohne Öffnen-Befehl nach dem Gleichheitszeichen wird der aktuell zugeordnete " +"Ohne Öffnen-Befehl nach dem Gleichheitszeichen wird der aktuell zugeordnete\n" "Öffnen-Befehl gelöscht.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE gibt Dateien und Pipes seitenweise aus.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE zeigt einen Text auf dem Bildschirm an und wartet,\n" -"bis der Benutzer eine erlaubte Taste aus einer wählbaren Liste drückt.\n" +"CHOICE zeigt einen Text auf dem Bildschirm an und wartet, bis der Benutzer\n" +"eine erlaubte Taste aus einer wählbaren Liste drückt.\n" "CHOICE wird hauptsächlich als Menüauswahl in einer Batchdatei genutzt.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT beendet die aktuelle Befehlssitzung und kehrt zum\n" -"Betriebssystem oder der Shell zurück, von der CMD gestartet wurde.\n" +"EXIT beendet die aktuelle Befehlssitzung und kehrt zum Betriebssystem oder\n" +"der Shell zurück, von der CMD gestartet wurde.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10239,112 +10236,112 @@ "Geben Sie HELP ein, um weitere Informationen zu einem der obigen\n" "Befehle zu erhalten.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Sind sie sicher?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "J" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Verknüpfung für Dateiendung %1 fehlt\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Kein Befehl zum Öffnen für Dateityp '%1'\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "%1 überschreiben?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Mehr..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" "Die Zeile bei der Batchverarbeitung ist möglicherweise abgeschnitten. " "Benutze:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Argument fehlt\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Syntaxfehler\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Hilfe für %1 ist nicht verfügbar\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Das Sprungziel von GOTO wurde nicht gefunden\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Aktuelles Datum ist %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Aktuelle Zeit ist %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Geben Sie das neue Datum ein: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Geben Sie die neue Zeit ein: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Die Umgebungsvariable %1 ist nicht definiert\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "'%1' konnte nicht geöffnet werden\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Kann kein Batch-Label außerhalb eines Batch-Skripts aufrufen\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "A" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Lösche %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Echo ist %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Verify ist %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verify muss ON oder OFF sein\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Parameterfehler\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10352,74 +10349,74 @@ "Datenträgernummer ist %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Datenträgerbezeichnung (11 Zeichen, für keine)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH nicht gefunden\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Drücken Sie eine Taste um fortzufahren... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Wine Befehlsprozessor" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "Microsoft Windows %1!S!\n" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Mehr? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "Die Eingabezeile ist zu lang.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "Datenträger in Laufwerk %1!c! ist %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "Datenträger in Laufwerk %1!c! hat keine Bezeichnung.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Ja|Nein)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Ja|Nein|Alle)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" "'%1' konnte nicht als interner oder externer Befehl,\n" "oder als Batch-Skript erkannt werden.\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "'Division durch Null'-Fehler.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "Operand erwartet.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "Operator erwartet.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "Klammern stimmen nicht überein.\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12046,7 +12043,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "regsvr32: DLL '%1' erfolgreich deinstalliert\n" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12056,7 +12053,7 @@ "der angegebenen Datei verknüpft.\n" "ShellExecuteEx fehlgeschlagen" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" "Der angegebene Unix-Dateiname konnte nicht in einen DOS-Dateinamen übersetzt " diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/el.po wine-staging-1.7.47~ubuntu14.10.1/po/el.po --- wine-staging-1.7.46~ubuntu14.10.1/po/el.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/el.po 2015-07-12 05:36:18.000000000 +0000 @@ -9362,13 +9362,13 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" msgstr "" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 #, fuzzy msgid "%1: File Not Found\n" msgstr "Το αρχείο δε βρέθηκε" @@ -9433,66 +9433,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9501,27 +9501,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9533,7 +9533,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9542,47 +9542,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9605,29 +9604,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9637,68 +9636,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9709,21 +9708,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9733,17 +9732,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9751,42 +9750,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -9828,182 +9827,182 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 #, fuzzy msgid "No help available for %1\n" msgstr "ΜΗ διαθέσιμος; " -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr "" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr "" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11604,14 +11603,14 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" "ShellExecuteEx failed" msgstr "" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/en.po wine-staging-1.7.47~ubuntu14.10.1/po/en.po --- wine-staging-1.7.46~ubuntu14.10.1/po/en.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/en.po 2015-07-12 05:36:18.000000000 +0000 @@ -9468,7 +9468,7 @@ msgid "Referral hop limit exceeded" msgstr "Referral hop limit exceeded" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9476,7 +9476,7 @@ "Not Yet Implemented\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: File Not Found\n" @@ -9558,23 +9558,23 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" @@ -9582,40 +9582,40 @@ "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR changes the current default directory.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS clears the console screen.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY copies a file.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY changes the input/output device.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE shows or changes the system date.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL deletes a file or set of files.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR lists the contents of a directory.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9623,18 +9623,18 @@ msgstr "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE deletes a file or set of files.\n" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9648,31 +9648,31 @@ "\n" "The % sign must be doubled when using FOR in a batch file.\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9680,7 +9680,7 @@ "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9700,7 +9700,7 @@ "In the second form of the command, string1 and string2 must be in double\n" "quotes. The comparison is not case-sensitive.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9714,39 +9714,37 @@ "The command will prompt you for the new volume label for the given drive.\n" "You can display the disk volume label with the VOL command.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD is the short version of MKDIR. It creates a subdirectory.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR creates a subdirectory.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9754,27 +9752,27 @@ msgstr "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9816,32 +9814,32 @@ "The prompt can also be changed by altering the PROMPT environment variable,\n" "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "REN is the short version of RENAME. It renames a file.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME renames a file.\n" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" "RD is the short version of RMDIR. It deletes a directory.\n" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "RMDIR deletes a directory.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9851,14 +9849,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9868,98 +9865,99 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimised.\n" -"/max Start the program maximised.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +" exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +" explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME sets or shows the current system time.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE sets the window title for the cmd window.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9977,23 +9975,23 @@ "\n" "The verify flag has no function in Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER displays the version of cmd you are running.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL shows the volume label of a disk device.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -"ENDLOCAL ends localisation of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10009,19 +10007,19 @@ "file, whichever comes first), at which point the previous environment\n" "settings are restored.\n" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD changes current directory to the last one saved with PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10029,7 +10027,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC shows or modifies file extension associations.\n" @@ -10038,56 +10036,56 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE displays output of files or piped input in pages.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10167,110 +10165,110 @@ "\n" "Enter HELP for further information on any of the above commands.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Are you sure?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "Y" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "File association missing for extension %1\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "No open command associated with file type '%1'\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Overwrite %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "More..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "Line in Batch processing possibly truncated. Using:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Argument missing\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Syntax error\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "No help available for %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Target to GOTO not found\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Current Date is %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Current Time is %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Enter new date: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Enter new time: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Environment variable %1 not defined\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Failed to open '%1'\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Cannot call batch label outside of a batch script\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "A" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Delete %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Echo is %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Verify is %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verify must be ON or OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Parameter error\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10278,73 +10276,73 @@ "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Volume label (11 characters, for none)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH not found\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Press any key to continue... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Wine Command Prompt" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "Microsoft Windows %1!S!\n" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "More? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "The input line is too long.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "Volume in drive %1!c! is %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "Volume in drive %1!c! has no label.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Yes|No)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Yes|No|All)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" "Can't recognise '%1' as an internal or external command, or batch script.\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "Division by zero error.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "Expected an operand.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "Expected an operator.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "Mismatch in parentheses.\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11968,7 +11966,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "regsvr32: Successfully uninstalled DLL '%1'\n" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -11978,7 +11976,7 @@ "specified file.\n" "ShellExecuteEx failed" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "Could not translate the specified Unix filename to a DOS filename." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/en_US.po wine-staging-1.7.47~ubuntu14.10.1/po/en_US.po --- wine-staging-1.7.46~ubuntu14.10.1/po/en_US.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/en_US.po 2015-07-12 05:36:18.000000000 +0000 @@ -9468,7 +9468,7 @@ msgid "Referral hop limit exceeded" msgstr "Referral hop limit exceeded" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9476,7 +9476,7 @@ "Not Yet Implemented\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: File Not Found\n" @@ -9558,23 +9558,23 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" @@ -9582,40 +9582,40 @@ "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR changes the current default directory.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS clears the console screen.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY copies a file.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY changes the input/output device.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE shows or changes the system date.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL deletes a file or set of files.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR lists the contents of a directory.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9623,18 +9623,18 @@ msgstr "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE deletes a file or set of files.\n" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9648,31 +9648,31 @@ "\n" "The % sign must be doubled when using FOR in a batch file.\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9680,7 +9680,7 @@ "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9700,7 +9700,7 @@ "In the second form of the command, string1 and string2 must be in double\n" "quotes. The comparison is not case-sensitive.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9714,39 +9714,37 @@ "The command will prompt you for the new volume label for the given drive.\n" "You can display the disk volume label with the VOL command.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD is the short version of MKDIR. It creates a subdirectory.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR creates a subdirectory.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9754,27 +9752,27 @@ msgstr "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9816,32 +9814,32 @@ "The prompt can also be changed by altering the PROMPT environment variable,\n" "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "REN is the short version of RENAME. It renames a file.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME renames a file.\n" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" "RD is the short version of RMDIR. It deletes a directory.\n" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "RMDIR deletes a directory.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9851,14 +9849,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9868,98 +9865,99 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +" exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +" explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME sets or shows the current system time.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE sets the window title for the cmd window.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9977,23 +9975,23 @@ "\n" "The verify flag has no function in Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER displays the version of cmd you are running.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL shows the volume label of a disk device.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10009,19 +10007,19 @@ "file, whichever comes first), at which point the previous environment\n" "settings are restored.\n" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD changes current directory to the last one saved with PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10029,7 +10027,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC shows or modifies file extension associations.\n" @@ -10038,56 +10036,56 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE displays output of files or piped input in pages.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10167,110 +10165,110 @@ "\n" "Enter HELP for further information on any of the above commands.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Are you sure?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "Y" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "File association missing for extension %1\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "No open command associated with file type '%1'\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Overwrite %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "More..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "Line in Batch processing possibly truncated. Using:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Argument missing\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Syntax error\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "No help available for %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Target to GOTO not found\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Current Date is %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Current Time is %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Enter new date: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Enter new time: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Environment variable %1 not defined\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Failed to open '%1'\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Cannot call batch label outside of a batch script\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "A" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Delete %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Echo is %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Verify is %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verify must be ON or OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Parameter error\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10278,73 +10276,73 @@ "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Volume label (11 characters, for none)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH not found\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Press any key to continue... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Wine Command Prompt" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "Microsoft Windows %1!S!\n" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "More? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "The input line is too long.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "Volume in drive %1!c! is %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "Volume in drive %1!c! has no label.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Yes|No)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Yes|No|All)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" "Can't recognize '%1' as an internal or external command, or batch script.\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "Division by zero error.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "Expected an operand.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "Expected an operator.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "Mismatch in parentheses.\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11968,7 +11966,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "regsvr32: Successfully uninstalled DLL '%1'\n" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -11978,7 +11976,7 @@ "specified file.\n" "ShellExecuteEx failed" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "Could not translate the specified Unix filename to a DOS filename." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/eo.po wine-staging-1.7.47~ubuntu14.10.1/po/eo.po --- wine-staging-1.7.46~ubuntu14.10.1/po/eo.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/eo.po 2015-07-12 05:36:18.000000000 +0000 @@ -9262,13 +9262,13 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" msgstr "" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: Dosiero ne trovita\n" @@ -9332,66 +9332,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9400,27 +9400,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9432,7 +9432,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9441,47 +9441,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9504,29 +9503,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9536,68 +9535,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9608,21 +9607,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9632,17 +9631,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9650,42 +9649,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -9727,181 +9726,181 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Ne disponebla por %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Ĉu forigi %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr "" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr "" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11494,14 +11493,14 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" "ShellExecuteEx failed" msgstr "" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/es.po wine-staging-1.7.47~ubuntu14.10.1/po/es.po --- wine-staging-1.7.46~ubuntu14.10.1/po/es.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/es.po 2015-07-12 05:36:18.000000000 +0000 @@ -9654,7 +9654,7 @@ msgid "Referral hop limit exceeded" msgstr "Límite de saltos de remisiones excedido" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9662,7 +9662,7 @@ "Aún no implementado\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: Archivo no encontrado\n" @@ -9745,25 +9745,25 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -"CALL se utiliza dentro de un archivo de\n" -"lotes para ejecutar comandos existentes dentro de otro archivo de lotes.\n" -"Cuando el archivo de lotes existe, el control regresa al archivo desde el\n" -"que fue llamado. Con el comando CALL se pueden pasar parámetros al\n" -"procedimiento llamado.\n" +"CALL se utiliza dentro de un archivo de lotes\n" +"para ejecutar comandos existentes dentro de otro archivo de lotes. Cuando\n" +"el archivo de lotes existe, el control regresa al archivo desde el que fue\n" +"llamado. Con el comando CALL se pueden pasar parámetros al procedimiento\n" +"llamado.\n" "\n" "Cualquier cambio sobre el directorio por defecto, las variables de entorno\n" -"u otro cambio realizado desde una llamada a procedimiento son heredados\n" -"por el procedimiento que realizo la llamada.\n" +"u otro cambio realizado desde una llamada a procedimiento son heredados por\n" +"el procedimiento que realizo la llamada.\n" -#: cmd.rc:43 +#: cmd.rc:44 #, fuzzy #| msgid "" #| "CD is the short version of CHDIR. It changes the current\n" @@ -9772,45 +9772,45 @@ "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -"CD es la versión corta del comando CHDIR. Este\n" -"comando cambia el directorio actual.\n" +"CD es la versión corta del comando CHDIR. Este comando cambia\n" +"el directorio actual.\n" -#: cmd.rc:44 +#: cmd.rc:47 #, fuzzy #| msgid "CHDIR changes the current default directory.\n" msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR cambia el directorio actual.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS limpia la consola actual.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY copia un archivo.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY cambia el dispositivo de entrada/salida por defecto.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE muestra o cambia la fecha del sistema.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL borra un archivo o grupo de archivos.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR muestra el contenido de un directorio.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9818,18 +9818,18 @@ msgstr "" "ECHO muestra la suministrada en el terminal actual.\n" "\n" -"ECHO ON muestra en pantalla los comandos de un archivo de lotes\n" -"previamente a su ejecución.\n" +"ECHO ON muestra en pantalla los comandos de un archivo de lotes previamente\n" +"a su ejecución.\n" "\n" -"ECHO OFF invierte el efecto de un ECHO ON previamente activado (ECHO\n" -"por defecto es OFF). Es posible ocultar el comando ECHO OFF añadiendo\n" -"un signo @ delante de él.\n" +"ECHO OFF invierte el efecto de un ECHO ON previamente activado (ECHO por\n" +"defecto es OFF). Es posible ocultar el comando ECHO OFF añadiendo un\n" +"signo @ delante de él.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE borra un archivo o grupo de archivos.\n" -#: cmd.rc:71 +#: cmd.rc:85 #, fuzzy #| msgid "" #| "The FOR command is used to execute a command for each of a set of files.\n" @@ -9847,32 +9847,32 @@ "\n" "Sintaxis: FOR %variable IN (lista) DO comando\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -"El comando GOTO mueve la ejecución a otro mandato dentro de un\n" -"archivo de lotes.\n" +"El comando GOTO mueve la ejecución a otro mandato dentro de un archivo de\n" +"lotes.\n" "\n" -"La etiqueta que es el objetivo de un comando GOTO puede ser de hasta\n" -"255 caracteres de longitud pero no puede incluir espacios (esto es\n" -"diferente a otros sistemas operativos). Si dos o más etiquetas\n" -"idénticas existen en un archivo de lotes, siempre se ejecutará la\n" -"primera de ellas. Una llamada GOTO a una etiqueta inexistente\n" -"terminara la ejecución del archivo de lotes.\n" +"La etiqueta que es el objetivo de un comando GOTO puede ser de hasta 255\n" +"caracteres de longitud pero no puede incluir espacios (esto es diferente a\n" +"otros sistemas operativos). Si dos o más etiquetas idénticas existen en un\n" +"archivo de lotes, siempre se ejecutará la primera de ellas. Una llamada\n" +"GOTO a una etiqueta inexistente terminara la ejecución del archivo de\n" +"lotes.\n" "\n" "El comando GOTO no tiene ningún efecto cuando se usa interactivamente.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9880,7 +9880,7 @@ "HELP muestra una breve ayuda sobre un comando.\n" "HELP sin ningún otro argumento muestra los comandos CMD por defecto.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9900,7 +9900,7 @@ "En la segunda forma del comando, cadena1 y cadena2 deben estar entre\n" "comillas dobles. La comparación no distingue mayúsculas de minúsculas.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9914,23 +9914,22 @@ "El comando le solicitará una nueva etiqueta de volumen para la unidad.\n" "Puede ver la etiqueta actual del disco con el comando VOL.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" "MD es la versión corta de MKDIR. Este comando crea un " "subdirectorio.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "Ayuda crea un subdirectorio.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" @@ -9943,13 +9942,13 @@ "MOVE fallara si la antigua localización y la nueva están en diferentes\n" "unidades de DOS.\n" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9961,25 +9960,24 @@ "(inicialmente este valor se obtiene del registro). Para cambiar la\n" "configuración ejecute PATH seguido del nuevo valor.\n" "\n" -"También es posible modificar el PATH usando la variable de entorno\n" -"PATH, por ejemplo:\n" +"También es posible modificar el PATH usando la variable de entorno PATH,\n" +"por ejemplo:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE muestra un mensaje en pantalla pidiendo al usuario que pulse\n" "cualquier tecla para continuar.\n" "\n" -"Este comando es útil en archivos de lotes para permitir al usuario\n" -"leer la salida de un comando antes de que este desaparezca de la\n" -"pantalla.\n" +"Este comando es útil en archivos de lotes para permitir al usuario leer la\n" +"salida de un comando antes de que este desaparezca de la pantalla.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -10003,12 +10001,11 @@ msgstr "" "PROMPT ajusta el prompt de la línea de comandos.\n" "\n" -"La cadena que sigue al comando PROMPT (y el espacio inmediatamente\n" -"después) aparece al principio de la línea cuando cmd está esperando\n" -"la entrada de comandos.\n" +"La cadena que sigue al comando PROMPT (y el espacio inmediatamente después)\n" +"aparece al principio de la línea cuando cmd está esperando la entrada de\n" +"comandos.\n" "\n" -"Las siguientes cadenas de caracteres tienen el significado que se\n" -"muestra:\n" +"Las siguientes cadenas de caracteres tienen el significado que se muestra:\n" "\n" "$$ Signo dólar $_ Nueva línea $b Signo tubería (|)\n" "$d Fecha actual $e Escape $g Signo >\n" @@ -10016,50 +10013,50 @@ "$q Signo igual $t Hora actual $v Versión de cmd\n" "\n" "Nótese que si se introduce el comando PROMPT sin una cadena de prompt\n" -"reinicializará el prompt al valor por defecto, que es el directorio\n" -"actual (que incluye la letra de la unidad actual) seguido por un signo\n" -"mayor que (>).\n" +"reinicializará el prompt al valor por defecto, que es el directorio actual\n" +"(que incluye la letra de la unidad actual) seguido por un signo mayor\n" +"que (>).\n" "(como un comando PROMPT $p$g).\n" "\n" "El prompt puede también ser cambiado alterando la variable de entorno\n" -"PROMPT, por lo que el comando 'SET PROMPT=texto' tiene el mismo efecto\n" -"que 'PROMPT texto'.\n" +"PROMPT, por lo que el comando 'SET PROMPT=texto' tiene el mismo efecto que\n" +"'PROMPT texto'.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -"Un comando que empieza por REM (seguido de un espacio) no ejecuta\n" -"ninguna acción, y por tanto puede ser utilizada como un comentario\n" -"en un archivo de lotes.\n" +"Un comando que empieza por REM (seguido de un espacio) no ejecuta ninguna\n" +"acción, y por tanto puede ser utilizada como un comentario en un archivo de\n" +"lotes.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -"REN es la versión corta de RENAME. Este comando renombra\n" -"un archivo.\n" +"REN es la versión corta de RENAME. Este comando renombra un " +"archivo.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME renombra un archivo.\n" -#: cmd.rc:161 +#: cmd.rc:181 #, fuzzy #| msgid "RD is the short version of RMDIR. It deletes a subdirectory.\n" msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -"RD es la versión corta de RMDIR. Este comando borra\n" -"un subdirectorio.\n" +"RD es la versión corta de RMDIR. Este comando borra un\n" +"subdirectorio.\n" -#: cmd.rc:162 +#: cmd.rc:183 #, fuzzy msgid "RMDIR deletes a directory.\n" msgstr "" -"RMDIR es la versión corta de RMDIR. Este comando borra un " +"RMDIR es la versión corta de RMDIR. Este comando borra un\n" "subdirectorio.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -10069,14 +10066,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET cambia o muestra las variables de entorno de cmd.\n" "\n" @@ -10090,70 +10086,70 @@ "espacios antes del signo igual, ni la variable puede contener espacios\n" "intermedios.\n" "\n" -"Bajo Wine, el entorno del sistema operativo subyacente se incluye\n" -"en el entorno de Win32 por lo que, por lo general, habrá muchos más\n" -"valores que en una implementación Win32 nativa. Nótese que no es\n" -"posible afectar al entorno del sistema operativo desde cmd.\n" +"Bajo Wine, el entorno del sistema operativo subyacente se incluye en el\n" +"entorno de Win32 por lo que, por lo general, habrá muchos más valores que\n" +"en una implementación Win32 nativa. Nótese que no es posible afectar al\n" +"entorno del sistema operativo desde cmd.\n" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -"SHIFT se utiliza en un archivo de lotes para eliminar un parámetro\n" -"de la cabeza de la lista, por lo que el parámetro 2 se convierte en\n" -"el parámetro 1 y demás. No tiene efecto si se llama desde la línea\n" -"de comando.\n" +"SHIFT se utiliza en un archivo de lotes para eliminar un parámetro de la\n" +"cabeza de la lista, por lo que el parámetro 2 se convierte en el\n" +"parámetro 1 y demás. No tiene efecto si se llama desde la línea de comando.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME muestra o cambia la hora actual del sistema.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE ajusta el título de la ventana de cmd.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -"TYPE copia el al dispositivo de consola (o a donde\n" -"sea si se redirecciona). No se realiza ninguna comprobación de si el\n" -"archivo es texto legible.\n" +"TYPE copia el al dispositivo de consola (o a donde sea\n" +"si se redirecciona). No se realiza ninguna comprobación de si el archivo es\n" +"texto legible.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10172,23 +10168,23 @@ "\n" "La bandera de verificación no tiene funcionalidad en Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER muestra la versión de cmd que se está ejecutando.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL muestra la etiqueta de un volumen de disco.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -"ENDLOCAL finaliza la localización del entorno en un archivo de lotes\n" -"que se introdujo por una llamada a SETLOCAL.\n" +"ENDLOCAL finaliza la localización del entorno en un archivo de lotes que se\n" +"introdujo por una llamada a SETLOCAL.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10205,23 +10201,23 @@ "ENDLOCAL (o al final del archivo, lo que primero suceda), en este punto\n" "los parámetros de entorno anteriores son restaurados.\n" -#: cmd.rc:248 +#: cmd.rc:275 #, fuzzy #| msgid "" #| "PUSHD saves the current directory onto a\n" #| "stack, and then changes the current directory to the supplied one.\n" msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -"PUSHD almacena el directorio actual en una\n" -"pila, y después accede al directorio pasado como argumento.\n" +"PUSHD almacena el directorio actual en una pila, y después\n" +"accede al directorio pasado como argumento.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD cambia el directorio actual al que se almacenó con PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10229,7 +10225,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC modifica o muestra las asociaciones de las extensiones de archivo.\n" @@ -10237,22 +10233,21 @@ "Sintaxis: ASSOC [.ext[=[fileType]]]\n" "\n" "ASSOC sin argumentos muestra las asociaciones de archivo actuales.\n" -"Si se usa con con una extensión de archivo, muestra la asociación\n" -"actual.\n" -"Si no se especifica un tipo de archivo después del igual, se borra\n" -"la asociación actual, si existe alguna.\n" +"Si se usa con con una extensión de archivo, muestra la asociación actual.\n" +"Si no se especifica un tipo de archivo después del igual, se borra la\n" +"asociación actual, si existe alguna.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE modifica o muestra las asociaciones de las comandos de apertura\n" @@ -10267,30 +10262,30 @@ "Si no se especifica un comando después del igual, se borra la cadena\n" "asociada al tipo de archivo.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE muestra la salida de archivos o entrada de tubería por páginas.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE muestra un texto y espera, hasta que el usuario\n" -"presiona una tecla válida de la opciones mostradas.\n" -"CHOICE se usa principalmente para crear menús de selección\n" -"en archivos de lotes.\n" +"CHOICE muestra un texto y espera, hasta que el usuario presiona una tecla\n" +"válida de la opciones mostradas.\n" +"CHOICE se usa principalmente para crear menús de selección en archivos de\n" +"lotes.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT termina la sesión de comandos actual y regresa al sistema\n" -"operativo o intérprete de comandos desde el que invocó cmd.\n" +"EXIT termina la sesión de comandos actual y regresa al sistema operativo o\n" +"intérprete de comandos desde el que invocó cmd.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10359,7 +10354,8 @@ "RD (RMDIR)\tElimina un subdirectorio\n" "SET\t\tAjusta o muestra variables de entorno\n" "SETLOCAL\tComienza los cambios de entorno en un archivo de lotes\n" -"START\t\tEjecuta un programa, o abre un documento asociado con un programa\n" +"START\t\tEjecuta un programa, o abre un documento asociado con un\n" +"\t\tprograma\n" "TIME\t\tAjusta o muestra la hora actual del sistema\n" "TITLE\t\tAjusta el título de la ventana para la sesión de CMD\n" "TYPE\t\tLista el contenido de un archivo de texto\n" @@ -10371,110 +10367,110 @@ "Escriba HELP para más información sobre cualquiera de los\n" "comandos superiores.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "¿Está seguro?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "S" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Falta una asociación de archivo para la extensión %1\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Ningún comando de apertura asociado con el tipo de archivo '%1'\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "¿Sobrescribir %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Más..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "Línea en procesamiento por lotes posiblemente truncada. Usando:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Falta un argumento\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Error de sintaxis\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "No hay ayuda disponible para %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "El destino de la instrucción GOTO no se ha encontrado\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "La fecha actual es %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "La hora actual es %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Ingrese la nueva fecha: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Ingrese la nueva hora: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Variable de entorno %1 no definida\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "No se pudo abrir '%1'\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "No se puede llamar a una etiqueta fuera de un archivo de lotes\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "T" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "¿Eliminar %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Echo es %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Verificar es %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verificar debe ser ON o OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Error de parámetro\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10482,74 +10478,74 @@ "El número de serie del volumen es %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "¿Etiqueta del volumen (11 caracteres, para ninguno)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH no encontrado\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Pulse cualquier tecla para continuar... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Símbolo del sistema de Wine" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "¿Más? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "La línea de entrada es demasiado larga.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "El volumen en la unidad %1!c! es %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "El volumen en la unidad %1!c! no tiene etiqueta.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Sí|No)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Sí|No|Todo)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 #, fuzzy #| msgid "Unexpected network error.\n" msgid "Expected an operator.\n" msgstr "Error de red inesperado.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12211,7 +12207,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12221,7 +12217,7 @@ "el archivo especificado.\n" "ShellExecuteEx fallido" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" "No se pudo traducir el nombre de archivo UNIX especificado a un nombre de " diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/fa.po wine-staging-1.7.47~ubuntu14.10.1/po/fa.po --- wine-staging-1.7.46~ubuntu14.10.1/po/fa.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/fa.po 2015-07-12 05:36:18.000000000 +0000 @@ -9360,13 +9360,13 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" msgstr "" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 #, fuzzy msgid "%1: File Not Found\n" msgstr "'%s' پیدا نشد." @@ -9432,66 +9432,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9500,27 +9500,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9532,7 +9532,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9541,47 +9541,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9604,29 +9603,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9636,68 +9635,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9708,21 +9707,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9732,17 +9731,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9750,42 +9749,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -9827,183 +9826,183 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 #, fuzzy msgid "No help available for %1\n" msgstr "اطلاعات" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 #, fuzzy msgid "Delete %1?" msgstr "&حذف\tDel" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr "" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr "" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11603,14 +11602,14 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" "ShellExecuteEx failed" msgstr "" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/fi.po wine-staging-1.7.47~ubuntu14.10.1/po/fi.po --- wine-staging-1.7.46~ubuntu14.10.1/po/fi.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/fi.po 2015-07-12 05:36:18.000000000 +0000 @@ -9445,7 +9445,7 @@ msgid "Referral hop limit exceeded" msgstr "Liian monta peräkkäistä viittausta" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9453,7 +9453,7 @@ "Ei vielä toteutettu\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: Tiedostoa ei löydy\n" @@ -9537,10 +9537,10 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" @@ -9553,7 +9553,7 @@ "Muutokset työhakemistoon, ympäristömuuttujiin jne. periytyvät kutsutusta\n" "tiedostosta takaisin kutsujalle.\n" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" @@ -9561,40 +9561,40 @@ "CD on CHDIR-komennon lyhenne. Se vaihtaa tämänhetkisen\n" "oletushakemiston.\n" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR vaihtaa tämänhetkisen oletushakemiston.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS tyhjentää konsolin ruudun.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY kopioi tiedoston.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY vaihtaa I/O-laitetta.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE näyttää ja muuttaa järjestelmän aikaa.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL poistaa tiedoston tai tiedostot.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR listaa hakemiston sisällön.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9602,18 +9602,18 @@ msgstr "" "ECHO näyttää tekstin nykyisessä päätteessä.\n" "\n" -"ECHO ON -komentoa seuraavat komennot tiedostossa näytetään päätteessä\n" -"ennen suorittamista.\n" +"ECHO ON -komentoa seuraavat komennot tiedostossa näytetään päätteessä ennen\n" +"suorittamista.\n" "\n" "ECHO OFF poistaa edellä olevan ECHO ON -komennon vaikutuksen (ECHO on\n" "oletusarvoisesti OFF). ECHO OFF -komentoa voi estää näkymästä laittamalla\n" "sen alkuun @-merkin.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE poistaa tiedoston tai joukon tiedostoja.\n" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9627,16 +9627,16 @@ "\n" "Kun FOR esiintyy komentojonotiedostossa, %-merkki täytyy kahdentaa.\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" @@ -9649,7 +9649,7 @@ "\n" "Interaktiivisella komentorivillä GOTO ei tee mitään.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9657,7 +9657,7 @@ "HELP näyttää lyhyitä aiheeseen liittyviä yksityiskohtia.\n" "HELP ilman argumenttia näyttää kaikki CMD:n sisäänrakennetut komennot.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9677,7 +9677,7 @@ "Komennon toisessa muodossa merkkijonojen on oltava lainausmerkeissä.\n" "Vertailu ei huomioi isoja ja pieniä kirjaimia.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9690,25 +9690,24 @@ "Syntaksi: LABEL [asema:]\n" "Komento kysyy uutta osion nimeä. Aiemman nimen näkee komennolla VOL.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD on MKDIR-komennon lyhenne. Se luo alihakemiston.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR luo alihakemiston.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -"MOVE siirtää tiedoston tai hakemiston uuteen paikkaan " +"MOVE siirtää tiedoston tai hakemiston uuteen paikkaan\n" "tiedostojärjestelmässä.\n" "\n" "Hakemistoa siirrettäessä myös kaikki sen sisältämät tiedostot ja\n" @@ -9716,13 +9715,13 @@ "\n" "MOVE epäonnistuu, jos lähde ja kohde ovat eri DOS-asemilla.\n" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9737,20 +9736,20 @@ "esimerkiksi seuraavasti:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE näyttää viestin, joka kehottaa käyttäjää painamaan näppäintä.\n" "\n" "Se on hyödyllinen lähinnä komentojonotiedostoissa antamaan käyttäjälle\n" -"mahdollisuuden lukea edellisen komennon tuloste, ennen kuin se vierii\n" -"pois ruudulta.\n" +"mahdollisuuden lukea edellisen komennon tuloste, ennen kuin se vierii pois\n" +"ruudulta.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9774,8 +9773,8 @@ msgstr "" "PROMPT asettaa komentorivikehotteen.\n" "\n" -"PROMPT-komentoa seuraava merkkijono (ja heti sen perässä oleva väli)\n" -"näkyy rivin alussa, kun cmd odottaa syötettä.\n" +"PROMPT-komentoa seuraava merkkijono (ja heti sen perässä oleva väli) näkyy\n" +"rivin alussa, kun cmd odottaa syötettä.\n" "\n" "Seuraavilla merkkijonoilla on seuraava erityismerkitys:\n" "\n" @@ -9792,33 +9791,33 @@ "Kehotetta voi muuttaa myös PROMPT-ympäristömuuttujalla, joten komento\n" "'SET PROMPT=teksti' tekee saman kuin 'PROMPT teksti'.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -"Rivi, joka alkaa REM (jota seuraa välilyönti) ei tee mitään, ja sitä\n" -"voi siis käyttää kommenttina komentojonotiedostossa.\n" +"Rivi, joka alkaa REM (jota seuraa välilyönti) ei tee mitään, ja sitä voi\n" +"siis käyttää kommenttina komentojonotiedostossa.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" "REN on RENAME-komennon lyhenne. Se nimeää tiedoston\n" "uudelleen.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME nimeää tiedoston uudelleen.\n" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD on RMDIR-komennon lyhenne. Se poistaa hakemiston.\n" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "RMDIR poistaa hakemiston.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9828,14 +9827,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET näyttää tai muuttaa cmd:n ympäristömuuttujia.\n" "\n" @@ -9845,99 +9843,101 @@ "\n" "SET =\n" "\n" -"missä ja ovat merkkijonoja. Ennen yhtäsuuruusmerkkiä\n" -"ei saa olla välilyöntiä, eikä muuttujan nimessä saa olla välilyöntejä.\n" +"missä ja ovat merkkijonoja. Ennen yhtäsuuruusmerkkiä ei\n" +"saa olla välilyöntiä, eikä muuttujan nimessä saa olla välilyöntejä.\n" "\n" -"Winessä käyttöjärjestelmän ympäristömuuttujat on sisällytetty\n" -"Win32-ympäristöön, joten arvoja on yleensä huomattavasti enemmän kuin\n" -"natiivissa Win32-toteutuksessa. Käyttöjärjestelmän ympäristöä ei voi\n" -"muuttaa cmd:n sisältä.\n" +"Winessä käyttöjärjestelmän ympäristömuuttujat on sisällytetty Win32-\n" +"ympäristöön, joten arvoja on yleensä huomattavasti enemmän kuin natiivissa\n" +"Win32-toteutuksessa. Käyttöjärjestelmän ympäristöä ei voi muuttaa cmd:n\n" +"sisältä.\n" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -"SHIFT-komentoa käytetään komentojonotiedostossa yhden parametrin " -"poistamiseen\n" -"listan alusta, joten parametrista 2 tulee parametri 1 ja niin edelleen.\n" -"Se ei vaikuta mihinkään, jos sitä kutsutaan komentoriviltä.\n" +"SHIFT-komentoa käytetään komentojonotiedostossa yhden parametrin\n" +"poistamiseen listan alusta, joten parametrista 2 tulee parametri 1 ja niin\n" +"edelleen. Se ei vaikuta mihinkään, jos sitä kutsutaan komentoriviltä.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -"Käynnistä ohjelma tai avaa dokumentti ohjelmalla, jota yleensä käytetään " +"Käynnistä ohjelma tai avaa dokumentti ohjelmalla, jota yleensä käytetään\n" "kyseiseen tiedostopäätteeseen.\n" "Käyttö:\n" "start [valitsimet] ohjelman_tiedostonimi [...]\n" "start [valitsimet] dokumentin_tiedostonimi\n" "\n" "Valitsimet:\n" -"\"otsikko\" Asettaa lapsi-ikkunoiden otsikon.\n" -"/d hakemisto Käynnistä ohjelma määrätyssä hakemistossa.\n" -"/b Älä luo uutta konsolia ohjelmalle.\n" -"/i Käynnistä ohjelma tuoreilla ympäristömuuttujilla.\n" -"/min Käynnistä ohjelma pienennettynä.\n" -"/max Käynnistä ohjelma suurennettuna.\n" -"/low Käynnistä ohjelma matalassa prioriteettiluokassa.\n" -"/normal Käynnistä ohjelma normaalissa prioriteettiluokassa.\n" -"/high Käynnistä ohjelma korkeassa prioriteettiluokassa.\n" -"/realtime Käynnistä ohjelma reaaliaikaisessa prioriteettiluokassa.\n" -"/abovenormal Käynnistä ohjelma normaalia korkeammassa prioriteettiluokassa.\n" -"/belownormal Käynnistä ohjelma normaalia matalammassa prioriteettiluokassa.\n" -"/node n Käynnistä ohjelma määrätyllä NUMA-solmulla.\n" +"\"otsikko\" Asettaa lapsi-ikkunoiden otsikon.\n" +"/d hakemisto Käynnistä ohjelma määrätyssä hakemistossa.\n" +"/b Älä luo uutta konsolia ohjelmalle.\n" +"/i Käynnistä ohjelma tuoreilla ympäristömuuttujilla.\n" +"/min Käynnistä ohjelma pienennettynä.\n" +"/max Käynnistä ohjelma suurennettuna.\n" +"/low Käynnistä ohjelma matalassa prioriteettiluokassa.\n" +"/normal Käynnistä ohjelma normaalissa prioriteettiluokassa.\n" +"/high Käynnistä ohjelma korkeassa prioriteettiluokassa.\n" +"/realtime Käynnistä ohjelma reaaliaikaisessa prioriteettiluokassa.\n" +"/abovenormal Käynnistä ohjelma normaalia korkeammassa\n" +" prioriteettiluokassa.\n" +"/belownormal Käynnistä ohjelma normaalia matalammassa\n" +" prioriteettiluokassa.\n" +"/node n Käynnistä ohjelma määrätyllä NUMA-solmulla.\n" "/affinity peite Käynnistä ohjelma määrätyllä affiniteettipeitteellä.\n" -"/wait Odota, että ohjelma sulkeutuu, ja palauta sen paluuarvo.\n" -"/unix Käytä Unix-tiedostonimeä ja avaa tiedosto siten, kuin Windows " -"Explorer avaisi sen.\n" -"/ProgIDOpen Avaa dokumentti määrätyllä progID:llä.\n" -"/? Näytä tämä ohje ja lopeta.\n" +"/wait Odota, että ohjelma sulkeutuu, ja palauta sen paluuarvo.\n" +"/unix Käytä Unix-tiedostonimeä ja avaa tiedosto siten, kuin\n" +" Windows Explorer avaisi sen.\n" +"/ProgIDOpen Avaa dokumentti määrätyllä progID:llä.\n" +"/? Näytä tämä ohje ja lopeta.\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME asettaa ja näyttää järjestelmän nykyisen ajan.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE asettaa CMD-ikkunan otsikon.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -"TYPE kopioi tiedoston konsolilaitteeseen\n" -"(tai muualle, jos ohjataan muualle). Sitä, onko tiedosto luettavissa,\n" -"ei tarkisteta.\n" +"TYPE kopioi tiedoston konsolilaitteeseen (tai\n" +"muualle, jos ohjataan muualle). Sitä, onko tiedosto luettavissa, ei\n" +"tarkisteta.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9956,23 +9956,23 @@ "\n" "Verify-lippu ei tee mitään Winessä.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER näyttää, mitä cmd:n versio on.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL näyttää levyn osion nimen.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" "ENDLOCAL lopettaa komentojonotiedoston ympäristömuutosten paikallisuuden,\n" "jonka SETLOCAL on aloittanut.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9988,21 +9988,21 @@ "(tai tiedoston loppuun, jos komentoa ei ole), minkä jälkeen aiemmat\n" "ympäristöasetukset palautetaan.\n" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" "PUSHD tallentaa nykyisen hakemiston pinoon ja muuttaa sitten\n" "nykyisen hakemiston annetuksi.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" "POPD muuttaa nykyisen hakemiston siksi, joka on viimeksi tallennettu\n" "PUSHD-komennolla.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10010,7 +10010,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC näyttää tai muuttaa tiedostopäätteiden kytkentöjä.\n" @@ -10019,56 +10019,56 @@ "\n" "ASSOC ilman parametreja näyttää nykyiset tiedostokytkennät.\n" "Pelkän tiedostopäätteen kanssa ASSOC näyttää kyseisen päätteen kytkennän.\n" -"Jos annetaan yhtäsuuruusmerkki mutta ei tyyppiä, ASSOC poistaa " +"Jos annetaan yhtäsuuruusmerkki mutta ei tyyppiä, ASSOC poistaa\n" "tiedostopäätteen nykyisen kytkennän.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE näyttää tai muuttaa tiedostotyyppeihin liitettyjä avauskomentoja\n" "\n" "Syntaksi: FTYPE [tiedostotyyppi[=[avauskomento]]]\n" "\n" -"Ilman parametreja komento näyttää tiedostotyypit, joihin avauskomentoja on " +"Ilman parametreja komento näyttää tiedostotyypit, joihin avauskomentoja on\n" "nykyisellään määritelty.\n" -"Jos komentoa käytetään vain tiedostotyypin kanssa, se näyttää siihen " +"Jos komentoa käytetään vain tiedostotyypin kanssa, se näyttää siihen\n" "liittyvät komennot, jos niitä on.\n" -"Jos yhtäsuuruusmerkin jälkeen ei määritellä mitään komentoa, kyseiseen " +"Jos yhtäsuuruusmerkin jälkeen ei määritellä mitään komentoa, kyseiseen\n" "tiedostotyyppiin liitetty komento poistetaan.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE näyttää tiedostojen tulosteen tai putkitetun syötteen sivuina.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE näyttää tekstin ja odottaa, kunnes käyttäjä painaa\n" -"sallittua näppäintä, joka on listassa.\n" +"CHOICE näyttää tekstin ja odottaa, kunnes käyttäjä painaa sallittua\n" +"näppäintä, joka on listassa.\n" "CHOICE-komentoa käytetään lähinnä valikkoihin komentojonotiedostoissa.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" "EXIT päättää nykyisen komentoistunnon ja palaa käyttöjärjestelmään tai\n" "komentoriville, jolta kutsuit cmd:tä.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10148,110 +10148,110 @@ "\n" "Kirjoita HELP , niin saat lisätietoa yllä olevasta komennosta.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Oletko varma?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "K" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "E" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Päätteellä %1 ei ole tiedostokytkentää\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Tiedostotyyppiin '%1' ei ole liitetty avauskomentoa\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Kirjoita tiedoston %1 yli?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Lisää..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "Rivi komentojonossa on mahdollisesti katkennut. Käytetään:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Argumentti puuttuu\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Syntaksivirhe\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Apua ei saatavilla %1:lle\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "GOTO-komennolle ei löytynyt kohdetta\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Nykyinen päiväys on %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Nykyinen aika on %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Syötä uusi päiväys: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Syötä uusi aika: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Ympäristömuuttujaa %1 ei määritelty\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "'%1' ei auennut\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Komentojonon nimiötä ei voi kutsua komentojonon ulkopuolelta\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "A" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Poista %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Echo on %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Verify on %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verify-lipun täytyy olla ON tai OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Parametrivirhe\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10259,72 +10259,72 @@ "Osion sarjanumero on %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Osion nimi (11 merkkiä, tarkoittaa tyhjää)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH puuttuu\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Paina mitä tahansa näppäintä jatkaaksesi... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Winen komentokehote" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "Microsoft Windows %1!S!\n" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Lisää? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "Syöterivi on liian pitkä.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "Osio asemassa %1!c! on %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "Osiolla asemassa %1!c! ei ole nimeä.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Kyllä|Ei)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Kyllä|Ei|kAikki)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "'%1' ei ole sisäinen eikä ulkoinen komento eikä komentojono.\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "Virheellinen jako nollalla.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "Odotettiin operandia.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "Odotettiin operaattoria.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "Sulut eivät täsmää.\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11948,7 +11948,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "regsvr32: DLL:n '%1' asennus purettu\n" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -11958,7 +11958,7 @@ "ohjelmaa.\n" "ShellExecuteEx epäonnistui" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "Unix-tiedostonimeä ei voitu kääntää DOS-tiedostonimeksi." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/fr.po wine-staging-1.7.47~ubuntu14.10.1/po/fr.po --- wine-staging-1.7.46~ubuntu14.10.1/po/fr.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/fr.po 2015-07-12 05:36:18.000000000 +0000 @@ -9565,7 +9565,7 @@ msgid "Referral hop limit exceeded" msgstr "Limite du nombre de référants dépassée" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9573,7 +9573,7 @@ "Pas encore implémenté\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1 : fichier non trouvé\n" @@ -9657,25 +9657,22 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -"CALL sert à appeler un fichier batch\n" -"depuis un autre fichier batch. Quand le fichier batch sort, le contrôle " -"revient\n" -"au fichier qui l'a appelé. La commande CALL doit être suivie des paramètres\n" -"de la procédure appelée.\n" -"\n" -"Les changements de répertoire courant, de variables d'environnement etc. " -"effectués\n" -"dans une procédure appelée sont transmis à l'appelant.\n" +"CALL sert à appeler un fichier batch depuis un autre fichier\n" +"batch. Quand le fichier batch sort, le contrôle revient au fichier qui l'a\n" +"appelé. La commande CALL doit être suivie des de la procédure appelée.\n" +"\n" +"Les changements de répertoire courant, de variables d'environnement etc.\n" +"effectués dans une procédure appelée sont transmis à l'appelant.\n" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" @@ -9683,40 +9680,40 @@ "CD est la version courte de CHDIR. Elle change le répertoire\n" "courant.\n" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR change le répertoire courant.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS efface l'écran de la console.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY copie un ou plusieurs fichiers.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY change le périphérique d'entrée/sortie.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE affiche ou modifie la date système.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL efface un fichier ou un groupe de fichiers.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR liste le contenu d'un répertoire.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9724,18 +9721,18 @@ msgstr "" "ECHO affiche sur la console courante.\n" "\n" -"ECHO ON provoque l'affichage de toutes les commandes sur la console\n" -"avant leur exécution.\n" +"ECHO ON provoque l'affichage de toutes les commandes sur la console avant\n" +"leur exécution.\n" "\n" "ECHO OFF annule l'effet de tout ECHO ON antérieur (ECHO est OFF par\n" -"défaut). On peut empêcher l'affichage de ECHO OFF en le faisant\n" -"précéder d'un signe @.\n" +"défaut). On peut empêcher l'affichage de ECHO OFF en le faisant précéder\n" +"d'un signe @.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE efface un ou plusieurs fichiers.\n" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9743,40 +9740,38 @@ "\n" "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -"L1 commande FOR sert à exécuter une commande pour chaque fichier d'une liste " -"de fichiers.\n" +"L1 commande FOR sert à exécuter une commande pour chaque fichier d'une\n" +"liste de fichiers.\n" "\n" "Usage : FOR %variable IN (liste) DO commande\n" "\n" "Le signe % doit être doublé quand FOR est utilisé dans un fichier batch.\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -"La commande GOTO transfère l'exécution à une autre commande (située\n" -"après une étiquette donnée) dans un fichier batch.\n" +"La commande GOTO transfère l'exécution à une autre commande (située après\n" +"une étiquette donnée) dans un fichier batch.\n" "\n" -"L'étiquette cible du GOTO a une longueur de maximum 255 caractères\n" -"mais ne peut inclure d'espaces (à la différence d'autres systèmes\n" -"d'exploitation). Si deux étiquettes identiques (ou plus) existent dans le " -"même\n" -"fichier, seule la première sera utilisée. Essayer de sauter vers une " -"étiquette\n" -"non existante termine l'exécution du fichier batch.\n" +"L'étiquette cible du GOTO a une longueur de maximum 255 caractères mais ne\n" +"peut inclure d'espaces (à la différence d'autres systèmes d'exploitation).\n" +"Si deux étiquettes identiques (ou plus) existent dans le même fichier,\n" +"seule la première sera utilisée. Essayer de sauter vers une étiquette non\n" +"existante termine l'exécution du fichier batch.\n" "\n" "GOTO n'a pas d'effet si utilisé interactivement.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9784,7 +9779,7 @@ "HELP affiche une brève aide sur une commande donnée.\n" "HELP sans argument affiche toutes les commandes intégrées de CMD.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9804,7 +9799,7 @@ "Dans la deuxième forme de la commande, chaîne1 et chaîne2 doivent être\n" "entre guillemets. La comparaison est insensible à la casse.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9818,40 +9813,39 @@ "La commande demande le nouveau nom de volume pour le lecteur spécifié.\n" "Vous pouvez afficher le nom de volume avec la commande VOL.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD est la version courte de MKDIR. Elle crée un répertoire.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR crée un répertoire.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -"MOVE déplace un fichier ou un répertoire vers un autre point du système\n" -"de fichiers.\n" +"MOVE déplace un fichier ou un répertoire vers un autre point du système de\n" +"fichiers.\n" "\n" "Si l'objet déplacé est un répertoire, alors tous ses fichiers et\n" "sous-répertoires sont également déplacés.\n" "\n" -"MOVE échoue si l'ancien et le nouvel emplacement sont sur des lecteurs DOS " +"MOVE échoue si l'ancien et le nouvel emplacement sont sur des lecteurs DOS\n" "différents.\n" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9860,30 +9854,28 @@ "PATH affiche ou change le chemin de recherche de cmd.\n" "\n" "Entrer PATH seul affiche le réglage courant de PATH (dont la valeur\n" -"initiale provient de la base de registre). Pour changer\n" -"le réglage, faites suivre la commande PATH par la nouvelle valeur.\n" +"initiale provient de la base de registre). Pour changer le réglage, faites\n" +"suivre la commande PATH par la nouvelle valeur.\n" "\n" "Il est aussi possible de modifier le PATH en utilisant la variable\n" "d'environnement PATH, par exemple :\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -"PAUSE affiche un message à l'écran demandant à l'utilisateur d'appuyer sur " -"une\n" -"touche.\n" -"\n" -"Principalement utilisé dans des fichiers batchs pour permettre à " -"l'utilisateur\n" -"de lire la sortie de la dernière commande avant qu'elle ne disparaisse de " -"l'écran.\n" +"PAUSE affiche un message à l'écran demandant à l'utilisateur d'appuyer sur\n" +"une touche.\n" +"\n" +"Principalement utilisé dans des fichiers batchs pour permettre à\n" +"l'utilisateur de lire la sortie de la dernière commande avant qu'elle ne\n" +"disparaisse de l'écran.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9907,9 +9899,9 @@ msgstr "" "PROMPT règle l'invite de commande.\n" "\n" -"La chaîne suivant la commande PROMPT (ainsi que le blanc la suivant " -"directement)\n" -"apparaît au début de la ligne quand cmd attend une entrée texte.\n" +"La chaîne suivant la commande PROMPT (ainsi que le blanc la suivant\n" +"directement) apparaît au début de la ligne quand cmd attend une entrée\n" +"texte.\n" "\n" "Les chaînes de caractères suivantes ont une signification spéciale :\n" "\n" @@ -9920,42 +9912,42 @@ "courant\n" "$q Signe = $t Heure courante $v Version de cmd\n" "\n" -"Notez qu'entrer la commande PROMPT sans texte d'invite remet l'invite\n" -"à sa valeur par défaut, à savoir le répertoire courant (incluant la lettre\n" -"du lecteur courant) suivi d'un signe « plus grand que » (>).\n" +"Notez qu'entrer la commande PROMPT sans texte d'invite remet l'invite à sa\n" +"valeur par défaut, à savoir le répertoire courant (incluant la lettre du\n" +"lecteur courant) suivi d'un signe « plus grand que » (>).\n" "(c.-à-d. la commande PROMPT $p$g).\n" "\n" "L'invite peut aussi être adaptée en modifiant la variable d'environnement\n" -"PROMPT ; ainsi la commande « SET PROMPT=texte » a le même effet que « PROMPT " -"texte ».\n" +"PROMPT ; ainsi la commande « SET PROMPT=texte » a le même effet que\n" +"« PROMPT texte ».\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" "Une ligne de commande commençant par REM (suivi d'une espace) n'induit\n" "aucune action, et peut donc servir de commentaire dans un fichier batch.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" "REN est la version courte de RENAME. Elle renomme un fichier.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME renomme un fichier.\n" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" "RD est la version courte de RMDIR. Elle efface un répertoire.\n" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "RMDIR efface un répertoire.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9965,14 +9957,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET affiche ou change les variables d'environnement de cmd.\n" "\n" @@ -9982,107 +9973,102 @@ "\n" "SET =\n" "\n" -"où et sont des chaînes de caractères. Il ne peut y " -"avoir\n" -"aucun espace avant le signe « = », ni dans .\n" +"où et sont des chaînes de caractères. Il ne peut y\n" +"avoir aucun espace avant le signe « = », ni dans .\n" "\n" "Sous Wine, l'environnement du système hôte est inclus dans l'environnement\n" -"Win32, il y aura par conséquent généralement bien plus de valeurs que dans " -"un\n" -"système Win32 natif. Notez qu'il n'est pas possible de modifier " -"l'environnement\n" -"du système d'exploitation dans cmd.\n" - -#: cmd.rc:211 -msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" -msgstr "" -"SHIFT est utilisé dans un fichier batch pour enlever le premier paramètre de " -"la\n" -"liste ; ainsi, le paramètre 2 devient paramètre 1 et ainsi de suite. Il est " -"sans effet\n" -"s'il est appelé depuis la ligne de commande.\n" +"Win32, il y aura par conséquent généralement bien plus de valeurs que dans\n" +"un système Win32 natif. Notez qu'il n'est pas possible de modifier\n" +"l'environnement du système d'exploitation dans cmd.\n" + +#: cmd.rc:234 +msgid "" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" +msgstr "" +"SHIFT est utilisé dans un fichier batch pour enlever le premier paramètre\n" +"de la liste ; ainsi, le paramètre 2 devient paramètre 1 et ainsi de suite.\n" +"Il est sans effet s'il est appelé depuis la ligne de commande.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -"Lance un programme, ou ouvre un document avec le programme normalement " +"Lance un programme, ou ouvre un document avec le programme normalement\n" "associé à cette extension.\n" "Usage :\n" "start [options] fichier_programme [...]\n" "start [options] fichier_document\n" "\n" "Options :\n" -"\"titre\" Spécifie le titre des fenêtres filles.\n" -"/d répertoire Lancer le programme depuis le répertoire spécifié.\n" -"/b Ne pas créer de nouvelle console pour le programme.\n" -"/i Lancer le programme avec des nouvelles variables " -"d'environnement.\n" -"/min Lancer le programme minimisé.\n" -"/max Lancer le programme maximisé.\n" -"/low Lancer le programme dans la classe de priorité inactif.\n" -"/normal Lancer le programme dans la classe de priorité normal.\n" -"/high Lancer le programme dans la classe de priorité haut.\n" -"/realtime Lancer le programme dans la classe de priorité temps réel.\n" -"/abovenormal Lancer le programme dans la classe de priorité supérieur à la " -"normale.\n" -"/belownormal Lancer le programme dans la classe de priorité inférieur à la " -"normale.\n" -"/node n Lancer le programme sur le nœud NUMA spécifié.\n" +"\"titre\" Spécifie le titre des fenêtres filles.\n" +"/d répertoire Lancer le programme depuis le répertoire spécifié.\n" +"/b Ne pas créer de nouvelle console pour le programme.\n" +"/i Lancer le programme avec des nouvelles variables\n" +" d'environnement.\n" +"/min Lancer le programme minimisé.\n" +"/max Lancer le programme maximisé.\n" +"/low Lancer le programme dans la classe de priorité inactif.\n" +"/normal Lancer le programme dans la classe de priorité normal.\n" +"/high Lancer le programme dans la classe de priorité haut.\n" +"/realtime Lancer le programme dans la classe de priorité temps réel.\n" +"/abovenormal Lancer le programme dans la classe de priorité supérieur à\n" +" la normale.\n" +"/belownormal Lancer le programme dans la classe de priorité inférieur à\n" +" la normale.\n" +"/node n Lancer le programme sur le nœud NUMA spécifié.\n" "/affinity masque Lancer le programme avec le masque d'affinité spécifié.\n" -"/wait Attendre que le programme lancé se termine, puis renvoyer son " -"code de sortie.\n" -"/unix Utiliser un chemin Unix et lancer le fichier comme windows " -"explorer.\n" -"/ProgIDOpen Ouvrir un document via le programme identifié par progID.\n" -"/? Afficher cette aide et se terminer.\n" +"/wait Attendre que le programme lancé se termine, puis renvoyer\n" +" son code de sortie.\n" +"/unix Utiliser un chemin Unix et lancer le fichier comme windows\n" +" explorer.\n" +"/ProgIDOpen Ouvrir un document via le programme identifié par progID.\n" +"/? Afficher cette aide et se terminer.\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME règle ou affiche l'heure système courante.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE définit le titre de la fenêtre pour la session cmd.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -"TYPE affiche sur la console (ou ailleurs\n" -"si redirigé). Aucun test n'est fait pour voir si le fichier contient bien du " -"texte.\n" +"TYPE affiche sur la console (ou ailleurs si redirigé).\n" +"Aucun test n'est fait pour voir si le fichier contient bien du texte.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10092,7 +10078,7 @@ "\n" "The verify flag has no function in Wine.\n" msgstr "" -"VERIFY est utilisé pour positionner, effacer ou tester l'indicateur de " +"VERIFY est utilisé pour positionner, effacer ou tester l'indicateur de\n" "vérification. Les formes suivantes sont correctes :\n" "\n" "VERIFY ON\tPositionne l'indicateur.\n" @@ -10101,23 +10087,23 @@ "\n" "L'indicateur de vérification n'a pas de fonction dans Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER affiche la version de cmd utilisée.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL affiche le nom de volume d'un lecteur de disque.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -"ENDLOCAL met fin aux modifications locales de l'environnement dans\n" -"un fichier batch, introduites à la suite d'un SETLOCAL préalable.\n" +"ENDLOCAL met fin aux modifications locales de l'environnement dans un\n" +"fichier batch, introduites à la suite d'un SETLOCAL préalable.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10126,31 +10112,29 @@ "file, whichever comes first), at which point the previous environment\n" "settings are restored.\n" msgstr "" -"SETLOCAL entame les modifications locales à l'environnement dans un\n" -"fichier batch.\n" +"SETLOCAL entame les modifications locales à l'environnement dans un fichier\n" +"batch.\n" "\n" -"Les modifications apportées à l'environnement après un SETLOCAL sont " -"locales\n" -"au fichier batch, et sont préservées jusqu'au prochain ENDLOCAL (ou à " -"défaut\n" -"jusqu'à la fin du fichier), après quoi les réglages antérieurs de\n" -"l'environnement sont restaurés.\n" +"Les modifications apportées à l'environnement après un SETLOCAL sont\n" +"locales au fichier batch, et sont préservées jusqu'au prochain ENDLOCAL\n" +"(ou à défaut jusqu'à la fin du fichier), après quoi les réglages\n" +"antérieurs de l'environnement sont restaurés.\n" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" "PUSHD enregistre le répertoire courant sur une pile et\n" "remplace le répertoire courant par le répertoire spécifié.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -"POPD remplace le répertoire courant par le dernier enregistré à l'aide de\n" +"POPD remplace le répertoire courant par le dernier enregistré à l'aide de " "PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10158,69 +10142,69 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC affiche ou modifie les associations d'extensions de fichiers.\n" "\n" "Syntaxe : ASSOC [.ext[=[typeFichier]]]\n" "\n" -"ASSOC sans paramètre affiche les associations d'extensions de fichiers en " +"ASSOC sans paramètre affiche les associations d'extensions de fichiers en\n" "cours.\n" -"Si utilisé uniquement avec une extension de fichier, affiche l'association " +"Si utilisé uniquement avec une extension de fichier, affiche l'association\n" "actuelle.\n" -"Si aucun type de fichiers n'est spécifié après le signe égal, supprime " +"Si aucun type de fichiers n'est spécifié après le signe égal, supprime\n" "l'association courante, si elle existe.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -"FTYPE affiche ou modifie les commandes d'ouvertures associées à des types de " -"fichiers.\n" +"FTYPE affiche ou modifie les commandes d'ouvertures associées à des types\n" +"de fichiers.\n" "\n" "Syntaxe : FTYPE [typeFichier[=[commandeOuverture]]]\n" "\n" -"Sans paramètre, affiche les types de fichiers pour lesquels des chaînes de " +"Sans paramètre, affiche les types de fichiers pour lesquels des chaînes de\n" "commande d'ouverture sont actuellement définies.\n" -"Si seul un type de fichier est utilisé, affiche la chaîne de commande " +"Si seul un type de fichier est utilisé, affiche la chaîne de commande\n" "d'ouverture associée, si elle existe.\n" -"Ne spécifier aucune commande après le signe égal supprime la commande " +"Ne spécifier aucune commande après le signe égal supprime la commande\n" "d'ouverture associée au type de fichier spécifié.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE affiche le contenu de fichiers ou l'entrée standard par pages.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE affiche un message et bloque jusqu'à ce que l'utilisateur appuie\n" -"sur une des touches spécifiées dans une liste configurable.\n" -"CHOICE est principalement utilisé pour construire une sélection de menu dans " -"un fichier batch.\n" +"CHOICE affiche un message et bloque jusqu'à ce que l'utilisateur appuie sur\n" +"une des touches spécifiées dans une liste configurable.\n" +"CHOICE est principalement utilisé pour construire une sélection de menu\n" +"dans un fichier batch.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT termine la session de ligne de commande et retourne\n" -"au système d'exploitation ou au shell où vous avez invoqué cmd.\n" +"EXIT termine la session de ligne de commande et retourne au système\n" +"d'exploitation ou au shell où vous avez invoqué cmd.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10293,7 +10277,8 @@ "SET\t\tRègle ou affiche les variables d'environnement\n" "SETLOCAL\tEntame les modifications locales à l'environnement dans un\n" "\t\tfichier batch\n" -"START\t\tLance un programme, ou ouvre un document dans le programme associé\n" +"START\t\tLance un programme, ou ouvre un document dans le programme\n" +"\t\tassocié\n" "TIME\t\tRègle ou affiche l'heure système courante\n" "TITLE\t\tRègle le titre de la fenêtre pour la session CMD\n" "TYPE\t\tAffiche le contenu d'un fichier texte\n" @@ -10305,110 +10290,110 @@ "Entrez HELP pour plus d'informations sur les commandes ci-" "dessus.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Êtes-vous sûr(e) ?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "O" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Association de fichier manquante pour l'extension %1\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Aucune commande d'ouverture n'est associée au type de fichier « %1 »\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Écraser %1 ?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Plus..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "Ligne du processus batch probablement tronquée. Utilisation de :\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Argument manquant\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Erreur de syntaxe\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Aucune aide disponible pour %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "La destination de l'instruction GOTO n'a pas été trouvée\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "La date courante est %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "L'heure courante est %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Saisissez la nouvelle date : " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Saisissez la nouvelle heure : " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "La variable d'environnement %1 n'est pas définie\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Impossible d'ouvrir « %1 »\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Impossible d'appeler une étiquette de batch hors d'un script batch\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "T" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Supprimer %1 ?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Echo est %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Verify est %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verify doit être ON ou OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Erreur de paramètre\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10416,74 +10401,74 @@ "Le numéro de série du volume est %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Étiquette du volume (11 caractères, pour aucun) ?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH non trouvé\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Appuyez sur une touche pour continuer... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Invite de commande Wine" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "Microsoft Windows %1!S!\n" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Plus ? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "La ligne d'entrée est trop longue.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "Le volume dans le lecteur %1!c! est %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "Le volume dans le lecteur %1!c! n'a pas de label.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Oui|Non)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Oui|Non|Tous)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" "Ne reconnaît pas « %1 » comme commande interne ou externe, ou fichier de " "traitement par lots.\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "Erreur de division par zéro.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "Opérande attendu.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "Opérateur attendu.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "Discordance des parenthèses.\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12127,7 +12112,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "regsvr32 : DLL « %1 » désinstallée avec succès\n" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12137,7 +12122,7 @@ "fichier spécifié.\n" "ShellExecuteEx a échoué" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" "Le nom de fichier Unix spécifié n'a pas pu être converti en nom de fichier " diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/he.po wine-staging-1.7.47~ubuntu14.10.1/po/he.po --- wine-staging-1.7.46~ubuntu14.10.1/po/he.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/he.po 2015-07-12 05:36:18.000000000 +0000 @@ -9669,7 +9669,7 @@ msgid "Referral hop limit exceeded" msgstr "מגבלת הקפצת ההפניות בחריגה" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9677,7 +9677,7 @@ "Not Yet Implemented\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: File Not Found\n" @@ -9760,94 +9760,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" -"\n" -"Changes to default directory, environment variables etc made within a\n" -"called procedure are inherited by the caller.\n" -#: cmd.rc:43 -#, fuzzy -#| msgid "" -#| "CD is the short version of CHDIR. It changes the current\n" -#| "default directory.\n" +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -"CD is the short version of CHDIR. It changes the current\n" -"default directory.\n" -#: cmd.rc:44 -#, fuzzy -#| msgid "CHDIR changes the current default directory.\n" +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" -msgstr "CHDIR changes the current default directory.\n" +msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" -msgstr "CLS clears the console screen.\n" +msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" -msgstr "COPY copies a file.\n" +msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" -msgstr "CTTY changes the input/output device.\n" +msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" -msgstr "DATE shows or changes the system date.\n" +msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" -msgstr "DEL deletes a file or set of files.\n" +msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" -msgstr "DIR lists the contents of a directory.\n" +msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -"ECHO displays on the current terminal device.\n" -"\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" -"\n" -"ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" -"default). The ECHO OFF command can be prevented from displaying by\n" -"preceding it with an @ sign.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" -msgstr "ERASE deletes a file or set of files.\n" +msgstr "" -#: cmd.rc:71 -#, fuzzy -#| msgid "" -#| "The FOR command is used to execute a command for each of a set of files.\n" -#| "\n" -#| "Syntax: FOR %variable IN (set) DO command\n" +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9855,43 +9827,28 @@ "\n" "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -"The FOR command is used to execute a command for each of a set of files.\n" -"\n" -"Syntax: FOR %variable IN (set) DO command\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" -"\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" -"\n" -"GOTO has no effect when used interactively.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -"HELP shows brief help details on a topic.\n" -"HELP without an argument shows all CMD built-in commands.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9902,16 +9859,8 @@ "In the second form of the command, string1 and string2 must be in double\n" "quotes. The comparison is not case-sensitive.\n" msgstr "" -"IF is used to conditionally execute a command.\n" -"\n" -"Syntax: IF [NOT] EXIST filename command\n" -" IF [NOT] string1==string2 command\n" -" IF [NOT] ERRORLEVEL number command\n" -"\n" -"In the second form of the command, string1 and string2 must be in double\n" -"quotes. The comparison is not case-sensitive.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9919,73 +9868,47 @@ "The command will prompt you for the new volume label for the given drive.\n" "You can display the disk volume label with the VOL command.\n" msgstr "" -"LABEL is used to set a disk volume label.\n" -"\n" -"Syntax: LABEL [drive:]\n" -"The command will prompt you for the new volume label for the given drive.\n" -"You can display the disk volume label with the VOL command.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" -msgstr "MD is the short version of MKDIR. It creates a subdirectory.\n" +msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" -msgstr "MKDIR creates a subdirectory.\n" +msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -"MOVE relocates a file or directory to a new point within the file system.\n" -"\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" -"\n" -"MOVE fails if the old and new locations are on different DOS drive letters.\n" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -"PATH displays or changes the cmd search path.\n" -"\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" -"\n" -"It is also possible to modify the PATH by using the PATH environment\n" -"variable, for example:\n" -"PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -"PAUSE displays a message on the screen asking the user to press a key.\n" -"\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -10007,55 +9930,30 @@ "The prompt can also be changed by altering the PROMPT environment variable,\n" "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -"PROMPT sets the command-line prompt.\n" -"\n" -"The string following the PROMPT command (and the space immediately after)\n" -"appears at the beginning of the line when cmd is waiting for input.\n" -"\n" -"The following character strings have the special meaning shown:\n" -"\n" -"$$ Dollar sign $_ Linefeed $b Pipe sign (|)\n" -"$d Current date $e Escape $g > sign\n" -"$l < sign $n Current drive $p Current path\n" -"$q Equal sign $t Current time $v cmd version\n" -"\n" -"Note that entering the PROMPT command without a prompt-string resets the\n" -"prompt to the default, which is the current directory (which includes the\n" -"current drive letter) followed by a greater-than (>) sign.\n" -"(like a command PROMPT $p$g).\n" -"\n" -"The prompt can also be changed by altering the PROMPT environment variable,\n" -"so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" -msgstr "REN is the short version of RENAME. It renames a file.\n" +msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" -msgstr "RENAME renames a file.\n" +msgstr "" -#: cmd.rc:161 -#, fuzzy -#| msgid "RD is the short version of RMDIR. It deletes a subdirectory.\n" +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" -msgstr "RD is the short version of RMDIR. It deletes a subdirectory.\n" +msgstr "" -#: cmd.rc:162 -#, fuzzy -#| msgid "RMDIR deletes a subdirectory.\n" +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" -msgstr "RMDIR deletes a subdirectory.\n" +msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -10065,115 +9963,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" -msgstr "" -"SET displays or changes the cmd environment variables.\n" -"\n" -"SET without parameters shows all of the current environment.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"To create or modify an environment variable the syntax is:\n" -"\n" -"SET =\n" -"\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" +msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -"Start a program, or open a document in the program normally used for files " -"with that suffix.\n" -"Usage:\n" -"start [options] program_filename [...]\n" -"start [options] document_filename\n" -"\n" -"Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" -"/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" -msgstr "TIME sets or shows the current system time.\n" +msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" -msgstr "TITLE sets the window title for the cmd window.\n" +msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10183,31 +10034,22 @@ "\n" "The verify flag has no function in Wine.\n" msgstr "" -"VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" -"\n" -"VERIFY ON\tSet the flag.\n" -"VERIFY OFF\tClear the flag.\n" -"VERIFY\t\tDisplays ON or OFF as appropriate.\n" -"\n" -"The verify flag has no function in Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" -msgstr "VER displays the version of cmd you are running.\n" +msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" -msgstr "VOL shows the volume label of a disk device.\n" +msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10216,30 +10058,18 @@ "file, whichever comes first), at which point the previous environment\n" "settings are restored.\n" msgstr "" -"SETLOCAL starts localization of environment changes in a batch file.\n" -"\n" -"Environment changes done after a SETLOCAL are local to the batch file, and\n" -"are preserved until the next ENDLOCAL is encountered (or at the end of the\n" -"file, whichever comes first), at which point the previous environment\n" -"settings are restored.\n" -#: cmd.rc:248 -#, fuzzy -#| msgid "" -#| "PUSHD saves the current directory onto a\n" -#| "stack, and then changes the current directory to the supplied one.\n" +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD changes current directory to the last one saved with PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10247,65 +10077,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -"ASSOC shows or modifies file extension associations.\n" -"\n" -"Syntax: ASSOC [.ext[=[fileType]]]\n" -"\n" -"ASSOC without parameters displays current file associations.\n" -"If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " -"association, if any.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -"FTYPE shows or modifies open commands associated with file types.\n" -"\n" -"Syntax: FTYPE [fileType[=[openCommand]]]\n" -"\n" -"Without parameters, shows the file types for which open command strings are " -"currently defined.\n" -"If used with only a file type, displays the associated open command string, " -"if any.\n" -"Specifying no open command after the equal sign removes the command string " -"associated to the specified file type.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" -msgstr "MORE displays output of files or piped input in pages.\n" +msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" -"CHOICE is mainly used to build a menu selection in a batch file.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10346,229 +10153,186 @@ "\n" "Enter HELP for further information on any of the above commands.\n" msgstr "" -"CMD built-in commands are:\n" -"ASSOC\t\tShow or modify file extension associations\n" -"ATTRIB\t\tShow or change DOS file attributes\n" -"CALL\t\tInvoke a batch file from inside another\n" -"CD (CHDIR)\tChange current default directory\n" -"CHOICE\t\tWait for an keypress from a selectable list\n" -"CLS\t\tClear the console screen\n" -"COPY\t\tCopy file\n" -"CTTY\t\tChange input/output device\n" -"DATE\t\tShow or change the system date\n" -"DEL (ERASE)\tDelete a file or set of files\n" -"DIR\t\tList the contents of a directory\n" -"ECHO\t\tCopy text directly to the console output\n" -"ENDLOCAL\tEnd localization of environment changes in a batch file\n" -"FTYPE\t\tShow or modify open commands associated with file types\n" -"HELP\t\tShow brief help details on a topic\n" -"MD (MKDIR)\tCreate a subdirectory\n" -"MORE\t\tDisplay output in pages\n" -"MOVE\t\tMove a file, set of files or directory tree\n" -"PATH\t\tSet or show the search path\n" -"PAUSE\t\tSuspend execution of a batch file\n" -"POPD\t\tRestore the directory to the last one saved with PUSHD\n" -"PROMPT\t\tChange the command prompt\n" -"PUSHD\t\tChange to a new directory, saving the current one\n" -"REN (RENAME)\tRename a file\n" -"RD (RMDIR)\tDelete a subdirectory\n" -"SET\t\tSet or show environment variables\n" -"SETLOCAL\tStart localization of environment changes in a batch file\n" -"START\t\tStart a program, or open a document in the associated program\n" -"TIME\t\tSet or show the current system time\n" -"TITLE\t\tSet the window title for the CMD session\n" -"TYPE\t\tType the contents of a text file\n" -"VER\t\tShow the current version of CMD\n" -"VOL\t\tShow the volume label of a disk device\n" -"XCOPY\t\tCopy source files or directory trees to a destination\n" -"EXIT\t\tClose down CMD\n" -"\n" -"Enter HELP for further information on any of the above commands.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" -msgstr "Are you sure?" +msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" -msgstr "Y" +msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" -msgstr "N" +msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" -msgstr "File association missing for extension %1\n" +msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" -msgstr "No open command associated with file type '%1'\n" +msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" -msgstr "Overwrite %1?" +msgstr "" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." -msgstr "More..." +msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" -msgstr "Line in Batch processing possibly truncated. Using:\n" +msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" -msgstr "Argument missing\n" +msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" -msgstr "Syntax error\n" +msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" -msgstr "No help available for %1\n" +msgstr "" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" -msgstr "Target to GOTO not found\n" +msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" -msgstr "Current Date is %1\n" +msgstr "" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" -msgstr "Current Time is %1\n" +msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " -msgstr "Enter new date: " +msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " -msgstr "Enter new time: " +msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" -msgstr "Environment variable %1 not defined\n" +msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" -msgstr "Failed to open '%1'\n" +msgstr "" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" -msgstr "Cannot call batch label outside of a batch script\n" +msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" -msgstr "A" +msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" -msgstr "Delete %1?" +msgstr "" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" -msgstr "Echo is %1\n" +msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" -msgstr "Verify is %1\n" +msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" -msgstr "Verify must be ON or OFF\n" +msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" -msgstr "Parameter error\n" +msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -"Volume Serial Number is %1!04x!-%2!04x!\n" -"\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" -msgstr "Volume label (11 characters, for none)?" +msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" -msgstr "PATH not found\n" +msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " -msgstr "Press any key to continue... " +msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" -msgstr "Wine Command Prompt" +msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " -msgstr "More? " +msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" -msgstr "The input line is too long.\n" +msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" -msgstr "Volume in drive %1!c! is %2\n" +msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" -msgstr "Volume in drive %1!c! has no label.\n" +msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" -msgstr " (Yes|No)" +msgstr "" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" -msgstr " (Yes|No|All)" +msgstr "" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -"Can't recognize '%1' as an internal or external command, or batch script.\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" -msgstr "Division by zero error.\n" +msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" -msgstr "Expected an operand.\n" +msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" -msgstr "Expected an operator.\n" +msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" -msgstr "Mismatch in parentheses.\n" +msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" msgstr "" -"Badly formed number - must be one of decimal (12),\n" -" hexadecimal (0x34) or octal (056).\n" #: dxdiag.rc:30 msgid "DirectX Diagnostic Tool" @@ -12183,7 +11947,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12193,7 +11957,7 @@ "specified file.\n" "ShellExecuteEx failed" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "Could not translate the specified Unix filename to a DOS filename." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/hi.po wine-staging-1.7.47~ubuntu14.10.1/po/hi.po --- wine-staging-1.7.46~ubuntu14.10.1/po/hi.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/hi.po 2015-07-12 05:36:18.000000000 +0000 @@ -9202,13 +9202,13 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" msgstr "" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "" @@ -9273,66 +9273,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9341,27 +9341,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9373,7 +9373,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9382,47 +9382,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9445,29 +9444,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9477,68 +9476,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9549,21 +9548,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9573,17 +9572,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9591,42 +9590,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -9668,181 +9667,181 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr "" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr "" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11406,14 +11405,14 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" "ShellExecuteEx failed" msgstr "" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/hr.po wine-staging-1.7.47~ubuntu14.10.1/po/hr.po --- wine-staging-1.7.46~ubuntu14.10.1/po/hr.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/hr.po 2015-07-12 05:36:18.000000000 +0000 @@ -9425,7 +9425,7 @@ msgid "Referral hop limit exceeded" msgstr "Ograničenje čvora upućivača je prekoračeno" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9433,7 +9433,7 @@ "Nije još implementirano\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: Datoteka nije pronađena\n" @@ -9497,16 +9497,16 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 #, fuzzy #| msgid "" #| "CD is the short version of CHDIR. It changes the current\n" @@ -9515,56 +9515,56 @@ "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -"CD je kraća verzija CHDIR. Mijenja trenutan podrazumijevan\n" +"CD je kraća verzija CHDIR. Mijenja trenutan podrazumijevan " "direktorij.\n" -#: cmd.rc:44 +#: cmd.rc:47 #, fuzzy #| msgid "CHDIR changes the current default directory.\n" msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR mijenja trenutan podrazumijevan direktorij.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS briše ekran konzole.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY kopira datoteku.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY mijenja U/I uređaj.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE prikazuje ili mijenja vrijeme sustava.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL briše datoteku ili skup datoteka.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR ispisuje sadržaj direktorija.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE briše datoteku ili skup datoteka.\n" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9573,21 +9573,21 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9595,7 +9595,7 @@ "HELP prikazuje kratku pomoć o temi.\n" "HELP bez argumenta prikazuje sve CMD ugrađene naredbe.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9607,7 +9607,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9616,47 +9616,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD je kraća verzija MKDIR. Stvara poddirektorij.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR stvara poddirektorij.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9679,33 +9678,33 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "REN je kraća verzija RENAME. Preimenuje datoteku.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME preimenuje datoteku.\n" -#: cmd.rc:161 +#: cmd.rc:181 #, fuzzy #| msgid "RD is the short version of RMDIR. It deletes a subdirectory.\n" msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD je kraća verzija RMDIR. Briše poddirektorij.\n" -#: cmd.rc:162 +#: cmd.rc:183 #, fuzzy #| msgid "RMDIR deletes a subdirectory.\n" msgid "RMDIR deletes a directory.\n" msgstr "RMDIR briše poddirektorij.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9715,68 +9714,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME postavlja ili prikazuje trenutno vrijeme sistema.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE postavlja naslov prozora za cmd prozor.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9787,21 +9786,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER prikazuje verziju cmd koju izvodite.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9811,17 +9810,19 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" +"CD je kraća verzija CHDIR. Mijenja trenutan podrazumijevan " +"direktorij.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9829,42 +9830,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -9906,181 +9907,181 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Da li ste sigurni?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "D" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Pisati preko %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Više..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Nedostaje argument\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Sintaksna greška\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Nedostupa pomoć za %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Trenutni datum je %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Trenutno vrijeme je %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Unesite novi datum: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Unesite novo vrijeme: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Varijabla okruženja %1 nije definirana\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Neuspjelo otvaranje '%1'\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "S" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Izbriši %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Greška parametra\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH nije nađen\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Pritisnite bilo koju tipku za nastavak... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Više? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "Ulazni redak je predugačak.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Da|Ne)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Da|Ne|Sve)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "Greška dijeljenja sa nulom.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "Očekivan operand.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "Očekivan operator.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "Nepodudaranje u zagradama.\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11683,7 +11684,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -11693,7 +11694,7 @@ "navedenom datotekom.\n" "ShellExecuteEx nije uspio" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "Navedeno Unix ime datoteke ne mogu prevesti u DOS ime datoteke." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/hu.po wine-staging-1.7.47~ubuntu14.10.1/po/hu.po --- wine-staging-1.7.46~ubuntu14.10.1/po/hu.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/hu.po 2015-07-12 05:36:18.000000000 +0000 @@ -9584,7 +9584,7 @@ msgid "Referral hop limit exceeded" msgstr "Beszámolási ugrás limit túllépve" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9592,7 +9592,7 @@ "Még nincs megvalósítva\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1 fájl nem található\n" @@ -9676,25 +9676,23 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -"CALL egy kötegelt fájlban parancs végrehajtásra alkalmas\n" -"egy másik kötegelt fájl hívással. Ha a kötegelt fájl létezik, a vezérlő " -"visszatér\n" -"ahhoz a fájlhoz, amely meghívta. A CALL parancs segítségével lehet " -"paramétert átadni\n" -"a meghívott eljárásnak.\n" +"CALL egy kötegelt fájlban parancs végrehajtásra alkalmas egy\n" +"másik kötegelt fájl hívással. Ha a kötegelt fájl létezik, a vezérlő\n" +"visszatér ahhoz a fájlhoz, amely meghívta. A CALL parancs segítségével\n" +"lehet paramétert átadni a meghívott eljárásnak.\n" "\n" -"Az alapértelmezett mappa, környezeti változó, stb megváltozatása\n" -"a hívott eljárásban, hatással van a hívó eljárásra, amely megörökli azt.\n" +"Az alapértelmezett mappa, környezeti változó, stb megváltozatása a hívott\n" +"eljárásban, hatással van a hívó eljárásra, amely megörökli azt.\n" -#: cmd.rc:43 +#: cmd.rc:44 #, fuzzy #| msgid "" #| "CD is the short version of CHDIR. It changes the current\n" @@ -9706,63 +9704,62 @@ "CD a CHDIR parancs rövidített változata. Megváltoztatja az\n" "alapértelmezett mappát.\n" -#: cmd.rc:44 +#: cmd.rc:47 #, fuzzy #| msgid "CHDIR changes the current default directory.\n" msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR megváltoztatja az alapértelmezett mappát.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS letisztítja a konzol képernyőt.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY másol egy fájlt.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY módosítja a bemeneti/kimeneti eszközt.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE megjeleníti vagy módosítja a rendszer dátumot.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL töröl egy fájlt vagy fájlokat.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR kilistázza a mappa tartalmát.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -"ECHO megjeleníti a tartalmát a konzol " +"ECHO megjeleníti a tartalmát a konzol\n" "eszközön.\n" "\n" -"ECHO ON hatással van minden alsóbb parancsra a kötegfájlban, amely\n" -"adatot jelenít meg a konzol eszközön, parancs végrehajtás előtt " -"használatos.\n" +"ECHO ON hatással van minden alsóbb parancsra a kötegfájlban, amely adatot\n" +"jelenít meg a konzol eszközön, parancs végrehajtás előtt használatos.\n" "\n" "ECHO OFF visszaállítja az előző ECHO ON hatását (ECHO OFF alap-\n" -"értelmezetten). Az ECHO OFF parancs kijelzést megelőzően a\n" -"@ jel megjelenítődhet.\n" +"értelmezetten). Az ECHO OFF parancs kijelzést megelőzően a @ jel\n" +"megjelenítődhet.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE törli a fáljt vagy fájlokat.\n" -#: cmd.rc:71 +#: cmd.rc:85 #, fuzzy #| msgid "" #| "The FOR command is used to execute a command for each of a set of files.\n" @@ -9779,31 +9776,31 @@ "\n" "Szintaxis: FOR %változó IN (készlet) DO parancs\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -"A GOTO parancs áthelyezi a végrehajtást egy másik utasításra a\n" -"kötegfájlon belül.\n" +"A GOTO parancs áthelyezi a végrehajtást egy másik utasításra a kötegfájlon\n" +"belül.\n" "\n" -"A címke, amely a GOTO hivatkozik, maximum 255 karakter hosszú lehet,\n" -"de ebben nincs benne a szóköz karakter (ez különbözik más rendszer\n" -"művelettől). Ha két vagy több azonos címke létezik egy köteg fájlban\n" -"az első fog mindig végrehajtódni. GOTO egy nem létező címkére hivatkozik,\n" -"akkor megszakad a kötegelt fájl végrehajtása.\n" +"A címke, amely a GOTO hivatkozik, maximum 255 karakter hosszú lehet, de\n" +"ebben nincs benne a szóköz karakter (ez különbözik más rendszer\n" +"művelettől). Ha két vagy több azonos címke létezik egy köteg fájlban az\n" +"fog mindig végrehajtódni. GOTO egy nem létező címkére hivatkozik, akkor\n" +"megszakad a kötegelt fájl végrehajtása.\n" "\n" "GOTO parancsnak nincs hatása interaktív használat esetén.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9811,7 +9808,7 @@ "HELP megjeleníti a témához tartozó súgót.\n" "HELP paraméter nélkül, megmutat minden beépített CMD parancsot.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9829,10 +9826,10 @@ " IF [NOT] ERRORLEVEL szám parancs\n" "\n" "A parancs második formájánban a string1 és string2 értékét idézőjelek\n" -"közé kell tenni. Az összehasonlítás nem veszi figyelembe a kis- és " +"közé kell tenni. Az összehasonlítás nem veszi figyelembe a kis- és\n" "nagybetűket.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9846,40 +9843,38 @@ "A parancs bekéri az új kötet címkét az adott meghajtóhoz.\n" "Kijelezheti a lemez kötet címkéjét a VOL parancs használatával.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD az MKDIR rövidített változata. Alkönyvtárat hoz létre.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR alkönyvtárat hoz létre.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" "MOVE áthelyez egy fájlt vagy mappát a fájlrendszeren belül.\n" "\n" -"Ha a mozgatni kívánt elem mappa, akkor az összes benne lévő fájl és " -"alkönyvtár\n" -"is áthelyezésre kerül.\n" +"Ha a mozgatni kívánt elem mappa, akkor az összes benne lévő fájl és\n" +"alkönyvtár is áthelyezésre kerül.\n" "\n" -"MOVE hibával tér vissza, ha a régi és új útvonal különböző DOS meghajtókon " +"MOVE hibával tér vissza, ha a régi és új útvonal különböző DOS meghajtókon\n" "található.\n" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9888,28 +9883,27 @@ "PATH megjeleníti vagy módosítja a cmd keresési útvonalat.\n" "\n" "PATH megadása meg fogja jeleníteni az aktuális PATH beállítást (induláskor\n" -"a regisztrációs adatbázisból). Hogy módosítsa a beállítást\n" -"használja a PATH parancsot új érték megadásával.\n" +"a regisztrációs adatbázisból). Hogy módosítsa a beállítást használja a PATH\n" +"parancsot új érték megadásával.\n" "\n" -"Lehetséges módosítani a PATH útvonalat a PATH környezeti\n" -"változó használatával, például:\n" +"Lehetséges módosítani a PATH útvonalat a PATH környezeti változó\n" +"használatával, például:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -"PAUSE megjelenít egy üzenetet a képernyőn, felhasználói billentyűleütést " +"PAUSE megjelenít egy üzenetet a képernyőn, felhasználói billentyűleütést\n" "kérve.\n" "\n" -"Főként kötegfájloknál hasznos, hogy megengedi a felhasználónak egy korábbi " -"parancs\n" -"kimenetének elolvasását, mielőtt legördül a képernyőről.\n" +"Főként kötegfájloknál hasznos, hogy megengedi a felhasználónak egy korábbi\n" +"parancs kimenetének elolvasását, mielőtt legördül a képernyőről.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9943,46 +9937,45 @@ "$l < jel $n Aktuális meghajtó $p Aktuális útvonal\n" "$q Egyenlőség jel $t Aktuális idő $v cmd verzió\n" "\n" -"Megjegyezzük, hogy a PROMPT beviteli parancs karakterlánc nélkül " -"alaphelyzetbe\n" -"kerül, amely az aktuális mappa nevét (beleértve az\n" -"aktuális meghajtó betűjelét) követi egy nagyobb, mint (>) jel.\n" +"Megjegyezzük, hogy a PROMPT beviteli parancs karakterlánc nélkül\n" +"alaphelyzetbe kerül, amely az aktuális mappa nevét (beleértve az aktuális\n" +"meghajtó betűjelét) követi egy nagyobb, mint (>) jel.\n" "(mint egy PROMPT parancs $p$g).\n" "\n" "A megjelenítési formátumot lehet módosítani a PROMPT környezeti változóbal,\n" -"így a parancs 'SET PROMPT=szöveg' ugyanolyan hatással bír, mint a 'PROMPT " -"szöveg'.\n" +"így a parancs 'SET PROMPT=szöveg' ugyanolyan hatással bír, mint a\n" +"'PROMPT szöveg'.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" "Egy REM-el kezdődő (szüközzel folytatótó) parancssor nem hajt végre\n" "műveletet, és ezért kötegelt fájlban megjegyzés beírásra használható.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" "REN a RENAME parancs rövidített változata. Átnevez egy fájlt.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME átnevez egy fájlt.\n" -#: cmd.rc:161 +#: cmd.rc:181 #, fuzzy #| msgid "RD is the short version of RMDIR. It deletes a subdirectory.\n" msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD az RMDIR rövidített változata. Töröl egy alkönyvtárat.\n" -#: cmd.rc:162 +#: cmd.rc:183 #, fuzzy #| msgid "RMDIR deletes a subdirectory.\n" msgid "RMDIR deletes a directory.\n" msgstr "RMDIR törlöl egy alkönyvtárat.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9992,14 +9985,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET megjeleníti vagy módosítja a cmd környezeti változókat.\n" "\n" @@ -10009,75 +10001,72 @@ "\n" "SET =<érték>\n" "\n" -"ahol a és <érték> is karakterlánc. Nem szabad, hogy\n" -"szóköz legyen az egyenlőségjel előtt, sem a változó név előtt\n" -"sem pedig a változó névben.\n" -"\n" -"Wine alatt, a futtató környezeti operációs rendszer\n" -"tartalmazza a Win32 környezetet, ezért általánosságban sokkal több\n" -"értéket tartalmaz, mint a natív Win32 megvalósítás. Megjegyzés, hogy\n" -"nem lehetséges befolyásolni az operációs rendszer környezetet a cmd " -"parancssorral.\n" - -#: cmd.rc:211 -msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"ahol a és <érték> is karakterlánc. Nem szabad, hogy szóköz legyen\n" +"az egyenlőségjel előtt, sem a változó név előtt sem pedig a változó névben.\n" +"\n" +"Wine alatt, a futtató környezeti operációs rendszer tartalmazza a Win32\n" +"környezetet, ezért általánosságban sokkal több értéket tartalmaz, mint a\n" +"natív Win32 megvalósítás. Megjegyzés, hogy nem lehetséges befolyásolni az\n" +"operációs rendszer környezetet a cmd parancssorral.\n" + +#: cmd.rc:234 +msgid "" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "A SHIFT kötegfájlban használatos, hogy töröljön egy paramétert a lista\n" -"tetjéről, így paraméter 2 felveszi paraméter 1 értékét és így tovább. Ennek " -"nincs hatása,\n" -"ha parancssorból történik a meghívás.\n" +"tetjéről, így paraméter 2 felveszi paraméter 1 értékét és így tovább. Ennek\n" +"nincs hatása, ha parancssorból történik a meghívás.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME beállít vagy megmutatja az aktuális rendszeridőt.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE beállítja a cmd ablak címsorát.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -"TYPE átmásolja tartalmát a konzol eszközre (vagy " -"bárhová\n" -"ha átirányítják). Nincs ellenőrzés, hogy a fájl olvasható szöveg-e.\n" +"TYPE átmásolja tartalmát a konzol eszközre (vagy\n" +"bárhová ha átirányítják). Nincs ellenőrzés, hogy a fájl olvasható szöveg-e.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10087,8 +10076,8 @@ "\n" "The verify flag has no function in Wine.\n" msgstr "" -"VERIFY paranccsal beállítani, törölni vagy tesztelni lehet a verify jelzést. " -"Valós változatok:\n" +"VERIFY paranccsal beállítani, törölni vagy tesztelni lehet a verify\n" +"jelzést. Valós változatok:\n" "\n" "VERIFY ON\tBeállítja a jelzőt.\n" "VERIFY OFF\tTörli a jelzőt.\n" @@ -10097,23 +10086,23 @@ "\n" "A verify jelzőnek nincs funkciója a Wine-ban.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER kijelzi az éppen futó cmd verzióját.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL megmutatja a lemez kötet nevét.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" "ENDLOCAL megszünteti a környezeti területi beállítást a kötegelt fájlban\n" "amelyet egy megelőző SETLOCAL parancs állított be.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10122,33 +10111,31 @@ "file, whichever comes first), at which point the previous environment\n" "settings are restored.\n" msgstr "" -"SETLOCAL elindítja a környezeti változók területi beállítását egy kötegelt " +"SETLOCAL elindítja a környezeti változók területi beállítását egy kötegelt\n" "fájlban.\n" "\n" -"A területi beállítás megváltozik miután a SETLOCAL egy nyelvi beállításra " -"hivatkozik, és\n" -"addig marad érvényben, amíg ENDLOCAL parancs következik (vagy amíg fájl " -"tart),\n" -"amely esetén az előző környezeti változó\n" +"A területi beállítás megváltozik miután a SETLOCAL egy nyelvi beállításra\n" +"hivatkozik, és addig marad érvényben, amíg ENDLOCAL parancs következik\n" +"(vagy amíg fájl tart), amely esetén az előző környezeti változó\n" "visszaállítódik.\n" -#: cmd.rc:248 +#: cmd.rc:275 #, fuzzy #| msgid "" #| "PUSHD saves the current directory onto a\n" #| "stack, and then changes the current directory to the supplied one.\n" msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -"PUSHD elmenti az aktuális mappát a verembe,\n" -"és azután módosítja az aktuális mappát a megadottra.\n" +"PUSHD elmenti az aktuális mappát a verembe, és azután módosítja\n" +"az aktuális mappát a megadottra.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD módosítja az aktuális mappát a PUSHD-vel utoljára mentettre.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10156,7 +10143,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC megmutatja vagy módosítja a társított fájl kiterjesztéseket.\n" @@ -10164,59 +10151,59 @@ "Szintaxis: ASSOC [.ext[=[fájltípus]]]\n" "\n" "ASSOC paraméterek nélkül kijelzi az aktuális társításokat.\n" -"Ha csak a fájl kiterjesztéssel használt, akkor megjeleníti az aktuális " +"Ha csak a fájl kiterjesztéssel használt, akkor megjeleníti az aktuális\n" "társítást.\n" -"Az egyenlőségjel után a fájltípus megadása nélkül, törli az aktuális " +"Az egyenlőségjel után a fájltípus megadása nélkül, törli az aktuális\n" "társítást és nem csinál mást.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -"FTYPE megmutat vagy módosít társítási parancsokat, hogy mely fájl típushoz " +"FTYPE megmutat vagy módosít társítási parancsokat, hogy mely fájl típushoz\n" "vannak társítva.\n" "\n" "Szintaxis: FTYPE [fájltípus[=[társításiParancs]]]\n" "\n" -"Paraméterek nélkül, megjeleníti azokat a fájl típusokat, amelyhez társítási " +"Paraméterek nélkül, megjeleníti azokat a fájl típusokat, amelyhez társítási\n" "karakterlánc van aktuálisan megadva.\n" -"Ha csak a fájl típus paraméter biztosított, kijelzi a társított parancs " +"Ha csak a fájl típus paraméter biztosított, kijelzi a társított parancs\n" "karakterlácot, és mást nem tesz.\n" -"Amennyiben nincs társítási parancs megadva az egyenlőség jel után, akkor " +"Amennyiben nincs társítási parancs megadva az egyenlőség jel után, akkor\n" "törli a parancs társítást, amely társítva van a megadott fájltípushoz.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE lapokra tördelve jeleníti meg a fájlt vagy a pipe bemenetet.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE megjelenít egy szöveget és vár, amíg a felhasználó\n" -"leüt egy megengedett billentyűt a kiválasztható listából.\n" +"CHOICE megjelenít egy szöveget és vár, amíg a felhasználó leüt egy\n" +"megengedett billentyűt a kiválasztható listából.\n" "CHOICE főként batch fájl menü kiválasztására használt.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT megszakít egy aktuális parancs futtatást és visszatér\n" -"az operációs rendszerhez vagy ahhoz a parancssorhoz, amely meghívta.\n" +"EXIT megszakít egy aktuális parancs futtatást és visszatér az operációs\n" +"rendszerhez vagy ahhoz a parancssorhoz, amely meghívta.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10271,23 +10258,24 @@ "DIR\t\tA mappa tartalmát kilistázza\n" "ECHO\t\tSzöveget másol közvetlenül a konzol kimenetére\n" "ENDLOCAL\tBefejezi a területi módosításokat a kötegelt fájlban\n" -"FTYPE\t\tMegjeleníti vagy módosítja a társítási hozzárendelést a " -"fájltípusokhoz\n" +"FTYPE\t\tMegjeleníti vagy módosítja a társítási hozzárendelést a\n" +"\t\tfájltípusokhoz\n" "HELP\t\tSúgó megjelenítése\n" "MD (MKDIR)\tAlkönyvtár létrehozása\n" "MORE\t\tLapokra tördelve jeleníti meg a kimenetet\n" "MOVE\t\tFájlt, fájlokat vagy mappát helyez át egy másik útvonalra\n" "PATH\t\tBeállítja vagy megmutatja a keresési útvonalat\n" "PAUSE\t\tA kötegelt fájl működésének felfüggesztése\n" -"POPD\t\tVisszaállít egy mappát az utoljára PUSHD paranncsal mentett értékre\n" +"POPD\t\tVisszaállít egy mappát az utoljára PUSHD paranncsal mentett\n" +"\t\tértékre\n" "PROMPT\t\tMódosítja a parancssort\n" "PUSHD\t\tÚj mappára váltás, az aktuális eltárolásával\n" "REN (RENAME)\tFájl átnevezése\n" "RD (RMDIR)\tTöröl egy mappát\n" "SET\t\tBeállítja vagy megmutatja a környezeti változókat\n" "SETLOCAL\tElindítja a területi beállításokat a kötegelt fájlban\n" -"START\t\tFuttat egy programot vagy megnyit egy dokumentumot a társított " -"prgogram segítségével\n" +"START\t\tFuttat egy programot vagy megnyit egy dokumentumot a társított\n" +"\t\tprgogram segítségével\n" "TIME\t\tBeállítja vagy megmutatja az aktuális rendszeridőt\n" "TITLE\t\tBeállítja az ablak címsort\n" "TYPE\t\tA szoveges fájl tartalmának típusa\n" @@ -10298,110 +10286,110 @@ "\n" "HELP további információkat jelenít meg a fenti parancsokról.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Biztos benne?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "I" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "%1 kiterjesztéshez hiányzik a fájl társítás\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "'%1' fájltípushoz nincs társított parancs\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "%1 felülírható?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Több..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "A kötegelt feldolgozásban lévő sor lehet csonkítva lesz. Használja:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Hiányzó paraméter\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Szintaktikai hiba\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "%1 -hez nem érhető el súgó\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Ugrási cél nem található\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Aktuális dátum %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Aktuális idő %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Új dátum: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Új idő: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "%1 környezeti változó nincs meghatározva\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "'%1' megnyitása sikertelen\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Nem lehet hívi batch címkét a batch szkripten kívűl\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "M" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "%1 töröleató?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "%1 ismétlése\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "%1 ellenőrzése\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verify ON vagy OFF lehet\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Paraméter hiba\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10409,74 +10397,74 @@ "Kötet sorozatszáma %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Kötet címke (11 karakter, üresen hagyáshoz)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "Útvonal nem található\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Nyomjon meg egy billentyűt a folytatáshoz... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Wine parancssor" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Több? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "A bemenő sor túl hosszú.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "%1!c! meghajtó kötet neve %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "%1!c! kötetnek nincs címkéje.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Igen|Nem)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Igen|Nem|Mind)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 #, fuzzy #| msgid "Unexpected network error.\n" msgid "Expected an operator.\n" msgstr "Nem várt hálózati hiba.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12135,7 +12123,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12145,7 +12133,7 @@ "fájlhoz.\n" "ShellExecuteEx hiba" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "Nem lehet átfordítani a megadott Unix fájlnevet DOS fájlnévvé." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/it.po wine-staging-1.7.47~ubuntu14.10.1/po/it.po --- wine-staging-1.7.46~ubuntu14.10.1/po/it.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/it.po 2015-07-12 05:36:18.000000000 +0000 @@ -9663,7 +9663,7 @@ msgid "Referral hop limit exceeded" msgstr "Ecceduto il limite di salti di rinvio" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9671,7 +9671,7 @@ "Non ancora implementato\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: File non trovato\n" @@ -9755,10 +9755,10 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" @@ -9769,9 +9769,9 @@ "procedura chiamata.\n" "\n" "Cambiamenti alla cartella predefinita, alle variabili d'ambiente etc fatti\n" -" dentro una procedura chiamata sono ereditati dal chiamante.\n" +"dentro una procedura chiamata sono ereditati dal chiamante.\n" -#: cmd.rc:43 +#: cmd.rc:44 #, fuzzy #| msgid "" #| "CD is the short version of CHDIR. It changes the current\n" @@ -9780,45 +9780,45 @@ "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -"CD è la versione ridotta di CHDIR. Cambia la cartella\n" -"predefinita attuale.\n" +"CD è la versione ridotta di CHDIR. Cambia la cartella predefinita " +"attuale.\n" -#: cmd.rc:44 +#: cmd.rc:47 #, fuzzy #| msgid "CHDIR changes the current default directory.\n" msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR cambia la cartella predefinita attuale.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS pulisce la schermata della console.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY copia un file.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY cambia l'unità di input/output.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE mostra o cambia l'orario di sistema.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL cancella un file o un insieme di file.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR elenca i contenuti di una cartella.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9830,14 +9830,14 @@ "sul dispositivo di terminale prima di essere eseguiti.\n" "\n" "ECHO OFF inverte l'effetto di un precedente ECHO ON (ECHO usa OFF per\n" -"default). Si può evitare che il comando ECHO OFF sia mostrato\n" -"precedendolo con un segno @.\n" +"default). Si può evitare che il comando ECHO OFF sia mostrato precedendolo\n" +"con un segno @.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE cancella un file o un insieme di file.\n" -#: cmd.rc:71 +#: cmd.rc:85 #, fuzzy #| msgid "" #| "The FOR command is used to execute a command for each of a set of files.\n" @@ -9855,32 +9855,31 @@ "\n" "Sintassi: FOR %variabile IN (set) DO comando\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" "Il comando GOTO trasferisce l'esecuzione ad un'altra istruzione dentro un\n" "file batch.\n" "\n" -"L'etichetta di destinazione di un GOTO può essere lunga fino a 255 " -"caratteri\n" -"ma non può includere spazi (questo è differente da altri sistemi\n" +"L'etichetta di destinazione di un GOTO può essere lunga fino a 255\n" +"caratteri ma non può includere spazi (questo è differente da altri sistemi\n" "operativi). Se esistono due o più etichette identiche in un file batch, la\n" -"prima sarà sempre eseguita. Tentare un GOTO verso un'etichetta\n" -"inesistente termina l'esecuzione del file batch.\n" +"prima sarà sempre eseguita. Tentare un GOTO verso un'etichetta inesistente\n" +"termina l'esecuzione del file batch.\n" "\n" "GOTO non ha effetto quando usato in modalità interattiva.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9888,7 +9887,7 @@ "HELP mostra dei brevi dettagli di aiuto su un argomento.\n" "HELP senza argomenti mostra tutti i comandi CMD integrati.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9905,10 +9904,10 @@ " IF [NOT] stringa1==stringa2 comando\n" " IF [NOT] ERRORLEVEL numero comando\n" "\n" -"Nella seconda forma del comando, stringa1 e stringa2 devono essere\n" -"in doppi apici. Il confronto non è sensibile alle maiuscole.\n" +"Nella seconda forma del comando, stringa1 e stringa2 devono essere in doppi\n" +"apici. Il confronto non è sensibile alle maiuscole.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9923,40 +9922,38 @@ "specificata.\n" "Puoi mostrare l'etichetta di volume del disco con il comando VOL.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD è la versione ridotta di MKDIR. Crea una sottocartella.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR crea una sottocartella.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" "MOVE sposta un file o una cartella in un punto diverso nel file system.\n" "\n" -"Se l'oggetto che viene spostato è una cartella allora tutti i files e le " -"sottocartelle\n" -"dentro l'oggetto saranno spostate insieme.\n" +"Se l'oggetto che viene spostato è una cartella allora tutti i files e le\n" +"sottocartelle dentro l'oggetto saranno spostate insieme.\n" "\n" -"MOVE fallisce se la nuova e la vecchia locazione sono su lettere di unità " +"MOVE fallisce se la nuova e la vecchia locazione sono su lettere di unità\n" "DOS differenti.\n" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9964,21 +9961,20 @@ msgstr "" "PATH mostra o cambia il percorso di ricerca di cmd.\n" "\n" -"Usando PATH, verrà mostrato l'impostazione corrente di PATH (il cui valore è " -"preso\n" -"inizialmente dal registro). Per cambiarla, fai seguire al\n" -"comando PATH il nuovo valore.\n" +"Usando PATH, verrà mostrato l'impostazione corrente di PATH (il cui valore\n" +"è preso inizialmente dal registro). Per cambiarla, fai seguire al comando\n" +"PATH comando PATH il nuovo valore.\n" "\n" -"È anche possibile modificare il PATH usando la variabile d'ambiente\n" -"PATH, per esempio:\n" +"È anche possibile modificare il PATH usando la variabile d'ambiente PATH,\n" +"per esempio:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE mostra un messaggio sullo schermo che chiede all'utente di premere un " "tasto.\n" @@ -9986,7 +9982,7 @@ "È utile soprattutto in file batch per permettere all'utente di leggere\n" "l'output di un comando precedente prima che scorra via dallo schermo.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -10022,46 +10018,44 @@ "$q Segno uguale $t Orario attuale $v Versione di cmd\n" "\n" "Nota che inserire il comando PROMPT senza una stringa dopo resetta il\n" -"prompt al default, che è la cartella corrente (che include la\n" -"lettera dell'unità attuale) seguita da un segno maggiore (>).\n" +"prompt al default, che è la cartella corrente (che include la lettera\n" +"dell'unità attuale) seguita da un segno maggiore (>).\n" "(come un comando PROMPT $p$g).\n" "\n" -"Il prompt può essere cambiato anche alterando la variabile d'ambiente " -"PROMPT,\n" -"perciò il comando 'SET PROMPT=testo' ha lo stesso effetto di 'PROMPT " -"testo'.\n" - -#: cmd.rc:155 -msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" -msgstr "" -"Una linea di comando che comincia con REM (seguito da uno spazio) non " -"esegue\n" -"alcuna azione e può, quindi, essere usata come un commento in un file " -"batch.\n" +"Il prompt può essere cambiato anche alterando la variabile d'ambiente\n" +"PROMPT, perciò il comando 'SET PROMPT=testo' ha lo stesso effetto di\n" +"'PROMPT testo'.\n" + +#: cmd.rc:173 +msgid "" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" +msgstr "" +"Una linea di comando che comincia con REM (seguito da uno spazio) non\n" +"esegue alcuna azione e può, quindi, essere usata come un commento in un\n" +"file batch.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "REN è la versione ridotta di RENAME. Rinomina un file.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME rinomina un file.\n" -#: cmd.rc:161 +#: cmd.rc:181 #, fuzzy #| msgid "RD is the short version of RMDIR. It deletes a subdirectory.\n" msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD è la versione ridotta di RMDIR. Elimina una sottocartella.\n" -#: cmd.rc:162 +#: cmd.rc:183 #, fuzzy #| msgid "RMDIR deletes a subdirectory.\n" msgid "RMDIR deletes a directory.\n" msgstr "RMDIR elimina una sottocartella.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -10071,14 +10065,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET mostra o cambia le variabili d'ambiente di cmd.\n" "\n" @@ -10089,72 +10082,73 @@ "SET =\n" "\n" "dove e sono stringhe di caratteri. Non devono esserci\n" -"spazi prima del segno uguale, né il nome della variabile può\n" -"avere spazi all'interno.\n" +"spazi prima del segno uguale, né il nome della variabile può avere spazi\n" +"all'interno.\n" "\n" -"Sotto Wine, l'ambiente del sistema operativo sottostante è\n" -"incluso nell'ambiente Win32; ci saranno quindi generalmente\n" -"molti più valori che in un'implementazione nativa di Win32. Nota che non è\n" -"possibile influenzare l'ambiente del sistema operativo da dentro il cmd.\n" - -#: cmd.rc:211 -msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"Sotto Wine, l'ambiente del sistema operativo sottostante è incluso\n" +"nell'ambiente Win32; ci saranno quindi generalmente molti più valori che in\n" +"un'implementazione nativa di Win32. Nota che non è possibile influenzare\n" +"l'ambiente del sistema operativo da dentro il cmd.\n" + +#: cmd.rc:234 +msgid "" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "SHIFT è usato in un file batch per rimuovere un parametro dall'inizio della\n" "lista, perciò il parametro 2 diventa parametro 1 e così via. Non ha effetto\n" "se chiamato dalla linea di comando.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME imposta o mostra l'orario di sistema attuale.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE imposta il titolo della finestra di cmd.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -"TYPE copia sul dispositivo della console (o " -"ovunque\n" -"se rediretto). Nessun controllo è fatto se il file sia testo leggibile.\n" +"TYPE copia sul dispositivo della console (o\n" +"ovunque se rediretto). Nessun controllo è fatto se il file sia testo\n" +"leggibile.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10164,7 +10158,7 @@ "\n" "The verify flag has no function in Wine.\n" msgstr "" -"VERIFY è usato per impostare, pulire o verificare la flag di verify. Forme " +"VERIFY è usato per impostare, pulire o verificare la flag di verify. Forme\n" "valide sono:\n" "\n" "VERIFY ON\tImposta la flag.\n" @@ -10173,23 +10167,23 @@ "\n" "La flag di verify non ha funzioni in Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER mostra la versione di cmd che stai usando.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL mostra l'etichetta di volume di un'unità disco.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" "ENDLOCAL termina la localizzazione dei cambiamenti dell'ambiente in un file\n" "batch che erano stati introdotti da un precedente SETLOCAL.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10206,23 +10200,23 @@ "del file, qualunque venga prima), al cui punto le precedenti impostazioni\n" "dell'ambiente sono ripristinate.\n" -#: cmd.rc:248 +#: cmd.rc:275 #, fuzzy #| msgid "" #| "PUSHD saves the current directory onto a\n" #| "stack, and then changes the current directory to the supplied one.\n" msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -"PUSHD salva la cartella attuale in una\n" -"pila e poi la cambia con quella passata.\n" +"PUSHD salva la cartella attuale in una pila e poi la\n" +"cambia con quella passata.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD cambia la cartella attuale con l'ultima salvata con PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10230,7 +10224,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC mostra o modifica le associazioni con le estensioni dei file.\n" @@ -10239,57 +10233,57 @@ "\n" "ASSOC senza parametri mostra le attuali associazioni dei file.\n" "Se usato con solo un'estensione di file, mostra l'associazione attuale.\n" -"Non specificando alcun tipo di file dopo il segno uguale rimuove l'attuale " +"Non specificando alcun tipo di file dopo il segno uguale rimuove l'attuale\n" "associazione, se esiste.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE mostra o modifica i comandi di apertura associati ai tipi di file.\n" "\n" "Sintassi: FTYPE [tipo_file[=[comando_apertura]]]\n" "\n" -"Senza parametri, mostra i tipi di file per i quali sono attualmente definiti " -"comandi di apertura.\n" -"Se usato con solo un tipo di file, mostra la stringa del comando di apertura " -"associato, se esiste.\n" -"Non specificare alcun comando di apertura dopo il segno uguale rimuove la " +"Senza parametri, mostra i tipi di file per i quali sono attualmente\n" +"definiti comandi di apertura.\n" +"Se usato con solo un tipo di file, mostra la stringa del comando di\n" +"apertura associato, se esiste.\n" +"Non specificare alcun comando di apertura dopo il segno uguale rimuove la\n" "stringa di comando associata con il tipo di file specificato.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE mostra l'output di files o l'input dalla pipe in pagine.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE mostra un testo e aspetta l'inserimento da parte\n" -"dell'utente di un tasto permesso da una lista selezionabile.\n" +"CHOICE mostra un testo e aspetta l'inserimento da parte dell'utente di un\n" +"tasto permesso da una lista selezionabile.\n" "CHOICE è usato generalmente per creare un menù a selezione in un file " "batch.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT termina la sessione corrente di cmd e torna al\n" -"sistema operativo o alla shell dal quale hai chiamato cmd.\n" +"EXIT termina la sessione corrente di cmd e torna al sistema operativo o\n" +"alla shell dal quale hai chiamato cmd.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10343,10 +10337,10 @@ "DEL (ERASE)\tCancella un file o un insieme di file\n" "DIR\t\tElenca il contenuto di una cartella\n" "ECHO\t\tCopia il testo direttamente sull'output della console\n" -"ENDLOCAL\tTermina localizzazione dei cambiamenti d'ambiente in un file " -"batch\n" -"FTYPE\t\tMostra o modifica i comandi di apertura associati con i tipi di " -"file\n" +"ENDLOCAL\tTermina localizzazione dei cambiamenti d'ambiente in un file\n" +"\t\tbatch\n" +"FTYPE\t\tMostra o modifica i comandi di apertura associati con i tipi di\n" +"\t\tfile\n" "HELP\t\tMostra dei semplici dettagli di aiuto su di un argomento\n" "MD (MKDIR)\tCrea una sottocartella\n" "MORE\t\tMostra l'output in pagine\n" @@ -10359,8 +10353,10 @@ "REN (RENAME)\tRinomina un file\n" "RD (RMDIR)\tElimina una sottocartella\n" "SET\t\tConfigura o mostra le variabili d'ambiente\n" -"SETLOCAL\tInizia localizzazione dei cambiamenti d'ambiente in un file batch\n" -"START\t\tAvvia un programma o apre un documento con il programma associato\n" +"SETLOCAL\tInizia localizzazione dei cambiamenti d'ambiente in un file\n" +"\t\tbatch\n" +"START\t\tAvvia un programma o apre un documento con il programma\n" +"\t\tassociato\n" "TIME\t\tConfigura o cambia l'orario di sistema attuale\n" "TITLE\t\tConfigura il titolo della finestra per la sessione di CMD\n" "TYPE\t\tInserisce il contenuto di un file di testo\n" @@ -10369,113 +10365,113 @@ "XCOPY\t\tCopia file o alberi di cartelle sorgenti in una destinazione\n" "EXIT\t\tChiude CMD\n" "\n" -"Inserisci HELP per maggiori informazioni su ciascuno dei comandi " +"Inserisci HELP per maggiori informazioni su ciascuno dei comandi\n" "sovrastanti.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Sei sicuro?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "S" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Associazione di file mancante per l'estensione %1\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Nessun comando di apertura associato con il tipo di file '%1'\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Sovrascrivere %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Di più..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "Linea nell'elaborazione Batch probabilmente troncata. Uso:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Manca un parametro\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Errore di sintassi\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Nessun aiuto disponibile per %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Destinazione del GOTO non trovata\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "La data attuale è %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "L'ora attuale è %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Inserisci una nuova data: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Inserisci una nuova ora: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Variabile d'ambiente %1 non definita\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Impossibile aprire '%1'\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Impossibile chiamare un'etichetta batch fuori da uno script batch\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "T" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Eliminare %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Echo è %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Verify è %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verify deve essere ON o OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Errore nel parametro\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10483,74 +10479,74 @@ "Il numero seriale del volume è %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Etichetta del volume (11 caratteri, per nessuno)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH non trovato\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Premere un tasto qualsiasi per continuare... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Prompt dei comandi di Wine" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Di più? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "La linea di input è troppo lunga.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "Il volume nell'unità %1!c! è %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "Il volume nell'unità %1!c! non ha etichetta.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Sì|No)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Sì|No|Tutti)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 #, fuzzy #| msgid "Unexpected network error.\n" msgid "Expected an operator.\n" msgstr "Errore del network inaspettato.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12211,7 +12207,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12221,7 +12217,7 @@ "associata con il file specificato.\n" "ShellExecuteEx fallito" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "Non è stato possibile tradurre il nome file Unix in un nome file DOS." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/ja.po wine-staging-1.7.47~ubuntu14.10.1/po/ja.po --- wine-staging-1.7.46~ubuntu14.10.1/po/ja.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/ja.po 2015-07-12 05:36:18.000000000 +0000 @@ -9467,7 +9467,7 @@ msgid "Referral hop limit exceeded" msgstr "紹介のホップ数が限界を超えました" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9475,7 +9475,7 @@ "まだ実装されていません\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: ファイルが見つかりません\n" @@ -9558,11 +9558,20 @@ msgstr "時計" #: cmd.rc:40 -msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +#, fuzzy +#| msgid "" +#| "CALL is used within a batch file to execute commands\n" +#| "from another batch file. When the batch file exits, control returns to\n" +#| "the file which called it. The CALL command may supply parameters to the\n" +#| "called procedure.\n" +#| "\n" +#| "Changes to default directory, environment variables etc made within a\n" +#| "called procedure are inherited by the caller.\n" +msgid "" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" @@ -9575,7 +9584,7 @@ "呼び出された手続きが行ったカレントディレクトリや環境変数の変更は呼び出\n" "し元に引き継がれます。\n" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" @@ -9583,40 +9592,50 @@ "CD <ディレクトリ> は CHDIR の短縮版です。現在のデフォルト ディレクトリ\n" "を変更します。\n" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR <ディレクトリ> は現在のデフォルト ディレクトリを変更します。\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLSはコンソール画面をクリアします。\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY <ファイル名> はファイルをコピーします。\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY は入出力デバイスを変更します。\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE はシステム日を表示または変更します。\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL <ファイル名> はファイルやファイル群を削除します。\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR はディレクトリの内容を一覧表示します。\n" -#: cmd.rc:62 +#: cmd.rc:75 +#, fuzzy +#| msgid "" +#| "ECHO displays on the current terminal device.\n" +#| "\n" +#| "ECHO ON causes all subsequent commands in a batch file to be displayed\n" +#| "on the terminal device before they are executed.\n" +#| "\n" +#| "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" +#| "default). The ECHO OFF command can be prevented from displaying by\n" +#| "preceding it with an @ sign.\n" msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9631,11 +9650,11 @@ "ではOFFです)。ECHO OFF コマンドは@マークに続けて実行すれば\n" "表示されません。\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE <ファイル名> はファイルやファイル群を削除します。\n" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9650,16 +9669,28 @@ "\n" "バッチ ファイルで FOR を利用するとき、% 記号は二重にする必要があります。\n" -#: cmd.rc:83 -msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" -"\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +#: cmd.rc:97 +#, fuzzy +#| msgid "" +#| "The GOTO command transfers execution to another statement within a\n" +#| "batch file.\n" +#| "\n" +#| "The label which is the target of a GOTO may be up to 255 characters\n" +#| "long but may not include spaces (this is different from other operating\n" +#| "systems). If two or more identical labels exist in a batch file the\n" +#| "first one will always be executed. Attempting to GOTO a nonexistent\n" +#| "label terminates the batch file execution.\n" +#| "\n" +#| "GOTO has no effect when used interactively.\n" +msgid "" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" +"\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" @@ -9674,7 +9705,7 @@ "\n" "GOTO は対話モードで使用された場合は意味を持ちません。\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9682,7 +9713,7 @@ "HELP <コマンド> はトピックに対する簡潔なヘルプの詳細を表示します。\n" "引数なしの HELP はすべての CMD 内蔵コマンドを表示します。\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9702,7 +9733,7 @@ "2番目の形式において、文字列1と文字列2はダブルクオートで囲われ\n" "ていなければなりません。大文字と小文字は区別されません。\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9716,21 +9747,31 @@ "コマンドを実行すると指定したドライブの新しいボリューム名を要求します。\n" "ディスクのボリューム ラベルは VOL コマンドで表示できます。\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD <名前> は MKDIR の短縮版です。サブディレクトリを作成します。\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR <名前> はサブディレクトリを作成します。\n" -#: cmd.rc:113 +#: cmd.rc:131 +#, fuzzy +#| msgid "" +#| "MOVE relocates a file or directory to a new point within the file " +#| "system.\n" +#| "\n" +#| "If the item being moved is a directory then all the files and " +#| "subdirectories\n" +#| "below the item are moved as well.\n" +#| "\n" +#| "MOVE fails if the old and new locations are on different DOS drive " +#| "letters.\n" msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" @@ -9742,13 +9783,24 @@ "\n" "MOVE では移動元と移動先のドライブ レターが異なる場合、移動は失敗します。\n" -#: cmd.rc:124 +#: cmd.rc:142 +#, fuzzy +#| msgid "" +#| "PATH displays or changes the cmd search path.\n" +#| "\n" +#| "Entering PATH will display the current PATH setting (initially taken\n" +#| "from the registry). To change the setting follow the\n" +#| "PATH command with the new value.\n" +#| "\n" +#| "It is also possible to modify the PATH by using the PATH environment\n" +#| "variable, for example:\n" +#| "PATH %PATH%;c:\\temp\n" msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9764,19 +9816,49 @@ "例えば:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 +#, fuzzy +#| msgid "" +#| "PAUSE displays a message on the screen asking the user to press a key.\n" +#| "\n" +#| "It is mainly useful in batch files to allow the user to read the output\n" +#| "of a previous command before it scrolls off the screen.\n" msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE は画面にキーを押してくださいとメッセージを表示します。\n" "\n" "これは主にバッチ ファイル中で実行されたコマンドの結果がスクロールする前\n" "にユーザが読めるようにしたい場合に有用です。\n" -#: cmd.rc:151 +#: cmd.rc:169 +#, fuzzy +#| msgid "" +#| "PROMPT sets the command-line prompt.\n" +#| "\n" +#| "The string following the PROMPT command (and the space immediately " +#| "after)\n" +#| "appears at the beginning of the line when cmd is waiting for input.\n" +#| "\n" +#| "The following character strings have the special meaning shown:\n" +#| "\n" +#| "$$ Dollar sign $_ Linefeed $b Pipe sign (|)\n" +#| "$d Current date $e Escape $g > sign\n" +#| "$l < sign $n Current drive $p Current path\n" +#| "$q Equal sign $t Current time $v cmd version\n" +#| "\n" +#| "Note that entering the PROMPT command without a prompt-string resets the\n" +#| "prompt to the default, which is the current directory (which includes " +#| "the\n" +#| "current drive letter) followed by a greater-than (>) sign.\n" +#| "(like a command PROMPT $p$g).\n" +#| "\n" +#| "The prompt can also be changed by altering the PROMPT environment " +#| "variable,\n" +#| "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9818,31 +9900,53 @@ "プロンプトはPROMPT環境変数を編集することでも変更できます。\n" "したがって、'SET PROMPT=文字列'と'PROMPT 文字列'の効果は同じです。\n" -#: cmd.rc:155 +#: cmd.rc:173 +#, fuzzy +#| msgid "" +#| "A command line beginning with REM (followed by a space) performs no\n" +#| "action, and can therefore be used as a comment in a batch file.\n" msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" "REM(と直後のスペース)で始まるコマンドは実行されません。\n" "したがって、バッチファイル中のコメントとして使用できます。\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "REN <ファイル名> は RENAME の短縮版です。ファイルを変名します。\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME <ファイル名> はファイルを変名します。\n" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD <ディレクトリ> は RMDIR の短縮版です。ディレクトリを削除します。\n" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "RMDIR <ディレクトリ> はディレクトリを削除します。\n" -#: cmd.rc:206 +#: cmd.rc:229 +#, fuzzy +#| msgid "" +#| "SET displays or changes the cmd environment variables.\n" +#| "\n" +#| "SET without parameters shows all of the current environment.\n" +#| "\n" +#| "To create or modify an environment variable the syntax is:\n" +#| "\n" +#| "SET =\n" +#| "\n" +#| "where and are character strings. There must be no\n" +#| "space before the equals sign, nor can the variable name\n" +#| "have embedded spaces.\n" +#| "\n" +#| "Under Wine, the environment of the underlying operating system is\n" +#| "included into the Win32 environment, there will generally therefore be\n" +#| "many more values than in a native Win32 implementation. Note that it is\n" +#| "not possible to affect the operating system environment from within cmd.\n" msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9852,14 +9956,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET はcmdの環境変数を表示または変更します。\n" "\n" @@ -9878,44 +9981,79 @@ "れています。cmd内からOSの環境変数を変更することができないこと\n" "に注意して下さい。\n" -#: cmd.rc:211 -msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +#: cmd.rc:234 +#, fuzzy +#| msgid "" +#| "SHIFT is used in a batch file to remove one parameter from the head of\n" +#| "the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" +#| "if called from the command line.\n" +msgid "" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "SHIFT はバッチファイル中でリストの先頭から一つのパラメータを取り除く時\n" "に使用します。つまり、パラメータ2がパラメータ1になります。コマンドライン\n" "から呼ばれたときには何も起こりません。\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 +#, fuzzy +#| msgid "" +#| "Start a program, or open a document in the program normally used for " +#| "files with that suffix.\n" +#| "Usage:\n" +#| "start [options] program_filename [...]\n" +#| "start [options] document_filename\n" +#| "\n" +#| "Options:\n" +#| "\"title\" Specifies the title of the child windows.\n" +#| "/d directory Start the program in the specified directory.\n" +#| "/b Don't create a new console for the program.\n" +#| "/i Start the program with fresh environment variables.\n" +#| "/min Start the program minimized.\n" +#| "/max Start the program maximized.\n" +#| "/low Start the program in the idle priority class.\n" +#| "/normal Start the program in the normal priority class.\n" +#| "/high Start the program in the high priority class.\n" +#| "/realtime Start the program in the realtime priority class.\n" +#| "/abovenormal Start the program in the abovenormal priority class.\n" +#| "/belownormal Start the program in the belownormal priority class.\n" +#| "/node n Start the program on the specified NUMA node.\n" +#| "/affinity mask Start the program with the specified affinity mask.\n" +#| "/wait Wait for the started program to finish, then exit with its " +#| "exit code.\n" +#| "/unix Use a Unix filename and start the file like windows " +#| "explorer.\n" +#| "/ProgIDOpen Open a document using the specified progID.\n" +#| "/? Display this help and exit.\n" msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" "プログラムを開始したり、拡張子に基づき通常使われるプログラムで文書を開きま" "す。\n" @@ -9945,24 +10083,28 @@ "/ProgIDOpen 文書を指定した progID を用いて開きます。\n" "/? このヘルプを表示し、終了します。\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME は現在の時刻を設定または表示します。\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE <文字列> は cmd ウィンドウのウィンドウ タイトルを設定します。\n" -#: cmd.rc:219 +#: cmd.rc:244 +#, fuzzy +#| msgid "" +#| "TYPE copies to the console device (or elsewhere\n" +#| "if redirected). No check is made that the file is readable text.\n" msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" "TYPE <ファイル名> は <ファイル名> をコンソール デバイス(またはリダイレクト\n" "された所)にコピーします。ファイルが可読なテキスト ファイルかどうかチェック\n" "されません。\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9981,23 +10123,27 @@ "\n" "Wine環境では照合フラグは意味を持ちません。\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER は動作しているcmdのバージョンを表示します。\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL はディスク デバイスのボリューム ラベルを表示します。\n" -#: cmd.rc:237 +#: cmd.rc:263 +#, fuzzy +#| msgid "" +#| "ENDLOCAL ends localization of environment changes in a batch file\n" +#| "which were introduced by a preceding SETLOCAL.\n" msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" "ENDLOCAL は先行する SETLOCAL によって開始されたバッチ ファイルでの環境\n" "変更の局所化を終了します。\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10012,21 +10158,35 @@ "ENDLOCAL が現れる(または、ファイルの終端に到達するかのいずれか早いほう)\n" "まで保持されます。終了時点で以前の環境設定が復元されます。\n" -#: cmd.rc:248 +#: cmd.rc:275 +#, fuzzy +#| msgid "" +#| "PUSHD saves the current directory onto a\n" +#| "stack, and then changes the current directory to the supplied one.\n" msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" "PUSHD <ディレクトリ> はカレント ディレクトリをスタック上に保存し、\n" "カレント ディレクトリを指定されたディレクトリに変更します。\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" "POPD は PUSHD で最後に保存されたディレクトリにカレント ディレクトリを変更しま" "す。\n" -#: cmd.rc:258 +#: cmd.rc:288 +#, fuzzy +#| msgid "" +#| "ASSOC shows or modifies file extension associations.\n" +#| "\n" +#| "Syntax: ASSOC [.ext[=[fileType]]]\n" +#| "\n" +#| "ASSOC without parameters displays current file associations.\n" +#| "If used with only a file extension, displays the current association.\n" +#| "Specifying no file type after the equal sign removes the current " +#| "association, if any.\n" msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10034,7 +10194,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC はファイル拡張子の関連付けを表示または変更します。\n" @@ -10046,17 +10206,29 @@ "ファイル タイプを等号のあとに指定しない場合は現在の関連付けがあれば削除しま" "す。\n" -#: cmd.rc:269 +#: cmd.rc:300 +#, fuzzy +#| msgid "" +#| "FTYPE shows or modifies open commands associated with file types.\n" +#| "\n" +#| "Syntax: FTYPE [fileType[=[openCommand]]]\n" +#| "\n" +#| "Without parameters, shows the file types for which open command strings " +#| "are currently defined.\n" +#| "If used with only a file type, displays the associated open command " +#| "string, if any.\n" +#| "Specifying no open command after the equal sign removes the command " +#| "string associated to the specified file type.\n" msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE はファイル タイプに関連付けられたオープン コマンドを表示または変更しま" @@ -10071,29 +10243,38 @@ "等号のあとに何もオープン コマンドを指定しない場合は、指定したファイル タイプ" "に対するコマンド文字列を削除します。\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE はファイルの出力やパイプ化された入力を表示します。\n" -#: cmd.rc:275 +#: cmd.rc:308 +#, fuzzy +#| msgid "" +#| "CHOICE displays a text and waits, until the User\n" +#| "presses an allowed Key from a selectable list.\n" +#| "CHOICE is mainly used to build a menu selection in a batch file.\n" msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" "CHOICE はテキストを表示し、選択可能なりストで許可されたキーをユーザが押\n" "すまで待機します。\n" "CHOICE は主にバッチ ファイルでメニュー選択を構築するために使われます。\n" -#: cmd.rc:279 +#: cmd.rc:312 +#, fuzzy +#| msgid "" +#| "EXIT terminates the current command session and returns\n" +#| "to the operating system or shell from which you invoked cmd.\n" msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" "EXIT は現在のコマンドセッションを終了してcmdを呼び出したOSまたはシェルに戻し" "ます。\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10174,110 +10355,110 @@ "上記のコマンドに関する詳細を表示するには HELP <コマンド名> と入力して下さ" "い。\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "よろしいですか?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "Y" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "拡張子 %1 に対するファイル関連付けがありません\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "ファイル タイプ '%1' に関連付けられた開くコマンドがありません\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "上書き %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "続く..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "バッチ処理の行が切り落とされた可能性があります。対象行:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "引数がありません\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "構文エラー\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "%1 に対するヘルプはありません\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "GOTO の対象が見つかりません\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "現在の日付は %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "現在の時刻は %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "新しい日付を入力してください: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "新しい時刻を入力してください: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "環境変数 %1 は定義されていません\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "'%1' を開けません\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "バッチ スクリプトの外からバッチ ラベルを呼び出すことはできません\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "A" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "削除 %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Echo は %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Verify は %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verify は ON か OFF で指定してください\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "パラメータ エラー\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10285,72 +10466,72 @@ "ボリューム シリアル番号は %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "ボリューム ラベル(半角11文字、で無指定)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH が見つかりません\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "続けるには何かキーを押して下さい... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Wine コマンド プロンプト" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "Microsoft Windows %1!S!\n" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "続行? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "入力行が長すぎます。\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "ドライブ %1!c! のボリューム ラベルは %2 です\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "ドライブ %1!c! のボリューム ラベルがありません。\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Yes|No)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Yes|No|All)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "%1 を内部または外部コマンド、バッチ スクリプトとして認識できません。\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "0 による除算エラー。\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "被演算子がありません。\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "演算子がありません。\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "括弧が対応していません。\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11971,7 +12152,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "regsvr32: DLL '%1'のアンインストールに成功しました\n" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -11981,7 +12162,7 @@ "ンが関連付けられていません。\n" "ShellExecuteEx が失敗" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "指定された Unix ファイル名を DOS ファイル名に変換できませんでした。" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/ko.po wine-staging-1.7.47~ubuntu14.10.1/po/ko.po --- wine-staging-1.7.46~ubuntu14.10.1/po/ko.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/ko.po 2015-07-12 05:36:18.000000000 +0000 @@ -9513,7 +9513,7 @@ msgid "Referral hop limit exceeded" msgstr "리퍼럴 홉 제한에 도달했습니다" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9521,7 +9521,7 @@ "아직 구현되지 않았습니다\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1:파일을 찾을 수 없습니다\n" @@ -9602,11 +9602,20 @@ msgstr "시계" #: cmd.rc:40 +#, fuzzy +#| msgid "" +#| "CALL is used within a batch file to execute commands\n" +#| "from another batch file. When the batch file exits, control returns to\n" +#| "the file which called it. The CALL command may supply parameters to the\n" +#| "called procedure.\n" +#| "\n" +#| "Changes to default directory, environment variables etc made within a\n" +#| "called procedure are inherited by the caller.\n" msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" @@ -9619,7 +9628,7 @@ "된\n" "과정에만 적용됩니다.\n" -#: cmd.rc:43 +#: cmd.rc:44 #, fuzzy #| msgid "" #| "CD is the short version of CHDIR. It changes the current\n" @@ -9631,42 +9640,52 @@ "CD <디렉토리> 는 CHDIR의 단축버젼입니다. 현재 기본 디렉토리를\n" "바꿉니다.\n" -#: cmd.rc:44 +#: cmd.rc:47 #, fuzzy #| msgid "CHDIR changes the current default directory.\n" msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR <디렉토리> 는 현재 기본 디렉토리를 바꿉니다.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS는 콘솔 화면을 깨끗하게 합니다.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY <파일이름> 은 파일을 복사합니다.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY 는 입력/출력 장치를 바꿉니다.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE 는 시스템 날짜를 보여주거나 바꿉니다.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL <파일이름> 은 하나의 파일이나 여러 파일을 지웁니다.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR 는 디렉토리의 내용을 보여줍니다.\n" -#: cmd.rc:62 +#: cmd.rc:75 +#, fuzzy +#| msgid "" +#| "ECHO displays on the current terminal device.\n" +#| "\n" +#| "ECHO ON causes all subsequent commands in a batch file to be displayed\n" +#| "on the terminal device before they are executed.\n" +#| "\n" +#| "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" +#| "default). The ECHO OFF command can be prevented from displaying by\n" +#| "preceding it with an @ sign.\n" msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9680,11 +9699,11 @@ "ECHO OFF 는 ECHO ON과 반대의 일을 합니다. (ECHO 는 OFF가 기본)\n" "ECHO OFF 명령은 신호가 진행되는 걸 보여주는걸 막습니다.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE <파일이름>은 하나의 파일이냐 여러 파일을 지웁니다.\n" -#: cmd.rc:71 +#: cmd.rc:85 #, fuzzy #| msgid "" #| "The FOR command is used to execute a command for each of a set of files.\n" @@ -9701,16 +9720,28 @@ "\n" "문법: FOR 변수 IN (set) DO 명령\n" -#: cmd.rc:83 +#: cmd.rc:97 +#, fuzzy +#| msgid "" +#| "The GOTO command transfers execution to another statement within a\n" +#| "batch file.\n" +#| "\n" +#| "The label which is the target of a GOTO may be up to 255 characters\n" +#| "long but may not include spaces (this is different from other operating\n" +#| "systems). If two or more identical labels exist in a batch file the\n" +#| "first one will always be executed. Attempting to GOTO a nonexistent\n" +#| "label terminates the batch file execution.\n" +#| "\n" +#| "GOTO has no effect when used interactively.\n" msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" @@ -9724,7 +9755,7 @@ "\n" "GOTO는 대화식으로 사용될 경우 아무 일도 안합니다.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9732,7 +9763,7 @@ "HELP <명령>은 주제의 간단한 도움말 정보를 보여줍니 다.\n" "아무 매개변수가 없는 HELP눈 CMD의 모든 내장 명령을 보여줍니다.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9752,7 +9783,7 @@ "명령의 두번째 형식에서, string1 과 string2는 반드시 2개의 따옴표로\n" "둘려놓아야 합니다.이 비교는 대소문자를 구분하지 않습니다.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9766,22 +9797,32 @@ "이 명령은 당신이 주어진 드라이브에 새 볼륨 라벨울 넣을수 있도록 할것이다.\n" "VOL 명령으로 디스크 볼륨 라벨을 볼 수 있다.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" "MD <아름> 운 MKDIR의 단축 버젼입니다. 이것은 하위 디렉토리를 만듭니다 .\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR <명령> 운 하위 디렉토리를 만듭니다.\n" -#: cmd.rc:113 +#: cmd.rc:131 +#, fuzzy +#| msgid "" +#| "MOVE relocates a file or directory to a new point within the file " +#| "system.\n" +#| "\n" +#| "If the item being moved is a directory then all the files and " +#| "subdirectories\n" +#| "below the item are moved as well.\n" +#| "\n" +#| "MOVE fails if the old and new locations are on different DOS drive " +#| "letters.\n" msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" @@ -9792,13 +9833,24 @@ "MOVE는 만약 오래되고 새로운 파일이 다른 도스 드라이브 문자를 가지고 있다면\n" "실패합니다.\n" -#: cmd.rc:124 +#: cmd.rc:142 +#, fuzzy +#| msgid "" +#| "PATH displays or changes the cmd search path.\n" +#| "\n" +#| "Entering PATH will display the current PATH setting (initially taken\n" +#| "from the registry). To change the setting follow the\n" +#| "PATH command with the new value.\n" +#| "\n" +#| "It is also possible to modify the PATH by using the PATH environment\n" +#| "variable, for example:\n" +#| "PATH %PATH%;c:\\temp\n" msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9814,19 +9866,49 @@ ",예를 들어:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 +#, fuzzy +#| msgid "" +#| "PAUSE displays a message on the screen asking the user to press a key.\n" +#| "\n" +#| "It is mainly useful in batch files to allow the user to read the output\n" +#| "of a previous command before it scrolls off the screen.\n" msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE 는 사용자가 아무 키나 누르라는 메세지를 화면에 보여줍니다.\n" "\n" "사용자가 화면에서 스크롤 하기 전에 이전 명령의 결과를 읽을 수 있도록\n" "배치파일에서 주로 유용하게 사용합니다.\n" -#: cmd.rc:151 +#: cmd.rc:169 +#, fuzzy +#| msgid "" +#| "PROMPT sets the command-line prompt.\n" +#| "\n" +#| "The string following the PROMPT command (and the space immediately " +#| "after)\n" +#| "appears at the beginning of the line when cmd is waiting for input.\n" +#| "\n" +#| "The following character strings have the special meaning shown:\n" +#| "\n" +#| "$$ Dollar sign $_ Linefeed $b Pipe sign (|)\n" +#| "$d Current date $e Escape $g > sign\n" +#| "$l < sign $n Current drive $p Current path\n" +#| "$q Equal sign $t Current time $v cmd version\n" +#| "\n" +#| "Note that entering the PROMPT command without a prompt-string resets the\n" +#| "prompt to the default, which is the current directory (which includes " +#| "the\n" +#| "current drive letter) followed by a greater-than (>) sign.\n" +#| "(like a command PROMPT $p$g).\n" +#| "\n" +#| "The prompt can also be changed by altering the PROMPT environment " +#| "variable,\n" +#| "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9868,38 +9950,60 @@ "이 프롬프트는 PROMPT 환경 변수 값의 변경에 의해 바뀔 수 있습니다,\n" "그래서 명령 'SET PROMPT=텍스트'는 'PROMPT 텍스트와 같은 일을 합니다.\n" -#: cmd.rc:155 +#: cmd.rc:173 +#, fuzzy +#| msgid "" +#| "A command line beginning with REM (followed by a space) performs no\n" +#| "action, and can therefore be used as a comment in a batch file.\n" msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" "REM으로 시작하는 명령 라인 (공백뒤에 오는) 은 아무일도 안합니다\n" ", 그러므로 배치 파일에서 주석으로 사용됩니다.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" "REN <파일이름> 은 REANME의 단축 버젼입니다.이것은 파일의 이름을 바꿉니" "다.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME <파일이름> 은 파일의 이름을 바꿈.\n" -#: cmd.rc:161 +#: cmd.rc:181 #, fuzzy #| msgid "RD is the short version of RMDIR. It deletes a subdirectory.\n" msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" "RD <디렉토리> 는 RMDIR의 단축버젼입니다. 이것은 하위 디렉토리를 지웁니다.\n" -#: cmd.rc:162 +#: cmd.rc:183 #, fuzzy #| msgid "RMDIR deletes a subdirectory.\n" msgid "RMDIR deletes a directory.\n" msgstr "RMDIR <디렉토리>는 하위 디렉토리를 지움.\n" -#: cmd.rc:206 +#: cmd.rc:229 +#, fuzzy +#| msgid "" +#| "SET displays or changes the cmd environment variables.\n" +#| "\n" +#| "SET without parameters shows all of the current environment.\n" +#| "\n" +#| "To create or modify an environment variable the syntax is:\n" +#| "\n" +#| "SET =\n" +#| "\n" +#| "where and are character strings. There must be no\n" +#| "space before the equals sign, nor can the variable name\n" +#| "have embedded spaces.\n" +#| "\n" +#| "Under Wine, the environment of the underlying operating system is\n" +#| "included into the Win32 environment, there will generally therefore be\n" +#| "many more values than in a native Win32 implementation. Note that it is\n" +#| "not possible to affect the operating system environment from within cmd.\n" msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9909,14 +10013,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET은 cmd 환경 변수 보여주거나 바꿉니다.\n" "\n" @@ -9934,44 +10037,79 @@ "의미합니다. 이것은 cmd안에서 운영체제 환경의 영향을 미치는 것은\n" "가능하지 않다는 것을 기억하시오.\n" -#: cmd.rc:211 -msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +#: cmd.rc:234 +#, fuzzy +#| msgid "" +#| "SHIFT is used in a batch file to remove one parameter from the head of\n" +#| "the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" +#| "if called from the command line.\n" +msgid "" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "SHIFT 는 배치파일에서 매개변수의 첫번째 것을 지우는데 사용한다,\n" "그래서 매개변수 2가 매개변수 1이 된다. 이것은 명령 라인에서 사용했을\n" "경우 아무 일도 안 합니다.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 +#, fuzzy +#| msgid "" +#| "Start a program, or open a document in the program normally used for " +#| "files with that suffix.\n" +#| "Usage:\n" +#| "start [options] program_filename [...]\n" +#| "start [options] document_filename\n" +#| "\n" +#| "Options:\n" +#| "\"title\" Specifies the title of the child windows.\n" +#| "/d directory Start the program in the specified directory.\n" +#| "/b Don't create a new console for the program.\n" +#| "/i Start the program with fresh environment variables.\n" +#| "/min Start the program minimized.\n" +#| "/max Start the program maximized.\n" +#| "/low Start the program in the idle priority class.\n" +#| "/normal Start the program in the normal priority class.\n" +#| "/high Start the program in the high priority class.\n" +#| "/realtime Start the program in the realtime priority class.\n" +#| "/abovenormal Start the program in the abovenormal priority class.\n" +#| "/belownormal Start the program in the belownormal priority class.\n" +#| "/node n Start the program on the specified NUMA node.\n" +#| "/affinity mask Start the program with the specified affinity mask.\n" +#| "/wait Wait for the started program to finish, then exit with its " +#| "exit code.\n" +#| "/unix Use a Unix filename and start the file like windows " +#| "explorer.\n" +#| "/ProgIDOpen Open a document using the specified progID.\n" +#| "/? Display this help and exit.\n" msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" "프로그램을 시작하거나, 파일 확장자에서 보통 사용하는 프로그램으로 문서를 엽니" "다\n" @@ -10001,23 +10139,27 @@ "/ProgIDOpen 지정한 progID를 사용해서 문서를 엽니다.\n" "/? 도움말을 보여주고 끝냅니다.\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME 은 현재 시스템 시간을 보여 줍니다.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE <문자열>은 cmd창의 창 제목을 설정합니다.\n" -#: cmd.rc:219 +#: cmd.rc:244 +#, fuzzy +#| msgid "" +#| "TYPE copies to the console device (or elsewhere\n" +#| "if redirected). No check is made that the file is readable text.\n" msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" "TYPE <파일이름> <파일 이름>를 콘솔 장치로 복사 (만약 방향이 재정의 된다면\n" "어디나). 아무 오류가 없으면 그 파일을 읽을 수 있는 텍스트입니다.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10036,23 +10178,27 @@ "\n" "이 검증 플래그는 Wine에서는 아무 기능을 안함.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER 당신이 실행시킨 cmd 버젼 보여줌.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL 은 디스크 장치의 볼륨 라벨을 보여줍니다.\n" -#: cmd.rc:237 +#: cmd.rc:263 +#, fuzzy +#| msgid "" +#| "ENDLOCAL ends localization of environment changes in a batch file\n" +#| "which were introduced by a preceding SETLOCAL.\n" msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" "ENDLOCAL은 배치파일에서 바꾼 지역 환경변수를 끝냅니다\n" "이것은 이전의 SETLOCAL로 시작되었습니다.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10067,23 +10213,33 @@ "다음 ENDLOCAL이 나올 때까지만 보존되고(아니면 파일의 끝이든지,\n" "어느 똑이든 먼저 오는 지점이),이전의 환경 설정이 복원되는 지정입니다.\n" -#: cmd.rc:248 +#: cmd.rc:275 #, fuzzy #| msgid "" #| "PUSHD saves the current directory onto a\n" #| "stack, and then changes the current directory to the supplied one.\n" msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" "PUSHD <디렉토리 이름> 은 현재 디렉토리를 스택에 저장한다.\n" "그리고 현재 디렉토리를 요청한 디렉토리로 바꾼다.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD는 현재 디렉토리를 PUSH로 마지막으로 저장했던 것으로 바꿉니다.\n" -#: cmd.rc:258 +#: cmd.rc:288 +#, fuzzy +#| msgid "" +#| "ASSOC shows or modifies file extension associations.\n" +#| "\n" +#| "Syntax: ASSOC [.ext[=[fileType]]]\n" +#| "\n" +#| "ASSOC without parameters displays current file associations.\n" +#| "If used with only a file extension, displays the current association.\n" +#| "Specifying no file type after the equal sign removes the current " +#| "association, if any.\n" msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10091,7 +10247,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC는 파일 확장자 연결을 보여주거나 고칩니다.\n" @@ -10103,17 +10259,29 @@ "등호(=) 다음에 파일 종류가 지정되지 않으면 현재 연결상태에 가능한 것을 제거합" "니다.\n" -#: cmd.rc:269 +#: cmd.rc:300 +#, fuzzy +#| msgid "" +#| "FTYPE shows or modifies open commands associated with file types.\n" +#| "\n" +#| "Syntax: FTYPE [fileType[=[openCommand]]]\n" +#| "\n" +#| "Without parameters, shows the file types for which open command strings " +#| "are currently defined.\n" +#| "If used with only a file type, displays the associated open command " +#| "string, if any.\n" +#| "Specifying no open command after the equal sign removes the command " +#| "string associated to the specified file type.\n" msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE은 파일 형식과 관련한 열기 명령을 보여주거나 고침\n" @@ -10126,30 +10294,39 @@ "등호(=) 다음에 열기 명령이 지정되지 않으면 지정된 파일 형식에 연결된 명령어 " "문자열을 제거 합니다.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" "MORE는 파일 출력을 보여주거나 페이지의 파이프로도 된 입력을 보여준다.\n" -#: cmd.rc:275 +#: cmd.rc:308 +#, fuzzy +#| msgid "" +#| "CHOICE displays a text and waits, until the User\n" +#| "presses an allowed Key from a selectable list.\n" +#| "CHOICE is mainly used to build a menu selection in a batch file.\n" msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" "CHOICE는 텍스트를 보여주고, 사용자가 선택된 목록에서\n" "허용하는 키를 누를 때까지 기다립니다.\n" "CHOICE는 주로 배치 파일에서 메뉴 선택을 넣는 데 사용됩니다.\n" -#: cmd.rc:279 +#: cmd.rc:312 +#, fuzzy +#| msgid "" +#| "EXIT terminates the current command session and returns\n" +#| "to the operating system or shell from which you invoked cmd.\n" msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" "EXIT는 현재 명령 세션을 중단시키고 운영체제로 돌아가거나 cmd를\n" "호출한 셀로 돌아갑니다.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10229,110 +10406,110 @@ "\n" "HELP <명령>을 치면 그 명령의 상세한 정보를 보여줍니다.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "당신은 확신합니까?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "예" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "아니오" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "이 파일확장자 %1에 연결된 풀그림이 없습니다\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "이 파일 형식 '%1'과 연결된 어떠한 명령도 없습니다'\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "%1을(를) 덮어쓰겠습니까?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "더 많이..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "배치 작업의 줄은 아마도 불완전한 것 같습니다. 사용법:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "인수가 없습니다\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "문법 오류\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "%1를 위한 어떠한 도움말도 찾을 수 없습니다\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "GOTO 타겟을 찾을 수 없습니다\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "현재 날짜는 %1임\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "현재 시간은 %1임\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "새 날짜 입력: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "새 시간 입력: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "환경 변수 %1 는 정의되지 않았습니다\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "'%1' 열기 실패\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "배치 스크립트 밖의 배치 라벨은 불러올수 없습니다\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "모두" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "%1을(를) 지우겠습니까?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "에코(Echo)는 %1임\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "검증(Verify)은 %1임\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "검증(Verify)은 반드시 ON 이나 OFF가 되어야 합니다\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "매개변수 오류\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10340,72 +10517,72 @@ "볼륨 시리얼 번호는 %1!04x!-%2!04x!임\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "볼륨 라벨 (11 글자, ENTER는 없음과 같음)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH를 찾을 수 없습니다\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "아무 키나 누르면 진행함... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Wine 명령 프롬프트" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "더? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "이 출력 줄은 너무 깁니다.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "드라이브 %1!c!의 볼륨은 %2임\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "드라이브 %1!c!는 라벨을 가지고 있지 않습니다.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr "(예(Y)|아니오(N))" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr "(예(Y)|아니오(N)|모두(A))" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "'%1'을 내부나 외부 명령어,나 배치 스크립트로 인식할 수 없습니다.\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "0으로 나눈 에러가 발생했습니다.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "피연산자가 요구됩니다.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "연산자가 요구됩니다.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "괄호가 일치하지 않습니다.\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12016,7 +12193,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12025,7 +12202,7 @@ "프로그램을 실행할 수 없거나, 지정된 파일에 연결된 프로그램이 없습니다.\n" "ShellExecuteEx 실패" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "지정된 Unix 파일명을 DOS 파일명으로 바꿀 수 없습니다." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/lt.po wine-staging-1.7.47~ubuntu14.10.1/po/lt.po --- wine-staging-1.7.46~ubuntu14.10.1/po/lt.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/lt.po 2015-07-12 05:36:18.000000000 +0000 @@ -9473,7 +9473,7 @@ msgid "Referral hop limit exceeded" msgstr "Viršyta perdavimo šuolių riba" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9481,7 +9481,7 @@ "Dar nerealizuota\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: failas nerastas\n" @@ -9563,64 +9563,64 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -"CALL naudojama komandų failo viduje komandoms iš\n" -"kito komandų failo vykdyti. Kai komandų failas egzistuoja, valdymas\n" -"grąžinamas kvietusiam failui. CALL komanda gali pateikti parametrus\n" -"kviečiamai procedūrai.\n" +"CALL naudojama komandų failo viduje komandoms iš kito\n" +"komandų failo vykdyti. Kai komandų failas egzistuoja, valdymas grąžinamas\n" +"kvietusiam failui. CALL komanda gali pateikti parametrus kviečiamai\n" +"procedūrai.\n" "\n" "Numatytojo katalogo, aplinkos kintamųjų ir pan. pakeitimai atlikti\n" "iškviestoje procedūroje paveldimi kviečiančiosios procedūros.\n" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -"CD yra trumpa CHDIR versija. Pakeičia dabartinį\n" -"numatytąjį katalogą.\n" +"CD yra trumpa CHDIR versija. Pakeičia dabartinį numatytąjį " +"katalogą.\n" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR pakeičia dabartinį numatytąjį katalogą.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS išvalo pulto ekraną.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY kopijuoja failą.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY pakeičia įvedimo/išvedimo įrenginį.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE parodo arba pakeičia sistemos datą.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL pašalina failą ar failų rinkinį.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR parodo katalogo turinį.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9635,11 +9635,11 @@ "numatyta). ECHO OFF komandos rodymo galima išvengti prieš ją pridedant\n" "simbolį @.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE pašalina failą ar failų rinkinį.\n" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9653,30 +9653,30 @@ "\n" "Simbolis % privalo būti dubliuotas, kai FOR naudojamas komandų faile.\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" "GOTO komanda nukreipia vykdymą į kitą sakinį komandų faile.\n" "\n" -"Žymė, kuri yra GOTO komandos tikslas, gali būti 255 simbolių ilgio,\n" -"bet be tarpų (tai skiriasi nuo kitų operacinių sistemų). Jei komandų\n" -"faile egzistuoja dvi ar daugiau identiškos žymės, visuomet bus vykdoma\n" -"pirmoji. Mėginimas nukreipti vykdymą į neegzistuojančią žymę nutraukia\n" -"komandų failo vykdymą.\n" +"Žymė, kuri yra GOTO komandos tikslas, gali būti 255 simbolių ilgio, bet be\n" +"tarpų (tai skiriasi nuo kitų operacinių sistemų). Jei komandų faile\n" +"egzistuoja dvi ar daugiau identiškos žymės, visuomet bus vykdoma pirmoji.\n" +"Mėginimas nukreipti vykdymą į neegzistuojančią žymę nutraukia komandų failo\n" +"vykdymą.\n" "\n" "GOTO neturi poveikio naudojant interaktyviai.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9684,7 +9684,7 @@ "HELP parodo trumpą informaciją apie komandą.\n" "HELP be argumentų parodo visas įtaisytas CMD komandas.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9704,7 +9704,7 @@ "Antroje komandos formoje, eilutė1 ir eilutė2 privalo būti tarp dvigubų\n" "kabučių. Palyginimas neskiria didžiųjų ir mažųjų raidžių.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9718,21 +9718,20 @@ "Komanda paklaus naujo tomo vardo duotam diskui.\n" "Parodyti disko tomo vardą galima su komanda VOL.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD yra trumpa MKDIR versija. Sukuria katalogą.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR sukuria katalogą.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" @@ -9744,13 +9743,13 @@ "MOVE nepavyksta, jei sena ir nauja vietos yra su skirtingais DOS disko " "vardais.\n" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9758,28 +9757,28 @@ msgstr "" "PATH parodo ar pakeičia paieškos kelią.\n" "\n" -"Įvedus PATH bus parodyta dabartinė PATH reikšmė (iš pradžių reikšmė\n" -"paimama iš registro). Norėdami pakeisti nuostatą nurodykite PATH\n" -"komandai naują reikšmę kaip parametrą.\n" +"Įvedus PATH bus parodyta dabartinė PATH reikšmė (iš pradžių reikšmė paimama\n" +"iš registro). Norėdami pakeisti nuostatą nurodykite PATH komandai naują\n" +"reikšmę kaip parametrą.\n" "\n" "PATH modifikuoti taip pat galima naudojant PATH aplinkos kintamąjį,\n" "pavyzdžiui:\n" "PATH %PATH%;c:\\laikinas\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE ekrane parodo pranešimą, kuriuo prašo naudotojo paspausti klavišą.\n" "\n" -"Ši komanda naudingiausia komandų failuose, kad leistų naudotojui " -"perskaityti\n" -"ankstesnės komandos rezultatą kol jis nepasislinko už ekrano ribų.\n" +"Ši komanda naudingiausia komandų failuose, kad leistų naudotojui\n" +"perskaityti ankstesnės komandos rezultatą kol jis nepasislinko už ekrano\n" +"ribų.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9820,34 +9819,34 @@ "(Taip pat, kaip komanda PROMPT $p$g).\n" "\n" "Raginimas taip pat gali būti pakeistas keičiant PROMPT aplinkos kintamąjį,\n" -"taigi, komanda „SET PROMPT=tekstas“ turi tą patį efektą kaip „PROMPT " -"tekstas“.\n" +"taigi, komanda „SET PROMPT=tekstas“ turi tą patį efektą kaip\n" +"„PROMPT tekstas“.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -"Komandos eilutė prasidedanti REM (ir tarpu) neatlieka jokio veiksmo\n" -"ir todėl gali būti naudojama kaip komentaras komandų faile.\n" +"Komandos eilutė prasidedanti REM (ir tarpu) neatlieka jokio veiksmo ir\n" +"todėl gali būti naudojama kaip komentaras komandų faile.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "REN yra trumpa RENAME versija. Pervadina failą.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME pervadina failą.\n" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD yra trumpa RMDIR versija. Pašalina katalogą.\n" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "RMDIR pašalina katalogą.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9857,14 +9856,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET parodo ar pakeičia cmd aplinkos kintamuosius.\n" "\n" @@ -9882,90 +9880,91 @@ "Win32 realizacijoje. Pastebėkite, kad neįmanoma įtakoti operacinės sistemos\n" "aplinkos iš komandų interpretatoriaus.\n" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "SHIFT naudojama komandų faile pašalinti vienam parametrui iš sąrašo\n" "priekio, taip parametras 2 tampa parametru 1 ir t. t. Ši komanda neturi\n" "jokio poveikio, kai kviečiama iš komandos eilutės.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -"Paleisti programą ar atverti dokumentą programoje, paprastai naudojamoje " +"Paleisti programą ar atverti dokumentą programoje, paprastai naudojamoje\n" "failams su tuo prievardžiu.\n" "Naudojimas:\n" "start [parametrai] programos_failo_vardas [...]\n" "start [parametrai] dokumento_failo_vardas\n" "\n" "Parametrai:\n" -"\"antraštė\" Nustato polangių pavadinimą.\n" -"/d katalogas Paleisti programą nurodytame kataloge.\n" -"/b Nesukurti naujo pulto programai.\n" -"/i Paleisti programą su šviežiais aplinkos kintamaisiais.\n" -"/min Paleisti programą suskleistą.\n" -"/max Paleisti programą išskleistą.\n" -"/low Paleisti programą neveikos prioriteto klasėje.\n" -"/normal Paleisti programą normalioje prioriteto klasėje.\n" -"/high Paleisti programą aukštoje prioriteto klasėje.\n" -"/realtime Paleisti programą tikralaikėje prioriteto klasėje.\n" -"/abovenormal Paleisti programą prioriteto klasėje virš normalios.\n" -"/belownormal Paleisti programą prioriteto klasėje žemiau normalios.\n" -"/node n Paleisti programą nurodytame NUMA mazge.\n" +"\"antraštė\" Nustato polangių pavadinimą.\n" +"/d katalogas Paleisti programą nurodytame kataloge.\n" +"/b Nesukurti naujo pulto programai.\n" +"/i Paleisti programą su šviežiais aplinkos kintamaisiais.\n" +"/min Paleisti programą suskleistą.\n" +"/max Paleisti programą išskleistą.\n" +"/low Paleisti programą neveikos prioriteto klasėje.\n" +"/normal Paleisti programą normalioje prioriteto klasėje.\n" +"/high Paleisti programą aukštoje prioriteto klasėje.\n" +"/realtime Paleisti programą tikralaikėje prioriteto klasėje.\n" +"/abovenormal Paleisti programą prioriteto klasėje virš normalios.\n" +"/belownormal Paleisti programą prioriteto klasėje žemiau normalios.\n" +"/node n Paleisti programą nurodytame NUMA mazge.\n" "/affinity mask Paleisti programą su nurodyta atitikimo kauke.\n" -"/wait Laukti kol paleista programa baigs darbą, tada išeiti su jos " -"išėjimo kodu.\n" -"/unix Naudoti Unix failo vardą ir paleisti failą kaip „windows“ " -"naršyklėje.\n" -"/ProgIDOpen Atverti dokumentą naudojant nurodytą progID.\n" -"/? Parodyti šį pranešimą ir išeiti.\n" +"/wait Laukti kol paleista programa baigs darbą, tada išeiti su jos\n" +" išėjimo kodu.\n" +"/unix Naudoti Unix failo vardą ir paleisti failą kaip „windows“\n" +" naršyklėje.\n" +"/ProgIDOpen Atverti dokumentą naudojant nurodytą progID.\n" +"/? Parodyti šį pranešimą ir išeiti.\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME parodo arba nustato sistemos laiką.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE nustato cmd lango antraštę.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" "TYPE nukopijuoja į pulto įrenginį (arba kitur, jei\n" "nukreipta). Nėra tikrinama, ar faile yra skaitomas tekstas.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9984,23 +9983,23 @@ "\n" "Tikrinimo žymos bitas neturi jokios funkcijos „Wine“.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER parodo dabar vykdomo cmd versiją.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL parodo disko įrenginio tomo vardą.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -"ENDLOCAL komandų faile baigia aplinkos pakeitimų, kurie padaryti\n" -"ankstesnio SETLOCAL, lokalizavimą.\n" +"ENDLOCAL komandų faile baigia aplinkos pakeitimų, kurie padaryti ankstesnio\n" +"SETLOCAL, lokalizavimą.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10015,19 +10014,19 @@ "išlaikomi iki kol sutinkamas kitas ENDLOCAL (arba failo pabaiga, kas\n" "pasitaiko pirmiau), tada atkuriami ankstesnės aplinkos nustatymai.\n" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -"PUSHD išsaugo dabartinį katalogą į dėklą,\n" -"o po to pakeičia dabartinį katalogą į nurodytą.\n" +"PUSHD išsaugo dabartinį katalogą į dėklą, o po to pakeičia\n" +"dabartinį katalogą į nurodytą.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD pakeičia dabartinį katalogą į paskutinį išsaugotą su PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10035,7 +10034,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC parodo ar modifikuoja failų prievardžių sąsajas.\n" @@ -10047,53 +10046,53 @@ "Po lygybės ženklo nenurodžius failo tipo pašalina dabartinę sąsają, jei " "yra.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE parodo ar modifikuoja atvėrimo komandas susietas su failų tipais.\n" "\n" "Sintaksė: FTYPE [failoTipas[=[atvėrimoKomanda]]]\n" "\n" -"Be parametrų parodo failų tipus, kuriems apibrėžtos atvėrimo komandų " +"Be parametrų parodo failų tipus, kuriems apibrėžtos atvėrimo komandų\n" "eilutės.\n" -"Jei naudojama tik su failų tipu, parodo susietą atvėrimo komandos eilutę, " +"Jei naudojama tik su failų tipu, parodo susietą atvėrimo komandos eilutę,\n" "jei yra.\n" -"Po lygybės ženklo nenurodžius atvėrimo komandos pašalina su nurodytu failo " +"Po lygybės ženklo nenurodžius atvėrimo komandos pašalina su nurodytu failo\n" "tipu susietą komandos eilutę.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE parodo failo išvedimą ar kanalo įvedimą puslapiais.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE parodo tekstą ir laukia, kol naudotojas\n" -"paspaus leidžiamą klavišą iš pasirinkimų sąrašo.\n" +"CHOICE parodo tekstą ir laukia, kol naudotojas paspaus leidžiamą klavišą iš\n" +"pasirinkimų sąrašo.\n" "CHOICE dažniausiai naudojama pasirinkimo meniu konstravimui komandų faile.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT baigia dabartinį komandų seansą ir grįžta į operacinę sistemą\n" -"ar apvalkalą iš kur CMD iškviestas.\n" +"EXIT baigia dabartinį komandų seansą ir grįžta į operacinę sistemą ar\n" +"apvalkalą iš kur CMD iškviestas.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10174,110 +10173,110 @@ "Įveskite HELP platesnei informacijai apie išvardintas komandas " "gauti.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Ar tikrai?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "T" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Trūksta failo susiejimo prievardžiui %1\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Jokia atvėrimo komanda nesusieta su failo tipu „%1“\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Perrašyti %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Daugiau..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "Paketinio apdorojimo eilutė galimai nukirsta. Naudojama:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Trūksta argumento\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Sintaksės klaida\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Nėra informacijos apie %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "GOTO tikslas nerastas\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Dabartinė data yra %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Dabartinis laikas yra %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Įveskite naują datą: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Įveskite naują laiką: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Aplinkos kintamasis %1 neapibrėžtas\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Nepavyko atverti „%1“\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Negalima iškviesti žymės esančios už komandų failo ribų\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "V" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Šalinti %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "„Echo“ yra %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "„Verify“ yra %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "VERIFY turi būti ON arba OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Parametro klaida\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10285,74 +10284,74 @@ "Tomo serijos numeris yra %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Tomo vardas (11 simbolių, <Įvesti> – bevardis)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "KELIAS nerastas\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Norėdami tęsti spauskite bet kurį klavišą... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "„Wine“ komandų interpretatorius" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "Microsoft Windows %1!S!\n" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Daugiau? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "Įvedimo eilutė per ilga.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "Tomas diske %1!c! yra %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "Tomas diske %1!c! neturi vardo.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Taip|Ne)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Taip|Ne|Visus)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" "Nepavyko atpažinti „%1“ kaip vidinės ar išorinės komandos, ar komandų " "failo.\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "Dalybos iš nulio klaida.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "Tikėtasi operando.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "Tikėtasi operacijos ženklo.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "Skliaustų neatitiktis.\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11974,7 +11973,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "regsvr32: Sėkmingai pašalinta DLL biblioteka „%1“\n" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -11983,7 +11982,7 @@ "Nepavyko paleisti programos arba nėra programos susietos su nurodytu failu.\n" "ShellExecuteEx nepavyko" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" "Nepavyko paversti nurodyto Unix failo pavadinimo į DOS failo pavadinimą." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/ml.po wine-staging-1.7.47~ubuntu14.10.1/po/ml.po --- wine-staging-1.7.46~ubuntu14.10.1/po/ml.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/ml.po 2015-07-12 05:36:18.000000000 +0000 @@ -9202,13 +9202,13 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" msgstr "" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "" @@ -9273,66 +9273,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9341,27 +9341,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9373,7 +9373,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9382,47 +9382,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9445,29 +9444,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9477,68 +9476,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9549,21 +9548,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9573,17 +9572,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9591,42 +9590,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -9668,181 +9667,181 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr "" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr "" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11406,14 +11405,14 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" "ShellExecuteEx failed" msgstr "" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/nb_NO.po wine-staging-1.7.47~ubuntu14.10.1/po/nb_NO.po --- wine-staging-1.7.46~ubuntu14.10.1/po/nb_NO.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/nb_NO.po 2015-07-12 05:36:18.000000000 +0000 @@ -9541,7 +9541,7 @@ msgid "Referral hop limit exceeded" msgstr "Grense for henvisningshopp overskredet" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9549,7 +9549,7 @@ "Ikke implementert ennå\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: fant ikke filen\n" @@ -9631,64 +9631,63 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -"«CALL » brukes i en satsvis fil for å utføre kommandoer\n" -"fra en annen satsvis fil. Når den satsvise filen avslutter, returneres\n" -"kontrollen til filen som kalte den. CALL-kommandoen kan gi parametere\n" -"til den kalte prosedyren.\n" +"«CALL » brukes i en satsvis fil for å utføre kommandoer fra\n" +"en annen satsvis fil. Når den satsvise filen avslutter, returneres\n" +"kontrollen til filen som kalte den. CALL-kommandoen kan gi parametere til\n" +"den kalte prosedyren.\n" "\n" "Endringer til standardkatalogen, miljøvariabler etc. gjort av den kalte\n" "prosedyren arves av påkalleren.\n" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -"CD er den korte versjonen av CHDIR. Den endrer\n" -"arbeidskatalogen.\n" +"CD er den korte versjonen av CHDIR. Den endrer arbeidskatalogen.\n" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR endrer arbeidskatalogen.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS tømmer konsollskjermen.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY kopierer en fil.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY endrer inn/ut-enhet.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE viser eller endrer systemets dato.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL fjerner én eller flere filer.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR viser innholdet i en katalog.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9703,11 +9702,11 @@ "standard). «ECHO OFF»-kommandoen kan hindres fra å vises ved å plassere\n" "et @-tegn foran den.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE sletter én eller flere filer.\n" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9721,30 +9720,30 @@ "\n" "%-tegnet må være dobbelt hvis FOR brukes i en satsvis (.bat) fil.\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" "GOTO-kommandoen flytter kjøringen til et annet sted i en satsvis fil.\n" "\n" -"Merkelappen som er målet til GOTO kan være opptil 255 tegn langt,\n" -"men kan ikke inneholde mellomrom (dette er forskjellig fra andre\n" -"operativsystemer). Hvis det finnes to eller flere identiske merkelapper\n" -"i en satsvis fil, kjøres alltid den første. Å peke GOTO til en ikke-\n" -"eksisterende merkelapp avbryter kjøringen av den satsvise filen.\n" +"Merkelappen som er målet til GOTO kan være opptil 255 tegn langt, men kan\n" +"ikke inneholde mellomrom (dette er forskjellig fra andre operativsystemer).\n" +"Hvis det finnes to eller flere identiske merkelapper i en satsvis fil,\n" +"kjøres alltid den første. Å peke GOTO til en ikke-eksisterende merkelapp\n" +"avbryter kjøringen av den satsvise filen.\n" "\n" "GOTO har ingen effekt når den brukes interaktivt.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9752,7 +9751,7 @@ "HELP viser en kort hjelpetekst for et emne.\n" "HELP uten noen argumenter viser alle innebygde kommandoer.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9772,7 +9771,7 @@ "I kommandoform nummer to må streng1 og streng2 omsluttes av doble\n" "anførselstegn. Det skilles ikke mellom store og små bokstaver.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9786,22 +9785,21 @@ "Kommandoen vil be om det nye volumnavnet for stasjonen.\n" "Du kan vise en stasjons volumnavn med VOL-kommandoen.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" "MD er en korte versjonen av MKDIR. Den oprretter en underkatalog.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR oppretter en underkatalog.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" @@ -9813,13 +9811,14 @@ "MOVE feiler hvis den gamle og nye plasseringen har forskjellige\n" "stasjonsbokstaver.\n" -#: cmd.rc:124 +#: cmd.rc:142 +#, fuzzy msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9827,27 +9826,27 @@ msgstr "" "PATH viser eller endrer CMDs søkesti.\n" "\n" -"Å skrive inn PATH viser den gjeldende PATH-innstillingen (dette er\n" -"i begynnelsen verdien oppgitt i filen «wine.conf»). Etterfølg PATH-\n" -"kommandoen med et nytt navn for å endre innstillingen.\n" +"Å skrive inn PATH viser den gjeldende PATH-innstillingen (dette er i\n" +"begynnelsen verdien oppgitt i filen «wine.conf»). Etterfølg PATH-kommandoen\n" +"med et nytt navn for å endre innstillingen.\n" "\n" -"Det er også mulig å endre PATH ved å bruke miljøvariablen PATH, for\n" +"Det er også mulig å endre PATH ved å bruke miljøvariablen PATH, for " "eksempel:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE viser en melding på skjermen hvor brukeren bes om å trykke en tast.\n" "\n" -"Den er hovedsakelig nyttig i satsvise (.bat) filer, for å la brukeren\n" -"lese utdata fra en tidligere kommando før det ruller bort fra skjermen.\n" +"Den er hovedsakelig nyttig i satsvise (.bat) filer, for å la brukeren lese\n" +"utdata fra en tidligere kommando før det ruller bort fra skjermen.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9889,35 +9888,34 @@ "Klartegnet kan også endres ved å endre miljøvariabelen PROMPT, så\n" "kommandoen «SET PROMPT=tekst» har samme effekt som «PROMPT tekst».\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -"En kommandolinje som begynner med REM (etterfulgt av et mellomrom)\n" -"utfører ingen handling, og kan derfor brukes som kommentar i en satsvis\n" -"fil.\n" +"En kommandolinje som begynner med REM (etterfulgt av et mellomrom) utfører\n" +"ingen handling, og kan derfor brukes som kommentar i en satsvis fil.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" "REN er den korte versjonen av RENAME. Den gir nytt navn til en " "fil.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME gir nytt navn til en fil.\n" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" "RD er den korte versjonen av RMDIR. Den sletter en katalog.\n" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "RMDIR sletter en katalog.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9927,14 +9925,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET viser eller endrer miljøvariablene i cmd.\n" "\n" @@ -9944,99 +9941,99 @@ "\n" "SET =\n" "\n" -"hvor og er tegnstrenger. Det må ikke være mellomrom\n" -"før likhetstegnet, og variabelnavnet kan heller ikke inneholde\n" -"mellomrom.\n" -"\n" -"I Wine er miljøvariablene i det underliggende operativsystemet\n" -"inkludert i Win32-miljøet, og det er derfor vanligvis mange flere\n" -"verdier enn i et vanlig Win32-miljø. Vær oppmerksom på at det ikke går\n" -"an å endre mijøet i det underliggende operativsystemet fra cmd.\n" - -#: cmd.rc:211 -msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"hvor og er tegnstrenger. Det må ikke være mellomrom før\n" +"likhetstegnet, og variabelnavnet kan heller ikke inneholde mellomrom.\n" +"\n" +"I Wine er miljøvariablene i det underliggende operativsystemet inkludert i\n" +"Win32-miljøet, og det er derfor vanligvis mange flere verdier enn i et\n" +"vanlig Win32-miljø. Vær oppmerksom på at det ikke går an å endre mijøet i\n" +"det underliggende operativsystemet fra cmd.\n" + +#: cmd.rc:234 +msgid "" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "SHIFT bruker i en satsvis fil for å fjerne den første parameteren i en\n" "liste, sånn at parameter 2 blir parameter 1 og så videre. Det har ingen\n" "effekt hvis det brukes fra kommandolinjen.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -"Starter et program eller åpner et dokument i programmet som er assosiert med " -"filtypen.\n" +"Starter et program eller åpner et dokument i programmet som er assosiert\n" +"med filtypen.\n" "Bruk:\n" "start [alternativer] program_filnavn [...]\n" "start [alternativer] dokument_filnavn\n" "\n" "Alternativer:\n" -"\"tittel\" Angir tittelen for vinduet.\n" -"/d katalog Start programmet i angitt katalog.\n" -"/b Ikke opprett en ny konsoll for programmet.\n" -"/i Start programmet med nye miljøvariabler.\n" -"/min Start programmet minimert.\n" -"/max Start programmet maksimert.\n" -"/low Start programmet i prioritetklassen «ledig».\n" -"/normal Start programmet i prioritetklassen «normal».\n" -"/high Start programmet i prioritetklassen «høy».\n" -"/realtime Start programmet i prioritetklassen «samtid».\n" -"/abovenormal Start programmet i prioritetklassen «overnormal».\n" -"/belownormal Start programmet i prioritetklassen «undernormal».\n" -"/node n Start programmet på angitt NUMA-node.\n" +"\"tittel\" Angir tittelen for vinduet.\n" +"/d katalog Start programmet i angitt katalog.\n" +"/b Ikke opprett en ny konsoll for programmet.\n" +"/i Start programmet med nye miljøvariabler.\n" +"/min Start programmet minimert.\n" +"/max Start programmet maksimert.\n" +"/low Start programmet i prioritetklassen «ledig».\n" +"/normal Start programmet i prioritetklassen «normal».\n" +"/high Start programmet i prioritetklassen «høy».\n" +"/realtime Start programmet i prioritetklassen «samtid».\n" +"/abovenormal Start programmet i prioritetklassen «overnormal».\n" +"/belownormal Start programmet i prioritetklassen «undernormal».\n" +"/node n Start programmet på angitt NUMA-node.\n" "/affinity maske Start programmet med angitt affinitet-maske.\n" -"/wait Vent til programmet er ferdig og avslutt med dets " -"avslutningskode.\n" -"/unix Bruk et Unix-filnavn og start filen som i Windows Utforsker.\n" -"/ProgIDOpen Åpne et dokument med angitt progID.\n" -"/? Vis denne hjelpeteksten og avslutt.\n" +"/wait Vent til programmet er ferdig og avslutt med\n" +" dets avslutningskode.\n" +"/unix Bruk et Unix-filnavn og start filen som i Windows\n" +" Utforsker.\n" +"/ProgIDOpen Åpne et dokument med angitt progID.\n" +"/? Vis denne hjelpeteksten og avslutt.\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME angir eller viser systemets tid.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE angir tittelen for cmd-vinduet.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -"«TYPE » kopierer til konsollenheten (eller et annet\n" -"sted hvis det omdirigeres). Det kontrolleres ikke om filen er leselig " -"tekst.\n" +"«TYPE » kopierer til konsollenheten (eller et annet sted\n" +"hvis det omdirigeres). Det kontrolleres ikke om filen er leselig tekst.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10055,23 +10052,23 @@ "\n" "«Verify»-flagget har ingen funksjon i Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER viser versjonnummeret til cmd.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL viser volumnavnet for en diskenhet.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" "ENDLOCAL avslutter lokalisering av endringer i miljøet i statsvise filer,\n" "hvor lokaliseringen tidligere ble startet med SETLOCAL.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10082,25 +10079,24 @@ msgstr "" "SETLOCAL starter lokalisering av miljøendringer i en satsvis fil.\n" "\n" -"Endringer i miljøet som gjøres etter SETLOCAL gjelder kun i den satsvise " -"filen og\n" -"beholdes helt til ENDLOCAL kalles (eller ved slutten av filen, hvis ENDLOCAL " -"ikke \n" -"oppgis). Etter ENDLOCAL gjenopprettes det opprinnelige miljøet.\n" +"Endringer i miljøet som gjøres etter SETLOCAL gjelder kun i den satsvise\n" +"filen og beholdes helt til ENDLOCAL kalles (eller ved slutten av filen,\n" +"hvis ENDLOCAL ikke oppgis). Etter ENDLOCAL gjenopprettes det opprinnelige\n" +"miljøet.\n" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -"PUSHD lagrer arbeidskatalogen i en stabel, og endrer\n" -"deretter arbeidskatalog til den som er oppgitt.\n" +"PUSHD lagrer arbeidskatalogen i en stabel, og endrer deretter\n" +"arbeidskatalog til den som er oppgitt.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD endrer arbeidskatalog til den som sist ble angitt med PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10108,7 +10104,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC viser eller endrer assosiasjoner for filetternavn.\n" @@ -10117,20 +10113,20 @@ "\n" "ASSOC uten parametre viser gjeldende filassosiasjoner.\n" "Hvis kun et filetternavn oppgis vises gjeldende assosiasjon.\n" -"Hvis ingen filtype oppgis etter likhetstegnet fjernes gjeldende\n" +"Hvis ingen filtype oppgis etter likhetstegnet fjernes gjeldende " "assosiasjon.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE viser eller endrer åpne-kommandoer assosiert med filtyper.\n" @@ -10142,29 +10138,29 @@ "Hvis ingen åpne-kommando angis etter likhetstegnet fjernes den tilordnede\n" "åpne-kommandoen.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE lar deg bla gjennom innholdet i filer eller inndata i rør.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE viser en tekst og venter til brukeren har\n" -"trykket på en av de valgte knappene.\n" +"CHOICE viser en tekst og venter til brukeren har trykket på en av de valgte\n" +"knappene.\n" "CHOICE brukes for det meste til å lage menyer i satsvise filer.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" "EXIT avslutter gjeldende kommandoøkt og returnerer til operativsystemet\n" "eller skallet CMD ble startet fra.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10217,8 +10213,8 @@ "DEL (ERASE)\tSletter én eller flere filer\n" "DIR\t\tViser innholdet i en katalgo\n" "ECHO\t\tKopierer tekst direkte til konsoll-utdataen\n" -"ENDLOCAL\tStopper lokalisering av endringer i miljøvariabler i en satsvis " -"fil\n" +"ENDLOCAL\tStopper lokalisering av endringer i miljøvariabler i en satsvis\n" +"\t\tfil\n" "FTYPE\t\tViser eller endrer kommandoer for åpning av ulike filtyper\n" "HELP\t\tViser en kort hjelpebeskrivelse om et emne\n" "MD (MKDIR)\tLager en underkatalog\n" @@ -10233,8 +10229,8 @@ "RD (RMDIR)\tSletter en underkatalog\n" "SET\t\tAngir eller viser miljøvariabler\n" "SETLOCAL\tStart lokalisering av miljøendringer i en statsvis fil\n" -"START\t\tStarter et program eller åpner et dokument i det tilordnede " -"programmet\n" +"START\t\tStarter et program eller åpner et dokument i det tilordnede\n" +"\t\tprogrammet\n" "TIME\t\tAngir eller viser gjeldende systemtid\n" "TITLE\t\tAngir vindustittelen for CMD-økten\n" "TYPE\t\tViser innholdet i en fil\n" @@ -10245,110 +10241,110 @@ "\n" "Skriv «HELP » for mer informasjon om kommandoene ovenfor\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Er du sikker?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "J" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Fant ingen filtilknytning for filtypen «%1»\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Ingen åpne-kommando er tilknyttet filtypen «%1»\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Skrive over «%1»?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Mer..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "Deler av linje i satsvis fil mangler muligens. Bruker:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Manglende argument\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Syntaksfeil\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Ingen hjelp tilgjengelig for «%1»\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Målet for GOTO ble ikke funnet\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Gjeldende dato er %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Gjeldende tid er %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Angi ny dato: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Angi ny tid: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Miljøvariabelen «%1» er ikke definert\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Klarte ikke åpne «%1»\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "En merkelapp kan ikke kalles utenfor en satsvis fil\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "A" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Slette «%1»?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Echo er %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Bekreft er %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Bekreft må være PÅ eller AV\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Feil i parameter\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10356,72 +10352,72 @@ "Volumets serienummer er %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Volumnavn (11 tegn, Enter for intet navn)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "Klarte ikke finne PATH\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Trykk en tast for å fortsette …" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Wine Kommandolinje" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "Microsoft Windows %1!S!\n" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Mer? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "Inndatalinjen er for lang.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "Volumet i stasjon %1!c! er %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "Volumet i stasjon %1!c! har ikke et navn.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Ja|Nei)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Ja|Nei|Alle)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "«%1» er ikke en intern eller ekstern kommando, eller en satsvis fil.\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "Feil: Deling på null.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "Forventet en operand.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "Forventet en operator.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "Feil i parenteser.\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12034,7 +12030,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12044,7 +12040,7 @@ "filen.\n" "'ShellExecuteEx' feilet" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "Klarte ikke å konvertere Unix-filnavnet til et DOS-filnavn." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/nl.po wine-staging-1.7.47~ubuntu14.10.1/po/nl.po --- wine-staging-1.7.46~ubuntu14.10.1/po/nl.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/nl.po 2015-07-12 05:36:18.000000000 +0000 @@ -9621,7 +9621,7 @@ msgid "Referral hop limit exceeded" msgstr "Overschrijding van limiet op verwijzingen" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9629,7 +9629,7 @@ "Nog niet geïmplementeerd\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: Bestand niet gevonden\n" @@ -9712,10 +9712,10 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" @@ -9726,10 +9726,10 @@ "opdracht kan parameters meegeven aan de aan te roepen procedure.\n" "\n" "Veranderingen m.b.t , map, omgevingsvariabelen, etc die tot stand komen\n" -"binnen een aangeroepen procedure worden geërfd door de aanroepende " +"binnen een aangeroepen procedure worden geërfd door de aanroepende\n" "procedure.\n" -#: cmd.rc:43 +#: cmd.rc:44 #, fuzzy #| msgid "" #| "CD is the short version of CHDIR. It changes the current\n" @@ -9740,43 +9740,43 @@ msgstr "" "CD is de korte versie van CHDIR. Het wijzigt de huidige map.\n" -#: cmd.rc:44 +#: cmd.rc:47 #, fuzzy #| msgid "CHDIR changes the current default directory.\n" msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR wijzigt de huidige map.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS wist het scherm.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY kopieert een bestand.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY wijzigt het invoer-/uitvoerapparaat.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE toont of wijzigt de systeemdatum.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" "DEL verwijdert een bestand of een verzameling bestanden.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR toont de inhoud van een map.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9784,20 +9784,20 @@ msgstr "" "ECHO geeft weer op het actieve uitvoerapparaat.\n" "\n" -"ECHO ON zorgt ervoor dat alle hierop volgende opdrachten in een " -"batchbestand\n" -"worden weergegeven op het uitvoerapparaat voordat ze worden uitgevoerd.\n" +"ECHO ON zorgt ervoor dat alle hierop volgende opdrachten in een\n" +"batchbestand worden weergegeven op het uitvoerapparaat voordat ze worden\n" +"uitgevoerd.\n" "\n" -"ECHO OFF keert het effect van een voorafgaande ECHO ON om (ECHO OFF is\n" -"de standaardinstelling). Weergave van de ECHO OFF opdracht kan worden\n" +"ECHO OFF keert het effect van een voorafgaande ECHO ON om (ECHO OFF is de\n" +"standaardinstelling). Weergave van de ECHO OFF opdracht kan worden\n" "voorkomen door het te laten voorafgaan door het @-teken.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" "ERASE verwijdert een bestand of een verzameling bestanden.\n" -#: cmd.rc:71 +#: cmd.rc:85 #, fuzzy #| msgid "" #| "The FOR command is used to execute a command for each of a set of files.\n" @@ -9810,21 +9810,21 @@ "\n" "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -"De FOR opdracht wordt gebruikt om een opdracht uit te voeren voor ieder\n" -"van een verzameling bestanden.\n" +"De FOR opdracht wordt gebruikt om een opdracht uit te voeren voor ieder van\n" +"een verzameling bestanden.\n" "\n" "Syntax: FOR %variabele IN (verzameling) DO opdracht\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" @@ -9834,15 +9834,13 @@ "Het doel van een GOTO opdracht wordt aangegeven met een label. Dat label\n" "mag uit maximaal 255 tekens bestaan maar er mogen geen spaties in voorkomen\n" "(dit verschilt bij andere besturingssystemen). Als er twee of meer\n" -"identieke labels bestaan in een batchbestand dan wordt altijd naar de " -"eerste\n" -"gesprongen. Een poging om te springen naar een niet bestaand label " -"beëindigt\n" -"het uitvoeren van het batchbestand.\n" +"identieke labels bestaan in een batchbestand dan wordt altijd naar de\n" +"eerste gesprongen. Een poging om te springen naar een niet bestaand label\n" +"beëindigt het uitvoeren van het batchbestand.\n" "\n" "GOTO heeft geen effect als het in een interactieve sessie wordt gebruikt.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9850,7 +9848,7 @@ "HELP toont een korte uitleg over een onderwerp.\n" "Help zonder argument laat alle ingebouwde opdrachten van CMD zien.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9871,7 +9869,7 @@ "dubbele aanhalingstekens staan. De vergelijking is niet gevoelig voor het\n" "onderscheid tussen hoofd- en kleine letters.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9886,40 +9884,39 @@ "schijf.\n" "U kunt het label van een schijf tonen met behulp van de VOL opdracht.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD is de korte versie van MKDIR. Het maakt een map aan.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR maakt een map aan.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" "MOVE verplaatst een bestand of map naar een andere plek binnen het\n" "bestandssysteem.\n" "\n" -"Als het om een map gaat dan worden alle bestanden en mappen\n" -"daaronder ook verplaatst.\n" +"Als het om een map gaat dan worden alle bestanden en mappen daaronder ook\n" +"verplaatst.\n" "\n" "MOVE werkt niet als de oude en nieuwe locaties zich op verschillende\n" "DOS-schijven bevinden.\n" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9927,30 +9924,29 @@ msgstr "" "PATH toon of wijzigt het zoekpad van cmd.\n" "\n" -"De opdracht PATH toont het huidige zoekpad (de beginwaarde wordt uit\n" -"het register gehaald). Om het zoekpad te wijzigen laat\n" -"u de PATH opdracht volgen door de nieuwe waarde.\n" +"De opdracht PATH toont het huidige zoekpad (de beginwaarde wordt uit het\n" +"register gehaald). Om het zoekpad te wijzigen laat u de PATH opdracht door\n" +"de nieuwe waarde.\n" "\n" "Het is ook mogelijk om het zoekpad te wijzigen met behulp van de PATH\n" "omgevingsvariabele, bij voorbeeld:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -"PAUSE toont een bericht op het scherm waarin de gebruiker word gevraagd een " +"PAUSE toont een bericht op het scherm waarin de gebruiker word gevraagd een\n" "toets in te drukken.\n" "\n" -"Dit is vooral handig in batchbestanden om de gebruiker in staat te stellen " -"om\n" -"de uitvoer van een voorafgaande opdracht te bekijken, voordat het van het\n" -"scherm schuift.\n" +"Dit is vooral handig in batchbestanden om de gebruiker in staat te stellen\n" +"om de uitvoer van een voorafgaande opdracht te bekijken, voordat het van\n" +"het scherm schuift.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9990,42 +9986,42 @@ "(inclusief schijfaanduiding) gevolgd een groter-dan-teken (>).\n" "(dat staat gelijk aan de opdracht: PROMPT $p$g).\n" "\n" -"De prompt kan ook gewijzigd worden via de PROMPT omgevingsvariabele,\n" -"dus de opdracht 'SET PROMPT=tekenreeks' heeft hetzelfde effect als 'PROMPT\n" -"tekenreeks'.\n" +"De prompt kan ook gewijzigd worden via de PROMPT omgevingsvariabele, dus de\n" +"opdracht 'SET PROMPT=tekenreeks' heeft hetzelfde effect als\n" +"'PROMPT tekenreeks'.\n" -#: cmd.rc:155 +#: cmd.rc:173 #, fuzzy msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" "Een opdrachtregel die begint met REM (gevold door een spatie) wordt niet\n" "uitgevoerd, en kan daarom worden gebruikt als een commentaar-regel in een\n" "batchbestand.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" "REN is de korte versie van RENAME. Het hernoemt een bestand.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME hernoemt een bestand.\n" -#: cmd.rc:161 +#: cmd.rc:181 #, fuzzy #| msgid "RD is the short version of RMDIR. It deletes a subdirectory.\n" msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD is de korte versie van RMDIR. Het verwijdert een map.\n" -#: cmd.rc:162 +#: cmd.rc:183 #, fuzzy #| msgid "RMDIR deletes a subdirectory.\n" msgid "RMDIR deletes a directory.\n" msgstr "RMDIR verwijdert een map.\n" -#: cmd.rc:206 +#: cmd.rc:229 #, fuzzy msgid "" "SET displays or changes the cmd environment variables.\n" @@ -10036,14 +10032,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET toont of wijzigt omgevingsvariabelen van cmd.\n" "\n" @@ -10063,93 +10058,94 @@ "Win32 implementatie. Merk op dat het niet mogelijk is om de omgevings-\n" "variabelen van het onderliggende besturingssysteem te wijzigen vanuit cmd.\n" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "SHIFT wordt gebruikt in een batchbestand om een parameter te verwijderen\n" "van het begin van de lijst. Dus de tweede parameter wordt dan de eerste,\n" "enzovoort. Deze opdracht heeft geen effect als hij wordt aangeroepen vanaf\n" "de opdrachtregel.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -"Start een programma, of open een document in het programma dat normaal voor " +"Start een programma, of open een document in het programma dat normaal voor\n" "deze extensie gebruikt wordt.\n" "Gebruik:\n" "start [opties] programma-naam [...]\n" "start [opties] document-naam\n" "\n" "Opties:\n" -"\"titel\" Specificeer de titel van het \"child\" venster.\n" -"/d map Start het programma in de gespecificeerde map.\n" -"/b Creeer geen nieuwe console voor het programma.\n" -"/i Start het programma met verse omgevingsvariabelen.\n" -"/min Start het programma geminimaliseerd op.\n" -"/max Start het programma gemaximaliseerd op.\n" -"/low Start het programma met lage prioriteit op.\n" -"/normal Start het programma met normale prioriteit op.\n" -"/high Start het programma met hoge prioriteit op.\n" -"/realtime Start het programma met \"realtime\" prioriteit op.\n" -"/abovenormal Start het programma in \"abovenormal\" prioriteit op.\n" -"/belownormal Start het programma in \"belownormal\" prioriteit op.\n" -"/node n Start het programma op de gespecificeerde NUMA node.\n" -"/affinity mask Start het program met het gespecificeerde affiniteitsmasker " -"mask.\n" -"/wait Wacht tot het gestarte programma beeindigd is, dan afsluiten " -"met de exit code.\n" -"/unix Gebruik een Unix bestandsnaam en start het bestand zoals " -"windows explorer.\n" -"/ProgIDOpen Open een document met het specificeerde progID.\n" -"/? Toon deze hulp en eindig.\n" +"\"titel\" Specificeer de titel van het \"child\" venster.\n" +"/d map Start het programma in de gespecificeerde map.\n" +"/b Creeer geen nieuwe console voor het programma.\n" +"/i Start het programma met verse omgevingsvariabelen.\n" +"/min Start het programma geminimaliseerd op.\n" +"/max Start het programma gemaximaliseerd op.\n" +"/low Start het programma met lage prioriteit op.\n" +"/normal Start het programma met normale prioriteit op.\n" +"/high Start het programma met hoge prioriteit op.\n" +"/realtime Start het programma met \"realtime\" prioriteit op.\n" +"/abovenormal Start het programma in \"abovenormal\" prioriteit op.\n" +"/belownormal Start het programma in \"belownormal\" prioriteit op.\n" +"/node n Start het programma op de gespecificeerde NUMA node.\n" +"/affinity mask Start het program met het gespecificeerde affiniteitsmasker\n" +" mask.\n" +"/wait Wacht tot het gestarte programma beeindigd is, dan afsluiten\n" +" met de exit code.\n" +"/unix Gebruik een Unix bestandsnaam en start het bestand zoals\n" +" windows explorer.\n" +"/ProgIDOpen Open een document met het specificeerde progID.\n" +"/? Toon deze hulp en eindig.\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME wijzigt of toont de systeemtijd.\n" -#: cmd.rc:215 +#: cmd.rc:240 #, fuzzy msgid "TITLE sets the window title for the cmd window.\n" msgstr "Wijzigt de naam van het cmd-venster, syntax: TITLE [tekenreeks]\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -"TYPE kopieert naar het uitvoerapparaat.\n" -"Er wordt niet gecontroleerd of het bestand leesbare tekst bevat.\n" +"TYPE kopieert naar het uitvoerapparaat. Er\n" +"wordt niet gecontroleerd of het bestand leesbare tekst bevat.\n" -#: cmd.rc:228 +#: cmd.rc:253 #, fuzzy msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" @@ -10160,8 +10156,8 @@ "\n" "The verify flag has no function in Wine.\n" msgstr "" -"VERIFY wordt gebruikt om de VERIFY-schakelaar aan of uit te zetten of\n" -"om hem te testen. Geldige aanroepen zijn:\n" +"VERIFY wordt gebruikt om de VERIFY-schakelaar aan of uit te zetten of om\n" +"hem te testen. Geldige aanroepen zijn:\n" "\n" "VERIFY ON\tZet de schakelaar aan.\n" "VERIFY OFF\tZet de schakelaar uit.\n" @@ -10169,23 +10165,23 @@ "\n" "De verify-schakelaar heeft geen functie binnen Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER toont de versie van cmd die u draait.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL toont het label van een schijf.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" "ENDLOCAL beëindigt de localisatie van omgevingswijzigingen in een\n" "batchbestand die werd begonnen door een voorafgaande SETLOCAL opdracht.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10197,30 +10193,30 @@ "SETLOCAL begint localisatie van omgevingswijzigingen in een batchbestand.\n" "\n" "Omgevingswijzigingen na een SETLOCAL opdracht zijn alleen in het\n" -"batchbestand zichtbaar en worden behouden tot de volgende ENDLOCAL\n" -"opdracht (of tot het eind van het bestand, welke eerst komst),\n" -"waar de vorige omgevingsvariabelen worden teruggezet.\n" +"batchbestand zichtbaar en worden behouden tot de volgende ENDLOCAL opdracht\n" +"(of tot het eind van het bestand, welke eerst komst), waar de vorige\n" +"omgevingsvariabelen worden teruggezet.\n" -#: cmd.rc:248 +#: cmd.rc:275 #, fuzzy #| msgid "" #| "PUSHD saves the current directory onto a\n" #| "stack, and then changes the current directory to the supplied one.\n" msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -"PUSHD bewaart de huidige map op een\n" -"stapel, en verandert dan de huidige map naar de opgegeven naam.\n" +"PUSHD bewaart de huidige map op een stapel, en verandert dan de\n" +"huidige map naar de opgegeven naam.\n" -#: cmd.rc:250 +#: cmd.rc:278 #, fuzzy msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -"POPD verandert de huidige map naar de meest recente die\n" -"op de stapel werd gezet met PUSHD.\n" +"POPD verandert de huidige map naar de meest recente die op de stapel werd\n" +"gezet met PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 #, fuzzy msgid "" "ASSOC shows or modifies file extension associations.\n" @@ -10229,7 +10225,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC toont of wijzigt associaties met bestandsextensies\n" @@ -10238,21 +10234,21 @@ "\n" "ASSOC zonder parameters toont de huidige associaties.\n" "Met alleen een extensie wordt de huidige associatie getoont.\n" -"Zonder bestandstype achter het '=' teken wordt de huidige associatie " +"Zonder bestandstype achter het '=' teken wordt de huidige associatie\n" "verwijderd, als deze bestaat.\n" -#: cmd.rc:269 +#: cmd.rc:300 #, fuzzy msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE toont of wijzigt 'open' opdrachten die met bestandstype zijn " @@ -10260,38 +10256,38 @@ "\n" "Gebruik: FTYPE [bestandsType[=[openOpdracht]]]\n" "\n" -"Zonder parameters worden de bestandstypen getoont waarvoor 'open' opdrachten " -"zijn gedefinieerd.\n" -"Met alleen een bestandstype wordt de geassocieerde 'open' opdracht getoond " +"Zonder parameters worden de bestandstypen getoont waarvoor 'open'\n" +"opdrachten zijn gedefinieerd.\n" +"Met alleen een bestandstype wordt de geassocieerde 'open' opdracht getoond\n" "als deze bestaat.\n" -"Zonder 'open' opdracht achter het '=' teken wordt de opdracht die " +"Zonder 'open' opdracht achter het '=' teken wordt de opdracht die\n" "geassocieerd is met het gespecificeerde bestandstype verwijderd.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" "MORE toont de uitvoer van programma's of herleidde invoer per bladzijde.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE laat een tekst zien en wacht tot de Gebruiker\n" -"op een toegestane Toets uit een selecteerbare lijst drukt.\n" +"CHOICE laat een tekst zien en wacht tot de Gebruiker op een toegestane\n" +"Toets uit een selecteerbare lijst drukt.\n" "CHOICE wordt hoofdzakelijk gebruikt om een selectie uit een menu te maken\n" "in een batch bestand.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT beëindigt de lopende sessie en keert terug\n" -"naar het besturingssysteem of de schil van waaruit cmd werd gestart.\n" +"EXIT beëindigt de lopende sessie en keert terug naar het besturingssysteem\n" +"of de schil van waaruit cmd werd gestart.\n" -#: cmd.rc:317 +#: cmd.rc:351 #, fuzzy msgid "" "CMD built-in commands are:\n" @@ -10347,8 +10343,8 @@ "DIR\t\tToon de inhoud van een map\n" "ECHO\t\tKopieer tekst direct naar het uitvoerapparaat\n" "ENDLOCAL\tBeëindig localisatie van omgevingswijzigingen in een batchbestand\n" -"FTYPE\t\tToon of wijzig 'open' opdrachten die met bestandstypen zijn " -"geassocieerd\n" +"FTYPE\t\tToon of wijzig 'open' opdrachten die met bestandstypen zijn\n" +"\t\tgeassocieerd\n" "HELP\t\tToon een korte uitleg over een onderwerp\n" "MD (MKDIR)\tMaak een map\n" "MORE\t\tDisplay output in pages\n" @@ -10372,111 +10368,111 @@ "\n" "type HELP voor meer informatie over bovengenoemde opdrachten.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Bent u zeker?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "J" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Bestandsassociatie ontbreekt voor extensie %1\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Geen open commando verbonden met bestandstype '%1'\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Overschrijf %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Meer..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "Regel in Batch proces mogelijk afgebroken. We gebruiken:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Argument ontbreekt\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Fout in de syntax\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Geen help beschikbaar voor %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Doel opgegeven bij GOTO niet gevonden\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Huidige datum is %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Huidige tijd is %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Voer de nieuwe datum in: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "voer de nieuwe tijd in: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Omgevingsvariable %1 niet gedefinieerd\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Openen van '%1' is mislukt\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" "Onmogelijk om een batch label aan te roepen van buiten een batch script\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "A" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Verwijder %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Echo staat %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Verify staat %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verify moet ON of OFF zijn\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Parameter onjuist\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10484,73 +10480,73 @@ "Het Volume Serienummer is %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Volume naam (11 karakters, ENTER voor geen)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH niet gevonden\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Druk op een willekeurige toets om verder te gaan... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Wine Command Prompt" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Meer? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "De invoerregel is te lang.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "Volume in schijfstation %1!c! is %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "Volume in schijfstation %1!c! heeft geen label.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Ja|Nee)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Ja|Nee|Alles)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" "'%1' niet herkend als intern of extern commando dan wel batchbestand.\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "Delen door nul fout.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "Verwacht een operand.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "Verwacht een operator.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "Ongepaarde haakjes.\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12177,7 +12173,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12187,7 +12183,7 @@ "opgegeven bestand.\n" "ShellExecuteEx is mislukt" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" "Kon de opgegeven Unix bestandsnaam niet omzetten naar een DOS bestandsnaam." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/or.po wine-staging-1.7.47~ubuntu14.10.1/po/or.po --- wine-staging-1.7.46~ubuntu14.10.1/po/or.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/or.po 2015-07-12 05:36:18.000000000 +0000 @@ -9202,13 +9202,13 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" msgstr "" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "" @@ -9273,66 +9273,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9341,27 +9341,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9373,7 +9373,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9382,47 +9382,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9445,29 +9444,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9477,68 +9476,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9549,21 +9548,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9573,17 +9572,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9591,42 +9590,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -9668,181 +9667,181 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr "" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr "" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11406,14 +11405,14 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" "ShellExecuteEx failed" msgstr "" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/pa.po wine-staging-1.7.47~ubuntu14.10.1/po/pa.po --- wine-staging-1.7.46~ubuntu14.10.1/po/pa.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/pa.po 2015-07-12 05:36:18.000000000 +0000 @@ -9202,13 +9202,13 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" msgstr "" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "" @@ -9273,66 +9273,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9341,27 +9341,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9373,7 +9373,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9382,47 +9382,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9445,29 +9444,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9477,68 +9476,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9549,21 +9548,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9573,17 +9572,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9591,42 +9590,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -9668,181 +9667,181 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr "" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr "" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11406,14 +11405,14 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" "ShellExecuteEx failed" msgstr "" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/pl.po wine-staging-1.7.47~ubuntu14.10.1/po/pl.po --- wine-staging-1.7.46~ubuntu14.10.1/po/pl.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/pl.po 2015-07-12 05:36:18.000000000 +0000 @@ -9521,7 +9521,7 @@ msgid "Referral hop limit exceeded" msgstr "Przekroczono limit skoków odwołań" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9529,7 +9529,7 @@ "Jeszcze niezaimplementowane\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: Nie znaleziono pliku\n" @@ -9613,64 +9613,63 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -"CALL jest używane w pliku typu bat do uruchamiania\n" -"komend z innego pliku bat. Następnie powraca do pliku, z którego została\n" -"wywołana (jeżeli istnieje). Komenda CALL może przekazywać parametry do\n" -"wywoływanej procedury.\n" +"CALL jest używane w pliku typu bat do uruchamiania komend\n" +"z innego pliku bat. Następnie powraca do pliku, z którego została wywołana\n" +"(jeżeli istnieje). Komenda CALL może przekazywać parametry do wywoływanej\n" +"procedury.\n" "\n" "Zmiany domyślnego katalogu, zmiennych środowiskowych itd. wykonane przez\n" "wywołaną procedurę są dziedziczone przez skrypt wywołujący CALL.\n" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -"CD jest krótką wersją CHDIR. Zmienia bieżący\n" -"domyślny katalog.\n" +"CD jest krótką wersją CHDIR. Zmienia bieżący domyślny katalog.\n" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR zmienia bieżący domyślny katalog.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS czyści ekran konsoli.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY kopiuje plik.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY zmienia urządzenie wejścia/wyjścia.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE pokazuje lub zmienia datę systemową.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL usuwa plik lub zestaw plików.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR wyświetla wykaz zawartości katalogu.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9678,18 +9677,18 @@ msgstr "" "ECHO drukuje do aktualnego urządzenia.\n" "\n" -"ECHO ON powoduje, że wszystkie komendy z pliku bat są drukowane\n" -"do aktualnego urządzenia przed wywołaniem.\n" +"ECHO ON powoduje, że wszystkie komendy z pliku bat są drukowane do\n" +"aktualnego urządzenia przed wywołaniem.\n" "\n" "ECHO OFF odwraca efekt komendy ECHO ON (ECHO jest wyłączone (OFF)\n" -"standardowo). Komenda ECHO OFF może zostać nie wyświetlona jeżeli\n" -"zostanie poprzedzona znakiem @.\n" +"standardowo). Komenda ECHO OFF może zostać nie wyświetlona jeżeli zostanie\n" +"poprzedzona znakiem @.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE usuwa plik lub zestaw plików.\n" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9702,31 +9701,29 @@ "Użycie: FOR %zmienna IN (zbiór) DO polecenie\n" "Należy podwoić znak % jeśli FOR jest używane w pliku wsadowym.\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -"Komenda GOTO przenosi kursor do innego miejsca\n" -"w pliku bat.\n" +"Komenda GOTO przenosi kursor do innego miejsca w pliku bat.\n" "\n" -"Etykieta, która jest celem skoku (komendy GOTO) może mieć maksymalnie\n" -"255 znaków długości, nie może zawierać spacji. Jeżeli są dwie (lub\n" -"więcej) etykiety o takich samych nazwach skok zostanie wykonany do\n" -"pierwszej z nich. Jeżeli etykieta nie istnieje wykonywanie pliku zostaje\n" -"przerwane.\n" +"Etykieta, która jest celem skoku (komendy GOTO) może mieć maksymalnie 255\n" +"znaków długości, nie może zawierać spacji. Jeżeli są dwie (lub więcej)\n" +"etykiety o takich samych nazwach skok zostanie wykonany do pierwszej z\n" +"nich. Jeżeli etykieta nie istnieje wykonywanie pliku zostaje przerwane.\n" "\n" "GOTO nie przynosi żadnego efektu, gdy jest używane interaktywnie.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9734,7 +9731,7 @@ "HELP pokazuje krótką pomoc na dany temat.\n" "HELP bez argumentu pokazuje wszystkie wbudowane polecenia CMD.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9751,11 +9748,11 @@ " IF [NOT] ciąg_znaków1==ciąg_znaków2 polecenie\n" " IF [NOT] ERRORLEVEL numer polecenie\n" "\n" -"W drugiej postaci polecenia, ciąg_znaków1 i ciąg_znaków2 musi zostać zawarty " -"w cudzysłowie\n" +"W drugiej postaci polecenia, ciąg_znaków1 i ciąg_znaków2 musi zostać\n" +"zawarty w cudzysłowie\n" "Porównanie nie uwzględnia wielkości znaków.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9769,38 +9766,37 @@ "Komenda poprosi o podanie nowej etykiety dysku.\n" "Możesz wyświetlić aktualną etykietę komendą VOL.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD jest krótką wersją MKDIR. Tworzy podkatalog.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR tworzy podkatalog.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" "MOVE zmienia położenie wybranego pliku lub katalogu.\n" "\n" -"Jeżeli przemieszczany jest katalog wszystkie podkatalogi\n" -"i pliki są także przesuwane.\n" +"Jeżeli przemieszczany jest katalog wszystkie podkatalogi i pliki są także\n" +"przesuwane.\n" "\n" "MOVE działa tylko w obrębie jednego dysku.\n" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9808,28 +9804,27 @@ msgstr "" "PATH wyświetla lub zmienia ścieżkę, w której wyszukuje cmd.\n" "\n" -"Polecenie PATH wyświetli ustawienie obecnej ŚCIEŻKI (wstępnie wzięte\n" -"z rejestru). Aby zmienić ustawienie dodaj do\n" -"polecenia PATH nową wartość ścieżki.\n" +"Polecenie PATH wyświetli ustawienie obecnej ŚCIEŻKI (wstępnie wzięte z\n" +"rejestru). Aby zmienić ustawienie dodaj do polecenia PATH nową wartość\n" +"ścieżki.\n" "\n" -"Umieszczenie wyrażenia %PATH% przy podawaniu nowej ścieżki\n" -"powoduje wstawienie starej ścieżki, na przykład:\n" +"Umieszczenie wyrażenia %PATH% przy podawaniu nowej ścieżki powoduje\n" +"wstawienie starej ścieżki, na przykład:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE wyświetla na ekranie prośbę do użytkownika o naciśnięcie klawisza.\n" "\n" -"Jest to użyteczne w plikach wsadowych, bo pozwala użytkownikowi na odczyt " -"wyjścia\n" -" poprzedniego polecenia przed przewinięciem ekranu.\n" +"Jest to użyteczne w plikach wsadowych, bo pozwala użytkownikowi na odczyt\n" +"wyjścia poprzedniego polecenia przed przewinięciem ekranu.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9858,51 +9853,47 @@ "\n" "Następujące ciągi znaków mają specjalne znaczenie:\n" "\n" -"$$ Znak dolara ($) $_ Nowa linia $b Znak kanału " -"(|)\n" -"$d Obecna data $e Escape $g Znak >\n" -"$l Znak < $n Obecny napęd $p Obecna " -"ścieżka\n" -"$q Znak = $t Obecny czas $v " -"Wersja cmd\n" -"\n" -"Zauważ, że wpisanie polecenia PROMPT bez ciagu znaków zgłoszenia zeruje " -"ustawienia zgłoszenia do domyślnych, czyli do obecnego katalogu (co " -"uwzględnia\n" -"obecną literę dysku), po której następuje znak większe niż (>).\n" +"$$ Znak dolara ($) $_ Nowa linia $b Znak kanału (|)\n" +"$d Obecna data $e Escape $g Znak >\n" +"$l Znak < $n Obecny napęd $p Obecna ścieżka\n" +"$q Znak = $t Obecny czas $v Wersja cmd\n" +"\n" +"Zauważ, że wpisanie polecenia PROMPT bez ciagu znaków zgłoszenia zeruje\n" +"ustawienia zgłoszenia do domyślnych, czyli do obecnego katalogu (co\n" +"uwzględnia obecną literę dysku), po której następuje znak większe niż (>).\n" "(tak jak polecenie PROMPT $p$g).\n" "(Tak samo jak polecenie PROMPT $p$g).\n" "\n" "Zgłoszenie może być także zmienione poprzez zmianę zmiennej środowiskowej\n" -"PROMPT, tak więc polecenie 'SET PROMPT=tekst' ma ten sam efekt co 'PROMPT " -"tekst'.\n" +"PROMPT, tak więc polecenie 'SET PROMPT=tekst' ma ten sam efekt co\n" +"'PROMPT tekst'.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" "Wiersz polecenia zaczynający się od REM (ze spacją za nim) nie wykonuje\n" -"żadnego działania i może przez to zostać wykorzystany jako komentarz w pliku " -"wsadowym.\n" +"żadnego działania i może przez to zostać wykorzystany jako komentarz w\n" +"pliku wsadowym.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "REN jest krótką wersją RENAME. Zmienia nazwę pliku.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME zmienia nazwę pliku.\n" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD jest krótką wersją RMDIR. Usuwa katalog.\n" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "RMDIR usuwa katalog.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9912,14 +9903,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET wyświetla lub ustawia zmienne środowiskowe cmd.\n" "\n" @@ -9929,99 +9919,98 @@ "\n" "SET =\n" "\n" -"gdzie i są ciągami znaków. Spacja nie może\n" -"występować przed znakiem równości, nazwa zmiennej nie może zawierać\n" -"spacji.\n" +"gdzie i są ciągami znaków. Spacja nie może występować\n" +"przed znakiem równości, nazwa zmiennej nie może zawierać spacji.\n" "\n" "Pod Wine'em zmienne środowiskowe systemu operacyjnego są dodawane do\n" -"zmiennych środowiskowych Win32, z tego powodu jest więcej zmiennych niż\n" -"w implementacji Win32. Wine nie zmienia zmiennych środowiskowych\n" -"systemu.\n" - -#: cmd.rc:211 -msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"zmiennych środowiskowych Win32, z tego powodu jest więcej zmiennych niż w\n" +"implementacji Win32. Wine nie zmienia zmiennych środowiskowych systemu.\n" + +#: cmd.rc:234 +msgid "" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "SHIFT jest używane w plikach bat do usunięcia pierwszego parametru z listy\n" "parametrów, parametr 2 staje się 1 itd. Polecenie to nie ma efektu gdy jest\n" "wywoływane z linii komend.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -"Uruchom program lub otwórz dokument w programie normalnie używanym do plików " -"z tym przyrostkiem.\n" +"Uruchom program lub otwórz dokument w programie normalnie używanym do\n" +"plików z tym przyrostkiem.\n" "Użycie:\n" "start [opcje] nazwa_programu_ze_ścieżką [...]\n" "start [opcje] nazwa_dokumentu_ze_ścieżką\n" "\n" "Opcje:\n" -"\"title\" Podaje tytuł podrzędnych okien.\n" -"/d katalog Uruchamia program w podanym katalogu.\n" -"/b Nie twórz nowej konsoli dla programu.\n" -"/i Uruchom program ze świeżymi zmiennymi środowiskowymi.\n" -"/min Uruchom program zminimalizowany.\n" -"/max Uruchom program zmaksymalizowany.\n" -"/low Uruchom program w klasie priorytetowej bezczynności.\n" -"/normal Uruchom program w normalnej klasie priorytetowej.\n" -"/high Uruchom program w wysokiej klasie priorytetowej.\n" -"/realtime Uruchom program w klasie priorytetowej czasu rzeczywistego.\n" -"/abovenormal Uruchom program w klasie priorytetowej powyżej normalnej.\n" -"/belownormal Uruchom program w klasie priorytetowej poniżej normalnej.\n" -"/node n Uruchom program na podanym węźle NUMA.\n" +"\"title\" Podaje tytuł podrzędnych okien.\n" +"/d katalog Uruchamia program w podanym katalogu.\n" +"/b Nie twórz nowej konsoli dla programu.\n" +"/i Uruchom program ze świeżymi zmiennymi środowiskowymi.\n" +"/min Uruchom program zminimalizowany.\n" +"/max Uruchom program zmaksymalizowany.\n" +"/low Uruchom program w klasie priorytetowej bezczynności.\n" +"/normal Uruchom program w normalnej klasie priorytetowej.\n" +"/high Uruchom program w wysokiej klasie priorytetowej.\n" +"/realtime Uruchom program w klasie priorytetowej czasu rzeczywistego.\n" +"/abovenormal Uruchom program w klasie priorytetowej powyżej normalnej.\n" +"/belownormal Uruchom program w klasie priorytetowej poniżej normalnej.\n" +"/node n Uruchom program na podanym węźle NUMA.\n" "/affinity maska Uruchom program ze specjalną maską afiniczności.\n" -"/wait Poczekaj, aż uruchomiony program skończy, a następnie wyjdź z " -"jego kodem wyjścia.\n" -"/unix Użyj nazwy pliku ze ścieżka z Uniksa i uruchom plik tak jak " -"windows explorer.\n" -"/ProgIDOpen Otwórz dokument używając podanego progID.\n" -"/? Wyświetl tę pomoc i wyjdź.\n" +"/wait Poczekaj, aż uruchomiony program skończy, a następnie wyjdź\n" +" z jego kodem wyjścia.\n" +"/unix Użyj nazwy pliku ze ścieżka z Uniksa i uruchom plik tak jak\n" +" windows explorer.\n" +"/ProgIDOpen Otwórz dokument używając podanego progID.\n" +"/? Wyświetl tę pomoc i wyjdź.\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME ustawia lub pokazuje aktualny czas systemowy.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE ustawia tytuł okna dla okna wiersza poleceń.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -"TYPE wyświetla zawartość pliku, nie jest sprawdzane, czy\n" -"jest on plikiem tekstowym.\n" +"TYPE wyświetla zawartość pliku, nie jest sprawdzane, czy jest\n" +"on plikiem tekstowym.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10040,23 +10029,23 @@ "\n" "Flaga verify nie ma funkcji w Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER wyświetla wersję uruchomionego wiersza poleceń.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL pokazuje etykietę woluminu urządzenia dyskowego.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" "ENDLOCAL kończy zmiany ustawień regionalnych środowiska w pliku wsadowym,\n" "które zostały wprowadzone przez poprzedzające SETLOCAL.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10068,24 +10057,24 @@ "SETLOCAL rozpoczyna zmiany ustawień regionalnych środowiska w pliku " "wsadowym.\n" "\n" -"Zmiany środowiska dokonane po SETLOCAL są lokalne dla pliku wsadowego\n" -"i są ważne do wystąpienia ENDLOCAL (lub na końcu pliku\n" -"cokolwiek nastąpi pierwsze), przy którym zostają przywrócone poprzednie\n" -"ustawienia środowiska.\n" +"Zmiany środowiska dokonane po SETLOCAL są lokalne dla pliku wsadowego i są\n" +"ważne do wystąpienia ENDLOCAL (lub na końcu pliku cokolwiek nastąpi\n" +"pierwsze), przy którym zostają przywrócone poprzednie ustawienia\n" +"środowiska.\n" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -"PUSHD zapamiętuje bieżący katalog na stosie, a\n" -"następnie przechodzi do katalogu podanego jako parametr.\n" +"PUSHD zapamiętuje bieżący katalog na stosie, a następnie\n" +"przechodzi do katalogu podanego jako parametr.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD zmienia bieżący katalog na ostatni zachowany przez PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10093,7 +10082,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC pokazuje lub zmienia skojarzenia rozszerzenia pliku\n" @@ -10101,58 +10090,58 @@ "Składnia: ASSOC [.ext[=[typPliku]]]\n" "\n" "ASSOC bez parametrów wyświetla obecne skojarzenia pliku.\n" -"Jeżeli użyte tylko z jednym rozszerzeniem pliku, to pokazuje obecne " +"Jeżeli użyte tylko z jednym rozszerzeniem pliku, to pokazuje obecne\n" "skojarzenie.\n" -"Nie określanie rodzaju pliku po znaku równości usuwa obecne skojarzenie, " +"Nie określanie rodzaju pliku po znaku równości usuwa obecne skojarzenie,\n" "jeśli jakiekolwiek istnieje.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE pokazuje lub zmienia polecenia otwarcia skojarzone z typami plików\n" "\n" "Składnia: FTYPE [typPliku[=[polecenieOtwarcia]]]\n" "\n" -"Bez parametrów, pokazuje rodzaje plików, dla których są obecnie określone " +"Bez parametrów, pokazuje rodzaje plików, dla których są obecnie określone\n" "polecenia otwarcia.\n" -"Jeżeli użyte tylko z jednym rodzajem pliku, to pokazuje jego skojarzone " +"Jeżeli użyte tylko z jednym rodzajem pliku, to pokazuje jego skojarzone\n" "polecenie otwarcia, jeśli jakiekolwiek istnieje.\n" -"Nie określanie polecenia otwarcia po znaku równości usuwa ciąg znaków " +"Nie określanie polecenia otwarcia po znaku równości usuwa ciąg znaków\n" "polecenia skojarzony z danym rodzajem pliku.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE wyświetla strona po stronie wyjście pliku lub potoku.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE wyświetla tekst i czeka, aż Użytkownik\n" -"naciśnie dozwolony Przycisk z wybieralnej listy.\n" +"CHOICE wyświetla tekst i czeka, aż Użytkownik naciśnie dozwolony Przycisk z\n" +"wybieralnej listy.\n" "CHOICE jest używany głównie do budowania menu wyboru w plikach typu bat.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT kończy bieżącą sesję cmd i powraca do systemu operacyjnego\n" -"lub powłoki, w której uruchomiono cmd.\n" +"EXIT kończy bieżącą sesję cmd i powraca do systemu operacyjnego lub\n" +"powłoki, w której uruchomiono cmd.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10207,7 +10196,8 @@ "DIR\t\tWyświetla zawartość katalogu\n" "ECHO\t\tKopiuje tekst na wyjście konsoli\n" "ENDLOCAL\tKoniec zmiany ustawień regionalnych środowiska w pliku wsadowym\n" -"FTYPE\t\tPokazuje lub zmienia polecenia otwarcia skojarzone z typami plików\n" +"FTYPE\t\tPokazuje lub zmienia polecenia otwarcia skojarzone z typami\n" +"\t\tplików\n" "HELP\t\tWyświetla dokładniejszą pomoc o komendzie\n" "MD (MKDIR)\tTworzy katalog\n" "MORE\t\tWyświetla wyjście strona po stronie\n" @@ -10220,124 +10210,125 @@ "REN (RENAME)\tZmienia nazwę pliku\n" "RD (RMDIR)\tUsuwa katalog\n" "SET\t\tUstawia lub wyświetla zmienne środowiskowe\n" -"SETLOCAL\tPoczątek zmiany ustawień regionalnych środowiska w pliku wsadowym\n" +"SETLOCAL\tPoczątek zmiany ustawień regionalnych środowiska w pliku\n" +"\t\twsadowym\n" "START\t\tUruchom program lub otwórz dokument w skojarzonym programie\n" "TIME\t\tUstawia lub wyświetla czas\n" "TITLE\t\tUstawia tytuł okna CMD\n" "TYPE\t\tWyświetla zawartość pliku\n" "VER\t\tWyświetla wersję CMD\n" "VOL\t\tWyświetla etykietę dysku\n" -"XCOPY\t\tKopiuje pliki lub drzewa katalogów z miejsca źródłowego do " -"docelowego\n" +"XCOPY\t\tKopiuje pliki lub drzewa katalogów z miejsca źródłowego do\n" +"\t\tdocelowego\n" "EXIT\t\tZamyka CMD\n" "\n" "Wpisz HELP dla dalszych informacji o którymkolwiek z tych " "poleceń.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Czy jesteś pewien?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "T" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Brak skojarzenia pliku dla rozszerzenia %1\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Brak skojarzenia polecenia otwórz z typem plików '%1'\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Czy zastąpić %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Więcej..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "Linia przy przetwarzaniu pliku bat prawdopodobnie obcięta. Używam:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Brakuje argumentu\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Błąd składni\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Brak pliku pomocy dla %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Nie znaleziono przeznaczenia dla GOTO\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Obecna data to %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Obecny czas to %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Wpisz nową datę: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Wpisz nowy czas: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Zmienna środowiskowa %1 jest niezdefiniowana\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Nieudane otwarcie '%1'\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Nie można wywołać etykiety bat poza skryptem bat\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "A" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Czy usunąć %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Echo jest %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Verify jest %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verify musi być ON lub OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Błąd parametru\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10345,74 +10336,74 @@ "Numer seryny wolumenu to %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Etykieta Wolumenu (11 znaków, aby pominąć)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "Nie znaleziono PATH\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Naciśnij jakikolwiek klawisz, aby kontynuować... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Wiersz Poleceń Wine" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "Microsoft Windows %1!S!\n" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Więcej? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "Wpisany tekst jest zbyt długi.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "Wolumen w napędzie %1!c! to %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "Wolumen w napędzie %1!c! nie ma etykiety.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Tak|Nie)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Tak|Nie|Wszystkie)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" "Nie można rozpoznać '%1' ani jako polecenia wewnętrznego, ani zewnętrznego, " "czy nawet skryptu wsadowego.\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "Błąd dzielenia przez zero.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "Oczekiwano zmiennej niezależnej.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "Oczekiwano operatora.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "Nierówna liczba nawiasach.\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12040,7 +12031,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "regsvr32: Pomyślnie odinstalowano bibliotekę DLL '%1'\n" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12050,7 +12041,7 @@ "plikiem.\n" "ShellExecuteEx nie powiodło się" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "Nie da się przetłumaczyć danej ścieżki Unix na ścieżkę DOS." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/pt_BR.po wine-staging-1.7.47~ubuntu14.10.1/po/pt_BR.po --- wine-staging-1.7.46~ubuntu14.10.1/po/pt_BR.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/pt_BR.po 2015-07-12 05:36:18.000000000 +0000 @@ -9523,7 +9523,7 @@ msgid "Referral hop limit exceeded" msgstr "Limite de salto de referências excedido" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9531,7 +9531,7 @@ "Ainda não implementado\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: Arquivo Não Encontrado\n" @@ -9614,10 +9614,10 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" @@ -9630,7 +9630,7 @@ "Mudanças no diretório padrão, variáveis de ambiente, etc, feitas dentro do\n" "procedimento chamado são herdados pelo chamador.\n" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" @@ -9638,40 +9638,40 @@ "CD é a abreviação de CHDIR. Ele altera o diretório padrão " "atual.\n" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR altera o diretório padrão atual.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS limpa a tela do console.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY copia um arquivo.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY altera o dispositivo de entrada/saída.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE mostra ou altera a data do sistema.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL exclui um arquivo ou conjunto de arquivos.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR lista os conteúdos de um diretório.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9683,15 +9683,14 @@ "lote no terminal antes deles serem executados.\n" "\n" "ECHO OFF desativa o efeito de um comando ECHO ON (ECHO é OFF por padrão).\n" -"O comando ECHO OFF pode ser impedido de ser mostrado colocando-se um " -"símbolo\n" -"@ precedendo o mesmo.\n" +"O comando ECHO OFF pode ser impedido de ser mostrado colocando-se um\n" +"símbolo @ precedendo o mesmo.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE exclui um arquivo ou conjunto de arquivos.\n" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9707,31 +9706,31 @@ "\n" "O sinal de % deve ser duplicado quando se usa o FOR em um arquivo de lotes.\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -"O comando GOTO transfere a execução para outra declaração dentro\n" -"do arquivo de lote.\n" +"O comando GOTO transfere a execução para outra declaração dentro do arquivo\n" +"de lote.\n" "\n" -"O rótulo que será o destino do comando GOTO pode ter até 255 caracteres\n" -"mas não pode incluir espaços (diferentemente de outros sistemas\n" -"operacionais). Se dois ou mais rótulos forem idênticos no arquivo de lote,\n" -"o primeiro deles sempre será executado. A tentativa de usar o GOTO para\n" -"um rótulo inexistente finaliza a execução do arquivo de lote.\n" +"O rótulo que será o destino do comando GOTO pode ter até 255 caracteres mas\n" +"não pode incluir espaços (diferentemente de outros sistemas operacionais).\n" +"Se dois ou mais rótulos forem idênticos no arquivo de lote, o primeiro\n" +"deles sempre será executado. A tentativa de usar o GOTO para um rótulo\n" +"inexistente finaliza a execução do arquivo de lote.\n" "\n" "GOTO não tem efeito quando usando interativamente.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9739,7 +9738,7 @@ "HELP mostra uma breve ajuda em um tópico\n" "HELP sem argumentos mostra todos os comandos CMD embutidos.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9759,7 +9758,7 @@ "Na segunda forma do comando, texto1 e texto2 devem estar entre aspas.\n" "A comparação não diferencia maiúsculas de minúsculas.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9773,21 +9772,20 @@ "O comando LABEL pedirá um novo rótulo para a unidade especificada.\n" "Você pode mostrar o rótulo do disco com o comando VOL.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD é a abreviação de MKDIR. Ela cria um subdiretório.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR cria um subdiretório.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" @@ -9799,13 +9797,14 @@ "\n" "MOVE falhará se o local antigo e o novo local estão em unidades diferentes.\n" -#: cmd.rc:124 +#: cmd.rc:142 +#, fuzzy msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9815,19 +9814,18 @@ "\n" "Digitando PATH mostrará a atual configuração do comando PATH (inicialmente\n" "este valor é especificado no arquivo wine.conf). Para mudar as\n" -" configurações, digite novos valores no comando PATH.\n" +"configurações, digite novos valores no comando PATH.\n" "\n" -"Também é possível modificar o comando PATH usando a variável de ambiente " -"PATH,\n" -"por exemplo:\n" +"Também é possível modificar o comando PATH usando a variável de ambiente\n" +"PATH, por exemplo:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE mostra um mensagem na tela pedindo ao usuário para pressionar uma " "tecla.\n" @@ -9835,7 +9833,7 @@ "Isto é útil principalmente em arquivos em lote para permitir ao usuário ler\n" "a saída de um comando anterior antes que ele role para fora da tela.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9871,40 +9869,39 @@ "$q Sinal de igual (=) $t Hora atual $v Versão do cmd\n" "\n" "Note que entrar no PROMPT de comando sem parâmetros reconfigura o prompt ao\n" -"padrão, que é o diretório atual (incluindo a letra da unidade atual) " -"seguido\n" -"de um sinal de maior (>).\n" +"padrão, que é o diretório atual (incluindo a letra da unidade atual)\n" +"seguido de um sinal de maior (>).\n" "(equivalente a um comando PROMPT $p$g).\n" "\n" "O 'prompt' também pode ser mudado alterando a variável de ambiente PROMPT;\n" "assim, o comando 'SET PROMPT=texto' tem o mesmo efeito que 'PROMPT texto'.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -"Uma linha de comando iniciando com REM (seguindo de um espaço) não faz\n" -"nada e, portanto, pode ser usado como um comentário em um arquivo de lote.\n" +"Uma linha de comando iniciando com REM (seguindo de um espaço) não faz nada\n" +"e, portanto, pode ser usado como um comentário em um arquivo de lote.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" "REN é a abreviação de RENAME. Ela renomeia um arquivo.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME renomeia um arquivo.\n" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD é a abreviação de RMDIR. Ela exclui um diretório.\n" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "RMDIR exclui um diretório.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9914,14 +9911,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET mostra ou altera as variável de ambiente de cmd.\n" "\n" @@ -9939,91 +9935,91 @@ "nativa. Note que não é possível afetar o ambiente do sistema operacional de\n" "dentro do cmd.\n" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "SHIFT é usado em arquivos de lote para remover um parâmetro que inicia a\n" -"lista, de forma que o parâmetro 2 sobrepõe o parâmetro 1 e assim por " -"diante.\n" -"Isto não tem efeito se chamado a partir da linha de comandos.\n" +"lista, de forma que o parâmetro 2 sobrepõe o parâmetro 1 e assim por\n" +"diante. Isto não tem efeito se chamado a partir da linha de comandos.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -"Inicia um programa ou abre um arquivo no programa normalmente usado para a " +"Inicia um programa ou abre um arquivo no programa normalmente usado para a\n" "extensão determinada.\n" "Uso:\n" "start [opções] endereço_do_programa [...]\n" "start [opções] endereço_do_documento\n" "\n" "Opções:\n" -"\"title\" Especifica o título da janela da janela filha.\n" -"/d directory Inicia o programa no diretório especificado.\n" -"/b Não criar um console novo para o programa.\n" -"/i Inicia o programa com variáveis de ambiente novas.\n" -"/min Inicia o programa minimizado.\n" -"/max Inicia o programa maximizado.\n" -"/low Inicia o programa com prioridade baixa.\n" -"/normal Inicia o programa com prioridade normal.\n" -"/high Inicia o programa com prioridade alta.\n" -"/realtime Inicia o programa com prioridade de tempo real.\n" -"/abovenormal Inicia o programa com prioridade acima do normal.\n" -"/belownormal Inicia o programa com prioridade abaixo do normal.\n" -"/node n Inicia o programa no nó NUMA especificado.\n" +"\"title\" Especifica o título da janela da janela filha.\n" +"/d directory Inicia o programa no diretório especificado.\n" +"/b Não criar um console novo para o programa.\n" +"/i Inicia o programa com variáveis de ambiente novas.\n" +"/min Inicia o programa minimizado.\n" +"/max Inicia o programa maximizado.\n" +"/low Inicia o programa com prioridade baixa.\n" +"/normal Inicia o programa com prioridade normal.\n" +"/high Inicia o programa com prioridade alta.\n" +"/realtime Inicia o programa com prioridade de tempo real.\n" +"/abovenormal Inicia o programa com prioridade acima do normal.\n" +"/belownormal Inicia o programa com prioridade abaixo do normal.\n" +"/node n Inicia o programa no nó NUMA especificado.\n" "/affinity mask Inicia o programa com a máscara de afinidade especificada.\n" -"/wait Aguarda o fim do programa iniciado e retorna com seu código de " -"saída.\n" -"/unix Usa o caminho Unix do arquivo e inicia-o como o windows " -"explorer.\n" -"/ProgIDOpen Abre um documento usando o progID especificado.\n" -"/? Exibe essa ajuda e retorna.\n" +"/wait Aguarda o fim do programa iniciado e retorna com seu código\n" +" de saída.\n" +"/unix Usa o caminho Unix do arquivo e inicia-o como o windows\n" +" explorer.\n" +"/ProgIDOpen Abre um documento usando o progID especificado.\n" +"/? Exibe essa ajuda e retorna.\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME ajusta ou mostra a hora atual do sistema.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE configura o título da janela do cmd.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" "TYPE copia para o dispositivo console (ou outro, se\n" "redirecionado). Nenhuma verificação é feita se o arquivo pode ser lido.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10033,7 +10029,7 @@ "\n" "The verify flag has no function in Wine.\n" msgstr "" -"VERIFY é usado para configurar, limpar e testar a flag de verificação. As " +"VERIFY é usado para configurar, limpar e testar a flag de verificação. As\n" "formas válidas são>\n" "\n" "VERIFY ON\tAciona a flag.\n" @@ -10042,23 +10038,23 @@ "\n" "A flag de verificação não tem função nenhuma no Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER mostra a versão do cmd em execução.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL mostra o rótulo de volume de um dispositivo de disco.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" "ENDLOCAL termina a localização das mudanças de ambiente num arquivo de lote\n" "que foram introduzidas por um SETLOCAL precedente.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10074,19 +10070,19 @@ "do arquivo, o que vier primeiro). Neste ponto, as configurações de ambiente\n" "anteriores são restauradas.\n" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" "PUSHD salva o diretório atual em uma pilha e então altera o\n" "diretório atual para o que foi fornecido.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD muda o diretório atual ao último que foi salvo com PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10094,7 +10090,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC mostra ou modifica associações de extensão de arquivo.\n" @@ -10103,20 +10099,20 @@ "\n" "ASSOC sem parâmetros mostra as associações de arquivo atuais.\n" "Se usada apenas com uma extensão de arquivo, exibe a associação atual.\n" -"Se nenhum tipo de arquivo for especificado depois do sinal de igualdade, " +"Se nenhum tipo de arquivo for especificado depois do sinal de igualdade,\n" "remove a associação atual, se houver.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE mostra ou altera os comandos de abertura associados aos tipos de " @@ -10124,23 +10120,23 @@ "\n" "Sintaxe: FTYPE [tipoDeArquivo[=[comandoDeAbertura]]]\n" "\n" -"Sem parâmetros, mostra os tipos de arquivo para os quais comandos de " +"Sem parâmetros, mostra os tipos de arquivo para os quais comandos de\n" "abertura estão definidos atualmente.\n" -"Se usado apenas com um tipo de arquivo, exibe o comando de abertura " +"Se usado apenas com um tipo de arquivo, exibe o comando de abertura\n" "associado, se houver.\n" -"Se não for especificado nenhum comando de abertura após o sinal de " -"igualdade, remove o comando de abertura associado ao tipo de arquivo " +"Se não for especificado nenhum comando de abertura após o sinal de\n" +"igualdade, remove o comando de abertura associado ao tipo de arquivo\n" "especificado.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" "MORE exibe em páginas a saída dos arquivos ou de entradas encadeadas.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" "CHOICE exibe um texto e aguarda até que o Usuário pressione uma tecla\n" @@ -10148,15 +10144,15 @@ "CHOICE é principalmente usado para construir um menu de seleção num arquivo\n" "de lote.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" "EXIT termina a sessão de comando atual e retorna ao sistema operacional ou\n" "shell que tenha invocado o cmd.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10211,8 +10207,8 @@ "DIR\t\tLista os conteúdos de um diretório\n" "ECHO\t\tCopia texto diretamente para a saída do console\n" "ENDLOCAL\tTermina as mudanças de ambiente num arquivo de lote\n" -"FTYPE\t\tMostra ou altera comandos de abertura associados a tipos de " -"arquivo\n" +"FTYPE\t\tMostra ou altera comandos de abertura associados a tipos de\n" +"\t\tarquivo\n" "HELP\t\tMostra uma breve ajuda em um tópico\n" "MD (MKDIR)\tCria um subdiretório\n" "MORE\t\tExibe a saída em páginas\n" @@ -10237,111 +10233,111 @@ "\n" "Entre HELP para mais informações sobre um dos comandos acima.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Tem certeza?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "S" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Associação de arquivo faltando para a extensão %1\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Nenhum comando de abertura associado ao tipo de arquivo '%1'\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Sobrescrever %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Mais..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" "Linha no processamento do arquivo de lote possivelmente truncada. Usando:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Faltando argumento\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Erro de sintaxe\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Sem ajuda disponível para %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Alvo para GOTO não encontrado\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "A Data Atual é %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "A Hora Atual é %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Entre nova data: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Entre nova hora: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Variável de ambiente %1 não definida\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Falha ao abrir '%1'\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Não pode chamar um rótulo de lote fora de um script de lote\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "T" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Excluir %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "O eco está %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "A verificação está %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verificação deve ser ON ou OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Erro de parâmetro\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10349,74 +10345,74 @@ "Número de Série do Volume é %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Rótulo do Volume (11 caracteres, para nenhum)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH não encontrado\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Pressione qualquer tecla para continuar... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Prompt de Comando Wine" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "Microsoft Windows %1!S!\n" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Mais? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "A linha de entrada é muito longa.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "O volume na unidade %1!c! é %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "O volume na unidade %1!c! não tem rótulo.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Sim|Não)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Sim|Não|Tudo)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" "Não é possível reconhecer '%1' como um comando interno, externo ou arquivo " "de lotes.\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "Erro de divisão por zero.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "Esperado um operando.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "Um operador é esperado.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "Incompatibilidade de parênteses.\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12050,7 +12046,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "regsvr32: DLL '%1' desinstalada com sucesso\n" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12060,7 +12056,7 @@ "arquivo especificado.\n" "ShellExecuteEx falhou" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" "Não foi possível traduzir o nome de arquivo Unix para um nome de arquivo DOS." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/pt_PT.po wine-staging-1.7.47~ubuntu14.10.1/po/pt_PT.po --- wine-staging-1.7.46~ubuntu14.10.1/po/pt_PT.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/pt_PT.po 2015-07-12 05:36:18.000000000 +0000 @@ -9492,7 +9492,7 @@ msgid "Referral hop limit exceeded" msgstr "Limite de salto de referências excedido" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9500,7 +9500,7 @@ "Ainda não implementado\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: Ficheiro não encontrado\n" @@ -9582,10 +9582,10 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" @@ -9598,7 +9598,7 @@ "Mudanças no directório pré-definido, variáveis de ambiente, etc, feitas\n" "dentro do procedimente chamado são herdados pelo chamador.\n" -#: cmd.rc:43 +#: cmd.rc:44 #, fuzzy #| msgid "" #| "CD is the short version of CHDIR. It changes the current\n" @@ -9608,42 +9608,42 @@ "default directory.\n" msgstr "CD é a versão abreviada de CHDIR. Muda o directório actual.\n" -#: cmd.rc:44 +#: cmd.rc:47 #, fuzzy #| msgid "CHDIR changes the current default directory.\n" msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR muda o directório actual.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS limpa o ecrã da consola.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY copia um ficheiro.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY muda o dispositivo de entrada/saída.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE mostra ou altera a data do sistema.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL apaga um ficheiro ou conjunto de ficheiros.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR lista o conteúdo de um directório.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9651,18 +9651,18 @@ msgstr "" "ECHO mostra a no dispositivo terminal actual.\n" "\n" -"ECHO ON activa a exibição de todos os comandos subsequentes num\n" -"ficheiro de lote no terminal antes deles serem executados.\n" +"ECHO ON activa a exibição de todos os comandos subsequentes num ficheiro de\n" +"lote no terminal antes deles serem executados.\n" "\n" -"ECHO OFF desactiva o efeito dum comando ECHO ON (ECHO é OFF por omissão).\n" -"O comando ECHO OFF pode ser impedido de ser mostrado colocando-se um\n" +"ECHO OFF desactiva o efeito dum comando ECHO ON (ECHO é OFF por omissão). O\n" +"comando ECHO OFF pode ser impedido de ser mostrado colocando-se um\n" "símbolo @ precedendo o mesmo.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE apaga um ficheiro ou conjunto de ficheiros.\n" -#: cmd.rc:71 +#: cmd.rc:85 #, fuzzy #| msgid "" #| "The FOR command is used to execute a command for each of a set of files.\n" @@ -9675,39 +9675,36 @@ "\n" "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -"O comando FOR é usado para executar um comando a cada vez num conjunto de " +"O comando FOR é usado para executar um comando a cada vez num conjunto de\n" "ficheiros.\n" "\n" "Sintaxe: FOR %variável IN (conjunto) DO comando\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -"O comando GOTO transfere a execução para outra declaração dentro\n" -"do ficheiro de lote.\n" +"O comando GOTO transfere a execução para outra declaração dentro do\n" +"ficheiro de lote.\n" "\n" -"O rótulo que será o destino do comando GOTO pode ter até 255 caracteres\n" -"mas não pode conter espaços (diferentemente de outros sistemas " -"operacionais).\n" -"Se dois ou mais rótulos forem identicos no ficheiro de lote, o primeiro " -"deles\n" -"será sempre executado. A tentativa de usar o GOTO para um rótulo " -"inexistente\n" -"termina a execução do ficheiro de lote.\n" +"O rótulo que será o destino do comando GOTO pode ter até 255 caracteres mas\n" +"não pode conter espaços (diferentemente de outros sistemas operacionais).\n" +"Se dois ou mais rótulos forem identicos no ficheiro de lote, o primeiro\n" +"deles será sempre executado. A tentativa de usar o GOTO para um rótulo\n" +"inexistente termina a execução do ficheiro de lote.\n" "\n" "GOTO não tem efeito quando usado interactivamente.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9715,7 +9712,7 @@ "HELP mostra uma breve ajuda sobre o .\n" "HELP sem argumentos mostra todos os comandos suportados pelo CMD.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9735,7 +9732,7 @@ "Na segunda forma do comando, texto1 e texto2 devem estar entre aspas.\n" "A comparação não diferencia maiúsculas de minúsculas.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9749,40 +9746,39 @@ "O comando LABEL irá aguardar que informe o novo rótulo para o drive\n" "especificado. Pode mostrar o rótulo do disco com o comando VOL.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD é a versão abreviada de MKDIR. Cria um sub-directório.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR cria um sub-directório chamada .\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" "MOVE realoca um ficheiro ou directório num novo ponto no sistema de " "ficheiros.\n" "\n" -"Se o item ao ser movido é um directório então todos os ficheiros e sub-" -"directórios\n" -"abaixo do item serão movidos com o mesmo.\n" +"Se o item ao ser movido é um directório então todos os ficheiros e sub-\n" +"directórios abaixo do item serão movidos com o mesmo.\n" "\n" "MOVE falhará se o local antigo e o novo local estão em diferentes unidades.\n" -#: cmd.rc:124 +#: cmd.rc:142 +#, fuzzy msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9790,30 +9786,27 @@ msgstr "" "PATH mostra ou permite mudar o caminho de procura de programas do cmd.\n" "\n" -"Ao digitar PATH mostrará a actual configuração do comando PATH (inicialmente " -"este\n" -"valor é especificado no ficheiro wine.conf). Para mudar as configurações, " -"digite\n" -"novos valores no comando PATH.\n" -"\n" -"Também é possível modificar o comando PATH usando a variável de ambiente " -"PATH,\n" -"por exemplo:\n" +"Ao digitar PATH mostrará a actual configuração do comando PATH\n" +"(inicialmente este valor é especificado no ficheiro wine.conf). Para mudar\n" +"as configurações, digite novos valores no comando PATH.\n" +"\n" +"Também é possível modificar o comando PATH usando a variável de ambiente\n" +"PATH, por exemplo:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE mostra uma mensagem a pedir ao utlizador para premir uma tecla.\n" "\n" "Isto é útil principalmente em ficheiros de lote para permitir ao utilizador\n" "ler a saída de um comando anterior antes que desenrole do ecrã.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9855,35 +9848,35 @@ "O 'prompt' também pode ser mudado através da variável de ambiente PROMPT,\n" "assim, o comando 'SET PROMPT=texto' tem o mesmo efeito que 'PROMPT texto'.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -"Um comando iniciado com REM (seguido de um espaço) não faz nenhuma ação\n" -"e, portanto, pode ser usado como comentário num ficheiro de lote.\n" +"Um comando iniciado com REM (seguido de um espaço) não faz nenhuma ação e,\n" +"portanto, pode ser usado como comentário num ficheiro de lote.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "REN é a versão abreviada de RENAME. Renomeia um ficheiro.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME renomeia um ficheiro.\n" -#: cmd.rc:161 +#: cmd.rc:181 #, fuzzy #| msgid "RD is the short version of RMDIR. It deletes a subdirectory.\n" msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD é a versão abreviada de RMDIR. Apaga um sub-directório.\n" -#: cmd.rc:162 +#: cmd.rc:183 #, fuzzy #| msgid "RMDIR deletes a subdirectory.\n" msgid "RMDIR deletes a directory.\n" msgstr "RMDIR apaga um sub-directório.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9893,14 +9886,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET mostra ou muda as variáveis de ambiente do cmd.\n" "\n" @@ -9910,71 +9902,72 @@ "\n" "SET =\n" "\n" -"sendo que e são textos. Não devem existir espaços\n" -"antes do sinal de igualdade, nem a variável pode conter espaços.\n" +"sendo que e são textos. Não devem existir espaços antes\n" +"do sinal de igualdade, nem a variável pode conter espaços.\n" "\n" "No Wine, o ambiente do sistema operacional hóspede é incluido no ambiente\n" "Win32 e, portanto, conterá normalmente mais valores que num sistema Win32\n" "nativo. Note que não é possível alterar o ambiente do sistema operacional\n" "hóspede a partir do cmd.\n" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "SHIFT é usado em ficheiros de lote para remover um parâmetro que inicia a\n" -"lista, assim o parâmetro 2 sobrepõe o parametro 1 e assim por diante.\n" -"Isto não tem efeito se chamado a partir da linha de comando.\n" +"lista, assim o parâmetro 2 sobrepõe o parametro 1 e assim por diante. Isto\n" +"não tem efeito se chamado a partir da linha de comando.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME define ou mostra a hora actual do sistema.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE configura o título da janela do cmd.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" "TYPE copia para o dispositivo consola (ou outro, se\n" "redireccionado). Nenhuma verificação é feita se o ficheiro pode ser lido.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9984,8 +9977,8 @@ "\n" "The verify flag has no function in Wine.\n" msgstr "" -"VERIFY é usado para configurar, limpar ou testar o 'flag' de verificação. As " -"formas válidas são:\n" +"VERIFY é usado para configurar, limpar ou testar o 'flag' de verificação.\n" +"As formas válidas são:\n" "\n" "VERIFY ON\tConfigura o flag.\n" "VERIFY OFF\tLimpa o flag.\n" @@ -9993,23 +9986,23 @@ "\n" "O 'flag' de verificação não tem função no Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER mostra a versão do cmd em execução.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL mostra o nome de um volume de um dispositivo de disco.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" "ENDLOCAL termina localização de mudanças de ambiente num ficheiro de lote\n" "que foram iniciadas por um SETLOCAL anterior.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10024,23 +10017,23 @@ "lote e são mantidas até ao ENDLOCAL seguinte (ou até ao fim do ficheiro),\n" "após o qual as opções anteriores são repostas.\n" -#: cmd.rc:248 +#: cmd.rc:275 #, fuzzy #| msgid "" #| "PUSHD saves the current directory onto a\n" #| "stack, and then changes the current directory to the supplied one.\n" msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" "PUSHD guarda o directório actual numa pilha, e depois muda o\n" "directório actual para o indicado.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD muda o directório actual para o último guardado com PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10048,7 +10041,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC mostra ou modifica associações de extensões de ficheiros.\n" @@ -10057,58 +10050,58 @@ "\n" "ASSOC sem argumentos mostra as associações actuais.\n" "Se usado só com uma extensão de ficheiro, mostra a sua associação actual.\n" -"Se não indicar um tipo de ficheiro após o sinal de igual, a associação " +"Se não indicar um tipo de ficheiro após o sinal de igual, a associação\n" "actual é removida, se existir alguma.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE mostra ou modifica comandos abertos associados com tipos de ficheiro.\n" "\n" "Sintaxe: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Sem argumentos, mostra os tipos de ficheiro para os quais textos de comandos " -"abertos estão definidos.\n" -"Se usado apenas com um tipo de ficheiro, mostra os textos de comandos " +"Sem argumentos, mostra os tipos de ficheiro para os quais textos de\n" +"comandos abertos estão definidos.\n" +"Se usado apenas com um tipo de ficheiro, mostra os textos de comandos\n" "abertos associados que existam.\n" -"Se não especificar um comando aberto depois do sinal de igual, remove o " +"Se não especificar um comando aberto depois do sinal de igual, remove o\n" "texto associado ao tipo de ficheiro especificado.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" "MORE faz saída paginada do conteúdo de ficheiros ou do que receber de um " "tubo.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" "CHOICE [] mostra o texto opcional e aguarda que o utilizador\n" "pressione uma tecla entre uma lista de opções.\n" "CHOICE é usado principalmente para construir menus em ficheiros de lote.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" "EXIT termina a sessão de comando actual e retorna ao sistema operacional\n" "ou shell que tenha invocado o cmd.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10164,7 +10157,8 @@ "ECHO\t\tCopia o texto diretamente na saída da consola\n" "ENDLOCAL\tTermina localização de mudanças de ambiente num ficheiro de lote\n" "EXIT\t\tFecha o CMD\n" -"FTYPE\t\tMostra ou altera comandos abertos associados com tipos de ficheiro\n" +"FTYPE\t\tMostra ou altera comandos abertos associados com tipos de\n" +"\t\tficheiro\n" "HELP\t\tMostra breves detalhes de um tópico\n" "MD (MKDIR)\tCria um subdirectório\n" "MORE\t\tMostra saídas em páginas\n" @@ -10190,110 +10184,110 @@ "Digite HELP para mais informações sobre alguns dos comandos " "acima.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Tem a certeza?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "S" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Não há nenhum comando aberto associado com o tipo de ficheiro '%1'\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Reescrever %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Mais..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "Linha possivelmente truncada em ficheiro de lote: Usando:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Argumento em falta\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Erro de sintaxe\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Ajuda não disponível para %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Destino do GOTO não encontrado\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "A data actual é %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "A hora actual é %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Digite a nova data: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Digite a nova hora: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Variável de ambiente %1 não definida\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Falhou ao abrir '%1'\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Não é possível chamar a etiqueta de lote fora de um guião de lote\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "T" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Apagar %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Echo é %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Verificar é %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verificar deve estar ON ou OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Erro de argumento\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10301,72 +10295,72 @@ "O Número de Série do Volume é %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Nome do Volume (11 caracteres, para nenhum)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH não encontrado\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Prima uma tecla qualquer para continuar... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Prompt de Comandos do Wine" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Mais? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "A linha de entrada é demasiado longa.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "O volume no drive %1!c! é %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "O volume no drive %1!c! não tem nome.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Sim|Não)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Sim|Não|Todos)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "Operador esperado.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12009,7 +12003,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12019,7 +12013,7 @@ "ficheiro especificado.\n" "ShellExecuteEx falhado" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "Não foi possível converter o nome do ficheiro de Unix para DOS." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/rm.po wine-staging-1.7.47~ubuntu14.10.1/po/rm.po --- wine-staging-1.7.46~ubuntu14.10.1/po/rm.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/rm.po 2015-07-12 05:36:18.000000000 +0000 @@ -9267,14 +9267,14 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 #, fuzzy msgid "" "Not Yet Implemented\n" "\n" msgstr "Na implementa" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "" @@ -9340,66 +9340,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9408,27 +9408,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9440,7 +9440,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9449,47 +9449,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9512,29 +9511,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9544,68 +9543,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9616,21 +9615,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9640,17 +9639,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9658,42 +9657,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -9735,182 +9734,182 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 #, fuzzy msgid "No help available for %1\n" msgstr "INFUORMAZIUN" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr "" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr "" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11492,14 +11491,14 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" "ShellExecuteEx failed" msgstr "" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/ro.po wine-staging-1.7.47~ubuntu14.10.1/po/ro.po --- wine-staging-1.7.46~ubuntu14.10.1/po/ro.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/ro.po 2015-07-12 05:36:18.000000000 +0000 @@ -9770,7 +9770,7 @@ msgid "Referral hop limit exceeded" msgstr "Limită număr referenți depășită" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9778,7 +9778,7 @@ "Încă neimplementat\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: fișier negăsit\n" @@ -9842,23 +9842,23 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -"CALL se utilizează într-un fișier batch pentru a\n" -"executa comenzi dintr-un alt fișier batch. Când se închide fișierul\n" -"batch, controlul revine la fișierul care l-a apelat. Comanda CALL poate\n" -"furniza parametri pentru procedura apelată.\n" +"CALL se utilizează într-un fișier batch pentru a executa\n" +"comenzi dintr-un alt fișier batch. Când se închide fișierul batch,\n" +"controlul revine la fișierul care l-a apelat. Comanda CALL poate furniza\n" +"parametri pentru procedura apelată.\n" "\n" "Modificările la directorul curent, variabilele de mediu etc. efectuate\n" "într-o procedură apelată se reflectă asupra apelantului.\n" -#: cmd.rc:43 +#: cmd.rc:44 #, fuzzy #| msgid "" #| "CD is the short version of CHDIR. It changes the current\n" @@ -9869,42 +9869,42 @@ msgstr "" "CD este versiunea scurtă pentru CHDIR. CD schimbă directorul curent.\n" -#: cmd.rc:44 +#: cmd.rc:47 #, fuzzy #| msgid "CHDIR changes the current default directory.\n" msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR schimbă directorul curent.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS golește ecranul consolei.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY copiază un fișier.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY schimbă dispozitivul de intrare/ieșire.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE afișează sau schimbă data sistemului.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL șterge un fișier sau un set de fișiere.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR afișează conținutul unui director.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9919,11 +9919,11 @@ "implicit). Se poate împiedica afișarea comenzii ECHO OFF dacă este\n" "precedată de semnul @.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE șterge un fișier sau un set de fișiere.\n" -#: cmd.rc:71 +#: cmd.rc:85 #, fuzzy #| msgid "" #| "The FOR command is used to execute a command for each of a set of files.\n" @@ -9936,21 +9936,21 @@ "\n" "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -"Comanda FOR se utilizează pentru a executa o comandă pentru fiecare set\n" -"de fișiere.\n" +"Comanda FOR se utilizează pentru a executa o comandă pentru fiecare set de\n" +"fișiere.\n" "\n" "Sintaxă: FOR %variabilă IN (set) DO comandă\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" @@ -9958,13 +9958,13 @@ "\n" "Eticheta vizată de GOTO poate avea maxim 255 de caractere dar nu poate\n" "include spații (spre deosebire de alte sisteme de operare). Dacă există\n" -"două sau mai multe etichete identice într-un fișier batch, va fi\n" -"executată exclusiv prima. Încercarea GOTO spre o etichetă inexistentă\n" -"va termina execuția fișierului batch.\n" +"două sau mai multe etichete identice într-un fișier batch, va fi executată\n" +"exclusiv prima. Încercarea GOTO spre o etichetă inexistentă va termina\n" +"execuția fișierului batch.\n" "\n" "GOTO nu are efect când se utilizează interactiv.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9972,7 +9972,7 @@ "HELP arată un scurt ajutor pentru \n" "HELP fără nici un parametru enumerează toate comenzile integrate în cmd.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9992,7 +9992,7 @@ "În a doua formă a comenzii, șir1 și șir2 trebuie să fie între ghilimele\n" "duble. Comparația este insensibilă la majuscule.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -10006,22 +10006,21 @@ "Comanda vă va solicita noua etichetă de volum pentru unitatea dată.\n" "Puteți afișa eticheta de volum a discului cu comanda VOL.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" "MD este versiunea scurtă pentru MKDIR. MD creează un subdosar.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR creează un subdosar.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" @@ -10033,13 +10032,13 @@ "MOVE eșuează dacă locația veche și cea nouă se află în directoare DOS\n" "diferite.\n" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -10054,21 +10053,21 @@ "PATH se poate modifica și utilizând variabila de mediu PATH, de exemplu:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE afișează un mesaj pe ecran și așteaptă ca utilizatorul să apese o " "tastă.\n" "\n" -"Este util mai ales în fișierele batch, pentru a permite utilizatorului să " -"citească\n" -"rezultatul unei comenzi anterioare, înainte de a dispărea de pe ecran.\n" +"Este util mai ales în fișierele batch, pentru a permite utilizatorului să\n" +"citească rezultatul unei comenzi anterioare, înainte de a dispărea de pe\n" +"ecran.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -10092,8 +10091,8 @@ msgstr "" "PROMPT configurează prompterul pentru linia de comandă.\n" "\n" -"Șirul care urmează după comanda PROMPT (și spațiul imediat următor)\n" -"apare la începutul liniei când cmd așteaptă introducerea de date.\n" +"Șirul care urmează după comanda PROMPT (și spațiul imediat următor) apare\n" +"la începutul liniei când cmd așteaptă introducerea de date.\n" "\n" "Următoarele șiruri de caractere au semnificație specială:\n" "\n" @@ -10108,40 +10107,40 @@ "(ca o comandă PROMPT $p$g).\n" "\n" "Și prompterul poate fi modificat schimbând variabila de mediu PROMPT,\n" -"astfel încât comanda „SET PROMPT=text” are același efect ca și „PROMPT " -"text”.\n" +"astfel încât comanda „SET PROMPT=text” are același efect ca și\n" +"„PROMPT text”.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" "O linie de comandă începând cu REM (urmat de spațiu) nu realizează nici o\n" -"acțiune și de aceea poate fi utilizată ca un comentariu într-un fișier " +"acțiune și de aceea poate fi utilizată ca un comentariu într-un fișier\n" "batch.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" "REN este versiunea scurtă pentru RENAME. REN redenumește fișierul.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME redenumește fișierul.\n" -#: cmd.rc:161 +#: cmd.rc:181 #, fuzzy #| msgid "RD is the short version of RMDIR. It deletes a subdirectory.\n" msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD este versiunea scurtă pentru RMDIR. RD șterge subdosarul.\n" -#: cmd.rc:162 +#: cmd.rc:183 #, fuzzy #| msgid "RMDIR deletes a subdirectory.\n" msgid "RMDIR deletes a directory.\n" msgstr "RMDIR șterge subdosarul.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -10151,14 +10150,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET afișează sau schimbă variabilele de mediu ale cmd.\n" "\n" @@ -10176,63 +10174,64 @@ "implementare Win32 nativă. Rețineți că nu poate fi modificat mediul\n" "sistemului de operare din cmd.\n" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "SHIFT se utilizează într-un fișier batch pentru a elimina primul parametru\n" "din listă; astfel, parametrul 2 devine parametrul 1 și așa mai departe.\n" "Nu are efect dacă este apelat din linia de comandă.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME afișează sau schimbă ora sistemului.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE [șir] definește titlul pentru fereastra cmd.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" "TYPE copiază în consolă (sau unde este\n" "redirecționat). Nu se verifică dacă fișierul conține text lizibil.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10242,8 +10241,8 @@ "\n" "The verify flag has no function in Wine.\n" msgstr "" -"VERIFY se utilizează pentru a activa, a elimina sau a testa indicatorul\n" -"de verificare. Sunt valabile formele:\n" +"VERIFY se utilizează pentru a activa, a elimina sau a testa indicatorul de\n" +"verificare. Sunt valabile formele:\n" "\n" "VERIFY ON\tActivează indicatorul.\n" "VERIFY OFF\tElimină indicatorul.\n" @@ -10251,21 +10250,21 @@ "\n" "Indicatorul de verificare nu are nici o funcție în Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER afișează versiunea de cmd utilizată.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL Afișează eticheta de volum a unui disc.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10275,23 +10274,23 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 #, fuzzy #| msgid "" #| "PUSHD saves the current directory onto a\n" #| "stack, and then changes the current directory to the supplied one.\n" msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" "PUSHD salvează directorul curent într-o stivă și apoi\n" "înlocuiește directorul curent cu cel specificat.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD schimbă directorul curent cu ultimul salvat cu PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10299,44 +10298,44 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE afișează în pagini conținutul fișierelor sau datele introduse.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT termină sesiunea curentă a liniei de comandă și revine la sistemul\n" -"de operare sau shell-ul din care ați invocat cmd.\n" +"EXIT termină sesiunea curentă a liniei de comandă și revine la sistemul de\n" +"operare sau shell-ul din care ați invocat cmd.\n" -#: cmd.rc:317 +#: cmd.rc:351 #, fuzzy msgid "" "CMD built-in commands are:\n" @@ -10410,112 +10409,112 @@ "Introduceți HELP pentru informații suplimentare despre\n" "comenzile de mai sus\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Sunteți sigur?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "D" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Lipsește asocierea cu fișiere pentru extensia %1\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" "Nici o comandă de deschidere nu este asociată cu tipul de fișier „%1”\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Suprascrie %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Mai mult..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" "Linie posibil trunchiată în procesarea fișierului batch. Se utilizează:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Argument lipsă\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Eroare de sintaxă\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Nu există ajutor pentru %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Destinația pentru GOTO nu a fost găsită\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Data actuală este %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Ora actuală este %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Introduceți noua dată: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Introduceți noua oră: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Variabila de mediu %1 nu este definită\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Deschiderea „%1” a eșuat\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Nu se poate apela eticheta pentru batch în afara unui script batch\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "T" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Șterge %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Echo este %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Verify este %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verify trebuie să fie ON sau OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Eroare de parametri\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10523,73 +10522,73 @@ "Numărul de serie al volumului este %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Etichetă pentru volum (11 caractere, pentru nici una)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH negăsită\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Apăsați orice tastă pentru a continua... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Linia de comandă Wine" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Mai mult? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "Șirul introdus este prea lung.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Da|Nu)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Da|Nu|Toate)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 #, fuzzy msgid "Expected an operator.\n" msgstr "Eroare externă nedeterminată." -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12217,7 +12216,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12226,7 +12225,7 @@ "Aplicația nu a putut fi pornită sau nu există nici o aplicație asociată\n" "cu fișierul specificat. ShellExecuteEx a eșuat" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" "Nu a putut fi tradus numele de fișier Unix specificat într-un nume de fișier " diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/ru.po wine-staging-1.7.47~ubuntu14.10.1/po/ru.po --- wine-staging-1.7.46~ubuntu14.10.1/po/ru.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/ru.po 2015-07-12 05:36:18.000000000 +0000 @@ -9471,7 +9471,7 @@ msgid "Referral hop limit exceeded" msgstr "Предел числа пересылки ссылок превышен" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9479,7 +9479,7 @@ "Ещё не выполнено\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: файл не найден\n" @@ -9561,64 +9561,62 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -"CALL используется в bat-файлах для запуска других\n" -"bat-файлов. При выходе из bat-файла управление возвращается\n" -"файлу, вызвавшему его. Команда CALL может передавать параметры\n" -"вызванному bat-файлу.\n" +"CALL используется в bat-файлах для запуска других bat-файлов.\n" +"При выходе из bat-файла управление возвращается файлу, вызвавшему его.\n" +"Команда CALL может передавать параметры вызванному bat-файлу.\n" "\n" "Изменения каталога по умолчанию, переменных окружения и т.д., сделанные\n" "вызванной процедурой, наследуются вызвавшему.\n" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -"СD <директория> это сокращение от CHDIR. Она изменяет текущую\n" -"директорию.\n" +"СD <директория> это сокращение от CHDIR. Она изменяет текущую директорию.\n" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR <директория> изменяет текущую директорию.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS очищает экран консоли.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY <файл> копирует файл.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY изменяет устройство ввода/вывода.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE показывается или устанавливает системную дату.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL <файл> удаляет файл или несколько файлов.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR отображает содержимое директории.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9626,17 +9624,17 @@ msgstr "" "ECHO <строка> отображает <строку> на текущем терминальном устройстве.\n" "\n" -"ECHO ON включает отображение всех последующих команд в bat-файле\n" -"в терминал перед их выполнением.\n" +"ECHO ON включает отображение всех последующих команд в bat-файле в терминал\n" +"перед их выполнением.\n" "\n" "ECHO OFF даёт эффект, противоположный ECHO ON (ECHO отключено (OFF) по\n" "умолчанию). Знак @, предшествующий ECHO OFF, препятствует её отображению.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE <файл> удаляет файл или несколько файлов.\n" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9644,40 +9642,38 @@ "\n" "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -"FOR используется для применения заданной <команды> для\n" -"каждого файла из набора файлов.\n" +"FOR используется для применения заданной <команды> для каждого файла из\n" +"набора файлов.\n" "\n" "Использование: FOR %переменная IN (набор) DO команда\n" "\n" "Знак % должен быть удвоен при использовании FOR в bat-файлах.\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" "GOTO передаёт управление на строку, помеченную специальной меткой, в\n" "пределах bat-файла.\n" "\n" -"Метка, являющаяся целью GOTO, может иметь длину до 255 символов, но\n" -"не может содержать пробелы (это отличие от других операционных\n" -"систем). Если в bat-файле присутствует две или более метки с одинаковым " -"именем,\n" -"то передаваться управление будет всегда на первую.\n" -"Попытка GOTO перейти по несуществующей метке прерывает выполнение bat-" -"файла.\n" +"Метка, являющаяся целью GOTO, может иметь длину до 255 символов, но не\n" +"может содержать пробелы (это отличие от других операционных систем).\n" +"Если в bat-файле присутствует две или более метки с одинаковым именем, то\n" +"передаваться управление будет всегда на первую. Попытка GOTO перейти по\n" +"несуществующей метке прерывает выполнение bat-файла.\n" "\n" "Команда GOTO не работает в интерактивном режиме.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9685,7 +9681,7 @@ "HELP <команда> показывается краткую информацию о команде.\n" "HELP без аргументов выводит список встроенных команд.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9702,10 +9698,10 @@ " IF [NOT] строка1==строка2 команда\n" " IF [NOT] ERRORLEVEL число команда\n" "\n" -"При втором варианте использования строки нужно заключать в кавычки.\n" -"Регистр строк при сравнении не учитывается.\n" +"При втором варианте использования строки нужно заключать в кавычки. Регистр\n" +"строк при сравнении не учитывается.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9719,39 +9715,39 @@ "Команда выводит подсказку о создании новой метки для диска.\n" "Посмотреть текущую метку диска возможно с помощью команды VOL.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD <имя> это краткий вариант MKDIR. Она создает поддиректорию.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR <имя> создает поддиректорию.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" "MOVE перемещает файл или каталог на новое место файловой системы.\n" "\n" -"Если перемещается каталог, то все файлы и подкаталоги внутри него\n" -"также переместятся.\n" +"Если перемещается каталог, то все файлы и подкаталоги внутри него также\n" +"переместятся.\n" "\n" "MOVE не работает для перемещения данных с одного логического диска на " "другой.\n" -#: cmd.rc:124 +#: cmd.rc:142 +#, fuzzy msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9760,26 +9756,26 @@ "PATH отображает или изменяет маршрут поиска в cmd.\n" "\n" "Команда PATH отображает текущую установку пути поиска исполняемых файлов\n" -"(первоначально это значение задаётся в вашем файле wine.conf).\n" -"Для изменения значения вызовите PATH с новым значением.\n" +"(первоначально это значение задаётся в вашем файле wine.conf). Для\n" +"изменения значения вызовите PATH с новым значением.\n" "\n" "Так же возможно изменять значение PATH, используя значение переменной\n" "окружения PATH, например:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE выводит на экран сообщение с просьбой нажать клавишу.\n" "\n" "Она в основном используется в bat-файлах, чтобы пользователь смог прочесть\n" "вывод предыдущей команды прежде чем он исчезнет с экрана.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9813,41 +9809,39 @@ "$l Знак < $n Текущий диск $p Текущий путь\n" "$q Знак равно $t Текущее время $v Версия cmd\n" "\n" -"При вводе команды PROMPT без новой строки подсказки\n" -"подсказка устанавливается по умолчанию (буква текущего диска, путь до " -"текущего\n" +"При вводе команды PROMPT без новой строки подсказки подсказка\n" +"устанавливается по умолчанию (буква текущего диска, путь до текущего\n" "каталога и знак больше (>).\n" "(как при вызове PROMPT $p$g).\n" "\n" -"Подсказка может быть также изменена переменной окружения PROMPT,\n" -"так что команда «SET PROMPT=<текст>» даёт такой же эффект, как «PROMPT " -"».\n" +"Подсказка может быть также изменена переменной окружения PROMPT, так что\n" +"команда «SET PROMPT=<текст>» даёт такой же эффект, как «PROMPT ».\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" "Командная строка, начинающаяся с REM (с последующим пробелом) не выполняет\n" "никаких действий, REM используется для комментариев в bat-файлах.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "REN <файл> краткий вариант RENAME. Она переименовывает файл.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME <файла> переименовывает файл.\n" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD <директория> это краткий вариант RMDIR. Она удаляет директорию.\n" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "RMDIR <директория> удаляет директорию.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9857,14 +9851,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET показывает или изменяет переменные окружения cmd.\n" "\n" @@ -9878,95 +9871,96 @@ "равенства не должно быть пробелов, имя переменной не может содержать\n" "пробелы.\n" "\n" -"В Wine переменные окружения основной операционной системы включены\n" -"в окружение Win32, поэтому будет доступно несколько больше\n" -"переменных, чем в обычной Win32. Стоит отметить,\n" -"что невозможно изменить окружение операционной системы из cmd.\n" - -#: cmd.rc:211 -msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"В Wine переменные окружения основной операционной системы включены в\n" +"окружение Win32, поэтому будет доступно несколько больше переменных, чем в\n" +"обычной Win32. Стоит отметить, что невозможно изменить окружение\n" +"операционной системы из cmd.\n" + +#: cmd.rc:234 +msgid "" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "SHIFT используется в bat-файлах для удаления одного параметра с вершины\n" "списка, таким образом параметр 2 переместится в параметр 1 и так далее.\n" "SHIFT не работает при вызове в командной строке.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -"Запускает программу или открывает документ в программе обычно используемой " +"Запускает программу или открывает документ в программе обычно используемой\n" "для файлов с таким расширением.\n" "Использование:\n" "start [параметры] program_filename [...]\n" "start [параметры] document_filename\n" "\n" "Параметры:\n" -"\"title\" Заголовок дочерних окон.\n" -"/d directory Запускает программу в указанной директории.\n" -"/b Не создавать новую консоль для программы.\n" -"/i Запустить программу с исходными переменными окружения.\n" -"/min Запустить программу свернутой.\n" -"/max Запустить программу открытой на весь экран.\n" -"/low Запустить программу с низким приоритетом.\n" -"/normal Запустить программу с нормальным приоритетом.\n" -"/high Запустить программу с высоким приоритетом.\n" -"/realtime Запустить программу с максимальным приоритетом.\n" -"/abovenormal Запустить программу с приоритетом выше нормального.\n" -"/belownormal Запустить программу с приоритетом ниже нормального.\n" -"/node n Запустить программу на указанном узле NUMA.\n" +"\"title\" Заголовок дочерних окон.\n" +"/d directory Запускает программу в указанной директории.\n" +"/b Не создавать новую консоль для программы.\n" +"/i Запустить программу с исходными переменными окружения.\n" +"/min Запустить программу свернутой.\n" +"/max Запустить программу открытой на весь экран.\n" +"/low Запустить программу с низким приоритетом.\n" +"/normal Запустить программу с нормальным приоритетом.\n" +"/high Запустить программу с высоким приоритетом.\n" +"/realtime Запустить программу с максимальным приоритетом.\n" +"/abovenormal Запустить программу с приоритетом выше нормального.\n" +"/belownormal Запустить программу с приоритетом ниже нормального.\n" +"/node n Запустить программу на указанном узле NUMA.\n" "/affinity mask Запустить программу с указанной маской.\n" -"/wait Подождать завершения программы и вернуть её код возврата.\n" -"/unix Использовать Unix-имя файла и запустить как Windows Explorer.\n" -"/ProgIDOpen Открывает документ с помощью указанного progID.\n" -"/? Показать эту справку и выйти.\n" +"/wait Подождать завершения программы и вернуть её код возврата.\n" +"/unix Использовать Unix-имя файла и запустить как Windows\n" +" Explorer.\n" +"/ProgIDOpen Открывает документ с помощью указанного progID.\n" +"/? Показать эту справку и выйти.\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME устанавливает или отображает системное время.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE <строка> устанавливает заголовок окна cmd.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -"TYPE <файл> копирует <файл> в устройство консоли (или куда угодно, если он " -"перенаправлен).\n" -"Проверка на то, что файл - это текст, предназначенный для чтения, " -"отсутствует.\n" +"TYPE <файл> копирует <файл> в устройство консоли (или куда угодно, если он\n" +"перенаправлен). Проверка на то, что файл - это текст, предназначенный для\n" +"чтения, отсутствует.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9985,23 +9979,23 @@ "\n" "Этот флаг не используется в Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER выводит версию используемого cmd.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL выводит метку тома дискового устройства.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -"ENDLOCAL заканчивает действие локальных изменений окружения,\n" -"произошедших в пакетном файле после SETLOCAL.\n" +"ENDLOCAL заканчивает действие локальных изменений окружения, произошедших в\n" +"пакетном файле после SETLOCAL.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10012,24 +10006,23 @@ msgstr "" "SETLOCAL включает режим локальных изменений в пакетном файле.\n" "\n" -"Изменения переменных окружения после SETLOCAL действуют\n" -"в пакетном файле локально, до команды ENDLOCAL (или до конца\n" -"файла, если такой команды нет), после чего все переменные\n" -"окружения восстанавливаются.\n" +"Изменения переменных окружения после SETLOCAL действуют в пакетном файле\n" +"локально, до команды ENDLOCAL (или до конца файла, если такой команды нет),\n" +"после чего все переменные окружения восстанавливаются.\n" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -"PUSHD <директория> сохраняет текущий каталог в стек,\n" -"а затем переходит в указанный каталог.\n" +"PUSHD <директория> сохраняет текущий каталог в стек, а затем переходит в\n" +"указанный каталог.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD переходит в каталог, сохранённый командой PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10037,7 +10030,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC показывает или изменяет сопоставления типов файлов.\n" @@ -10049,52 +10042,52 @@ "При отсутствии типа файла после знака равенства текущее сопоставление " "удаляется.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE показывает или изменяет команды открытия, связанные с типами файлов.\n" "\n" "Синтаксис: FTYPE [тип_файла[=[команда_открытия]]]\n" "\n" -"Без параметров FTYPE выводит все типы файлов, для которых определены команды " -"открытия.\n" +"Без параметров FTYPE выводит все типы файлов, для которых определены\n" +"команды открытия.\n" "Если указан только тип файла, выводится команда открытия, связанная с ним.\n" -"При отсутствии команды после знака равно текущая назначенная команда " +"При отсутствии команды после знака равно текущая назначенная команда\n" "удаляется.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE выводит содержимое файлов или каналов постранично.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE выводит текст и ждёт, пока пользователь\n" -"не нажмёт клавишу из предложенного списка.\n" +"CHOICE выводит текст и ждёт, пока пользователь не нажмёт клавишу из\n" +"предложенного списка.\n" "CHOICE обычно применяется для создания меню в пакетном файле.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT завершает текущую командную сессию и возвращает\n" -"в операционную систему или оболочку из которой был запущен cmd.\n" +"EXIT завершает текущую командную сессию и возвращает в операционную систему\n" +"или оболочку из которой был запущен cmd.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10156,15 +10149,16 @@ "MOVE\t\tПеремещает файл, несколько файлов или дерево каталогов\n" "PATH\t\tПоказывает или изменяет путь поиска программ\n" "PAUSE\t\tОстанавливает исполнение bat-файлa\n" -"POPD\t\tВосстанавливает предыдущий текущий каталог, сохранённый с помощью\n" +"POPD\t\tВосстанавливает предыдущий текущий каталог, сохранённый с\n" +"\t\tпомощью\n" "PROMPT\t\tИзменяет приглашение командной строки\n" "PUSHD\t\tСохраняет текущий каталог и переходит в другой\n" "REN (RENAME)\tПереименовывает файл\n" "RD (RMDIR)\tУдаляет каталог\n" "SET\t\tПоказывает или изменяет переменные окружения\n" "SETLOCAL\tНачинает действие локальных изменений окружения\n" -"START\t\tЗапускает программу, или открывает файл в соответствующей " -"программе\n" +"START\t\tЗапускает программу, или открывает файл в соответствующей\n" +"\t\tпрограмме\n" "TIME\t\tПоказывает или изменяет текущее системное время\n" "TITLE\t\tУстанавливает заголовок окна cmd для текущей сессии\n" "TYPE\t\tВыводит содержимое текстового файла\n" @@ -10176,110 +10170,110 @@ "Выполните HELP <команда> для дополнительной информации по перечисленным " "командам.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Вы уверены?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "Y" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Нет ассоциации для расширения %1\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Не работает команда, ассоциированная с типом файлов «%1»\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Перезаписать %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Дальше..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "Строка в обрабатываемом bat-файле возможно урезана. Используем:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Отсутствует аргумент\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Синтаксическая ошибка\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Справка для %1 отсутствует\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Цель для GOTO не найдена\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Текущая дата %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Текущее время %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Введите новую дату: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Введите новое время: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Переменная окружения %1 не определена\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Не удалось открыть «%1»\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Не могу вызвать метку bat-файла вне bat-скрипта\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "A" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Удалить %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Echo установлено в %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Verify установлено в %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verify должен быть либо ON, либо OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Неверный параметр\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10287,73 +10281,73 @@ "Серийный номер тома %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Метка диска (11 символов, для ввода пустой метки)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH не найден\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Нажмите любую клавишу для продолжения... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Приглашение командной строки Wine" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "Microsoft Windows %1!S!\n" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Ещё? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "Введённая команда слишком длинная.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "Том на диске %1!c! имеет метку %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "Том на диске %1!c! не имеет метки.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Y - да|N - нет)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Y - да|N - нет|A - все)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" "«%1» не является ни внутренней или внешней командой, ни batch-скриптом.\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "Ошибка деления на ноль.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "Ожидается операнд.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "Ожидается оператор.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "Несоответствие скобок.\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11974,7 +11968,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "regsvr32: DLL «%1» успешно удалена\n" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -11984,7 +11978,7 @@ "документа приложений.\n" "Вызов ShellExecuteEx провалился" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "Невозможно перевести имя программы UNIX в имя DOS." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/sk.po wine-staging-1.7.47~ubuntu14.10.1/po/sk.po --- wine-staging-1.7.46~ubuntu14.10.1/po/sk.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/sk.po 2015-07-12 05:36:18.000000000 +0000 @@ -9388,13 +9388,13 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" msgstr "" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 #, fuzzy msgid "%1: File Not Found\n" msgstr "Súbor nenájdený" @@ -9460,68 +9460,68 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 #, fuzzy #| msgid "Can't delete current directory.\n" msgid "CHDIR changes the current default directory.\n" msgstr "Nemôžem zmazať aktuálny priečinok.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9530,27 +9530,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9562,7 +9562,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9571,47 +9571,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9634,29 +9633,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9666,68 +9665,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9738,21 +9737,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9762,17 +9761,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9780,42 +9779,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -9857,91 +9856,91 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "O" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 #, fuzzy msgid "No help available for %1\n" msgstr "Nie je k dispozícii; " -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "V" -#: cmd.rc:341 +#: cmd.rc:375 #, fuzzy msgid "Delete %1?" msgstr "" @@ -9950,96 +9949,96 @@ "#-#-#-#-# sk.po (Wine) #-#-#-#-#\n" "&Vymazať" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Áno|Nie)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Áno|Nie|Všetky)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 #, fuzzy #| msgid "Unexpected network error.\n" msgid "Expected an operator.\n" msgstr "Neočakávaná sieťová chyba.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11649,14 +11648,14 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" "ShellExecuteEx failed" msgstr "" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/sl.po wine-staging-1.7.47~ubuntu14.10.1/po/sl.po --- wine-staging-1.7.46~ubuntu14.10.1/po/sl.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/sl.po 2015-07-12 05:36:18.000000000 +0000 @@ -9620,7 +9620,7 @@ msgid "Referral hop limit exceeded" msgstr "Meja preskoka napotitev je bila presežena" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9628,7 +9628,7 @@ "Ni še podprto\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: datoteke ni mogoče najti\n" @@ -9710,26 +9710,25 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -"CALL se uporablja v paketni datoteki,\n" -"kadar želimo izvršiti ukaze iz druge paketne datoteke. Ko klicana paketna\n" -"datoteka preneha z izvajanjem, vrne nadzor nadrejeni datoteki (klicatelju).\n" -"Ukazu CALL je mogoče posredovati tudi parametre, ki naj bodo posredovani " -"klicani\n" +"CALL se uporablja v paketni datoteki, kadar želimo\n" +"izvršiti ukaze iz druge paketne datoteke. Ko klicana paketna datoteka\n" +"preneha z izvajanjem, vrne nadzor nadrejeni datoteki (klicatelju). Ukazu\n" +"CALL je mogoče posredovati tudi parametre, ki naj bodo posredovani klicani\n" "paketni datoteki.\n" "\n" -"Spremembe trenutne mape, okoljskih spremenljivk, itd., ki so napravljene " -"znotraj\n" -"klicane paketne datoteke, so posredovane klicatelju (nadrejeni datoteki).\n" +"Spremembe trenutne mape, okoljskih spremenljivk, itd., ki so napravljene\n" +"znotraj klicane paketne datoteke, so posredovane klicatelju (nadrejeni\n" +"datoteki).\n" -#: cmd.rc:43 +#: cmd.rc:44 #, fuzzy #| msgid "" #| "CD is the short version of CHDIR. It changes the current\n" @@ -9738,45 +9737,44 @@ "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -"CD je kratka različica CHDIR. Spremeni trenutno privzeto\n" -"mapo.\n" +"CD je kratka različica CHDIR. Spremeni trenutno privzeto mapo.\n" -#: cmd.rc:44 +#: cmd.rc:47 #, fuzzy #| msgid "CHDIR changes the current default directory.\n" msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR spremeni trenutno privzeto mapo.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS počisti zaslon konzole.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY kopira datoteko.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY spremeni vhodno/izhodno napravo.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE prikaže ali spremeni sistemski datum.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL izbriše datoteko ali več datotek.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR izpiše vsebino mape.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9790,11 +9788,11 @@ "ECHO OFF izključi učinek ukaza ECHO ON (privzeta vrednost za ECHO je OFF).\n" "Izpis ukaza ECHO OFF je mogoče preprečiti z dodajanjem znaka @ pred njim.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE izbriše datoteko ali več datotek.\n" -#: cmd.rc:71 +#: cmd.rc:85 #, fuzzy #| msgid "" #| "The FOR command is used to execute a command for each of a set of files.\n" @@ -9807,37 +9805,35 @@ "\n" "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -"Ukaz FOR se uporablja za izvrševanje ukaza za vsako datoteko iz podanega " +"Ukaz FOR se uporablja za izvrševanje ukaza za vsako datoteko iz podanega\n" "niza datotek.\n" "\n" "Skladnja: FOR %spremenljivka IN (niz) DO ukaz\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" "Ukaz GOTO premakne izvrševanje na drugo izjavo v paketni datoteki.\n" "\n" -"Ciljna oznaka za ukaz GOTO je lahko dolga največ 255 znakov, vendar za " -"razliko\n" -"od ostalih operacijskih sistemov ne sme vsebovati presledkov. Če v paketni\n" -"datoteki obstajata dve enaki oznaki, bo vedno izvršena le prva. Poskus " -"uporabe\n" -"ukaza GOTO z neobstoječo oznako povzroči konec izvrševanja paketne " -"datoteke.\n" +"Ciljna oznaka za ukaz GOTO je lahko dolga največ 255 znakov, vendar za\n" +"razliko od ostalih operacijskih sistemov ne sme vsebovati presledkov. Če v\n" +"paketni datoteki obstajata dve enaki oznaki, bo vedno izvršena le prva.\n" +"Poskus uporabe ukaza GOTO z neobstoječo oznako povzroči konec izvrševanja\n" +"paketne datoteke.\n" "\n" "V vzajemnem načinu ukaz GOTO nima nobenega učinka.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9845,7 +9841,7 @@ "HELP pokaže kratke podrobnosti pomoči o temi.\n" "HELP brez argumentov pokaže vse vgrajene ukaze CMD.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9865,7 +9861,7 @@ "V drugem primeru zgoraj morata biti niz1 in niz2 v dvojnih navedkih.\n" "Primerjava ni občutljiva na velikost črk.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9879,39 +9875,39 @@ "Ukaz vas pozove po novi oznaki nosilca za želeni pogon.\n" "Trenutno oznako diskovnega nosilca lahko prikažete z ukazom VOL.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD je kratko ime za MKDIR. Ustvari podmapo.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR ustvari podmapo.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" "MOVE premakne datoteko ali mapo na novo mesto v datotečnem sistemu.\n" "\n" -"Če premikate mapo, bo premaknjena tudi vsa njena vsebina (datoteke in " +"Če premikate mapo, bo premaknjena tudi vsa njena vsebina (datoteke in\n" "podmape).\n" "\n" -"MOVE ne more premikati datotek ali map med mesti na pogonih z različnimi " +"MOVE ne more premikati datotek ali map med mesti na pogonih z različnimi\n" "črkami DOS.\n" -#: cmd.rc:124 +#: cmd.rc:142 +#, fuzzy msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9920,28 +9916,26 @@ "PATH prikaže oz. spremeni iskalno pot za cmd.\n" "\n" "Sam ukaz PATH prikaže trenutno nastavitev PATH (v osnovi je le-ta enaka\n" -"vrednosti, ki je podana v datoteki wine.conf). Če želite spremeniti " -"nastavitev,\n" -"podajte novo vrednost kot parameter ukaza PATH.\n" -"\n" -"Nastavitev PATH je prav tako mogoče spremeniti z uporabo okoljske " -"spremenljivke\n" -"PATH. Na primer:\n" +"vrednosti, ki je podana v datoteki wine.conf). Če želite spremeniti\n" +"nastavitev, podajte novo vrednost kot parameter ukaza PATH.\n" +"\n" +"Nastavitev PATH je prav tako mogoče spremeniti z uporabo okoljske\n" +"spremenljivke PATH. Na primer:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE izpiše na zaslonu sporočilo, da naj uporabnik pritisnite na tipko.\n" "\n" -"Ukaz je uporaben v paketnih datotekah, ko želimo uporabniku omogočiti,\n" -"da prebere izhodna sporočila predhodnega ukaza, preden izginejo z zaslona.\n" +"Ukaz je uporaben v paketnih datotekah, ko želimo uporabniku omogočiti, da\n" +"prebere izhodna sporočila predhodnega ukaza, preden izginejo z zaslona.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9965,8 +9959,8 @@ msgstr "" "PROMPT spremeni ukazni poziv ukazne vrstice.\n" "\n" -"Niz, ki sledi ukazu PROMPT (vključno s presledkom, ki mu sledi)\n" -"se pojavi na začetku vrstice, ko cmd čaka na vnos.\n" +"Niz, ki sledi ukazu PROMPT (vključno s presledkom, ki mu sledi) se pojavi\n" +"na začetku vrstice, ko cmd čaka na vnos.\n" "\n" "Naslednji nizi imajo poseben pomen:\n" "\n" @@ -9975,44 +9969,43 @@ "$l Znak < $n Trenutni pogon $p Trenutna pot\n" "$q Enačaj $t Trenutni čas $v različica cmd\n" "\n" -"Ukaz PROMPT brez niza za nov poziv povzroči ponastavitev ukaznega poziva\n" -"na privzetega. Le-ta je sestavljen iz poti trenutne mape (vključno s črko " -"pogona),\n" -"ki ji sledi znak > (enakovredno ukazu PROMPT $p$g).\n" -"\n" -"Ukazni poziv je prav tako mogoče spremeniti z uporabo okoljske spremenljivke " -"PROMPT;\n" -"ukaz 'SET PROMPT=text' ima enak učinek kot 'PROMPT text'.\n" +"Ukaz PROMPT brez niza za nov poziv povzroči ponastavitev ukaznega poziva na\n" +"privzetega. Le-ta je sestavljen iz poti trenutne mape (vključno s črko\n" +"pogona), ki ji sledi znak > (enakovredno ukazu PROMPT $p$g).\n" +"\n" +"Ukazni poziv je prav tako mogoče spremeniti z uporabo okoljske\n" +"spremenljivke PROMPT; ukaz 'SET PROMPT=text' ima enak učinek kot\n" +"'PROMPT text'.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" "Vrstica, ki se začenja z REM (kateremu sledi presledek), se ne izvede in jo\n" "zato lahko uporabimo kot opombo v paketni datoteki.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "REN je kratka različice RENAME. Preimenuje datoteko.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME preimenuje datoteke.\n" -#: cmd.rc:161 +#: cmd.rc:181 #, fuzzy #| msgid "RD is the short version of RMDIR. It deletes a subdirectory.\n" msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD je kratka različica RMDIR. Izbriše podmapo.\n" -#: cmd.rc:162 +#: cmd.rc:183 #, fuzzy #| msgid "RMDIR deletes a subdirectory.\n" msgid "RMDIR deletes a directory.\n" msgstr "RMDIR izbriše podmapo.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -10022,14 +10015,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET prikaže oz. nastavi vrednost okoljskih spremenljivk.\n" "\n" @@ -10040,74 +10032,73 @@ "SET =\n" "\n" "kjer sta tako kot znakovna niza. Pred enačajem\n" -"ne sme biti presledka. Ime spremenljivke prav tako ne sme vsebovati " +"ne sme biti presledka. Ime spremenljivke prav tako ne sme vsebovati\n" "presledkov.\n" "\n" -"Pri Wine-u je okolje matičnega operacijskega sistema vključeno v okolje " -"Win32,\n" -"zato v splošnem le-to vsebuje več okoljskih spremenljivk kot jih resnično\n" -"okolje Win32. S programom cmd ni mogoče vplivati na okolje matičnega\n" -"operacijskega sistema.\n" - -#: cmd.rc:211 -msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" -msgstr "" -"SHIFT se uporablja v paketni datoteki za odstranitev prvega parametra s " -"seznama\n" -"parametrov; parameter 2 tako postane parameter 1, itd. Ukaz nima nobenega\n" -"učinka pri uporabi iz ukazne vrstice.\n" +"Pri Wine-u je okolje matičnega operacijskega sistema vključeno v okolje\n" +"Win32, zato v splošnem le-to vsebuje več okoljskih spremenljivk kot jih\n" +"resnično okolje Win32. S programom cmd ni mogoče vplivati na okolje\n" +"matičnega operacijskega sistema.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:234 msgid "" -"Start a program, or open a document in the program normally used for files " +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" +msgstr "" +"SHIFT se uporablja v paketni datoteki za odstranitev prvega parametra s\n" +"seznama parametrov; parameter 2 tako postane parameter 1, itd. Ukaz nima\n" +"nobenega učinka pri uporabi iz ukazne vrstice.\n" + +#: cmd.rc:212 start.rc:56 +msgid "" +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME nastavi ali prikaže trenutni sistemski čas.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "Nastavi naslov za okno cmd. Skladnja je: TITLE .\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" "TYPE prikaže vsebino datoteke na zaslonu (ali\n" "drugje, če gre za preusmeritev). Ukaz ne preveri, ali je vsebina datoteke v\n" "resnici berljivo besedilo.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10126,23 +10117,23 @@ "\n" "Zastavica preverjanja v Wine nima nobene zmožnosti.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER prikaže različico cmd, ki jo poganjate.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL pokaže oznako nosilca diskovne naprave.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -"ENDLOCAL konča lokaliziranje okoljskih sprememb v paketni datoteki,\n" -"ki so bile uvedene z vnosom SETLOCAL.\n" +"ENDLOCAL konča lokaliziranje okoljskih sprememb v paketni datoteki, ki so\n" +"bile uvedene z vnosom SETLOCAL.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10158,25 +10149,25 @@ "karkoli je prej). Takrat so obnovljene predhodne nastavitve\n" "okolja.\n" -#: cmd.rc:248 +#: cmd.rc:275 #, fuzzy #| msgid "" #| "PUSHD saves the current directory onto a\n" #| "stack, and then changes the current directory to the supplied one.\n" msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -"PUSHD shrani trenutno mapo v sklad in se nato\n" -"preseli v navedeno mapo.\n" +"PUSHD shrani trenutno mapo v sklad in se nato preseli v navedeno\n" +"mapo.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -"POPD se preseli iz trenutne mape v mapo, ki je bila nazadnje\n" -"shranjena z ukazom PUSHD.\n" +"POPD se preseli iz trenutne mape v mapo, ki je bila nazadnje shranjena z\n" +"ukazom PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10184,7 +10175,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC pokaže ali spremeni povezave pripon datotek\n" @@ -10193,58 +10184,57 @@ "\n" "ASSOC brez parametrov prikaže trenutne povezave datoteke.\n" "Če se uporablja samo s pripono datoteke, prikaže trenutno povezavo.\n" -"Če za enačajem ne določite vrste datoteke, so morebitne povezave datotek " +"Če za enačajem ne določite vrste datoteke, so morebitne povezave datotek\n" "odstranjene.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE pokaže ali spremeni odprte ukaze povezane z vrstami datotek\n" "\n" "Skladnja: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Brez parametrov pokaže vrste datotek za katere so odprti nizi ukazov " +"Brez parametrov pokaže vrste datotek za katere so odprti nizi ukazov\n" "trenutno določeni.\n" -"Če se uporablja samo z vrsto datoteke, prikaže povezan niz ukaza odprtja, če " -"obstaja.\n" -"Če ukaza odpiranja ne določite ukaz za enačajem odstrani ukazni niz, ki je " +"Če se uporablja samo z vrsto datoteke, prikaže povezan niz ukaza odprtja,\n" +"če obstaja.\n" +"Če ukaza odpiranja ne določite ukaz za enačajem odstrani ukazni niz, ki je\n" "povezan z določeno vrsto datoteke.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE prikaže vsebino datotek ali preusmerjenega vnosa v straneh.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE prikazuje besedilo in čaka dokler uporabnik\n" -"ne pritisne omogočene tipke iz izberljivega seznama.\n" -"CHOICE se uporablja predvsem za izgradnjo izberljivega menija v paketni " +"CHOICE prikazuje besedilo in čaka dokler uporabnik ne pritisne omogočene\n" +"tipke iz izberljivega seznama.\n" +"CHOICE se uporablja predvsem za izgradnjo izberljivega menija v paketni\n" "datoteki.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT konča trenutno ukazno sejo in vrne ustrezno stanje operacijskemu " -"sistemu\n" -"ali ukazni lupini, iz katere ste priklicali cmd.\n" +"EXIT konča trenutno ukazno sejo in vrne ustrezno stanje operacijskemu\n" +"sistemu ali ukazni lupini, iz katere ste priklicali cmd.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10299,7 +10289,8 @@ "DIR\t\tIzpiše vsebino mape\n" "ECHO\t\tPrikaže besedilo v konzoli\n" "ENDLOCAL\tKonča prevednost sprememb okolja v paketni datoteki\n" -"FTYPE\t\tPokaže ali spremeni odprte ukaze, ki so povezani z vrstami datotek\n" +"FTYPE\t\tPokaže ali spremeni odprte ukaze, ki so povezani z vrstami\n" +"\t\tdatotek\n" "HELP\t\tPrikaže kratko besedilo s pomočjo o želeni temi\n" "MD (MKDIR)\tUstvari podmapo\n" "MORE\t\tIzpiše besedilo po straneh\n" @@ -10325,110 +10316,110 @@ "Uporabite HELP za več podrobnosti o kateremkoli od zgoraj navedenih\n" "ukazov.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Ali ste prepričani?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "D" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Manjka povezava datoteke za pripono %1\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Noben ukaz za odprtje ni povezan z vrsto datotek '%1'\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Prepiši %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Več ..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "Vrstica v paketni datoteki je morda skrajšana. Uporaba:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Argument manjka\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Napaka skladnje\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Za %1 ni pomoči na voljo\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Cilja ukaza GOTO ni mogoče najti\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Trenutni datum je %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Trenutni čas je %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Vnesite nov datum: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Vnesite nov čas: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Okoljska spremenljivka %1 ni določena\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Odpiranje '%1' je spodletelo\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Klic paketne oznake zunaj paketnega skripta ni mogoč\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "V" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Izbriši %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Odmev je %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Preverjanje je %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Vrednost zastavice preverjanja mora biti ON ali OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Napaka parametra\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10436,74 +10427,74 @@ "Zaporedna št. nosilca je %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Oznaka nosilca (11 znakov, za brez)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "POTI ni mogoče najti\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Pritisnite katerokoli tipko za nadaljevanje ... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Ukazni poziv Wine" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Več? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "Vhodna vrstica je predolga.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "Nosilec v pogonu %1!c! je %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "Nosilec v pogonu %1!c! nima oznake.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Da|Ne)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Da|Ne|Vse)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 #, fuzzy #| msgid "Unexpected network error.\n" msgid "Expected an operator.\n" msgstr "Nepričakovana napaka omrežja.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12157,7 +12148,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12167,7 +12158,7 @@ "program.\n" "Ukaz ShellExecuteEx ni uspel" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "Navedenega imena datoteke Unix ni mogoče prevesti v DOS ime datoteke." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/sr_RS@cyrillic.po wine-staging-1.7.47~ubuntu14.10.1/po/sr_RS@cyrillic.po --- wine-staging-1.7.46~ubuntu14.10.1/po/sr_RS@cyrillic.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/sr_RS@cyrillic.po 2015-07-12 05:36:18.000000000 +0000 @@ -9733,13 +9733,13 @@ msgid "Referral hop limit exceeded" msgstr "Ограничење чвора упућивача је прекорачено" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" msgstr "" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 #, fuzzy msgid "%1: File Not Found\n" msgstr "Датотека није пронађена" @@ -9805,66 +9805,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9873,27 +9873,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9905,7 +9905,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9914,47 +9914,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9977,29 +9976,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -10009,68 +10008,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10081,21 +10080,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10105,17 +10104,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10123,42 +10122,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10200,188 +10199,188 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 #, fuzzy msgid "Overwrite %1?" msgstr "Заменити %s? (Да|Не|Све)\n" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 #, fuzzy msgid "No help available for %1\n" msgstr "Недоступно; " -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 #, fuzzy msgid "Current Date is %1\n" msgstr "&Текућа страна" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 #, fuzzy msgid "Failed to open '%1'\n" msgstr "Отварање „%s“ датотеке није успело\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 #, fuzzy msgid "Delete %1?" msgstr "&Избриши" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 #, fuzzy msgid " (Yes|No)" msgstr "%s? (Да|Не)\n" -#: cmd.rc:357 +#: cmd.rc:391 #, fuzzy msgid " (Yes|No|All)" msgstr "%s? (Да|Не)\n" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12074,14 +12073,14 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" "ShellExecuteEx failed" msgstr "" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/sr_RS@latin.po wine-staging-1.7.47~ubuntu14.10.1/po/sr_RS@latin.po --- wine-staging-1.7.46~ubuntu14.10.1/po/sr_RS@latin.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/sr_RS@latin.po 2015-07-12 05:36:18.000000000 +0000 @@ -9834,13 +9834,13 @@ msgid "Referral hop limit exceeded" msgstr "Ograničenje čvora upućivača je prekoračeno" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" msgstr "" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 #, fuzzy msgid "%1: File Not Found\n" msgstr "Datoteka nije pronađena" @@ -9906,66 +9906,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9974,27 +9974,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -10006,7 +10006,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -10015,47 +10015,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -10078,29 +10077,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -10110,68 +10109,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10182,21 +10181,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10206,17 +10205,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10224,42 +10223,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10301,188 +10300,188 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 #, fuzzy msgid "Overwrite %1?" msgstr "Zameniti %s? (Da|Ne|Sve)\n" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 #, fuzzy msgid "No help available for %1\n" msgstr "Nedostupno; " -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 #, fuzzy msgid "Current Date is %1\n" msgstr "&Tekuća strana" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 #, fuzzy msgid "Failed to open '%1'\n" msgstr "Otvaranje „%s“ datoteke nije uspelo\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 #, fuzzy msgid "Delete %1?" msgstr "&Izbriši" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 #, fuzzy msgid " (Yes|No)" msgstr "%s? (Da|Ne)\n" -#: cmd.rc:357 +#: cmd.rc:391 #, fuzzy msgid " (Yes|No|All)" msgstr "%s? (Da|Ne)\n" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12221,14 +12220,14 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" "ShellExecuteEx failed" msgstr "" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/sv.po wine-staging-1.7.47~ubuntu14.10.1/po/sv.po --- wine-staging-1.7.46~ubuntu14.10.1/po/sv.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/sv.po 2015-07-12 05:36:18.000000000 +0000 @@ -9503,7 +9503,7 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9511,7 +9511,7 @@ "Ännu ej implementerat\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: Kunde inte hitta filen\n" @@ -9575,10 +9575,10 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" @@ -9591,7 +9591,7 @@ "Ändringar av standardsökväg, miljövariabler o.s.v. som görs inom en anropad\n" "process ärvs av den som anropar processen.\n" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" @@ -9599,40 +9599,40 @@ "CD är en synonym för CHDIR. Den används för att\n" "ändra standardsökväg.\n" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR ändrar standardsökväg.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS rensar konsollen från text.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY kopierar en fil.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY ändrar input/output-enheter.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE visar eller ändrar systemets datum.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL tar bort en eller flera filer.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR visar mappens innehåll.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9643,16 +9643,15 @@ "ECHO ON gör att alla följdkommandon från en batchfil skrivs ut i terminalen\n" "innan dessa exekveras.\n" "\n" -"ECHO OFF tar bort effekten av ett föregående ECHO ON. (ECHO är\n" -"OFF (avstängd) som standard.) Du kan förhindra ECHO OFF från att visas " -"genom\n" +"ECHO OFF tar bort effekten av ett föregående ECHO ON. (ECHO är OFF\n" +"(avstängd) som standard.) Du kan förhindra ECHO OFF från att visas genom\n" "att lägga till ett @-tecken innan kommandot.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE tar bort en eller flera filer.\n" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9666,31 +9665,30 @@ "\n" "%-tecknet måste dubbleras när FOR används i en batchfil.\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -"Kommandot GOTO överlåter exekvering till ett annat påstående\n" -"i en batchfil.\n" +"Kommandot GOTO överlåter exekvering till ett annat påstående i en batchfil.\n" "\n" -"En etikett som är målet för ett GOTO kan innehålla upp till 255 tecken,\n" -"men blanksteg tillåts ej (till skillnad från andra operativsystem).\n" -"Om två eller flera identiska etiketter existerar i en batchfil, så kommer\n" -"alltid den första exekveras. Vid försök att använda GOTO till en icke\n" -"existerande etikett så avbryts batchfilens exekvering.\n" +"En etikett som är målet för ett GOTO kan innehålla upp till 255 tecken, men\n" +"blanksteg tillåts ej (till skillnad från andra operativsystem). Om två\n" +"eller flera identiska etiketter existerar i en batchfil, så kommer alltid\n" +"den första exekveras. Vid försök att använda GOTO till en icke existerande\n" +"etikett så avbryts batchfilens exekvering.\n" "\n" "GOTO har ingen effekt när det används interaktivt.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9698,7 +9696,7 @@ "HELP skriver ut mer detaljerad information ang. ämnet.\n" "HELP utan ett argument visar alla inbyggda CMD-kommandon.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9718,7 +9716,7 @@ "I den andra IF-satsen måste sträng1 och sträng2 vara inom citattecken.\n" "IF bryr sej inte om stora eller små bokstäver.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9732,23 +9730,22 @@ "Kommandot kommer fråga dig efter enhetens nya namn.\n" "Du kan visa enhetens namn genom att använda kommandot VOL.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" "MD är en synonym för MKDIR.\n" "Den skapar en ny mapp i mappen du befinner dig i.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR skapar en ny mapp i mappen du befinner dig i.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" @@ -9759,13 +9756,13 @@ "MOVE misslyckas om den gamla och det den nya stället är på olika\n" "DOS-enhetsbokstäver.\n" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9773,27 +9770,27 @@ msgstr "" "PATH visar eller ändrar cmd:s sökväg.\n" "\n" -"Om du skriver enbart PATH så visas den aktuella sökvägen\n" -"(som står i windowsregistret). För att ändra på denna inställning,\n" -"skriv PATH och sedan den nya sökvägen.\n" +"Om du skriver enbart PATH så visas den aktuella sökvägen (som står i\n" +"windowsregistret). För att ändra på denna inställning, skriv PATH och sedan\n" +"den nya sökvägen.\n" "\n" "Det går också att ändra PATH genom att använda PATH:s miljövariabler.\n" "Till exempel:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE visar ett meddelande som ber användaren att trycka på en tangent.\n" "\n" "PAUSE används mestadels i batchfiler så att användaren hinner läsa\n" "resultatet av ett kört kommando innan det rullar av skärmen.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9817,8 +9814,8 @@ msgstr "" "PROMPT ändrar promptens utseende.\n" "\n" -"Inmatad sträng efter PROMPT-kommandot (och följande blanksteg)\n" -"visas i början av nästa rad, när cmd väntar på inmatning.\n" +"Inmatad sträng efter PROMPT-kommandot (och följande blanksteg) visas i\n" +"början av nästa rad, när cmd väntar på inmatning.\n" "\n" "Följande tecken betyder:\n" "\n" @@ -9833,35 +9830,35 @@ "och ett större än-tecken (>).\n" "(Som kommandot PROMPT $p$g.)\n" "\n" -"Prompten går att ändra genom att modifiera miljövariabeln PROMPT,\n" -"så kommandot 'SET PROMPT=text' har samma effekt som 'PROMPT text'.\n" +"Prompten går att ändra genom att modifiera miljövariabeln PROMPT, så\n" +"kommandot 'SET PROMPT=text' har samma effekt som 'PROMPT text'.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" "En kommandorad som börjar på REM (med ett blanksteg efter) ignoreras.\n" "Därav kan REM användas för att kommentera rader i en batchfil.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" "REN är en synonym för kommandot RENAME. REN döper om en fil.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME döper om en fil.\n" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD är en synonym för RMDIR. RD tar bort vald plats.\n" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "RMDIR tar bort vald plats.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9871,14 +9868,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET visar eller ändrar cmd:s miljövariabler.\n" "\n" @@ -9888,71 +9884,72 @@ "\n" "SET =\n" "\n" -"där och är teckensträngar. Inga blanksteg är\n" -"tillåtna varken innan lika med tecknet eller inom variabel namnet.\n" +"där och är teckensträngar. Inga blanksteg är tillåtna\n" +"varken innan lika med tecknet eller inom variabel namnet.\n" "\n" -"I Wine inkluderas miljövariabler från det underliggande operativsystemet\n" -"i Win32-miljön vilket resulterar i att det finns många fler värden\n" -"än i en riktig Win32-implementation. Notera att det inte går att påverka\n" +"I Wine inkluderas miljövariabler från det underliggande operativsystemet i\n" +"Win32-miljön vilket resulterar i att det finns många fler värden än i en\n" +"riktig Win32-implementation. Notera att det inte går att påverka\n" "operativsystemets miljövariabler via cmd.\n" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -"SHIFT används i batchfiler för att ta bort en parameter högst upp på\n" -"listan så att parameter 2 blir parameter 1 o.s.v. SHIFT har ingen effekt\n" -"om det anropas ifrån kommandoraden.\n" +"SHIFT används i batchfiler för att ta bort en parameter högst upp på listan\n" +"så att parameter 2 blir parameter 1 o.s.v. SHIFT har ingen effekt om det\n" +"anropas ifrån kommandoraden.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME ställer in eller skriver ut ditt systems tid.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE ändrar fönsternamn för cmd-fönstret.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" "TYPE kopierar till konsollen (eller annanstans om\n" "angivet). TYPE kollar inte vad filen i fråga är för typ av fil.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9971,21 +9968,21 @@ "\n" "Det finns dock ingen användning för verifieraflaggor i Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER visar körd version av cmd.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL visar namnet på en diskvolym.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9995,19 +9992,19 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -"PUSHD sparar nuvarande sökväg i en stack,\n" -"och ändrar sedan sökvägen till den angivna mappen.\n" +"PUSHD sparar nuvarande sökväg i en stack, och ändrar sedan sökvägen\n" +"till den angivna mappen.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD ändrar nuvarande sökväg till den senast angivna i PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10015,47 +10012,47 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE visar filer eller inmatad text på sidor.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE visar en text och väntar tills användaren\n" -"trycker ner en tangent från en valbar lista.\n" +"CHOICE visar en text och väntar tills användaren trycker ner en tangent\n" +"från en valbar lista.\n" "CHOICE används främst för att skapa menyval i batchfiler.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT avslutar cmd och skickar tillbaks användaren till\n" -"operativsystemet eller skalet som cmd startades ifrån.\n" +"EXIT avslutar cmd och skickar tillbaks användaren till operativsystemet\n" +"eller skalet som cmd startades ifrån.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10136,110 +10133,110 @@ "\n" "Skriv HELP för mer information om något av kommandona ovanför.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Är du säker?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "J" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Det finns ingen filassociation för filformat %1\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Ingen kommando förknippat med filtyp '%1'\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Skriva över %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Mer..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "En rad i batch möjligtvis trunkerad. Använder:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Argument saknas\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Syntaxfel\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Ingen hjälp tillgänglig för %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Mål för GOTO ej funnet\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Dagens datum är %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Tiden är %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Skriv nytt datum: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Skriv in den nya tiden: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Miljövariabeln %1 ej definierad\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Misslyckades med att öppna '%1'\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Går ej att anropa en batchetikett utanför ett batchskript\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "A" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Ta bort %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Ekot är %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Verifiera är %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verifiera måste vara ON (på) eller OFF (av)\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Parameterfel\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10247,72 +10244,72 @@ "Diskvolymens serienummer är %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Diskvolymens namn (11 tecken, tryck för inget)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "Sökväg ej funnen\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Tryck på en tangent för att fortsätta... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Wine kommandoprompt" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Mer? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "Inmatningen är för lång.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Ja|Nej)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Ja|Nej|Alla)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "Operator förväntades.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11924,7 +11921,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -11934,7 +11931,7 @@ "angivna filen.\n" "'ShellExecuteEx' misslyckades" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "Kunde inte konvertera Unix-filnamnet till ett DOS-filnamn." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/te.po wine-staging-1.7.47~ubuntu14.10.1/po/te.po --- wine-staging-1.7.46~ubuntu14.10.1/po/te.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/te.po 2015-07-12 05:36:18.000000000 +0000 @@ -9202,13 +9202,13 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" msgstr "" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "" @@ -9273,66 +9273,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9341,27 +9341,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9373,7 +9373,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9382,47 +9382,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9445,29 +9444,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9477,68 +9476,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9549,21 +9548,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9573,17 +9572,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9591,42 +9590,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -9668,181 +9667,181 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr "" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr "" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11406,14 +11405,14 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" "ShellExecuteEx failed" msgstr "" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/th.po wine-staging-1.7.47~ubuntu14.10.1/po/th.po --- wine-staging-1.7.46~ubuntu14.10.1/po/th.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/th.po 2015-07-12 05:36:18.000000000 +0000 @@ -9387,13 +9387,13 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" msgstr "" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 #, fuzzy msgid "%1: File Not Found\n" msgstr "ไม่พบแฟ้ม" @@ -9464,66 +9464,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9532,27 +9532,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9564,7 +9564,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9573,47 +9573,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9636,29 +9635,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9668,68 +9667,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9740,21 +9739,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9764,17 +9763,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9782,42 +9781,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -9859,183 +9858,183 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 #, fuzzy msgid "No help available for %1\n" msgstr "ใช้ไม่ได้ตอนนี้; " -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 #, fuzzy msgid "Delete %1?" msgstr "ลบ\tDel" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr "" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr "" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11647,14 +11646,14 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" "ShellExecuteEx failed" msgstr "" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/tr.po wine-staging-1.7.47~ubuntu14.10.1/po/tr.po --- wine-staging-1.7.46~ubuntu14.10.1/po/tr.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/tr.po 2015-07-12 05:36:18.000000000 +0000 @@ -9539,7 +9539,7 @@ msgid "Referral hop limit exceeded" msgstr "Paketin gönderildiği yönlendirici sınırı aşıldı" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9547,7 +9547,7 @@ "Henüz Geliştirilmedi\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: Dosya Bulunamadı\n" @@ -9629,64 +9629,64 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -"CALL komutu bir toplu işlem dosyasında başka bir\n" -"toplu işlem dosyasındaki komutları çalıştırmak için kullanılır. Eğer\n" -"dosya mevcutsa, denetim yine onu çağıran dosyaya döner. CALL komutu\n" -"çağrılan yordamlar için parametre verebilir.\n" +"CALL komutu bir toplu işlem dosyasında başka bir toplu\n" +"işlem dosyasındaki komutları çalıştırmak için kullanılır. Eğer dosya\n" +"mevcutsa, denetim yine onu çağıran dosyaya döner. CALL komutu çağrılan\n" +"yordamlar için parametre verebilir.\n" "\n" "Çağrılan bir yordamda değiştirilen dizinler, çevre değişkenleri vb.\n" "kendisini çağıran tarafından miras alınır.\n" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -"CD CHDIR komutunun kısa sürümüdür. Geçerli\n" -"öntanımlı dizini değiştirir.\n" +"CD CHDIR komutunun kısa sürümüdür. Geçerli öntanımlı dizini\n" +"değiştirir.\n" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR geçerli öntanımlı dizini değiştirir.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS konsol ekranını temizler.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY bir dosya kopyalar.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY girdi/çıktı aygıtını değiştirir.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE sistem tarihini gösterir ve değiştirir.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL bir veya birçok dosyayı siler.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR bir dizinin içeriklerini listeler.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9701,11 +9701,11 @@ "tersini yapar. ECHO OFF çıktısının görüntülenmesini başına @ işareti\n" "getirerek engelleyebilirsiniz.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE bir veya birçok dosyayı siler.\n" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9720,16 +9720,16 @@ "\n" "% sembolü toplu iş dosyasında FOR kullanılırken iki kez kullanılmalıdır.\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" @@ -9744,7 +9744,7 @@ "\n" "GOTO komutunun etkileşimli olarak kullanımının bir etkisi yoktur.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9752,7 +9752,7 @@ "HELP bir konuda özet yardımı gösterir.\n" "Bir argüman kullanılmayan HELP, tüm dahili CMD komutlarını gösterir.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9772,7 +9772,7 @@ "İkinci biçimde dize1 ve dize2 çift tırnak içerisinde olmalıdır.\n" "Karşılaştırma BÜYÜK/küçük harf duyarlı değildir.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9786,21 +9786,20 @@ "Komut sizden verilen sürücü için yeni bir etiket girmenizi bekleyecektir.\n" "Disk bölüm etiketini VOL komutu ile gösterebilirsiniz.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD MKDIR komutunun kısa sürümüdür. Bir alt dizin oluşturur.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR bir alt dizin oluşturur.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" @@ -9812,13 +9811,14 @@ "Eğer eski ve yeni konumlar farklı DOS sürücüleri üzerindeyse MOVE hata\n" "verecektir.\n" -#: cmd.rc:124 +#: cmd.rc:142 +#, fuzzy msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9827,26 +9827,26 @@ "PATH cmd arama yolunu gösterir veya değiştirir.\n" "\n" "Sadece PATH girmek geçerli PATH ayarını gösterecektir (başlangıçta bu\n" -"wine.conf dosyanızda verilen değer olacaktır). Ayarı değiştirmek için\n" -"PATH komutuna yeni değeri ekleyin.\n" +"wine.conf dosyanızda verilen değer olacaktır). Ayarı değiştirmek için PATH\n" +"komutuna yeni değeri ekleyin.\n" "\n" "Ayrıca PATH ayarını düzenlemek için PATH çevre değikenini de\n" "kullanabilirsiniz, örneğin:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE Ekranda kullanıcının bir tuşa basmasını bekleyen bir mesaj gösterir.\n" "\n" "Çoğunlukla toplu işlem dosyalarında kullanıcıya önceki komutun çıktısını\n" "ekrandan çıkmadan önce okumak için kullanılır.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9885,38 +9885,38 @@ "dönecektir.\n" "(PROMPT $p$g komutu gibi).\n" "\n" -"Komut istemi ayrıca PROMPT çevre değişkeni değiştirilerek de " +"Komut istemi ayrıca PROMPT çevre değişkeni değiştirilerek de\n" "belirlenebilir.\n" "Yani 'SET PROMPT=metin' ile 'PROMPT metin' aynı işi görür.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -"REM (ardından da bir boşluk) ile başlayan bir komut satırının\n" -"hiçbir işlevi yoktur; dolayısıyla toplu işlem dosyalarında\n" -"açıklama olarak kullanılabilir.\n" +"REM (ardından da bir boşluk) ile başlayan bir komut satırının hiçbir işlevi\n" +"yoktur; dolayısıyla toplu işlem dosyalarında açıklama olarak\n" +"kullanılabilir.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" "REN RENAME komutunun kısa sürümüdür. Bir dosyayı yeniden " "adlandırır.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME bir dosyayı yeniden adlandırır.\n" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD RMDIR komutunun kısa sürümüdür. Bir dizini siler.\n" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "RMDIR bir dizini siler.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9926,14 +9926,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET cmd çevre değişkenlerini gösterir veya değiştirir.\n" "\n" @@ -9943,98 +9942,99 @@ "\n" "SET =\n" "\n" -" ve karakter dizeleridir. Ne eşittir işaretinden\n" -"önce ne de değişken adı içerisinde boşluk bulunabilir.\n" +" ve karakter dizeleridir. Ne eşittir işaretinden önce ne\n" +"de değişken adı içerisinde boşluk bulunabilir.\n" "\n" "Wine altında, üzerinde çalışılan işletim sistemi çevresi Win32 çevresine\n" -"dahil edilir. Dolayısıyla doğal bir Win32 gerçeklemesinden daha fazla\n" -"değer bulunacaktır. cmd altında işletim sistemi çevresini değiştirmek\n" -"mümkün değildir.\n" - -#: cmd.rc:211 -msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"dahil edilir. Dolayısıyla doğal bir Win32 gerçeklemesinden daha fazla değer\n" +"bulunacaktır. cmd altında işletim sistemi çevresini değiştirmek mümkün\n" +"değildir.\n" + +#: cmd.rc:234 +msgid "" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "SHIFT toplu işlem dosyasında parametre listesinin başından bir tanesini\n" "siler. Böylece 2. parametre 1. parametre olacaktır. Komut satırında\n" "çağrıldığında bir etkisi yoktur.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -"Normalde bu son eki kullanan dosyalar için program içerisinde bir program " +"Normalde bu son eki kullanan dosyalar için program içerisinde bir program\n" "başlat veya belge aç.\n" "Kullanım:\n" "start [seçenekler] program_dosyaadı [...]\n" "start [seçenekler] belge_dosyaadı\n" "\n" "Seçenekler:\n" -"\"başlık\" Alt pencerelerin başlığını belirtir.\n" -"/d dizin Programı belirtilen dizinde başlat.\n" -"/b Program için yeni bir konsol oluşturma.\n" -"/i Programı taze ortam değişkenleri ile başlat.\n" -"/min Programı simge durumunda başlat.\n" -"/max Programı ekran kaplanmış başlat.\n" -"/low Programı boşta öncelik sınıfı ile başlat.\n" -"/normal Programı normal öncelik sınıfı ile başlat.\n" -"/high Programı yüksek öncelik sınıfı ile başlat.\n" -"/realtime Programı gerçek zaman öncelik sınıfı ile başlat.\n" -"/abovenormal Programı normal üstü öncelik sınıfı ile başlat.\n" -"/belownormal Programı normal altı öncelik sınıfı ile başlat.\n" -"/node n Programı belirtilen NUMA kipinde başlat.\n" +"\"başlık\" Alt pencerelerin başlığını belirtir.\n" +"/d dizin Programı belirtilen dizinde başlat.\n" +"/b Program için yeni bir konsol oluşturma.\n" +"/i Programı taze ortam değişkenleri ile başlat.\n" +"/min Programı simge durumunda başlat.\n" +"/max Programı ekran kaplanmış başlat.\n" +"/low Programı boşta öncelik sınıfı ile başlat.\n" +"/normal Programı normal öncelik sınıfı ile başlat.\n" +"/high Programı yüksek öncelik sınıfı ile başlat.\n" +"/realtime Programı gerçek zaman öncelik sınıfı ile başlat.\n" +"/abovenormal Programı normal üstü öncelik sınıfı ile başlat.\n" +"/belownormal Programı normal altı öncelik sınıfı ile başlat.\n" +"/node n Programı belirtilen NUMA kipinde başlat.\n" "/affinity maske Programı belirtilen yakınlık maskesi ile başlat.\n" -"/wait Başlatılan programın bitmesini bekle ve ardından çıkış koduyla " -"çık.\n" -"/unix Bir Unix dosya adı kullan ve dosyayı windows gezgini benzeri " -"bir biçimde başlat.\n" -"/ProgIDOpen Belirtilen program kimliği kullanarak bir belge aç.\n" -"/? Bu yardımı görüntüle ve çık.\n" +"/wait Başlatılan programın bitmesini bekle ve ardından çıkış\n" +" koduyla çık.\n" +"/unix Bir Unix dosya adı kullan ve dosyayı windows gezgini\n" +" benzeri bir biçimde başlat.\n" +"/ProgIDOpen Belirtilen program kimliği kullanarak bir belge aç.\n" +"/? Bu yardımı görüntüle ve çık.\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TIELE cmd penceresi için pencere başlığını ayarlar.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" "TYPE komutu 'nı konsol aygıtına kopyalar (eğer\n" "yönlendirilmişse başka yere). Dosyanın okunabilirliği denetlenmez.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10052,21 +10052,21 @@ "\n" "Doğrulama bayrağının Wine'da bir işlevi yoktur.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10076,17 +10076,19 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" +"CD CHDIR komutunun kısa sürümüdür. Geçerli öntanımlı dizini " +"değiştirir.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10094,47 +10096,47 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE bir metin görüntüler ve Kullanıcı seçilebilir listeden\n" -"izin verilen bir tuşa basıncaya kadar bekler.\n" +"CHOICE bir metin görüntüler ve Kullanıcı seçilebilir listeden izin verilen\n" +"bir tuşa basıncaya kadar bekler.\n" "CHOICE çoğu zaman bir toplu dosyada menü seçimi inşası için kullanılır.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT geçerli komut oturumunu sonlandırır ve cmd'yi çağırdığınız\n" -"yerden işletim sistemine döner.\n" +"EXIT geçerli komut oturumunu sonlandırır ve cmd'yi çağırdığınız yerden\n" +"işletim sistemine döner.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10188,10 +10190,10 @@ "DEL (ERASE)\tBir veya daha fazla dosyayı sil\n" "DIR\t\tDizin içeriğini listele\n" "ECHO\t\tMetni doğrudan konsol çıkışına kopyala\n" -"ENDLOCAL\tOrtam değişiklikleri yerelleştirmesini, bir toplu dosyada " -"sonlandır\n" -"FTYPE\t\tDosya türleri ile ilişkilendirilmiş aç komutlarını göster veya " -"düzenle\n" +"ENDLOCAL\tOrtam değişiklikleri yerelleştirmesini, bir toplu dosyada\n" +"\t\tsonlandır\n" +"FTYPE\t\tDosya türleri ile ilişkilendirilmiş aç komutlarını göster veya\n" +"\t\tdüzenle\n" "HELP\t\tBir konu üzerinde özet yardım göster\n" "MD (MKDIR)\tAlt dizin oluştur\n" "MORE\t\tDisplay output in pages\n" @@ -10216,110 +10218,110 @@ "\n" "Yukarıdaki komutlar hakkında daha fazla bilgi için HELP girin.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Emin misin?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "E" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "H" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "%1 uzantısı için dosya ilişkilendirmesi eksik\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "'%1' dosya türü için ilişkilendirilmiş bir aç komutu yok\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "%1 Üzerine Yaz?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Daha Fazla..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Eksik argüman\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Sözdizimi hatası\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "%1 için yardım kullanılabilir bir yardım yok\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "GOTO'ya hedef bulunamadı\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Şimdiki Tarih %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Şimdiki Saat %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Yeni tarih gir: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Yeni zaman gir: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "%1 ortam değişkeni tanımlı değil\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "'%1' açılamadı\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "T" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "%1 sil ?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Çıktı %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Doğrulama %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Parametre hatası\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10327,72 +10329,72 @@ "Birim Seri Numarası %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Birim etiketi (11 karakter, hiçbir şey)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH bulunamadı\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Devam etmek için bir tuşa basın... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Wine Komut İstemi" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Daha Fazla? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "Girdi satırı çok uzun.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "%1!c! sürücüsündeki birim %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "%1!c! sürücüsündeki birimin etiketi yok.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Evet|Hayır)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Evet|Hayır|Tümü)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "Sıfır ile bölme hatası.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "Bir terim bekleniyor.\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "Bir işleç bekleniyor.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "Dengelenmemiş parantez.\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11983,7 +11985,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -11992,7 +11994,7 @@ "Uygulama başlatılamadı veya belirtilen dosya ile ilişkili bir uygulama yok.\n" "ShellExecuteEx başarısız" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/uk.po wine-staging-1.7.47~ubuntu14.10.1/po/uk.po --- wine-staging-1.7.46~ubuntu14.10.1/po/uk.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/uk.po 2015-07-12 05:36:18.000000000 +0000 @@ -9561,7 +9561,7 @@ msgid "Referral hop limit exceeded" msgstr "Перевищено граничну кількість пересилання посилань" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9569,7 +9569,7 @@ "Ще не реалізовано\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: Файл не знайдено\n" @@ -9651,24 +9651,23 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -"CALL <ім'я_пакетного_файлу> використовується в пакетному файлі для " -"виконання\n" -"команд з іншого пакетного файлу. Якщо пакетний файл існує, керування\n" -"повертається до файлу, який його викликав. Команда CALL може передати\n" -"параметри до викликаної процедури.\n" +"CALL <ім'я_пакетного_файлу> використовується в пакетному файлі для\n" +"виконання команд з іншого пакетного файлу. Якщо пакетний файл існує,\n" +"керування повертається до файлу, який його викликав. Команда CALL може\n" +"передати параметри до викликаної процедури.\n" "\n" "Зміни теки за замовчуванням, змінних оточення та ін., зроблені викликаною\n" "процедурою, успадковуються тим, хто її викликав.\n" -#: cmd.rc:43 +#: cmd.rc:44 #, fuzzy #| msgid "" #| "CD is the short version of CHDIR. It changes the current\n" @@ -9677,45 +9676,45 @@ "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -"CD <тека> це короткий варіант CHDIR. Вона змінює поточну\n" -"теку за зомовчуванням.\n" +"CD <тека> це короткий варіант CHDIR. Вона змінює поточну теку за\n" +"зомовчуванням.\n" -#: cmd.rc:44 +#: cmd.rc:47 #, fuzzy #| msgid "CHDIR changes the current default directory.\n" msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR <тека> змінює поточну теку за замовчуванням.\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS очищує екран консолі.\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY <ім'я_файлу> копіює файл.\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY змінює пристрій вводу/виводу.\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE показує чи змінює системну дату.\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL <ім'я_файлу> видаляє файл чи набір файлів.\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR показує вміст теки.\n" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9723,18 +9722,18 @@ msgstr "" "ECHO <рядок> відображає <рядок> на поточному термінальному пристрої.\n" "\n" -"ECHO ON вмикає відображення всіх наступних команд пакетного файлу\n" -"в термінальному пристрої перед їх виконанням.\n" +"ECHO ON вмикає відображення всіх наступних команд пакетного файлу в\n" +"термінальному пристрої перед їх виконанням.\n" "\n" -"ECHO OFF дає протилежний ефект до попередньої ECHO ON (ECHO вимкнено\n" -"(OFF) за замовчуванням). Команда ECHO OFF може бути прихована зазначенням\n" -"перед нею знаку @.\n" +"ECHO OFF дає протилежний ефект до попередньої ECHO ON (ECHO вимкнено (OFF)\n" +"за замовчуванням). Команда ECHO OFF може бути прихована зазначенням перед\n" +"нею знаку @.\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE <ім'я_файлу> видаляє файл чи набір файлів.\n" -#: cmd.rc:71 +#: cmd.rc:85 #, fuzzy #| msgid "" #| "The FOR command is used to execute a command for each of a set of files.\n" @@ -9751,30 +9750,30 @@ "\n" "Синтаксис: FOR %змінна IN (набір) DO команда\n" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" "Команда GOTO передає керування певному рядку пакетного файлу.\n" "\n" -"Мітка, що є ціллю GOTO, може мати довжину до 255 знаків, але\n" -"не повинна містити пробіли (відмінність від інших операційних\n" -"систем). Якщо в пакетному файлі є дві чи більше однакових мітки,\n" -"завжди буде працювати перша. Спроба GOTO перейти до неіснуючої\n" -"мітки перериває виконання пакетного файлу.\n" +"Мітка, що є ціллю GOTO, може мати довжину до 255 знаків, але не повинна\n" +"містити пробіли (відмінність від інших операційних систем). Якщо в\n" +"пакетному файлі є дві чи більше однакових мітки, завжди буде працювати\n" +"перша. Спроба GOTO перейти до неіснуючої мітки перериває виконання\n" +"пакетного файлу.\n" "\n" "GOTO не працює в інтерактивному режимі.\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9782,7 +9781,7 @@ "HELP <команда> показує коротку довідкову інформацію про команду.\n" "HELP без аргументів показує всі вбудовані команди CMD.\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9802,7 +9801,7 @@ "В другій формі команди, рядок1 та рядок2 повинні бути в подвійних лапках.\n" "Порівняння не чутливе до регістру.\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9816,38 +9815,37 @@ "Команда запитує нову мітку тому для відповідного диску.\n" "З допомогою команди VOL ви можете подивитись мітку диску.\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD <ім'я> це коротка версія MKDIR. Вона створює підтеку.\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR <ім'я> створює підтеку.\n" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" "MOVE переміщує файл чи теку на нове місце файлової системи.\n" "\n" -"Якщо переміщується тека, то переміщуються всі файли та підтеки,\n" -"які містить ця тека.\n" +"Якщо переміщується тека, то переміщуються всі файли та підтеки, які містить\n" +"ця тека.\n" "\n" "MOVE не працює для переміщення даних з одного логічного диска DOS на інший.\n" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9855,27 +9853,27 @@ msgstr "" "PATH відображає або змінює шлях пошуку cmd.\n" "\n" -"Команда PATH відобразить поточні параметри PATH (спочатку береться\n" -"з реєстру). Для зміни налаштувань використайте команду\n" -"PATH з новим значенням.\n" +"Команда PATH відобразить поточні параметри PATH (спочатку береться з\n" +"реєстру). Для зміни налаштувань використайте команду PATH з новим\n" +"значенням.\n" "\n" -"Також можна змінити значення PATH, використавши змінну оточення\n" -"PATH, наприклад:\n" +"Також можна змінити значення PATH, використавши змінну оточення PATH,\n" +"наприклад:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE показує на екрані повідомлення 'Натисніть клавішу для продовження'\n" "\n" "В основному корисно в пакетних файлах щоб користувач міг прочитати вивід\n" "попередньої команди перед її зникненням з екрану.\n" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9899,8 +9897,8 @@ msgstr "" "PROMPT задає запрошення командного рядка.\n" "\n" -"Рядок, що йде після команди PROMPT (і пробілу після команди),\n" -"з'являється на початку рядка, коли cmd очікує введення.\n" +"Рядок, що йде після команди PROMPT (і пробілу після команди), з'являється\n" +"на початку рядка, коли cmd очікує введення.\n" "\n" "Наступні символьні рядки мають спеціальні значення і відображення:\n" "\n" @@ -9910,42 +9908,42 @@ "$q Знак рівності $t Поточний час $v Версія cmd\n" "\n" "Зауважте, що при вводі команди PROMPT без рядка запрошення налаштування\n" -"скидаються до типових, тобто до поточної теки (включаючи\n" -"букву поточного диску) з наступним знаком більше (>).\n" +"скидаються до типових, тобто до поточної теки (включаючи букву поточного\n" +"диску) з наступним знаком більше (>).\n" "(як в команді PROMPT $p$g).\n" "\n" -"Запрошення також може бути змінене зміною змінної оточення PROMPT,\n" -"тому команда 'SET PROMPT=text' має той же ефект, що і 'PROMPT text'.\n" +"Запрошення також може бути змінене зміною змінної оточення PROMPT, тому\n" +"команда 'SET PROMPT=text' має той же ефект, що і 'PROMPT text'.\n" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -"Командний рядок, що починається з REM (з наступним пробілом) нічого\n" -"не виконує, тому може бути використаний як коментар в пакетному файлі.\n" +"Командний рядок, що починається з REM (з наступним пробілом) нічого не\n" +"виконує, тому може бути використаний як коментар в пакетному файлі.\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "REN <ім'я_файлу> це коротка версія RENAME. Вона перейменовує файл.\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME <ім'я_файлу> перейменовує файл.\n" -#: cmd.rc:161 +#: cmd.rc:181 #, fuzzy #| msgid "RD is the short version of RMDIR. It deletes a subdirectory.\n" msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD <тека> це коротка версія RMDIR. Вона видаляє підтеку.\n" -#: cmd.rc:162 +#: cmd.rc:183 #, fuzzy #| msgid "RMDIR deletes a subdirectory.\n" msgid "RMDIR deletes a directory.\n" msgstr "RMDIR <тека> видаляє підтеку.\n" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9955,14 +9953,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET показує чи задає змiнні оточення cmd.\n" "\n" @@ -9972,75 +9969,73 @@ "\n" "SET <змінна>=<значення>\n" "\n" -"де <змінна> та <значення> є символьними рядками. Перед знаком рівності\n" -"не повинно бути пробілів, ім'я змінної не повинно містити в собі\n" -"пробіли.\n" -"\n" -"В Wine, оточення основної операційної системи включене\n" -"в оточення Win32, тому буде доступно більше змінних, ніж\n" -"в звичайній реалізації Win32. Зверніть увагу на те, що неможливо\n" -"змінити оточення операційної системи з cmd.\n" - -#: cmd.rc:211 -msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"де <змінна> та <значення> є символьними рядками. Перед знаком рівності не\n" +"повинно бути пробілів, ім'я змінної не повинно містити в собі пробіли.\n" +"\n" +"В Wine, оточення основної операційної системи включене в оточення Win32,\n" +"тому буде доступно більше змінних, ніж в звичайній реалізації Win32.\n" +"Зверніть увагу на те, що неможливо змінити оточення операційної системи з\n" +"cmd.\n" + +#: cmd.rc:234 +msgid "" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "SHIFT використовується в пакетному файлі для вилучення одного параметра з\n" -"вершини списку, тому параметр 2 стає параметром 1 і т.д. Команда не працює " -"при\n" -"її виклику з командного рядка.\n" +"вершини списку, тому параметр 2 стає параметром 1 і т.д. Команда не працює\n" +"при її виклику з командного рядка.\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME задає чи показує поточний системний час.\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE <рядок> задає заголовок вікна для вікна cmd.\n" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -"TYPE <ім'я_файлу> копіює <ім'я_файлу> до консольного пристрою (чи в інше " -"місце,\n" -"якщо він перенаправлений). Не перевіряється, чи файл це текст, призначений\n" -"для читання.\n" +"TYPE <ім'я_файлу> копіює <ім'я_файлу> до консольного пристрою (чи в інше\n" +"місце, якщо він перенаправлений). Не перевіряється, чи файл це текст,\n" +"призначений для читання.\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -10050,7 +10045,7 @@ "\n" "The verify flag has no function in Wine.\n" msgstr "" -"VERIFY призначена для задання, скидання чи тестування прапора перевірки. " +"VERIFY призначена для задання, скидання чи тестування прапора перевірки.\n" "Діючі форми:\n" "\n" "VERIFY ON\tЗадати прапор.\n" @@ -10059,23 +10054,23 @@ "\n" "Прапор перевірки не має функцій в Wine.\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER відображає версію запущеного cmd.\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL відображає мітку тому дискового пристрою.\n" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -"ENDLOCAL завершує локалізацію змін оточення в пакетному файлі\n" -"що були впроваджені командою SETLOCAL.\n" +"ENDLOCAL завершує локалізацію змін оточення в пакетному файлі що були\n" +"впроваджені командою SETLOCAL.\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -10091,23 +10086,23 @@ "трапиться раніше), після чого відновлюються попередні налаштування\n" "оточення.\n" -#: cmd.rc:248 +#: cmd.rc:275 #, fuzzy #| msgid "" #| "PUSHD saves the current directory onto a\n" #| "stack, and then changes the current directory to the supplied one.\n" msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -"PUSHD <ім'я_теки> зберігає поточну теку в стек,\n" -"а потім змінює поточну теку на вказану.\n" +"PUSHD <ім'я_теки> зберігає поточну теку в стек, а потім змінює поточну теку\n" +"на вказану.\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD змінює поточну теку на останню збережену командою PUSHD.\n" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -10115,7 +10110,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC показує чи змінює асоціації файлових типів.\n" @@ -10124,57 +10119,57 @@ "\n" "ASSOC без параметрів показує поточні файлові асоціації.\n" "Якщо використовується лише з розширенням то відображає поточну асоціацію.\n" -"Якщо не вказати тип файлу після знаку рівності то існуюча асоціація буде " +"Якщо не вказати тип файлу після знаку рівності то існуюча асоціація буде\n" "видалена.\n" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE показує або змінює команди відкриття, асоційовані з типами файлів.\n" "\n" "Синтаксис: FTYPE [тип_файлу[=[командаВідкриття]]]\n" "\n" -"Без параметрів, показує типи файлів, для яких на даний момент задані рядки " +"Без параметрів, показує типи файлів, для яких на даний момент задані рядки\n" "команд відкриття.\n" -"Якщо вказаний лише тип файлу, відображає асоційовані команди відкриття, якщо " -"такі є.\n" +"Якщо вказаний лише тип файлу, відображає асоційовані команди відкриття,\n" +"якщо такі є.\n" "Якщо не вказана команда відкриття після знаку рівності то це видалить\n" "команду для вказаного типу файлів.\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE відображає вміст файлів чи каналів сторінками.\n" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -"CHOICE відображує текст і чекає, поки Користувач\n" -"натисне дозволену Кнопку зі списку таблиці вибору.\n" -"CHOICE переважно використовується для побудови меню вибору в пакетному " +"CHOICE відображує текст і чекає, поки Користувач натисне дозволену Кнопку\n" +"зі списку таблиці вибору.\n" +"CHOICE переважно використовується для побудови меню вибору в пакетному\n" "файлі.\n" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -"EXIT завершує поточну сесію командного рядка та повертає вас\n" -"до операційної системи чи оболонки, з якої ви запустили cmd.\n" +"EXIT завершує поточну сесію командного рядка та повертає вас до операційної\n" +"системи чи оболонки, з якої ви запустили cmd.\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10254,110 +10249,110 @@ "\n" "Введіть HELP <команда> для детальнішої інформації про вищенаведені команди.\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "Ви впевнені?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "Т" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "Н" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "Файлова асоціація для розширення %1 відсутня\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "Немає команди відкриття, асоційованої з файловим типом '%1'\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "Перезаписати %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "Більше..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "Рядок в обробці Пакету мабуть урізаний. Використовую:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "Відсутній аргумент\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "Синтаксична помилка\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "Немає довідки для %1\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "Не знайдена ціль для GOTO\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "Поточна дата: %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "Поточний час: %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "Введіть нову дату: " -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "Введіть новий час: " -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "Змінна оточення %1 не визначена\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "Не вдалось відкрити '%1'\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "Не можу викликати мітку пакету за межами пакетного скрипта\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "В" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "Видалити %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "Echo зараз %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "Verify зараз %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "Verify повинен бути ON чи OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "Помилка параметру\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10365,76 +10360,76 @@ "Серійний номер диску: %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "Мітка диску (11 символів, - без мітки)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "PATH не знайдено\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "Натисніть будь-яку клавішу, щоб продовжити... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Командний рядок Wine" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "Microsoft Windows %1!S!\n" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "Більше? " -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "Введений рядок задовгий.\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "Том в приводі %1!c! : %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "Том в приводі %1!c! не має мітки.\n" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (Так|Ні)" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (Так|Ні|Всі)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" "Не можу визначити '%1' як внутрішню або зовнішню команду, чи пакетний " "сценарій (скрипт).\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "Помилка Ділення на нуль.\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 #, fuzzy #| msgid "Unexpected network error.\n" msgid "Expected an operator.\n" msgstr "Неочікувана помилка мережі.\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -12066,7 +12061,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "regsvr32: DLL '%1' успішно видалена\n" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -12076,7 +12071,7 @@ "документа додатків.\n" "Виклик ShellExecuteEx провалився" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "Неможливо перетворити ім'я файлу UNIX в ім'я файлу DOS." diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/wa.po wine-staging-1.7.47~ubuntu14.10.1/po/wa.po --- wine-staging-1.7.46~ubuntu14.10.1/po/wa.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/wa.po 2015-07-12 05:36:18.000000000 +0000 @@ -9318,13 +9318,13 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" msgstr "" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 #, fuzzy msgid "%1: File Not Found\n" msgstr "'%s' pout nén esse trové." @@ -9395,66 +9395,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9463,27 +9463,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9495,7 +9495,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9504,47 +9504,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9567,29 +9566,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9599,68 +9598,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9671,21 +9670,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9695,17 +9694,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9713,42 +9712,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -9790,182 +9789,182 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 #, fuzzy msgid "Delete %1?" msgstr "&Rafacer\tDel" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr "" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr "" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11552,14 +11551,14 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" "ShellExecuteEx failed" msgstr "" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/wine.pot wine-staging-1.7.47~ubuntu14.10.1/po/wine.pot --- wine-staging-1.7.46~ubuntu14.10.1/po/wine.pot 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/wine.pot 2015-07-12 05:36:18.000000000 +0000 @@ -9145,13 +9145,13 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" msgstr "" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "" @@ -9215,66 +9215,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9283,27 +9283,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9315,7 +9315,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9324,47 +9324,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9387,29 +9386,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9419,68 +9418,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9491,21 +9490,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9515,17 +9514,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9533,42 +9532,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -9610,181 +9609,181 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr "" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr "" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11342,14 +11341,14 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" "ShellExecuteEx failed" msgstr "" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/zh_CN.po wine-staging-1.7.47~ubuntu14.10.1/po/zh_CN.po --- wine-staging-1.7.46~ubuntu14.10.1/po/zh_CN.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/zh_CN.po 2015-07-12 05:36:18.000000000 +0000 @@ -9266,13 +9266,13 @@ msgid "Referral hop limit exceeded" msgstr "" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" msgstr "" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: 找不到文件\n" @@ -9336,66 +9336,66 @@ #: cmd.rc:40 msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" msgstr "" -#: cmd.rc:43 +#: cmd.rc:44 msgid "" "CD is the short version of CHDIR. It changes the current\n" "default directory.\n" msgstr "" -#: cmd.rc:44 +#: cmd.rc:47 msgid "CHDIR changes the current default directory.\n" msgstr "" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "" -#: cmd.rc:62 +#: cmd.rc:75 msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" "preceding it with an @ sign.\n" msgstr "" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "" -#: cmd.rc:71 +#: cmd.rc:85 msgid "" "The FOR command is used to execute a command for each of a set of files.\n" "\n" @@ -9404,27 +9404,27 @@ "The % sign must be doubled when using FOR in a batch file.\n" msgstr "" -#: cmd.rc:83 +#: cmd.rc:97 msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" msgstr "" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9436,7 +9436,7 @@ "quotes. The comparison is not case-sensitive.\n" msgstr "" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9445,47 +9445,46 @@ "You can display the disk volume label with the VOL command.\n" msgstr "" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "" -#: cmd.rc:113 +#: cmd.rc:131 msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" -#: cmd.rc:124 +#: cmd.rc:142 msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" "PATH %PATH%;c:\\temp\n" msgstr "" -#: cmd.rc:130 +#: cmd.rc:148 msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" -#: cmd.rc:151 +#: cmd.rc:169 msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9508,29 +9507,29 @@ "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgstr "" -#: cmd.rc:155 +#: cmd.rc:173 msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "" -#: cmd.rc:161 +#: cmd.rc:181 msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "" -#: cmd.rc:162 +#: cmd.rc:183 msgid "RMDIR deletes a directory.\n" msgstr "" -#: cmd.rc:206 +#: cmd.rc:229 msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9540,68 +9539,68 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" "\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" -#: cmd.rc:211 +#: cmd.rc:234 msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "" -#: cmd.rc:219 +#: cmd.rc:244 msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9612,21 +9611,21 @@ "The verify flag has no function in Wine.\n" msgstr "" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "" -#: cmd.rc:237 +#: cmd.rc:263 msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9636,17 +9635,17 @@ "settings are restored.\n" msgstr "" -#: cmd.rc:248 +#: cmd.rc:275 msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "" -#: cmd.rc:258 +#: cmd.rc:288 msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9654,42 +9653,42 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" -#: cmd.rc:269 +#: cmd.rc:300 msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "" -#: cmd.rc:275 +#: cmd.rc:308 msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" -#: cmd.rc:279 +#: cmd.rc:312 msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -9731,181 +9730,181 @@ "Enter HELP for further information on any of the above commands.\n" msgstr "" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "" -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "%1 的帮助不可用\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "当前日期是 %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "删除 %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" msgstr "" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "" -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "" -#: cmd.rc:356 +#: cmd.rc:390 msgid " (Yes|No)" msgstr " (是(Y)|否(N))" -#: cmd.rc:357 +#: cmd.rc:391 msgid " (Yes|No|All)" msgstr " (是(Y)|否(N)|全部(A))" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11508,7 +11507,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -11517,7 +11516,7 @@ "无法启动程序,或者没有为指定文件关联应用程序。\n" "ShellExecuteEx 失败" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "无法将指定 Unix 文件名转换为 DOS 文件名。" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/po/zh_TW.po wine-staging-1.7.47~ubuntu14.10.1/po/zh_TW.po --- wine-staging-1.7.46~ubuntu14.10.1/po/zh_TW.po 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/po/zh_TW.po 2015-07-12 05:36:18.000000000 +0000 @@ -9407,7 +9407,7 @@ msgid "Referral hop limit exceeded" msgstr "超出了參照躍點限制" -#: attrib.rc:30 cmd.rc:327 +#: attrib.rc:30 cmd.rc:361 msgid "" "Not Yet Implemented\n" "\n" @@ -9415,7 +9415,7 @@ "尚未實作\n" "\n" -#: attrib.rc:31 cmd.rc:330 +#: attrib.rc:31 cmd.rc:364 msgid "%1: File Not Found\n" msgstr "%1: 找不到檔案\n" @@ -9496,11 +9496,20 @@ msgstr "時鐘" #: cmd.rc:40 +#, fuzzy +#| msgid "" +#| "CALL is used within a batch file to execute commands\n" +#| "from another batch file. When the batch file exits, control returns to\n" +#| "the file which called it. The CALL command may supply parameters to the\n" +#| "called procedure.\n" +#| "\n" +#| "Changes to default directory, environment variables etc made within a\n" +#| "called procedure are inherited by the caller.\n" msgid "" -"CALL is used within a batch file to execute commands\n" -"from another batch file. When the batch file exits, control returns to\n" -"the file which called it. The CALL command may supply parameters to the\n" -"called procedure.\n" +"CALL is used within a batch file to execute commands from\n" +"another batch file. When the batch file exits, control returns to the file\n" +"which called it. The CALL command may supply parameters to the called\n" +"procedure.\n" "\n" "Changes to default directory, environment variables etc made within a\n" "called procedure are inherited by the caller.\n" @@ -9513,7 +9522,7 @@ "在被呼叫的程序中變更預設目錄、環境變數等動作,\n" "將會由呼叫者所繼承。\n" -#: cmd.rc:43 +#: cmd.rc:44 #, fuzzy #| msgid "" #| "CD is the short version of CHDIR. It changes the current\n" @@ -9525,42 +9534,52 @@ "CD <目錄> 是 CHDIR 的簡短版本。它會變更目前的\n" "預設目錄。\n" -#: cmd.rc:44 +#: cmd.rc:47 #, fuzzy #| msgid "CHDIR changes the current default directory.\n" msgid "CHDIR changes the current default directory.\n" msgstr "CHDIR <目錄> 變更目前的預設目錄。\n" -#: cmd.rc:46 +#: cmd.rc:50 msgid "CLS clears the console screen.\n" msgstr "CLS 清空主控臺螢幕。\n" -#: cmd.rc:48 +#: cmd.rc:53 msgid "COPY copies a file.\n" msgstr "COPY <檔名> 複製檔案。\n" -#: cmd.rc:49 +#: cmd.rc:56 msgid "CTTY changes the input/output device.\n" msgstr "CTTY 變更輸入/輸出裝置。\n" -#: cmd.rc:50 +#: cmd.rc:59 msgid "DATE shows or changes the system date.\n" msgstr "DATE 顯示或變更系統日期。\n" -#: cmd.rc:51 +#: cmd.rc:62 msgid "DEL deletes a file or set of files.\n" msgstr "DEL <檔名> 刪除檔案或一組檔案。\n" -#: cmd.rc:52 +#: cmd.rc:65 msgid "DIR lists the contents of a directory.\n" msgstr "DIR 列出目錄的內容。\n" -#: cmd.rc:62 +#: cmd.rc:75 +#, fuzzy +#| msgid "" +#| "ECHO displays on the current terminal device.\n" +#| "\n" +#| "ECHO ON causes all subsequent commands in a batch file to be displayed\n" +#| "on the terminal device before they are executed.\n" +#| "\n" +#| "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" +#| "default). The ECHO OFF command can be prevented from displaying by\n" +#| "preceding it with an @ sign.\n" msgid "" "ECHO displays on the current terminal device.\n" "\n" -"ECHO ON causes all subsequent commands in a batch file to be displayed\n" -"on the terminal device before they are executed.\n" +"ECHO ON causes all subsequent commands in a batch file to be displayed on\n" +"the terminal device before they are executed.\n" "\n" "ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n" "default). The ECHO OFF command can be prevented from displaying by\n" @@ -9575,11 +9594,11 @@ "OFF)。ECHO OFF 命令本身可以藉由前置 @ 符號\n" "來防止它被顯示。\n" -#: cmd.rc:64 +#: cmd.rc:78 msgid "ERASE deletes a file or set of files.\n" msgstr "ERASE <檔名> 刪除一個檔案或一組檔案。\n" -#: cmd.rc:71 +#: cmd.rc:85 #, fuzzy #| msgid "" #| "The FOR command is used to execute a command for each of a set of files.\n" @@ -9596,16 +9615,28 @@ "\n" "語法:FOR %變數 IN (集合) DO 命令\n" -#: cmd.rc:83 +#: cmd.rc:97 +#, fuzzy +#| msgid "" +#| "The GOTO command transfers execution to another statement within a\n" +#| "batch file.\n" +#| "\n" +#| "The label which is the target of a GOTO may be up to 255 characters\n" +#| "long but may not include spaces (this is different from other operating\n" +#| "systems). If two or more identical labels exist in a batch file the\n" +#| "first one will always be executed. Attempting to GOTO a nonexistent\n" +#| "label terminates the batch file execution.\n" +#| "\n" +#| "GOTO has no effect when used interactively.\n" msgid "" -"The GOTO command transfers execution to another statement within a\n" -"batch file.\n" +"The GOTO command transfers execution to another statement within a batch\n" +"file.\n" "\n" -"The label which is the target of a GOTO may be up to 255 characters\n" -"long but may not include spaces (this is different from other operating\n" -"systems). If two or more identical labels exist in a batch file the\n" -"first one will always be executed. Attempting to GOTO a nonexistent\n" -"label terminates the batch file execution.\n" +"The label which is the target of a GOTO may be up to 255 characters long\n" +"but may not include spaces (this is different from other operating\n" +"systems). If two or more identical labels exist in a batch file the first\n" +"one will always be executed. Attempting to GOTO a nonexistent label\n" +"terminates the batch file execution.\n" "\n" "GOTO has no effect when used interactively.\n" msgstr "" @@ -9620,7 +9651,7 @@ "\n" "GOTO 用於互動模式中將沒有任何效果。\n" -#: cmd.rc:86 +#: cmd.rc:101 msgid "" "HELP shows brief help details on a topic.\n" "HELP without an argument shows all CMD built-in commands.\n" @@ -9628,7 +9659,7 @@ "HELP <命令> 顯示關於某一主題的簡明細節。\n" "HELP 不加引數時將顯示 CMD 所有的內建命令。\n" -#: cmd.rc:96 +#: cmd.rc:111 msgid "" "IF is used to conditionally execute a command.\n" "\n" @@ -9648,7 +9679,7 @@ "在命令的第二種形式中,字串一和字串二必須位於雙引號之中。\n" "比較的動作是不分大小寫的。\n" -#: cmd.rc:102 +#: cmd.rc:118 msgid "" "LABEL is used to set a disk volume label.\n" "\n" @@ -9662,21 +9693,31 @@ "命令將向您提示詢問新的卷冊標貼用於給定的儲存裝置。\n" "您可以利用 VOL 命令來顯示磁碟卷冊標貼。\n" -#: cmd.rc:105 +#: cmd.rc:121 msgid "MD is the short version of MKDIR. It creates a subdirectory.\n" msgstr "MD <名稱> 是 MKDIR 的縮寫版本。它會建立子目錄。\n" -#: cmd.rc:106 +#: cmd.rc:123 msgid "MKDIR creates a subdirectory.\n" msgstr "MKDIR <名稱> 建立子目錄。\n" -#: cmd.rc:113 +#: cmd.rc:131 +#, fuzzy +#| msgid "" +#| "MOVE relocates a file or directory to a new point within the file " +#| "system.\n" +#| "\n" +#| "If the item being moved is a directory then all the files and " +#| "subdirectories\n" +#| "below the item are moved as well.\n" +#| "\n" +#| "MOVE fails if the old and new locations are on different DOS drive " +#| "letters.\n" msgid "" "MOVE relocates a file or directory to a new point within the file system.\n" "\n" -"If the item being moved is a directory then all the files and " -"subdirectories\n" -"below the item are moved as well.\n" +"If the item being moved is a directory then all the files and\n" +"subdirectories below the item are moved as well.\n" "\n" "MOVE fails if the old and new locations are on different DOS drive letters.\n" msgstr "" @@ -9687,13 +9728,24 @@ "\n" "如果舊的和新的位置在不同的 DOS 儲存裝置代號之上,MOVE 將會失敗。\n" -#: cmd.rc:124 +#: cmd.rc:142 +#, fuzzy +#| msgid "" +#| "PATH displays or changes the cmd search path.\n" +#| "\n" +#| "Entering PATH will display the current PATH setting (initially taken\n" +#| "from the registry). To change the setting follow the\n" +#| "PATH command with the new value.\n" +#| "\n" +#| "It is also possible to modify the PATH by using the PATH environment\n" +#| "variable, for example:\n" +#| "PATH %PATH%;c:\\temp\n" msgid "" "PATH displays or changes the cmd search path.\n" "\n" -"Entering PATH will display the current PATH setting (initially taken\n" -"from the registry). To change the setting follow the\n" -"PATH command with the new value.\n" +"Entering PATH will display the current PATH setting (initially taken from\n" +"the registry). To change the setting follow the PATH command with the new\n" +"value.\n" "\n" "It is also possible to modify the PATH by using the PATH environment\n" "variable, for example:\n" @@ -9709,19 +9761,49 @@ "舉例來說:\n" "PATH %PATH%;c:\\temp\n" -#: cmd.rc:130 +#: cmd.rc:148 +#, fuzzy +#| msgid "" +#| "PAUSE displays a message on the screen asking the user to press a key.\n" +#| "\n" +#| "It is mainly useful in batch files to allow the user to read the output\n" +#| "of a previous command before it scrolls off the screen.\n" msgid "" "PAUSE displays a message on the screen asking the user to press a key.\n" "\n" -"It is mainly useful in batch files to allow the user to read the output\n" -"of a previous command before it scrolls off the screen.\n" +"It is mainly useful in batch files to allow the user to read the output of\n" +"a previous command before it scrolls off the screen.\n" msgstr "" "PAUSE 在螢幕上顯示訊息以要求使用者按下一個鍵。\n" "\n" "主要用於批次檔中,以允許使用者在前一個命令的\n" "輸出捲動離開螢幕之前能夠去讀取它。\n" -#: cmd.rc:151 +#: cmd.rc:169 +#, fuzzy +#| msgid "" +#| "PROMPT sets the command-line prompt.\n" +#| "\n" +#| "The string following the PROMPT command (and the space immediately " +#| "after)\n" +#| "appears at the beginning of the line when cmd is waiting for input.\n" +#| "\n" +#| "The following character strings have the special meaning shown:\n" +#| "\n" +#| "$$ Dollar sign $_ Linefeed $b Pipe sign (|)\n" +#| "$d Current date $e Escape $g > sign\n" +#| "$l < sign $n Current drive $p Current path\n" +#| "$q Equal sign $t Current time $v cmd version\n" +#| "\n" +#| "Note that entering the PROMPT command without a prompt-string resets the\n" +#| "prompt to the default, which is the current directory (which includes " +#| "the\n" +#| "current drive letter) followed by a greater-than (>) sign.\n" +#| "(like a command PROMPT $p$g).\n" +#| "\n" +#| "The prompt can also be changed by altering the PROMPT environment " +#| "variable,\n" +#| "so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" msgid "" "PROMPT sets the command-line prompt.\n" "\n" @@ -9762,35 +9844,57 @@ "提示字串也可以經由改變 PROMPT 環境變數而變更,\n" "因此命令 SET PROMPT=text 與 PROMPT text 具有相同的效果。\n" -#: cmd.rc:155 +#: cmd.rc:173 +#, fuzzy +#| msgid "" +#| "A command line beginning with REM (followed by a space) performs no\n" +#| "action, and can therefore be used as a comment in a batch file.\n" msgid "" -"A command line beginning with REM (followed by a space) performs no\n" -"action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n" +"and can therefore be used as a comment in a batch file.\n" msgstr "" "以 REM 起始的命令列 (之後緊接空格) 不會進行任何\n" "動作,因而可以做為批次檔中的註釋。\n" -#: cmd.rc:158 +#: cmd.rc:176 msgid "REN is the short version of RENAME. It renames a file.\n" msgstr "REN <檔名> 是 RENAME 的簡短版本。它會重新命名檔案。\n" -#: cmd.rc:159 +#: cmd.rc:178 msgid "RENAME renames a file.\n" msgstr "RENAME <檔名> 重新命名檔案。\n" -#: cmd.rc:161 +#: cmd.rc:181 #, fuzzy #| msgid "RD is the short version of RMDIR. It deletes a subdirectory.\n" msgid "RD is the short version of RMDIR. It deletes a directory.\n" msgstr "RD <目錄> 是 RMDIR 的簡短版本。它會刪除子目錄。\n" -#: cmd.rc:162 +#: cmd.rc:183 #, fuzzy #| msgid "RMDIR deletes a subdirectory.\n" msgid "RMDIR deletes a directory.\n" msgstr "RMDIR <目錄> 刪除子目錄。\n" -#: cmd.rc:206 +#: cmd.rc:229 +#, fuzzy +#| msgid "" +#| "SET displays or changes the cmd environment variables.\n" +#| "\n" +#| "SET without parameters shows all of the current environment.\n" +#| "\n" +#| "To create or modify an environment variable the syntax is:\n" +#| "\n" +#| "SET =\n" +#| "\n" +#| "where and are character strings. There must be no\n" +#| "space before the equals sign, nor can the variable name\n" +#| "have embedded spaces.\n" +#| "\n" +#| "Under Wine, the environment of the underlying operating system is\n" +#| "included into the Win32 environment, there will generally therefore be\n" +#| "many more values than in a native Win32 implementation. Note that it is\n" +#| "not possible to affect the operating system environment from within cmd.\n" msgid "" "SET displays or changes the cmd environment variables.\n" "\n" @@ -9800,14 +9904,13 @@ "\n" "SET =\n" "\n" -"where and are character strings. There must be no\n" -"space before the equals sign, nor can the variable name\n" -"have embedded spaces.\n" -"\n" -"Under Wine, the environment of the underlying operating system is\n" -"included into the Win32 environment, there will generally therefore be\n" -"many more values than in a native Win32 implementation. Note that it is\n" -"not possible to affect the operating system environment from within cmd.\n" +"where and are character strings. There must be no space\n" +"before the equals sign, nor can the variable name have embedded spaces.\n" +"\n" +"Under Wine, the environment of the underlying operating system is included\n" +"into the Win32 environment, there will generally therefore be many more\n" +"values than in a native Win32 implementation. Note that it is not possible\n" +"to affect the operating system environment from within cmd.\n" msgstr "" "SET 顯示或變更 cmd 的環境變數。\n" "\n" @@ -9825,44 +9928,79 @@ "還要多出更多變數值。要注意的是,從 cmd 之中是不可能\n" "去影響作業系統的環境。\n" -#: cmd.rc:211 -msgid "" -"SHIFT is used in a batch file to remove one parameter from the head of\n" -"the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" -"if called from the command line.\n" +#: cmd.rc:234 +#, fuzzy +#| msgid "" +#| "SHIFT is used in a batch file to remove one parameter from the head of\n" +#| "the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n" +#| "if called from the command line.\n" +msgid "" +"SHIFT is used in a batch file to remove one parameter from the head of the\n" +"list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n" +"called from the command line.\n" msgstr "" "SHIFT 在批次檔中用來從參數列表的前端移除一個\n" "參數,因此參數 2 會成為參數 1... 等等。如果從命令列呼叫它,\n" "將不會有任何效果。\n" -#: cmd.rc:188 start.rc:53 +#: cmd.rc:212 start.rc:56 +#, fuzzy +#| msgid "" +#| "Start a program, or open a document in the program normally used for " +#| "files with that suffix.\n" +#| "Usage:\n" +#| "start [options] program_filename [...]\n" +#| "start [options] document_filename\n" +#| "\n" +#| "Options:\n" +#| "\"title\" Specifies the title of the child windows.\n" +#| "/d directory Start the program in the specified directory.\n" +#| "/b Don't create a new console for the program.\n" +#| "/i Start the program with fresh environment variables.\n" +#| "/min Start the program minimized.\n" +#| "/max Start the program maximized.\n" +#| "/low Start the program in the idle priority class.\n" +#| "/normal Start the program in the normal priority class.\n" +#| "/high Start the program in the high priority class.\n" +#| "/realtime Start the program in the realtime priority class.\n" +#| "/abovenormal Start the program in the abovenormal priority class.\n" +#| "/belownormal Start the program in the belownormal priority class.\n" +#| "/node n Start the program on the specified NUMA node.\n" +#| "/affinity mask Start the program with the specified affinity mask.\n" +#| "/wait Wait for the started program to finish, then exit with its " +#| "exit code.\n" +#| "/unix Use a Unix filename and start the file like windows " +#| "explorer.\n" +#| "/ProgIDOpen Open a document using the specified progID.\n" +#| "/? Display this help and exit.\n" msgid "" -"Start a program, or open a document in the program normally used for files " +"Start a program, or open a document in the program normally used for files\n" "with that suffix.\n" "Usage:\n" "start [options] program_filename [...]\n" "start [options] document_filename\n" "\n" "Options:\n" -"\"title\" Specifies the title of the child windows.\n" -"/d directory Start the program in the specified directory.\n" -"/b Don't create a new console for the program.\n" -"/i Start the program with fresh environment variables.\n" -"/min Start the program minimized.\n" -"/max Start the program maximized.\n" -"/low Start the program in the idle priority class.\n" -"/normal Start the program in the normal priority class.\n" -"/high Start the program in the high priority class.\n" -"/realtime Start the program in the realtime priority class.\n" -"/abovenormal Start the program in the abovenormal priority class.\n" -"/belownormal Start the program in the belownormal priority class.\n" -"/node n Start the program on the specified NUMA node.\n" +"\"title\" Specifies the title of the child windows.\n" +"/d directory Start the program in the specified directory.\n" +"/b Don't create a new console for the program.\n" +"/i Start the program with fresh environment variables.\n" +"/min Start the program minimized.\n" +"/max Start the program maximized.\n" +"/low Start the program in the idle priority class.\n" +"/normal Start the program in the normal priority class.\n" +"/high Start the program in the high priority class.\n" +"/realtime Start the program in the realtime priority class.\n" +"/abovenormal Start the program in the abovenormal priority class.\n" +"/belownormal Start the program in the belownormal priority class.\n" +"/node n Start the program on the specified NUMA node.\n" "/affinity mask Start the program with the specified affinity mask.\n" -"/wait Wait for the started program to finish, then exit with its exit " -"code.\n" -"/unix Use a Unix filename and start the file like windows explorer.\n" -"/ProgIDOpen Open a document using the specified progID.\n" -"/? Display this help and exit.\n" +"/wait Wait for the started program to finish, then exit with its\n" +"exit code.\n" +"/unix Use a Unix filename and start the file like windows\n" +"explorer.\n" +"/ProgIDOpen Open a document using the specified progID.\n" +"/? Display this help and exit.\n" msgstr "" "啟始一個程式,或是利用關聯該檔案字尾的程式來開啟文件。\n" "用法:\n" @@ -9889,23 +10027,27 @@ "/ProgIDOpen 使用指定的 progID 開啟文件。\n" "/? 顯示這份說明然後離開。\n" -#: cmd.rc:213 +#: cmd.rc:237 msgid "TIME sets or shows the current system time.\n" msgstr "TIME 設定或顯示目前的系統時間。\n" -#: cmd.rc:215 +#: cmd.rc:240 msgid "TITLE sets the window title for the cmd window.\n" msgstr "TITLE <字串> 設定 cmd 視窗的視窗標題。\n" -#: cmd.rc:219 +#: cmd.rc:244 +#, fuzzy +#| msgid "" +#| "TYPE copies to the console device (or elsewhere\n" +#| "if redirected). No check is made that the file is readable text.\n" msgid "" -"TYPE copies to the console device (or elsewhere\n" -"if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n" +"redirected). No check is made that the file is readable text.\n" msgstr "" "TYPE <檔名> 將 <檔名> 的內容複製到主控臺裝置 (或是其他被\n" "重新導向的地方)。不會檢查該檔案是否為可讀的文字。\n" -#: cmd.rc:228 +#: cmd.rc:253 msgid "" "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n" "\n" @@ -9923,23 +10065,27 @@ "\n" "驗證旗標在 Wine 中沒有任何功能。\n" -#: cmd.rc:231 +#: cmd.rc:256 msgid "VER displays the version of cmd you are running.\n" msgstr "VER 顯示您正在執行的 cmd 版本。\n" -#: cmd.rc:233 +#: cmd.rc:259 msgid "VOL shows the volume label of a disk device.\n" msgstr "VOL 顯示磁碟裝置的卷冊標貼。\n" -#: cmd.rc:237 +#: cmd.rc:263 +#, fuzzy +#| msgid "" +#| "ENDLOCAL ends localization of environment changes in a batch file\n" +#| "which were introduced by a preceding SETLOCAL.\n" msgid "" -"ENDLOCAL ends localization of environment changes in a batch file\n" -"which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n" +"were introduced by a preceding SETLOCAL.\n" msgstr "" "ENDLOCAL 在批次檔中結束本地的環境變更\n" "而這些是由之前的 SETLOCAL 所引入。\n" -#: cmd.rc:245 +#: cmd.rc:271 msgid "" "SETLOCAL starts localization of environment changes in a batch file.\n" "\n" @@ -9955,23 +10101,33 @@ "的結束,取決於誰先出現),前一個環境的設定值\n" "則於該點被儲存。\n" -#: cmd.rc:248 +#: cmd.rc:275 #, fuzzy #| msgid "" #| "PUSHD saves the current directory onto a\n" #| "stack, and then changes the current directory to the supplied one.\n" msgid "" -"PUSHD saves the current directory onto a\n" -"stack, and then changes the current directory to the supplied one.\n" +"PUSHD saves the current directory onto a stack, and then\n" +"changes the current directory to the supplied one.\n" msgstr "" "PUSHD <目錄名> 儲存目前的目錄到\n" "堆疊中,然後變更現行目錄到所給定的目錄。\n" -#: cmd.rc:250 +#: cmd.rc:278 msgid "POPD changes current directory to the last one saved with PUSHD.\n" msgstr "POPD 變更現行目錄到上一個利用 PUSHD 儲存的目錄。\n" -#: cmd.rc:258 +#: cmd.rc:288 +#, fuzzy +#| msgid "" +#| "ASSOC shows or modifies file extension associations.\n" +#| "\n" +#| "Syntax: ASSOC [.ext[=[fileType]]]\n" +#| "\n" +#| "ASSOC without parameters displays current file associations.\n" +#| "If used with only a file extension, displays the current association.\n" +#| "Specifying no file type after the equal sign removes the current " +#| "association, if any.\n" msgid "" "ASSOC shows or modifies file extension associations.\n" "\n" @@ -9979,7 +10135,7 @@ "\n" "ASSOC without parameters displays current file associations.\n" "If used with only a file extension, displays the current association.\n" -"Specifying no file type after the equal sign removes the current " +"Specifying no file type after the equal sign removes the current\n" "association, if any.\n" msgstr "" "ASSOC 顯示或修改副檔名的關聯。\n" @@ -9990,17 +10146,29 @@ "如果只使用副檔名,則顯示它目前的關聯。\n" "在等號之號如果沒有指定檔案類型就移除目前的任何關聯。\n" -#: cmd.rc:269 +#: cmd.rc:300 +#, fuzzy +#| msgid "" +#| "FTYPE shows or modifies open commands associated with file types.\n" +#| "\n" +#| "Syntax: FTYPE [fileType[=[openCommand]]]\n" +#| "\n" +#| "Without parameters, shows the file types for which open command strings " +#| "are currently defined.\n" +#| "If used with only a file type, displays the associated open command " +#| "string, if any.\n" +#| "Specifying no open command after the equal sign removes the command " +#| "string associated to the specified file type.\n" msgid "" "FTYPE shows or modifies open commands associated with file types.\n" "\n" "Syntax: FTYPE [fileType[=[openCommand]]]\n" "\n" -"Without parameters, shows the file types for which open command strings are " +"Without parameters, shows the file types for which open command strings are\n" "currently defined.\n" -"If used with only a file type, displays the associated open command string, " +"If used with only a file type, displays the associated open command string,\n" "if any.\n" -"Specifying no open command after the equal sign removes the command string " +"Specifying no open command after the equal sign removes the command string\n" "associated to the specified file type.\n" msgstr "" "FTYPE 顯示或修改開啟命令所關聯的檔案類型。\n" @@ -10011,29 +10179,38 @@ "如果只使用檔案類型,則顯示關聯的任何開啟命令字串。\n" "在等號之號如果沒有指定檔案類型就移除對於給定檔案型態的任何關聯命令字串。\n" -#: cmd.rc:271 +#: cmd.rc:303 msgid "MORE displays output of files or piped input in pages.\n" msgstr "MORE 以分頁的方式顯示檔案的輸出或管線的輸入。\n" -#: cmd.rc:275 +#: cmd.rc:308 +#, fuzzy +#| msgid "" +#| "CHOICE displays a text and waits, until the User\n" +#| "presses an allowed Key from a selectable list.\n" +#| "CHOICE is mainly used to build a menu selection in a batch file.\n" msgid "" -"CHOICE displays a text and waits, until the User\n" -"presses an allowed Key from a selectable list.\n" +"CHOICE displays a text and waits, until the User presses an allowed Key\n" +"from a selectable list.\n" "CHOICE is mainly used to build a menu selection in a batch file.\n" msgstr "" "CHOICE 顯示文字並等待,直到使用者\n" "從可選取的清單中按下允許的鍵。\n" "CHOICE 主要用來在批次檔中建構選單選擇。\n" -#: cmd.rc:279 +#: cmd.rc:312 +#, fuzzy +#| msgid "" +#| "EXIT terminates the current command session and returns\n" +#| "to the operating system or shell from which you invoked cmd.\n" msgid "" -"EXIT terminates the current command session and returns\n" -"to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n" +"system or shell from which you invoked cmd.\n" msgstr "" "EXIT 終止目前的命令作業階段並回到\n" "您從其調用 cmd 的作業系統或命令殼。\n" -#: cmd.rc:317 +#: cmd.rc:351 msgid "" "CMD built-in commands are:\n" "ASSOC\t\tShow or modify file extension associations\n" @@ -10113,110 +10290,110 @@ "\n" "輸入 HELP <命令> 以獲得關於以上任何命令的進一步資訊。\n" -#: cmd.rc:319 +#: cmd.rc:353 msgid "Are you sure?" msgstr "您確定嗎?" -#: cmd.rc:320 xcopy.rc:43 +#: cmd.rc:354 xcopy.rc:43 msgctxt "Yes key" msgid "Y" msgstr "Y" -#: cmd.rc:321 xcopy.rc:44 +#: cmd.rc:355 xcopy.rc:44 msgctxt "No key" msgid "N" msgstr "N" -#: cmd.rc:322 +#: cmd.rc:356 msgid "File association missing for extension %1\n" msgstr "缺少用於延伸檔名 %1 的檔案關聯\n" -#: cmd.rc:323 +#: cmd.rc:357 msgid "No open command associated with file type '%1'\n" msgstr "沒有與檔案類型 %1 相關聯的開啟命令\n" -#: cmd.rc:324 +#: cmd.rc:358 msgid "Overwrite %1?" msgstr "覆寫 %1?" -#: cmd.rc:325 +#: cmd.rc:359 msgid "More..." msgstr "更多..." -#: cmd.rc:326 +#: cmd.rc:360 msgid "Line in Batch processing possibly truncated. Using:\n" msgstr "命令列於批次處理時可能會被截斷。使用:\n" -#: cmd.rc:328 +#: cmd.rc:362 msgid "Argument missing\n" msgstr "缺少引數\n" -#: cmd.rc:329 +#: cmd.rc:363 msgid "Syntax error\n" msgstr "語法錯誤\n" -#: cmd.rc:331 +#: cmd.rc:365 msgid "No help available for %1\n" msgstr "沒有關於 %1 的說明\n" -#: cmd.rc:332 +#: cmd.rc:366 msgid "Target to GOTO not found\n" msgstr "找不到 GOTO 的目標\n" -#: cmd.rc:333 +#: cmd.rc:367 msgid "Current Date is %1\n" msgstr "今天是 %1\n" -#: cmd.rc:334 +#: cmd.rc:368 msgid "Current Time is %1\n" msgstr "現在時間是 %1\n" -#: cmd.rc:335 +#: cmd.rc:369 msgid "Enter new date: " msgstr "輸入新日期:" -#: cmd.rc:336 +#: cmd.rc:370 msgid "Enter new time: " msgstr "輸入新時間:" -#: cmd.rc:337 +#: cmd.rc:371 msgid "Environment variable %1 not defined\n" msgstr "環境變數 %1 未定義\n" -#: cmd.rc:338 xcopy.rc:41 +#: cmd.rc:372 xcopy.rc:41 msgid "Failed to open '%1'\n" msgstr "開啟 %1 失敗\n" -#: cmd.rc:339 +#: cmd.rc:373 msgid "Cannot call batch label outside of a batch script\n" msgstr "無法呼叫批次命令稿外部的批次標貼\n" -#: cmd.rc:340 xcopy.rc:45 +#: cmd.rc:374 xcopy.rc:45 msgctxt "All key" msgid "A" msgstr "A" -#: cmd.rc:341 +#: cmd.rc:375 msgid "Delete %1?" msgstr "刪除 %1?" -#: cmd.rc:342 +#: cmd.rc:376 msgid "Echo is %1\n" msgstr "回應為 %1\n" -#: cmd.rc:343 +#: cmd.rc:377 msgid "Verify is %1\n" msgstr "驗證為 %1\n" -#: cmd.rc:344 +#: cmd.rc:378 msgid "Verify must be ON or OFF\n" msgstr "驗證必須為 ON 或 OFF\n" -#: cmd.rc:345 +#: cmd.rc:379 msgid "Parameter error\n" msgstr "參數錯誤\n" -#: cmd.rc:346 +#: cmd.rc:380 msgid "" "Volume Serial Number is %1!04x!-%2!04x!\n" "\n" @@ -10224,74 +10401,74 @@ "卷冊序號是 %1!04x!-%2!04x!\n" "\n" -#: cmd.rc:347 +#: cmd.rc:381 msgid "Volume label (11 characters, for none)?" msgstr "卷冊標貼 (11 個字元, 表示沒有)?" -#: cmd.rc:348 +#: cmd.rc:382 msgid "PATH not found\n" msgstr "找不到 PATH\n" -#: cmd.rc:349 +#: cmd.rc:383 msgid "Press any key to continue... " msgstr "按下任何鍵繼續... " -#: cmd.rc:350 +#: cmd.rc:384 msgid "Wine Command Prompt" msgstr "Wine 命令提示符號" -#: cmd.rc:351 +#: cmd.rc:385 msgid "Microsoft Windows %1!S!\n" msgstr "" -#: cmd.rc:352 +#: cmd.rc:386 msgid "More? " msgstr "更多?" -#: cmd.rc:353 +#: cmd.rc:387 msgid "The input line is too long.\n" msgstr "輸入列太長。\n" -#: cmd.rc:354 +#: cmd.rc:388 msgid "Volume in drive %1!c! is %2\n" msgstr "位於儲存裝置 %1!c! 的卷冊為 %2\n" -#: cmd.rc:355 +#: cmd.rc:389 msgid "Volume in drive %1!c! has no label.\n" msgstr "位於儲存裝置 %1!c! 的卷冊沒有任何標貼。\n" -#: cmd.rc:356 +#: cmd.rc:390 #, fuzzy msgid " (Yes|No)" msgstr " (是|否)" -#: cmd.rc:357 +#: cmd.rc:391 #, fuzzy msgid " (Yes|No|All)" msgstr " (是|否|全部)" -#: cmd.rc:358 +#: cmd.rc:392 msgid "" "Can't recognize '%1' as an internal or external command, or batch script.\n" msgstr "無法識別 %1 為內部、外部命令或是批次命令稿。\n" -#: cmd.rc:359 +#: cmd.rc:393 msgid "Division by zero error.\n" msgstr "被零除的錯誤。\n" -#: cmd.rc:360 +#: cmd.rc:394 msgid "Expected an operand.\n" msgstr "預期為一個運算元。\n" -#: cmd.rc:361 +#: cmd.rc:395 msgid "Expected an operator.\n" msgstr "預期為一個運算子。\n" -#: cmd.rc:362 +#: cmd.rc:396 msgid "Mismatch in parentheses.\n" msgstr "小括號不匹配。\n" -#: cmd.rc:363 +#: cmd.rc:397 msgid "" "Badly formed number - must be one of decimal (12),\n" " hexadecimal (0x34) or octal (056).\n" @@ -11901,7 +12078,7 @@ msgid "regsvr32: Successfully uninstalled DLL '%1'\n" msgstr "" -#: start.rc:55 +#: start.rc:58 msgid "" "Application could not be started, or no application associated with the " "specified file.\n" @@ -11910,7 +12087,7 @@ "無法啟始應用程式,或是沒有與指定檔案關聯的應用程式。\n" "ShellExecuteEx 失敗" -#: start.rc:57 +#: start.rc:60 msgid "Could not translate the specified Unix filename to a DOS filename." msgstr "無法翻譯指定的 Unix 檔名到 DOS 檔名。" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/programs/cmd/cmd.rc wine-staging-1.7.47~ubuntu14.10.1/programs/cmd/cmd.rc --- wine-staging-1.7.46~ubuntu14.10.1/programs/cmd/cmd.rc 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/programs/cmd/cmd.rc 2015-07-12 05:36:18.000000000 +0000 @@ -30,37 +30,51 @@ STRINGTABLE { WCMD_CALL, -"CALL is used within a batch file to execute commands\n\ -from another batch file. When the batch file exits, control returns to\n\ -the file which called it. The CALL command may supply parameters to the\n\ -called procedure.\n\ +"CALL is used within a batch file to execute commands from\n\ +another batch file. When the batch file exits, control returns to the file\n\ +which called it. The CALL command may supply parameters to the called\n\ +procedure.\n\ \n\ Changes to default directory, environment variables etc made within a\n\ called procedure are inherited by the caller.\n" - WCMD_CD, "CD is the short version of CHDIR. It changes the current\n\ + WCMD_CD, +"CD is the short version of CHDIR. It changes the current\n\ default directory.\n" - WCMD_CHDIR, "CHDIR changes the current default directory.\n" - WCMD_CLS, "CLS clears the console screen.\n" + WCMD_CHDIR, +"CHDIR changes the current default directory.\n" - WCMD_COPY, "COPY copies a file.\n" - WCMD_CTTY, "CTTY changes the input/output device.\n" - WCMD_DATE, "DATE shows or changes the system date.\n" - WCMD_DEL, "DEL deletes a file or set of files.\n" - WCMD_DIR, "DIR lists the contents of a directory.\n" + WCMD_CLS, +"CLS clears the console screen.\n" + + WCMD_COPY, +"COPY copies a file.\n" + + WCMD_CTTY, +"CTTY changes the input/output device.\n" + + WCMD_DATE, +"DATE shows or changes the system date.\n" + + WCMD_DEL, +"DEL deletes a file or set of files.\n" + + WCMD_DIR, +"DIR lists the contents of a directory.\n" WCMD_ECHO, "ECHO displays on the current terminal device.\n\ \n\ -ECHO ON causes all subsequent commands in a batch file to be displayed\n\ -on the terminal device before they are executed.\n\ +ECHO ON causes all subsequent commands in a batch file to be displayed on\n\ +the terminal device before they are executed.\n\ \n\ ECHO OFF reverses the effect of a previous ECHO ON (ECHO is OFF by\n\ default). The ECHO OFF command can be prevented from displaying by\n\ preceding it with an @ sign.\n" - WCMD_ERASE, "ERASE deletes a file or set of files.\n" + WCMD_ERASE, +"ERASE deletes a file or set of files.\n" WCMD_FOR, "The FOR command is used to execute a command for each of a set of files.\n\ @@ -70,18 +84,19 @@ The % sign must be doubled when using FOR in a batch file.\n" WCMD_GOTO, -"The GOTO command transfers execution to another statement within a\n\ -batch file.\n\ +"The GOTO command transfers execution to another statement within a batch\n\ +file.\n\ \n\ -The label which is the target of a GOTO may be up to 255 characters\n\ -long but may not include spaces (this is different from other operating\n\ -systems). If two or more identical labels exist in a batch file the\n\ -first one will always be executed. Attempting to GOTO a nonexistent\n\ -label terminates the batch file execution.\n\ +The label which is the target of a GOTO may be up to 255 characters long\n\ +but may not include spaces (this is different from other operating\n\ +systems). If two or more identical labels exist in a batch file the first\n\ +one will always be executed. Attempting to GOTO a nonexistent label\n\ +terminates the batch file execution.\n\ \n\ GOTO has no effect when used interactively.\n" - WCMD_HELP, "HELP shows brief help details on a topic.\n\ + WCMD_HELP, +"HELP shows brief help details on a topic.\n\ HELP without an argument shows all CMD built-in commands.\n" WCMD_IF, @@ -94,7 +109,8 @@ In the second form of the command, string1 and string2 must be in double\n\ quotes. The comparison is not case-sensitive.\n" - WCMD_LABEL, "LABEL is used to set a disk volume label.\n\ + WCMD_LABEL, +"LABEL is used to set a disk volume label.\n\ \n\ Syntax: LABEL [drive:]\n\ The command will prompt you for the new volume label for the given drive.\n\ @@ -102,21 +118,23 @@ WCMD_MD, "MD is the short version of MKDIR. It creates a subdirectory.\n" + WCMD_MKDIR, "MKDIR creates a subdirectory.\n" + WCMD_MOVE, "MOVE relocates a file or directory to a new point within the file system.\n\ \n\ -If the item being moved is a directory then all the files and subdirectories\n\ -below the item are moved as well.\n\ +If the item being moved is a directory then all the files and\n\ +subdirectories below the item are moved as well.\n\ \n\ MOVE fails if the old and new locations are on different DOS drive letters.\n" WCMD_PATH, "PATH displays or changes the cmd search path.\n\ \n\ -Entering PATH will display the current PATH setting (initially taken\n\ -from the registry). To change the setting follow the\n\ -PATH command with the new value.\n\ +Entering PATH will display the current PATH setting (initially taken from\n\ +the registry). To change the setting follow the PATH command with the new\n\ +value.\n\ \n\ It is also possible to modify the PATH by using the PATH environment\n\ variable, for example:\n\ @@ -125,8 +143,8 @@ WCMD_PAUSE, "PAUSE displays a message on the screen asking the user to press a key.\n\ \n\ -It is mainly useful in batch files to allow the user to read the output\n\ -of a previous command before it scrolls off the screen.\n" +It is mainly useful in batch files to allow the user to read the output of\n\ +a previous command before it scrolls off the screen.\n" WCMD_PROMPT, "PROMPT sets the command-line prompt.\n\ @@ -150,41 +168,47 @@ so the command 'SET PROMPT=text' has the same effect as 'PROMPT text'.\n" WCMD_REM, -"A command line beginning with REM (followed by a space) performs no\n\ -action, and can therefore be used as a comment in a batch file.\n" +"A command line beginning with REM (followed by a space) performs no action,\n\ +and can therefore be used as a comment in a batch file.\n" WCMD_REN, "REN is the short version of RENAME. It renames a file.\n" + WCMD_RENAME, "RENAME renames a file.\n" + WCMD_RD, "RD is the short version of RMDIR. It deletes a directory.\n" + WCMD_RMDIR, "RMDIR deletes a directory.\n" WCMD_START, -"Start a program, or open a document in the program normally used for files with that suffix.\n\ +"Start a program, or open a document in the program normally used for files\n\ +with that suffix.\n\ Usage:\n\ start [options] program_filename [...]\n\ start [options] document_filename\n\ \n\ Options:\n\ -\"title\" Specifies the title of the child windows.\n\ -/d directory Start the program in the specified directory.\n\ -/b Don't create a new console for the program.\n\ -/i Start the program with fresh environment variables.\n\ -/min Start the program minimized.\n\ -/max Start the program maximized.\n\ -/low Start the program in the idle priority class.\n\ -/normal Start the program in the normal priority class.\n\ -/high Start the program in the high priority class.\n\ -/realtime Start the program in the realtime priority class.\n\ -/abovenormal Start the program in the abovenormal priority class.\n\ -/belownormal Start the program in the belownormal priority class.\n\ -/node n Start the program on the specified NUMA node.\n\ +\"title\" Specifies the title of the child windows.\n\ +/d directory Start the program in the specified directory.\n\ +/b Don't create a new console for the program.\n\ +/i Start the program with fresh environment variables.\n\ +/min Start the program minimized.\n\ +/max Start the program maximized.\n\ +/low Start the program in the idle priority class.\n\ +/normal Start the program in the normal priority class.\n\ +/high Start the program in the high priority class.\n\ +/realtime Start the program in the realtime priority class.\n\ +/abovenormal Start the program in the abovenormal priority class.\n\ +/belownormal Start the program in the belownormal priority class.\n\ +/node n Start the program on the specified NUMA node.\n\ /affinity mask Start the program with the specified affinity mask.\n\ -/wait Wait for the started program to finish, then exit with its exit code.\n\ -/unix Use a Unix filename and start the file like windows explorer.\n\ -/ProgIDOpen Open a document using the specified progID.\n\ -/? Display this help and exit.\n" +/wait Wait for the started program to finish, then exit with its\n\ + exit code.\n\ +/unix Use a Unix filename and start the file like windows\n\ + explorer.\n\ +/ProgIDOpen Open a document using the specified progID.\n\ +/? Display this help and exit.\n" WCMD_SET, "SET displays or changes the cmd environment variables.\n\ @@ -195,27 +219,28 @@ \n\ SET =\n\ \n\ -where and are character strings. There must be no\n\ -space before the equals sign, nor can the variable name\n\ -have embedded spaces.\n\ -\n\ -Under Wine, the environment of the underlying operating system is\n\ -included into the Win32 environment, there will generally therefore be\n\ -many more values than in a native Win32 implementation. Note that it is\n\ -not possible to affect the operating system environment from within cmd.\n" +where and are character strings. There must be no space\n\ +before the equals sign, nor can the variable name have embedded spaces.\n\ +\n\ +Under Wine, the environment of the underlying operating system is included\n\ +into the Win32 environment, there will generally therefore be many more\n\ +values than in a native Win32 implementation. Note that it is not possible\n\ +to affect the operating system environment from within cmd.\n" WCMD_SHIFT, -"SHIFT is used in a batch file to remove one parameter from the head of\n\ -the list, so parameter 2 becomes parameter 1 and so on. It has no effect\n\ -if called from the command line.\n" +"SHIFT is used in a batch file to remove one parameter from the head of the\n\ +list, so parameter 2 becomes parameter 1 and so on. It has no effect if\n\ +called from the command line.\n" - WCMD_TIME, "TIME sets or shows the current system time.\n" + WCMD_TIME, +"TIME sets or shows the current system time.\n" - WCMD_TITLE, "TITLE sets the window title for the cmd window.\n" + WCMD_TITLE, +"TITLE sets the window title for the cmd window.\n" WCMD_TYPE, -"TYPE copies to the console device (or elsewhere\n\ -if redirected). No check is made that the file is readable text.\n" +"TYPE copies to the console device (or elsewhere if\n\ +redirected). No check is made that the file is readable text.\n" WCMD_VERIFY, "VERIFY is used to set, clear or test the verify flag. Valid forms are:\n\ @@ -229,11 +254,12 @@ WCMD_VER, "VER displays the version of cmd you are running.\n" - WCMD_VOL, "VOL shows the volume label of a disk device.\n" + WCMD_VOL, +"VOL shows the volume label of a disk device.\n" WCMD_ENDLOCAL, -"ENDLOCAL ends localization of environment changes in a batch file\n\ -which were introduced by a preceding SETLOCAL.\n" +"ENDLOCAL ends localization of environment changes in a batch file which\n\ +were introduced by a preceding SETLOCAL.\n" WCMD_SETLOCAL, "SETLOCAL starts localization of environment changes in a batch file.\n\ @@ -243,41 +269,49 @@ file, whichever comes first), at which point the previous environment\n\ settings are restored.\n" - WCMD_PUSHD, "PUSHD saves the current directory onto a\n\ -stack, and then changes the current directory to the supplied one.\n" + WCMD_PUSHD, +"PUSHD saves the current directory onto a stack, and then\n\ +changes the current directory to the supplied one.\n" - WCMD_POPD, "POPD changes current directory to the last one saved with PUSHD.\n" + WCMD_POPD, +"POPD changes current directory to the last one saved with PUSHD.\n" - WCMD_ASSOC, "ASSOC shows or modifies file extension associations.\n\ + WCMD_ASSOC, +"ASSOC shows or modifies file extension associations.\n\ \n\ Syntax: ASSOC [.ext[=[fileType]]]\n\ \n\ ASSOC without parameters displays current file associations.\n\ If used with only a file extension, displays the current association.\n\ -Specifying no file type after the equal sign removes the current association, if any.\n" +Specifying no file type after the equal sign removes the current\n\ +association, if any.\n" - WCMD_FTYPE, "FTYPE shows or modifies open commands associated with file types.\n\ + WCMD_FTYPE, +"FTYPE shows or modifies open commands associated with file types.\n\ \n\ Syntax: FTYPE [fileType[=[openCommand]]]\n\ \n\ -Without parameters, shows the file types for which open command strings \ -are currently defined.\n\ -If used with only a file type, displays the associated open command string, \ +Without parameters, shows the file types for which open command strings are\n\ +currently defined.\n\ +If used with only a file type, displays the associated open command string,\n\ if any.\n\ -Specifying no open command after the equal sign removes the command string \ +Specifying no open command after the equal sign removes the command string\n\ associated to the specified file type.\n" - WCMD_MORE, "MORE displays output of files or piped input in pages.\n" + WCMD_MORE, +"MORE displays output of files or piped input in pages.\n" - WCMD_CHOICE, "CHOICE displays a text and waits, until the User\n\ -presses an allowed Key from a selectable list.\n\ + WCMD_CHOICE, +"CHOICE displays a text and waits, until the User presses an allowed Key\n\ +from a selectable list.\n\ CHOICE is mainly used to build a menu selection in a batch file.\n" WCMD_EXIT, -"EXIT terminates the current command session and returns\n\ -to the operating system or shell from which you invoked cmd.\n" +"EXIT terminates the current command session and returns to the operating\n\ +system or shell from which you invoked cmd.\n" - WCMD_ALLHELP, "CMD built-in commands are:\n\ + WCMD_ALLHELP, +"CMD built-in commands are:\n\ ASSOC\t\tShow or modify file extension associations\n\ ATTRIB\t\tShow or change DOS file attributes\n\ CALL\t\tInvoke a batch file from inside another\n\ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/programs/explorer/desktop.c wine-staging-1.7.47~ubuntu14.10.1/programs/explorer/desktop.c --- wine-staging-1.7.46~ubuntu14.10.1/programs/explorer/desktop.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/programs/explorer/desktop.c 2015-07-12 05:36:18.000000000 +0000 @@ -1171,7 +1171,7 @@ static HRESULT WINAPI shellwindows_OnNavigate(IShellWindows *iface, LONG cookie, VARIANT *loc) { - FIXME("0x%x %p\n", cookie, debugstr_variant(loc)); + FIXME("0x%x %s\n", cookie, debugstr_variant(loc)); return E_NOTIMPL; } @@ -1184,7 +1184,7 @@ static HRESULT WINAPI shellwindows_FindWindowSW(IShellWindows *iface, VARIANT *loc, VARIANT *root, int class, LONG *hwnd, int options, IDispatch **disp) { - TRACE("%s %p 0x%x %p 0x%x %p\n", debugstr_variant(loc), debugstr_variant(root), + TRACE("%s %s 0x%x %p 0x%x %p\n", debugstr_variant(loc), debugstr_variant(root), class, hwnd, options, disp); if (class != SWC_DESKTOP) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/programs/oleview/tree.c wine-staging-1.7.47~ubuntu14.10.1/programs/oleview/tree.c --- wine-staging-1.7.46~ubuntu14.10.1/programs/oleview/tree.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/programs/oleview/tree.c 2015-07-12 05:36:18.000000000 +0000 @@ -500,10 +500,12 @@ { TVINSERTSTRUCTW tvis; HKEY hKey, hCurKey; + WCHAR keyName[MAX_LOAD_STRING]; WCHAR valName[MAX_LOAD_STRING]; WCHAR buffer[MAX_LOAD_STRING]; LONG lenBuffer; DWORD lenBufferHlp; + DWORD lenValName; int i=-1; U(tvis).item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_CHILDREN; @@ -520,23 +522,24 @@ { i++; - if(RegEnumKeyW(hKey, i, valName, sizeof(valName)/sizeof(valName[0])) != ERROR_SUCCESS) break; + if(RegEnumKeyW(hKey, i, keyName, sizeof(keyName)/sizeof(keyName[0])) != ERROR_SUCCESS) break; - if(RegOpenKeyW(hKey, valName, &hCurKey) != ERROR_SUCCESS) continue; + if(RegOpenKeyW(hKey, keyName, &hCurKey) != ERROR_SUCCESS) continue; lenBuffer = sizeof(WCHAR[MAX_LOAD_STRING]); lenBufferHlp = sizeof(WCHAR[MAX_LOAD_STRING]); + lenValName = sizeof(WCHAR[MAX_LOAD_STRING]); if(RegQueryValueW(hCurKey, NULL, buffer, &lenBuffer) == ERROR_SUCCESS && *buffer) U(tvis).item.pszText = buffer; - else if(RegEnumValueW(hCurKey, 0, NULL, NULL, NULL, NULL, + else if(RegEnumValueW(hCurKey, 0, valName, &lenValName, NULL, NULL, (LPBYTE)buffer, &lenBufferHlp) == ERROR_SUCCESS && *buffer) U(tvis).item.pszText = buffer; else continue; RegCloseKey(hCurKey); - U(tvis).item.lParam = CreateITEM_INFO(REGTOP, valName, valName, NULL); + U(tvis).item.lParam = CreateITEM_INFO(REGTOP, keyName, keyName, NULL); SendMessageW(globals.hTree, TVM_INSERTITEMW, 0, (LPARAM)&tvis); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/programs/regedit/treeview.c wine-staging-1.7.47~ubuntu14.10.1/programs/regedit/treeview.c --- wine-staging-1.7.46~ubuntu14.10.1/programs/regedit/treeview.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/programs/regedit/treeview.c 2015-07-12 05:36:18.000000000 +0000 @@ -226,9 +226,10 @@ if (mode & (SEARCH_VALUES | SEARCH_CONTENT)) { int i, adjust; - WCHAR valName[KEY_MAX_LEN], *KeyPath; + WCHAR *valName, *KeyPath; HKEY hKey, hRoot; - DWORD lenName; + DWORD lenName, lenNameMax, lenValueMax; + WCHAR *buffer = NULL; KeyPath = GetItemPath(hwndTV, hItem, &hRoot); @@ -241,7 +242,14 @@ } HeapFree(GetProcessHeap(), 0, KeyPath); - lenName = KEY_MAX_LEN; + + if (ERROR_SUCCESS != RegQueryInfoKeyW(hKey, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &lenNameMax, &lenValueMax, NULL, NULL)) + return FALSE; + + lenName = ++lenNameMax; + if (!(valName = HeapAlloc(GetProcessHeap(), 0, lenName * sizeof(valName[0]) ))) + return FALSE; + adjust = 0; /* RegEnumValue won't return empty default value, so fake it when dealing with *row, which corresponds to list view rows, not value ids */ @@ -252,14 +260,16 @@ if (i < 0) i = 0; while(1) { DWORD lenValue = 0, type = 0; - lenName = KEY_MAX_LEN; + lenName = lenNameMax; if (ERROR_SUCCESS != RegEnumValueW(hKey, - i, valName, &lenName, NULL, &type, NULL, &lenValue)) + i, valName, &lenName, NULL, &type, NULL, NULL)) break; if (mode & SEARCH_VALUES) { if (match_string(valName, sstring, mode)) { + HeapFree(GetProcessHeap(), 0, valName); + HeapFree(GetProcessHeap(), 0, buffer); RegCloseKey(hKey); *row = i+adjust; return TRUE; @@ -267,23 +277,27 @@ } if ((mode & SEARCH_CONTENT) && (type == REG_EXPAND_SZ || type == REG_SZ)) { - LPWSTR buffer; - buffer = HeapAlloc(GetProcessHeap(), 0, lenValue); + if (!buffer) + buffer = HeapAlloc(GetProcessHeap(), 0, lenValueMax); if (!buffer) break; - if (ERROR_SUCCESS != RegEnumValueW(hKey, i, NULL, NULL, NULL, &type, (LPBYTE)buffer, &lenValue)) + lenName = lenNameMax; + lenValue = lenValueMax; + if (ERROR_SUCCESS != RegEnumValueW(hKey, i, valName, &lenName, NULL, &type, (LPBYTE)buffer, &lenValue)) break; if (match_string(buffer, sstring, mode)) { + HeapFree(GetProcessHeap(), 0, valName); HeapFree(GetProcessHeap(), 0, buffer); RegCloseKey(hKey); *row = i+adjust; return TRUE; } - HeapFree(GetProcessHeap(), 0, buffer); } i++; } + HeapFree(GetProcessHeap(), 0, valName); + HeapFree(GetProcessHeap(), 0, buffer); RegCloseKey(hKey); } return FALSE; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/programs/start/start.rc wine-staging-1.7.47~ubuntu14.10.1/programs/start/start.rc --- wine-staging-1.7.46~ubuntu14.10.1/programs/start/start.rc 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/programs/start/start.rc 2015-07-12 05:36:18.000000000 +0000 @@ -26,30 +26,33 @@ STRINGTABLE { -STRING_USAGE, "Start a program, or open a document in the program normally used for files with that suffix.\n\ +STRING_USAGE, "Start a program, or open a document in the program normally used for files\n\ +with that suffix.\n\ Usage:\n\ start [options] program_filename [...]\n\ start [options] document_filename\n\ \n\ Options:\n\ -\"title\" Specifies the title of the child windows.\n\ -/d directory Start the program in the specified directory.\n\ -/b Don't create a new console for the program.\n\ -/i Start the program with fresh environment variables.\n\ -/min Start the program minimized.\n\ -/max Start the program maximized.\n\ -/low Start the program in the idle priority class.\n\ -/normal Start the program in the normal priority class.\n\ -/high Start the program in the high priority class.\n\ -/realtime Start the program in the realtime priority class.\n\ -/abovenormal Start the program in the abovenormal priority class.\n\ -/belownormal Start the program in the belownormal priority class.\n\ -/node n Start the program on the specified NUMA node.\n\ +\"title\" Specifies the title of the child windows.\n\ +/d directory Start the program in the specified directory.\n\ +/b Don't create a new console for the program.\n\ +/i Start the program with fresh environment variables.\n\ +/min Start the program minimized.\n\ +/max Start the program maximized.\n\ +/low Start the program in the idle priority class.\n\ +/normal Start the program in the normal priority class.\n\ +/high Start the program in the high priority class.\n\ +/realtime Start the program in the realtime priority class.\n\ +/abovenormal Start the program in the abovenormal priority class.\n\ +/belownormal Start the program in the belownormal priority class.\n\ +/node n Start the program on the specified NUMA node.\n\ /affinity mask Start the program with the specified affinity mask.\n\ -/wait Wait for the started program to finish, then exit with its exit code.\n\ -/unix Use a Unix filename and start the file like windows explorer.\n\ -/ProgIDOpen Open a document using the specified progID.\n\ -/? Display this help and exit.\n" +/wait Wait for the started program to finish, then exit with its\n\ + exit code.\n\ +/unix Use a Unix filename and start the file like windows\n\ + explorer.\n\ +/ProgIDOpen Open a document using the specified progID.\n\ +/? Display this help and exit.\n" STRING_EXECFAIL, "Application could not be started, or no application associated with the specified file.\nShellExecuteEx failed" diff -Nru wine-staging-1.7.46~ubuntu14.10.1/programs/winecfg/drive.c wine-staging-1.7.47~ubuntu14.10.1/programs/winecfg/drive.c --- wine-staging-1.7.46~ubuntu14.10.1/programs/winecfg/drive.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/programs/winecfg/drive.c 2015-07-12 05:36:18.000000000 +0000 @@ -367,6 +367,7 @@ } else WINE_WARN( "failed to set drive %c: to %s type %u err %u\n", 'a' + i, wine_dbgstr_a(drives[i].unixpath), drives[i].type, GetLastError() ); + HeapFree( GetProcessHeap(), 0, ioctl ); } CloseHandle( mgr ); } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/programs/winecfg/libraries.c wine-staging-1.7.47~ubuntu14.10.1/programs/winecfg/libraries.c --- wine-staging-1.7.46~ubuntu14.10.1/programs/winecfg/libraries.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/programs/winecfg/libraries.c 2015-07-12 05:36:18.000000000 +0000 @@ -106,7 +106,7 @@ enum dllmode res; len = strlen(in); - out = HeapAlloc(GetProcessHeap(), 0, len); + out = HeapAlloc(GetProcessHeap(), 0, len + 1); /* remove the spaces */ for (i = j = 0; i <= len; ++i) { diff -Nru wine-staging-1.7.46~ubuntu14.10.1/programs/wineconsole/registry.c wine-staging-1.7.47~ubuntu14.10.1/programs/wineconsole/registry.c --- wine-staging-1.7.46~ubuntu14.10.1/programs/wineconsole/registry.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/programs/wineconsole/registry.c 2015-07-12 05:36:18.000000000 +0000 @@ -40,6 +40,7 @@ static const WCHAR wszFontWeight[] = {'F','o','n','t','W','e','i','g','h','t',0}; static const WCHAR wszHistoryBufferSize[] = {'H','i','s','t','o','r','y','B','u','f','f','e','r','S','i','z','e',0}; static const WCHAR wszHistoryNoDup[] = {'H','i','s','t','o','r','y','N','o','D','u','p',0}; +static const WCHAR wszInsertMode[] = {'I','n','s','e','r','t','M','o','d','e',0}; static const WCHAR wszMenuMask[] = {'M','e','n','u','M','a','s','k',0}; static const WCHAR wszQuickEdit[] = {'Q','u','i','c','k','E','d','i','t',0}; static const WCHAR wszScreenBufferSize[] = {'S','c','r','e','e','n','B','u','f','f','e','r','S','i','z','e',0}; @@ -48,10 +49,10 @@ void WINECON_DumpConfig(const char* pfx, const struct config_data* cfg) { - WINE_TRACE("%s cell=(%u,%u) cursor=(%d,%d) attr=%02x font=%s/%u hist=%u/%d flags=%c%c msk=%08x sb=(%u,%u) win=(%u,%u)x(%u,%u) edit=%u registry=%s\n", + WINE_TRACE("%s cell=(%u,%u) cursor=(%d,%d) attr=%02x font=%s/%u hist=%u/%d flags=%c%c%c msk=%08x sb=(%u,%u) win=(%u,%u)x(%u,%u) edit=%u registry=%s\n", pfx, cfg->cell_width, cfg->cell_height, cfg->cursor_size, cfg->cursor_visible, cfg->def_attr, wine_dbgstr_w(cfg->face_name), cfg->font_weight, cfg->history_size, cfg->history_nodup ? 1 : 2, - cfg->quick_edit ? 'Q' : 'q', cfg->exit_on_die ? 'X' : 'x', + cfg->insert_mode ? 'I' : 'i', cfg->quick_edit ? 'Q' : 'q', cfg->exit_on_die ? 'X' : 'x', cfg->menu_mask, cfg->sb_width, cfg->sb_height, cfg->win_pos.X, cfg->win_pos.Y, cfg->win_width, cfg->win_height, cfg->edition_mode, wine_dbgstr_w(cfg->registry)); @@ -126,6 +127,10 @@ cfg->history_nodup = val; count = sizeof(val); + if (!RegQueryValueExW(hConKey, wszInsertMode, 0, &type, (LPBYTE)&val, &count)) + cfg->insert_mode = val; + + count = sizeof(val); if (!RegQueryValueExW(hConKey, wszMenuMask, 0, &type, (LPBYTE)&val, &count)) cfg->menu_mask = val; @@ -175,6 +180,7 @@ cfg->font_weight = 0; cfg->history_size = 50; cfg->history_nodup = 0; + cfg->insert_mode = 1; cfg->menu_mask = 0; cfg->quick_edit = 0; cfg->sb_height = 25; @@ -245,6 +251,9 @@ val = cfg->history_nodup; RegSetValueExW(hConKey, wszHistoryNoDup, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); + val = cfg->insert_mode; + RegSetValueExW(hConKey, wszInsertMode, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); + val = cfg->menu_mask; RegSetValueExW(hConKey, wszMenuMask, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/programs/wineconsole/winecon_private.h wine-staging-1.7.47~ubuntu14.10.1/programs/wineconsole/winecon_private.h --- wine-staging-1.7.46~ubuntu14.10.1/programs/wineconsole/winecon_private.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/programs/wineconsole/winecon_private.h 2015-07-12 05:36:18.000000000 +0000 @@ -36,6 +36,7 @@ DWORD font_weight; DWORD history_size; /* number of commands in history buffer */ DWORD history_nodup; /* TRUE if commands are not stored twice in buffer */ + DWORD insert_mode; /* TRUE to insert text at the cursor location; FALSE to overwrite it */ DWORD menu_mask; /* MK_CONTROL MK_SHIFT mask to drive submenu opening */ DWORD quick_edit; /* whether mouse ops are sent to app (false) or used for content selection (true) */ unsigned sb_width; /* active screen buffer width */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/README.md wine-staging-1.7.47~ubuntu14.10.1/README.md --- wine-staging-1.7.46~ubuntu14.10.1/README.md 2015-06-28 17:08:11.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/README.md 2015-07-12 05:53:31.000000000 +0000 @@ -39,7 +39,7 @@ Included bug fixes and improvements ----------------------------------- -**Bug fixes and features in Wine Staging 1.7.46 [236]:** +**Bug fixes and features in Wine Staging 1.7.47 [230]:** *Note: The following list only contains features and bug fixes which are not yet available in vanilla Wine. They are removed from the list as soon as they @@ -50,8 +50,6 @@ * Add HTTP Host header in HttpSendRequest instead of HttpOpenRequest ([Wine Bug #28911](https://bugs.winehq.org/show_bug.cgi?id=28911)) * Add a ProfileList\ registry subkey ([Wine Bug #15670](https://bugs.winehq.org/show_bug.cgi?id=15670)) -* Add implementation for CreateThreadpool ([Wine Bug #35192](https://bugs.winehq.org/show_bug.cgi?id=35192)) -* Add implementation for kernel32.GetNumaProcessorNode ([Wine Bug #38660](https://bugs.winehq.org/show_bug.cgi?id=38660)) * Add implementation for mfplat.MFTRegister ([Wine Bug #37811](https://bugs.winehq.org/show_bug.cgi?id=37811)) * Add implementation for shlwapi.AssocGetPerceivedType * Add nvapi stubs required for GPU PhysX support @@ -64,7 +62,6 @@ * Add stub for D3DXFrameFind ([Wine Bug #38334](https://bugs.winehq.org/show_bug.cgi?id=38334)) * Add stub for D3DXIntersect * Add stub for NtSetLdtEntries/ZwSetLdtEntries ([Wine Bug #26268](https://bugs.winehq.org/show_bug.cgi?id=26268)) -* Add stub for d3d11.D3D11CreateDeviceAndSwapChain ([Wine Bug #33153](https://bugs.winehq.org/show_bug.cgi?id=33153)) * Add stub for gdiplus.GdipCreateEffect ([Wine Bug #32163](https://bugs.winehq.org/show_bug.cgi?id=32163)) * Add stub for ntoskrnl.ExAcquireResourceExclusiveLite * Add stub for ntoskrnl.ExDeleteResourceLite @@ -117,10 +114,8 @@ * Exception during start of fr-043 caused by missing DXTn support ([Wine Bug #37391](https://bugs.winehq.org/show_bug.cgi?id=37391)) * Expose PKEY_AudioEndpoint_PhysicalSpeakers device property in PulseAudio driver * FEAR 1 installer expects basic_string_wchar_dtor to return NULL ([Wine Bug #37358](https://bugs.winehq.org/show_bug.cgi?id=37358)) -* Fallback to global key state for threads without a queue ([Wine Bug #27238](https://bugs.winehq.org/show_bug.cgi?id=27238)) * Fallback to system ping command when CAP_NET_RAW is not available ([Wine Bug #8332](https://bugs.winehq.org/show_bug.cgi?id=8332)) * Fix NULL dereference in ICSeqCompressFrameStart ([Wine Bug #27595](https://bugs.winehq.org/show_bug.cgi?id=27595)) -* Fix black screen on startup introduced by pixelformat changes. ([Wine Bug #35950](https://bugs.winehq.org/show_bug.cgi?id=35950)) * Fix caps lock state issues with multiple processes ([Wine Bug #35907](https://bugs.winehq.org/show_bug.cgi?id=35907)) * Fix comparison of punctuation characters in lstrcmp ([Wine Bug #10767](https://bugs.winehq.org/show_bug.cgi?id=10767)) * Fix condition mask handling in RtlVerifyVersionInfo ([Wine Bug #36143](https://bugs.winehq.org/show_bug.cgi?id=36143)) @@ -170,7 +165,6 @@ * Implement ID3DXEffect::FindNextValidTechnique ([Wine Bug #34101](https://bugs.winehq.org/show_bug.cgi?id=34101)) * Implement IDXGIOutput::GetDesc * Implement a Microsoft Yahei replacement font ([Wine Bug #13829](https://bugs.winehq.org/show_bug.cgi?id=13829)) -* Implement additional stubs for vcomp dlls ([Wine Bug #31640](https://bugs.winehq.org/show_bug.cgi?id=31640)) * Implement an Arial replacement font ([Wine Bug #32323](https://bugs.winehq.org/show_bug.cgi?id=32323)) * Implement combase.WindowsSubstring function * Implement default homepage button in inetcpl.cpl @@ -186,9 +180,7 @@ * Implement stub for ntoskrnl.KeDelayExecutionThread. * Implement stubs for ntoskrnl.Ex{Acquire,Release}FastMutexUnsafe * Implement stubs for ntoskrnl.ObReferenceObjectByPointer and ntoskrnl.ObDereferenceObject -* Implement threadpool timers ([Wine Bug #37306](https://bugs.winehq.org/show_bug.cgi?id=37306)) -* Implement threadpool wait objects -* Implement threadpool work items ([Wine Bug #32531](https://bugs.winehq.org/show_bug.cgi?id=32531)) +* Implement various vcomp functions ([Wine Bug #31640](https://bugs.winehq.org/show_bug.cgi?id=31640)) * Improve ReadDataAvailable handling in FilePipeLocalInformation class * Improve stub for AEV_GetVolumeRange ([Wine Bug #35658](https://bugs.winehq.org/show_bug.cgi?id=35658)) * Improve stub for ID3DXEffectImpl_CloneEffect @@ -196,6 +188,7 @@ * Improve stubs for AEV_{Get,Set}MasterVolumeLevel * Improve stubs for AEV_{Get,Set}Mute * Improvement for heap allocation performance +* Increase buffer size in widl/typegen.c to avoid buffer overflow ([Wine Bug #37129](https://bugs.winehq.org/show_bug.cgi?id=37129)) * Initialize *lpcDevices in RasEnumDevicesA ([Wine Bug #30378](https://bugs.winehq.org/show_bug.cgi?id=30378)) * Initialize System\CurrentControlSet\Control\TimeZoneInformation registry keys * Jedi Knight: Dark Forces II crashes with winmm set to native ([Wine Bug #37983](https://bugs.winehq.org/show_bug.cgi?id=37983)) @@ -220,12 +213,14 @@ * Return default palette entries from GetSystemPaletteEntries for non-palette-based devices * Return fake device type when systemroot is located on virtual disk ([Wine Bug #36546](https://bugs.winehq.org/show_bug.cgi?id=36546)) * Return proper status codes when NtReadFile/NtWriteFile is called on closed (but not disconnected) pipe +* Revert patch causing crash in IrfanView when using the WebP plugin ([Wine Bug #38895](https://bugs.winehq.org/show_bug.cgi?id=38895)) * SO_CONNECT_TIME returns the appropriate time * Scrolling causes mouse and screen to lock in Call to Power II ([Wine Bug #34559](https://bugs.winehq.org/show_bug.cgi?id=34559)) * SecuROM 5.x media validation fails ([Wine Bug #21448](https://bugs.winehq.org/show_bug.cgi?id=21448)) * Send WM_PAINT event during dialog creation ([Wine Bug #35652](https://bugs.winehq.org/show_bug.cgi?id=35652)) * Set NamedPipeState to FILE_PIPE_CLOSING_STATE on broken pipe in NtQueryInformationFile * Show unmounted devices in winecfg and allow changing the unix path +* Silence repeated wbemprox "timeout not supported" fixme ([Wine Bug #37618](https://bugs.winehq.org/show_bug.cgi?id=37618)) * Skip unknown item when decoding a CMS certificate ([Wine Bug #34388](https://bugs.winehq.org/show_bug.cgi?id=34388)) * Software support for Environmental Audio Extensions (EAX) * Super Mario 3: Mario Forever fails to load keyboard mapping from profile files. ([Wine Bug #18099](https://bugs.winehq.org/show_bug.cgi?id=18099)) @@ -253,7 +248,6 @@ * Support for NtSetInformationFile class FileLinkInformation * Support for NtSetInformationFile class FileRenameInformation ([Wine Bug #30399](https://bugs.winehq.org/show_bug.cgi?id=30399)) * Support for PulseAudio backend for audio ([Wine Bug #10495](https://bugs.winehq.org/show_bug.cgi?id=10495)) -* Support for RtlDecompressBuffer ([Wine Bug #37449](https://bugs.winehq.org/show_bug.cgi?id=37449)) * Support for SHCreateSessionKey ([Wine Bug #35630](https://bugs.winehq.org/show_bug.cgi?id=35630)) * Support for TransmitFile ([Wine Bug #5048](https://bugs.winehq.org/show_bug.cgi?id=5048)) * Support for WTSEnumerateProcessesW ([Wine Bug #29903](https://bugs.winehq.org/show_bug.cgi?id=29903)) @@ -272,6 +266,7 @@ * Try harder to get the host name address in getaddrinfo() ([Wine Bug #29609](https://bugs.winehq.org/show_bug.cgi?id=29609)) * Tumblebugs 2 requires DXTn software encoding support ([Wine Bug #29586](https://bugs.winehq.org/show_bug.cgi?id=29586)) * Update a XIM candidate position when cursor location changes ([Wine Bug #30938](https://bugs.winehq.org/show_bug.cgi?id=30938)) +* Use GLX_MESA_query_renderer extension to get more exact GPU infos * Use NVX_GPU_MEMORY_INFO extension for more exact video memory accounting on NVIDIA graphic cards * Use POSIX implementation to enumerate directory content on FreeBSD ([Wine Bug #35397](https://bugs.winehq.org/show_bug.cgi?id=35397)) * Use actual program name if available to describe PulseAudio streams @@ -281,7 +276,6 @@ * Workaround for shlwapi URLs with relative paths * XEMBED support for embedding Wine windows inside Linux applications * eRacer Demo doesn't correctly display text ([Wine Bug #29598](https://bugs.winehq.org/show_bug.cgi?id=29598)) -* msvcrt.strtod should initialize *end with NULL on failure * ntdll is missing WinSqm[Start|End]Session implementation ([Wine Bug #31971](https://bugs.winehq.org/show_bug.cgi?id=31971)) * wglDescribePixelFormat should return max index for NULL descriptor ([Wine Bug #6176](https://bugs.winehq.org/show_bug.cgi?id=6176)) diff -Nru wine-staging-1.7.46~ubuntu14.10.1/server/device.c wine-staging-1.7.47~ubuntu14.10.1/server/device.c --- wine-staging-1.7.46~ubuntu14.10.1/server/device.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/server/device.c 2015-07-12 05:36:18.000000000 +0000 @@ -164,12 +164,14 @@ struct object obj; /* object header */ struct device *device; /* device for this file */ struct fd *fd; /* file descriptor for irp */ + client_ptr_t user_ptr; /* opaque ptr for client side */ struct list entry; /* entry in device list */ struct list requests; /* list of pending irp requests */ }; static void device_file_dump( struct object *obj, int verbose ); static struct fd *device_file_get_fd( struct object *obj ); +static int device_file_close_handle( struct object *obj, struct process *process, obj_handle_t handle ); static void device_file_destroy( struct object *obj ); static enum server_fd_type device_file_get_fd_type( struct fd *fd ); static obj_handle_t device_file_read( struct fd *fd, const async_data_t *async_data, int blocking, @@ -196,7 +198,7 @@ default_set_sd, /* set_sd */ no_lookup_name, /* lookup_name */ no_open_file, /* open_file */ - no_close_handle, /* close_handle */ + device_file_close_handle, /* close_handle */ device_file_destroy /* destroy */ }; @@ -335,31 +337,62 @@ if (device->manager) list_remove( &device->entry ); } +static void add_irp_to_queue( struct device_file *file, struct irp_call *irp ) +{ + struct device_manager *manager = file->device->manager; + + assert( manager ); + + grab_object( irp ); /* grab reference for queued irp */ + irp->thread = (struct thread *)grab_object( current ); + list_add_tail( &file->requests, &irp->dev_entry ); + list_add_tail( &manager->requests, &irp->mgr_entry ); + if (list_head( &manager->requests ) == &irp->mgr_entry) wake_up( &manager->obj, 0 ); /* first one */ +} + static struct object *device_open_file( struct object *obj, unsigned int access, unsigned int sharing, unsigned int options ) { struct device *device = (struct device *)obj; struct device_file *file; - if ((file = alloc_object( &device_file_ops ))) + if (!(file = alloc_object( &device_file_ops ))) return NULL; + + file->device = (struct device *)grab_object( device ); + file->user_ptr = 0; + list_init( &file->requests ); + list_add_tail( &device->files, &file->entry ); + if (device->unix_path) { - file->device = (struct device *)grab_object( device ); - list_init( &file->requests ); - list_add_tail( &device->files, &file->entry ); - if (device->unix_path) - { - mode_t mode = 0666; - access = file->obj.ops->map_access( &file->obj, access ); - file->fd = open_fd( NULL, device->unix_path, O_NONBLOCK | O_LARGEFILE, - &mode, access, sharing, options ); - if (file->fd) set_fd_user( file->fd, &device_file_fd_ops, &file->obj ); - } - else file->fd = alloc_pseudo_fd( &device_file_fd_ops, &file->obj, 0 ); + mode_t mode = 0666; + access = file->obj.ops->map_access( &file->obj, access ); + file->fd = open_fd( NULL, device->unix_path, O_NONBLOCK | O_LARGEFILE, + &mode, access, sharing, options ); + if (file->fd) set_fd_user( file->fd, &device_file_fd_ops, &file->obj ); + } + else file->fd = alloc_pseudo_fd( &device_file_fd_ops, &file->obj, 0 ); - if (!file->fd) + if (!file->fd) + { + release_object( file ); + return NULL; + } + + if (device->manager) + { + struct irp_call *irp; + irp_params_t params; + + params.create.major = IRP_MJ_CREATE; + params.create.access = access; + params.create.sharing = sharing; + params.create.options = options; + params.create.device = file->device->user_ptr; + + if ((irp = create_irp( file, ¶ms, NULL, 0, 0 ))) { - release_object( file ); - file = NULL; + add_irp_to_queue( file, irp ); + release_object( irp ); } } return &file->obj; @@ -379,6 +412,27 @@ return (struct fd *)grab_object( file->fd ); } +static int device_file_close_handle( struct object *obj, struct process *process, obj_handle_t handle ) +{ + struct device_file *file = (struct device_file *)obj; + + if (file->device->manager && obj->handle_count == 1) /* last handle */ + { + struct irp_call *irp; + irp_params_t params; + + params.close.major = IRP_MJ_CLOSE; + params.close.file = file->user_ptr; + + if ((irp = create_irp( file, ¶ms, NULL, 0, 0 ))) + { + add_irp_to_queue( file, irp ); + release_object( irp ); + } + } + return 1; +} + static void device_file_destroy( struct object *obj ) { struct device_file *file = (struct device_file *)obj; @@ -406,14 +460,34 @@ return NULL; } +static void set_file_user_ptr( struct device_file *file, client_ptr_t ptr ) +{ + struct irp_call *irp; + + if (file->user_ptr == ptr) return; /* nothing to do */ + + file->user_ptr = ptr; + + /* update already queued irps */ + + LIST_FOR_EACH_ENTRY( irp, &file->requests, struct irp_call, dev_entry ) + { + switch (irp->params.major) + { + case IRP_MJ_CLOSE: irp->params.close.file = ptr; break; + case IRP_MJ_READ: irp->params.read.file = ptr; break; + case IRP_MJ_WRITE: irp->params.write.file = ptr; break; + case IRP_MJ_FLUSH_BUFFERS: irp->params.flush.file = ptr; break; + case IRP_MJ_DEVICE_CONTROL: irp->params.ioctl.file = ptr; break; + } + } +} + /* queue an irp to the device */ static obj_handle_t queue_irp( struct device_file *file, struct irp_call *irp, const async_data_t *async_data, int blocking ) { obj_handle_t handle = 0; - struct device_manager *manager = file->device->manager; - - assert( manager ); if (blocking && !(handle = alloc_handle( current->process, irp, SYNCHRONIZE, 0 ))) return 0; @@ -422,13 +496,8 @@ if (handle) close_handle( current->process, handle ); return 0; } - irp->thread = (struct thread *)grab_object( current ); irp->user_arg = async_data->arg; - grab_object( irp ); /* grab reference for queued irp */ - - list_add_tail( &file->requests, &irp->dev_entry ); - list_add_tail( &manager->requests, &irp->mgr_entry ); - if (list_head( &manager->requests ) == &irp->mgr_entry) wake_up( &manager->obj, 0 ); /* first one */ + add_irp_to_queue( file, irp ); set_error( STATUS_PENDING ); return handle; } @@ -446,9 +515,10 @@ obj_handle_t handle; irp_params_t params; - params.major = IRP_MJ_READ; - params.read.key = 0; - params.read.pos = pos; + params.read.major = IRP_MJ_READ; + params.read.key = 0; + params.read.pos = pos; + params.read.file = file->user_ptr; irp = create_irp( file, ¶ms, NULL, 0, get_reply_max_size() ); if (!irp) return 0; @@ -466,9 +536,10 @@ obj_handle_t handle; irp_params_t params; - params.major = IRP_MJ_WRITE; - params.write.key = 0; - params.write.pos = pos; + params.write.major = IRP_MJ_WRITE; + params.write.key = 0; + params.write.pos = pos; + params.write.file = file->user_ptr; irp = create_irp( file, ¶ms, get_req_data(), get_req_data_size(), 0 ); if (!irp) return 0; @@ -485,7 +556,8 @@ obj_handle_t handle; irp_params_t params; - params.major = IRP_MJ_FLUSH_BUFFERS; + params.flush.major = IRP_MJ_FLUSH_BUFFERS; + params.flush.file = file->user_ptr; irp = create_irp( file, ¶ms, NULL, 0, 0 ); if (!irp) return 0; @@ -503,8 +575,9 @@ obj_handle_t handle; irp_params_t params; - params.major = IRP_MJ_DEVICE_CONTROL; - params.ioctl.code = code; + params.ioctl.major = IRP_MJ_DEVICE_CONTROL; + params.ioctl.code = code; + params.ioctl.file = file->user_ptr; irp = create_irp( file, ¶ms, get_req_data(), get_req_data_size(), get_reply_max_size() ); @@ -679,6 +752,8 @@ struct device_manager *manager; struct list *ptr; + reply->params.major = IRP_MJ_MAXIMUM_FUNCTION + 1; + if (!(manager = (struct device_manager *)get_handle_obj( current->process, req->manager, 0, &device_manager_ops ))) return; @@ -698,7 +773,6 @@ { irp = LIST_ENTRY( ptr, struct irp_call, mgr_entry ); reply->params = irp->params; - reply->user_ptr = irp->file->device->user_ptr; reply->client_pid = get_process_id( irp->thread->process ); reply->client_tid = get_thread_id( irp->thread ); reply->in_size = irp->in_size; @@ -731,6 +805,7 @@ if ((irp = (struct irp_call *)get_handle_obj( current->process, req->handle, 0, &irp_call_ops ))) { + if (irp->file) set_file_user_ptr( irp->file, req->file_ptr ); set_irp_result( irp, req->status, get_req_data(), get_req_data_size(), req->size ); close_handle( current->process, req->handle ); /* avoid an extra round-trip for close */ release_object( irp ); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/server/protocol.def wine-staging-1.7.47~ubuntu14.10.1/server/protocol.def --- wine-staging-1.7.46~ubuntu14.10.1/server/protocol.def 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/server/protocol.def 2015-07-12 05:36:18.000000000 +0000 @@ -652,20 +652,43 @@ unsigned int major; /* irp major function */ struct { + unsigned int major; /* IRP_MJ_CREATE */ + unsigned int access; /* access rights */ + unsigned int sharing; /* sharing flags */ + unsigned int options; /* file options */ + client_ptr_t device; /* opaque ptr for the device */ + } create; + struct + { + unsigned int major; /* IRP_MJ_CLOSE */ + int __pad; + client_ptr_t file; /* opaque ptr for the file object */ + } close; + struct + { unsigned int major; /* IRP_MJ_READ */ unsigned int key; /* driver key */ + client_ptr_t file; /* opaque ptr for the file object */ file_pos_t pos; /* file position */ } read; struct { unsigned int major; /* IRP_MJ_WRITE */ unsigned int key; /* driver key */ + client_ptr_t file; /* opaque ptr for the file object */ file_pos_t pos; /* file position */ } write; struct { + unsigned int major; /* IRP_MJ_FLUSH_BUFFERS */ + int __pad; + client_ptr_t file; /* opaque ptr for the file object */ + } flush; + struct + { unsigned int major; /* IRP_MJ_DEVICE_CONTROL */ ioctl_code_t code; /* ioctl code */ + client_ptr_t file; /* opaque ptr for the file object */ } ioctl; } irp_params_t; @@ -2315,6 +2338,7 @@ obj_handle_t manager; /* handle to the device manager */ obj_handle_t handle; /* handle to the irp */ unsigned int status; /* status of the irp */ + client_ptr_t file_ptr; /* opaque pointer to the file object */ data_size_t size; /* result size (input or output depending on the operation) */ VARARG(data,bytes); /* output data of the irp */ @END @@ -3392,7 +3416,6 @@ obj_handle_t prev; /* handle to the previous irp */ unsigned int status; /* status of the previous irp */ @REPLY - client_ptr_t user_ptr; /* opaque ptr for the device */ irp_params_t params; /* irp parameters */ obj_handle_t next; /* handle to the next irp */ process_id_t client_pid; /* pid of process calling irp */ diff -Nru wine-staging-1.7.46~ubuntu14.10.1/server/queue.c wine-staging-1.7.47~ubuntu14.10.1/server/queue.c --- wine-staging-1.7.46~ubuntu14.10.1/server/queue.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/server/queue.c 2015-07-12 05:36:18.000000000 +0000 @@ -2851,13 +2851,26 @@ } else { + unsigned char *keystate; if (!(thread = get_thread_from_id( req->tid ))) return; if (thread->queue) { if (req->key >= 0) reply->state = thread->queue->input->keystate[req->key & 0xff]; set_reply_data( thread->queue->input->keystate, size ); + release_object( thread ); + return; } release_object( thread ); + + /* fallback to desktop keystate */ + if (!(desktop = get_thread_desktop( current, 0 ))) return; + if (req->key >= 0) reply->state = desktop->keystate[req->key & 0xff] & ~0x40; + if ((keystate = set_reply_data_size( size ))) + { + unsigned int i; + for (i = 0; i < size; i++) keystate[i] = desktop->keystate[i] & ~0x40; + } + release_object( desktop ); } } diff -Nru wine-staging-1.7.46~ubuntu14.10.1/server/request.h wine-staging-1.7.47~ubuntu14.10.1/server/request.h --- wine-staging-1.7.46~ubuntu14.10.1/server/request.h 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/server/request.h 2015-07-12 05:36:18.000000000 +0000 @@ -661,7 +661,7 @@ C_ASSERT( sizeof(hw_input_t) == 32 ); C_ASSERT( sizeof(int) == 4 ); C_ASSERT( sizeof(ioctl_code_t) == 4 ); -C_ASSERT( sizeof(irp_params_t) == 16 ); +C_ASSERT( sizeof(irp_params_t) == 24 ); C_ASSERT( sizeof(lparam_t) == 8 ); C_ASSERT( sizeof(luid_t) == 8 ); C_ASSERT( sizeof(mem_size_t) == 8 ); @@ -1555,8 +1555,9 @@ C_ASSERT( FIELD_OFFSET(struct set_irp_result_request, manager) == 12 ); C_ASSERT( FIELD_OFFSET(struct set_irp_result_request, handle) == 16 ); C_ASSERT( FIELD_OFFSET(struct set_irp_result_request, status) == 20 ); -C_ASSERT( FIELD_OFFSET(struct set_irp_result_request, size) == 24 ); -C_ASSERT( sizeof(struct set_irp_result_request) == 32 ); +C_ASSERT( FIELD_OFFSET(struct set_irp_result_request, file_ptr) == 24 ); +C_ASSERT( FIELD_OFFSET(struct set_irp_result_request, size) == 32 ); +C_ASSERT( sizeof(struct set_irp_result_request) == 40 ); C_ASSERT( FIELD_OFFSET(struct get_irp_result_request, handle) == 12 ); C_ASSERT( FIELD_OFFSET(struct get_irp_result_request, user_arg) == 16 ); C_ASSERT( sizeof(struct get_irp_result_request) == 24 ); @@ -2155,8 +2156,7 @@ C_ASSERT( FIELD_OFFSET(struct get_next_device_request_request, prev) == 16 ); C_ASSERT( FIELD_OFFSET(struct get_next_device_request_request, status) == 20 ); C_ASSERT( sizeof(struct get_next_device_request_request) == 24 ); -C_ASSERT( FIELD_OFFSET(struct get_next_device_request_reply, user_ptr) == 8 ); -C_ASSERT( FIELD_OFFSET(struct get_next_device_request_reply, params) == 16 ); +C_ASSERT( FIELD_OFFSET(struct get_next_device_request_reply, params) == 8 ); C_ASSERT( FIELD_OFFSET(struct get_next_device_request_reply, next) == 32 ); C_ASSERT( FIELD_OFFSET(struct get_next_device_request_reply, client_pid) == 36 ); C_ASSERT( FIELD_OFFSET(struct get_next_device_request_reply, client_tid) == 40 ); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/server/trace.c wine-staging-1.7.47~ubuntu14.10.1/server/trace.c --- wine-staging-1.7.46~ubuntu14.10.1/server/trace.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/server/trace.c 2015-07-12 05:36:18.000000000 +0000 @@ -316,24 +316,43 @@ { switch (data->major) { + case IRP_MJ_CREATE: + fprintf( stderr, "%s{major=CREATE,access=%08x,sharing=%08x,options=%08x", + prefix, data->create.access, data->create.sharing, data->create.options ); + dump_uint64( ",device=", &data->create.device ); + fputc( '}', stderr ); + break; + case IRP_MJ_CLOSE: + fprintf( stderr, "%s{major=CLOSE", prefix ); + dump_uint64( ",file=", &data->close.file ); + fputc( '}', stderr ); + break; case IRP_MJ_READ: fprintf( stderr, "%s{major=READ,key=%08x", prefix, data->read.key ); dump_uint64( ",pos=", &data->read.pos ); + dump_uint64( ",file=", &data->read.file ); fputc( '}', stderr ); break; case IRP_MJ_WRITE: fprintf( stderr, "%s{major=WRITE,key=%08x", prefix, data->write.key ); dump_uint64( ",pos=", &data->write.pos ); + dump_uint64( ",file=", &data->write.file ); fputc( '}', stderr ); break; case IRP_MJ_FLUSH_BUFFERS: - fprintf( stderr, "%s{major=FLUSH_BUFFERS}", prefix ); + fprintf( stderr, "%s{major=FLUSH_BUFFERS", prefix ); + dump_uint64( ",file=", &data->flush.file ); + fputc( '}', stderr ); break; case IRP_MJ_DEVICE_CONTROL: fprintf( stderr, "%s{major=DEVICE_CONTROL", prefix ); dump_ioctl_code( ",code=", &data->ioctl.code ); + dump_uint64( ",file=", &data->ioctl.file ); fputc( '}', stderr ); break; + case IRP_MJ_MAXIMUM_FUNCTION + 1: /* invalid */ + fprintf( stderr, "%s{}", prefix ); + break; default: fprintf( stderr, "%s{major=%u}", prefix, data->major ); break; @@ -2807,6 +2826,7 @@ fprintf( stderr, " manager=%04x", req->manager ); fprintf( stderr, ", handle=%04x", req->handle ); fprintf( stderr, ", status=%08x", req->status ); + dump_uint64( ", file_ptr=", &req->file_ptr ); fprintf( stderr, ", size=%u", req->size ); dump_varargs_bytes( ", data=", cur_size ); } @@ -3998,8 +4018,7 @@ static void dump_get_next_device_request_reply( const struct get_next_device_request_reply *req ) { - dump_uint64( " user_ptr=", &req->user_ptr ); - dump_irp_params( ", params=", &req->params ); + dump_irp_params( " params=", &req->params ); fprintf( stderr, ", next=%04x", req->next ); fprintf( stderr, ", client_pid=%04x", req->client_pid ); fprintf( stderr, ", client_tid=%04x", req->client_tid ); diff -Nru wine-staging-1.7.46~ubuntu14.10.1/tools/make_requests wine-staging-1.7.47~ubuntu14.10.1/tools/make_requests --- wine-staging-1.7.46~ubuntu14.10.1/tools/make_requests 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/tools/make_requests 2015-07-12 05:36:18.000000000 +0000 @@ -48,7 +48,7 @@ "apc_call_t" => [ 40, 8, "&dump_apc_call" ], "apc_result_t" => [ 40, 8, "&dump_apc_result" ], "async_data_t" => [ 40, 8, "&dump_async_data" ], - "irp_params_t" => [ 16, 8, "&dump_irp_params" ], + "irp_params_t" => [ 24, 8, "&dump_irp_params" ], "luid_t" => [ 8, 4, "&dump_luid" ], "ioctl_code_t" => [ 4, 4, "&dump_ioctl_code" ], "cpu_type_t" => [ 4, 4, "&dump_cpu_type" ], diff -Nru wine-staging-1.7.46~ubuntu14.10.1/tools/widl/expr.c wine-staging-1.7.47~ubuntu14.10.1/tools/widl/expr.c --- wine-staging-1.7.46~ubuntu14.10.1/tools/widl/expr.c 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/tools/widl/expr.c 2015-07-12 05:36:18.000000000 +0000 @@ -571,7 +571,7 @@ error_loc_info(&expr_loc->v->loc_info, "address-of operator applied to non-variable type in expression%s%s\n", expr_loc->attr ? " for attribute " : "", expr_loc->attr ? expr_loc->attr : ""); - result.is_variable = FALSE; + result.is_variable = FALSE; result.is_temporary = TRUE; result.type = type_new_pointer(RPC_FC_UP, result.type, NULL); break; diff -Nru wine-staging-1.7.46~ubuntu14.10.1/VERSION wine-staging-1.7.47~ubuntu14.10.1/VERSION --- wine-staging-1.7.46~ubuntu14.10.1/VERSION 2015-06-28 16:51:28.000000000 +0000 +++ wine-staging-1.7.47~ubuntu14.10.1/VERSION 2015-07-12 05:36:18.000000000 +0000 @@ -1 +1 @@ -Wine version 1.7.46 +Wine version 1.7.47