diff -Nru wine-development-5.5/ANNOUNCE wine-development-5.6/ANNOUNCE --- wine-development-5.5/ANNOUNCE 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/ANNOUNCE 2020-04-10 18:54:32.000000000 +0000 @@ -1,17 +1,16 @@ -The Wine development release 5.5 is now available. +The Wine development release 5.6 is now available. What's new in this release (see below for details): - - Builtin libraries use the new UCRTBase C runtime. - - Compatibility mode used when reporting Windows version. - - Better support for debug information in PE files. - - Support for linguistic case mappings. - - More attributes supported in WebServices. + - Still more Media Foundation work. + - Improvements to Active Directory LDAP support. + - A few more modules converted to PE. + - Improvements to gdb proxy mode. - Various bug fixes. The source is available from the following locations: - https://dl.winehq.org/wine/source/5.x/wine-5.5.tar.xz - http://mirrors.ibiblio.org/wine/source/5.x/wine-5.5.tar.xz + https://dl.winehq.org/wine/source/5.x/wine-5.6.tar.xz + http://mirrors.ibiblio.org/wine/source/5.x/wine-5.6.tar.xz Binary packages for various distributions will be available from: @@ -27,573 +26,582 @@ ---------------------------------------------------------------- -Bugs fixed in 5.5 (total 32): +Bugs fixed in 5.6 (total 38): - 8439 Multiple Microsoft product installers fail due missing shell app path expansion (Visual Studio .NET 2002, 2003, Visual Foxpro 9.0) - 23523 Call of Juarez DX10 Benchmark does not start - 31890 Multiple applications need IAudioEndpointVolume::GetMasterVolumeLevelScalar method implementation (Cisco IP Communicator, Cairo Shell v0.3.x) - 32114 LTSpice: Dialog resizing glitches, slow panning when zooming, minor traces - 32222 LTspice: text fields issues - 32723 Death to Spies: Moment of Truth (Steam/non-Steam) crashes on startup (intro video needs WMV3 decoder support in an AVI container) - 35671 ERD Concepts 6 crashes with division by zero when editing relations - 39428 Failing owner SID test in advapi32:security - 39429 Failing ACE flag tests in advapi32:security - 40854 Adobe Flash Player 22-25 installer crashes (wtsapi32.WTSQuerySessionInformation needs to support WTSUserName info class) - 41208 Gridcoin Research Client crashes - 41305 Might and Magic VI: Game hangs before intro video (making it unplayable) [regression] - 41929 Multiple games need WINED3D_TEXF_ANISOTROPIC filter mode - 45967 Beat hazard 2 - bad network/float behavior - 47056 Solid Edge v15: Program freeze on File->Open - 48276 VSDC Video Editor needs VT_VECTOR|VT_I4 support in PropertyStorage_ReadProperty - 48473 kernelbase WaitNamedPipeW contains non-null terminated string, causing garbage output in trace logs - 48495 XCP-ng Center v8.x (.NET 4.6 app) can't connect to server with self-signed certificate - 48593 Multiple games play only one frame of video (Fable: The Lost Chapters, Audiosurf, Dark Souls 2, Oddworld: Munch's Oddysee) - 48642 kernel32:process contains a race condition in test_WaitForJobObject() - 48683 iTunes v12.10.4.2 crashes on unimplemented function wmvcore.dll.WMIsContentProtected when adding folders to directory scan - 48698 Multiple installers fail with "Unknown method" (Flash 29, Rexygen) - 48700 Wolcen: Lords of Mayhem - there's a blob around the character's head. - 48732 How to Survive crashes on start (fullscreen mode) - 48734 How to Survive crashes when starting a new game - 48739 ConEmu (Windows console emulator) v19.10.12 fails to set Wininet's INTERNET_OPTION_IGNORE_OFFLINE and shows error dialog at startup - 48743 Multiple games have broken rendering (Sniper Elite V2, Sniper Elite 3, F1 2012) - 48750 Few missing DirectSound3D Algorithms GUID Defs - 48762 IExplore immediately crashes on www.msnbc.com with a failed assertion - 48765 Firefox 74.0 crashes instantly: Call to unimplemented function WS2_32.dll.WSCGetProviderInfo, aborting - 48801 Multiple games crash on unimplemented function d3dx11_43.dll.D3DX11GetImageInfoFromFile (Assetto Corsa 1.14.x, Project Cars) - 48814 Microsoft Word 6.0 for Windows installer crashes after wine-4.8-247-g0d7d0427d0 + 19420 Passmark 7.0 2d benchmark tests fails without native gdiplus + 21466 Multiple applications need NtQueryVolumeInformationFile 'FileFsVolumeInformation' class support (AVG Free 8.x/9.x Antivirus Edition, MSYS2) + 24784 Explorer++ displays disabled toolbar icons incorrectly + 27324 Cossacks II (DotEmu version) refuses to start from its install directory (path too long?) + 30810 Keygener Assistant 2.x: main window has incorrect size and contents are all black + 31207 Monogram GraphStudio v0.3.x crashes when using Graph->Insert Filter + 33290 Fullscreen games cause panning configurations to be generated on some NVidia proprietary drivers + 34014 Star Wars KOTOR II: The Sith Lords: Movies/cutscenes do not play with opengl on + 37029 Evernote 5.5.x - unable to capture webcam note + 37043 Keyboard input broken in Roblox Player + 37051 Roblox Studio embedded webpage does not load consistently or properly using built-in winhttp + 38856 LEGO Lord of the Rings crashes randomly + 41610 ChurchBoard: Trying to create a window(about 3 minutes). And the error takes off. + 41740 Diablo 3's mouse sprite stops moving, but the mouse is still working. + 42072 Dead Space (Steam) crashes on save with "divide by zero" error + 42479 MYOB Accounting v18.5.x crashes on startup + 43704 Contacam crashes + 47083 MySQL 8.0.x community installer (.NET 4.5.x app) fails to configure mysql, needs support for WS_AF_INET6 in 'iphlpapi.GetExtendedTcpTable' + 47109 WineVulkan ICD isn't registered in wineprefixes + 47362 Media Feature Pack for W10N requires rtworkq.dll + 47794 Rockstar Games Launcher installer button images do not display + 47825 Webex Meetings crashes + 48611 Cairo Shell v0.3.x (.NET 4.7 app) crashes due to missing 'HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon\\Shell' registry sub-key + 48623 Error authenticating to LDAP controller + 48729 Binary Domain has misplaced text in configuration tool with builtin d3dx9_43 + 48766 Late Shift doesn't work properly + 48778 Star Wars: The Old Republic crashes shortly after intro screen + 48788 null pointer in wined3d_palette_set_entries with Diablo GOG + 48798 RegCloseKey: Uninitialized read from get_language_sort + 48806 Panzer Corps 2 needs msvcp140.dll.?_XLgamma@std@@YANN@Z + 48816 The explorer doesn't support '/cd' option + 48832 Magic The Gathering Online: client does not start due to long file names since 2020-03-25 update + 48838 Wine fails to build wldap32 if LDAP is not installed + 48844 Magical Scramble Demo 1.20P shows white boxes instead of pictures. + 48846 msvcr90/tests/msvcr90.c: error: variadic functions must use the base AAPCS variant + 48888 error: redefinition of typedef ‘_onexit_t’ [/dlls/d3dcompiler_33] + 48897 Building fails with '/usr/bin/ld: cannot find -ldl' + 48902 Warframe launcher fails to replace updated Launcher.exe the first time (works when Retry option pressed, as Launcher.exe deleted first time) ---------------------------------------------------------------- -Changes since 5.4: +Changes since 5.5: -Alex Henrie (2): - mmdevapi: Report 100% volume in GetMasterVolumeLevelScalar stub. - wine.inf: Add Winlogon keys. - -Alexandre Julliard (46): - winedump: Add dumping of sortkey NLS files. - unicode: Add separate helper for removing linguistic case mappings. - unicode: Store data for CT_CTYPE3 types. - unicode: Generate a registry script for Nls keys. - unicode: Generate the NLS file for sortkeys. - ntdll: Support the sortkey file in NtGetNlsSectionPtr(). - kernelbase: Load the sortkey file and use it for the case mapping table. - kernelbase: Use the ctype table from the sortkey file. - kernelbase: Use linguistic case table for LCMAP_LINGUISTIC_CASING. - unicode: Add compression flags to the sortkey table. - make_makefiles: Remove updating codepage list, this is done by make_unicode now. - kernelbase: Implement GetNLSVersion/GetNLSVersionEx(). - kernelbase: Implement IsValidNLSVersion(). - server: Use byte length in dump_strW() for consistency. - server: Store length of window text instead of null-terminating it. - server: Store length of console title instead of null-terminating it. - server: Store length of console history lines instead of null-terminating them. - comctl32: Forward string functions to kernelbase. - loader: Remove a check for antediluvian glibc. - kernelbase: Open registry keys before looking for sort table. - server: Add a helper function for splitting a path into individual elements. - server: Add a helper function for creating a Unicode string. - server: Add a helper function for case-insensitive Unicode string comparisons. - server: Add a helper function for hashing a Unicode string. - server: Don't use wine/unicode.h. - unicode: Store downloaded data files in the cache directory. - krnl386: Fix some calling convention mismatches. - krnl386: Get rid of DOS UMB support. - krnl386: Get rid of DOS EMS support. - krnl386: Get rid of DOS floppy disk support. - krnl386: Get rid of DOS Soundblaster support. - krnl386: Get rid of DOS DMA support. - ntdll: Use the NLS case mapping table for RtlHashUnicodeString(). - user.exe: Clear out the thunk array to catch invalid winprocs. - krnl386: Get rid of DOS direct I/O support. - krnl386: Get rid of DOS SCSI ioctl support. - krnl386: Return a handle to the vxd file itself instead of creating a dummy file. - krnl386: Get rid of DOS parallel port I/O support. - ntdll: Update some string functions prototypes to match msvcrt. - ntdll: Use wcsicmp() instead of strcmpiW() where possible. - ntdll: Use wcsnicmp() instead of strncmpiW() where possible. - ntdll: Use RtlEqualUnicodeString() instead of strcmpiW(). - ntdll: Use RtlCompareUnicodeStrings() instead of strncmpiW(). - ntdll: Use the ascii_to_unicode() helper to compare relay module names. - ntdll: Use wcsupr() instead of toupperW(). - ntdll: Use wcslwr() instead of tolowerW(). - -Alistair Leslie-Hughes (9): - dmime: IDirectMusicGraph GetTool isn't a stub. - dmime: Free more interfaces in IDirectMusicPerformance FreePMsg. - include: Add msdasql.h. - oledb32/tests: Add ODBC provider tests. - oledb32/tests: Add MSDASQL Enumerator tests. - dmime: IDirectMusicPerformance8 GetGraph return DMUS_E_NOT_FOUND if graph not set. - xaudio2_7: Trace FAudio version being used. - dmime: Store flags when parsing track data. - dmime: Reimplement IDirectMusicAudioPath Activate. - -Andrey Gusev (1): - d3dx11: Add D3DX11GetImageInfoFromFileA/W stub. - -Anton Baskanov (4): - amstream: Implement adding existing streams in AMMultiMediaStream::AddMediaStream. - amstream: Implement MediaStreamFilter::GetState. - amstream/tests: Refactor test stream to allow multiple instances. - amstream: Implement MediaStreamFilter::Stop, ::Pause, and ::Run. - -Bernhard Übelacker (1): - ws2_32: Add stub implementation for WSCGetProviderInfo. - -Biswapriyo Nath (2): - include/dxva: Add HEVC and VP8/VP9 structures. - include/wincodec.idl: Add missing GUIDs. - -Brendan Shanks (4): - vulkan-1: Set FILEVERSION to fix official Vulkan loader installer. - dinput: Fix crash in dump_DIEFFECT() when rglDirection is unexpectedly NULL. - dinput/tests: Test IDirectInputEffect::SetParameters() with NULL effect parameters. - dinput: Fix IDirectInputEffect::SetParameters() behavior with NULL effect parameters. - -Connor McAdams (9): - d2d1: Make sure arc fill vertex buffer has correct BindFlag. - d3d10: Implement matrix effect variable set methods. - d3d10: Implement matrix effect variable get methods. - d3d10: Add tests for matrix effect variable. - d3d10: Get resources used by effect shaders. - d3d10: Add impl_from_ID3D10EffectShaderVariable. - d3d10: Apply shader resources for shaders used in pass. - d3d10: Implement ShaderResource effect variable set method. - d3d10/tests: Add ID3D10EffectShaderResourceVariable tests. - -Damjan Jovanovic (4): - shell32/tests: Tmpdir shouldn't end with a backslash. - shell32/tests: Test shlexec argv[0], and same-named executables in a different directory. - shell32: Simplify SHELL_execute(). - shell32: Pass the executable's full path from SHELL_execute() to CreateProcess(). - -Derek Lesho (4): - mfreadwrite: Configure stream decoder on SetCurrentMediaType() if necessary. - winegstreamer: Make callback parameter names more generic. - winegstreamer: Move broad callback handling code to gst_cbs. - mfreadwrite: Pass source samples through decoder as they arrive. - -Dmitry Timoshkov (32): - wldap32/tests: Add ldap_bind_s test. - adsldp: If secure open object fails fallback to simple bind. - adsldp: Bind to an LDAP server after connection. - activeds: ADsOpenObject should return E_FAIL by default. - activeds: Implement ADsGetObject. - msxml3: Add support for windows-125x encodings to IMXWriter::put_encoding(). - wldap32: Add support for ldap_bind_s(LDAP_AUTH_NEGOTIATE). - wldap32: Handle NULL return in ldap_get_values_lenW. - adsldp: Add support for IADsOpenDSObject::OpenDSObject(ADS_SECURE_AUTHENTICATION). - activeds: Implement ADsBuildVarArrayStr. - adsldp: Implement IADs::GetInfo(). - adsldp: Implement IADs::GetInfoEx(). - adsldp: Implement IADs::Get(). - adsldp: Add support for multi-valued attributes to IADs::Get(). - adsldp: Turn FIXME into a TRACE for IADsOpenDSObject::OpenDSObject(). - adsldp: Forward IADsOpenDSObject::AddRef/Release to base object. - adsldp: Add IDirectorySearch stubs. - adsldp: Add support for ADS_SEARCHPREF_SEARCH_SCOPE to IDirectorySearch::SetSearchPreference(). - adsldp: Implement IDirectorySearch::ExecuteSearch(). - adsldp: Implement IDirectorySearch::CloseSearchHandle(). - adsldp: Implement IDirectorySearch::GetFirstRow(). - adsldp: Implement IDirectorySearch::GetNextRow(). - adsldp: Fix a memory leak. - adsldp: Add a trace. - adsldp: Improve IDirectorySearch::GetNextRow() end of entries detection logic. - adsldp: Implement IDirectorySearch::GetNextColumnName(). - adsldp: Add special column "ADsPath" at the end of the entry. - adsldp: Implement IDirectorySearch::GetColumn(). - adsldp: Add support for special column name "ADsPath" to IDirectorySearch::GetColumn(). - adsldp/tests: Add some tests for IDirectorySearch. - adsldp: Add more traces. - adsldp: Add initial version of attribute schema parser. - -François Gouget (18): - configure: Add an option to enable -Werror. - kernel32/tests: Clean up the argv[0] tests and improve coverage. - gameux/tests: Avoid an ever changing value in a gamestatistics failure message. - shell32/tests: Fix some wording issues in shlexec comments. - tests: Report all errors when failing to wait for a child process. - shell32/tests: Don't use randomized paths in the shlexec test. - tests: Fix the wait_child_process_() macro in the no-line-number case. - kernel32/test: Fix the semaphore handling in test_WaitForJobObject(). - iphlpapi/tests: Fix a spelling error in an ok() message. - qasf/tests: Fix a couple of spelling errors in ok() messages. - kernel32/tests: Fix a race condition in test_QueryInformationJobObject(). - kernel32/tests: Remove an unneeded sprintf() in the process tests. - advapi32/tests: On Windows 7 GetServiceKeyName() fails for all localized display names. - advapi32/tests: The Everyone group name is sometimes translated. - kernel32/tests: Add a couple of process helper functions. - kernel32/tests: Fix the grammar and formatting of a process comment. - mscoree: Handle the shared wine-mono installation like the msi case. - shell32/tests: Fix the temporary directory creation in shlexec. - -Gabriel Ivăncescu (19): - quartz: Clear the WS_CHILD style instead of unparenting the window. - jscript: Get rid of the variable_obj parameter to exec_source. - jscript: Use the proper variable_obj for bytecodes with named items. - jscript: Lookup and ref the named item's dispatch first, during interpretion. - jscript: Create separate script dispatches for each named item. - include/winnt: Add more ACTCTX_COMPATIBILITY_ELEMENT_TYPE definitions and fix typo. - ntdll: Store the default process activation context into the PEB. - kernelbase: Implement compatibility mode for GetVersionEx. - kernelbase: Implement compatibility mode for GetVersion. - kernel32: Implement compatibility mode for VerifyVersionInfo. - vbscript: Retrieve the vbscode context from the named item directly. - vbscript: Retrieve the item's dispatch in a helper function. - vbscript: Implement persistent named items. - vbscript/tests: Add tests for persistent named items. - jscript: Retrieve the item's dispatch in a helper function. - jscript: Implement persistent named items. - jscript/tests: Add tests for persistent named items. - vbscript: Lookup the identifier in the named item's disp after its script dispatch. - jscript/tests: Add more persistent named items tests. - -Gijs Vermeulen (3): - cmd: Use wide character string literals in batch.c. - cmd: Use wide character string literals in directory.c. - kernelbase: Set req->mask in SetConsoleScreenBufferInfoEx. - -Hans Leidekker (10): - webservices: Use wide character string literals. - webservices/tests: Use wide character string literals. - webservices: Handle WS_XML_TEXT_TYPE_INT32 in text_to_uint64. - webservices: Add support for WS_FIELD_NILLABLE_ITEM. - webservices: Implement WS_ANY_ATTRIBUTES_FIELD_MAPPING for the writer. - webservices: Implement WS_TYPE_ATTRIBUTE_FIELD_MAPPING for the writer. - webservices: Read past XML declaration and opening bracket in WsReadStartElement. - webservices: Accept empty namespace in attribute type mapping. - webservices: Implement WS_TYPE_ATTRIBUTE_FIELD_MAPPING for the reader. - webservices: Support WS_CHARSET_UTF16LE for buffer input. - -Jacek Caban (70): - dbghelp: Use generic image_find_section in elf_check_alternate. - dbghelp: Move alternate file map pointer to generic image_file_map. - dbghelp: Use vtbl to handle different image_file_map types. - dbghelp: Introduce generic image_unmap_file. - dbghelp: Move HANDLE-based crc32 helper to dbghelp.c. - dbghelp: Support Windows paths in elf_locate_debug_link. - dbghelp: Pass module struct to elf_locate_debug_link. - ucrtbase/tests: Build with -fno-builtin. - ucrtbase/tests: Use more functions directly. - ucrtbase/tests: Fix clock tests. - corecrt_startup.h: Add onexit table declarations. - ucrtbase/tests: Use public onexit table declarations. - msvcrt: Use public onexit table declarations in importlib. - ucrtbase/tests: Link to _o_* functions directly. - mshtml/tests: Remove file protocol tests from htmllocation.c. - dbghelp: Check checksum before mapping elf file. - dbghelp: Use elf_check_debug_link in elf_locate_build_id_target. - dbghelp: Move get_dos_file_name to path.c. - dbghelp: Move elf_check_alternate implementation to module.c. - dbghelp: Support GNU debug link and build id in PE files. - dbghelp: Support PE debug link files. - dbghelp: Lookup real image paths in image_locate_debug_link. - ctype.h: Add _to[w]lower_l and _to[w]upper_l declarations. - string.h: Add __strncnt declaration. - memory.h: Add _memicmp_l declaration. - ucrtbase/tests: Use ucrtbase functions directly in string.c. - include: Add fenv.h header. - corecrt_startup.h: Add more declarations. - ctype.h: Add more declarations. - float.h: Add __fpe_flt_rounds declaration. - io.h: Add _sopen_dispatch and _sopen_s declarations. - locale.h: Add _Strftime declaration. - process.h: Add quick_exit declaration. - stdlib.h: Add _get_thread_local_invalid_parameter_handler and _set_thread_local_invalid_parameter_handler declarations. - ucrtbase/tests: Use more ucrtbase functions directly in misc.c. - dbghelp: Use Windows API to map macho files. - jscript: Simplify Object.prototype.toString implementation. - wininet: Use _ltow instead of sprintf for port number in InternetCreateUrl. - mscoree: Use wcstok_s instead of wcstok. - makefiles: Explicitly import msvcrt in modules that need specific crt version. - makedep: Build builtin DLLs with ucrtbase. - dbghelp: Call GetSystemInfo in DllMain. - dbghelp: Use page size from sysinfo. - dbghelp: Rename helpers to make unicode variants default. - dbghelp: Use file_name helper in more places. - dbghelp: Make dll builtin PE path search helper more generic. - dbghelp: Use search_dll_path in elf_search_and_load_file. - dbghelp: Introduce search_unix_path helper and use it in elf_search_and_load_file. - dbghelp: Use search_unix_path to load seach macho files. - dbghelp: Use search_dll_path to load seach macho files. - dbghelp: Store process struct pointer in dump context. - dbghelp: Pass process struct to elf_enum_modules and macho_enum_modules. - dbghelp: Move loader search functions to the end of module files. - dbghelp: Introduce loader_ops to abstract platform-specific loader and use it to synchronize module list. - dbghelp: Don't use elf_fetch_file_info and macho_fetch_file_info in module_find_cb. - dbghelp: Use loader_ops for fetch_file_info. - dbghelp: Pass process struct to image_uses_split_segs. - ntdll: Support device paths in LdrGetDllPath. - dbghelp: Use loader_ops for enum_modules. - dbghelp: Use loader_ops for load_module. - dbghelp: Use loader_ops for load_debug_info. - dbghelp: Explicitly pass file type to path_find_symbol_file. - dbghelp: Use PE type for virtual modules. - dbghelp: Move reading debug base address from PEB to check_live_target. - dbghelp: Remove unused code in module_find_cb. - dbghelp: Use LONG_PTR instead of long type. - rpcrt4: Fix use after free in get_iface_info. - oleaut32: Fix handling dual interfaces in ITypeInfo::GetRefTypeInfo. - jscript: Lookup the identifier in the named item's disp before the global context. - jscript: Clear SCRIPTITEM_CODEONLY flag on script re-initialization. - -Jeff Smith (6): - mshtml/tests: Add tests showing how toString has changed in IE9+. - jscript: Set return object's class to 'object' in Object.create. - jscript: Fix typo in Object_toString fixme message. - jscript: Use wide-string literals in-place for object. - gdiplus/tests: Add tests for multi-figure lines to test_widen_cap. - gdiplus: Caps are added at the end of a path. - -Jefferson Carpenter (1): - kernelbase: Zero out retkey in the ERROR_INVALID_HANDLE case in RegOpenKeyExW. - -Liam Middlebrook (5): - winevulkan: Generate typedefs for aliased enums. - winevulkan: Add alias field to VkEnumValue. - winevulkan: Generate alias enum values. - winevulkan: Update to VK spec version spec 1.2.134. - winevulkan: Generate typedefs for aliased structs. - -Lukáš Horáček (1): - wined3d: Add GTX 1660 SUPER as a card. - -Matteo Bruni (16): - wined3d: Get rid of the vertex sampler offset. - wined3d: Optimize scanning for changed state in wined3d_stateblock_capture(). - wined3d: Optimize scanning for changed state in wined3d_stateblock_apply(). - ddraw: Store primary stateblock state pointer in the device. - d3d9: Fix RTV refcounting in d3d9_texture_cube_AddRef(). - wined3d: Don't pass the whole context to needs_srgb_write(). - d3dx9: Use an assert() to validate access to const_tbl[]. - wined3d: Make rasterizer state cleanup more consistent with samplers cleanup. - wined3d: Get rid of MAX_RENDER_TARGET_VIEWS. - wined3d: Align CS packet size to the header size. - wined3d: Store the framebuffer inline in struct wined3d_state. - wined3d: Make blend state cleanup more consistent with samplers cleanup. - wined3d: Fix ARB_TEXTURE_STORAGE_MULTISAMPLE core_extension[] entry. - wined3d: Skip loading current index buffer if the draw is not indexed. - wined3d: Only invalidate STATE_INDEXBUFFER if the buffer being destroyed is bound as index buffer. - d3d10/tests: Improve compare_matrix() ok() messages. +Akihiro Sagawa (2): + ddraw/tests: Add more managed texture tests. + ddraw: Allow to create managed textures with DDSCAPS_TEXTURE|DDSCAPS_3DDEVICE caps. + +Alexandre Julliard (84): + ntdll: Avoid using toupperW(). + ntdll: Avoid using tolowerW(). + ntdll: Avoid using memrchrW(). + ntdll: Avoid using memchrW(). + ntdll: Avoid using atoiW(). + ntdll: Avoid using sprintfW(). + ntdll: Use wcscpy() instead of strcpyW(). + ntdll: Use wcscat() instead of strcatW(). + ntdll: Use wcschr() instead of strchrW(). + ntdll: Use wcspbrk() instead of strpbrkW(). + ntdll: Use wcsrchr() instead of strrchrW(). + ntdll: Use wcstoul() instead of strtoulW(). + ntdll: Use wcslen() instead of strlenW(). + ntdll: Use wcscspn() instead of strcspnW(). + ntdll: Use wcsspn() instead of strspnW(). + ntdll: Use wcscmp() instead of strcmpW(). + ntdll: Use wcsncmp() instead of strncmpW(). + kernel32: Reimplement Get/WritePrivateProfileStructW functions using exported APIs. + kernel32: Avoid using tolowerW/toupperW(). + kernel32: Avoid using memrchrW(). + kernel32: Avoid using memchrW(). + kernel32: Avoid using wctype functions. + krnl386: Avoid using toupperW(). + ntdll: Move support for getting LDT entries to the platform-specific files. + ntdll: Implement NtSetLdtEntries(). + ntdll: Reimplement LDT support for the TEB selector. + ntdll: Avoid using the LDT definitions from libwine. + krnl386: Reimplement LDT support using NtSetLdtEntries(). + krnl386: Avoid using the LDT definitions from libwine. + ntdll: Export the LDT copy from ntdll instead of libwine. + krnl386: Avoid using the selector functions from libwine. + winebuild: Support building krnl386.exe in PE format. + krnl386: Build with msvcrt. + makefiles: Always build 16-bit modules with msvcrt. + makefiles: Always explicitly specify the C runtime import. + makefiles: Don't add default libs for msvcrt builds. + wineandroid: Avoid using wine_get/set_fs(). + winex11: Avoid using wine_get/set_fs(). + libwine: Avoid using wine_get/set_fs(). + ntdll: Avoid using the selector functions from libwine. + libwine: Make the LDT functions obsolete. + configure: Add -ldl to default libs if necessary. + bcrypt: Use standard dlopen() instead of the libwine wrappers. + capi2032: Use standard dlopen() instead of the libwine wrappers. + crypt32: Use standard dlopen() instead of the libwine wrappers. + ctapi32: Use standard dlopen() instead of the libwine wrappers. + dwrite: Use standard dlopen() instead of the libwine wrappers. + dxgi: Use standard dlopen() instead of the libwine wrappers. + gdi32: Use standard dlopen() instead of the libwine wrappers. + glu32: Use standard dlopen() instead of the libwine wrappers. + gphoto2.ds: Use standard dlopen() instead of the libwine wrappers. + kerberos: Use standard dlopen() instead of the libwine wrappers. + kernel32: Use standard dlopen() instead of the libwine wrappers. + mountmgr.sys: Use standard dlopen() instead of the libwine wrappers. + msgsm32.acm: Use standard dlopen() instead of the libwine wrappers. + msxml3: Use standard dlopen() instead of the libwine wrappers. + dbghelp: Make qsort callback explicitly cdecl. + dbghelp: Use stricmp() instead of _strnicmp(..., -1). + krnl386: Use stricmp() instead of _strnicmp(..., -1). + netapi32: Use standard dlopen() instead of the libwine wrappers. + ntdll: Use standard dlopen() instead of the libwine wrappers. + odbc32: Use standard dlopen() instead of the libwine wrappers. + qcap: Use standard dlopen() instead of the libwine wrappers. + sane.ds: Use standard dlopen() instead of the libwine wrappers. + secur32: Use standard dlopen() instead of the libwine wrappers. + user32: Use standard dlopen() instead of the libwine wrappers. + windowscodecs: Use standard dlopen() instead of the libwine wrappers. + wineandroid: Use standard dlopen() instead of the libwine wrappers. + winebus.sys: Use standard dlopen() instead of the libwine wrappers. + winemac: Use standard dlopen() instead of the libwine wrappers. + winex11: Use standard dlopen() instead of the libwine wrappers. + winspool: Use standard dlopen() instead of the libwine wrappers. + wineconsole: Use standard dlopen() instead of the libwine wrappers. + libwine: Make the dlopen() wrapper functions obsolete. + makefiles: Don't use standard libs for programs that specify -nodefaultlibs. + winecrt0: Rebuild the argv array instead of getting it from libwine. + msvcrt: Rebuild the argv array instead of getting it from libwine. + winecfg: Avoid depending on the PACKAGE_* macros. + winepath: Remove the --version option. + winepath: Build with msvcrt. + winver: Build with msvcrt. + libwine: Remove some no longer needed helper functions. + libwine: Remove __wine_main_arg* from the public header. + winedump: Get rid of a useless destructor. + +Alistair Leslie-Hughes (2): + winmm: Use CreateFileA instead of OpenFile. + secur32: Fix compile for older gnutls libraries. + +Andrew Eikum (3): + kernel32/tests: Actually run OpenFile tests. + winmm/tests: Test mmioOpen with long file name. + audioclient.idl: Correct IAudioClockAdjustment IID. + +Andrew Guertin (1): + d3d11: Stop warning about depth stencil view flags. + +Aurimas Fišeras (1): + po: Update Lithuanian translation. + +Brendan Shanks (2): + winevulkan: Create JSON manifest and registry entry used by official Vulkan loader. + winevulkan: Enable VK_KHR_get_surface_capabilities2. + +Charles Davis (46): + ddraw/tests: Introduce compare_uint(). + d3d8/tests: Introduce compare_uint(). + d3d8/tests: Avoid abs() on unsigned values in compare_mode(). + ddraw: Introduce a helper to convert ddraw render states to wined3d states. + ddraw: Introduce a helper to convert ddraw transform states to wined3d states. + ddraw: Introduce a helper to convert ddraw primitive types to wined3d types. + ddraw: Introduce a helper to convert ddraw stateblock types to wined3d types. + d3d8: Introduce helpers to convert between d3d8 and wined3d multisample types. + d3d8: Introduce a helper to convert d3d8 device types to wined3d types. + d3d8: Introduce a helper to convert d3d8 transform states to wined3d states. + d3d8: Introduce a helper to convert d3d8 render states to wined3d states. + d3d8: Introduce a helper to convert d3d8 primitive types to wined3d types. + d3d9: Introduce helpers to convert between d3d9 and wined3d multisample types. + winegcc: Put quotes around arguments with spaces when printing them. + dbghelp: Ignore N_INDR symbols. + iphlpapi: Use res_getservers() if available to get the DNS server list. + iphlpapi: Implement GetTcp6Table() for Mac OS and FreeBSD. + iphlpapi: Implement GetUdp6Table() for Mac OS and FreeBSD. + d3d9/tests: Use compare_uint() in a couple more places. + d3d10core/tests: Use compare_uint() in a few more places. + d3d11/tests: Use compare_uint() in a few more places. + d3d11: Introduce a function to convert D3D10 map types to wined3d map flags. + d3d11: Introduce a function to convert D3D10 DSV dimensions to D3D11. + d3d11: Introduce a function to convert a wined3d feature level to a D3D feature level. + d3d11: Introduce a function to convert a D3D11 input class to wined3d. + d3d11: Introduce a function to convert D3D11 blend factors to wined3d. + d3d11: Introduce a function to convert D3D11 blend ops to wined3d. + d3d11: Introduce a function to convert D3D11 fill modes to wined3d. + d3d11: Introduce a function to convert D3D11 cull modes to wined3d. + d3d8: Explicitly cast FourCC formats in d3dformat_from_wined3dformat() and wined3dformat_from_d3dformat(). + d3d9: Explicitly cast FourCC formats in d3dformat_from_wined3dformat() and wined3dformat_from_d3dformat(). + opencl: Build with CL_SILENCE_DEPRECATION. + winemac.drv: Build with GL_SILENCE_DEPRECATION. + d3d11: Introduce a function to convert a D3D feature level to a D3D10.1 feature level. + d2d1: Return enum constants directly in d2d_bitmap_brush_GetInterpolationMode() (Clang). + d2d1: Introduce a function to convert D2D1.0 interpolation modes to D2D1.1. + libwine: Add missing return (Clang). + winemac.drv: Build with GL_SILENCE_DEPRECATION. + d3d11: Introduce a function to convert D3D11 blend factors to D3D10. + d3d11: Introduce a function to convert D3D11 blend ops to D3D10. + wined3d: Introduce compare_uint(). + d3d9: Remove an unneeded conversion. + configure: Make Clang fail optimization arguments it doesn't care about. + widl: Cast server functions to void *. + d3d10_1: Introduce a function to convert d3d10_1 feature levels to D3D_FEATURE_LEVEL. + wined3d: Use GL_APPLE_flush_render and GL_APPLE_rgb_422 to detect Apple OpenGL. + +Daniel Lehman (3): + loader: Add Chatham Islands Standard Time Zone. + loader: Add Bougainville Standard Time Zone. + loader: Add Marquesas Standard Time Zone. + +Derek Lesho (2): + mfreadwrite: Fix flushing on MF_SOURCE_READER_ALL_STREAMS. + include: Add codecapi.h. + +Dmitry Timoshkov (50): + wldap32: Fix compilation without LDAP installed. + adsldp: Recognize and skip not supported schema tokens. + adsldp: Require attribute definition to be properly terminated. + adsldp: Add support for NAME token with multiple entries. + adsldp: Map 1.3.6.1.4.1.1466.115.121.1.38 to ADSTYPE_CASE_IGNORE_STRING. + adsldp: Map 1.3.6.1.4.1.1466.115.121.1.15 to ADSTYPE_CASE_IGNORE_STRING. + adsldp: Map 1.3.6.1.4.1.1466.115.121.1.7 to ADSTYPE_BOOLEAN. + adsldp: Implement IDirectorySearch::FreeColumn(). + adsldp: Fix IDirectorySearch::GetColumn() behaviour for not found case. + adsldp/tests: Handle more cases of ERROR_DS_SERVER_DOWN. + adsldp: Blacklist serverless and rootDSE connections in QueryInterface(&IID_IDirectorySearch). + adsldp: Store original LDAP values pointer in hReserved. + adsldp: Initialize also pADsValues->dwType field. + adsldp: Ignore attribute definitions without NAME. + adsldp: Sort the attribute types array. + activeds: Add IADsPathname stubs. + activeds: Make IADsPathname::Set() and IADsPathname::Retrieve() return success. + adsldp: Add IDirectoryObject stubs. + adsldp: Forward IDirectoryObject::QueryInterface() to parent. + adsldp: Add support for IDirectorySearch::SetSearchPreference(ADS_SEARCHPREF_SECURITY_MASK). + adsldp: Map 1.2.840.113556.1.4.907 to ADSTYPE_NT_SECURITY_DESCRIPTOR. + wldap32/tests: Test setting a not supported server control. + wldap32: Actually use private LDAP structure for internal storage. + wldap32: Locally cache "supportedControl" rootDSE attribute, and check it in ldap_set_option(LDAP_OPT_SERVER_CONTROLS). + adsldp: Fix a typo in IDirectorySearch::GetNextRow(). + wldap32: Fix server controls lookup logic. + adsldp: Always fully initialize returned column values. + adsldp: Recognize ADS_SEARCHPREF_PAGESIZE in IDirectorySearch::SetSearchPreference(). + adsldp: Recognize ADS_SEARCHPREF_CACHE_RESULTS in IDirectorySearch::SetSearchPreference(). + adsldp/tests: Remove no longer needed goto. + include: Add dsclient.h. + dsuiext: Add IDsDisplaySpecifier stubs. + adsldp: Map "1.3.6.1.4.1.1466.115.121.1.24" to ADSTYPE_UTC_TIME. + adsldp: Map "1.2.840.113556.1.4.906" to ADSTYPE_LARGE_INTEGER. + adsldp: Map 1.2.840.113556.1.4.903 to ADSTYPE_DN_WITH_BINARY. + adsldp: Add support for ADS_SEARCHPREF_ATTRIBTYPES_ONLY to IDirectorySearch::SetSearchPreference(). + adsldp: Recognize ADS_SEARCHPREF_TOMBSTONE in IDirectorySearch::SetSearchPreference(). + include/winnt.h: Update ACE types list. + advapi32: Properly skip not supported parts of the object ACE. + adsldp: Use correct format specifiers for SYSTEMTIME fields. + adsldp: Fix typos in ADSTYPE_BOOLEAN handling. + activeds/tests: Add some IADsPathname tests. + activeds: Implement IADsPathname::Set(ADS_SETTYPE_FULL). + activeds: Implement remaining cases for IADsPathname::Set(). + activeds: Implement IADsPathname::Retrieve(ADS_FORMAT_X500). + activeds: Implement some simple cases for IADsPathname::Retrieve(). + activeds: Implement IADsPathname::Retrieve(ADS_FORMAT_LEAF). + activeds: Implement IADsPathname::GetElement(). + activeds: Implement IADsPathname::GetNumElements(). + adsldp: Map 1.3.6.1.4.1.1466.115.121.1.26 to ADSTYPE_CASE_EXACT_STRING. + +François Gouget (2): + wpp: Standardize the error and warning messages. + gameux/tests: Remove unneeded parentheses around a gamestatistics string. + +Gabriel Ivăncescu (6): + vbscript: Look for the identifier in the named item's disp only if it doesn't have the CODEONLY flag. + vbscript/tests: Add more persistent named items tests. + vbscript: Clear SCRIPTITEM_CODEONLY flag on script re-initialization. + msscript.ocx: Fix the idl output parameters. + quartz: Cache IMediaSeeking for filters. + quartz/tests: Add tests for when IMediaSeeking on a filter is released by the filter graph. + +Gerald Pfeifer (1): + dbghelp: Define NT_GNU_BUILD_ID regardless of whether __ELF__ is defined. + +Gijs Vermeulen (4): + riched20: Turn FIXME into a TRACE for ITextRange::SetRange. + iphlpapi: Silence unused function warning for sockaddr_in6_to_WS_storage. + iphlpapi: Fix unused function warning for get_ipv6_addr_scope_table & find_ipv6_addr_scope. + iphlpapi: Fix unused variable warning. + +Hans Leidekker (4): + secur32: Map GNUTLS_E_REHANDSHAKE to SEC_I_RENEGOTIATE. + winhttp: Explicitly pass errors. + winhttp: Handle renegotiate requests. + secur32: Add TLS application protocol negotiation support. + +Hans-Kristian Arntzen (1): + dxgi: Implement dxgi_factory_CheckFeatureSupport(). + +Henri Verbeet (15): + d3d9/tests: Introduce compare_uint(). + d3d10core/tests: Introduce compare_uint(). + d3d11/tests: Introduce compare_uint(). + d3d12/tests: Introduce compare_uint(). + d2d1/tests: Introduce compare_uint(). + d3drm/tests: Introduce compare_uint(). + d3dx9/tests: Introduce compare_uint(). + d3d9: Introduce helpers to convert between d3d9 and wined3d scanline ordering types. + d3d9: Introduce a helper to convert d3d9 device types to wined3d types. + d3d9: Introduce a helper to convert d3d9 texture filter types to wined3d types. + d3d9: Introduce a helper to convert d3d9 transform states to wined3d states. + d3d9: Introduce a helper to convert d3d9 render states to wined3d states. + d3d9: Introduce a helper to convert d3d9 sampler states to wined3d states. + d3d9: Introduce a helper to convert d3d9 primitive types to wined3d types. + d3d9: Introduce helpers to convert between d3d9 and wined3d query types. + +Jacek Caban (49): + dbghelp: Pass module to map_dwarf_register. + dbghelp: Use DWARF registry mapping quirk only for actual macho modules. + dbghelp: Provide N_PEXT and N_SECT defines when not available. + dbghelp: Clear N_PEXT flag of stab type in macho files. + dbghelp: Use local stab_nlist declaration in macho_module.c. + dbghelp: Use local declaration for 64-bit macho nlist. + dbghelp: Pass stab size to stabs_parse. + dbghelp: Fix misleading indentation warning. + dbghelp: Use local NOTE_GNU_BUILD_ID declaration. + dbghelp: Don't use *_NULL constants. + dbghelp: Use local AT_SYSINFO_EHDR definition. + dbghelp: Use local declarations of r_debug and link_map structs. + dbghelp: Use local elf_header declaration. + dbghelp: Use local elf_section_header declaration. + dbghelp: Use local ELF program segment header declaration. + dbghelp: Use local dynamic section entry declaration. + dbghelp: Use local symbol table entry declaration. + dbghelp: Inline ELF magic constants. + dbghelp: Don't use ELF32_ST_BIND and ELF32_ST_TYPE macros. + dbghelp: Use local ELF constants definitions. + dbghelp: Don't use system headers for ELF declarations. + dbghelp: Don't store entire mach header in image_file_map. + dbghelp: Use local macho load command declaration. + dbghelp: Use local macho section declaration. + dbghelp: Use local fat header declaration. + dbghelp: Use local symtab and segment commands declarations. + dbghelp.c: Use local mach header declaration. + dbghelp: Don't use stdint.h types. + dbghelp: Use local constants definitions instead of mach-o/loader.h. + dbghelp: Don't use _NSGetExecutablePath in macho_search_loader. + dbghelp: Get rid of get_dyld_image_info_address. + dbghelp: Don't bother trying to initialize loader backend if we can't get debug base address from PEB. + mountmgr: Add mac-specific ioctl to lookup symbol files. + dbghelp: Factor out query_dsym. + dbghelp: Use mount manager to lookup dsym by uuid. + dbghelp: Introduce read_process_memory helper. + dbghelp: Fix GCC warnings in macho_module.c. + dbghelp: Always build all loader backends. + dbghelp: Import zlib inflate code. + dbghelp: Remove unneeded includes. + dbghelp: Don't use PATH to search for libraries. + dbghelp: Build with ucrtbase. + makefiles: Remove no longer needed explicit ucrtbase imports. + include: Avoid _onexit_t redefinition. + dbghelp: Get rid of no longer needed HAVE_ZLIB checks. + dbghelp: Get rid of no longer needed #ifdefs. + configure: Get rid of no longer needed zlib checks. + dbghelp: Use debuggee environment variables in search_dll_path. + api-ms-win-core-localization: Update spec files. + +Jactry Zeng (4): + qasf: Implement WM ASF reader stub. + qasf: Implement IFileSourceFilter stub for WM ASF reader. + qasf: Implement IFileSourceFilter_Load() for WM ASF reader. + qasf: Implement IFileSourceFilter_GetCurFile() for WM ASF reader. + +Jeff Smith (5): + gdiplus/tests: Add widen-path test for UnitWorld zero-width line. + gdiplus: Pass line-width parameter to widen-figure functions. + gdiplus: Do not shrink UnitWorld lines below width 1.0. + gdiplus: Widen-path for zero-width lines only emits anchors. + gdiplus: Handle some degenerate cases with GdipCreatePath2. + +Lauri Kenttä (1): + po: Update Finnish translation. + +Mathew Hodson (1): + user32/tests: Don't report cursor handle since it always changes. + +Matteo Bruni (6): + d3dx9: Switch character count to unsigned int in the DrawText implementation. + wined3d: Get rid of a WARN in wined3d_query_get_data(). + wined3d: Add a TRACE to wined3d_buffer_gl_download_ranges(). + wined3d: Add a TRACE to wined3d_buffer_gl_upload_ranges(). + wined3d: Add a TRACE to wined3d_buffer_copy(). + wined3d: Add a few traces to draw_primitive(). Myah Caron (1): - api-ms-win-core-registry-l2-2-0: Add dll. + ucrtbase: Export _o___stdio_common_v[fs]wprintf functions. -Nikolay Sivov (46): - mfplat: Implement MFCreateMediaBufferFromMediaType() for audio types. - mfplat: Add some more YUV formats data. - mfplat: Use underlying work queue API. - mfplat: Forward MFCreateAsyncResult() to rtworkq.dll. - mfplat: Implement locking methods for 2D memory buffers. - mf: Remove FIXME for zero buffer size, it's used as is. - mfplat: Implement ConvertToContiguousBuffer() for multiple buffers. - mfplat: Fix optional buffer argument handling in ConvertToContiguousBuffer(). - mfplat: Fix buffer alignment calculation. - mf: Copy sample data to copier transform output. - mf: Forward sink invalidation events to application. - mfplat: Get rid of unsupported interface trace for 1D buffers. - mfplat: Improve 2D buffer sizes estimation. - mfplat/tests: Increase wait timeout to help with intermittent test failures. - mfplat: Add a helper to trace video format name. - mf: Forward more Audio Session events from the session. - mf: Set presentation clock for all node types. - comctl32/imagelist: Implement IImageList::GetItemFlags(). - comctl32/imagelist: Update todo list. - mfplat: Fix scanline pointer returned with Lock2D(). - mfplat: Fix bpp for RGB24 format. - mfplat: Fix scanline for bottom-up case. - mfplat: Fix packed byte width calculation for 2D buffer. - mfplat: Zero-initialize buffer memory. - include: Add some missing symbols to mftransform.idl. - ole32: Add support for reading VT_CLSID properties. - comctl32/tests: Remove excessive error handling logic. - mfplat: Add more format-specific attributes guids. - include: Added IMFSeekInfo definition. - mfreadwrite: Make pending response reader structure more generic. - mfreadwrite: Handle MEStreamTick event in source reader. - mfreadwrite: Request one sample at a time from the stream. - mfreadwrite: Implement async reader mode. - mfreadwrite: Implement reader flushing. - mfreadwrite: Autodetect ftyp(isom) as .mp4. - mfplat: Add a helper to trace timestamp arguments. - mfplat: Remove trace from MFGetSystemTime(). - mf: Add a helper to trace timestamp arguments. - mf: Fix string array access for registration data helpers. - mf: Clean traces format for topology methods. - mf: Fix a typo when setting event attribute. - mfplat: Add more event types to trace. - mfreadwrite: Forward some source events to async reader callback. - mfreadwrite: Move Sink Writer stubs to separate file. - mfplat: Add remaining media type attributes guids. - mf: Fix returned session rates when pipeline objects don't support rate control. - -Paul Gofman (20): - d3d9/tests: Add tests for allowed StrecthRect() filters. - wined3d: Validate the filter in wined3d_texture_blt(). - ucrtbase: Add test for _strnicmp() count parameter. - d3dx9: Validate state operation in d3dx_parse_state(). - d3d11: Use stricmp() instead of _strnicmp(..., -1). - ddraw: Factor out ddraw_surface_is_lost() function. - ddraw: Factor out ddraw_surface_lock_ddsd() function. - ddraw: Deny locking lost surfaces. - ddraw/tests: Test locking lost surface for ddraw4. - ddraw/tests: Test locking lost surface for ddraw2. - ddraw/tests: Test locking lost surface for ddraw1. - hhctrl.ocx: Use stricmp() instead of _strnicmp(..., -1). - inetcomm: Use stricmp() instead of _strnicmp(..., -1). - wineps.drv: Use stricmp() instead of _strnicmp(..., -1). - winhttp: Use stricmp() instead of _strnicmp(..., -1). - wininet: Use stricmp() instead of _strnicmp(..., -1). - mshtml: Use stricmp() instead of _strnicmp(..., -1). - d3dcompiler: Use stricmp() instead of _strnicmp(..., -1). - d3dx9: Use stricmp() instead of _strnicmp(..., -1). - d3dxof: Use stricmp() instead of _strnicmp(..., -1). - -Piotr Caban (4): - msvcp140: Remove custom standard streams definition. - msvcp140: Don't load __processing_throw dynamically. - ucrtbase/tests: Set invalid_parameter_handler once. - msvcp90: Add std:_XLgamma implementation. - -Rémi Bernon (7): - tools: Only update protocol version if something changed. - user32/tests: Add new test to validate WM_CANCELMODE message. - winex11.drv: Remove frame when non-client area is empty. - winemac.drv: Remove frame when non-client area is empty. - kernel32/tests: Add tests for ContinueDebugEvent with DBG_REPLY_LATER. - winegstreamer: Check the callback list before waiting. - server: Implement DBG_REPLY_LATER handling. - -Serge Gautherie (16): - rpcrt4/tests: Remove now useless forced 0x0500 API versions. - shell32/tests: Remove now useless forced 0x0501 API versions. - include: Remove comment about now old NTDDI_VERSION. - psapi/tests: NtQueryVirtualMemory() 3rd parameter is MEMORY_INFORMATION_CLASS, not ULONG. - advapi32: CryptReleaseContext() dwFlags parameter is DWORD, not ULONG_PTR. - advapi32: Use standard refcount in CRYPTPROV. - advapi32: Fix CryptReleaseContext() last error on NULL provider. - advapi32/tests: Check all CryptReleaseContext() calls. - advapi32/tests: Add more cases for CryptReleaseContext(). - ntdll/tests: Remove now useless forced 0x500 API versions. - advapi32: Fix 3 comments about pdwReserved and dwFlags. - include: Remove now useless forced WINVER defines. - include: Remove now useless forced _WIN32_IE defines. - tests: Remove now useless forced _WIN32_WINNT defines. - kernelbase: Handle RegGetValue() RRF_SUBKEY_WOW64??KEY flags. - advapi32/tests: Check RegGetValueA() RRF_SUBKEY_WOW64??KEY validation. - -Stefan Dösinger (2): - ddraw/tests: Re-init for every test_surface_discard iteration. - ddraw/tests: Don't print uninitialized l in test_compressed_surface_stretch. - -Sven Baars (2): - d3dx9: Add two more DT_SINGLELINE tests. - d3dx9: Remove a recursive call to ID3DXFont_DrawTextW when no rect is specified. - -Vijay Kiran Kamuju (5): - include: Add missing DPACCOUNTDESC to dplay.h. - wmvcore: Add semi-stub implementation for WMIsContentProtected. - include: Add missing effect related defines and enums in dsound.h. - include: Add missing GUIDs in dsound.h. - include: Add some missing defines to xinput.h. - -Vincent Povirk (2): - gdiplus/tests: Don't test font face of DEFAULT_GUI_FONT. - gdiplus/tests: Don't test the exact substitution of MS Shell Dlg. - -Zebediah Figura (71): - wined3d: Fix an accidental replacement of STATE_RENDER(WINED3D_RS_SRGBWRITEENABLE). - wined3d: Check the writemask for the correct render target in draw_primitive(). - wined3d: Map ARB_draw_buffers_blend functions. - wined3d: Feature level 10.0 does not require independent blend functions. - ntoskrnl.exe: Implement IoOpenDeviceRegistryKey(). - wineqtdecoder: Fix compilation. - winegstreamer: Allocate media type format blocks with CoTaskMemAlloc(). - winegstreamer: Use accessor macros for GstVideoInfo fields. - winegstreamer: Use amt_from_gst_video_info() in gstdecoder_source_get_media_type(). - winegstreamer: Use the image size provided by GStreamer. - winegstreamer: Also use GST_QOS_TYPE_OVERFLOW for samples that arrive on time. - winegstreamer: Clamp both timestamp and timestamp + diff to 0. - winebus.sys: Use public HID_USAGE_* constants. - wined3d: Implement dual source blending. - d3d10core/tests: Add a test for dual source blending. - d3d11/tests: Add a test for dual source blending. - hidclass.sys: Don't reset the report count when recording a main item. - rpcrt4: Handle bare interfaces as top-level parameters. - rpcrt4: Handle bare coclasses as top-level parameters. - kernel32/tests: Add some tests for mounted folders. - kernel32/tests: Remove a test for Unix-style paths. - d3dcompiler: Rename HLSL_MODIFIER_{IN, OUT} to HLSL_STORAGE_{IN, OUT}. - d3dcompiler: Move modifer processing up out of the struct_spec rules. - d3dcompiler: Rename HLSL_MODIFIERS_COMPARISON_MASK to HLSL_MODIFIERS_MAJORITY_MASK and use it in more places. - d3dcompiler/tests: Add more tests for swizzles. - d3dcompiler: Ensure that the lhs of an assignment is reducible to a variable. - quartz/vmr9: Zero-initialize the VMR9PresentationInfo struct. - quartz/vmr9: Determine the D3D format and flags from the subtype. - quartz/vmr9: Request only one surface. - quartz/vmr9: Cache surfaces on connection. - quartz/tests: Add some tests for renderless mode. - quartz/vmr9: Create textures with D3DUSAGE_DYNAMIC. - qasf/tests: Fix a test failure with Windows 2003. - quartz/tests: Fix test failures when we can't create a 3D device. - quartz/tests: Disable some tests that fail intermittently. - include: Fix the definition of USBD_STATUS_CANCELED. - ntdll: Fix the overflow check in read_changes_apc(). - kernel32/tests: Fix some test failures when run from a mounted folder. - server: Store the real Unix path. - ntdll: Consider mount points to be reparse points in get_file_info(). - ntdll: Report Unix mount points as Win32 mount points in NtQueryInformationFile(). - kernel32: Reimplement GetVolumePathName() using NtQueryInformationFile(FileAttributeTagInformation). - d2d1/tests: Adjust a color to prevent test failures. - d3d11/tests: Relax some color comparisons. - d3d10core/tests: Relax some color comparisons. - make_makefiles: Allow running from a separate worktree. - d3dcompiler: Fix the location for a warning. - d3dcompiler: Get rid of the "dxversion" argument to create_writer(). - d3dcompiler: Get rid of the "dxversion" argument to SlWriteBytecode(). - d3dcompiler: Store the shader version using separate integer fields. - quartz/tests: Add a test for autoplugging from UYVY. - quartz/tests: Add some tests for AVI decoder pin connection. - quartz/avidec: Correctly implement avi_decompressor_source_get_media_type(). - quartz/avidec: Correctly implement avi_decompressor_source_query_accept(). - quartz/avidec: Don't determine the source format from the sink format. - d3dcompiler: Store a pointer to the bwriter_shader structure inside the bc_writer structure. - include: Rename the FileSystemAttribute field of FILE_FS_ATTRIBUTE_INFORMATION to FileSystemAttributes. - mountmgr: Fill the mountmgr_unix_drive structure even if the buffer is too small to hold the dynamic strings. - mountmgr: Return STATUS_BUFFER_OVERFLOW from query_unix_drive() if the buffer is too small. - winegstreamer: Also clear the pixel-aspect-ratio field in amt_to_gst_caps_video(). - strmbase: Support FORMAT_VideoInfo2 in strmbase_dump_media_type(). - strmbase: Strip trailing zeroes in debugstr_time(). - mf: Strip trailing zeroes in debugstr_time(). - mfplat: Strip trailing zeroes in debugstr_time(). - quartz: Strip trailing zeroes in debugstr_time(). - winegstreamer: Flip only RGB video. - winegstreamer: Set the bit depth for UYVY video. - d3dcompiler: Get rid of the init_*_dx9_writer() helpers. - d3dcompiler: Get rid of the "len" parameter to write_declarations(). - d3dcompiler: Introduce an array_reserve() helper. - d3dcompiler: Move some declarations to bytecodewriter.c. - -Zhiyi Zhang (18): - wined3d: Pass a struct wined3d_adapter pointer to wined3d_get_device_caps(). - d3d8: Report d3d8 adapter ordinal in device caps. - d3d8/tests: Support creating a device with the specified adapter. - d3d9/tests: Support creating a device with the specified adapter. - d3d8/tests: Test device caps on multiple adapters. - d3d9/tests: Test device caps on multiple adapters. - d3d8/tests: Fix a test failure with Win10 WARP. - d3d9/tests: Fix a test failure with Win10 WARP. - wined3d: Refactor wined3d_get_output_desc() to wined3d_output_get_desc(). - wined3d: Add an ordinal to struct wined3d_output. - d3d9: Report d3d9 adapter group information in device caps. - d3d8: Report d3d8 adapter ordinal in d3d8_device_GetCreationParameters(). - d3d9: Report d3d9 adapter ordinal in d3d9_device_GetCreationParameters(). - d3d8/tests: Test detaching adapters. - d3d9/tests: Test detaching adapters. - dxgi/tests: Test detaching outputs. - wined3d: Support non-primary outputs in wined3d_output_get_desc(). - wined3d: Remove device_name and device_name_size from struct wined3d_adapter_identifier. +Nikolay Sivov (39): + mfplat: Forward MFScheduleWorkItemEx() to rtworkq.dll. + mfplat: Fix PRESENTATION_CURRENT_POSITION handling for system time source. + mfplat/tests: Link to MFHeap* functions directly. + mf: Set cancellation object directly (Coverity). + mfplat: Add a warning for buffer method failure (Coverity). + mfreadwrite: Do not call async reader callback if source failed to start up. + mfreadwrite: Use single reader lock for all streams. + mfreadwrite: Implement MF_SOURCE_READER_ANY_STREAM for async mode. + mfreadwrite: Pack stream selection state as flags. + rtworkq: Add RtwqJoinWorkQueue()/RtwqUnjoinWorkQueue() stubs. + rtworkq: Add MMCSS-related stubs. + comctl32/button: Use duplicated image for drawing. + ntdll: Fix trace pointer returned from RtlGetUnloadEventTraceEx(). + mfreadwrite: Add stream index validation for Flush(). + mfreadwrite: Use default queue so submit flush commands. + mfreadwrite: Handle async reads when flush is in progress. + mfreadwrite: Move source shutdown mode to reader flags. + mfreadwrite: Block recurring flush calls in async mode when flush is pending. + mfreadwrite: Implement MF_SOURCE_READER_ANY_STREAM for synchronous case. + mfreadwrite: Add support for seeking in Source Reader. + mf: Add IMFMediaSink stub for SAR. + mf: Implement dynamic stream management methods in SAR. + mf: Add IMFMediaSinkPreroll stub for SAR. + mf: Return sink flags for SAR. + mf: Add event queue for SAR sink. + include: Add ISpatialAudioClient definition. + mf: Add support to get/set presentation clock for SAR. + mfplat: Add SAR attribute traces. + mf: Attempt to create mmdevapi device on SAR creation. + mf: Add stream sink stub for SAR. + mf: Add events support for SAR stream. + mf: Add type handler stub for SAR stream. + mfplat: Partially implement MFInitMediaTypeFromWaveFormatEx(). + mfplat: Initial support for WAVE_FORMAT_EXTENSIBLE in MFInitMediaTypeFromWaveFormatEx(). + mf: Add volume control stubs for SAR. + mf: Add IMFAudioPolicy stub for SAR. + mf/tests: Add some more tests for SAR current type. + mf: Always queue set topologies. + mf: Use original topology instance for both MESessionTopologySet and MESessionTopologyStatus. + +Paul Gofman (1): + ddraw: Reserve extra space for video memory surfaces in compatibility mode. + +Piotr Caban (7): + msvcr90/tests: Fix swscanf tests compilation on arm. + server: Initialize current_time before it's used in init_registry. + server: Use monotonic clock for relative timeouts. + server: Use monotonic clock for SetTimer timeouts. + server: Use monotonic clock in waitable timers. + server: Use correct clock in select. + kernel32/tests: Test timeout behaviour on system clock change. + +Rémi Bernon (27): + winedbg: Force read data to be NUL terminated. + winedbg: Force packet data to be NUL terminated. + winedbg: Cleanup extract_packets for faster acking. + winedbg: Support QStartNoAckMode to reduce verbosity. + winedbg: Explicitly handle MustReplyEmpty packet. + winedbg: Cleanup return for kill and status packets. + winedbg: Remove outdated commented code. + winedbg: Simplify and fix register read/write handlers. + winedbg: Simplify individual thread single_step control. + winedbg: Use tid for other/exec thread operations. + winedbg: Store the current debug event in gdbctx. + winedbg: Rewrite and simplify step / continue handlers. + winedbg: Remove uses of dbg_curr_thread from gdbproxy. + winedbg: Support qXfer:libraries:read request. + winedbg: Support qXfer:threads:read request. + winedbg: Add gdb feature names to the register maps. + winedbg: Add gdb register names to the register maps. + winedbg: Add gdb register types to the register maps. + winedbg: Support qXfer:features:read request. + winedbg: Remove the use of gdb specific register length. + winedbg: Use target pointer size in indirect string access. + winedbg: Add support for hardware watchpoints. + winedbg: Clean handle_exception return values. + winedbg: Clean handle_debug_event return value. + winedbg: Recompute signal from debug event as needed. + winedbg: Don't wait or load the wine loader module. + winedbg: Use debug event code in packet_reply_status. + +Serge Gautherie (2): + include: Remove remaining '&& !defined(CINTERFACE)' in guiddef.h. + ntdll/tests: Fix 'path' copypastas. + +Sven Baars (3): + d3dx9: Add a helper for computing the bounding rectangle in ID3DXFont_DrawText. + d3dx9: Handle vertical alignment in ID3DXFont_DrawText. + d3dx9: Handle horizontal alignment in ID3DXFont_DrawText. + +Zebediah Figura (70): + server: Check whether the new file name is executable. + quartz/avidec: Use the strmbase_passthrough object directly. + quartz/acmwrapper: Use the strmbase_passthrough object directly. + qasf/dmowrapper: Use the strmbase_passthrough object directly. + qedit/samplegrabber: Use the strmbase_passthrough object directly. + strmbase: Return void from strmbase_renderer_init(). + kernel32/tests: Add more tests for deleting and replacing open files. + kernel32: Don't fail ReplaceFile() if unable to delete a generated backup. + qedit/samplegrabber: Use calloc() in sample_grabber_create(). + qedit/samplegrabber: Get rid of the SG_Impl typedef. + qedit/nullrenderer: Use calloc() in null_renderer_create(). + qedit/nullrenderer: Get rid of the NullRendererImpl typedef. + evr: Use calloc() in evr_filter_create(). + evr: Get rid of the evr_filter typedef. + quartz/acmwrapper: Get rid of the ACMWrapperImpl typedef. + quartz/avidec: Get rid of the AVIDecImpl typedef. + quartz/avidec: Fix some copy-paste errors. + quartz/dsoundrender: Use calloc() in dsound_render_create(). + quartz/dsoundrender: Get rid of the DSoundRenderImpl typedef. + d3dcompiler: Index instructions for liveness ranges. + d3dcompiler: Compute liveness ranges for variables. + d3dcompiler: Compute liveness ranges for anonymous nodes. + quartz/filesource: Get rid of the AsyncReader typedef. + quartz/videorenderer: Use calloc() in video_renderer_create(). + quartz/videorenderer: Get rid of the VideoRendererImpl typedef. + quartz/vmr9: Use calloc(). + quartz/vmr9: Get rid of the VMR9DefaultAllocatorPresenterImpl typedef. + ntdll: Synchronize ZwSetLdtEntries spec entry with NtSetLdtEntries. + quartz: Return void from basic_video_init(). + quartz: Get rid of BaseControlVideo_Destroy(). + quartz: Get rid of the BaseControlWindow typedef. + quartz: Get rid of the BaseWindowFuncTable typedef. + quartz: Merge the BaseWindow structure into video_window. + msvfw32: Fix a debug trace. + kernel32: Create the backup in the same directory. + rpcrt4: Handle FC_NON_ENCAPSULATED_UNION in calc_arg_size(). + rpcrt4: Implement NdrClientCall3(). + rpcrt4: Implement Ndr64AsyncClientCall(). + rpcrt4: Bump the maximum accepted NDR version. + quartz: Return void from video_window_init(). + quartz: Get rid of the "width" and "height" fields of video_window. + quartz/filesource: Remove unused callbacks. + strmbase: Check the peer direction in source_Connect(). + winegstreamer: Check the format GUID, size, and pointer in amt_to_gst_caps(). + mountmgr: Determine and store the filesystem type, label, and serial. + mountmgr: Return the filesystem type from IOCTL_MOUNTMGR_QUERY_UNIX_DRIVE. + mountmgr: Allow querying a Unix device by device ID. + ntdll: Implement NtQueryVolumeInformationFile(FileFsAttributeInformation). + mountmgr: Return the serial and label from IOCTL_MOUNTMGR_QUERY_UNIX_DRIVE. + ntdll: Implement NtQueryVolumeInformationFile(FileFsVolumeInformation). + qcap/tests: Use explicit source and sink structures. + qcap/tests: Add some basic tests for ICaptureGraphBuilder2::FindPin(). + qcap/tests: Add more tests for ICaptureGraphBuilder2::RenderStream(). + qcap: Use separate functions when searching from a pin and filter. + qcap: Use pin_matches() directly in find_unconnected_source_from_pin(). + qcap: Iterate over all source pins in find_unconnected_source_from_filter(). + qcap: Search downstream pins regardless of whether the category and major type match. + ntdll: Silence a warning for FileFsVolumeInformation. + kernelbase: Return the volume serial number in GetFileInformationByHandle(). + ntdll: Fill the volume serial number in NtQueryInformationFile(FileIdInformation). + mountmgr: Assign a unique nonzero serial to all volumes. + kernel32: Reimplement is_same_file() using FileIdInformation. + kernel32: Implement GetVolumeInformationByHandleW(). + user32: Rename the "hid_device" structure to "device". + user32: Rename hid_devices_* variables to rawinput_devices_*. + user32: Also scan for mouse devices in GetRawInputDeviceList(). + maintainers: Add Paul Gofman to the Staging branch section. + maintainers: Add myself to some sections. + maintainers: Take maintainership of DirectShow. + maintainers: Take maintainership of the HTTP server libraries. + +Zhipeng Zhao (1): + explorer: Support '/cd,' command line option. + +Zhiyi Zhang (15): + winex11.drv: Get the minimum screen size from XRRGetScreenSizeRange(). + d3d8/tests: Fix possible test failures. + d3d9/tests: Fix possible test failures. + d3d8/tests: Add cursor size tests. + d3d9/tests: Add cursor size tests. + wined3d: Check cursor sizes are powers of two. + wined3d: Move cursor size check against display mode out of wined3d_device_set_cursor_properties(). + dxgi/tests: Fix uninitialized variable warnings. + d3d8/tests: Test cursor clipping. + d3d9/tests: Test cursor clipping. + dxgi/tests: Fix some test failures in test_find_closest_matching_mode(). + dxgi/tests: Test cursor clipping. + ddraw/tests: Test cursor clipping. + wined3d: Do not clip the cursor after changing display modes. + dxgi/tests: Add a test for IDXGIFactory5 feature support queries. + +Ziqing Hui (1): + comctl32/toolbar: Correctly draw disabled button which contains 32 bpp bitmap with alpha channel. -- Alexandre Julliard diff -Nru wine-development-5.5/AUTHORS wine-development-5.6/AUTHORS --- wine-development-5.5/AUTHORS 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/AUTHORS 2020-04-10 18:54:32.000000000 +0000 @@ -116,6 +116,7 @@ Andrew de Quincey Andrew Eikum Andrew Fenn +Andrew Guertin Andre Wisplinghoff Andrew John Hughes Andrew Johnston @@ -581,6 +582,7 @@ Hann-huei Chiou Hannu Valtonen Hans de Graaff +Hans-Kristian Arntzen Hans Leidekker Hao Peng Harald Hoyer @@ -1716,6 +1718,7 @@ Zhan Jianyu Zhenbo Li Zheng Chen +Zhipeng Zhao Zhiyi Zhang Zimler Attila Ziqing Hui diff -Nru wine-development-5.5/configure.ac wine-development-5.6/configure.ac --- wine-development-5.5/configure.ac 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/configure.ac 2020-04-10 18:54:32.000000000 +0000 @@ -111,7 +111,6 @@ AC_ARG_WITH(xslt, AS_HELP_STRING([--without-xslt],[do not use XSLT])) AC_ARG_WITH(xxf86vm, AS_HELP_STRING([--without-xxf86vm],[do not use XFree video mode extension]), [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_xf86vmode_h=no; ac_cv_header_X11_extensions_xf86vmproto_h=no; fi]) -AC_ARG_WITH(zlib, AS_HELP_STRING([--without-zlib],[do not use Zlib (data compression)])) AC_ARG_WITH(wine-tools,AS_HELP_STRING([--with-wine-tools=DIR],[use Wine tools from directory DIR])) AC_ARG_WITH(wine64, AS_HELP_STRING([--with-wine64=DIR],[use the 64-bit Wine in DIR for a Wow64 build])) @@ -498,10 +497,8 @@ sys/attr.h \ sys/auxv.h \ sys/cdio.h \ - sys/elf32.h \ sys/epoll.h \ sys/event.h \ - sys/exec_elf.h \ sys/filio.h \ sys/ioctl.h \ sys/ipc.h \ @@ -1537,6 +1534,20 @@ AC_DEFINE(HAVE_RESOLV, 1) AC_SUBST(RESOLV_LIBS,$ac_cv_have_resolv) ;; esac + + if test "x$ac_cv_have_resolv" != "xnot found" + then + AC_CACHE_CHECK([for res_getservers], ac_cv_have_res_getservers, + [ac_save_LIBS="$LIBS" + LIBS="$RESOLV_LIBS $LIBS" + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [[#include ]],[[res_getservers(NULL, NULL, 0);]])],[ac_cv_have_res_getservers=yes],[ac_cv_have_res_getservers=no]) + LIBS="$ac_save_LIBS"]) + if test "$ac_cv_have_res_getservers" = "yes" + then + AC_DEFINE(HAVE_RES_GETSERVERS, 1, [Define to 1 if you have the `res_getservers' function.]) + fi + fi fi dnl **** Check for LittleCMS *** @@ -1584,18 +1595,6 @@ pthread_getthreadid_np, [$PTHREAD_LIBS]) -dnl **** Check for zlib **** -if test "x$with_zlib" != "xno" -then - WINE_PACKAGE_FLAGS(Z,[libz],[-lz],,, - [AC_CHECK_HEADERS(zlib.h, - [AC_CHECK_LIB(z,inflate, - [AC_DEFINE(HAVE_ZLIB,1,[Define to 1 if you have the `z' library (-lz).])], - [Z_LIBS=""],[$Z_LIBS])], - [Z_LIBS=""])]) -fi -WINE_NOTICE_WITH(zlib,[test "x$Z_LIBS" = "x"],[libz ${notice_platform}development files not found, data compression won't be supported.]) - dnl **** Check for gettextpo **** if test "x$enable_tools" != xno -a "x$with_gettextpo" = xyes then @@ -2005,14 +2004,15 @@ EXTRACFLAGS="-Wall -pipe" dnl Check for some compiler flags - WINE_TRY_CFLAGS([-fcf-protection=none]) - WINE_TRY_CFLAGS([-fno-stack-protector]) - WINE_TRY_CFLAGS([-fno-strict-aliasing]) - WINE_TRY_CFLAGS([-fexcess-precision=standard],[AC_SUBST(EXCESS_PRECISION_CFLAGS,"-fexcess-precision=standard")]) dnl clang needs to be told to fail on unknown options saved_CFLAGS=$CFLAGS WINE_TRY_CFLAGS([-Werror=unknown-warning-option],[CFLAGS="$CFLAGS -Werror=unknown-warning-option"]) WINE_TRY_CFLAGS([-Werror=unused-command-line-argument],[CFLAGS="$CFLAGS -Werror=unused-command-line-argument"]) + WINE_TRY_CFLAGS([-Werror=ignored-optimization-argument],[CFLAGS="$CFLAGS -Werror=ignored-optimization-argument"]) + WINE_TRY_CFLAGS([-fcf-protection=none]) + WINE_TRY_CFLAGS([-fno-stack-protector]) + WINE_TRY_CFLAGS([-fno-strict-aliasing]) + WINE_TRY_CFLAGS([-fexcess-precision=standard],[AC_SUBST(EXCESS_PRECISION_CFLAGS,"-fexcess-precision=standard")]) WINE_TRY_CFLAGS([-Wdeclaration-after-statement]) WINE_TRY_CFLAGS([-Wempty-body]) WINE_TRY_CFLAGS([-Wignored-qualifiers]) @@ -2134,7 +2134,6 @@ __res_get_state \ __res_getservers \ _spawnvp \ - dlopen \ epoll_create \ ffs \ finitef \ @@ -2182,10 +2181,7 @@ CFLAGS="$ac_save_CFLAGS" dnl Check for -ldl -if test "$ac_cv_func_dlopen" = no -then - AC_CHECK_LIB(dl,dlopen,[AC_DEFINE(HAVE_DLOPEN,1) AC_SUBST(DL_LIBS,"-ldl")]) -fi +AC_SEARCH_LIBS(dlopen, dl) WINE_CHECK_LIB_FUNCS(dladdr,[$DL_LIBS]) dnl Check for -lpoll for Mac OS X/Darwin @@ -2313,14 +2309,6 @@ #include #endif]) -AC_CHECK_TYPES([struct r_debug, struct link_map],,, -[#ifdef HAVE_LINK_H -#include -#endif -#ifdef HAVE_SYS_LINK_H -#include -#endif]) - AC_CHECK_MEMBERS([struct ff_effect.direction],,, [#ifdef HAVE_LINUX_INPUT_H #include @@ -3223,6 +3211,7 @@ WINE_CONFIG_MAKEFILE(dlls/dsquery) WINE_CONFIG_MAKEFILE(dlls/dssenh) WINE_CONFIG_MAKEFILE(dlls/dssenh/tests) +WINE_CONFIG_MAKEFILE(dlls/dsuiext) WINE_CONFIG_MAKEFILE(dlls/dswave) WINE_CONFIG_MAKEFILE(dlls/dswave/tests) WINE_CONFIG_MAKEFILE(dlls/dwmapi) diff -Nru wine-development-5.5/debian/changelog wine-development-5.6/debian/changelog --- wine-development-5.5/debian/changelog 2020-06-19 12:36:59.000000000 +0000 +++ wine-development-5.6/debian/changelog 2021-02-16 22:24:32.000000000 +0000 @@ -1,9 +1,54 @@ -wine-development (5.5-5ubuntu1) groovy; urgency=low +wine-development (5.6-2) unstable; urgency=medium - * Merge from Debian unstable. Remaining changes: - - Don't throw erros on new clang errors + * Fix lintian manpage warnings. + * Update watch file to version 4. + * Update standards version to 4.5.1.1. + * Fix zlib related build failures on arm (closes: #980488). + * Add mistakenly dropped dlopen recommendations (closes: #980307). + - Thank to Jens Reyer. + + -- Michael Gilbert Tue, 16 Feb 2021 22:24:32 +0000 + +wine-development (5.6-1) unstable; urgency=medium + + * New upstream release 5.6, released Apr 10, 2020. + - Still more Media Foundation work. + - Improvements to Active Directory LDAP support. + - A few more modules converted to PE. + - Improvements to gdb proxy mode. + - Various bug fixes. + * Support building with vulkan 1.2.162. + + -- Michael Gilbert Tue, 16 Feb 2021 03:40:53 +0000 + +wine-development (5.5-9) unstable; urgency=medium + + * Build with -Wno-format on 64-bit architectures. + * Work around another strcpy array bounds warning. + * Use dh_makeshlibs -n to avoid unnecessary calls to ldconfig. + + -- Michael Gilbert Sun, 25 Oct 2020 19:40:26 +0000 + +wine-development (5.5-8) unstable; urgency=medium + + * Work around strcpy array bounds warning (closes: #966847). + + -- Michael Gilbert Mon, 19 Oct 2020 05:51:08 +0000 + +wine-development (5.5-7) unstable; urgency=medium - -- Gianfranco Costamagna Fri, 19 Jun 2020 14:36:59 +0200 + * Fix wine.desktop installation. + * Add libz-mingw-w64-dev to the build dependencies. + + -- Michael Gilbert Mon, 19 Oct 2020 02:31:30 +0000 + +wine-development (5.5-6) unstable; urgency=medium + + * Link against libz-mingw-w64. + * Move nls files to the arch-independent package. + * Use dh_makeshlibs -X to avoid unnecessary calls to ldconfig. + + -- Michael Gilbert Sun, 18 Oct 2020 22:41:51 +0000 wine-development (5.5-5) unstable; urgency=medium @@ -13,13 +58,6 @@ -- Michael Gilbert Sat, 13 Jun 2020 22:58:54 +0000 -wine-development (5.5-4ubuntu1) groovy; urgency=low - - * Merge from Debian unstable. Remaining changes: - - Don't throw erros on new clang errors - - -- Gianfranco Costamagna Thu, 11 Jun 2020 18:07:51 +0200 - wine-development (5.5-4) unstable; urgency=medium * Support building with vulkan 1.2.135. @@ -28,14 +66,6 @@ -- Michael Gilbert Thu, 11 Jun 2020 00:39:51 +0000 -wine-development (5.5-3ubuntu1) focal; urgency=medium - - * Merge from Debian unstable. Remaining changes: - - Don't throw erros on new clang errors - * Fix build for arm platforms (Closes: #956028) - - -- Gianfranco Costamagna Mon, 06 Apr 2020 11:28:53 +0200 - wine-development (5.5-3) unstable; urgency=medium * Drop libsane from the build dependencies. @@ -44,13 +74,6 @@ -- Michael Gilbert Thu, 02 Apr 2020 22:32:21 +0000 -wine-development (5.5-2ubuntu1) focal; urgency=medium - - * Merge from Debian unstable. Remaining changes: - - Don't throw erros on new clang errors - - -- Gianfranco Costamagna Wed, 01 Apr 2020 22:19:43 +0200 - wine-development (5.5-2) unstable; urgency=medium * Remove Built-Using fields. @@ -59,13 +82,6 @@ -- Michael Gilbert Tue, 31 Mar 2020 23:07:21 +0000 -wine-development (5.5-1ubuntu1) focal; urgency=low - - * Merge from Debian unstable. Remaining changes: - - Don't throw erros on new clang errors - - -- Gianfranco Costamagna Tue, 31 Mar 2020 13:01:53 +0200 - wine-development (5.5-1) unstable; urgency=medium * New upstream release 5.5, released Mar 27, 2020. @@ -78,12 +94,6 @@ -- Michael Gilbert Mon, 30 Mar 2020 02:48:49 +0000 -wine-development (5.4-1ubuntu2) focal; urgency=medium - - * Don't throw erros on new clang errors - - -- Gianfranco Costamagna Tue, 24 Mar 2020 00:00:43 +0100 - wine-development (5.4-1) unstable; urgency=medium * New upstream release 5.4, released Mar 13, 2020. @@ -99,24 +109,6 @@ wine-development (5.3-1) unstable; urgency=medium - * New upstream release 5.3, released Feb 28, 2020. - - More work towards Ucrtbase runtime support. - - Full support for Unicode normalization. - - Improvements in Shell Folders handling. - - Various bug fixes. - * Drop disable/folder-reset.patch, fixed upstream. - * Support building with unicode-data 13 (closes: #954114). - - -- Michael Gilbert Tue, 17 Mar 2020 23:42:09 +0000 - -wine-development (5.2-3ubuntu1) focal; urgency=medium - - * Don't throw erros on new clang errors - - -- Gianfranco Costamagna Thu, 12 Mar 2020 20:11:58 +0100 - -wine-development (5.3-1) unstable; urgency=medium - * New upstream release 5.3, released Feb 28, 2020. - More work towards Ucrtbase runtime support. - Full support for Unicode normalization. diff -Nru wine-development-5.5/debian/clean wine-development-5.6/debian/clean --- wine-development-5.5/debian/clean 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/clean 2021-02-16 03:44:41.000000000 +0000 @@ -11,14 +11,6 @@ include/config.h include/config.h.in -# zlib -dlls/wininet/zlib.h -dlls/wininet/inflate.c -dlls/cabinet/zlib.h -dlls/cabinet/deflate.c -dlls/opcservices/zlib.h -dlls/opcservices/deflate.c - # automatically generated files dlls/dsound/fir.h dlls/*/tests/generated.c @@ -66,6 +58,7 @@ dlls/vulkan-1/vulkan-1.spec dlls/winevulkan/vulkan_thunks.h dlls/winevulkan/vulkan_thunks.c +dlls/winevulkan/winevulkan.json dlls/winevulkan/winevulkan.spec # automatically generated icon files diff -Nru wine-development-5.5/debian/control wine-development-5.6/debian/control --- wine-development-5.5/debian/control 2020-06-19 12:36:59.000000000 +0000 +++ wine-development-5.6/debian/control 2021-02-16 22:24:32.000000000 +0000 @@ -12,10 +12,11 @@ Standards-Version: 4.5.0 Rules-Requires-Root: no Build-Depends: - debhelper (>= 9~), + debhelper (>= 9.20160403~), clang [arm64], gcc-mingw-w64-i686 [i386], gcc-mingw-w64-x86-64 [amd64], + libz-mingw-w64-dev, lzma, flex, bison, @@ -103,8 +104,10 @@ dosbox (>= 0.74-4.2~), exe-thumbnailer | kio-extras, Breaks: + libwine-development (<< 5.5-6), wine-stable (<< 3.0.1ubuntu1~), Replaces: + libwine-development (<< 5.5-6), wine-stable (<< 3.0.1ubuntu1~), Provides: wine, @@ -224,6 +227,7 @@ ${misc:Depends}, ${dlopen:Depends}, ${shlibs:Depends}, + libz-mingw-w64, Recommends: ${dlopen:Recommends}, libgl1-mesa-dri, diff -Nru wine-development-5.5/debian/control.in wine-development-5.6/debian/control.in --- wine-development-5.5/debian/control.in 2020-06-19 09:19:13.000000000 +0000 +++ wine-development-5.6/debian/control.in 2021-02-15 21:20:44.000000000 +0000 @@ -12,10 +12,11 @@ Standards-Version: 4.5.0 Rules-Requires-Root: no Build-Depends: - debhelper (>= 9~), + debhelper (>= 9.20160403~), clang [arm64], gcc-mingw-w64-i686 [i386], gcc-mingw-w64-x86-64 [amd64], + libz-mingw-w64-dev, lzma, flex, bison, @@ -103,8 +104,10 @@ dosbox (>= 0.74-4.2~), exe-thumbnailer | kio-extras, Breaks: + libwineVERSION (<< 5.5-6), wine-stable (<< 3.0.1ubuntu1~), Replaces: + libwineVERSION (<< 5.5-6), wine-stable (<< 3.0.1ubuntu1~), Provides: wine, @@ -224,6 +227,7 @@ ${misc:Depends}, ${dlopen:Depends}, ${shlibs:Depends}, + libz-mingw-w64, Recommends: ${dlopen:Recommends}, libgl1-mesa-dri, diff -Nru wine-development-5.5/debian/copyright wine-development-5.6/debian/copyright --- wine-development-5.5/debian/copyright 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/copyright 2021-02-16 03:44:41.000000000 +0000 @@ -21,6 +21,7 @@ dlls/vulkan-1/vulkan-1.spec dlls/winevulkan/vulkan_thunks.h dlls/winevulkan/vulkan_thunks.c + dlls/winevulkan/winevulkan.json dlls/winevulkan/winevulkan.spec dlls/gdi32/direction.c dlls/gdi32/vertical.c @@ -42,12 +43,6 @@ dlls/opengl32/opengl_ext.c dlls/opengl32/opengl_norm.c dlls/opengl32/opengl32.spec - dlls/cabinet/zlib.h - dlls/cabinet/deflate.c - dlls/wininet/zlib.h - dlls/wininet/inflate.c - dlls/opcservices/zlib.h - dlls/opcservices/deflate.c dlls/*/tests/generated.c Upstream-Name: Wine diff -Nru wine-development-5.5/debian/libwineVERSION.dirs wine-development-5.6/debian/libwineVERSION.dirs --- wine-development-5.5/debian/libwineVERSION.dirs 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/debian/libwineVERSION.dirs 2021-02-15 21:20:44.000000000 +0000 @@ -0,0 +1,2 @@ +/usr/lib/i386-linux-gnu/wineVERSION +/usr/lib/x86_64-linux-gnu/wineVERSION diff -Nru wine-development-5.5/debian/libwineVERSION.install wine-development-5.6/debian/libwineVERSION.install --- wine-development-5.5/debian/libwineVERSION.install 2020-06-19 09:19:13.000000000 +0000 +++ wine-development-5.6/debian/libwineVERSION.install 2021-02-15 21:20:44.000000000 +0000 @@ -10,6 +10,3 @@ # configuration files debian/tmp/usr/share/*/wine/* - -# language support files -debian/tmp/usr/share/*/wine/nls/* diff -Nru wine-development-5.5/debian/libwineVERSION.lintian-overrides wine-development-5.6/debian/libwineVERSION.lintian-overrides --- wine-development-5.5/debian/libwineVERSION.lintian-overrides 2020-06-19 09:19:13.000000000 +0000 +++ wine-development-5.6/debian/libwineVERSION.lintian-overrides 2021-02-15 21:20:44.000000000 +0000 @@ -1,5 +1,3 @@ -# debhelper bug causes these -package-has-unnecessary-activation-of-ldconfig-trigger # unfortunately wine doesn't do fortify hardening hardening-no-fortify-functions # incorrectly flagged diff -Nru wine-development-5.5/debian/libwineVERSION.postinst wine-development-5.6/debian/libwineVERSION.postinst --- wine-development-5.5/debian/libwineVERSION.postinst 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/debian/libwineVERSION.postinst 2021-02-15 21:20:44.000000000 +0000 @@ -0,0 +1,16 @@ +#!/bin/sh + +set -e + +if [ "$1" = "configure" ] || [ "$1" = "triggered" ] || [ "$1" = "upgrade" ] ; then + in=/usr/DEB_HOST_GNU_CPU-w64-mingw32/lib/zlib*.dll + out=/usr/lib/DEB_HOST_MULTIARCH/wineVERSION/$(basename $in) + + head -c 64 $in > $out + printf "%b" "Wine builtin DLL" >> $out + printf "%b" "\0\0\0\0\0\0\0\0" >> $out + printf "%b" "\0\0\0\0\0\0\0\0" >> $out + tail -c +97 $in >> $out +fi + +#DEBHELPER# diff -Nru wine-development-5.5/debian/libwineVERSION.prerm wine-development-5.6/debian/libwineVERSION.prerm --- wine-development-5.5/debian/libwineVERSION.prerm 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/debian/libwineVERSION.prerm 2021-02-15 21:20:44.000000000 +0000 @@ -0,0 +1,9 @@ +#!/bin/sh + +set -e + +if [ "$1" = "remove" ] ; then + rm -f /usr/lib/DEB_HOST_MULTIARCH/wineVERSION/zlib*.dll +fi + +#DEBHELPER# diff -Nru wine-development-5.5/debian/libwineVERSION.triggers wine-development-5.6/debian/libwineVERSION.triggers --- wine-development-5.5/debian/libwineVERSION.triggers 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/debian/libwineVERSION.triggers 2021-02-15 21:20:44.000000000 +0000 @@ -0,0 +1,2 @@ +interest-noawait /usr/i686-w64-mingw32/lib +interest-noawait /usr/x86_64-w64-mingw32/lib diff -Nru wine-development-5.5/debian/patches/arm64.patch wine-development-5.6/debian/patches/arm64.patch --- wine-development-5.5/debian/patches/arm64.patch 2020-03-31 11:01:53.000000000 +0000 +++ wine-development-5.6/debian/patches/arm64.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ ---- wine-development-5.2.orig/dlls/dbghelp/Makefile.in -+++ wine-development-5.2/dlls/dbghelp/Makefile.in -@@ -2,6 +2,7 @@ MODULE = dbghelp.dll - IMPORTLIB = dbghelp - EXTRADEFS = -D_IMAGEHLP_SOURCE_ - DELAYIMPORTS = version -+CFLAGS += -Wno-misleading-indentation - EXTRAINCL = $(Z_CFLAGS) - EXTRALIBS = $(Z_LIBS) $(CORESERVICES_LIBS) $(COREFOUNDATION_LIBS) - ---- wine-development-5.2.orig/dlls/dsound/Makefile.in -+++ wine-development-5.2/dlls/dsound/Makefile.in -@@ -1,5 +1,6 @@ - MODULE = dsound.dll - IMPORTLIB = dsound -+CFLAGS += -Wno-implicit-int-float-conversion - IMPORTS = dxguid uuid winmm ole32 advapi32 user32 ucrtbase - - EXTRADLLFLAGS = -mno-cygwin ---- wine-development-5.2.orig/dlls/msdmo/Makefile.in -+++ wine-development-5.2/dlls/msdmo/Makefile.in -@@ -1,6 +1,7 @@ - MODULE = msdmo.dll - IMPORTLIB = msdmo - IMPORTS = dmoguids uuid ole32 user32 advapi32 -+CFLAGS += -Wno-sizeof-array-div - - EXTRADLLFLAGS = -mno-cygwin - ---- wine-development-5.2.orig/dlls/kernelbase/Makefile.in 2020-03-30 11:19:47.000000000 +0200 -+++ wine-development-5.2/dlls/kernelbase/Makefile.in 2020-03-31 14:04:50.922976338 +0200 -@@ -1,6 +1,7 @@ - MODULE = kernelbase.dll - IMPORTLIB = kernelbase - IMPORTS = uuid ntdll winecrt0 -+CFLAGS += -Wno-array-bounds - EXTRADLLFLAGS = -nodefaultlibs -nostartfiles -mno-cygwin -Wl,--image-base,0x7b000000 - - C_SRCS = \ ---- wine-development-5.2.orig/dlls/ntoskrnl.exe/Makefile.in 2020-03-31 15:35:54.238661128 +0200 -+++ wine-development-5.2/dlls/ntoskrnl.exe/Makefile.in 2020-03-31 15:34:59.190755200 +0200 -@@ -2,6 +2,7 @@ MODULE = ntoskrnl.exe - IMPORTLIB = ntoskrnl - IMPORTS = advapi32 hal msvcrt - DELAYIMPORTS = setupapi user32 -+CFLAGS += -Wno-array-bounds - - EXTRADLLFLAGS = -mno-cygwin - diff -Nru wine-development-5.5/debian/patches/binary-indep/manpages.patch wine-development-5.6/debian/patches/binary-indep/manpages.patch --- wine-development-5.5/debian/patches/binary-indep/manpages.patch 2020-06-19 09:19:15.000000000 +0000 +++ wine-development-5.6/debian/patches/binary-indep/manpages.patch 2021-02-15 23:11:15.000000000 +0000 @@ -3,7 +3,7 @@ --- a/tools/makedep.c +++ b/tools/makedep.c -@@ -3889,6 +3889,7 @@ static void output_sources( struct makef +@@ -3882,6 +3882,7 @@ static void output_sources( struct makef output_filenames_obj_dir( make, make->all_targets ); output( "\n" ); } diff -Nru wine-development-5.5/debian/patches/binary-indep/sfnt2fon.patch wine-development-5.6/debian/patches/binary-indep/sfnt2fon.patch --- wine-development-5.5/debian/patches/binary-indep/sfnt2fon.patch 2020-06-19 09:19:15.000000000 +0000 +++ wine-development-5.6/debian/patches/binary-indep/sfnt2fon.patch 2021-02-15 23:11:15.000000000 +0000 @@ -3,7 +3,7 @@ --- a/configure.ac +++ b/configure.ac -@@ -3880,7 +3880,6 @@ WINE_CONFIG_MAKEFILE(dlls/xmllite/tests) +@@ -3869,7 +3869,6 @@ WINE_CONFIG_MAKEFILE(dlls/xmllite/tests) WINE_CONFIG_MAKEFILE(dlls/xolehlp) WINE_CONFIG_MAKEFILE(dlls/xpsprint) WINE_CONFIG_MAKEFILE(dlls/xpssvcs) @@ -11,7 +11,7 @@ WINE_CONFIG_MAKEFILE(include) WINE_CONFIG_MAKEFILE(libs/port) WINE_CONFIG_MAKEFILE(libs/wine) -@@ -3999,7 +3998,6 @@ WINE_CONFIG_MAKEFILE(programs/xcopy) +@@ -3988,7 +3987,6 @@ WINE_CONFIG_MAKEFILE(programs/xcopy) WINE_CONFIG_MAKEFILE(programs/xcopy/tests) WINE_CONFIG_MAKEFILE(server) WINE_CONFIG_MAKEFILE(tools,,[test "x$enable_tools" = xno]) diff -Nru wine-development-5.5/debian/patches/debianization/manpages.patch wine-development-5.6/debian/patches/debianization/manpages.patch --- wine-development-5.5/debian/patches/debianization/manpages.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/debian/patches/debianization/manpages.patch 2021-02-16 22:24:32.000000000 +0000 @@ -0,0 +1,26 @@ +description: fix lintian manpage warnings +author: Michael Gilbert + +--- a/programs/msiexec/msiexec.man.in ++++ b/programs/msiexec/msiexec.man.in +@@ -23,7 +23,7 @@ Same as \fB/x\fR. + .IP \fB/f\fR\ \ + \fR[\fBp\fR|\fBo\fR|\fBe\fR|\fBd\fR|\fBc\fR|\fBa\fR|\fBu\fR|\fBm\fR|\fBs\fR|\fBv\fR]\ \ + \fR{\fIpackage\fR|\fIproductcode\fR} +-Repair an installation. Default options are \'omus\' ++Repair an installation. Default options are 'omus' + .IP "\fBp\fR" + Reinstall the file if it is missing. + .IP "\fBo\fR" +@@ -64,9 +64,9 @@ Shows a full UI. + .IP \fB/l\fR[\fB*\fR]\ + [\fBi\fR|\fBw\fR|\fBe\fR|\fBa\fR|\fBr\fR|\fBu\fR|\fBc\fR|\fBm\fR|\fBo\fR|\fBp\fR|\fBv\fR]\ + [\fB+\fR|\fB!\fR]\ {\fIlogfile\fR} +-Enable logging to \fIlogfile\fR. Defaults are \'iwearmo\'. ++Enable logging to \fIlogfile\fR. Defaults are 'iwearmo'. + .IP "\fB*\fR" +-Enable all logging options except \'v\' and \'x\'. ++Enable all logging options except 'v' and 'x'. + .IP "\fBi\fR" + Log status messages. + .IP "\fBw\fR" diff -Nru wine-development-5.5/debian/patches/debianization/mingw.patch wine-development-5.6/debian/patches/debianization/mingw.patch --- wine-development-5.5/debian/patches/debianization/mingw.patch 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/patches/debianization/mingw.patch 2021-02-15 23:11:15.000000000 +0000 @@ -3,7 +3,7 @@ --- a/configure.ac +++ b/configure.ac -@@ -1026,12 +1026,11 @@ then +@@ -1023,12 +1023,11 @@ then then ac_save_CC="$CC" saved_CFLAGS=$CFLAGS diff -Nru wine-development-5.5/debian/patches/debianization/version-string.patch wine-development-5.6/debian/patches/debianization/version-string.patch --- wine-development-5.5/debian/patches/debianization/version-string.patch 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/patches/debianization/version-string.patch 2021-02-15 21:20:44.000000000 +0000 @@ -9,7 +9,7 @@ version.c: dummy - version=`(GIT_DIR=$(top_srcdir)/.git git describe HEAD 2>/dev/null || echo "wine-$(PACKAGE_VERSION)") | sed -n -e '$$s/\(.*\)/const char wine_build[] = "\1";/p'` && (echo $$version | cmp -s - $@) || echo $$version >$@ || (rm -f $@ && exit 1) -+ version=`(GIT_DIR=$(top_srcdir)/.git git describe HEAD 2>/dev/null || echo "wine-$(PACKAGE_VERSION)") | sed -n -e '$$s/\(.*\)/const char wine_build[] = "\1 ($(VENDOR))";/p'` && (echo $$version | cmp -s - $@) || echo $$version >$@ || ($(RM) $@ && exit 1) ++ version=`(echo "wine-$(PACKAGE_VERSION)") | sed -n -e '$$s/\(.*\)/const char wine_build[] = "\1 ($(VENDOR))";/p'` && (echo $$version | cmp -s - $@) || echo $$version >$@ || ($(RM) $@ && exit 1) dummy: .PHONY: dummy diff -Nru wine-development-5.5/debian/patches/debianization/wineapploader.patch wine-development-5.6/debian/patches/debianization/wineapploader.patch --- wine-development-5.5/debian/patches/debianization/wineapploader.patch 2020-06-19 09:19:15.000000000 +0000 +++ wine-development-5.6/debian/patches/debianization/wineapploader.patch 2021-02-15 23:11:15.000000000 +0000 @@ -3,7 +3,7 @@ --- a/tools/makedep.c +++ b/tools/makedep.c -@@ -3353,11 +3353,6 @@ static void output_module( struct makefi +@@ -3354,11 +3354,6 @@ static void output_module( struct makefi if (spec_file) output_man_pages( make ); diff -Nru wine-development-5.5/debian/patches/disable/po-modifications.patch wine-development-5.6/debian/patches/disable/po-modifications.patch --- wine-development-5.5/debian/patches/disable/po-modifications.patch 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/patches/disable/po-modifications.patch 2021-02-15 23:11:15.000000000 +0000 @@ -3,7 +3,7 @@ --- a/tools/makedep.c +++ b/tools/makedep.c -@@ -2635,11 +2635,13 @@ static void output_po_files( const struc +@@ -2629,11 +2629,13 @@ static void output_po_files( const struc } if (linguas.count) { diff -Nru wine-development-5.5/debian/patches/fixes/arm.patch wine-development-5.6/debian/patches/fixes/arm.patch --- wine-development-5.5/debian/patches/fixes/arm.patch 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/patches/fixes/arm.patch 2021-02-15 23:11:15.000000000 +0000 @@ -3,7 +3,7 @@ --- a/server/trace.c +++ b/server/trace.c -@@ -592,12 +592,14 @@ static void dump_varargs_context( const +@@ -598,12 +598,14 @@ static void dump_varargs_context( const ctx.fp.i386_regs.err_off, ctx.fp.i386_regs.err_sel ); fprintf( stderr, ",fp.data_off=%08x,fp.data_sel=%08x,fp.cr0npx=%08x", ctx.fp.i386_regs.data_off, ctx.fp.i386_regs.data_sel, ctx.fp.i386_regs.cr0npx ); diff -Nru wine-development-5.5/debian/patches/fixes/glibc2.30.patch wine-development-5.6/debian/patches/fixes/glibc2.30.patch --- wine-development-5.5/debian/patches/fixes/glibc2.30.patch 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/patches/fixes/glibc2.30.patch 2021-02-15 23:11:15.000000000 +0000 @@ -4,7 +4,7 @@ --- a/configure.ac +++ b/configure.ac -@@ -549,7 +549,7 @@ AC_HEADER_STAT() +@@ -546,7 +546,7 @@ AC_HEADER_STAT() dnl **** Checks for headers that depend on other ones **** diff -Nru wine-development-5.5/debian/patches/fixes/gstbase.patch wine-development-5.6/debian/patches/fixes/gstbase.patch --- wine-development-5.5/debian/patches/fixes/gstbase.patch 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/patches/fixes/gstbase.patch 2021-02-15 23:11:15.000000000 +0000 @@ -3,7 +3,7 @@ --- a/configure.ac +++ b/configure.ac -@@ -1625,7 +1625,7 @@ WINE_NOTICE_WITH(pulse, [test -z "$PULSE +@@ -1624,7 +1624,7 @@ WINE_NOTICE_WITH(pulse, [test -z "$PULSE dnl **** Check for gstreamer **** if test "x$with_gstreamer" != "xno" then @@ -12,7 +12,7 @@ [ac_gst_incl="" for i in $GSTREAMER_CFLAGS do -@@ -1633,6 +1633,7 @@ then +@@ -1632,6 +1632,7 @@ then -I*) ac_gst_incl="$ac_gst_incl $i";; esac done diff -Nru wine-development-5.5/debian/patches/generate/icons.patch wine-development-5.6/debian/patches/generate/icons.patch --- wine-development-5.5/debian/patches/generate/icons.patch 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/patches/generate/icons.patch 2021-02-15 23:11:15.000000000 +0000 @@ -3,7 +3,7 @@ --- a/tools/makedep.c +++ b/tools/makedep.c -@@ -1564,6 +1564,9 @@ static struct file *open_include_file( c +@@ -1556,6 +1556,9 @@ static struct file *open_include_file( c if (pFile->type == INCL_SYSTEM) return NULL; /* ignore system files we cannot find */ @@ -13,7 +13,7 @@ /* try in src file directory */ if ((file = open_file_same_dir( pFile->included_by, pFile->name, &pFile->filename ))) return file; -@@ -2910,6 +2913,14 @@ static void output_source_svg( struct ma +@@ -2904,6 +2907,14 @@ static void output_source_svg( struct ma if (images[i]) { @@ -38,7 +38,7 @@ +SVG_SRCS = regedit.svg folderopen.svg folder.svg computer.svg string.svg bin.svg --- a/dlls/display.drv16/Makefile.in +++ b/dlls/display.drv16/Makefile.in -@@ -6,3 +6,5 @@ EXTRADLLFLAGS = -m16 -mno-cygwin +@@ -6,3 +6,5 @@ EXTRADLLFLAGS = -m16 C_SRCS = display.c RC_SRCS = display.rc diff -Nru wine-development-5.5/debian/patches/generate/request.patch wine-development-5.6/debian/patches/generate/request.patch --- wine-development-5.5/debian/patches/generate/request.patch 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/patches/generate/request.patch 2021-02-15 23:11:15.000000000 +0000 @@ -3,7 +3,7 @@ --- a/tools/make_requests +++ b/tools/make_requests -@@ -272,16 +272,11 @@ sub PARSE_REQUESTS() +@@ -273,16 +273,11 @@ sub PARSE_REQUESTS() } ### Retrieve the server protocol version from the existing server_protocol.h file @@ -18,11 +18,11 @@ - if (/^\#define SERVER_PROTOCOL_VERSION (\d+)/) { $protocol = $1; last; } - } - close SERVER_PROT; -+ my $protocol = 595; ++ my $protocol = 596; return $protocol; } -@@ -459,7 +454,7 @@ foreach my $err (sort keys %errors) +@@ -460,7 +455,7 @@ foreach my $err (sort keys %errors) push @trace_lines, " { NULL, 0 }\n"; push @trace_lines, "};\n"; @@ -31,7 +31,7 @@ "### make_requests begin ###", "### make_requests end ###", @trace_lines ); -@@ -486,7 +481,7 @@ foreach my $type (sort keys %formats) +@@ -487,7 +482,7 @@ foreach my $type (sort keys %formats) push @request_lines, @asserts; push @request_lines, "\n#endif /* WANT_REQUEST_HANDLERS */\n"; @@ -42,7 +42,7 @@ @request_lines ); --- a/server/request.h +++ b/server/request.h -@@ -109,9 +109,9 @@ static inline void set_reply_data_ptr( v +@@ -115,9 +115,9 @@ static inline void set_reply_data_ptr( v current->reply_data = data; } @@ -54,7 +54,7 @@ DECL_HANDLER(new_process); DECL_HANDLER(exec_process); -@@ -2447,9 +2447,8 @@ C_ASSERT( sizeof(struct suspend_process_ +@@ -2453,9 +2453,8 @@ C_ASSERT( sizeof(struct suspend_process_ C_ASSERT( FIELD_OFFSET(struct resume_process_request, handle) == 12 ); C_ASSERT( sizeof(struct resume_process_request) == 16 ); @@ -68,7 +68,7 @@ #endif /* __WINE_SERVER_REQUEST_H */ --- a/server/trace.c +++ b/server/trace.c -@@ -1237,8 +1237,9 @@ static void dump_varargs_handle_infos( c +@@ -1243,8 +1243,9 @@ static void dump_varargs_handle_infos( c typedef void (*dump_func)( const void *req ); @@ -80,7 +80,7 @@ static void dump_new_process_request( const struct new_process_request *req ) { -@@ -5682,8 +5683,7 @@ static const struct +@@ -5687,8 +5688,7 @@ static const struct { NULL, 0 } }; diff -Nru wine-development-5.5/debian/patches/generate/vulkan162.patch wine-development-5.6/debian/patches/generate/vulkan162.patch --- wine-development-5.5/debian/patches/generate/vulkan162.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/debian/patches/generate/vulkan162.patch 2021-02-16 03:44:41.000000000 +0000 @@ -0,0 +1,53 @@ +description: support vulkan 1.2.162 +author: Michael Gilbert + +--- a/dlls/winevulkan/make_vulkan ++++ b/dlls/winevulkan/make_vulkan +@@ -64,7 +64,7 @@ from enum import Enum + LOGGER = logging.Logger("vulkan") + LOGGER.addHandler(logging.StreamHandler()) + +-VK_XML_VERSION = "1.2.134" ++VK_XML_VERSION = "1.2.162" + WINE_VK_VERSION = (1, 2) + + # Filenames to create. +@@ -123,6 +123,10 @@ BLACKLISTED_EXTENSIONS = [ + # Deprecated extensions + "VK_NV_external_memory_capabilities", + "VK_NV_external_memory_win32", ++ ++ # Vulkan extensions that are not yet handled by wine. ++ "VK_KHR_ray_tracing", ++ "VK_EXT_device_memory_report", + ] + + # The Vulkan loader provides entry-points for core functionality and important +@@ -1166,6 +1170,8 @@ class VkMember(object): + return False + elif self.type in ["uint64_t", "VkDeviceSize"]: + return True ++ elif self.type in ["uint64_t", "VkDeviceAddress"]: ++ return True + elif self.is_struct(): + struct = self.type_info["data"] + return struct.needs_alignment() +@@ -1350,6 +1356,9 @@ class VkParam(object): + elif self.type in ["uint64_t", "VkDeviceSize"]: + self.format_str = "0x%s" + self.format_conv = "wine_dbgstr_longlong({0})" ++ elif self.type in ["uint64_t", "VkDeviceAddress"]: ++ self.format_str = "0x%s" ++ self.format_conv = "wine_dbgstr_longlong({0})" + elif self.type == "HANDLE": + self.format_str = "%p" + elif self.type in ["VisualID", "xcb_visualid_t", "RROutput"]: +@@ -1538,6 +1547,8 @@ class VkParam(object): + return "long" + if self.type in ["uint64_t", "VkDeviceSize"]: + return "int64" ++ if self.type in ["uint64_t", "VkDeviceAddress"]: ++ return "int64" + + LOGGER.error("Unhandled spec conversion for type: {0}".format(self.type)) + diff -Nru wine-development-5.5/debian/patches/generate/vulkan.patch wine-development-5.6/debian/patches/generate/vulkan.patch --- wine-development-5.5/debian/patches/generate/vulkan.patch 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/patches/generate/vulkan.patch 2021-02-16 03:44:41.000000000 +0000 @@ -3,7 +3,7 @@ --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan -@@ -249,7 +249,10 @@ class VkBaseType(object): +@@ -253,7 +253,10 @@ class VkBaseType(object): def definition(self): # Definition is similar for alias or non-alias as type # is already set to alias. @@ -15,7 +15,7 @@ def is_alias(self): return bool(self.alias) -@@ -388,7 +391,9 @@ class VkEnum(object): +@@ -392,7 +395,9 @@ class VkEnum(object): if not value.is_alias() and v.value == value.value: LOGGER.debug("Adding duplicate enum value {0} to {1}".format(v, self.name)) return @@ -26,7 +26,25 @@ def definition(self): if self.is_alias(): -@@ -1251,7 +1256,7 @@ class VkParam(object): +@@ -1027,7 +1032,7 @@ class VkMember(object): + if self.needs_conversion(): + if self.is_dynamic_array(): + if direction == Direction.OUTPUT: +- LOGGER.warn("TODO: implement copying of returnedonly dynamic array for {0}.{1}".format(self.type, self.name)) ++ LOGGER.warning("TODO: implement copying of returnedonly dynamic array for {0}.{1}".format(self.type, self.name)) + else: + # Array length is either a variable name (string) or an int. + count = self.dyn_array_len if isinstance(self.dyn_array_len, int) else "{0}{1}".format(input, self.dyn_array_len) +@@ -1039,7 +1044,7 @@ class VkMember(object): + return "convert_{0}_static_array_host_to_win({2}{1}, {3}{1}, {4});\n".format(self.type, self.name, input, output, count) + else: + # Nothing needed this yet. +- LOGGER.warn("TODO: implement copying of static array for {0}.{1}".format(self.type, self.name)) ++ LOGGER.warning("TODO: implement copying of static array for {0}.{1}".format(self.type, self.name)) + else: + if direction == Direction.OUTPUT: + return "convert_{0}_host_to_win(&{2}{1}, &{3}{1});\n".format(self.type, self.name, input, output) +@@ -1255,7 +1260,7 @@ class VkParam(object): # Since we have parsed all types before hand, this should not happen. type_info = types.get(type_elem.text, None) if type_info is None: @@ -35,7 +53,16 @@ return VkParam(type_info, const=const, pointer=pointer, name=name, array_len=array_len, dyn_array_len=dyn_array_len) -@@ -2113,7 +2118,9 @@ class VkGenerator(object): +@@ -1351,7 +1356,7 @@ class VkParam(object): + # Don't care about Linux specific types. + self.format_str = "" + else: +- LOGGER.warn("Unhandled type: {0}".format(self.type_info)) ++ LOGGER.warning("Unhandled type: {0}".format(self.type_info)) + + def copy(self, direction): + if direction == Direction.INPUT: +@@ -2117,7 +2122,9 @@ class VkGenerator(object): def _generate_copyright(self, f, spec_file=False): f.write("# " if spec_file else "/* ") @@ -46,7 +73,7 @@ lines = ["", "This file is generated from Vulkan vk.xml file covered", "by the following copyright and permission notice:"] lines.extend([l.rstrip(" ") for l in self.registry.copyright.splitlines()]) -@@ -2553,6 +2560,7 @@ class VkRegistry(object): +@@ -2560,6 +2567,7 @@ class VkRegistry(object): self.funcpointers = None self.handles = None self.structs = None @@ -54,16 +81,7 @@ # We aggregate all types in here for cross-referencing. self.funcs = {} -@@ -2798,7 +2806,7 @@ class VkRegistry(object): - continue - - platform = ext.attrib.get("platform") -- if platform and platform != "win32": -+ if platform and platform != "win32" and ext_name != "VK_KHR_ray_tracing": - LOGGER.debug("Skipping extensions {0} for platform {1}".format(ext_name, platform)) - continue; - -@@ -2902,7 +2910,9 @@ class VkRegistry(object): +@@ -2909,7 +2917,9 @@ class VkRegistry(object): if type_info["category"] == "basetype": name = t.find("name").text @@ -74,7 +92,7 @@ basetype = VkBaseType(name, _type) base_types.append(basetype) type_info["data"] = basetype -@@ -3038,11 +3048,6 @@ def set_working_directory(): +@@ -3054,11 +3064,6 @@ def set_working_directory(): path = os.path.dirname(path) os.chdir(path) @@ -86,7 +104,7 @@ def main(): parser = argparse.ArgumentParser() parser.add_argument("-v", "--verbose", action="count", default=0, help="increase output verbosity") -@@ -3057,8 +3062,7 @@ def main(): +@@ -3073,8 +3078,7 @@ def main(): set_working_directory() @@ -98,7 +116,7 @@ --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c -@@ -5323,9 +5323,9 @@ const char *wined3d_debug_vkresult(VkRes +@@ -5326,9 +5326,9 @@ const char *wined3d_debug_vkresult(VkRes switch (vr) { #define WINED3D_TO_STR(x) case x: return #x diff -Nru wine-development-5.5/debian/patches/series wine-development-5.6/debian/patches/series --- wine-development-5.5/debian/patches/series 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/patches/series 2021-02-16 22:24:32.000000000 +0000 @@ -1,12 +1,15 @@ debianization/mingw.patch debianization/addons.patch debianization/makefile.patch +debianization/manpages.patch debianization/winebuild.patch debianization/wineapploader.patch debianization/version-string.patch debianization/winemenubuilder.patch debianization/wineserver-persistence.patch +system/zlib.patch + disable/fold.patch disable/tests.patch disable/line-wrapping.patch @@ -17,20 +20,13 @@ generate/icons.patch generate/opengl.patch generate/vulkan.patch +generate/vulkan162.patch generate/unicode.patch generate/request.patch binary-indep/manpages.patch binary-indep/sfnt2fon.patch -zlib/opc.patch -zlib/cabinet.patch -zlib/wininet0.patch -zlib/wininet1.patch -zlib/wininet2.patch -zlib/wininet3.patch -zlib/compile-link.patch - fixes/arm.patch fixes/arm64.patch fixes/gstbase.patch @@ -46,9 +42,8 @@ warnings/bison.patch warnings/array-bounds.patch warnings/format-overflow.patch +warnings/strcpy-overflow.patch warnings/incorrect-bounds.patch warnings/argument-promotion.patch warnings/discarded-qualifiers.patch -warnings/incompatible-pointers.patch warnings/uninitialized-variables.patch -arm64.patch diff -Nru wine-development-5.5/debian/patches/system/zlib.patch wine-development-5.6/debian/patches/system/zlib.patch --- wine-development-5.5/debian/patches/system/zlib.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/debian/patches/system/zlib.patch 2021-02-16 22:24:32.000000000 +0000 @@ -0,0 +1,166 @@ +description: build using system zlib +author: Michael Gilbert + +--- a/tools/makedep.c ++++ b/tools/makedep.c +@@ -1554,14 +1554,6 @@ static struct file *open_include_file( c + } + } + +- if (pFile->type == INCL_SYSTEM && pFile->use_msvcrt) +- { +- if (!strcmp( pFile->name, "stdarg.h" )) return NULL; +- fprintf( stderr, "%s:%d: error: system header %s cannot be used with msvcrt\n", +- pFile->included_by->file->name, pFile->included_line, pFile->name ); +- exit(1); +- } +- + if (pFile->type == INCL_SYSTEM) return NULL; /* ignore system files we cannot find */ + + /* try in src file directory */ +--- a/dlls/cabinet/Makefile.in ++++ b/dlls/cabinet/Makefile.in +@@ -1,11 +1,11 @@ + MODULE = cabinet.dll + IMPORTLIB = cabinet + ++CROSSLDFLAGS = -lz + EXTRADLLFLAGS = -mno-cygwin + + C_SRCS = \ + cabinet_main.c \ +- deflate.c \ + fci.c \ + fdi.c + +--- a/dlls/cabinet/fci.c ++++ b/dlls/cabinet/fci.c +@@ -30,6 +30,9 @@ There is still some work to be done: + + */ + ++#include "zlib.h" ++#undef FAR ++ + #include + #include + #include +@@ -42,7 +45,6 @@ There is still some work to be done: + #include "winerror.h" + #include "winternl.h" + #include "fci.h" +-#include "zlib.h" + #include "cabinet.h" + #include "wine/list.h" + #include "wine/debug.h" +--- a/dlls/opcservices/Makefile.in ++++ b/dlls/opcservices/Makefile.in +@@ -1,11 +1,11 @@ + MODULE = opcservices.dll + IMPORTS = uuid ole32 advapi32 urlmon xmllite oleaut32 + ++CROSSLDFLAGS = -lz + EXTRADLLFLAGS = -mno-cygwin + + C_SRCS = \ + compress.c \ +- deflate.c \ + factory.c \ + package.c \ + uri.c +--- a/dlls/opcservices/compress.c ++++ b/dlls/opcservices/compress.c +@@ -16,6 +16,9 @@ + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + ++#include "zlib.h" ++#undef FAR ++ + #define COBJMACROS + + #include +@@ -25,7 +28,6 @@ + #include "msopc.h" + + #include "opc_private.h" +-#include "zlib.h" + + #include "wine/debug.h" + #include "wine/heap.h" +--- a/dlls/wininet/http.c ++++ b/dlls/wininet/http.c +@@ -27,6 +27,9 @@ + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + ++#include "zlib.h" ++#undef FAR ++ + #include + + #include "winsock2.h" +@@ -53,7 +56,6 @@ + #include "winuser.h" + + #include "internet.h" +-#include "zlib.h" + #include "wine/debug.h" + #include "wine/exception.h" + +--- a/dlls/wininet/Makefile.in ++++ b/dlls/wininet/Makefile.in +@@ -4,6 +4,7 @@ IMPORTLIB = wininet + IMPORTS = mpr shlwapi shell32 user32 ws2_32 advapi32 + DELAYIMPORTS = secur32 crypt32 cryptui dhcpcsvc iphlpapi + ++CROSSLDFLAGS = -lz + EXTRADLLFLAGS = -mno-cygwin + + C_SRCS = \ +@@ -12,7 +13,6 @@ C_SRCS = \ + ftp.c \ + gopher.c \ + http.c \ +- inflate.c \ + internet.c \ + netconnection.c \ + urlcache.c \ +--- a/dlls/dbghelp/Makefile.in ++++ b/dlls/dbghelp/Makefile.in +@@ -3,6 +3,7 @@ IMPORTLIB = dbghelp + EXTRADEFS = -D_IMAGEHLP_SOURCE_ + DELAYIMPORTS = version + ++CROSSLDFLAGS = -lz + EXTRADLLFLAGS = -mno-cygwin + + C_SRCS = \ +@@ -16,7 +17,6 @@ C_SRCS = \ + dwarf.c \ + elf_module.c \ + image.c \ +- inflate.c \ + macho_module.c \ + minidump.c \ + module.c \ +--- a/dlls/dbghelp/dwarf.c ++++ b/dlls/dbghelp/dwarf.c +@@ -22,6 +22,9 @@ + + #define NONAMELESSUNION + ++#include "zlib.h" ++#undef FAR ++ + #include + #include + #include +@@ -39,7 +42,6 @@ + + #include "dbghelp_private.h" + #include "image_private.h" +-#include "zlib.h" + + #include "wine/debug.h" + diff -Nru wine-development-5.5/debian/patches/warnings/arm64-excess-precision.patch wine-development-5.6/debian/patches/warnings/arm64-excess-precision.patch --- wine-development-5.5/debian/patches/warnings/arm64-excess-precision.patch 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/patches/warnings/arm64-excess-precision.patch 2021-02-15 23:11:15.000000000 +0000 @@ -3,7 +3,7 @@ --- a/configure.ac +++ b/configure.ac -@@ -2009,6 +2009,11 @@ then +@@ -2013,6 +2013,11 @@ then WINE_TRY_CFLAGS([-fno-stack-protector]) WINE_TRY_CFLAGS([-fno-strict-aliasing]) WINE_TRY_CFLAGS([-fexcess-precision=standard],[AC_SUBST(EXCESS_PRECISION_CFLAGS,"-fexcess-precision=standard")]) @@ -12,6 +12,6 @@ + *aarch64*) EXCESS_PRECISION_CFLAGS="" ;; +esac + - dnl clang needs to be told to fail on unknown options - saved_CFLAGS=$CFLAGS - WINE_TRY_CFLAGS([-Werror=unknown-warning-option],[CFLAGS="$CFLAGS -Werror=unknown-warning-option"]) + WINE_TRY_CFLAGS([-Wdeclaration-after-statement]) + WINE_TRY_CFLAGS([-Wempty-body]) + WINE_TRY_CFLAGS([-Wignored-qualifiers]) diff -Nru wine-development-5.5/debian/patches/warnings/arm-messages.patch wine-development-5.6/debian/patches/warnings/arm-messages.patch --- wine-development-5.5/debian/patches/warnings/arm-messages.patch 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/patches/warnings/arm-messages.patch 2021-02-15 23:11:15.000000000 +0000 @@ -25,7 +25,7 @@ DWORD offset; --- a/dlls/rpcrt4/ndr_stubless.c +++ b/dlls/rpcrt4/ndr_stubless.c -@@ -1199,7 +1199,7 @@ __ASM_GLOBAL_FUNC( call_server_func, +@@ -1205,7 +1205,7 @@ __ASM_GLOBAL_FUNC( call_server_func, "ldp x29, x30, [sp], #16\n\t" "ret" ) #else diff -Nru wine-development-5.5/debian/patches/warnings/bison.patch wine-development-5.6/debian/patches/warnings/bison.patch --- wine-development-5.5/debian/patches/warnings/bison.patch 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/patches/warnings/bison.patch 2021-02-15 23:11:15.000000000 +0000 @@ -3,7 +3,7 @@ --- a/tools/makedep.c +++ b/tools/makedep.c -@@ -2670,7 +2670,7 @@ static void output_source_y( struct make +@@ -2664,7 +2664,7 @@ static void output_source_y( struct make if (find_include_file( make, header )) { output( "%s: %s\n", obj_dir_path( make, header ), source->filename ); @@ -12,7 +12,7 @@ bison, obj, obj_dir_path( make, obj ), source->filename ); output( "%s.tab.c: %s %s\n", obj_dir_path( make, obj ), source->filename, obj_dir_path( make, header )); -@@ -2678,7 +2678,7 @@ static void output_source_y( struct make +@@ -2672,7 +2672,7 @@ static void output_source_y( struct make } else output( "%s.tab.c: %s\n", obj, source->filename ); diff -Nru wine-development-5.5/debian/patches/warnings/format-overflow.patch wine-development-5.6/debian/patches/warnings/format-overflow.patch --- wine-development-5.5/debian/patches/warnings/format-overflow.patch 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/patches/warnings/format-overflow.patch 2021-02-15 23:11:15.000000000 +0000 @@ -14,7 +14,7 @@ int style; --- a/dlls/krnl386.exe16/interrupts.c +++ b/dlls/krnl386.exe16/interrupts.c -@@ -467,7 +467,7 @@ static void WINAPI DOSVM_Int11Handler( C +@@ -465,7 +465,7 @@ static void WINAPI DOSVM_Int11Handler( C for (x=0; x < 9; x++) { HANDLE handle; diff -Nru wine-development-5.5/debian/patches/warnings/incompatible-pointers.patch wine-development-5.6/debian/patches/warnings/incompatible-pointers.patch --- wine-development-5.5/debian/patches/warnings/incompatible-pointers.patch 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/patches/warnings/incompatible-pointers.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -description: fix gcc incompatible pointer warning -author: Michael Gilbert - ---- a/dlls/wininet/internet.c -+++ b/dlls/wininet/internet.c -@@ -1587,7 +1587,7 @@ BOOL WINAPI InternetCrackUrlA(const char - return ret; - } - --static const WCHAR *url_schemes[] = -+static const wchar_t *url_schemes[] = - { - L"ftp", - L"gopher", -@@ -1622,7 +1622,7 @@ static INTERNET_SCHEME GetInternetScheme - return INTERNET_SCHEME_UNKNOWN; - - for (i = 0; i < ARRAY_SIZE(url_schemes); i++) -- if (!strncmpiW(lpszScheme, url_schemes[i], nMaxCmp)) -+ if (!strncmpiW(lpszScheme, (LPCWSTR)url_schemes[i], nMaxCmp)) - return INTERNET_SCHEME_FIRST + i; - - return INTERNET_SCHEME_UNKNOWN; -@@ -4221,7 +4221,7 @@ static LPCWSTR INTERNET_GetSchemeString( - index = scheme - INTERNET_SCHEME_FIRST; - if (index >= ARRAY_SIZE(url_schemes)) - return NULL; -- return url_schemes[index]; -+ return (LPCWSTR)url_schemes[index]; - } - - /* we can calculate using ansi strings because we're just diff -Nru wine-development-5.5/debian/patches/warnings/strcpy-overflow.patch wine-development-5.6/debian/patches/warnings/strcpy-overflow.patch --- wine-development-5.5/debian/patches/warnings/strcpy-overflow.patch 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/debian/patches/warnings/strcpy-overflow.patch 2021-02-15 21:20:44.000000000 +0000 @@ -0,0 +1,37 @@ +description: work around strcpy array bounds warning +bug-debian: http://bugs.debian.org/966847 +author: Michael Gilbert + +--- a/dlls/shell32/cpanelfolder.c ++++ b/dlls/shell32/cpanelfolder.c +@@ -229,6 +229,7 @@ static HRESULT WINAPI ISF_ControlPanel_f + static LPITEMIDLIST _ILCreateCPanelApplet(LPCSTR name, LPCSTR displayName, + LPCSTR comment, int iconIdx) + { ++ char* offset; + PIDLCPanelStruct *p; + LPITEMIDLIST pidl; + PIDLDATA tmp; +@@ -259,9 +260,10 @@ static LPITEMIDLIST _ILCreateCPanelApple + memcpy(pidl->mkid.abID, &tmp, 2+size0); + + p = &((PIDLDATA*)pidl->mkid.abID)->u.cpanel; +- strcpy(p->szName, name); +- strcpy(p->szName+tmp.u.cpanel.offsDispName, displayName); +- strcpy(p->szName+tmp.u.cpanel.offsComment, comment); ++ offset = (char*)p + offsetof(PIDLCPanelStruct, szName); ++ strcpy(offset, name); ++ strcpy(offset+tmp.u.cpanel.offsDispName, displayName); ++ strcpy(offset+tmp.u.cpanel.offsComment, comment); + + *(WORD*)((char*)pidl+(size+2)) = 0; + +@@ -1077,7 +1079,7 @@ static HRESULT WINAPI IShellExecuteHookA + return E_INVALIDARG; + + path[0] = '\"'; +- lstrcpyA(path+1, pcpanel->szName); ++ lstrcpyA(path+1, (char*)pcpanel + offsetof(PIDLCPanelStruct, szName)); + + /* pass applet name to Control_RunDLL to distinguish between applets in one .cpl file */ + lstrcatA(path, "\" "); diff -Nru wine-development-5.5/debian/patches/warnings/uninitialized-variables.patch wine-development-5.6/debian/patches/warnings/uninitialized-variables.patch --- wine-development-5.5/debian/patches/warnings/uninitialized-variables.patch 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/patches/warnings/uninitialized-variables.patch 2021-02-15 23:11:15.000000000 +0000 @@ -27,7 +27,7 @@ if (format->type == FORMAT_ARGBF16) --- a/dlls/ntdll/locale.c +++ b/dlls/ntdll/locale.c -@@ -2319,7 +2319,7 @@ NTSTATUS WINAPI RtlIdnToUnicode( DWORD f +@@ -2325,7 +2325,7 @@ NTSTATUS WINAPI RtlIdnToUnicode( DWORD f int i, buflen, start, end, out_label, out = 0; NTSTATUS status; UINT buffer[64]; @@ -35,7 +35,7 @@ + WCHAR ch = '\0'; if (!src || srclen < -1) return STATUS_INVALID_PARAMETER; - if (srclen == -1) srclen = strlenW( src ) + 1; + if (srclen == -1) srclen = wcslen( src ) + 1; --- a/dlls/msvcrt/misc.c +++ b/dlls/msvcrt/misc.c @@ -272,7 +272,7 @@ static void small_sort(void *base, MSVCR diff -Nru wine-development-5.5/debian/patches/zlib/cabinet.patch wine-development-5.6/debian/patches/zlib/cabinet.patch --- wine-development-5.5/debian/patches/zlib/cabinet.patch 2020-06-19 09:19:15.000000000 +0000 +++ wine-development-5.6/debian/patches/zlib/cabinet.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,92 +0,0 @@ -description: revert upstream msvcrt commit df2521bff234acb049e2fb534e6ad1dfe6cf5d45 - ---- a/dlls/cabinet/Makefile.in -+++ b/dlls/cabinet/Makefile.in -@@ -1,8 +1,6 @@ - MODULE = cabinet.dll - IMPORTLIB = cabinet - --EXTRADLLFLAGS = -mno-cygwin -- - C_SRCS = \ - cabinet_main.c \ - deflate.c \ ---- a/dlls/cabinet/cabinet.h -+++ b/dlls/cabinet/cabinet.h -@@ -29,6 +29,27 @@ - #include "fdi.h" - #include "fci.h" - -+/* from msvcrt/sys/stat.h */ -+#define _S_IWRITE 0x0080 -+#define _S_IREAD 0x0100 -+ -+/* from msvcrt/fcntl.h */ -+#define _O_RDONLY 0 -+#define _O_WRONLY 1 -+#define _O_RDWR 2 -+#define _O_ACCMODE (_O_RDONLY|_O_WRONLY|_O_RDWR) -+#define _O_APPEND 0x0008 -+#define _O_RANDOM 0x0010 -+#define _O_SEQUENTIAL 0x0020 -+#define _O_TEMPORARY 0x0040 -+#define _O_NOINHERIT 0x0080 -+#define _O_CREAT 0x0100 -+#define _O_TRUNC 0x0200 -+#define _O_EXCL 0x0400 -+#define _O_SHORT_LIVED 0x1000 -+#define _O_TEXT 0x4000 -+#define _O_BINARY 0x8000 -+ - #define CAB_SPLITMAX (10) - - #define CAB_SEARCH_SIZE (32*1024) ---- a/dlls/cabinet/cabinet_main.c -+++ b/dlls/cabinet/cabinet_main.c -@@ -18,10 +18,11 @@ - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -+#include "config.h" -+ - #include - #include - #include --#include - - #include "windef.h" - #include "winbase.h" ---- a/dlls/cabinet/fci.c -+++ b/dlls/cabinet/fci.c -@@ -30,12 +30,14 @@ There is still some work to be done: - - */ - -+ -+ -+#include "config.h" -+ - #include - #include - #include - #include --#include --#include - - #include "windef.h" - #include "winbase.h" ---- a/dlls/cabinet/fdi.c -+++ b/dlls/cabinet/fdi.c -@@ -58,10 +58,10 @@ - * -gmt - */ - -+#include "config.h" -+ - #include - #include --#include --#include - - #include "windef.h" - #include "winbase.h" diff -Nru wine-development-5.5/debian/patches/zlib/compile-link.patch wine-development-5.6/debian/patches/zlib/compile-link.patch --- wine-development-5.5/debian/patches/zlib/compile-link.patch 2020-06-19 09:19:15.000000000 +0000 +++ wine-development-5.6/debian/patches/zlib/compile-link.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,102 +0,0 @@ -description: build using system zlib -author: Michael Gilbert - ---- a/dlls/cabinet/Makefile.in -+++ b/dlls/cabinet/Makefile.in -@@ -1,9 +1,10 @@ -+EXTRALIBS = $(Z_LIBS) -+EXTRAINCL = $(Z_CFLAGS) - MODULE = cabinet.dll - IMPORTLIB = cabinet - - C_SRCS = \ - cabinet_main.c \ -- deflate.c \ - fci.c \ - fdi.c - ---- a/dlls/opcservices/Makefile.in -+++ b/dlls/opcservices/Makefile.in -@@ -1,9 +1,10 @@ -+EXTRALIBS = $(Z_LIBS) -+EXTRAINCL = $(Z_CFLAGS) - MODULE = opcservices.dll - IMPORTS = uuid ole32 advapi32 urlmon xmllite oleaut32 - - C_SRCS = \ - compress.c \ -- deflate.c \ - factory.c \ - package.c \ - uri.c ---- a/dlls/wininet/Makefile.in -+++ b/dlls/wininet/Makefile.in -@@ -1,4 +1,6 @@ - EXTRADEFS = -D_WINX32_ -+EXTRALIBS = $(Z_LIBS) -+EXTRAINCL = $(Z_CFLAGS) - MODULE = wininet.dll - IMPORTLIB = wininet - IMPORTS = mpr shlwapi shell32 user32 ws2_32 advapi32 -@@ -10,7 +12,6 @@ C_SRCS = \ - ftp.c \ - gopher.c \ - http.c \ -- inflate.c \ - internet.c \ - netconnection.c \ - urlcache.c \ ---- a/dlls/cabinet/fci.c -+++ b/dlls/cabinet/fci.c -@@ -34,6 +34,7 @@ There is still some work to be done: - - #include "config.h" - -+#include - #include - #include - #include -@@ -44,7 +45,6 @@ There is still some work to be done: - #include "winerror.h" - #include "winternl.h" - #include "fci.h" --#include "zlib.h" - #include "cabinet.h" - #include "wine/list.h" - #include "wine/debug.h" ---- a/dlls/opcservices/compress.c -+++ b/dlls/opcservices/compress.c -@@ -20,6 +20,7 @@ - - #include "config.h" - -+#include - #include - - #include "windef.h" -@@ -27,7 +28,6 @@ - #include "msopc.h" - - #include "opc_private.h" --#include "zlib.h" - - #include "wine/debug.h" - #include "wine/heap.h" ---- a/dlls/wininet/http.c -+++ b/dlls/wininet/http.c -@@ -29,6 +29,7 @@ - - #include "config.h" - -+#include - #include - - #include "winsock2.h" -@@ -55,7 +56,6 @@ - #include "winuser.h" - - #include "internet.h" --#include "zlib.h" - #include "wine/debug.h" - #include "wine/exception.h" - #include "wine/unicode.h" diff -Nru wine-development-5.5/debian/patches/zlib/opc.patch wine-development-5.6/debian/patches/zlib/opc.patch --- wine-development-5.5/debian/patches/zlib/opc.patch 2020-06-19 09:19:15.000000000 +0000 +++ wine-development-5.6/debian/patches/zlib/opc.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -description: revert upstream msvcrt commit 8631960745396109ec450eafb9fe76684388f84a - ---- a/dlls/opcservices/Makefile.in -+++ b/dlls/opcservices/Makefile.in -@@ -1,8 +1,6 @@ - MODULE = opcservices.dll - IMPORTS = uuid ole32 advapi32 urlmon xmllite oleaut32 - --EXTRADLLFLAGS = -mno-cygwin -- - C_SRCS = \ - compress.c \ - deflate.c \ ---- a/dlls/opcservices/compress.c -+++ b/dlls/opcservices/compress.c -@@ -18,6 +18,8 @@ - - #define COBJMACROS - -+#include "config.h" -+ - #include - - #include "windef.h" ---- a/dlls/opcservices/package.c -+++ b/dlls/opcservices/package.c -@@ -26,6 +26,7 @@ - - #include "wine/debug.h" - #include "wine/list.h" -+#include "wine/unicode.h" - - #include "opc_private.h" - -@@ -731,7 +732,7 @@ static WCHAR *opc_strdupW(const WCHAR *s - { - size_t size; - -- size = (lstrlenW(str) + 1) * sizeof(WCHAR); -+ size = (strlenW(str) + 1) * sizeof(WCHAR); - ret = CoTaskMemAlloc(size); - if (ret) - memcpy(ret, str, size); -@@ -1168,7 +1169,7 @@ static struct opc_relationship *opc_rela - - for (i = 0; i < relationship_set->count; i++) - { -- if (!wcscmp(id, relationship_set->relationships[i]->id)) -+ if (!strcmpW(id, relationship_set->relationships[i]->id)) - return relationship_set->relationships[i]; - } - -@@ -1206,7 +1207,7 @@ static HRESULT opc_relationship_create(s - - /* FIXME: test that generated id is unique */ - RtlGenRandom(&generated, sizeof(generated)); -- swprintf(relationship->id, 10, fmtW, generated); -+ sprintfW(relationship->id, fmtW, generated); - - if (opc_relationshipset_get_rel(set, relationship->id)) - { -@@ -1634,11 +1635,11 @@ static HRESULT opc_package_add_content_t - if (cur->element == CONTENT_TYPE_OVERRIDE) - continue; - -- if (!wcsicmp(cur->u.def.ext, ext)) -+ if (!strcmpiW(cur->u.def.ext, ext)) - { - added = TRUE; - -- if (!wcscmp(cur->u.def.type, content_type)) -+ if (!strcmpW(cur->u.def.type, content_type)) - break; - - hr = opc_package_add_override_content_type(types, part); ---- a/dlls/opcservices/uri.c -+++ b/dlls/opcservices/uri.c -@@ -23,6 +23,7 @@ - #include "winbase.h" - - #include "wine/debug.h" -+#include "wine/unicode.h" - - #include "opc_private.h" - -@@ -466,7 +467,7 @@ static IUri *opc_part_uri_get_rels_uri(I - return NULL; - } - -- end = wcsrchr(path, '/'); -+ end = strrchrW(path, '/'); - if (end && end >= path + ARRAY_SIZE(relsdirW) - 1) - start = end - ARRAY_SIZE(relsdirW) + 1; - if (!start) -@@ -475,7 +476,7 @@ static IUri *opc_part_uri_get_rels_uri(I - /* Test if it's already relationships uri. */ - if (len > ARRAY_SIZE(relsextW)) - { -- if (!wcscmp(path + len - ARRAY_SIZE(relsextW) + 1, relsextW)) -+ if (!strcmpW(path + len - ARRAY_SIZE(relsextW) + 1, relsextW)) - { - if (start && !memcmp(start, relsdirW, ARRAY_SIZE(relsdirW) - sizeof(WCHAR))) - { -@@ -499,9 +500,9 @@ static IUri *opc_part_uri_get_rels_uri(I - ret[start - path] = 0; - } - -- lstrcatW(ret, relsdirW); -- lstrcatW(ret, end); -- lstrcatW(ret, relsextW); -+ strcatW(ret, relsdirW); -+ strcatW(ret, end); -+ strcatW(ret, relsextW); - - if (FAILED(hr = CreateUri(ret, Uri_CREATE_ALLOW_RELATIVE, 0, &rels_uri))) - WARN("Failed to create rels uri, hr %#x.\n", hr); diff -Nru wine-development-5.5/debian/patches/zlib/wininet0.patch wine-development-5.6/debian/patches/zlib/wininet0.patch --- wine-development-5.5/debian/patches/zlib/wininet0.patch 2020-06-19 09:19:15.000000000 +0000 +++ wine-development-5.6/debian/patches/zlib/wininet0.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -description: revert upstream msvcrt commit 9fe900532eb310d114c04d15a8d0b986ec831552 - ---- a/dlls/wininet/internet.c -+++ b/dlls/wininet/internet.c -@@ -4263,10 +4263,9 @@ static BOOL calc_url_length(LPURL_COMPON - - if (!url_uses_default_port(nScheme, lpUrlComponents->nPort)) - { -- WCHAR port[MAX_WORD_DIGITS + 1]; -+ char szPort[MAX_WORD_DIGITS+1]; - -- _ltow(lpUrlComponents->nPort, port, 10); -- *lpdwUrlLength += lstrlenW(port); -+ *lpdwUrlLength += sprintf(szPort, "%d", lpUrlComponents->nPort); - *lpdwUrlLength += strlen(":"); - } - -@@ -4422,8 +4421,10 @@ BOOL WINAPI InternetCreateUrlW(LPURL_COM - { - DWORD dwLen; - INTERNET_SCHEME nScheme; -+ WCHAR *start = lpszUrl; - - static const WCHAR slashSlashW[] = {'/','/'}; -+ static const WCHAR fmtW[] = {'%','u',0}; - - TRACE("(%p,%d,%p,%p)\n", lpUrlComponents, dwFlags, lpszUrl, lpdwUrlLength); - -@@ -4508,9 +4509,9 @@ BOOL WINAPI InternetCreateUrlW(LPURL_COM - - if (!url_uses_default_port(nScheme, lpUrlComponents->nPort)) - { -- *lpszUrl++ = ':'; -- _ltow(lpUrlComponents->nPort, lpszUrl, 10); -- lpszUrl += lstrlenW(lpszUrl); -+ *lpszUrl = ':'; -+ lpszUrl++; -+ lpszUrl += swprintf(lpszUrl, *lpdwUrlLength - (lpszUrl - start), fmtW, lpUrlComponents->nPort); - } - - /* add slash between hostname and path if necessary */ diff -Nru wine-development-5.5/debian/patches/zlib/wininet1.patch wine-development-5.6/debian/patches/zlib/wininet1.patch --- wine-development-5.5/debian/patches/zlib/wininet1.patch 2020-06-19 09:19:15.000000000 +0000 +++ wine-development-5.6/debian/patches/zlib/wininet1.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ -description: revert upstream msvcrt commit cadad89d106186a9d0377607096a58677496ec50 - ---- a/dlls/wininet/internet.c -+++ b/dlls/wininet/internet.c -@@ -541,7 +541,7 @@ static LONG INTERNET_LoadProxySettings( - { - HKEY key; - DWORD type, len; -- const WCHAR *envproxy; -+ LPCSTR envproxy; - LONG ret; - - memset( lpwpi, 0, sizeof(*lpwpi) ); -@@ -573,7 +573,7 @@ static LONG INTERNET_LoadProxySettings( - } - } - -- if (!(envproxy = _wgetenv( L"http_proxy" )) || lpwpi->proxyEnabled) -+ if (!(envproxy = getenv( "http_proxy" )) || lpwpi->proxyEnabled) - { - /* figure out how much memory the proxy setting takes */ - if (!RegQueryValueExW( key, szProxyServer, NULL, &type, NULL, &len ) && len && (type == REG_SZ)) -@@ -615,8 +615,18 @@ static LONG INTERNET_LoadProxySettings( - } - else if (envproxy) - { -+ WCHAR *envproxyW; -+ -+ len = MultiByteToWideChar( CP_UNIXCP, 0, envproxy, -1, NULL, 0 ); -+ if (!(envproxyW = heap_alloc(len * sizeof(WCHAR)))) -+ { -+ RegCloseKey( key ); -+ return ERROR_OUTOFMEMORY; -+ } -+ MultiByteToWideChar( CP_UNIXCP, 0, envproxy, -1, envproxyW, len ); -+ - FreeProxyInfo( lpwpi ); -- if (parse_proxy_url( lpwpi, envproxy )) -+ if (parse_proxy_url( lpwpi, envproxyW )) - { - TRACE("http proxy (from environment) = %s\n", debugstr_w(lpwpi->proxy)); - lpwpi->proxyEnabled = 1; -@@ -624,18 +634,19 @@ static LONG INTERNET_LoadProxySettings( - } - else - { -- WARN("failed to parse http_proxy value %s\n", debugstr_w(envproxy)); -+ WARN("failed to parse http_proxy value %s\n", debugstr_w(envproxyW)); - lpwpi->proxyEnabled = 0; - lpwpi->proxy = NULL; - lpwpi->proxyBypass = NULL; - } -+ heap_free( envproxyW ); - } - - if (lpwpi->proxyEnabled) - { - TRACE("Proxy is enabled.\n"); - -- if (!(envproxy = _wgetenv( L"no_proxy" ))) -+ if (!(envproxy = getenv( "no_proxy" ))) - { - /* figure out how much memory the proxy setting takes */ - if (!RegQueryValueExW( key, szProxyOverride, NULL, &type, NULL, &len ) && len && (type == REG_SZ)) -@@ -666,12 +677,13 @@ static LONG INTERNET_LoadProxySettings( - { - WCHAR *envproxyW; - -- if (!(envproxyW = heap_alloc(lstrlenW(envproxy) * sizeof(WCHAR)))) -+ len = MultiByteToWideChar( CP_UNIXCP, 0, envproxy, -1, NULL, 0 ); -+ if (!(envproxyW = heap_alloc(len * sizeof(WCHAR)))) - { - RegCloseKey( key ); - return ERROR_OUTOFMEMORY; - } -- lstrcpyW( envproxyW, envproxy ); -+ MultiByteToWideChar( CP_UNIXCP, 0, envproxy, -1, envproxyW, len ); - - heap_free( lpwpi->proxyBypass ); - lpwpi->proxyBypass = envproxyW; diff -Nru wine-development-5.5/debian/patches/zlib/wininet2.patch wine-development-5.6/debian/patches/zlib/wininet2.patch --- wine-development-5.5/debian/patches/zlib/wininet2.patch 2020-06-19 09:19:15.000000000 +0000 +++ wine-development-5.6/debian/patches/zlib/wininet2.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,1930 +0,0 @@ -description: revert upstream msvcrt commit 3c31cc5836026b45a40818ec874bbbcc4d6ad982 - ---- a/dlls/wininet/Makefile.in -+++ b/dlls/wininet/Makefile.in -@@ -4,8 +4,6 @@ IMPORTLIB = wininet - IMPORTS = mpr shlwapi shell32 user32 ws2_32 advapi32 - DELAYIMPORTS = secur32 crypt32 cryptui dhcpcsvc iphlpapi - --EXTRADLLFLAGS = -mno-cygwin -- - C_SRCS = \ - cookie.c \ - dialogs.c \ ---- a/dlls/wininet/cookie.c -+++ b/dlls/wininet/cookie.c -@@ -27,7 +27,6 @@ - #include - #include - #include --#include - - #include "windef.h" - #include "winbase.h" -@@ -174,7 +173,7 @@ static WCHAR *create_cookie_url(substr_t - p += domain.len; - - for(i=0; i < path.len; i++) -- p[i] = towlower(path.str[i]); -+ p[i] = tolowerW(path.str[i]); - p[path.len] = 0; - - ret_path->str = p; -@@ -195,7 +194,7 @@ static cookie_container_t *get_cookie_co - if(cookie_container->path.len < path.len) - break; - -- if(path.len == cookie_container->path.len && !wcsnicmp(cookie_container->path.str, path.str, path.len)) -+ if(path.len == cookie_container->path.len && !strncmpiW(cookie_container->path.str, path.str, path.len)) - return cookie_container; - } - -@@ -266,7 +265,7 @@ static cookie_t *find_cookie(cookie_cont - cookie_t *iter; - - LIST_FOR_EACH_ENTRY(iter, &container->cookie_list, cookie_t, entry) { -- if(lstrlenW(iter->name) == name.len && !wcsnicmp(iter->name, name.str, name.len)) -+ if(strlenW(iter->name) == name.len && !strncmpiW(iter->name, name.str, name.len)) - return iter; - } - -@@ -295,7 +294,7 @@ static void replace_cookie(cookie_contai - - static BOOL cookie_match_path(cookie_container_t *container, substr_t path) - { -- return path.len >= container->path.len && !wcsnicmp(container->path.str, path.str, container->path.len); -+ return path.len >= container->path.len && !strncmpiW(container->path.str, path.str, container->path.len); - } - - static BOOL load_persistent_cookie(substr_t domain, substr_t path) -@@ -604,9 +603,9 @@ static DWORD get_cookie(substr_t host, s - res->string_len += 2; /* '; ' */ - res->cookies[res->cnt++] = cookie_iter; - -- res->string_len += lstrlenW(cookie_iter->name); -+ res->string_len += strlenW(cookie_iter->name); - if(*cookie_iter->data) -- res->string_len += 1 /* = */ + lstrlenW(cookie_iter->data); -+ res->string_len += 1 /* = */ + strlenW(cookie_iter->data); - } - } - } -@@ -625,13 +624,13 @@ static void cookie_set_to_string(const c - *ptr++ = ' '; - } - -- len = lstrlenW(cookie_set->cookies[i]->name); -+ len = strlenW(cookie_set->cookies[i]->name); - memcpy(ptr, cookie_set->cookies[i]->name, len*sizeof(WCHAR)); - ptr += len; - - if(*cookie_set->cookies[i]->data) { - *ptr++ = '='; -- len = lstrlenW(cookie_set->cookies[i]->data); -+ len = strlenW(cookie_set->cookies[i]->data); - memcpy(ptr, cookie_set->cookies[i]->data, len*sizeof(WCHAR)); - ptr += len; - } -@@ -873,11 +872,11 @@ static BOOL is_domain_legal_for_cookie(s - return FALSE; - } - -- if(domain.len > full_domain.len || !wmemchr(domain.str, '.', domain.len) || !wmemchr(full_domain.str, '.', full_domain.len)) -+ if(domain.len > full_domain.len || !memchrW(domain.str, '.', domain.len) || !memchrW(full_domain.str, '.', full_domain.len)) - return FALSE; - - ptr = full_domain.str + full_domain.len - domain.len; -- if (wcsnicmp(domain.str, ptr, domain.len) || (full_domain.len > domain.len && ptr[-1] != '.')) { -+ if (strncmpiW(domain.str, ptr, domain.len) || (full_domain.len > domain.len && ptr[-1] != '.')) { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } -@@ -925,7 +924,7 @@ DWORD set_cookie(substr_t domain, substr - - /* lots of information can be parsed out of the cookie value */ - -- if(!(end_ptr = wmemchr(data.str, ';', data.len))) -+ if(!(end_ptr = memchrW(data.str, ';', data.len))) - end_ptr = data.str + data.len; - value = substr(data.str, end_ptr-data.str); - data.str += value.len; -@@ -950,10 +949,10 @@ DWORD set_cookie(substr_t domain, substr - if(!data.len) - break; - -- if(!(end_ptr = wmemchr(data.str, ';', data.len))) -+ if(!(end_ptr = memchrW(data.str, ';', data.len))) - end_ptr = data.str + data.len; - -- if(data.len >= (len = ARRAY_SIZE(szDomain)) && !wcsnicmp(data.str, szDomain, len)) { -+ if(data.len >= (len = ARRAY_SIZE(szDomain)) && !strncmpiW(data.str, szDomain, len)) { - substr_skip(&data, len); - - if(data.len && *data.str == '.') -@@ -964,11 +963,11 @@ DWORD set_cookie(substr_t domain, substr - - domain = substr(data.str, end_ptr-data.str); - TRACE("Parsing new domain %s\n", debugstr_wn(domain.str, domain.len)); -- }else if(data.len >= (len = ARRAY_SIZE(szPath)) && !wcsnicmp(data.str, szPath, len)) { -+ }else if(data.len >= (len = ARRAY_SIZE(szPath)) && !strncmpiW(data.str, szPath, len)) { - substr_skip(&data, len); - path = substr(data.str, end_ptr - data.str); - TRACE("Parsing new path %s\n", debugstr_wn(path.str, path.len)); -- }else if(data.len >= (len = ARRAY_SIZE(szExpires)) && !wcsnicmp(data.str, szExpires, len)) { -+ }else if(data.len >= (len = ARRAY_SIZE(szExpires)) && !strncmpiW(data.str, szExpires, len)) { - SYSTEMTIME st; - WCHAR buf[128]; - -@@ -987,10 +986,10 @@ DWORD set_cookie(substr_t domain, substr - } - } - } -- }else if(data.len >= (len = ARRAY_SIZE(szSecure)) && !wcsnicmp(data.str, szSecure, len)) { -+ }else if(data.len >= (len = ARRAY_SIZE(szSecure)) && !strncmpiW(data.str, szSecure, len)) { - substr_skip(&data, len); - FIXME("secure not handled\n"); -- }else if(data.len >= (len = ARRAY_SIZE(szHttpOnly)) && !wcsnicmp(data.str, szHttpOnly, len)) { -+ }else if(data.len >= (len = ARRAY_SIZE(szHttpOnly)) && !strncmpiW(data.str, szHttpOnly, len)) { - substr_skip(&data, len); - - if(!(flags & INTERNET_COOKIE_HTTPONLY)) { -@@ -1000,11 +999,11 @@ DWORD set_cookie(substr_t domain, substr - } - - cookie_flags |= INTERNET_COOKIE_HTTPONLY; -- }else if(data.len >= (len = ARRAY_SIZE(szVersion)) && !wcsnicmp(data.str, szVersion, len)) { -+ }else if(data.len >= (len = ARRAY_SIZE(szVersion)) && !strncmpiW(data.str, szVersion, len)) { - substr_skip(&data, len); - - FIXME("version not handled (%s)\n",debugstr_wn(data.str, data.len)); -- }else if(data.len >= (len = ARRAY_SIZE(max_ageW)) && !wcsnicmp(data.str, max_ageW, len)) { -+ }else if(data.len >= (len = ARRAY_SIZE(max_ageW)) && !strncmpiW(data.str, max_ageW, len)) { - /* Native doesn't support Max-Age attribute. */ - WARN("Max-Age ignored\n"); - }else if(data.len) { -@@ -1099,8 +1098,8 @@ DWORD WINAPI InternetSetCookieExW(LPCWST - /* some apps (or is it us??) try to add a cookie with no cookie name, but - * the cookie data in the form of name[=data]. - */ -- if (!(ptr = wcschr(lpCookieData, '='))) -- ptr = lpCookieData + lstrlenW(lpCookieData); -+ if (!(ptr = strchrW(lpCookieData, '='))) -+ ptr = lpCookieData + strlenW(lpCookieData); - - name = substr(lpCookieData, ptr - lpCookieData); - data = substrz(*ptr == '=' ? ptr+1 : ptr); ---- a/dlls/wininet/dialogs.c -+++ b/dlls/wininet/dialogs.c -@@ -35,6 +35,9 @@ - #include "cryptuiapi.h" - - #include "internet.h" -+ -+#include "wine/unicode.h" -+ - #include "resource.h" - - #define MAX_STRING_LEN 1024 -@@ -75,8 +78,8 @@ static BOOL WININET_GetAuthRealm( HINTER - * FIXME: maybe we should check that we're - * dealing with 'Basic' Authentication - */ -- p = wcschr( szBuf, ' ' ); -- if( !p || wcsncmp( p+1, szRealm, lstrlenW(szRealm) ) ) -+ p = strchrW( szBuf, ' ' ); -+ if( !p || strncmpW( p+1, szRealm, strlenW(szRealm) ) ) - { - ERR("response wrong? (%s)\n", debugstr_w(szBuf)); - return FALSE; -@@ -87,11 +90,11 @@ static BOOL WININET_GetAuthRealm( HINTER - if( *p == '"' ) - { - p++; -- q = wcsrchr( p, '"' ); -+ q = strrchrW( p, '"' ); - if( q ) - *q = 0; - } -- lstrcpyW( szBuf, p ); -+ strcpyW( szBuf, p ); - - return TRUE; - } -@@ -134,11 +137,11 @@ static BOOL WININET_GetSetPassword( HWND - szUserPass[0] = 0; - GetWindowTextW( hUserItem, szUserPass, ARRAY_SIZE( szUserPass ) - 1 ); - lstrcatW(szUserPass, szColon); -- u_len = lstrlenW( szUserPass ); -+ u_len = strlenW( szUserPass ); - GetWindowTextW( hPassItem, szUserPass+u_len, ARRAY_SIZE( szUserPass ) - u_len ); - -- r_len = (lstrlenW( szResource ) + 1)*sizeof(WCHAR); -- u_len = (lstrlenW( szUserPass ) + 1)*sizeof(WCHAR); -+ r_len = (strlenW( szResource ) + 1)*sizeof(WCHAR); -+ u_len = (strlenW( szUserPass ) + 1)*sizeof(WCHAR); - r = WNetCachePassword( (CHAR*)szResource, r_len, - (CHAR*)szUserPass, u_len, dwMagic, 0 ); - -@@ -146,13 +149,13 @@ static BOOL WININET_GetSetPassword( HWND - } - - sz = sizeof szUserPass; -- r_len = (lstrlenW( szResource ) + 1)*sizeof(WCHAR); -+ r_len = (strlenW( szResource ) + 1)*sizeof(WCHAR); - r = WNetGetCachedPassword( (CHAR*)szResource, r_len, - (CHAR*)szUserPass, &sz, dwMagic ); - if( r != WN_SUCCESS ) - return FALSE; - -- p = wcschr( szUserPass, ':' ); -+ p = strchrW( szUserPass, ':' ); - if( p ) - { - *p = 0; ---- a/dlls/wininet/ftp.c -+++ b/dlls/wininet/ftp.c -@@ -834,8 +834,8 @@ static HINTERNET FTP_FtpFindFirstFileW(f - if (lpszSearchFile) - { - LPCWSTR name = lpszSearchFile, p; -- if ((p = wcsrchr( name, '\\' ))) name = p + 1; -- if ((p = wcsrchr( name, '/' ))) name = p + 1; -+ if ((p = strrchrW( name, '\\' ))) name = p + 1; -+ if ((p = strrchrW( name, '/' ))) name = p + 1; - if (name != lpszSearchFile) - { - lpszSearchPath = heap_strndupW(lpszSearchFile, name - lpszSearchFile); -@@ -2480,7 +2480,7 @@ HINTERNET FTP_Connect(appinfo_t *hIC, LP - list_add_head( &hIC->hdr.children, &lpwfs->hdr.entry ); - - if(hIC->proxy && hIC->accessType == INTERNET_OPEN_TYPE_PROXY) { -- if(wcschr(hIC->proxy, ' ')) -+ if(strchrW(hIC->proxy, ' ')) - FIXME("Several proxies not implemented.\n"); - if(hIC->proxyBypass) - FIXME("Proxy bypass is ignored.\n"); -@@ -2497,7 +2497,7 @@ HINTERNET FTP_Connect(appinfo_t *hIC, LP - /* Nothing in the registry, get the username and use that as the password */ - if (!GetUserNameW(szPassword, &len)) { - /* Should never get here, but use an empty password as failsafe */ -- lstrcpyW(szPassword, szEmpty); -+ strcpyW(szPassword, szEmpty); - } - } - RegCloseKey(key); -@@ -2525,7 +2525,7 @@ HINTERNET FTP_Connect(appinfo_t *hIC, LP - } - - INTERNET_SendCallback(&hIC->hdr, dwContext, INTERNET_STATUS_RESOLVING_NAME, -- (LPWSTR) lpszServerName, (lstrlenW(lpszServerName)+1) * sizeof(WCHAR)); -+ (LPWSTR) lpszServerName, (strlenW(lpszServerName)+1) * sizeof(WCHAR)); - - sock_namelen = sizeof(socketAddr); - if (!GetAddress(lpszServerName, lpwfs->serverport, (struct sockaddr *)&socketAddr, &sock_namelen, szaddr)) -@@ -3098,7 +3098,7 @@ static BOOL FTP_SendPort(ftp_session_t * - BOOL bSuccess = FALSE; - TRACE("\n"); - -- swprintf(szIPAddress, ARRAY_SIZE(szIPAddress), szIPFormat, -+ sprintfW(szIPAddress, szIPFormat, - lpwfs->lstnSocketAddress.sin_addr.S_un.S_addr&0x000000FF, - (lpwfs->lstnSocketAddress.sin_addr.S_un.S_addr&0x0000FF00)>>8, - (lpwfs->lstnSocketAddress.sin_addr.S_un.S_addr&0x00FF0000)>>16, ---- a/dlls/wininet/gopher.c -+++ b/dlls/wininet/gopher.c -@@ -18,6 +18,8 @@ - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -+#include "config.h" -+ - #include - - #include "windef.h" ---- a/dlls/wininet/http.c -+++ b/dlls/wininet/http.c -@@ -27,6 +27,8 @@ - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -+#include "config.h" -+ - #include - - #include "winsock2.h" -@@ -56,6 +58,7 @@ - #include "zlib.h" - #include "wine/debug.h" - #include "wine/exception.h" -+#include "wine/unicode.h" - - WINE_DEFAULT_DEBUG_CHANNEL(wininet); - -@@ -234,20 +237,19 @@ void server_release(server_t *server) - static BOOL process_host_port(server_t *server) - { - BOOL default_port; -- size_t name_len, len; -+ size_t name_len; - WCHAR *buf; - - static const WCHAR httpW[] = {'h','t','t','p',0}; - static const WCHAR httpsW[] = {'h','t','t','p','s',0}; - static const WCHAR formatW[] = {'%','s',':','/','/','%','s',':','%','u',0}; - -- name_len = lstrlenW(server->name); -- len = name_len + 10 /* strlen("://:") */ + ARRAY_SIZE(httpsW); -- buf = heap_alloc( len * sizeof(WCHAR) ); -+ name_len = strlenW(server->name); -+ buf = heap_alloc((name_len + 10 /* strlen("://:") */)*sizeof(WCHAR) + sizeof(httpsW)); - if(!buf) - return FALSE; - -- swprintf(buf, len, formatW, server->is_https ? httpsW : httpW, server->name, server->port); -+ sprintfW(buf, formatW, server->is_https ? httpsW : httpW, server->name, server->port); - server->scheme_host_port = buf; - - server->host_port = server->scheme_host_port + 7 /* strlen("http://") */; -@@ -266,7 +268,7 @@ server_t *get_server(substr_t name, INTE - EnterCriticalSection(&connection_pool_cs); - - LIST_FOR_EACH_ENTRY(iter, &connection_pool, server_t, entry) { -- if(iter->port == port && name.len == lstrlenW(iter->name) && !wcsnicmp(iter->name, name.str, name.len) -+ if(iter->port == port && name.len == strlenW(iter->name) && !strncmpiW(iter->name, name.str, name.len) - && iter->is_https == is_https) { - server = iter; - server_addref(server); -@@ -591,7 +593,7 @@ static void HTTP_FixURL(http_request_t * - request->path = heap_strdupW(szSlash); - else /* remove \r and \n*/ - { -- int nLen = lstrlenW(request->path); -+ int nLen = strlenW(request->path); - while ((nLen >0 ) && ((request->path[nLen-1] == '\r')||(request->path[nLen-1] == '\n'))) - { - nLen--; -@@ -605,12 +607,12 @@ static void HTTP_FixURL(http_request_t * - } - - if(CSTR_EQUAL != CompareStringW( LOCALE_INVARIANT, NORM_IGNORECASE, -- request->path, lstrlenW(request->path), szHttp, lstrlenW(szHttp) ) -+ request->path, strlenW(request->path), szHttp, strlenW(szHttp) ) - && request->path[0] != '/') /* not an absolute path ?? --> fix it !! */ - { -- WCHAR *fixurl = heap_alloc((lstrlenW(request->path) + 2)*sizeof(WCHAR)); -+ WCHAR *fixurl = heap_alloc((strlenW(request->path) + 2)*sizeof(WCHAR)); - *fixurl = '/'; -- lstrcpyW(fixurl + 1, request->path); -+ strcpyW(fixurl + 1, request->path); - heap_free( request->path ); - request->path = fixurl; - } -@@ -698,7 +700,7 @@ static WCHAR* build_response_header(http - if (request->status_code) - { - req[n++] = request->version; -- swprintf(buf, ARRAY_SIZE(buf), status_fmt, request->status_code); -+ sprintfW(buf, status_fmt, request->status_code); - req[n++] = buf; - req[n++] = request->statusText; - if (use_cr) -@@ -709,7 +711,7 @@ static WCHAR* build_response_header(http - for(i = 0; i < request->nCustHeaders; i++) - { - if(!(request->custHeaders[i].wFlags & HDR_ISREQUEST) -- && wcscmp(request->custHeaders[i].lpszField, szStatus)) -+ && strcmpW(request->custHeaders[i].lpszField, szStatus)) - { - req[n++] = request->custHeaders[i].lpszField; - req[n++] = colonW; -@@ -755,7 +757,7 @@ static void HTTP_ProcessCookies( http_re - if (!setCookieHeader->lpszValue) - continue; - -- data = wcschr(setCookieHeader->lpszValue, '='); -+ data = strchrW(setCookieHeader->lpszValue, '='); - if(!data) - continue; - -@@ -776,9 +778,9 @@ static void strip_spaces(LPWSTR start) - str++; - - if (str != start) -- memmove(start, str, sizeof(WCHAR) * (lstrlenW(str) + 1)); -+ memmove(start, str, sizeof(WCHAR) * (strlenW(str) + 1)); - -- end = start + lstrlenW(start) - 1; -+ end = start + strlenW(start) - 1; - while (end >= start && *end == ' ') - { - *end = '\0'; -@@ -791,7 +793,7 @@ static inline BOOL is_basic_auth_value( - static const WCHAR szBasic[] = {'B','a','s','i','c'}; /* Note: not nul-terminated */ - static const WCHAR szRealm[] = {'r','e','a','l','m'}; /* Note: not nul-terminated */ - BOOL is_basic; -- is_basic = !wcsnicmp(pszAuthValue, szBasic, ARRAY_SIZE(szBasic)) && -+ is_basic = !strncmpiW(pszAuthValue, szBasic, ARRAY_SIZE(szBasic)) && - ((pszAuthValue[ARRAY_SIZE(szBasic)] == ' ') || !pszAuthValue[ARRAY_SIZE(szBasic)]); - if (is_basic && pszRealm) - { -@@ -800,13 +802,13 @@ static inline BOOL is_basic_auth_value( - LPCWSTR realm; - ptr++; - *pszRealm=NULL; -- token = wcschr(ptr,'='); -+ token = strchrW(ptr,'='); - if (!token) - return TRUE; - realm = ptr; - while (*realm == ' ') - realm++; -- if(!wcsnicmp(realm, szRealm, ARRAY_SIZE(szRealm)) && -+ if(!strncmpiW(realm, szRealm, ARRAY_SIZE(szRealm)) && - (realm[ARRAY_SIZE(szRealm)] == ' ' || realm[ARRAY_SIZE(szRealm)] == '=')) - { - token++; -@@ -846,7 +848,7 @@ static UINT retrieve_cached_basic_author - EnterCriticalSection(&authcache_cs); - LIST_FOR_EACH_ENTRY(ad, &basicAuthorizationCache, basicAuthorizationData, entry) - { -- if (!wcsicmp(host, ad->host) && (!realm || !wcscmp(realm, ad->realm))) -+ if (!strcmpiW(host, ad->host) && (!realm || !strcmpW(realm, ad->realm))) - { - char *colon; - DWORD length; -@@ -884,7 +886,7 @@ static void cache_basic_authorization(LP - LIST_FOR_EACH(cursor, &basicAuthorizationCache) - { - basicAuthorizationData *check = LIST_ENTRY(cursor,basicAuthorizationData,entry); -- if (!wcsicmp(host,check->host) && !wcscmp(realm,check->realm)) -+ if (!strcmpiW(host,check->host) && !strcmpW(realm,check->realm)) - { - ad = check; - break; -@@ -922,7 +924,7 @@ static BOOL retrieve_cached_authorizatio - - EnterCriticalSection(&authcache_cs); - LIST_FOR_EACH_ENTRY(ad, &authorizationCache, authorizationData, entry) { -- if(!wcsicmp(host, ad->host) && !wcsicmp(scheme, ad->scheme)) { -+ if(!strcmpiW(host, ad->host) && !strcmpiW(scheme, ad->scheme)) { - TRACE("Authorization found in cache\n"); - - nt_auth_identity->User = heap_strdupW(ad->user); -@@ -960,7 +962,7 @@ static void cache_authorization(LPWSTR h - - EnterCriticalSection(&authcache_cs); - LIST_FOR_EACH_ENTRY(ad, &authorizationCache, authorizationData, entry) -- if(!wcsicmp(host, ad->host) && !wcsicmp(scheme, ad->scheme)) { -+ if(!strcmpiW(host, ad->host) && !strcmpiW(scheme, ad->scheme)) { - found = TRUE; - break; - } -@@ -1086,7 +1088,7 @@ static BOOL HTTP_DoAuthorization( http_r - - if (domain_and_username) - { -- WCHAR *user = wcschr(domain_and_username, '\\'); -+ WCHAR *user = strchrW(domain_and_username, '\\'); - WCHAR *domain = domain_and_username; - - /* FIXME: make sure scheme accepts SEC_WINNT_AUTH_IDENTITY before calling AcquireCredentialsHandle */ -@@ -1102,11 +1104,11 @@ static BOOL HTTP_DoAuthorization( http_r - - nt_auth_identity.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE; - nt_auth_identity.User = user; -- nt_auth_identity.UserLength = lstrlenW(nt_auth_identity.User); -+ nt_auth_identity.UserLength = strlenW(nt_auth_identity.User); - nt_auth_identity.Domain = domain; - nt_auth_identity.DomainLength = domain ? user - domain - 1 : 0; - nt_auth_identity.Password = password; -- nt_auth_identity.PasswordLength = lstrlenW(nt_auth_identity.Password); -+ nt_auth_identity.PasswordLength = strlenW(nt_auth_identity.Password); - - cache_authorization(host, pAuthInfo->scheme, &nt_auth_identity); - } -@@ -1152,8 +1154,8 @@ static BOOL HTTP_DoAuthorization( http_r - else if (pAuthInfo->finished) - return FALSE; - -- if ((lstrlenW(pszAuthValue) < lstrlenW(pAuthInfo->scheme)) || -- wcsnicmp(pszAuthValue, pAuthInfo->scheme, lstrlenW(pAuthInfo->scheme))) -+ if ((strlenW(pszAuthValue) < strlenW(pAuthInfo->scheme)) || -+ strncmpiW(pszAuthValue, pAuthInfo->scheme, strlenW(pAuthInfo->scheme))) - { - ERR("authentication scheme changed from %s to %s\n", - debugstr_w(pAuthInfo->scheme), debugstr_w(pszAuthValue)); -@@ -1223,7 +1225,7 @@ static BOOL HTTP_DoAuthorization( http_r - in_desc.cBuffers = 1; - in_desc.pBuffers = ∈ - -- pszAuthData = pszAuthValue + lstrlenW(pAuthInfo->scheme); -+ pszAuthData = pszAuthValue + strlenW(pAuthInfo->scheme); - if (*pszAuthData == ' ') - { - pszAuthData++; -@@ -1289,7 +1291,7 @@ static DWORD HTTP_HttpAddRequestHeadersW - TRACE("copying header: %s\n", debugstr_wn(lpszHeader, dwHeaderLength)); - - if( dwHeaderLength == ~0U ) -- len = lstrlenW(lpszHeader); -+ len = strlenW(lpszHeader); - else - len = dwHeaderLength; - buffer = heap_alloc(sizeof(WCHAR)*(len+1)); -@@ -1637,7 +1639,7 @@ static UINT HTTP_DecodeBase64( LPCWSTR b - static WCHAR *encode_auth_data( const WCHAR *scheme, const char *data, UINT data_len ) - { - WCHAR *ret; -- UINT len, scheme_len = lstrlenW( scheme ); -+ UINT len, scheme_len = strlenW( scheme ); - - /* scheme + space + base64 encoded data (3/2/1 bytes data -> 4 bytes of characters) */ - len = scheme_len + 1 + ((data_len + 2) * 4) / 3; -@@ -1669,7 +1671,7 @@ static BOOL HTTP_InsertAuthorization( ht - /* clear the data as it isn't valid now that it has been sent to the - * server, unless it's Basic authentication which doesn't do - * connection tracking */ -- if (wcsicmp(pAuthInfo->scheme, wszBasic)) -+ if (strcmpiW(pAuthInfo->scheme, wszBasic)) - { - heap_free(pAuthInfo->auth_data); - pAuthInfo->auth_data = NULL; -@@ -1689,7 +1691,7 @@ static BOOL HTTP_InsertAuthorization( ht - char *data; - - /* Don't use cached credentials when a username or Authorization was specified */ -- if ((request->session->userName && request->session->userName[0]) || wcscmp(header, szAuthorization)) -+ if ((request->session->userName && request->session->userName[0]) || strcmpW(header, szAuthorization)) - return TRUE; - - if (!(host = get_host_header(request))) -@@ -1723,8 +1725,8 @@ static WCHAR *build_proxy_path_url(http_ - DWORD size, len; - WCHAR *url; - -- len = lstrlenW(req->server->scheme_host_port); -- size = len + lstrlenW(req->path) + 1; -+ len = strlenW(req->server->scheme_host_port); -+ size = len + strlenW(req->path) + 1; - if(*req->path != '/') - size++; - url = heap_alloc(size * sizeof(WCHAR)); -@@ -1735,7 +1737,7 @@ static WCHAR *build_proxy_path_url(http_ - if(*req->path != '/') - url[len++] = '/'; - -- lstrcpyW(url+len, req->path); -+ strcpyW(url+len, req->path); - - TRACE("url=%s\n", debugstr_w(url)); - return url; -@@ -1747,11 +1749,11 @@ static BOOL HTTP_DomainMatches(LPCWSTR s - const WCHAR *dot, *ptr; - int len; - -- if(domain.len == ARRAY_SIZE(localW)-1 && !wcsnicmp(domain.str, localW, domain.len) && !wcschr(server, '.' )) -+ if(domain.len == ARRAY_SIZE(localW)-1 && !strncmpiW(domain.str, localW, domain.len) && !strchrW(server, '.' )) - return TRUE; - - if(domain.len && *domain.str != '*') -- return domain.len == lstrlenW(server) && !wcsnicmp(server, domain.str, domain.len); -+ return domain.len == strlenW(server) && !strncmpiW(server, domain.str, domain.len); - - if(domain.len < 2 || domain.str[1] != '.') - return FALSE; -@@ -1760,11 +1762,11 @@ static BOOL HTTP_DomainMatches(LPCWSTR s - * the wildcard exactly. E.g. if the wildcard is *.a.b, and the - * hostname is www.foo.a.b, it matches, but a.b does not. - */ -- dot = wcschr(server, '.'); -+ dot = strchrW(server, '.'); - if(!dot) - return FALSE; - -- len = lstrlenW(dot + 1); -+ len = strlenW(dot + 1); - if(len < domain.len - 2) - return FALSE; - -@@ -1773,7 +1775,7 @@ static BOOL HTTP_DomainMatches(LPCWSTR s - * server's domain. - */ - ptr = dot + 1 + len - domain.len + 2; -- if(!wcsnicmp(ptr, domain.str+2, domain.len-2)) -+ if(!strncmpiW(ptr, domain.str+2, domain.len-2)) - /* This is only a match if the preceding character is - * a '.', i.e. that it is a matching domain. E.g. - * if domain is '*.b.c' and server is 'www.ab.c' they -@@ -1781,7 +1783,7 @@ static BOOL HTTP_DomainMatches(LPCWSTR s - */ - return *(ptr - 1) == '.'; - -- return len == domain.len-2 && !wcsnicmp(dot + 1, domain.str + 2, len); -+ return len == domain.len-2 && !strncmpiW(dot + 1, domain.str + 2, len); - } - - static BOOL HTTP_ShouldBypassProxy(appinfo_t *lpwai, LPCWSTR server) -@@ -1794,11 +1796,11 @@ static BOOL HTTP_ShouldBypassProxy(appin - while(1) { - LPCWSTR tmp = ptr; - -- ptr = wcschr( ptr, ';' ); -+ ptr = strchrW( ptr, ';' ); - if (!ptr) -- ptr = wcschr( tmp, ' ' ); -+ ptr = strchrW( tmp, ' ' ); - if (!ptr) -- ptr = tmp + lstrlenW(tmp); -+ ptr = tmp + strlenW(tmp); - ret = HTTP_DomainMatches( server, substr(tmp, ptr-tmp) ); - if (ret || !*ptr) - break; -@@ -1823,14 +1825,14 @@ static BOOL HTTP_DealWithProxy(appinfo_t - if(!proxy) - return FALSE; - if(CSTR_EQUAL != CompareStringW(LOCALE_SYSTEM_DEFAULT, NORM_IGNORECASE, -- proxy, lstrlenW(szHttp), szHttp, lstrlenW(szHttp))) { -- WCHAR *proxy_url = heap_alloc(lstrlenW(proxy)*sizeof(WCHAR) + sizeof(szHttp)); -+ proxy, strlenW(szHttp), szHttp, strlenW(szHttp))) { -+ WCHAR *proxy_url = heap_alloc(strlenW(proxy)*sizeof(WCHAR) + sizeof(szHttp)); - if(!proxy_url) { - heap_free(proxy); - return FALSE; - } -- lstrcpyW(proxy_url, szHttp); -- lstrcatW(proxy_url, proxy); -+ strcpyW(proxy_url, szHttp); -+ strcatW(proxy_url, proxy); - heap_free(proxy); - proxy = proxy_url; - } -@@ -1864,7 +1866,7 @@ static DWORD HTTP_ResolveName(http_reque - INTERNET_SendCallback(&request->hdr, request->hdr.dwContext, - INTERNET_STATUS_RESOLVING_NAME, - server->name, -- (lstrlenW(server->name)+1) * sizeof(WCHAR)); -+ (strlenW(server->name)+1) * sizeof(WCHAR)); - - addr_len = sizeof(server->addr); - if (!GetAddress(server->name, server->port, (SOCKADDR*)&server->addr, &addr_len, server->addr_str)) -@@ -1894,20 +1896,20 @@ static WCHAR *compose_request_url(http_r - else - scheme = http; - -- len = lstrlenW(scheme) + lstrlenW(host) + (req->path[0] != '/' ? 1 : 0) + lstrlenW(req->path); -+ len = strlenW(scheme) + strlenW(host) + (req->path[0] != '/' ? 1 : 0) + strlenW(req->path); - ptr = buf = heap_alloc((len+1) * sizeof(WCHAR)); - if(buf) { -- lstrcpyW(ptr, scheme); -- ptr += lstrlenW(ptr); -+ strcpyW(ptr, scheme); -+ ptr += strlenW(ptr); - -- lstrcpyW(ptr, host); -- ptr += lstrlenW(ptr); -+ strcpyW(ptr, host); -+ ptr += strlenW(ptr); - - if(req->path[0] != '/') - *ptr++ = '/'; - -- lstrcpyW(ptr, req->path); -- ptr += lstrlenW(ptr); -+ strcpyW(ptr, req->path); -+ ptr += strlenW(ptr); - *ptr = 0; - } - -@@ -2022,7 +2024,7 @@ static BOOL HTTP_KeepAlive(http_request_ - /* as per RFC 2068, S8.1.2.1, if the client is HTTP/1.1 then assume that - * the connection is keep-alive by default */ - if (HTTP_HttpQueryInfoW(request, HTTP_QUERY_VERSION, szVersion, &dwBufferSize, NULL) == ERROR_SUCCESS -- && !wcsicmp(szVersion, g_szHttp1_1)) -+ && !strcmpiW(szVersion, g_szHttp1_1)) - { - keepalive = TRUE; - } -@@ -2031,7 +2033,7 @@ static BOOL HTTP_KeepAlive(http_request_ - if (HTTP_HttpQueryInfoW(request, HTTP_QUERY_PROXY_CONNECTION, szConnectionResponse, &dwBufferSize, NULL) == ERROR_SUCCESS - || HTTP_HttpQueryInfoW(request, HTTP_QUERY_CONNECTION, szConnectionResponse, &dwBufferSize, NULL) == ERROR_SUCCESS) - { -- keepalive = !wcsicmp(szConnectionResponse, szKeepAlive); -+ keepalive = !strcmpiW(szConnectionResponse, szKeepAlive); - } - - return keepalive; -@@ -2051,14 +2053,14 @@ static DWORD str_to_buffer(const WCHAR * - { - WCHAR *buf = buffer; - -- if (str) len = lstrlenW(str); -+ if (str) len = strlenW(str); - else len = 0; - if (*size < (len + 1) * sizeof(WCHAR)) - { - *size = (len + 1) * sizeof(WCHAR); - return ERROR_INSUFFICIENT_BUFFER; - } -- if (str) lstrcpyW(buf, str); -+ if (str) strcpyW(buf, str); - else buf[0] = 0; - - *size = len; -@@ -2396,7 +2398,7 @@ static void commit_cache_entry(http_requ - req->hCacheFile = NULL; - - header = build_response_header(req, TRUE); -- header_len = (header ? lstrlenW(header) : 0); -+ header_len = (header ? strlenW(header) : 0); - res = CommitUrlCacheEntryW(req->req_file->url, req->req_file->file_name, req->expires, - req->last_modified, NORMAL_CACHE_ENTRY, - header, header_len, NULL, 0); -@@ -2444,12 +2446,12 @@ static void create_cache_entry(http_requ - while(*ptr==' ' || *ptr=='\t') - ptr++; - -- end = wcschr(ptr, ','); -+ end = strchrW(ptr, ','); - if(!end) -- end = ptr + lstrlenW(ptr); -+ end = ptr + strlenW(ptr); - -- if(!wcsnicmp(ptr, no_cacheW, ARRAY_SIZE(no_cacheW)-1) -- || !wcsnicmp(ptr, no_storeW, ARRAY_SIZE(no_storeW)-1)) { -+ if(!strncmpiW(ptr, no_cacheW, ARRAY_SIZE(no_cacheW)-1) -+ || !strncmpiW(ptr, no_storeW, ARRAY_SIZE(no_storeW)-1)) { - b = FALSE; - break; - } -@@ -2912,7 +2914,7 @@ static DWORD set_content_length(http_req - WCHAR encoding[20]; - DWORD size; - -- if(request->status_code == HTTP_STATUS_NO_CONTENT || !wcscmp(request->verb, headW)) { -+ if(request->status_code == HTTP_STATUS_NO_CONTENT || !strcmpW(request->verb, headW)) { - request->contentLength = request->netconn_stream.content_length = 0; - return ERROR_SUCCESS; - } -@@ -2929,7 +2931,7 @@ static DWORD set_content_length(http_req - - size = sizeof(encoding); - if (HTTP_HttpQueryInfoW(request, HTTP_QUERY_TRANSFER_ENCODING, encoding, &size, NULL) == ERROR_SUCCESS && -- !wcsicmp(encoding, szChunked)) -+ !strcmpiW(encoding, szChunked)) - { - chunked_stream_t *chunked_stream; - -@@ -2962,12 +2964,12 @@ static DWORD set_content_length(http_req - - encoding_idx = HTTP_GetCustomHeaderIndex(request, szContent_Encoding, 0, FALSE); - if(encoding_idx != -1) { -- if(!wcsicmp(request->custHeaders[encoding_idx].lpszValue, gzipW)) { -+ if(!strcmpiW(request->custHeaders[encoding_idx].lpszValue, gzipW)) { - HTTP_DeleteCustomHeader(request, encoding_idx); - LeaveCriticalSection( &request->headers_section ); - return init_gzip_stream(request, TRUE); - } -- if(!wcsicmp(request->custHeaders[encoding_idx].lpszValue, deflateW)) { -+ if(!strcmpiW(request->custHeaders[encoding_idx].lpszValue, deflateW)) { - HTTP_DeleteCustomHeader(request, encoding_idx); - LeaveCriticalSection( &request->headers_section ); - return init_gzip_stream(request, FALSE); -@@ -3066,7 +3068,7 @@ static DWORD drain_content(http_request_ - if(!is_valid_netconn(req->netconn)) - return ERROR_NO_DATA; - -- if(!wcscmp(req->verb, szHEAD)) -+ if(!strcmpW(req->verb, szHEAD)) - return ERROR_SUCCESS; - - EnterCriticalSection( &req->read_section ); -@@ -3380,14 +3382,14 @@ static DWORD HTTP_HttpOpenRequestW(http_ - len = 1; - rc = UrlCanonicalizeW(lpszObjectName, &dummy, &len, URL_ESCAPE_SPACES_ONLY); - if (rc != E_POINTER) -- len = lstrlenW(lpszObjectName)+1; -+ len = strlenW(lpszObjectName)+1; - request->path = heap_alloc(len*sizeof(WCHAR)); - rc = UrlCanonicalizeW(lpszObjectName, request->path, &len, - URL_ESCAPE_SPACES_ONLY); - if (rc != S_OK) - { - ERR("Unable to escape string!(%s) (%d)\n",debugstr_w(lpszObjectName),rc); -- lstrcpyW(request->path,lpszObjectName); -+ strcpyW(request->path,lpszObjectName); - } - }else { - static const WCHAR slashW[] = {'/',0}; -@@ -3598,7 +3600,7 @@ static DWORD HTTP_HttpQueryInfoW(http_re - return ERROR_OUTOFMEMORY; - } - -- len = lstrlenW(headers) * sizeof(WCHAR); -+ len = strlenW(headers) * sizeof(WCHAR); - if (len + sizeof(WCHAR) > *lpdwBufferLength) - { - len += sizeof(WCHAR); -@@ -3632,7 +3634,7 @@ static DWORD HTTP_HttpQueryInfoW(http_re - return ERROR_OUTOFMEMORY; - } - -- len = lstrlenW(headers) * sizeof(WCHAR); -+ len = strlenW(headers) * sizeof(WCHAR); - if (len > *lpdwBufferLength) - { - *lpdwBufferLength = len; -@@ -3663,7 +3665,7 @@ static DWORD HTTP_HttpQueryInfoW(http_re - case HTTP_QUERY_STATUS_TEXT: - if (request->statusText) - { -- DWORD len = lstrlenW(request->statusText); -+ DWORD len = strlenW(request->statusText); - if (len + 1 > *lpdwBufferLength/sizeof(WCHAR)) - { - *lpdwBufferLength = (len + 1) * sizeof(WCHAR); -@@ -3683,7 +3685,7 @@ static DWORD HTTP_HttpQueryInfoW(http_re - case HTTP_QUERY_VERSION: - if (request->version) - { -- DWORD len = lstrlenW(request->version); -+ DWORD len = strlenW(request->version); - if (len + 1 > *lpdwBufferLength/sizeof(WCHAR)) - { - *lpdwBufferLength = (len + 1) * sizeof(WCHAR); -@@ -3727,7 +3729,7 @@ static DWORD HTTP_HttpQueryInfoW(http_re - DWORD size; - static const WCHAR formatW[] = {'%','u',0}; - -- size = swprintf(buf, ARRAY_SIZE(buf), formatW, request->status_code) * sizeof(WCHAR); -+ size = sprintfW(buf, formatW, request->status_code) * sizeof(WCHAR); - - if(size <= *lpdwBufferLength) { - memcpy(lpBuffer, buf, size+sizeof(WCHAR)); -@@ -3773,7 +3775,7 @@ static DWORD HTTP_HttpQueryInfoW(http_re - } - - errno = 0; -- value = wcstoul( lphttpHdr->lpszValue, NULL, 10 ); -+ value = strtoulW( lphttpHdr->lpszValue, NULL, 10 ); - if (value > UINT_MAX || (value == ULONG_MAX && errno == ERANGE)) - { - LeaveCriticalSection( &request->headers_section ); -@@ -3808,7 +3810,7 @@ static DWORD HTTP_HttpQueryInfoW(http_re - } - else if (lphttpHdr->lpszValue) - { -- DWORD len = (lstrlenW(lphttpHdr->lpszValue) + 1) * sizeof(WCHAR); -+ DWORD len = (strlenW(lphttpHdr->lpszValue) + 1) * sizeof(WCHAR); - - if (len > *lpdwBufferLength) - { -@@ -4116,7 +4118,7 @@ static DWORD HTTP_HandleRedirect(http_re - { - URL_COMPONENTSW urlComponents = { sizeof(urlComponents) }; - http_session_t *session = request->session; -- size_t url_len = lstrlenW(url); -+ size_t url_len = strlenW(url); - - if(url[0] == '/') - { -@@ -4175,7 +4177,7 @@ static DWORD HTTP_HandleRedirect(http_re - - host = substr(urlComponents.lpszHostName, urlComponents.dwHostNameLength); - -- if(host.len != lstrlenW(request->server->name) || wcsnicmp(request->server->name, host.str, host.len) -+ if(host.len != strlenW(request->server->name) || strncmpiW(request->server->name, host.str, host.len) - || request->server->port != urlComponents.nPort) { - server_t *new_server; - -@@ -4209,7 +4211,7 @@ static DWORD HTTP_HandleRedirect(http_re - if (rc != S_OK) - { - ERR("Unable to escape string!(%s) (%d)\n",debugstr_w(path),rc); -- lstrcpyW(request->path, path); -+ strcpyW(request->path, path); - } - heap_free(path); - } -@@ -4232,14 +4234,14 @@ static LPWSTR HTTP_build_req( LPCWSTR *l - LPWSTR str; - - for( t = list; *t ; t++ ) -- len += lstrlenW( *t ); -+ len += strlenW( *t ); - len++; - - str = heap_alloc(len*sizeof(WCHAR)); - *str = 0; - - for( t = list; *t ; t++ ) -- lstrcatW( str, *t ); -+ strcatW( str, *t ); - - return str; - } -@@ -4253,7 +4255,7 @@ static void HTTP_InsertCookies(http_requ - if(res != ERROR_SUCCESS || !cookies) - return; - -- HTTP_HttpAddRequestHeadersW(request, cookies, lstrlenW(cookies), -+ HTTP_HttpAddRequestHeadersW(request, cookies, strlenW(cookies), - HTTP_ADDREQ_FLAG_REPLACE | HTTP_ADDREQ_FLAG_ADD); - heap_free(cookies); - } -@@ -4269,7 +4271,7 @@ static WORD HTTP_ParseWkday(LPCWSTR day) - { 's','a','t',0 }}; - unsigned int i; - for (i = 0; i < ARRAY_SIZE(days); i++) -- if (!wcsicmp(day, days[i])) -+ if (!strcmpiW(day, days[i])) - return i; - - /* Invalid */ -@@ -4291,18 +4293,18 @@ static WORD HTTP_ParseMonth(LPCWSTR mont - static const WCHAR nov[] = { 'n','o','v',0 }; - static const WCHAR dec[] = { 'd','e','c',0 }; - -- if (!wcsicmp(month, jan)) return 1; -- if (!wcsicmp(month, feb)) return 2; -- if (!wcsicmp(month, mar)) return 3; -- if (!wcsicmp(month, apr)) return 4; -- if (!wcsicmp(month, may)) return 5; -- if (!wcsicmp(month, jun)) return 6; -- if (!wcsicmp(month, jul)) return 7; -- if (!wcsicmp(month, aug)) return 8; -- if (!wcsicmp(month, sep)) return 9; -- if (!wcsicmp(month, oct)) return 10; -- if (!wcsicmp(month, nov)) return 11; -- if (!wcsicmp(month, dec)) return 12; -+ if (!strcmpiW(month, jan)) return 1; -+ if (!strcmpiW(month, feb)) return 2; -+ if (!strcmpiW(month, mar)) return 3; -+ if (!strcmpiW(month, apr)) return 4; -+ if (!strcmpiW(month, may)) return 5; -+ if (!strcmpiW(month, jun)) return 6; -+ if (!strcmpiW(month, jul)) return 7; -+ if (!strcmpiW(month, aug)) return 8; -+ if (!strcmpiW(month, sep)) return 9; -+ if (!strcmpiW(month, oct)) return 10; -+ if (!strcmpiW(month, nov)) return 11; -+ if (!strcmpiW(month, dec)) return 12; - /* Invalid */ - return 0; - } -@@ -4318,10 +4320,10 @@ static BOOL HTTP_ParseTime(SYSTEMTIME *s - WCHAR *nextPtr; - unsigned long num; - -- while (iswspace(*ptr)) -+ while (isspaceW(*ptr)) - ptr++; - -- num = wcstoul(ptr, &nextPtr, 10); -+ num = strtoulW(ptr, &nextPtr, 10); - if (!nextPtr || nextPtr <= ptr || *nextPtr != ':') - { - ERR("unexpected time format %s\n", debugstr_w(ptr)); -@@ -4334,7 +4336,7 @@ static BOOL HTTP_ParseTime(SYSTEMTIME *s - } - ptr = nextPtr + 1; - st->wHour = (WORD)num; -- num = wcstoul(ptr, &nextPtr, 10); -+ num = strtoulW(ptr, &nextPtr, 10); - if (!nextPtr || nextPtr <= ptr || *nextPtr != ':') - { - ERR("unexpected time format %s\n", debugstr_w(ptr)); -@@ -4347,7 +4349,7 @@ static BOOL HTTP_ParseTime(SYSTEMTIME *s - } - ptr = nextPtr + 1; - st->wMinute = (WORD)num; -- num = wcstoul(ptr, &nextPtr, 10); -+ num = strtoulW(ptr, &nextPtr, 10); - if (!nextPtr || nextPtr <= ptr) - { - ERR("unexpected time format %s\n", debugstr_w(ptr)); -@@ -4371,7 +4373,7 @@ static BOOL HTTP_ParseDateAsAsctime(LPCW - SYSTEMTIME st = { 0 }; - unsigned long num; - -- for (ptr = value, dayPtr = day; *ptr && !iswspace(*ptr) && -+ for (ptr = value, dayPtr = day; *ptr && !isspaceW(*ptr) && - dayPtr - day < ARRAY_SIZE(day) - 1; ptr++, dayPtr++) - *dayPtr = *ptr; - *dayPtr = 0; -@@ -4382,10 +4384,10 @@ static BOOL HTTP_ParseDateAsAsctime(LPCW - return FALSE; - } - -- while (iswspace(*ptr)) -+ while (isspaceW(*ptr)) - ptr++; - -- for (monthPtr = month; !iswspace(*ptr) && monthPtr - month < ARRAY_SIZE(month) - 1; -+ for (monthPtr = month; !isspaceW(*ptr) && monthPtr - month < ARRAY_SIZE(month) - 1; - monthPtr++, ptr++) - *monthPtr = *ptr; - *monthPtr = 0; -@@ -4396,10 +4398,10 @@ static BOOL HTTP_ParseDateAsAsctime(LPCW - return FALSE; - } - -- while (iswspace(*ptr)) -+ while (isspaceW(*ptr)) - ptr++; - -- num = wcstoul(ptr, &nextPtr, 10); -+ num = strtoulW(ptr, &nextPtr, 10); - if (!nextPtr || nextPtr <= ptr || !num || num > 31) - { - ERR("unexpected day %s\n", debugstr_w(ptr)); -@@ -4408,16 +4410,16 @@ static BOOL HTTP_ParseDateAsAsctime(LPCW - ptr = nextPtr; - st.wDay = (WORD)num; - -- while (iswspace(*ptr)) -+ while (isspaceW(*ptr)) - ptr++; - - if (!HTTP_ParseTime(&st, &ptr)) - return FALSE; - -- while (iswspace(*ptr)) -+ while (isspaceW(*ptr)) - ptr++; - -- num = wcstoul(ptr, &nextPtr, 10); -+ num = strtoulW(ptr, &nextPtr, 10); - if (!nextPtr || nextPtr <= ptr || num < 1601 || num > 30827) - { - ERR("unexpected year %s\n", debugstr_w(ptr)); -@@ -4426,13 +4428,13 @@ static BOOL HTTP_ParseDateAsAsctime(LPCW - ptr = nextPtr; - st.wYear = (WORD)num; - -- while (iswspace(*ptr)) -+ while (isspaceW(*ptr)) - ptr++; - - /* asctime() doesn't report a timezone, but some web servers do, so accept - * with or without GMT. - */ -- if (*ptr && wcscmp(ptr, gmt)) -+ if (*ptr && strcmpW(ptr, gmt)) - { - ERR("unexpected timezone %s\n", debugstr_w(ptr)); - return FALSE; -@@ -4448,7 +4450,7 @@ static BOOL HTTP_ParseRfc1123Date(LPCWST - unsigned long num; - SYSTEMTIME st = { 0 }; - -- ptr = wcschr(value, ','); -+ ptr = strchrW(value, ','); - if (!ptr) - return FALSE; - if (ptr - value != 3) -@@ -4466,10 +4468,10 @@ static BOOL HTTP_ParseRfc1123Date(LPCWST - } - ptr++; - -- while (iswspace(*ptr)) -+ while (isspaceW(*ptr)) - ptr++; - -- num = wcstoul(ptr, &nextPtr, 10); -+ num = strtoulW(ptr, &nextPtr, 10); - if (!nextPtr || nextPtr <= ptr || !num || num > 31) - { - WARN("unexpected day %s\n", debugstr_w(value)); -@@ -4478,10 +4480,10 @@ static BOOL HTTP_ParseRfc1123Date(LPCWST - ptr = nextPtr; - st.wDay = (WORD)num; - -- while (iswspace(*ptr)) -+ while (isspaceW(*ptr)) - ptr++; - -- for (monthPtr = month; !iswspace(*ptr) && monthPtr - month < ARRAY_SIZE(month) - 1; -+ for (monthPtr = month; !isspaceW(*ptr) && monthPtr - month < ARRAY_SIZE(month) - 1; - monthPtr++, ptr++) - *monthPtr = *ptr; - *monthPtr = 0; -@@ -4492,10 +4494,10 @@ static BOOL HTTP_ParseRfc1123Date(LPCWST - return FALSE; - } - -- while (iswspace(*ptr)) -+ while (isspaceW(*ptr)) - ptr++; - -- num = wcstoul(ptr, &nextPtr, 10); -+ num = strtoulW(ptr, &nextPtr, 10); - if (!nextPtr || nextPtr <= ptr || num < 1601 || num > 30827) - { - ERR("unexpected year %s\n", debugstr_w(value)); -@@ -4507,10 +4509,10 @@ static BOOL HTTP_ParseRfc1123Date(LPCWST - if (!HTTP_ParseTime(&st, &ptr)) - return FALSE; - -- while (iswspace(*ptr)) -+ while (isspaceW(*ptr)) - ptr++; - -- if (wcscmp(ptr, gmt)) -+ if (strcmpW(ptr, gmt)) - { - ERR("unexpected time zone %s\n", debugstr_w(ptr)); - return FALSE; -@@ -4529,7 +4531,7 @@ static WORD HTTP_ParseWeekday(LPCWSTR da - { 's','a','t','u','r','d','a','y',0 }}; - unsigned int i; - for (i = 0; i < ARRAY_SIZE(days); i++) -- if (!wcsicmp(day, days[i])) -+ if (!strcmpiW(day, days[i])) - return i; - - /* Invalid */ -@@ -4544,7 +4546,7 @@ static BOOL HTTP_ParseRfc850Date(LPCWSTR - unsigned long num; - SYSTEMTIME st = { 0 }; - -- ptr = wcschr(value, ','); -+ ptr = strchrW(value, ','); - if (!ptr) - return FALSE; - if (ptr - value == 3) -@@ -4576,10 +4578,10 @@ static BOOL HTTP_ParseRfc850Date(LPCWSTR - } - ptr++; - -- while (iswspace(*ptr)) -+ while (isspaceW(*ptr)) - ptr++; - -- num = wcstoul(ptr, &nextPtr, 10); -+ num = strtoulW(ptr, &nextPtr, 10); - if (!nextPtr || nextPtr <= ptr || !num || num > 31) - { - ERR("unexpected day %s\n", debugstr_w(value)); -@@ -4613,7 +4615,7 @@ static BOOL HTTP_ParseRfc850Date(LPCWSTR - } - ptr++; - -- num = wcstoul(ptr, &nextPtr, 10); -+ num = strtoulW(ptr, &nextPtr, 10); - if (!nextPtr || nextPtr <= ptr || num < 1601 || num > 30827) - { - ERR("unexpected year %s\n", debugstr_w(value)); -@@ -4625,10 +4627,10 @@ static BOOL HTTP_ParseRfc850Date(LPCWSTR - if (!HTTP_ParseTime(&st, &ptr)) - return FALSE; - -- while (iswspace(*ptr)) -+ while (isspaceW(*ptr)) - ptr++; - -- if (wcscmp(ptr, gmt)) -+ if (strcmpW(ptr, gmt)) - { - ERR("unexpected time zone %s\n", debugstr_w(ptr)); - return FALSE; -@@ -4641,12 +4643,12 @@ static BOOL HTTP_ParseDate(LPCWSTR value - static const WCHAR zero[] = { '0',0 }; - BOOL ret; - -- if (!wcscmp(value, zero)) -+ if (!strcmpW(value, zero)) - { - ft->dwLowDateTime = ft->dwHighDateTime = 0; - ret = TRUE; - } -- else if (wcschr(value, ',')) -+ else if (strchrW(value, ',')) - { - ret = HTTP_ParseRfc1123Date(value, ft); - if (!ret) -@@ -4683,12 +4685,12 @@ static void HTTP_ProcessExpires(http_req - - for (ptr = ccHeader->lpszValue; ptr && *ptr; ) - { -- LPWSTR comma = wcschr(ptr, ','), end, equal; -+ LPWSTR comma = strchrW(ptr, ','), end, equal; - - if (comma) - end = comma; - else -- end = ptr + lstrlenW(ptr); -+ end = ptr + strlenW(ptr); - for (equal = end - 1; equal > ptr && *equal != '='; equal--) - ; - if (*equal == '=') -@@ -4696,12 +4698,12 @@ static void HTTP_ProcessExpires(http_req - static const WCHAR max_age[] = { - 'm','a','x','-','a','g','e',0 }; - -- if (!wcsnicmp(ptr, max_age, equal - ptr - 1)) -+ if (!strncmpiW(ptr, max_age, equal - ptr - 1)) - { - LPWSTR nextPtr; - unsigned long age; - -- age = wcstoul(equal + 1, &nextPtr, 10); -+ age = strtoulW(equal + 1, &nextPtr, 10); - if (nextPtr > equal + 1) - { - LARGE_INTEGER ft; -@@ -4720,7 +4722,7 @@ static void HTTP_ProcessExpires(http_req - if (comma) - { - ptr = comma + 1; -- while (iswspace(*ptr)) -+ while (isspaceW(*ptr)) - ptr++; - } - else -@@ -4782,11 +4784,11 @@ static void http_process_keep_alive(http - EnterCriticalSection( &req->headers_section ); - - if ((index = HTTP_GetCustomHeaderIndex(req, szConnection, 0, FALSE)) != -1) -- req->netconn->keep_alive = !wcsicmp(req->custHeaders[index].lpszValue, szKeepAlive); -+ req->netconn->keep_alive = !strcmpiW(req->custHeaders[index].lpszValue, szKeepAlive); - else if ((index = HTTP_GetCustomHeaderIndex(req, szProxy_Connection, 0, FALSE)) != -1) -- req->netconn->keep_alive = !wcsicmp(req->custHeaders[index].lpszValue, szKeepAlive); -+ req->netconn->keep_alive = !strcmpiW(req->custHeaders[index].lpszValue, szKeepAlive); - else -- req->netconn->keep_alive = !wcsicmp(req->version, g_szHttp1_1); -+ req->netconn->keep_alive = !strcmpiW(req->version, g_szHttp1_1); - - LeaveCriticalSection( &req->headers_section ); - } -@@ -4885,7 +4887,7 @@ static void set_content_length_header( h - {'C','o','n','t','e','n','t','-','L','e','n','g','t','h',':',' ','%','u','\r','\n',0}; - WCHAR buf[ARRAY_SIZE(fmtW) + 10]; - -- swprintf( buf, ARRAY_SIZE(buf), fmtW, len ); -+ sprintfW( buf, fmtW, len ); - HTTP_HttpAddRequestHeadersW( request, buf, ~0u, flags ); - } - -@@ -4919,7 +4921,7 @@ static DWORD HTTP_HttpSendRequestW(http_ - HTTP_ProcessHeader(request, hostW, request->server->canon_host_port, - HTTP_ADDREQ_FLAG_ADD_IF_NEW | HTTP_ADDHDR_FLAG_REQ); - -- if (dwContentLength || wcscmp(request->verb, szGET)) -+ if (dwContentLength || strcmpW(request->verb, szGET)) - { - set_content_length_header(request, dwContentLength, HTTP_ADDREQ_FLAG_ADD_IF_NEW); - request->bytesToWrite = dwContentLength; -@@ -4930,23 +4932,23 @@ static DWORD HTTP_HttpSendRequestW(http_ - static const WCHAR user_agent[] = {'U','s','e','r','-','A','g','e','n','t',':',' ','%','s','\r','\n',0}; - int len; - -- len = lstrlenW(request->session->appInfo->agent) + lstrlenW(user_agent); -+ len = strlenW(request->session->appInfo->agent) + strlenW(user_agent); - agent_header = heap_alloc(len * sizeof(WCHAR)); -- swprintf(agent_header, len, user_agent, request->session->appInfo->agent); -+ sprintfW(agent_header, user_agent, request->session->appInfo->agent); - -- HTTP_HttpAddRequestHeadersW(request, agent_header, lstrlenW(agent_header), HTTP_ADDREQ_FLAG_ADD_IF_NEW); -+ HTTP_HttpAddRequestHeadersW(request, agent_header, strlenW(agent_header), HTTP_ADDREQ_FLAG_ADD_IF_NEW); - heap_free(agent_header); - } - if (request->hdr.dwFlags & INTERNET_FLAG_PRAGMA_NOCACHE) - { - static const WCHAR pragma_nocache[] = {'P','r','a','g','m','a',':',' ','n','o','-','c','a','c','h','e','\r','\n',0}; -- HTTP_HttpAddRequestHeadersW(request, pragma_nocache, lstrlenW(pragma_nocache), HTTP_ADDREQ_FLAG_ADD_IF_NEW); -+ HTTP_HttpAddRequestHeadersW(request, pragma_nocache, strlenW(pragma_nocache), HTTP_ADDREQ_FLAG_ADD_IF_NEW); - } -- if ((request->hdr.dwFlags & INTERNET_FLAG_NO_CACHE_WRITE) && wcscmp(request->verb, szGET)) -+ if ((request->hdr.dwFlags & INTERNET_FLAG_NO_CACHE_WRITE) && strcmpW(request->verb, szGET)) - { - static const WCHAR cache_control[] = {'C','a','c','h','e','-','C','o','n','t','r','o','l',':', - ' ','n','o','-','c','a','c','h','e','\r','\n',0}; -- HTTP_HttpAddRequestHeadersW(request, cache_control, lstrlenW(cache_control), HTTP_ADDREQ_FLAG_ADD_IF_NEW); -+ HTTP_HttpAddRequestHeadersW(request, cache_control, strlenW(cache_control), HTTP_ADDREQ_FLAG_ADD_IF_NEW); - } - - /* add the headers the caller supplied */ -@@ -5111,7 +5113,7 @@ static DWORD HTTP_HttpSendRequestW(http_ - if(!new_url) - break; - -- if (wcscmp(request->verb, szGET) && wcscmp(request->verb, szHEAD) && -+ if (strcmpW(request->verb, szGET) && strcmpW(request->verb, szHEAD) && - request->status_code != HTTP_STATUS_REDIRECT_KEEP_VERB) - { - heap_free(request->verb); -@@ -5305,7 +5307,7 @@ static DWORD HTTP_HttpEndRequestW(http_r - if(!new_url) - break; - -- if (wcscmp(request->verb, szGET) && wcscmp(request->verb, szHEAD) && -+ if (strcmpW(request->verb, szGET) && strcmpW(request->verb, szHEAD) && - request->status_code != HTTP_STATUS_REDIRECT_KEEP_VERB) - { - heap_free(request->verb); -@@ -5530,7 +5532,7 @@ BOOL WINAPI HttpSendRequestExW(HINTERNET - if (lpBuffersIn->lpcszHeader) - { - if (lpBuffersIn->dwHeadersLength == ~0u) -- size = (lstrlenW( lpBuffersIn->lpcszHeader ) + 1) * sizeof(WCHAR); -+ size = (strlenW( lpBuffersIn->lpcszHeader ) + 1) * sizeof(WCHAR); - else - size = lpBuffersIn->dwHeadersLength * sizeof(WCHAR); - -@@ -5628,7 +5630,7 @@ BOOL WINAPI HttpSendRequestW(HINTERNET h - { - DWORD size; - -- if (dwHeaderLength == ~0u) size = (lstrlenW(lpszHeaders) + 1) * sizeof(WCHAR); -+ if (dwHeaderLength == ~0u) size = (strlenW(lpszHeaders) + 1) * sizeof(WCHAR); - else size = dwHeaderLength * sizeof(WCHAR); - - task->headers = heap_alloc(size); -@@ -5957,20 +5959,20 @@ static DWORD HTTP_GetResponseHeaders(htt - rc += buflen; - MultiByteToWideChar( CP_ACP, 0, bufferA, buflen, buffer, MAX_REPLY_LEN ); - /* check is this a status code line? */ -- if (!wcsncmp(buffer, g_szHttp1_0, 4)) -+ if (!strncmpW(buffer, g_szHttp1_0, 4)) - { - /* split the version from the status code */ -- status_code = wcschr( buffer, ' ' ); -+ status_code = strchrW( buffer, ' ' ); - if( !status_code ) - goto lend; - *status_code++=0; - - /* split the status code from the status text */ -- status_text = wcschr( status_code, ' ' ); -+ status_text = strchrW( status_code, ' ' ); - if( status_text ) - *status_text++=0; - -- request->status_code = wcstol(status_code, NULL, 10); -+ request->status_code = atoiW(status_code); - - TRACE("version [%s] status code [%s] status text [%s]\n", - debugstr_w(buffer), debugstr_w(status_code), debugstr_w(status_text) ); -@@ -6063,7 +6065,7 @@ static LPWSTR * HTTP_InterpretHttpHeader - - pTokenPair = heap_alloc_zero(sizeof(*pTokenPair)*3); - -- pszColon = wcschr(buffer, ':'); -+ pszColon = strchrW(buffer, ':'); - /* must have two tokens */ - if (!pszColon) - { -@@ -6084,7 +6086,7 @@ static LPWSTR * HTTP_InterpretHttpHeader - - /* skip colon */ - pszColon++; -- len = lstrlenW(pszColon); -+ len = strlenW(pszColon); - pTokenPair[1] = heap_alloc((len + 1) * sizeof(WCHAR)); - if (!pTokenPair[1]) - { -@@ -6193,8 +6195,8 @@ static DWORD HTTP_ProcessHeader(http_req - LPWSTR lpsztmp; - WCHAR ch = 0; - INT len = 0; -- INT origlen = lstrlenW(lphttpHdr->lpszValue); -- INT valuelen = lstrlenW(value); -+ INT origlen = strlenW(lphttpHdr->lpszValue); -+ INT valuelen = strlenW(value); - - if (dwModifier & HTTP_ADDHDR_FLAG_COALESCE_WITH_COMMA) - { -@@ -6252,7 +6254,7 @@ static INT HTTP_GetCustomHeaderIndex(htt - - for (index = 0; index < request->nCustHeaders; index++) - { -- if (wcsicmp(request->custHeaders[index].lpszField, lpszField)) -+ if (strcmpiW(request->custHeaders[index].lpszField, lpszField)) - continue; - - if (request_only && !(request->custHeaders[index].wFlags & HDR_ISREQUEST)) ---- a/dlls/wininet/internet.c -+++ b/dlls/wininet/internet.c -@@ -26,6 +26,8 @@ - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -+#include "config.h" -+ - #include "winsock2.h" - #include "ws2ipdef.h" - -@@ -35,7 +37,6 @@ - #include - #include - #include --#include - - #include "windef.h" - #include "winbase.h" -@@ -57,6 +58,8 @@ - #include "internet.h" - #include "resource.h" - -+#include "wine/unicode.h" -+ - WINE_DEFAULT_DEBUG_CHANNEL(wininet); - - typedef struct -@@ -394,11 +397,11 @@ WCHAR *INTERNET_FindProxyForProtocol(LPC - { - LPCWSTR end, equal; - -- if (!(end = wcschr(ptr, ' '))) -- end = ptr + lstrlenW(ptr); -- if ((equal = wcschr(ptr, '=')) && equal < end && -- equal - ptr == lstrlenW(proto) && -- !wcsnicmp(proto, ptr, lstrlenW(proto))) -+ if (!(end = strchrW(ptr, ' '))) -+ end = ptr + strlenW(ptr); -+ if ((equal = strchrW(ptr, '=')) && equal < end && -+ equal - ptr == strlenW(proto) && -+ !strncmpiW(proto, ptr, strlenW(proto))) - { - ret = heap_strndupW(equal + 1, end - equal - 1); - TRACE("found proxy for %s: %s\n", debugstr_w(proto), debugstr_w(ret)); -@@ -415,9 +418,9 @@ WCHAR *INTERNET_FindProxyForProtocol(LPC - { - LPCWSTR end; - -- if (!(end = wcschr(ptr, ' '))) -- end = ptr + lstrlenW(ptr); -- if (!wcschr(ptr, '=')) -+ if (!(end = strchrW(ptr, ' '))) -+ end = ptr + strlenW(ptr); -+ if (!strchrW(ptr, '=')) - { - ret = heap_strndupW(ptr, end - ptr); - TRACE("found proxy for %s: %s\n", debugstr_w(proto), debugstr_w(ret)); -@@ -507,7 +510,7 @@ static BOOL parse_proxy_url( proxyinfo_t - return TRUE; - } - if (!(info->proxy = heap_alloc( (uc.dwHostNameLength + 12) * sizeof(WCHAR) ))) return FALSE; -- swprintf( info->proxy, uc.dwHostNameLength + 12, fmt, uc.dwHostNameLength, uc.lpszHostName, uc.nPort ); -+ sprintfW( info->proxy, fmt, uc.dwHostNameLength, uc.lpszHostName, uc.nPort ); - - if (!uc.dwUserNameLength) info->proxyUsername = NULL; - else if (!(info->proxyUsername = heap_strndupW( uc.lpszUserName, uc.dwUserNameLength ))) -@@ -590,13 +593,13 @@ static LONG INTERNET_LoadProxySettings( - RegQueryValueExW( key, szProxyServer, NULL, &type, (BYTE*)szProxy, &len ); - - /* find the http proxy, and strip away everything else */ -- p = wcsstr( szProxy, szHttp ); -+ p = strstrW( szProxy, szHttp ); - if (p) - { - p += lstrlenW( szHttp ); - lstrcpyW( szProxy, p ); - } -- p = wcschr( szProxy, ';' ); -+ p = strchrW( szProxy, ';' ); - if (p) *p = 0; - - FreeProxyInfo( lpwpi ); -@@ -823,14 +826,14 @@ static DWORD APPINFO_QueryOption(object_ - bufsize = *size; - - if (unicode) { -- DWORD len = ai->agent ? lstrlenW(ai->agent) : 0; -+ DWORD len = ai->agent ? strlenW(ai->agent) : 0; - - *size = (len + 1) * sizeof(WCHAR); - if(!buffer || bufsize < *size) - return ERROR_INSUFFICIENT_BUFFER; - - if (ai->agent) -- lstrcpyW(buffer, ai->agent); -+ strcpyW(buffer, ai->agent); - else - *(WCHAR *)buffer = 0; - /* If the buffer is copied, the returned length doesn't include -@@ -1619,7 +1622,7 @@ static INTERNET_SCHEME GetInternetScheme - return INTERNET_SCHEME_UNKNOWN; - - for (i = 0; i < ARRAY_SIZE(url_schemes); i++) -- if (!wcsnicmp(lpszScheme, url_schemes[i], nMaxCmp)) -+ if (!strncmpiW(lpszScheme, url_schemes[i], nMaxCmp)) - return INTERNET_SCHEME_FIRST + i; - - return INTERNET_SCHEME_UNKNOWN; -@@ -1647,7 +1650,7 @@ BOOL WINAPI InternetCrackUrlW(const WCHA - LPCWSTR lpszcp = NULL, lpszNetLoc; - - TRACE("(%s %u %x %p)\n", -- lpszUrl ? debugstr_wn(lpszUrl, dwUrlLength ? dwUrlLength : lstrlenW(lpszUrl)) : "(null)", -+ lpszUrl ? debugstr_wn(lpszUrl, dwUrlLength ? dwUrlLength : strlenW(lpszUrl)) : "(null)", - dwUrlLength, dwFlags, lpUC); - - if (!lpszUrl || !*lpszUrl || !lpUC) -@@ -1655,7 +1658,7 @@ BOOL WINAPI InternetCrackUrlW(const WCHA - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } -- if (!dwUrlLength) dwUrlLength = lstrlenW(lpszUrl); -+ if (!dwUrlLength) dwUrlLength = strlenW(lpszUrl); - - if (dwFlags & ICU_DECODE) - { -@@ -1694,7 +1697,7 @@ BOOL WINAPI InternetCrackUrlW(const WCHA - /* Determine if the URI is absolute. */ - while (lpszap - lpszUrl < dwUrlLength) - { -- if (iswalnum(*lpszap) || *lpszap == '+' || *lpszap == '.' || *lpszap == '-') -+ if (isalnumW(*lpszap) || *lpszap == '+' || *lpszap == '.' || *lpszap == '-') - { - lpszap++; - continue; -@@ -1721,9 +1724,9 @@ BOOL WINAPI InternetCrackUrlW(const WCHA - lpUC->nPort = INTERNET_INVALID_PORT_NUMBER; - - /* Parse */ -- lpszParam = wmemchr(lpszap, '?', dwUrlLength - (lpszap - lpszUrl)); -+ lpszParam = memchrW(lpszap, '?', dwUrlLength - (lpszap - lpszUrl)); - if(!lpszParam) -- lpszParam = wmemchr(lpszap, '#', dwUrlLength - (lpszap - lpszUrl)); -+ lpszParam = memchrW(lpszap, '#', dwUrlLength - (lpszap - lpszUrl)); - - if(!set_url_component(&lpUC->lpszExtraInfo, &lpUC->dwExtraInfoLength, - lpszParam, lpszParam ? dwUrlLength-(lpszParam-lpszUrl) : 0)) -@@ -1743,7 +1746,7 @@ BOOL WINAPI InternetCrackUrlW(const WCHA - { - lpszcp += 2; - -- lpszNetLoc = wmemchr(lpszcp, '/', dwUrlLength - (lpszcp - lpszUrl)); -+ lpszNetLoc = memchrW(lpszcp, '/', dwUrlLength - (lpszcp - lpszUrl)); - if (lpszParam) - { - if (lpszNetLoc) -@@ -1763,7 +1766,7 @@ BOOL WINAPI InternetCrackUrlW(const WCHA - /* [[<:password>]@][:] */ - /* First find the user and password if they exist */ - -- lpszHost = wmemchr(lpszcp, '@', dwUrlLength - (lpszcp - lpszUrl)); -+ lpszHost = memchrW(lpszcp, '@', dwUrlLength - (lpszcp - lpszUrl)); - if (lpszHost == NULL || lpszHost > lpszNetLoc) - { - /* username and password not specified. */ -@@ -1829,7 +1832,7 @@ BOOL WINAPI InternetCrackUrlW(const WCHA - if(!set_url_component(&lpUC->lpszHostName, &lpUC->dwHostNameLength, lpszHost, lpszPort - lpszHost)) - return FALSE; - if (lpszPort != lpszNetLoc) -- lpUC->nPort = wcstol(++lpszPort, NULL, 10); -+ lpUC->nPort = atoiW(++lpszPort); - else switch (lpUC->nScheme) - { - case INTERNET_SCHEME_HTTP: -@@ -1874,7 +1877,7 @@ BOOL WINAPI InternetCrackUrlW(const WCHA - /* Leave the parameter list in lpszUrlPath. Strip off any trailing - * newlines if necessary. - */ -- LPWSTR lpsznewline = wmemchr(lpszcp, '\n', dwUrlLength - (lpszcp - lpszUrl)); -+ LPWSTR lpsznewline = memchrW(lpszcp, '\n', dwUrlLength - (lpszcp - lpszUrl)); - if (lpsznewline != NULL) - len = lpsznewline - lpszcp; - else -@@ -3347,7 +3350,7 @@ BOOL WINAPI InternetTimeFromSystemTimeW( - return FALSE; - } - -- swprintf( string, size, date, -+ sprintfW( string, date, - WININET_wkday[time->wDayOfWeek], - time->wDay, - WININET_month[time->wMonth - 1], -@@ -3398,13 +3401,15 @@ BOOL WINAPI InternetTimeToSystemTimeW( L - * a SYSTEMTIME structure. - */ - -- while (*s && !iswalpha( *s )) s++; -+ while (*s && !isalphaW( *s )) s++; - if (s[0] == '\0' || s[1] == '\0' || s[2] == '\0') return TRUE; - time->wDayOfWeek = 7; - - for (i = 0; i < 7; i++) - { -- if (!wcsnicmp( WININET_wkday[i], s, 3 )) -+ if (toupperW( WININET_wkday[i][0] ) == toupperW( s[0] ) && -+ toupperW( WININET_wkday[i][1] ) == toupperW( s[1] ) && -+ toupperW( WININET_wkday[i][2] ) == toupperW( s[2] ) ) - { - time->wDayOfWeek = i; - break; -@@ -3412,17 +3417,19 @@ BOOL WINAPI InternetTimeToSystemTimeW( L - } - - if (time->wDayOfWeek > 6) return TRUE; -- while (*s && !iswdigit( *s )) s++; -- time->wDay = wcstol( s, &end, 10 ); -+ while (*s && !isdigitW( *s )) s++; -+ time->wDay = strtolW( s, &end, 10 ); - s = end; - -- while (*s && !iswalpha( *s )) s++; -+ while (*s && !isalphaW( *s )) s++; - if (s[0] == '\0' || s[1] == '\0' || s[2] == '\0') return TRUE; - time->wMonth = 0; - - for (i = 0; i < 12; i++) - { -- if (!wcsnicmp( WININET_month[i], s, 3 )) -+ if (toupperW( WININET_month[i][0]) == toupperW( s[0] ) && -+ toupperW( WININET_month[i][1]) == toupperW( s[1] ) && -+ toupperW( WININET_month[i][2]) == toupperW( s[2] ) ) - { - time->wMonth = i + 1; - break; -@@ -3430,24 +3437,24 @@ BOOL WINAPI InternetTimeToSystemTimeW( L - } - if (time->wMonth == 0) return TRUE; - -- while (*s && !iswdigit( *s )) s++; -+ while (*s && !isdigitW( *s )) s++; - if (*s == '\0') return TRUE; -- time->wYear = wcstol( s, &end, 10 ); -+ time->wYear = strtolW( s, &end, 10 ); - s = end; - -- while (*s && !iswdigit( *s )) s++; -+ while (*s && !isdigitW( *s )) s++; - if (*s == '\0') return TRUE; -- time->wHour = wcstol( s, &end, 10 ); -+ time->wHour = strtolW( s, &end, 10 ); - s = end; - -- while (*s && !iswdigit( *s )) s++; -+ while (*s && !isdigitW( *s )) s++; - if (*s == '\0') return TRUE; -- time->wMinute = wcstol( s, &end, 10 ); -+ time->wMinute = strtolW( s, &end, 10 ); - s = end; - -- while (*s && !iswdigit( *s )) s++; -+ while (*s && !isdigitW( *s )) s++; - if (*s == '\0') return TRUE; -- time->wSecond = wcstol( s, &end, 10 ); -+ time->wSecond = strtolW( s, &end, 10 ); - s = end; - - time->wMilliseconds = 0; -@@ -3622,7 +3629,7 @@ static HINTERNET INTERNET_InternetOpenUr - urlComponents.dwPasswordLength = 1; - urlComponents.dwUrlPathLength = 1; - urlComponents.dwExtraInfoLength = 1; -- if(!InternetCrackUrlW(lpszUrl, lstrlenW(lpszUrl), 0, &urlComponents)) -+ if(!InternetCrackUrlW(lpszUrl, strlenW(lpszUrl), 0, &urlComponents)) - return NULL; - - if ((urlComponents.nScheme == INTERNET_SCHEME_HTTP || urlComponents.nScheme == INTERNET_SCHEME_HTTPS) && -@@ -4170,7 +4177,7 @@ BOOL WINAPI InternetCombineUrlW(LPCWSTR - #define MAX_WORD_DIGITS 5 - - #define URL_GET_COMP_LENGTH(url, component) ((url)->dw##component##Length ? \ -- (url)->dw##component##Length : lstrlenW((url)->lpsz##component)) -+ (url)->dw##component##Length : strlenW((url)->lpsz##component)) - #define URL_GET_COMP_LENGTHA(url, component) ((url)->dw##component##Length ? \ - (url)->dw##component##Length : strlen((url)->lpsz##component)) - -@@ -4242,7 +4249,7 @@ static BOOL calc_url_length(LPURL_COMPON - if (nScheme == INTERNET_SCHEME_DEFAULT) - nScheme = INTERNET_SCHEME_HTTP; - scheme = INTERNET_GetSchemeString(nScheme); -- *lpdwUrlLength += lstrlenW(scheme); -+ *lpdwUrlLength += strlenW(scheme); - } - - (*lpdwUrlLength)++; /* ':' */ -@@ -4433,7 +4440,6 @@ BOOL WINAPI InternetCreateUrlW(LPURL_COM - { - DWORD dwLen; - INTERNET_SCHEME nScheme; -- WCHAR *start = lpszUrl; - - static const WCHAR slashSlashW[] = {'/','/'}; - static const WCHAR fmtW[] = {'%','u',0}; -@@ -4478,7 +4484,7 @@ BOOL WINAPI InternetCreateUrlW(LPURL_COM - nScheme = INTERNET_SCHEME_HTTP; - - scheme = INTERNET_GetSchemeString(nScheme); -- dwLen = lstrlenW(scheme); -+ dwLen = strlenW(scheme); - memcpy(lpszUrl, scheme, dwLen * sizeof(WCHAR)); - lpszUrl += dwLen; - } -@@ -4523,7 +4529,7 @@ BOOL WINAPI InternetCreateUrlW(LPURL_COM - { - *lpszUrl = ':'; - lpszUrl++; -- lpszUrl += swprintf(lpszUrl, *lpdwUrlLength - (lpszUrl - start), fmtW, lpUrlComponents->nPort); -+ lpszUrl += sprintfW(lpszUrl, fmtW, lpUrlComponents->nPort); - } - - /* add slash between hostname and path if necessary */ ---- a/dlls/wininet/internet.h -+++ b/dlls/wininet/internet.h -@@ -23,6 +23,7 @@ - #ifndef _WINE_INTERNET_H_ - #define _WINE_INTERNET_H_ - -+#include "wine/unicode.h" - #include "wine/heap.h" - #include "wine/list.h" - -@@ -101,7 +102,7 @@ static inline LPWSTR heap_strdupW(LPCWST - if(str) { - DWORD size; - -- size = (lstrlenW(str)+1)*sizeof(WCHAR); -+ size = (strlenW(str)+1)*sizeof(WCHAR); - ret = heap_alloc(size); - if(ret) - memcpy(ret, str, size); -@@ -208,7 +209,7 @@ static inline substr_t substr(const WCHA - - static inline substr_t substrz(const WCHAR *str) - { -- return substr(str, lstrlenW(str)); -+ return substr(str, strlenW(str)); - } - - static inline void WININET_find_data_WtoA(LPWIN32_FIND_DATAW dataW, LPWIN32_FIND_DATAA dataA) ---- a/dlls/wininet/netconnection.c -+++ b/dlls/wininet/netconnection.c -@@ -32,6 +32,7 @@ - #include - #include - -+#include "wine/library.h" - #include "windef.h" - #include "winbase.h" - #include "wininet.h" ---- a/dlls/wininet/urlcache.c -+++ b/dlls/wininet/urlcache.c -@@ -45,6 +45,8 @@ - #include "shellapi.h" - - #include "internet.h" -+ -+#include "wine/unicode.h" - #include "wine/debug.h" - - WINE_DEFAULT_DEBUG_CHANNEL(wininet); -@@ -484,8 +486,8 @@ static DWORD cache_container_set_size(ca - urlcache_create_hash_table(header, NULL, &hashtable_entry); - - /* Last step - create the directories */ -- lstrcpyW(dir_path, container->path); -- dir_name = dir_path + lstrlenW(dir_path); -+ strcpyW(dir_path, container->path); -+ dir_name = dir_path + strlenW(dir_path); - dir_name[8] = 0; - - GetSystemTimeAsFileTime(&ft); -@@ -609,8 +611,8 @@ static DWORD cache_container_open_index( - return ERROR_SUCCESS; - } - -- lstrcpyW(index_path, container->path); -- lstrcatW(index_path, index_dat); -+ strcpyW(index_path, container->path); -+ strcatW(index_path, index_dat); - - file = CreateFileW(index_path, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, 0, NULL); - if(file == INVALID_HANDLE_VALUE) { -@@ -777,8 +779,8 @@ static void cache_containers_init(void) - ERR("Couldn't get path for default container %u\n", i); - continue; - } -- path_len = lstrlenW(wszCachePath); -- suffix_len = lstrlenW(DefaultContainerData[i].shpath_suffix); -+ path_len = strlenW(wszCachePath); -+ suffix_len = strlenW(DefaultContainerData[i].shpath_suffix); - - if (path_len + suffix_len + 2 > MAX_PATH) - { -@@ -789,7 +791,7 @@ static void cache_containers_init(void) - wszCachePath[path_len] = '\\'; - wszCachePath[path_len+1] = 0; - -- lstrcpyW(wszMutexName, wszCachePath); -+ strcpyW(wszMutexName, wszCachePath); - - if (suffix_len) - { -@@ -982,7 +984,7 @@ static BOOL urlcache_create_file_pathW( - BOOL trunc_name) - { - LONG nRequired; -- int path_len = lstrlenW(pContainer->path); -+ int path_len = strlenW(pContainer->path); - int file_name_len = MultiByteToWideChar(CP_ACP, 0, szLocalFileName, -1, NULL, 0); - if (Directory!=CACHE_CONTAINER_NO_SUBDIR && Directory>=pHeader->dirs_no) - { -@@ -1720,10 +1722,10 @@ static BOOL cache_container_delete_dir(L - SHFILEOPSTRUCTW shfos; - int ret; - -- path_len = lstrlenW(lpszPath); -+ path_len = strlenW(lpszPath); - if (path_len >= MAX_PATH) - return FALSE; -- lstrcpyW(path, lpszPath); -+ strcpyW(path, lpszPath); - path[path_len + 1] = 0; /* double-NUL-terminate path */ - - shfos.hwnd = NULL; -@@ -2329,7 +2331,7 @@ static DWORD urlcache_rate_entry(entry_u - return rating; - } - --static int __cdecl dword_cmp(const void *p1, const void *p2) -+static int dword_cmp(const void *p1, const void *p2) - { - return *(const DWORD*)p1 - *(const DWORD*)p2; - } -@@ -2365,7 +2367,7 @@ BOOL WINAPI FreeUrlCacheSpaceW(LPCWSTR c - } - - if(cache_path) { -- path_len = lstrlenW(cache_path); -+ path_len = strlenW(cache_path); - if(cache_path[path_len-1] == '\\') - path_len--; - }else { -@@ -2377,7 +2379,7 @@ BOOL WINAPI FreeUrlCacheSpaceW(LPCWSTR c - { - /* When cache_path==NULL only clean Temporary Internet Files */ - if((!path_len && container->cache_prefix[0]==0) || -- (path_len && !wcsnicmp(container->path, cache_path, path_len) && -+ (path_len && !strncmpiW(container->path, cache_path, path_len) && - (container->path[path_len]=='\0' || container->path[path_len]=='\\'))) - { - BOOL ret_del; -@@ -2410,7 +2412,7 @@ BOOL WINAPI FreeUrlCacheSpaceW(LPCWSTR c - FILETIME cur_time; - - if((path_len || container->cache_prefix[0]!=0) && -- (!path_len || wcsnicmp(container->path, cache_path, path_len) || -+ (!path_len || strncmpiW(container->path, cache_path, path_len) || - (container->path[path_len]!='\0' && container->path[path_len]!='\\'))) - continue; - -@@ -2745,7 +2747,7 @@ static BOOL urlcache_entry_create(const - - /* Try to generate random name */ - GetSystemTimeAsFileTime(&ft); -- lstrcpyW(full_path+full_path_len+8, extW); -+ strcpyW(full_path+full_path_len+8, extW); - - for(i=0; i<255; i++) { - int j; -@@ -2901,7 +2903,7 @@ static BOOL urlcache_entry_commit(const - if(file_name) { - BOOL bFound = FALSE; - -- if(wcsncmp(file_name, container->path, lstrlenW(container->path))) { -+ if(strncmpW(file_name, container->path, lstrlenW(container->path))) { - ERR("path %s must begin with cache content path %s\n", debugstr_w(file_name), debugstr_w(container->path)); - cache_container_unlock_index(container, header); - SetLastError(ERROR_INVALID_PARAMETER); ---- a/dlls/wininet/utility.c -+++ b/dlls/wininet/utility.c -@@ -46,7 +46,7 @@ time_t ConvertTimeString(LPCWSTR asctime - WCHAR tmpChar[TIME_STRING_LEN]; - WCHAR *tmpChar2; - struct tm t; -- int timelen = lstrlenW(asctime); -+ int timelen = strlenW(asctime); - - if(!timelen) - return 0; -@@ -56,7 +56,7 @@ time_t ConvertTimeString(LPCWSTR asctime - lstrcpynW(tmpChar, asctime, TIME_STRING_LEN); - - /* Assert that the string is the expected length */ -- if (lstrlenW(asctime) >= TIME_STRING_LEN) FIXME("\n"); -+ if (strlenW(asctime) >= TIME_STRING_LEN) FIXME("\n"); - - /* Convert a time such as 'Mon, 15 Nov 1999 16:09:35 GMT' into a SYSTEMTIME structure - * We assume the time is in this format -@@ -71,11 +71,11 @@ time_t ConvertTimeString(LPCWSTR asctime - tmpChar[25]='\0'; - - memset( &t, 0, sizeof(t) ); -- t.tm_year = wcstol(tmpChar+12, NULL, 10) - 1900; -- t.tm_mday = wcstol(tmpChar+5, NULL, 10); -- t.tm_hour = wcstol(tmpChar+17, NULL, 10); -- t.tm_min = wcstol(tmpChar+20, NULL, 10); -- t.tm_sec = wcstol(tmpChar+23, NULL, 10); -+ t.tm_year = atoiW(tmpChar+12) - 1900; -+ t.tm_mday = atoiW(tmpChar+5); -+ t.tm_hour = atoiW(tmpChar+17); -+ t.tm_min = atoiW(tmpChar+20); -+ t.tm_sec = atoiW(tmpChar+23); - - /* and month */ - tmpChar2 = tmpChar + 8; diff -Nru wine-development-5.5/debian/patches/zlib/wininet3.patch wine-development-5.6/debian/patches/zlib/wininet3.patch --- wine-development-5.5/debian/patches/zlib/wininet3.patch 2020-06-19 09:19:15.000000000 +0000 +++ wine-development-5.6/debian/patches/zlib/wininet3.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -description: revert upstream msvcrt commit de5d147de8b3d9c2f65bcb6d5646320ef1d92e58 - ---- a/dlls/wininet/ftp.c -+++ b/dlls/wininet/ftp.c -@@ -3745,7 +3745,7 @@ static BOOL FTP_ParseNextFile(INT nSocke - - pszToken = strtok(NULL, szSpace); - if(!pszToken) continue; -- if(!stricmp(pszToken, "")) { -+ if(!_strnicmp(pszToken, "", -1)) { - lpfp->bIsDirectory = TRUE; - lpfp->nSize = 0; - TRACE("Is directory\n"); ---- a/dlls/wininet/internet.c -+++ b/dlls/wininet/internet.c -@@ -2386,7 +2386,7 @@ static BOOL is_domain_suffix( const char - int len_domain = strlen( domain ), len_suffix = strlen( suffix ); - - if (len_suffix > len_domain) return FALSE; -- if (!stricmp( domain + len_domain - len_suffix, suffix )) return TRUE; -+ if (!_strnicmp( domain + len_domain - len_suffix, suffix, -1 )) return TRUE; - return FALSE; - } - diff -Nru wine-development-5.5/debian/rules wine-development-5.6/debian/rules --- wine-development-5.5/debian/rules 2020-06-19 09:19:13.000000000 +0000 +++ wine-development-5.6/debian/rules 2021-02-16 22:24:32.000000000 +0000 @@ -38,15 +38,12 @@ # linker options export DEB_LDFLAGS_MAINT_APPEND+=-Wl,-rpath,/$(LIBDIR) -# ignore shift overflow warnings (currently only an issue on arm) -export DEB_CFLAGS_MAINT_APPEND+=-Wno-shift-overflow +# do not treat compiler warnings as errors +export DEB_CFLAGS_MAINT_APPEND+=-Wno-error # ignore all defined but unused function warnings export DEB_CFLAGS_MAINT_APPEND+=-Wno-unused-function -# ignore warning about deprecated CUPS API for now -export DEB_CFLAGS_MAINT_APPEND+=-Wno-deprecated-declarations - # configure options CONFLAGS=--with-gnutls \ --without-hal \ @@ -66,6 +63,9 @@ # enable wine64 on 64-bit architectures ifeq ($(DEB_HOST_ARCH_BITS), 64) CONFLAGS+=--enable-win64 +# set "-Wno-format" (many format strings are not yet updated for 64-bit) +export DEB_CFLAGS_MAINT_APPEND+=-Wno-format +export DEB_BUILD_MAINT_OPTIONS=hardening=+all,-fortify,-stackprotector,-format endif # build with mingw on intel architectures @@ -83,14 +83,11 @@ export DEB_LDFLAGS_MAINT_APPEND+=-march=armv5t endif -# on arm64 build using clang +# on arm64 build using clang and ignore compiler warnings ifeq ($(DEB_HOST_ARCH), arm64) export CC=clang export CXX=clang++ -export DEB_CFLAGS_MAINT_APPEND+=-Wno-absolute-value -export DEB_CFLAGS_MAINT_APPEND+=-Wno-enum-conversion -export DEB_CFLAGS_MAINT_APPEND+=-Wno-misleading-indentation -export DEB_CFLAGS_MAINT_APPEND+=-Wno-implicit-int-float-conversion +export DEB_CFLAGS_MAINT_APPEND+=-Wno-error endif # use date of the latest changelog update as the build date @@ -113,7 +110,7 @@ sed "s/VERSION/$(VERSION)/g;s/DEBSUFFIX/$(DEBSUFFIX)/g" < $< > $@ debian/libwine$(VERSION)%: debian/libwineVERSION% - sed s/VERSION/$(VERSION)/g < $< > $@ + sed "s/VERSION/$(VERSION)/g;s/DEB_HOST_MULTIARCH/$(DEB_HOST_MULTIARCH)/g;s/DEB_HOST_GNU_CPU/$(DEB_HOST_GNU_CPU)/g" < $< > $@ debian/bug-control: debian/bug-control.in sed s/VERSION/$(VERSION)/g < $< > $@ @@ -154,6 +151,10 @@ ln -sf ../../dlls/shell32/resources/folder_open.svg dlls/comdlg32/folder2.svg ln -sf ../../dlls/shell32/resources/disk_drive.svg dlls/comdlg32/floppy.svg ln -sf ../../dlls/shell32/resources/optical_drive.svg dlls/comdlg32/cdrom.svg +ifneq (,$(filter $(DEB_HOST_ARCH),i386 amd64)) + # ensure system zlib files are used for i386 and amd64 + rm -f dlls/*/zlib.h dlls/*/inflate.c dlls/*/deflate.c +endif # execute wine's configure script ./configure $(CONFLAGS) @@ -227,13 +228,14 @@ test -f debian/tmp/$(BINDIR)/wine-preloader || \ cp debian/scripts/wine-preloader debian/tmp/$(BINDIR) rm -rf debian/tmp/usr/share/man + rm -rf debian/tmp/usr/share/wine$(DEBSUFFIX)/wine/nls rm -f debian/tmp/usr/lib/*/wineserver rm -f debian/tmp/notepad*.man debian/tmp/winemine*.man override_dh_shlibdeps: mkdir -p debian/tmp - echo > debian/tmp/elf.recommends - ./debian/scripts/sonames2elf $(shell ./debian/scripts/config2sonames "libfontconfig|libfreetype|libncurses") > debian/tmp/elf.depends + ./debian/scripts/config2elf debian/tmp/elf.recommends + ./debian/scripts/config2elf debian/tmp/elf.depends "libfontconfig|libfreetype|libncurses" dpkg-shlibdeps --warnings=1 \ -pdlopen \ -dDepends -edebian/tmp/elf.depends \ @@ -241,6 +243,10 @@ -Tdebian/libwine$(VERSION).substvars 2>/dev/null dh_shlibdeps +override_dh_makeshlibs: + # avoid unnecessary calls to ldconfig + dh_makeshlibs -n + override_dh_bugfiles: dh_bugfiles -A @@ -254,6 +260,11 @@ override_dh_auto_clean: git clean -Xdf || true make -f debian/rules debian/control +ifeq (,$(filter $(DEB_HOST_ARCH),i386 amd64)) + # remove zlib patch on non x86 architectures + QUILT_PATCHES=debian/patches quilt pop -af || true + QUILT_PATCHES=debian/patches quilt delete system/zlib.patch || true +endif QUILT_PATCHES=debian/patches quilt push -af || true rm -f Makefile dh_auto_clean diff -Nru wine-development-5.5/debian/scripts/config2elf wine-development-5.6/debian/scripts/config2elf --- wine-development-5.5/debian/scripts/config2elf 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/debian/scripts/config2elf 2021-02-16 22:24:32.000000000 +0000 @@ -0,0 +1,15 @@ +#!/bin/sh -e + +if [ "$#" -eq "0" ]; then + echo "usage: $0 ELF [PATTERN...]" + exit 1 +fi +output=$1 +shift + +sonames=$(grep "^\#define SONAME_" include/config.h | cut -d\" -f2) +if [ "$#" -eq "0" ]; then + ./debian/scripts/sonames2elf $(echo "$sonames") > $output +else + ./debian/scripts/sonames2elf $(echo "$sonames" | grep -E "$@") > $output +fi diff -Nru wine-development-5.5/debian/scripts/config2sonames wine-development-5.6/debian/scripts/config2sonames --- wine-development-5.5/debian/scripts/config2sonames 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/scripts/config2sonames 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -#/bin/sh -e - -grep "^\#define SONAME_" include/config.h | grep -E "$@" | cut -d\" -f2 diff -Nru wine-development-5.5/debian/watch wine-development-5.6/debian/watch --- wine-development-5.5/debian/watch 2020-06-19 09:19:13.000000000 +0000 +++ wine-development-5.6/debian/watch 2021-02-16 22:24:32.000000000 +0000 @@ -1,3 +1,3 @@ -version=3 +version=4 opts="uversionmangle=s/-rc/~rc/,pgpsigurlmangle=s/$/.sign/" \ https://dl.winehq.org/wine/source/(\d+)\.(0*x*)/wine-(\d.*)\.tar\.xz diff -Nru wine-development-5.5/debian/wineVERSION.examples wine-development-5.6/debian/wineVERSION.examples --- wine-development-5.5/debian/wineVERSION.examples 2020-06-19 09:19:13.000000000 +0000 +++ wine-development-5.6/debian/wineVERSION.examples 2021-01-10 21:42:03.000000000 +0000 @@ -1 +1 @@ -usr/share/*/applications/wine.desktop +loader/wine.desktop diff -Nru wine-development-5.5/debian/wineVERSION.install wine-development-5.6/debian/wineVERSION.install --- wine-development-5.5/debian/wineVERSION.install 2020-06-19 09:19:14.000000000 +0000 +++ wine-development-5.6/debian/wineVERSION.install 2021-02-15 21:20:44.000000000 +0000 @@ -1,5 +1,14 @@ +# wine launcher debian/tmp/wineDEBSUFFIX usr/bin + +# wine application loader debian/tmp/wineapploader usr/lib/wineVERSION + +# wine icon debian/tmp/wineDEBSUFFIX.svg usr/share/icons/hicolor/scalable/apps/ +# application metadata debian/org.winehq.wineVERSION.appdata.xml usr/share/metainfo/ + +# language support files +nls/*.nls usr/share/wineVERSION/wine/nls/ diff -Nru wine-development-5.5/dlls/activeds/activeds.idl wine-development-5.6/dlls/activeds/activeds.idl --- wine-development-5.5/dlls/activeds/activeds.idl 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/activeds/activeds.idl 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,27 @@ +/* + * Copyright 2020 Dmitry Timoshkov + * + * 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 + */ + +#pragma makedep register + +[ + helpstring("ADs LDAP Pathname Descriptor Object"), + progid("Pathname"), + uuid(080d0d78-f421-11d0-a36e-00c04fb950dc), + threading(both) +] +coclass Pathname { interface IADsPathname; } diff -Nru wine-development-5.5/dlls/activeds/activeds.spec wine-development-5.6/dlls/activeds/activeds.spec --- wine-development-5.5/dlls/activeds/activeds.spec 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/activeds/activeds.spec 2020-04-10 18:54:32.000000000 +0000 @@ -23,6 +23,6 @@ 27 stub ConvertSecDescriptorToVariant 28 stub ConvertSecurityDescriptorToSecDes #@ stub DllCanUnloadNow -#@ stub DllGetClassObject +@ stdcall -private DllGetClassObject(ptr ptr ptr) #@ stub DllRegisterServer #@ stub DllUnregisterServer diff -Nru wine-development-5.5/dlls/activeds/Makefile.in wine-development-5.6/dlls/activeds/Makefile.in --- wine-development-5.5/dlls/activeds/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/activeds/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,7 +1,12 @@ MODULE = activeds.dll IMPORTLIB = activeds -IMPORTS = advapi32 ole32 oleaut32 +IMPORTS = advapi32 ole32 oleaut32 uuid EXTRADLLFLAGS = -mno-cygwin -C_SRCS = activeds_main.c +C_SRCS = \ + activeds_main.c \ + pathname.c + +IDL_SRCS = \ + activeds.idl diff -Nru wine-development-5.5/dlls/activeds/pathname.c wine-development-5.6/dlls/activeds/pathname.c --- wine-development-5.5/dlls/activeds/pathname.c 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/activeds/pathname.c 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,555 @@ +/* + * Copyright 2020 Dmitry Timoshkov + * + * This file contains only stubs to get the printui.dll up and running + * activeds.dll is much much more than this + * + * 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 + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "iads.h" +#include "adserr.h" + +#include "wine/heap.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(activeds); + +#include "initguid.h" +DEFINE_GUID(CLSID_Pathname,0x080d0d78,0xf421,0x11d0,0xa3,0x6e,0x00,0xc0,0x4f,0xb9,0x50,0xdc); + +typedef struct +{ + IADsPathname IADsPathname_iface; + LONG ref; + BSTR provider, server, dn; +} Pathname; + +static inline Pathname *impl_from_IADsPathname(IADsPathname *iface) +{ + return CONTAINING_RECORD(iface, Pathname, IADsPathname_iface); +} + +static HRESULT WINAPI path_QueryInterface(IADsPathname *iface, REFIID riid, void **obj) +{ + TRACE("%p,%s,%p\n", iface, debugstr_guid(riid), obj); + + if (!riid || !obj) return E_INVALIDARG; + + if (IsEqualGUID(riid, &IID_IUnknown) || + IsEqualGUID(riid, &IID_IDispatch) || + IsEqualGUID(riid, &IID_IADsPathname)) + { + IADsPathname_AddRef(iface); + *obj = iface; + return S_OK; + } + + FIXME("interface %s is not implemented\n", debugstr_guid(riid)); + return E_NOINTERFACE; +} + +static ULONG WINAPI path_AddRef(IADsPathname *iface) +{ + Pathname *path = impl_from_IADsPathname(iface); + return InterlockedIncrement(&path->ref); +} + +static ULONG WINAPI path_Release(IADsPathname *iface) +{ + Pathname *path = impl_from_IADsPathname(iface); + LONG ref = InterlockedDecrement(&path->ref); + + if (!ref) + { + TRACE("destroying %p\n", iface); + SysFreeString(path->provider); + SysFreeString(path->server); + SysFreeString(path->dn); + heap_free(path); + } + + return ref; +} + +static HRESULT WINAPI path_GetTypeInfoCount(IADsPathname *iface, UINT *count) +{ + FIXME("%p,%p: stub\n", iface, count); + return E_NOTIMPL; +} + +static HRESULT WINAPI path_GetTypeInfo(IADsPathname *iface, UINT index, LCID lcid, ITypeInfo **info) +{ + FIXME("%p,%u,%#x,%p: stub\n", iface, index, lcid, info); + return E_NOTIMPL; +} + +static HRESULT WINAPI path_GetIDsOfNames(IADsPathname *iface, REFIID riid, LPOLESTR *names, + UINT count, LCID lcid, DISPID *dispid) +{ + FIXME("%p,%s,%p,%u,%u,%p: stub\n", iface, debugstr_guid(riid), names, count, lcid, dispid); + return E_NOTIMPL; +} + +static HRESULT WINAPI path_Invoke(IADsPathname *iface, DISPID dispid, REFIID riid, LCID lcid, WORD flags, + DISPPARAMS *params, VARIANT *result, EXCEPINFO *excepinfo, UINT *argerr) +{ + FIXME("%p,%d,%s,%04x,%04x,%p,%p,%p,%p: stub\n", iface, dispid, debugstr_guid(riid), lcid, flags, + params, result, excepinfo, argerr); + return E_NOTIMPL; +} + +static HRESULT parse_path(BSTR path, BSTR *provider, BSTR *server, BSTR *dn) +{ + WCHAR *p, *p_server; + int server_len; + + *provider = NULL; + *server = NULL; + *dn = NULL; + + if (wcsnicmp(path, L"LDAP:", 5) != 0) + return E_ADS_BAD_PATHNAME; + + *provider = SysAllocStringLen(path, 4); + if (!*provider) return E_OUTOFMEMORY; + + p = path + 5; + if (!*p) return S_OK; + + if (*p++ != '/' || *p++ != '/' || !*p) + return E_ADS_BAD_PATHNAME; + + p_server = p; + server_len = 0; + while (*p && *p != '/') + { + p++; + server_len++; + } + if (server_len == 0) return E_ADS_BAD_PATHNAME; + + *server = SysAllocStringLen(p_server, server_len); + if (!*server) + { + SysFreeString(*provider); + return E_OUTOFMEMORY; + } + + if (!*p) return S_OK; + + if (*p++ != '/' || !*p) + { + SysFreeString(*provider); + SysFreeString(*server); + return E_ADS_BAD_PATHNAME; + } + + *dn = SysAllocString(p); + if (!*dn) + { + SysFreeString(*provider); + SysFreeString(*server); + return E_OUTOFMEMORY; + } + + return S_OK; +} + +static HRESULT WINAPI path_Set(IADsPathname *iface, BSTR adspath, LONG type) +{ + Pathname *path = impl_from_IADsPathname(iface); + HRESULT hr; + BSTR provider, server, dn; + + TRACE("%p,%s,%d\n", iface, debugstr_w(adspath), type); + + if (!adspath) return E_INVALIDARG; + + if (type == ADS_SETTYPE_PROVIDER) + { + SysFreeString(path->provider); + path->provider = SysAllocString(adspath); + return path->provider ? S_OK : E_OUTOFMEMORY; + } + + if (type == ADS_SETTYPE_SERVER) + { + SysFreeString(path->server); + path->server = SysAllocString(adspath); + return path->server ? S_OK : E_OUTOFMEMORY; + } + + if (type == ADS_SETTYPE_DN) + { + SysFreeString(path->dn); + path->dn = SysAllocString(adspath); + return path->dn ? S_OK : E_OUTOFMEMORY; + } + + if (type != ADS_SETTYPE_FULL) + { + FIXME("type %d not implemented\n", type); + return E_INVALIDARG; + } + + hr = parse_path(adspath, &provider, &server, &dn); + if (hr == S_OK) + { + SysFreeString(path->provider); + SysFreeString(path->server); + SysFreeString(path->dn); + + path->provider = provider; + path->server = server; + path->dn = dn; + } + return hr; +} + +static HRESULT WINAPI path_SetDisplayType(IADsPathname *iface, LONG type) +{ + FIXME("%p,%d: stub\n", iface, type); + return E_NOTIMPL; +} + +static HRESULT WINAPI path_Retrieve(IADsPathname *iface, LONG type, BSTR *adspath) +{ + Pathname *path = impl_from_IADsPathname(iface); + int len; + + TRACE("%p,%d,%p\n", iface, type, adspath); + + if (!adspath) return E_INVALIDARG; + + switch (type) + { + default: + FIXME("type %d not implemented\n", type); + /* fall through */ + + case ADS_FORMAT_X500: + len = wcslen(path->provider) + 3; + if (path->server) len += wcslen(path->server) + 1; + if (path->dn) len += wcslen(path->dn); + + *adspath = SysAllocStringLen(NULL, len); + if (!*adspath) break; + + wcscpy(*adspath, path->provider); + wcscat(*adspath, L"://"); + if (path->server) + { + wcscat(*adspath, path->server); + wcscat(*adspath, L"/"); + } + if (path->dn) wcscat(*adspath, path->dn); + break; + + case ADS_FORMAT_PROVIDER: + *adspath = SysAllocString(path->provider); + break; + + case ADS_FORMAT_SERVER: + *adspath = path->provider ? SysAllocString(path->server) : SysAllocStringLen(NULL, 0); + break; + + case ADS_FORMAT_X500_DN: + *adspath = path->dn ? SysAllocString(path->dn) : SysAllocStringLen(NULL, 0); + break; + + case ADS_FORMAT_LEAF: + if (!path->dn) + *adspath = SysAllocStringLen(NULL, 0); + else + { + WCHAR *p = wcschr(path->dn, ','); + *adspath = p ? SysAllocStringLen(path->dn, p - path->dn) : SysAllocString(path->dn); + } + break; + } + + TRACE("=> %s\n", debugstr_w(*adspath)); + return *adspath ? S_OK : E_OUTOFMEMORY; +} + +static HRESULT WINAPI path_GetNumElements(IADsPathname *iface, LONG *count) +{ + Pathname *path = impl_from_IADsPathname(iface); + WCHAR *p; + + TRACE("%p,%p\n", iface, count); + + if (!count) return E_INVALIDARG; + + *count = 0; + + p = path->dn; + while (p) + { + *count += 1; + p = wcschr(p, ','); + if (p) p++; + } + + return S_OK; +} + +static HRESULT WINAPI path_GetElement(IADsPathname *iface, LONG index, BSTR *element) +{ + Pathname *path = impl_from_IADsPathname(iface); + HRESULT hr; + WCHAR *p, *end; + LONG count; + + TRACE("%p,%d,%p\n", iface, index, element); + + if (!element) return E_INVALIDARG; + + count = 0; + hr = HRESULT_FROM_WIN32(ERROR_INVALID_INDEX); + + p = path->dn; + while (p) + { + end = wcschr(p, ','); + + if (index == count) + { + *element = end ? SysAllocStringLen(p, end - p) : SysAllocString(p); + hr = *element ? S_OK : E_OUTOFMEMORY; + break; + } + + p = end ? end + 1 : NULL; + count++; + } + + return hr; +} + +static HRESULT WINAPI path_AddLeafElement(IADsPathname *iface, BSTR element) +{ + FIXME("%p,%s: stub\n", iface, debugstr_w(element)); + return E_NOTIMPL; +} + +static HRESULT WINAPI path_RemoveLeafElement(IADsPathname *iface) +{ + FIXME("%p: stub\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI path_CopyPath(IADsPathname *iface, IDispatch **path) +{ + FIXME("%p,%p: stub\n", iface, path); + return E_NOTIMPL; +} + +static HRESULT WINAPI path_GetEscapedElement(IADsPathname *iface, LONG reserved, BSTR element, BSTR *str) +{ + FIXME("%p,%d,%s,%p: stub\n", iface, reserved, debugstr_w(element), str); + return E_NOTIMPL; +} + +static HRESULT WINAPI path_get_EscapedMode(IADsPathname *iface, LONG *mode) +{ + FIXME("%p,%p: stub\n", iface, mode); + return E_NOTIMPL; +} + +static HRESULT WINAPI path_put_EscapedMode(IADsPathname *iface, LONG mode) +{ + FIXME("%p,%d: stub\n", iface, mode); + return E_NOTIMPL; +} + +static const IADsPathnameVtbl IADsPathname_vtbl = +{ + path_QueryInterface, + path_AddRef, + path_Release, + path_GetTypeInfoCount, + path_GetTypeInfo, + path_GetIDsOfNames, + path_Invoke, + path_Set, + path_SetDisplayType, + path_Retrieve, + path_GetNumElements, + path_GetElement, + path_AddLeafElement, + path_RemoveLeafElement, + path_CopyPath, + path_GetEscapedElement, + path_get_EscapedMode, + path_put_EscapedMode +}; + +static HRESULT Pathname_create(REFIID riid, void **obj) +{ + Pathname *path; + HRESULT hr; + + path = heap_alloc(sizeof(*path)); + if (!path) return E_OUTOFMEMORY; + + path->IADsPathname_iface.lpVtbl = &IADsPathname_vtbl; + path->ref = 1; + path->provider = SysAllocString(L"LDAP"); + path->server = NULL; + path->dn = NULL; + + hr = IADsPathname_QueryInterface(&path->IADsPathname_iface, riid, obj); + IADsPathname_Release(&path->IADsPathname_iface); + + return hr; +} + +static const struct class_info +{ + const CLSID *clsid; + HRESULT (*constructor)(REFIID, void **); +} class_info[] = +{ + { &CLSID_Pathname, Pathname_create } +}; + +typedef struct +{ + IClassFactory IClassFactory_iface; + LONG ref; + const struct class_info *info; +} class_factory; + +static inline class_factory *impl_from_IClassFactory(IClassFactory *iface) +{ + return CONTAINING_RECORD(iface, class_factory, IClassFactory_iface); +} + +static HRESULT WINAPI factory_QueryInterface(IClassFactory *iface, REFIID riid, LPVOID *obj) +{ + TRACE("%p,%s,%p\n", iface, debugstr_guid(riid), obj); + + if (!riid || !obj) return E_INVALIDARG; + + if (IsEqualIID(riid, &IID_IUnknown) || + IsEqualIID(riid, &IID_IClassFactory)) + { + IClassFactory_AddRef(iface); + *obj = iface; + return S_OK; + } + + *obj = NULL; + FIXME("interface %s is not implemented\n", debugstr_guid(riid)); + return E_NOINTERFACE; +} + +static ULONG WINAPI factory_AddRef(IClassFactory *iface) +{ + class_factory *factory = impl_from_IClassFactory(iface); + ULONG ref = InterlockedIncrement(&factory->ref); + + TRACE("(%p) ref %u\n", iface, ref); + + return ref; +} + +static ULONG WINAPI factory_Release(IClassFactory *iface) +{ + class_factory *factory = impl_from_IClassFactory(iface); + ULONG ref = InterlockedDecrement(&factory->ref); + + TRACE("(%p) ref %u\n", iface, ref); + + if (!ref) + heap_free(factory); + + return ref; +} + +static HRESULT WINAPI factory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **obj) +{ + class_factory *factory = impl_from_IClassFactory(iface); + + TRACE("%p,%s,%p\n", outer, debugstr_guid(riid), obj); + + if (!riid || !obj) return E_INVALIDARG; + + *obj = NULL; + if (outer) return CLASS_E_NOAGGREGATION; + + return factory->info->constructor(riid, obj); +} + +static HRESULT WINAPI factory_LockServer(IClassFactory *iface, BOOL lock) +{ + FIXME("%p,%d: stub\n", iface, lock); + return S_OK; +} + +static const struct IClassFactoryVtbl factory_vtbl = +{ + factory_QueryInterface, + factory_AddRef, + factory_Release, + factory_CreateInstance, + factory_LockServer +}; + +static HRESULT factory_constructor(const struct class_info *info, REFIID riid, void **obj) +{ + class_factory *factory; + HRESULT hr; + + factory = heap_alloc(sizeof(*factory)); + if (!factory) return E_OUTOFMEMORY; + + factory->IClassFactory_iface.lpVtbl = &factory_vtbl; + factory->ref = 1; + factory->info = info; + + hr = IClassFactory_QueryInterface(&factory->IClassFactory_iface, riid, obj); + IClassFactory_Release(&factory->IClassFactory_iface); + + return hr; +} + +HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, LPVOID *obj) +{ + int i; + + TRACE("%s,%s,%p\n", debugstr_guid(clsid), debugstr_guid(iid), obj); + + if (!clsid || !iid || !obj) return E_INVALIDARG; + + *obj = NULL; + + for (i = 0; i < ARRAY_SIZE(class_info); i++) + { + if (IsEqualCLSID(class_info[i].clsid, clsid)) + return factory_constructor(&class_info[i], iid, obj); + } + + FIXME("class %s/%s is not implemented\n", debugstr_guid(clsid), debugstr_guid(iid)); + return CLASS_E_CLASSNOTAVAILABLE; +} diff -Nru wine-development-5.5/dlls/activeds/tests/activeds.c wine-development-5.6/dlls/activeds/tests/activeds.c --- wine-development-5.5/dlls/activeds/tests/activeds.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/activeds/tests/activeds.c 2020-04-10 18:54:32.000000000 +0000 @@ -19,15 +19,20 @@ #include #include +#define COBJMACROS + #include "windef.h" #include "winbase.h" #include "objbase.h" +#include "initguid.h" #include "iads.h" #include "adshlp.h" #include "adserr.h" #include "wine/test.h" +DEFINE_GUID(CLSID_Pathname,0x080d0d78,0xf421,0x11d0,0xa3,0x6e,0x00,0xc0,0x4f,0xb9,0x50,0xdc); + static void test_ADsBuildVarArrayStr(void) { const WCHAR *props[] = { L"prop1", L"prop2" }; @@ -79,7 +84,89 @@ VariantClear(&var); } +static void test_Pathname(void) +{ + static const WCHAR * const elem[3] = { L"a=b",L"c=d",L"e=f" }; + HRESULT hr; + IADsPathname *path; + BSTR bstr; + LONG count, i; + + hr = CoCreateInstance(&CLSID_Pathname, 0, CLSCTX_INPROC_SERVER, &IID_IADsPathname, (void **)&path); + ok(hr == S_OK, "got %#x\n", hr); + + count = 0xdeadbeef; + hr = IADsPathname_GetNumElements(path, &count); + ok(hr == S_OK, "got %#x\n", hr); + ok(count == 0, "got %d\n", count); + + bstr = NULL; + hr = IADsPathname_Retrieve(path, ADS_FORMAT_X500, &bstr); + ok(hr == S_OK, "got %#x\n", hr); + ok(bstr && !wcscmp(bstr, L"LDAP://"), "got %s\n", wine_dbgstr_w(bstr)); + SysFreeString(bstr); + + bstr = SysAllocString(L"LDAP://sample"); + hr = IADsPathname_Set(path, bstr, ADS_SETTYPE_FULL); + ok(hr == S_OK, "got %#x\n", hr); + SysFreeString(bstr); + + count = 0xdeadbeef; + hr = IADsPathname_GetNumElements(path, &count); + ok(hr == S_OK, "got %#x\n", hr); + ok(count == 0, "got %d\n", count); + + hr = IADsPathname_GetElement(path, 0, &bstr); + ok(hr == HRESULT_FROM_WIN32(ERROR_INVALID_INDEX), "got %#x\n", hr); + SysFreeString(bstr); + + bstr = SysAllocString(L"LDAP://sample:123/a=b,c=d,e=f"); + hr = IADsPathname_Set(path, bstr, ADS_SETTYPE_FULL); + ok(hr == S_OK, "got %#x\n", hr); + SysFreeString(bstr); + + count = 0xdeadbeef; + hr = IADsPathname_GetNumElements(path, &count); + ok(hr == S_OK, "got %#x\n", hr); + ok(count == 3, "got %d\n", count); + + for (i = 0; i < count; i++) + { + hr = IADsPathname_GetElement(path, i, &bstr); + ok(hr == S_OK, "got %#x\n", hr); + ok(!wcscmp(bstr, elem[i]), "%u: %s\n", i, wine_dbgstr_w(bstr)); + SysFreeString(bstr); + } + + hr = IADsPathname_Retrieve(path, ADS_FORMAT_X500, &bstr); + ok(hr == S_OK, "got %#x\n", hr); + ok(!wcscmp(bstr, L"LDAP://sample:123/a=b,c=d,e=f"), "got %s\n", wine_dbgstr_w(bstr)); + SysFreeString(bstr); + + hr = IADsPathname_Retrieve(path, ADS_FORMAT_PROVIDER, &bstr); + ok(hr == S_OK, "got %#x\n", hr); + ok(!wcscmp(bstr, L"LDAP"), "got %s\n", wine_dbgstr_w(bstr)); + SysFreeString(bstr); + + hr = IADsPathname_Retrieve(path, ADS_FORMAT_SERVER, &bstr); + ok(hr == S_OK, "got %#x\n", hr); + ok(!wcscmp(bstr, L"sample:123"), "got %s\n", wine_dbgstr_w(bstr)); + SysFreeString(bstr); + + hr = IADsPathname_Retrieve(path, ADS_FORMAT_LEAF, &bstr); + ok(hr == S_OK, "got %#x\n", hr); + ok(!wcscmp(bstr, L"a=b"), "got %s\n", wine_dbgstr_w(bstr)); + SysFreeString(bstr); + + IADsPathname_Release(path); +} + START_TEST(activeds) { + CoInitialize(NULL); + + test_Pathname(); test_ADsBuildVarArrayStr(); + + CoUninitialize(); } diff -Nru wine-development-5.5/dlls/adsldp/adsldp.c wine-development-5.6/dlls/adsldp/adsldp.c --- wine-development-5.5/dlls/adsldp/adsldp.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/adsldp/adsldp.c 2020-04-10 18:54:32.000000000 +0000 @@ -45,6 +45,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(adsldp); +#ifndef LDAP_OPT_SERVER_CONTROLS +#define LDAP_OPT_SERVER_CONTROLS 0x0012 +#endif + DEFINE_GUID(CLSID_LDAP,0x228d9a81,0xc302,0x11cf,0x9a,0xa4,0x00,0xaa,0x00,0x4a,0x56,0x91); DEFINE_GUID(CLSID_LDAPNamespace,0x228d9a82,0xc302,0x11cf,0x9a,0xa4,0x00,0xaa,0x00,0x4a,0x56,0x91); @@ -383,6 +387,7 @@ IADs IADs_iface; IADsOpenDSObject IADsOpenDSObject_iface; IDirectorySearch IDirectorySearch_iface; + IDirectoryObject IDirectoryObject_iface; LONG ref; LDAP *ld; BSTR host; @@ -391,10 +396,14 @@ ULONG attrs_count, attrs_count_allocated; struct ldap_attribute *attrs; struct attribute_type *at; - ULONG at_count; + ULONG at_single_count, at_multiple_count; struct { ADS_SCOPEENUM scope; + int pagesize; + BOOL cache_results; + BOOL attribtypes_only; + BOOL tombstone; } search; } LDAP_namespace; @@ -437,11 +446,21 @@ if (IsEqualGUID(riid, &IID_IDirectorySearch)) { + if (!ldap->ld || (ldap->object && !wcsicmp(ldap->object, L"rootDSE"))) + return E_NOINTERFACE; + IADs_AddRef(iface); *obj = &ldap->IDirectorySearch_iface; return S_OK; } + if (IsEqualGUID(riid, &IID_IDirectoryObject)) + { + IADs_AddRef(iface); + *obj = &ldap->IDirectoryObject_iface; + return S_OK; + } + FIXME("interface %s is not implemented\n", debugstr_guid(riid)); return E_NOINTERFACE; } @@ -481,7 +500,7 @@ SysFreeString(ldap->host); SysFreeString(ldap->object); free_attributes(ldap); - free_attribute_types(ldap->at, ldap->at_count); + free_attribute_types(ldap->at, ldap->at_single_count + ldap->at_multiple_count); heap_free(ldap); } @@ -940,7 +959,7 @@ IADs *ads; LDAP *ld = NULL; HRESULT hr; - ULONG err, at_count = 0; + ULONG err, at_single_count = 0, at_multiple_count = 0; struct attribute_type *at = NULL; TRACE("%p,%s,%s,%p,%08x,%p\n", iface, debugstr_w(path), debugstr_w(user), password, flags, obj); @@ -1040,7 +1059,7 @@ } } - at = load_schema(ld, &at_count); + at = load_schema(ld, &at_single_count, &at_multiple_count); } hr = LDAPNamespace_create(&IID_IADs, (void **)&ads); @@ -1052,7 +1071,8 @@ ldap->port = port; ldap->object = object; ldap->at = at; - ldap->at_count = at_count; + ldap->at_single_count = at_single_count; + ldap->at_multiple_count = at_multiple_count; hr = IADs_QueryInterface(ads, &IID_IDispatch, (void **)obj); IADs_Release(ads); return hr; @@ -1115,6 +1135,7 @@ static HRESULT WINAPI search_SetSearchPreference(IDirectorySearch *iface, PADS_SEARCHPREF_INFO prefs, DWORD count) { LDAP_namespace *ldap = impl_from_IDirectorySearch(iface); + HRESULT hr = S_OK; DWORD i; TRACE("%p,%p,%u\n", iface, prefs, count); @@ -1147,6 +1168,108 @@ } break; + case ADS_SEARCHPREF_SECURITY_MASK: + { + int security_mask; + ULONG err; + BerElement *ber; + struct berval *berval; + LDAPControlW *ctrls[2], mask; + + if (prefs[i].vValue.dwType != ADSTYPE_INTEGER) + { + FIXME("ADS_SEARCHPREF_SECURITY_MASK: not supportd dwType %d\n", prefs[i].vValue.dwType); + prefs[i].dwStatus = ADS_STATUS_INVALID_SEARCHPREFVALUE; + break; + } + + TRACE("SECURITY_MASK: %08x\n", prefs[i].vValue.u.Integer); + security_mask = prefs[i].vValue.u.Integer; + if (!security_mask) + security_mask = ADS_SECURITY_INFO_OWNER; + + ber = ber_alloc_t(LBER_USE_DER); + if (!ber || ber_printf(ber, (char *)"{i}", security_mask) == -1 || ber_flatten(ber, &berval) == -1) + { + ber_free(ber, 1); + prefs[i].dwStatus = ADS_STATUS_INVALID_SEARCHPREF; + break; + } + TRACE("ber: %s\n", debugstr_an(berval->bv_val, berval->bv_len)); + + mask.ldctl_oid = (WCHAR *)L"1.2.840.113556.1.4.801"; + mask.ldctl_iscritical = TRUE; + mask.ldctl_value.bv_val = berval->bv_val; + mask.ldctl_value.bv_len = berval->bv_len; + ctrls[0] = &mask; + ctrls[1] = NULL; + err = ldap_set_optionW(ldap->ld, LDAP_OPT_SERVER_CONTROLS, ctrls); + if (err != LDAP_SUCCESS) + { + TRACE("ldap_set_option error %#x\n", err); + prefs[i].dwStatus = ADS_STATUS_INVALID_SEARCHPREF; + hr = S_ADS_ERRORSOCCURRED; + } + else + prefs[i].dwStatus = ADS_STATUS_S_OK; + + ber_bvfree(berval); + ber_free(ber, 1); + break; + } + + case ADS_SEARCHPREF_PAGESIZE: + if (prefs[i].vValue.dwType != ADSTYPE_INTEGER) + { + FIXME("ADS_SEARCHPREF_PAGESIZE: not supportd dwType %d\n", prefs[i].vValue.dwType); + prefs[i].dwStatus = ADS_STATUS_INVALID_SEARCHPREFVALUE; + break; + } + + TRACE("PAGESIZE: %d\n", prefs[i].vValue.u.Integer); + ldap->search.pagesize = prefs[i].vValue.u.Integer; + prefs[i].dwStatus = ADS_STATUS_S_OK; + break; + + case ADS_SEARCHPREF_CACHE_RESULTS: + if (prefs[i].vValue.dwType != ADSTYPE_BOOLEAN) + { + FIXME("ADS_SEARCHPREF_CACHE_RESULTS: not supportd dwType %d\n", prefs[i].vValue.dwType); + prefs[i].dwStatus = ADS_STATUS_INVALID_SEARCHPREFVALUE; + break; + } + + TRACE("CACHE_RESULTS: %d\n", prefs[i].vValue.u.Boolean); + ldap->search.cache_results = prefs[i].vValue.u.Boolean; + prefs[i].dwStatus = ADS_STATUS_S_OK; + break; + + case ADS_SEARCHPREF_ATTRIBTYPES_ONLY: + if (prefs[i].vValue.dwType != ADSTYPE_BOOLEAN) + { + FIXME("ADS_SEARCHPREF_ATTRIBTYPES_ONLY: not supportd dwType %d\n", prefs[i].vValue.dwType); + prefs[i].dwStatus = ADS_STATUS_INVALID_SEARCHPREFVALUE; + break; + } + + TRACE("ATTRIBTYPES_ONLY: %d\n", prefs[i].vValue.u.Boolean); + ldap->search.attribtypes_only = prefs[i].vValue.u.Boolean; + prefs[i].dwStatus = ADS_STATUS_S_OK; + break; + + case ADS_SEARCHPREF_TOMBSTONE: + if (prefs[i].vValue.dwType != ADSTYPE_BOOLEAN) + { + FIXME("ADS_SEARCHPREF_TOMBSTONE: not supportd dwType %d\n", prefs[i].vValue.dwType); + prefs[i].dwStatus = ADS_STATUS_INVALID_SEARCHPREFVALUE; + break; + } + + TRACE("TOMBSTONE: %d\n", prefs[i].vValue.u.Boolean); + ldap->search.tombstone = prefs[i].vValue.u.Boolean; + prefs[i].dwStatus = ADS_STATUS_S_OK; + break; + default: FIXME("pref %d, type %u: stub\n", prefs[i].dwSearchPref, prefs[i].vValue.dwType); prefs[i].dwStatus = ADS_STATUS_INVALID_SEARCHPREF; @@ -1154,7 +1277,7 @@ } } - return S_OK; + return hr; } static HRESULT WINAPI search_ExecuteSearch(IDirectorySearch *iface, LPWSTR filter, LPWSTR *names, @@ -1167,8 +1290,6 @@ TRACE("%p,%s,%p,%u,%p\n", iface, debugstr_w(filter), names, count, res); - if (!ldap->ld) return E_NOTIMPL; - if (!res) return E_ADS_BAD_PARAMETER; ldap_ctx = heap_alloc_zero(sizeof(*ldap_ctx)); @@ -1196,7 +1317,7 @@ props[count] = NULL; } - err = ldap_search_sW(ldap->ld, ldap->object, ldap->search.scope, filter, props, FALSE, &ldap_ctx->res); + err = ldap_search_sW(ldap->ld, ldap->object, ldap->search.scope, filter, props, ldap->search.attribtypes_only, &ldap_ctx->res); heap_free(props); if (err != LDAP_SUCCESS) { @@ -1217,13 +1338,10 @@ static HRESULT WINAPI search_GetFirstRow(IDirectorySearch *iface, ADS_SEARCH_HANDLE res) { - LDAP_namespace *ldap = impl_from_IDirectorySearch(iface); struct ldap_search_context *ldap_ctx = res; TRACE("%p,%p\n", iface, res); - if (!ldap->ld) return E_NOTIMPL; - if (!res) return E_ADS_BAD_PARAMETER; ldap_ctx->entry = NULL; @@ -1238,8 +1356,6 @@ TRACE("%p,%p\n", iface, res); - if (!ldap->ld) return E_NOTIMPL; - if (!res) return E_ADS_BAD_PARAMETER; if (!ldap_ctx->entry) @@ -1257,7 +1373,7 @@ if (ldap_ctx->pos >= ldap_ctx->count) return S_ADS_NOMORE_ROWS; - ldap_ctx->entry = ldap_next_entry(ldap->ld, ldap_ctx->res); + ldap_ctx->entry = ldap_next_entry(ldap->ld, ldap_ctx->entry); } if (!ldap_ctx->entry) @@ -1283,8 +1399,6 @@ TRACE("%p,%p,%p\n", iface, res, name); - if (!ldap->ld) return E_NOTIMPL; - if (!name || !ldap_ctx || !ldap_ctx->entry) return E_ADS_BAD_PARAMETER; if (!ldap_ctx->ber) @@ -1314,53 +1428,261 @@ return S_ADS_NOMORE_COLUMNS; } -static HRESULT add_column_values(LDAP_namespace *ldap, ADS_SEARCH_COLUMN *col, - const WCHAR *name, struct berval **values, DWORD count) +static HRESULT add_column_values(LDAP_namespace *ldap, struct ldap_search_context *ldap_ctx, + LPWSTR name, ADS_SEARCH_COLUMN *col) { ADSTYPEENUM type; - DWORD i; + DWORD i, count; - type = get_schema_type(name, ldap->at, ldap->at_count); + type = get_schema_type(name, ldap->at, ldap->at_single_count, ldap->at_multiple_count); + TRACE("%s => type %d\n", debugstr_w(name), type); - col->pADsValues = heap_alloc(count * sizeof(col->pADsValues[0])); - if (!col->pADsValues) - return E_OUTOFMEMORY; + switch (type) + { + default: + FIXME("no special handling for type %d\n", type); + /* fall through */ + case ADSTYPE_DN_STRING: + case ADSTYPE_CASE_EXACT_STRING: + case ADSTYPE_CASE_IGNORE_STRING: + case ADSTYPE_PRINTABLE_STRING: + { + WCHAR **values = ldap_get_valuesW(ldap->ld, ldap_ctx->entry, name); + if (!values) + return E_ADS_COLUMN_NOT_SET; + count = ldap_count_valuesW(values); - for (i = 0; i < count; i++) + col->pADsValues = heap_alloc_zero(count * sizeof(col->pADsValues[0])); + if (!col->pADsValues) + { + ldap_value_freeW(values); + return E_OUTOFMEMORY; + } + + for (i = 0; i < count; i++) + { + TRACE("=> %s\n", debugstr_w(values[i])); + col->pADsValues[i].dwType = type; + col->pADsValues[i].u.CaseIgnoreString = values[i]; + } + + col->hReserved = values; + break; + } + + case ADSTYPE_BOOLEAN: { - switch (type) + WCHAR **values = ldap_get_valuesW(ldap->ld, ldap_ctx->entry, name); + if (!values) + return E_ADS_COLUMN_NOT_SET; + count = ldap_count_valuesW(values); + + col->pADsValues = heap_alloc_zero(count * sizeof(col->pADsValues[0])); + if (!col->pADsValues) { - default: - FIXME("no special handling for type %d\n", type); - /* fall through */ - case ADSTYPE_DN_STRING: - case ADSTYPE_CASE_EXACT_STRING: - case ADSTYPE_CASE_IGNORE_STRING: - case ADSTYPE_PRINTABLE_STRING: - case ADSTYPE_NT_SECURITY_DESCRIPTOR: + ldap_value_freeW(values); + return E_OUTOFMEMORY; + } + + for (i = 0; i < count; i++) { - DWORD outlen; - TRACE("=> %s\n", debugstr_an(values[i]->bv_val, values[i]->bv_len)); - col->pADsValues[i].u.CaseIgnoreString = strnUtoW(values[i]->bv_val, values[i]->bv_len, &outlen); - if (!col->pADsValues[i].u.CaseIgnoreString) + col->pADsValues[i].dwType = type; + + if (!wcsicmp(values[i], L"TRUE")) + col->pADsValues[i].u.Boolean = 1; + else if (!wcsicmp(values[i], L"FALSE")) + col->pADsValues[i].u.Boolean = 0; + else { - heap_free(col->pADsValues); - return E_OUTOFMEMORY; + FIXME("not recognized boolean value %s\n", debugstr_w(values[i])); + col->pADsValues[i].u.Boolean = 0; } - break; + TRACE("%s => %d\n", debugstr_w(values[i]), col->pADsValues[i].u.Boolean); } - case ADSTYPE_INTEGER: - col->pADsValues[i].u.Integer = strtol(values[i]->bv_val, NULL, 10); - TRACE("%s => %d\n", debugstr_an(values[i]->bv_val, values[i]->bv_len), col->pADsValues[i].u.Integer); - break; + ldap_value_freeW(values); + col->hReserved = NULL; + break; + } + + case ADSTYPE_INTEGER: + case ADSTYPE_LARGE_INTEGER: + { + struct berval **values = ldap_get_values_lenW(ldap->ld, ldap_ctx->entry, name); + if (!values) + return E_ADS_COLUMN_NOT_SET; + count = ldap_count_values_len(values); - case ADSTYPE_OCTET_STRING: + col->pADsValues = heap_alloc_zero(count * sizeof(col->pADsValues[0])); + if (!col->pADsValues) + { + ldap_value_free_len(values); + return E_OUTOFMEMORY; + } + + for (i = 0; i < count; i++) + { + col->pADsValues[i].dwType = type; + + if (type == ADSTYPE_LARGE_INTEGER) + { + col->pADsValues[i].u.LargeInteger.QuadPart = _atoi64(values[i]->bv_val); + TRACE("%s => %s\n", debugstr_an(values[i]->bv_val, values[i]->bv_len), wine_dbgstr_longlong(col->pADsValues[i].u.LargeInteger.QuadPart)); + } + else + { + col->pADsValues[i].u.Integer = atol(values[i]->bv_val); + TRACE("%s => %d\n", debugstr_an(values[i]->bv_val, values[i]->bv_len), col->pADsValues[i].u.Integer); + } + } + + ldap_value_free_len(values); + col->hReserved = NULL; + break; + } + + case ADSTYPE_OCTET_STRING: + case ADSTYPE_NT_SECURITY_DESCRIPTOR: + { + struct berval **values = ldap_get_values_lenW(ldap->ld, ldap_ctx->entry, name); + if (!values) + return E_ADS_COLUMN_NOT_SET; + count = ldap_count_values_len(values); + + col->pADsValues = heap_alloc_zero(count * sizeof(col->pADsValues[0])); + if (!col->pADsValues) + { + ldap_value_free_len(values); + return E_OUTOFMEMORY; + } + + for (i = 0; i < count; i++) + { TRACE("=> %s\n", debugstr_an(values[i]->bv_val, values[i]->bv_len)); + col->pADsValues[i].dwType = type; col->pADsValues[i].u.OctetString.dwLength = values[i]->bv_len; col->pADsValues[i].u.OctetString.lpValue = (BYTE *)values[i]->bv_val; - break; } + + col->hReserved = values; + break; + } + + case ADSTYPE_UTC_TIME: + { + struct berval **values = ldap_get_values_lenW(ldap->ld, ldap_ctx->entry, name); + if (!values) + return E_ADS_COLUMN_NOT_SET; + count = ldap_count_values_len(values); + + col->pADsValues = heap_alloc_zero(count * sizeof(col->pADsValues[0])); + if (!col->pADsValues) + { + ldap_value_free_len(values); + return E_OUTOFMEMORY; + } + + for (i = 0; i < count; i++) + { + col->pADsValues[i].dwType = type; + if (values[i]->bv_len < 14 || + _snscanf_l(values[i]->bv_val, values[i]->bv_len, "%04hu%02hu%02hu%02hu%02hu%02hu", NULL, + &col->pADsValues[i].u.UTCTime.wYear, &col->pADsValues[i].u.UTCTime.wMonth, + &col->pADsValues[i].u.UTCTime.wDay, &col->pADsValues[i].u.UTCTime.wHour, + &col->pADsValues[i].u.UTCTime.wMinute, &col->pADsValues[i].u.UTCTime.wSecond) != 6) + { + FIXME("not recognized UTCTime: %s\n", debugstr_an(values[i]->bv_val, values[i]->bv_len)); + memset(&col->pADsValues[i].u.UTCTime, 0, sizeof(col->pADsValues[i].u.UTCTime)); + continue; + } + + if ((values[i]->bv_val[14] != '.' && values[i]->bv_val[14] != ',') || + values[i]->bv_val[15] != '0' || values[i]->bv_val[16] != 'Z') + FIXME("not handled time zone: %s\n", debugstr_an(values[i]->bv_val + 14, values[i]->bv_len - 14)); + + TRACE("%s => %02u.%02u.%04u %02u:%02u:%02u\n", debugstr_an(values[i]->bv_val, values[i]->bv_len), + col->pADsValues[i].u.UTCTime.wDay, col->pADsValues[i].u.UTCTime.wMonth, + col->pADsValues[i].u.UTCTime.wYear, col->pADsValues[i].u.UTCTime.wHour, + col->pADsValues[i].u.UTCTime.wMinute, col->pADsValues[i].u.UTCTime.wSecond); + } + + ldap_value_free_len(values); + col->hReserved = NULL; + break; + } + + case ADSTYPE_DN_WITH_BINARY: + { + static const BYTE hex2bin[] = + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x00 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x10 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x20 */ + 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0, /* 0x30 */ + 0,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0, /* 0x40 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x50 */ + 0,10,11,12,13,14,15 /* 0x60 */ + }; + ADS_DN_WITH_BINARY *dnb; + WCHAR **values = ldap_get_valuesW(ldap->ld, ldap_ctx->entry, name); + if (!values) + return E_ADS_COLUMN_NOT_SET; + count = ldap_count_valuesW(values); + + col->pADsValues = heap_alloc_zero(count * (sizeof(col->pADsValues[0]) + sizeof(col->pADsValues[0].u.pDNWithBinary[0]))); + if (!col->pADsValues) + { + ldap_value_freeW(values); + return E_OUTOFMEMORY; + } + + dnb = (ADS_DN_WITH_BINARY *)(col->pADsValues + count); + + for (i = 0; i < count; i++) + { + WCHAR *p = values[i]; + DWORD n; + + col->pADsValues[i].dwType = type; + col->pADsValues[i].u.pDNWithBinary = dnb++; + + if ((p[0] != 'b' && p[0] != 'B') || p[1] != ':') + FIXME("wrong DN with binary tag '%c%c'\n", p[0], p[1]); + p += 2; + + col->pADsValues[i].u.pDNWithBinary->dwLength = wcstol(p, &p, 10) / 2; + if (*p != ':') + FIXME("wrong DN with binary separator '%c'\n", *p); + p++; + col->pADsValues[i].u.pDNWithBinary->lpBinaryValue = (BYTE *)p; + /* decode values in-place */ + for (n = 0; n < col->pADsValues[i].u.pDNWithBinary->dwLength; n++, p += 2) + { + BYTE b; + + if (p[0] > 'f' || (p[0] != '0' && !hex2bin[p[0]]) || + p[1] > 'f' || (p[1] != '0' && !hex2bin[p[1]])) + { + FIXME("bad hex encoding at %s\n", debugstr_w(p)); + continue; + } + + b = (hex2bin[p[0]] << 4) | hex2bin[p[1]]; + col->pADsValues[i].u.pDNWithBinary->lpBinaryValue[n] = b; + } + if (*p != ':') + FIXME("wrong DN with binary separator '%c'\n", *p); + col->pADsValues[i].u.pDNWithBinary->pszDNString = p + 1; + + TRACE("%s => %u,%s,%s\n", debugstr_w(values[i]), + col->pADsValues[i].u.pDNWithBinary->dwLength, + debugstr_an((char *)col->pADsValues[i].u.pDNWithBinary->lpBinaryValue, col->pADsValues[i].u.pDNWithBinary->dwLength), + debugstr_w(col->pADsValues[i].u.pDNWithBinary->pszDNString)); + } + + col->hReserved = values; + break; + } } col->dwADsType = type; @@ -1376,15 +1698,14 @@ LDAP_namespace *ldap = impl_from_IDirectorySearch(iface); struct ldap_search_context *ldap_ctx = res; HRESULT hr; - struct berval **values; ULONG count; TRACE("%p,%p,%s,%p\n", iface, res, debugstr_w(name), col); - if (!ldap->ld) return E_NOTIMPL; - if (!res || !name || !ldap_ctx->entry) return E_ADS_BAD_PARAMETER; + memset(col, 0, sizeof(*col)); + if (!wcsicmp(name, L"ADsPath")) { WCHAR *dn = ldap_get_dnW(ldap->ld, ldap_ctx->entry); @@ -1410,9 +1731,11 @@ wcscat(col->pADsValues[0].u.CaseIgnoreString, ldap->host); wcscat(col->pADsValues[0].u.CaseIgnoreString, L"/"); if (dn) wcscat(col->pADsValues[0].u.CaseIgnoreString, dn); + col->pADsValues[0].dwType = ADSTYPE_CASE_IGNORE_STRING; col->dwADsType = ADSTYPE_CASE_IGNORE_STRING; col->dwNumValues = 1; col->pszAttrName = strdupW(name); + col->hReserved = NULL; TRACE("=> %s\n", debugstr_w(col->pADsValues[0].u.CaseIgnoreString)); hr = S_OK; @@ -1421,21 +1744,27 @@ return hr; } - values = ldap_get_values_lenW(ldap->ld, ldap_ctx->entry, name); - if (!values) return ERROR_DS_NO_ATTRIBUTE_OR_VALUE; - - count = ldap_count_values_len(values); - - hr = add_column_values(ldap, col, name, values, count); - ldap_value_free_len(values); - - return hr; + return add_column_values(ldap, ldap_ctx, name, col); } static HRESULT WINAPI search_FreeColumn(IDirectorySearch *iface, PADS_SEARCH_COLUMN col) { - FIXME("%p,%p: stub\n", iface, col); - return E_NOTIMPL; + TRACE("%p,%p\n", iface, col); + + if (!col) return E_ADS_BAD_PARAMETER; + + heap_free(col->pADsValues); + heap_free(col->pszAttrName); + + if (col->hReserved) + { + if (col->dwADsType == ADSTYPE_OCTET_STRING) + ldap_value_free_len(col->hReserved); + else + ldap_value_freeW(col->hReserved); + } + + return S_OK; } static HRESULT WINAPI search_CloseSearchHandle(IDirectorySearch *iface, ADS_SEARCH_HANDLE res) @@ -1468,6 +1797,87 @@ search_CloseSearchHandle }; +static inline LDAP_namespace *impl_from_IDirectoryObject(IDirectoryObject *iface) +{ + return CONTAINING_RECORD(iface, LDAP_namespace, IDirectoryObject_iface); +} + +static HRESULT WINAPI dirobj_QueryInterface(IDirectoryObject *iface, REFIID riid, void **obj) +{ + LDAP_namespace *ldap = impl_from_IDirectoryObject(iface); + + TRACE("%p,%s,%p\n", iface, debugstr_guid(riid), obj); + + if (!riid || !obj) return E_INVALIDARG; + + if (IsEqualGUID(riid, &IID_IDirectoryObject) || + IsEqualGUID(riid, &IID_IUnknown)) + { + IDirectoryObject_AddRef(iface); + *obj = iface; + return S_OK; + } + + return IADs_QueryInterface(&ldap->IADs_iface, riid, obj); +} + +static ULONG WINAPI dirobj_AddRef(IDirectoryObject *iface) +{ + LDAP_namespace *ldap = impl_from_IDirectoryObject(iface); + return IADs_AddRef(&ldap->IADs_iface); +} + +static ULONG WINAPI dirobj_Release(IDirectoryObject *iface) +{ + LDAP_namespace *ldap = impl_from_IDirectoryObject(iface); + return IADs_Release(&ldap->IADs_iface); +} + +static HRESULT WINAPI dirobj_GetObjectInformation(IDirectoryObject *iface, PADS_OBJECT_INFO *info) +{ + FIXME("%p,%p: stub\n", iface, info); + return E_NOTIMPL; +} + +static HRESULT WINAPI dirobj_GetObjectAttributes(IDirectoryObject *iface, LPWSTR *names, + DWORD count, PADS_ATTR_INFO *attrs, DWORD *count_returned) +{ + FIXME("%p,%p,%u,%p,%p: stub\n", iface, names, count, attrs, count_returned); + return E_NOTIMPL; +} + +static HRESULT WINAPI dirobj_SetObjectAttributes(IDirectoryObject *iface, PADS_ATTR_INFO attrs, + DWORD count, DWORD *count_set) +{ + FIXME("%p,%p,%u,%p: stub\n", iface, attrs, count, count_set); + return E_NOTIMPL; +} + +static HRESULT WINAPI dirobj_CreateDSObject(IDirectoryObject *iface, LPWSTR name, + PADS_ATTR_INFO attrs, DWORD count, IDispatch **obj) +{ + FIXME("%p,%s,%p,%u,%p: stub\n", iface, debugstr_w(name), attrs, count, obj); + return E_NOTIMPL; +} + +static HRESULT WINAPI dirobj_DeleteDSObject(IDirectoryObject *iface, LPWSTR name) +{ + FIXME("%p,%s: stub\n", iface, debugstr_w(name)); + return E_NOTIMPL; +} + +static const IDirectoryObjectVtbl IDirectoryObject_vtbl = +{ + dirobj_QueryInterface, + dirobj_AddRef, + dirobj_Release, + dirobj_GetObjectInformation, + dirobj_GetObjectAttributes, + dirobj_SetObjectAttributes, + dirobj_CreateDSObject, + dirobj_DeleteDSObject +}; + static HRESULT LDAPNamespace_create(REFIID riid, void **obj) { LDAP_namespace *ldap; @@ -1479,6 +1889,7 @@ ldap->IADs_iface.lpVtbl = &IADs_vtbl; ldap->IADsOpenDSObject_iface.lpVtbl = &IADsOpenDSObject_vtbl; ldap->IDirectorySearch_iface.lpVtbl = &IDirectorySearch_vtbl; + ldap->IDirectoryObject_iface.lpVtbl = &IDirectoryObject_vtbl; ldap->ref = 1; ldap->ld = NULL; ldap->host = NULL; @@ -1487,8 +1898,13 @@ ldap->attrs_count_allocated = 0; ldap->attrs = NULL; ldap->search.scope = ADS_SCOPE_SUBTREE; + ldap->search.pagesize = 0; + ldap->search.cache_results = TRUE; + ldap->search.attribtypes_only = FALSE; + ldap->search.tombstone = FALSE; ldap->at = NULL; - ldap->at_count = 0; + ldap->at_single_count = 0; + ldap->at_multiple_count = 0; hr = IADs_QueryInterface(&ldap->IADs_iface, riid, obj); IADs_Release(&ldap->IADs_iface); diff -Nru wine-development-5.5/dlls/adsldp/adsldp_private.h wine-development-5.6/dlls/adsldp/adsldp_private.h --- wine-development-5.5/dlls/adsldp/adsldp_private.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/adsldp/adsldp_private.h 2020-04-10 18:54:32.000000000 +0000 @@ -50,13 +50,14 @@ { WCHAR *oid; WCHAR *name; + ULONG name_count; WCHAR *syntax; int single_value; }; DWORD map_ldap_error(DWORD) DECLSPEC_HIDDEN; -struct attribute_type *load_schema(LDAP *ld, ULONG *) DECLSPEC_HIDDEN; -ADSTYPEENUM get_schema_type(const WCHAR *, const struct attribute_type *, ULONG) DECLSPEC_HIDDEN; +struct attribute_type *load_schema(LDAP *ld, ULONG *, ULONG *) DECLSPEC_HIDDEN; +ADSTYPEENUM get_schema_type(const WCHAR *, const struct attribute_type *, ULONG, ULONG) DECLSPEC_HIDDEN; void free_attribute_types(struct attribute_type *, ULONG) DECLSPEC_HIDDEN; #endif diff -Nru wine-development-5.5/dlls/adsldp/ldap.c wine-development-5.6/dlls/adsldp/ldap.c --- wine-development-5.5/dlls/adsldp/ldap.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/adsldp/ldap.c 2020-04-10 18:54:32.000000000 +0000 @@ -69,7 +69,7 @@ case LDAP_NO_OBJECT_CLASS_MODS: return ERROR_DS_CANT_MOD_OBJ_CLASS; case LDAP_RESULTS_TOO_LARGE: return ERROR_DS_OBJECT_RESULTS_TOO_LARGE; case LDAP_AFFECTS_MULTIPLE_DSAS: return ERROR_DS_AFFECTS_MULTIPLE_DSAS; - case LDAP_SERVER_DOWN: return ERROR_DS_SERVER_DOWN; + case LDAP_SERVER_DOWN: return ERROR_DS_SERVER_DOWN; case LDAP_LOCAL_ERROR: return ERROR_DS_LOCAL_ERROR; case LDAP_ENCODING_ERROR: return ERROR_DS_ENCODING_ERROR; case LDAP_DECODING_ERROR: return ERROR_DS_DECODING_ERROR; diff -Nru wine-development-5.5/dlls/adsldp/schema.c wine-development-5.6/dlls/adsldp/schema.c --- wine-development-5.5/dlls/adsldp/schema.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/adsldp/schema.c 2020-04-10 18:54:32.000000000 +0000 @@ -30,32 +30,85 @@ WINE_DEFAULT_DEBUG_CHANNEL(adsldp); -static const struct attribute_type *find_schema_type(const WCHAR *name, const struct attribute_type *at, ULONG count) +static const struct attribute_type *find_schema_type_sorted(const WCHAR *name, const struct attribute_type *at, ULONG count) { - ULONG i; + int idx, min, max, res; - for (i = 0; i < count; i++) - if (at[i].name && !wcsicmp(at[i].name, name)) return &at[i]; + if (!count) return NULL; + + min = 0; + max = count - 1; + + while (min <= max) + { + idx = (min + max) / 2; + res = wcsicmp(name, at[idx].name); + if (!res) return &at[idx]; + if (res > 0) min = idx + 1; + else max = idx - 1; + } return NULL; } + +static const struct attribute_type *find_schema_type(const WCHAR *name, const struct attribute_type *at, ULONG single, ULONG multiple) +{ + const struct attribute_type *found; + ULONG i, n, off; + + /* Perform binary search within definitions with single name */ + found = find_schema_type_sorted(name, at, single); + if (found) return found; + + /* Perform linear search within definitions with multiple names */ + at += single; + + for (i = 0; i < multiple; i++) + { + off = 0; + + for (n = 0; n < at[i].name_count; n++) + { + if (!wcsicmp(at[i].name + off, name)) return &at[i]; + off += wcslen(at[i].name + off) + 1; + } + } + + FIXME("%s not found\n", debugstr_w(name)); + return NULL; +} + /* RFC 4517 */ -ADSTYPEENUM get_schema_type(const WCHAR *name, const struct attribute_type *at, ULONG at_count) +ADSTYPEENUM get_schema_type(const WCHAR *name, const struct attribute_type *at, ULONG single, ULONG multiple) { const struct attribute_type *type; - type = find_schema_type(name, at, at_count); + type = find_schema_type(name, at, single, multiple); if (!type || !type->syntax) return ADSTYPE_CASE_IGNORE_STRING; + if (!wcscmp(type->syntax, L"1.3.6.1.4.1.1466.115.121.1.7")) + return ADSTYPE_BOOLEAN; if (!wcscmp(type->syntax, L"1.3.6.1.4.1.1466.115.121.1.12")) return ADSTYPE_DN_STRING; if (!wcscmp(type->syntax, L"1.3.6.1.4.1.1466.115.121.1.15")) - return ADSTYPE_NT_SECURITY_DESCRIPTOR; + return ADSTYPE_CASE_IGNORE_STRING; + if (!wcscmp(type->syntax, L"1.3.6.1.4.1.1466.115.121.1.24")) + return ADSTYPE_UTC_TIME; + if (!wcscmp(type->syntax, L"1.3.6.1.4.1.1466.115.121.1.26")) + return ADSTYPE_CASE_EXACT_STRING; if (!wcscmp(type->syntax, L"1.3.6.1.4.1.1466.115.121.1.27")) return ADSTYPE_INTEGER; + if (!wcscmp(type->syntax, L"1.3.6.1.4.1.1466.115.121.1.38")) + return ADSTYPE_CASE_IGNORE_STRING; if (!wcscmp(type->syntax, L"1.3.6.1.4.1.1466.115.121.1.40")) return ADSTYPE_OCTET_STRING; + if (!wcscmp(type->syntax, L"1.2.840.113556.1.4.903")) + return ADSTYPE_DN_WITH_BINARY; + if (!wcscmp(type->syntax, L"1.2.840.113556.1.4.906")) + return ADSTYPE_LARGE_INTEGER; + if (!wcscmp(type->syntax, L"1.2.840.113556.1.4.907")) + return ADSTYPE_NT_SECURITY_DESCRIPTOR; FIXME("not handled type syntax %s for %s\n", debugstr_w(type->syntax), debugstr_w(name)); return ADSTYPE_CASE_IGNORE_STRING; @@ -114,13 +167,64 @@ return oid; } -static WCHAR *parse_name(WCHAR **str) +static WCHAR *parse_name(WCHAR **str, ULONG *name_count) { WCHAR *name, *p = *str, *end; int count; + *name_count = 0; + while (is_space(*p)) p++; + if (*p == '(') + { + int total_count = 0; + + p++; + name = NULL; + + while (*p) + { + WCHAR *tmp_name, *new_name; + ULONG dummy; + + while (is_space(*p)) p++; + if (*p == ')') + { + *str = p + 1; + return name; + } + + tmp_name = parse_name(&p, &dummy); + if (!tmp_name) break; + + TRACE("NAME[%u] %s\n", *name_count, debugstr_w(tmp_name)); + + count = wcslen(tmp_name); + + if (!name) + new_name = heap_alloc((count + 1) * sizeof(WCHAR)); + else + new_name = heap_realloc(name, (total_count + count + 1) * sizeof(WCHAR)); + + if (!new_name) break; + + memcpy(new_name + total_count, tmp_name, (count + 1) * sizeof(WCHAR)); + + name = new_name; + heap_free(tmp_name); + total_count += count + 1; + + *name_count += 1; + *str = p; + } + + *str = *p ? p + 1 : p; + + heap_free(name); + return NULL; + } + if (*p != '\'') { FIXME("not suported NAME start at %s\n", debugstr_w(p)); @@ -138,17 +242,42 @@ memcpy(name, p, count * sizeof(WCHAR)); name[count] = 0; + *name_count = 1; + *str = end + 1; return name; } +static void skip_token(WCHAR **str) +{ + WCHAR *p = *str; + + while (is_space(*p)) p++; + + if (*p == '\'') + { + p++; + while (*p && *p != '\'') p++; + } + else + { + while (*p && !is_space(*p)) p++; + } + + *str = *p ? p + 1 : p; +} + static BOOL parse_attribute_type(WCHAR *str, struct attribute_type *at) { + static const WCHAR * const not_supported[] = { L"DESC", L"EQUALITY", + L"ORDERING", L"SUBSTR", L"SUP", L"USAGE", L"X-ORDERED" }; + int i; WCHAR *p = str; at->oid = NULL; at->name = NULL; + at->name_count = 0; at->syntax = NULL; at->single_value = 0; @@ -161,12 +290,12 @@ while (*p) { while (is_space(*p)) p++; - if (*p == ')') break; + if (*p == ')') return TRUE; if (!wcsnicmp(p, L"NAME", 4)) { p += 4; - at->name = parse_name(&p); + at->name = parse_name(&p, &at->name_count); } else if (!wcsnicmp(p, L"SYNTAX", 6)) { @@ -184,25 +313,57 @@ } else { - FIXME("not supported token at %s\n", debugstr_w(p)); - free_attribute_type(at); - return FALSE; + BOOL recognized = FALSE; + + for (i = 0; i < ARRAY_SIZE(not_supported); i++) + { + if (!wcsnicmp(p, not_supported[i], wcslen(not_supported[i]))) + { + p += wcslen(not_supported[i]); + skip_token(&p); + recognized = TRUE; + break; + } + } + + if (!recognized) + { + FIXME("not supported token at %s\n", debugstr_w(p)); + free_attribute_type(at); + return FALSE; + } } } - return TRUE; + WARN("attribute definition is not terminated\n"); + + free_attribute_type(at); + return FALSE; +} + +static int __cdecl at_cmp(const void *a1, const void *a2) +{ + const struct attribute_type *at1 = a1; + const struct attribute_type *at2 = a2; + + if (at1->name_count == 1 && at2->name_count == 1) + return wcsicmp(at1->name, at2->name); + + /* put definitions with multiple names at the end */ + return at1->name_count - at2->name_count; } -struct attribute_type *load_schema(LDAP *ld, ULONG *at_count) +struct attribute_type *load_schema(LDAP *ld, ULONG *at_single_count, ULONG *at_multiple_count) { WCHAR *subschema[] = { (WCHAR *)L"subschemaSubentry", NULL }; WCHAR *attribute_types[] = { (WCHAR *)L"attributeTypes", NULL }; - ULONG err, count; + ULONG err, count, multiple_count; LDAPMessage *res, *entry; WCHAR **schema = NULL; struct attribute_type *at = NULL; - *at_count = 0; + *at_single_count = 0; + *at_multiple_count = 0; err = ldap_search_sW(ld, NULL, LDAP_SCOPE_BASE, (WCHAR *)L"(objectClass=*)", subschema, FALSE, &res); if (err != LDAP_SUCCESS) @@ -227,6 +388,7 @@ } count = 0; + multiple_count = 0; entry = ldap_first_entry(ld, res); if (entry) @@ -251,8 +413,17 @@ continue; } - TRACE("oid %s, name %s, syntax %s, single-value %d\n", debugstr_w(at[i].oid), - debugstr_w(at[i].name), debugstr_w(at[i].syntax), at[i].single_value); + if (!at[count].name) + { + free_attribute_type(&at[count]); + continue; + } + + TRACE("oid %s, name %s, name_count %u, syntax %s, single-value %d\n", debugstr_w(at[count].oid), + debugstr_w(at[count].name), at[count].name_count, debugstr_w(at[count].syntax), at[count].single_value); + + if (at[count].name_count > 1) + multiple_count++; count++; } @@ -263,7 +434,13 @@ exit: ldap_msgfree(res); - if (at) *at_count = count; + if (at) + { + *at_single_count = count - multiple_count; + *at_multiple_count = multiple_count; + + qsort(at, count, sizeof(at[0]), at_cmp); + } return at; } diff -Nru wine-development-5.5/dlls/adsldp/tests/ldap.c wine-development-5.6/dlls/adsldp/tests/ldap.c --- wine-development-5.5/dlls/adsldp/tests/ldap.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/adsldp/tests/ldap.c 2020-04-10 18:54:32.000000000 +0000 @@ -106,11 +106,23 @@ IDispatch_Release(disp); hr = ADsOpenObject(path, user, password, test[i].flags, &IID_IADs, (void **)&ads); + if (hr == HRESULT_FROM_WIN32(ERROR_DS_SERVER_DOWN)) + { + SysFreeString(path); + skip("server is down\n"); + break; + } ok(hr == test[i].hr || hr == test[i].hr_ads_get, "%d: got %#x, expected %#x\n", i, hr, test[i].hr); if (hr == S_OK) IADs_Release(ads); hr = ADsGetObject(path, &IID_IDispatch, (void **)&disp); + if (hr == HRESULT_FROM_WIN32(ERROR_DS_SERVER_DOWN)) + { + SysFreeString(path); + skip("server is down\n"); + break; + } ok(hr == test[i].hr || hr == test[i].hr_ads_get, "%d: got %#x, expected %#x\n", i, hr, test[i].hr); if (hr == S_OK) IDispatch_Release(disp); @@ -259,6 +271,8 @@ for (i = 0; i < col.dwNumValues; i++) { + ok(col.pADsValues[i].dwType == col.dwADsType, "%u: got %d for %s\n", i, col.pADsValues[i].dwType, wine_dbgstr_w(name)); + ok(res->values[i] != NULL, "expected to have more values for %s\n", wine_dbgstr_w(name)); if (!res->values[i]) break; @@ -332,13 +346,19 @@ ADS_SEARCH_COLUMN col; LPWSTR name; + hr = ADsGetObject(L"LDAP:", &IID_IDirectorySearch, (void **)&ds); + ok(hr == E_NOINTERFACE, "got %#x\n", hr); + hr = ADsGetObject(L"LDAP://ldap.forumsys.com/rootDSE", &IID_IDirectorySearch, (void **)&ds); -todo_wine ok(hr == E_NOINTERFACE, "got %#x\n", hr); hr = ADsGetObject(L"LDAP://ldap.forumsys.com", &IID_IDirectorySearch, (void **)&ds); + if (hr == HRESULT_FROM_WIN32(ERROR_DS_SERVER_DOWN)) + { + skip("server is down\n"); + return; + } ok(hr == S_OK, "got %#x\n", hr); - if (hr != S_OK) return; pref.dwSearchPref = ADS_SEARCHPREF_SEARCH_SCOPE; pref.vValue.dwType = ADSTYPE_INTEGER; @@ -386,7 +406,6 @@ } hr = IDirectorySearch_FreeColumn(ds, &col); -todo_wine ok(hr == S_OK, "got %#x\n", hr); } @@ -418,6 +437,18 @@ ok(hr == E_ADS_BAD_PARAMETER, "got %#x\n", hr); } + hr = IDirectorySearch_GetFirstRow(ds, sh); + ok(hr == S_OK, "got %#x\n", hr); + + memset(&col, 0x55, sizeof(col)); + hr = IDirectorySearch_GetColumn(ds, sh, (WCHAR *)L"deadbeef", &col); + ok(hr == E_ADS_COLUMN_NOT_SET, "got %#x\n", hr); + ok(!col.pszAttrName || broken(col.pszAttrName != NULL) /* XP */, "got %p\n", col.pszAttrName); + ok(col.dwADsType == ADSTYPE_INVALID || broken(col.dwADsType != ADSTYPE_INVALID) /* XP */, "got %d\n", col.dwADsType); + ok(!col.pADsValues, "got %p\n", col.pADsValues); + ok(!col.dwNumValues, "got %u\n", col.dwNumValues); + ok(!col.hReserved, "got %p\n", col.hReserved); + hr = IDirectorySearch_CloseSearchHandle(ds, sh); ok(hr == S_OK, "got %#x\n", hr); @@ -428,6 +459,66 @@ do_search(&scientists_subtree); } +static void test_DirectoryObject(void) +{ + HRESULT hr; + IDirectoryObject *dirobj; + IUnknown *unk; + IDirectorySearch *ds; + ADS_SEARCHPREF_INFO pref[2]; + ADS_SEARCH_HANDLE sh; + ADS_SEARCH_COLUMN col; + + hr = ADsGetObject(L"LDAP://ldap.forumsys.com/OU=scientists,DC=example,DC=com", &IID_IDirectoryObject, (void **)&dirobj); + if (hr == HRESULT_FROM_WIN32(ERROR_DS_SERVER_DOWN)) + { + skip("server is down\n"); + return; + } + ok(hr == S_OK, "got %#x\n", hr); + + hr = IDirectoryObject_QueryInterface(dirobj, &IID_IADsOpenDSObject, (void **)&unk); +todo_wine + ok(hr == E_NOINTERFACE, "got %#x\n", hr); + hr = IDirectoryObject_QueryInterface(dirobj, &IID_IDispatch, (void **)&unk); + ok(hr == S_OK, "got %#x\n", hr); + IUnknown_Release(unk); + hr = IDirectoryObject_QueryInterface(dirobj, &IID_IADs, (void **)&unk); + ok(hr == S_OK, "got %#x\n", hr); + IUnknown_Release(unk); + hr = IDirectoryObject_QueryInterface(dirobj, &IID_IDirectorySearch, (void **)&ds); + ok(hr == S_OK, "got %#x\n", hr); + + pref[0].dwSearchPref = ADS_SEARCHPREF_SEARCH_SCOPE; + pref[0].vValue.dwType = ADSTYPE_INTEGER; + pref[0].vValue.Integer = ADS_SCOPE_BASE; + pref[0].dwStatus = 0xdeadbeef; + pref[1].dwSearchPref = ADS_SEARCHPREF_SECURITY_MASK; + pref[1].vValue.dwType = ADSTYPE_INTEGER; + pref[1].vValue.Integer = ADS_SECURITY_INFO_OWNER | ADS_SECURITY_INFO_GROUP | ADS_SECURITY_INFO_DACL; + pref[1].dwStatus = 0xdeadbeef; + hr = IDirectorySearch_SetSearchPreference(ds, pref, ARRAY_SIZE(pref)); + ok(hr == S_ADS_ERRORSOCCURRED, "got %#x\n", hr); + ok(pref[0].dwStatus == ADS_STATUS_S_OK, "got %d\n", pref[0].dwStatus); + /* ldap.forumsys.com doesn't support NT security, real ADs DC - does */ + ok(pref[1].dwStatus == ADS_STATUS_INVALID_SEARCHPREF, "got %d\n", pref[1].dwStatus); + + hr = IDirectorySearch_ExecuteSearch(ds, (WCHAR *)L"(objectClass=*)", NULL, ~0, &sh); + ok(hr == S_OK, "got %#x\n", hr); + + hr = IDirectorySearch_GetNextRow(ds, sh); + ok(hr == S_OK, "got %#x\n", hr); + + hr = IDirectorySearch_GetColumn(ds, sh, (WCHAR *)L"nTSecurityDescriptor", &col); + ok(hr == E_ADS_COLUMN_NOT_SET, "got %#x\n", hr); + + hr = IDirectorySearch_CloseSearchHandle(ds, sh); + ok(hr == S_OK, "got %#x\n", hr); + + IDirectorySearch_Release(ds); + IDirectoryObject_Release(dirobj); +} + START_TEST(ldap) { HRESULT hr; @@ -438,6 +529,7 @@ test_LDAP(); test_ParseDisplayName(); test_DirectorySearch(); + test_DirectoryObject(); CoUninitialize(); } diff -Nru wine-development-5.5/dlls/advapi32/security.c wine-development-5.6/dlls/advapi32/security.c --- wine-development-5.5/dlls/advapi32/security.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/advapi32/security.c 2020-04-10 18:54:32.000000000 +0000 @@ -3518,20 +3518,40 @@ DumpString(AceRightBitNames[i], -1, pwptr, plen); } +static inline BOOL is_object_ace(BYTE AceType) +{ + switch (AceType) + { + case ACCESS_ALLOWED_OBJECT_ACE_TYPE: + case ACCESS_DENIED_OBJECT_ACE_TYPE: + case ACCESS_AUDIT_OBJECT_ACE_TYPE: + case ACCESS_ALARM_OBJECT_ACE_TYPE: + case ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE: + case ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE: + case SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE: + case SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE: + return TRUE; + + default: return FALSE; + } +} + static BOOL DumpAce(LPVOID pace, WCHAR **pwptr, ULONG *plen) { ACCESS_ALLOWED_ACE *piace; /* all the supported ACEs have the same memory layout */ static const WCHAR openbr = '('; static const WCHAR closebr = ')'; static const WCHAR semicolon = ';'; + DWORD *SidStart; - if (((PACE_HEADER)pace)->AceType > SYSTEM_ALARM_ACE_TYPE || ((PACE_HEADER)pace)->AceSize < sizeof(ACCESS_ALLOWED_ACE)) + piace = pace; + + if (piace->Header.AceType > ACCESS_MAX_MS_V5_ACE_TYPE || piace->Header.AceSize < sizeof(ACCESS_ALLOWED_ACE)) { SetLastError(ERROR_INVALID_ACL); return FALSE; } - piace = pace; DumpString(&openbr, 1, pwptr, plen); switch (piace->Header.AceType) { @@ -3567,11 +3587,22 @@ DumpString(&semicolon, 1, pwptr, plen); DumpRights(piace->Mask, pwptr, plen); DumpString(&semicolon, 1, pwptr, plen); + SidStart = &piace->SidStart; + if (is_object_ace(piace->Header.AceType)) + { + ACCESS_ALLOWED_OBJECT_ACE *objace = pace; + + SidStart++; /* Flags */ + if (objace->Flags & ACE_OBJECT_TYPE_PRESENT) + SidStart += sizeof(GUID) / sizeof(*SidStart); /* ObjectType */ + if (objace->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) + SidStart += sizeof(GUID) / sizeof(*SidStart); /* InheritedObjectType */ + } /* objects not supported */ DumpString(&semicolon, 1, pwptr, plen); /* objects not supported */ DumpString(&semicolon, 1, pwptr, plen); - if (!DumpSid(&piace->SidStart, pwptr, plen)) + if (!DumpSid(SidStart, pwptr, plen)) return FALSE; DumpString(&closebr, 1, pwptr, plen); return TRUE; diff -Nru wine-development-5.5/dlls/api-ms-win-core-localization-l1-1-0/api-ms-win-core-localization-l1-1-0.spec wine-development-5.6/dlls/api-ms-win-core-localization-l1-1-0/api-ms-win-core-localization-l1-1-0.spec --- wine-development-5.5/dlls/api-ms-win-core-localization-l1-1-0/api-ms-win-core-localization-l1-1-0.spec 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/api-ms-win-core-localization-l1-1-0/api-ms-win-core-localization-l1-1-0.spec 2020-04-10 18:54:32.000000000 +0000 @@ -11,8 +11,8 @@ @ stdcall GetFileMUIPath(long wstr wstr ptr ptr ptr ptr) kernel32.GetFileMUIPath @ stdcall GetLocaleInfoEx(wstr long ptr long) kernel32.GetLocaleInfoEx @ stdcall GetLocaleInfoW(long long ptr long) kernel32.GetLocaleInfoW -@ stub GetNLSVersion -@ stub GetNLSVersionEx +@ stdcall GetNLSVersion(long long ptr) kernel32.GetNLSVersion +@ stdcall GetNLSVersionEx(long wstr ptr) kernel32.GetNLSVersionEx @ stdcall GetOEMCP() kernel32.GetOEMCP @ stdcall GetProcessPreferredUILanguages(long ptr ptr ptr) kernel32.GetProcessPreferredUILanguages @ stdcall GetSystemDefaultLCID() kernel32.GetSystemDefaultLCID diff -Nru wine-development-5.5/dlls/api-ms-win-core-localization-l1-2-0/api-ms-win-core-localization-l1-2-0.spec wine-development-5.6/dlls/api-ms-win-core-localization-l1-2-0/api-ms-win-core-localization-l1-2-0.spec --- wine-development-5.5/dlls/api-ms-win-core-localization-l1-2-0/api-ms-win-core-localization-l1-2-0.spec 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/api-ms-win-core-localization-l1-2-0/api-ms-win-core-localization-l1-2-0.spec 2020-04-10 18:54:32.000000000 +0000 @@ -17,8 +17,8 @@ @ stdcall GetLocaleInfoA(long long ptr long) kernel32.GetLocaleInfoA @ stdcall GetLocaleInfoEx(wstr long ptr long) kernel32.GetLocaleInfoEx @ stdcall GetLocaleInfoW(long long ptr long) kernel32.GetLocaleInfoW -@ stub GetNLSVersion -@ stub GetNLSVersionEx +@ stdcall GetNLSVersion(long long ptr) kernel32.GetNLSVersion +@ stdcall GetNLSVersionEx(long wstr ptr) kernel32.GetNLSVersionEx @ stdcall GetOEMCP() kernel32.GetOEMCP @ stdcall GetProcessPreferredUILanguages(long ptr ptr ptr) kernel32.GetProcessPreferredUILanguages @ stdcall GetSystemDefaultLCID() kernel32.GetSystemDefaultLCID @@ -42,7 +42,7 @@ @ stdcall IsValidLanguageGroup(long long) kernel32.IsValidLanguageGroup @ stdcall IsValidLocale(long long) kernel32.IsValidLocale @ stdcall IsValidLocaleName(wstr) kernel32.IsValidLocaleName -@ stub IsValidNLSVersion +@ stdcall IsValidNLSVersion(long wstr ptr) kernel32.IsValidNLSVersion @ stdcall LCMapStringA(long long str long ptr long) kernel32.LCMapStringA @ stdcall LCMapStringEx(wstr long wstr long ptr long ptr ptr long) kernel32.LCMapStringEx @ stdcall LCMapStringW(long long wstr long ptr long) kernel32.LCMapStringW diff -Nru wine-development-5.5/dlls/api-ms-win-core-localization-l1-2-1/api-ms-win-core-localization-l1-2-1.spec wine-development-5.6/dlls/api-ms-win-core-localization-l1-2-1/api-ms-win-core-localization-l1-2-1.spec --- wine-development-5.5/dlls/api-ms-win-core-localization-l1-2-1/api-ms-win-core-localization-l1-2-1.spec 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/api-ms-win-core-localization-l1-2-1/api-ms-win-core-localization-l1-2-1.spec 2020-04-10 18:54:32.000000000 +0000 @@ -18,8 +18,8 @@ @ stdcall GetLocaleInfoA(long long ptr long) kernel32.GetLocaleInfoA @ stdcall GetLocaleInfoEx(wstr long ptr long) kernel32.GetLocaleInfoEx @ stdcall GetLocaleInfoW(long long ptr long) kernel32.GetLocaleInfoW -@ stub GetNLSVersion -@ stub GetNLSVersionEx +@ stdcall GetNLSVersion(long long ptr) kernel32.GetNLSVersion +@ stdcall GetNLSVersionEx(long wstr ptr) kernel32.GetNLSVersionEx @ stdcall GetOEMCP() kernel32.GetOEMCP @ stdcall GetProcessPreferredUILanguages(long ptr ptr ptr) kernel32.GetProcessPreferredUILanguages @ stdcall GetSystemDefaultLCID() kernel32.GetSystemDefaultLCID @@ -43,7 +43,7 @@ @ stdcall IsValidLanguageGroup(long long) kernel32.IsValidLanguageGroup @ stdcall IsValidLocale(long long) kernel32.IsValidLocale @ stdcall IsValidLocaleName(wstr) kernel32.IsValidLocaleName -@ stub IsValidNLSVersion +@ stdcall IsValidNLSVersion(long wstr ptr) kernel32.IsValidNLSVersion @ stdcall LCMapStringA(long long str long ptr long) kernel32.LCMapStringA @ stdcall LCMapStringEx(wstr long wstr long ptr long ptr ptr long) kernel32.LCMapStringEx @ stdcall LCMapStringW(long long wstr long ptr long) kernel32.LCMapStringW diff -Nru wine-development-5.5/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec wine-development-5.6/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec --- wine-development-5.5/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec 2020-04-10 18:54:32.000000000 +0000 @@ -150,7 +150,7 @@ @ stub _o___stdio_common_vfprintf_p @ stub _o___stdio_common_vfprintf_s @ stub _o___stdio_common_vfscanf -@ stub _o___stdio_common_vfwprintf +@ cdecl _o___stdio_common_vfwprintf(int64 ptr wstr ptr ptr) ucrtbase._o___stdio_common_vfwprintf @ stub _o___stdio_common_vfwprintf_p @ stub _o___stdio_common_vfwprintf_s @ stub _o___stdio_common_vfwscanf @@ -160,7 +160,7 @@ @ stub _o___stdio_common_vsprintf_p @ cdecl _o___stdio_common_vsprintf_s(int64 ptr long str ptr ptr) ucrtbase._o___stdio_common_vsprintf_s @ stub _o___stdio_common_vsscanf -@ stub _o___stdio_common_vswprintf +@ cdecl _o___stdio_common_vswprintf(int64 ptr long wstr ptr ptr) ucrtbase._o___stdio_common_vswprintf @ stub _o___stdio_common_vswprintf_p @ stub _o___stdio_common_vswprintf_s @ stub _o___stdio_common_vswscanf diff -Nru wine-development-5.5/dlls/avifile.dll16/Makefile.in wine-development-5.6/dlls/avifile.dll16/Makefile.in --- wine-development-5.5/dlls/avifile.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/avifile.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ MODULE = avifile.dll16 IMPORTS = avifil32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,avifil32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,avifil32.dll C_SRCS = \ main.c diff -Nru wine-development-5.5/dlls/bcrypt/bcrypt_main.c wine-development-5.6/dlls/bcrypt/bcrypt_main.c --- wine-development-5.5/dlls/bcrypt/bcrypt_main.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/bcrypt/bcrypt_main.c 2020-04-10 18:54:32.000000000 +0000 @@ -37,7 +37,6 @@ #include "wine/debug.h" #include "wine/heap.h" -#include "wine/library.h" #include "wine/unicode.h" WINE_DEFAULT_DEBUG_CHANNEL(bcrypt); diff -Nru wine-development-5.5/dlls/bcrypt/gnutls.c wine-development-5.6/dlls/bcrypt/gnutls.c --- wine-development-5.5/dlls/bcrypt/gnutls.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/bcrypt/gnutls.c 2020-04-10 18:54:32.000000000 +0000 @@ -39,7 +39,6 @@ #include "wine/debug.h" #include "wine/heap.h" -#include "wine/library.h" #include "wine/unicode.h" #ifdef HAVE_GNUTLS_CIPHER_INIT @@ -180,14 +179,14 @@ { int ret; - if (!(libgnutls_handle = wine_dlopen( SONAME_LIBGNUTLS, RTLD_NOW, NULL, 0 ))) + if (!(libgnutls_handle = dlopen( SONAME_LIBGNUTLS, RTLD_NOW ))) { ERR_(winediag)( "failed to load libgnutls, no support for encryption\n" ); return FALSE; } #define LOAD_FUNCPTR(f) \ - if (!(p##f = wine_dlsym( libgnutls_handle, #f, NULL, 0 ))) \ + if (!(p##f = dlsym( libgnutls_handle, #f ))) \ { \ ERR( "failed to load %s\n", #f ); \ goto fail; \ @@ -209,12 +208,12 @@ LOAD_FUNCPTR(gnutls_pubkey_init); #undef LOAD_FUNCPTR - if (!(pgnutls_cipher_tag = wine_dlsym( libgnutls_handle, "gnutls_cipher_tag", NULL, 0 ))) + if (!(pgnutls_cipher_tag = dlsym( libgnutls_handle, "gnutls_cipher_tag" ))) { WARN("gnutls_cipher_tag not found\n"); pgnutls_cipher_tag = compat_gnutls_cipher_tag; } - if (!(pgnutls_cipher_add_auth = wine_dlsym( libgnutls_handle, "gnutls_cipher_add_auth", NULL, 0 ))) + if (!(pgnutls_cipher_add_auth = dlsym( libgnutls_handle, "gnutls_cipher_add_auth" ))) { WARN("gnutls_cipher_add_auth not found\n"); pgnutls_cipher_add_auth = compat_gnutls_cipher_add_auth; @@ -225,47 +224,47 @@ pgnutls_perror( ret ); goto fail; } - if (!(pgnutls_pubkey_import_ecc_raw = wine_dlsym( libgnutls_handle, "gnutls_pubkey_import_ecc_raw", NULL, 0 ))) + if (!(pgnutls_pubkey_import_ecc_raw = dlsym( libgnutls_handle, "gnutls_pubkey_import_ecc_raw" ))) { WARN("gnutls_pubkey_import_ecc_raw not found\n"); pgnutls_pubkey_import_ecc_raw = compat_gnutls_pubkey_import_ecc_raw; } - if (!(pgnutls_privkey_export_rsa_raw = wine_dlsym( libgnutls_handle, "gnutls_privkey_export_rsa_raw", NULL, 0 ))) + if (!(pgnutls_privkey_export_rsa_raw = dlsym( libgnutls_handle, "gnutls_privkey_export_rsa_raw" ))) { WARN("gnutls_privkey_export_rsa_raw not found\n"); pgnutls_privkey_export_rsa_raw = compat_gnutls_privkey_export_rsa_raw; } - if (!(pgnutls_privkey_export_ecc_raw = wine_dlsym( libgnutls_handle, "gnutls_privkey_export_ecc_raw", NULL, 0 ))) + if (!(pgnutls_privkey_export_ecc_raw = dlsym( libgnutls_handle, "gnutls_privkey_export_ecc_raw" ))) { WARN("gnutls_privkey_export_ecc_raw not found\n"); pgnutls_privkey_export_ecc_raw = compat_gnutls_privkey_export_ecc_raw; } - if (!(pgnutls_privkey_import_ecc_raw = wine_dlsym( libgnutls_handle, "gnutls_privkey_import_ecc_raw", NULL, 0 ))) + if (!(pgnutls_privkey_import_ecc_raw = dlsym( libgnutls_handle, "gnutls_privkey_import_ecc_raw" ))) { WARN("gnutls_privkey_import_ecc_raw not found\n"); pgnutls_privkey_import_ecc_raw = compat_gnutls_privkey_import_ecc_raw; } - if (!(pgnutls_pk_to_sign = wine_dlsym( libgnutls_handle, "gnutls_pk_to_sign", NULL, 0 ))) + if (!(pgnutls_pk_to_sign = dlsym( libgnutls_handle, "gnutls_pk_to_sign" ))) { WARN("gnutls_pk_to_sign not found\n"); pgnutls_pk_to_sign = compat_gnutls_pk_to_sign; } - if (!(pgnutls_pubkey_verify_hash2 = wine_dlsym( libgnutls_handle, "gnutls_pubkey_verify_hash2", NULL, 0 ))) + if (!(pgnutls_pubkey_verify_hash2 = dlsym( libgnutls_handle, "gnutls_pubkey_verify_hash2" ))) { WARN("gnutls_pubkey_verify_hash2 not found\n"); pgnutls_pubkey_verify_hash2 = compat_gnutls_pubkey_verify_hash2; } - if (!(pgnutls_pubkey_import_rsa_raw = wine_dlsym( libgnutls_handle, "gnutls_pubkey_import_rsa_raw", NULL, 0 ))) + if (!(pgnutls_pubkey_import_rsa_raw = dlsym( libgnutls_handle, "gnutls_pubkey_import_rsa_raw" ))) { WARN("gnutls_pubkey_import_rsa_raw not found\n"); pgnutls_pubkey_import_rsa_raw = compat_gnutls_pubkey_import_rsa_raw; } - if (!(pgnutls_privkey_generate = wine_dlsym( libgnutls_handle, "gnutls_privkey_generate", NULL, 0 ))) + if (!(pgnutls_privkey_generate = dlsym( libgnutls_handle, "gnutls_privkey_generate" ))) { WARN("gnutls_privkey_generate not found\n"); pgnutls_privkey_generate = compat_gnutls_privkey_generate; } - if (!(pgnutls_decode_rs_value = wine_dlsym( libgnutls_handle, "gnutls_decode_rs_value", NULL, 0 ))) + if (!(pgnutls_decode_rs_value = dlsym( libgnutls_handle, "gnutls_decode_rs_value" ))) { WARN("gnutls_decode_rs_value not found\n"); pgnutls_decode_rs_value = compat_gnutls_decode_rs_value; @@ -280,7 +279,7 @@ return TRUE; fail: - wine_dlclose( libgnutls_handle, NULL, 0 ); + dlclose( libgnutls_handle ); libgnutls_handle = NULL; return FALSE; } @@ -288,7 +287,7 @@ void gnutls_uninitialize(void) { pgnutls_global_deinit(); - wine_dlclose( libgnutls_handle, NULL, 0 ); + dlclose( libgnutls_handle ); libgnutls_handle = NULL; } diff -Nru wine-development-5.5/dlls/bcrypt/macos.c wine-development-5.6/dlls/bcrypt/macos.c --- wine-development-5.5/dlls/bcrypt/macos.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/bcrypt/macos.c 2020-04-10 18:54:32.000000000 +0000 @@ -38,7 +38,6 @@ #include "wine/debug.h" #include "wine/heap.h" -#include "wine/library.h" #include "wine/unicode.h" #if defined(HAVE_COMMONCRYPTO_COMMONCRYPTOR_H) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1080 && !defined(HAVE_GNUTLS_CIPHER_INIT) diff -Nru wine-development-5.5/dlls/cabinet/deflate.c wine-development-5.6/dlls/cabinet/deflate.c --- wine-development-5.5/dlls/cabinet/deflate.c 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/cabinet/deflate.c 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,2974 @@ +/* deflate.c -- compress data using the deflation algorithm + * + * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * Jean-loup Gailly Mark Adler + * jloup@gzip.org madler@alumni.caltech.edu + */ + +#include +#include +#include +#include "zlib.h" + +#define DEF_MEM_LEVEL 8 +#define DEF_WBITS MAX_WBITS +#define zmemcpy memcpy +#define zmemzero(dest, len) memset(dest, 0, len) + +#define Assert(cond,msg) +#define Trace(x) +#define Tracev(x) +#define Tracevv(x) +#define Tracecv(c,x) + +#define ZALLOC(strm, items, size) \ + (*((strm)->zalloc))((strm)->opaque, (items), (size)) +#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) +#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} + +/* Reverse the bytes in a 32-bit value */ +#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ + (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) + +static const char * const z_errmsg[10] = { + (z_const char *)"need dictionary", /* Z_NEED_DICT 2 */ + (z_const char *)"stream end", /* Z_STREAM_END 1 */ + (z_const char *)"", /* Z_OK 0 */ + (z_const char *)"file error", /* Z_ERRNO (-1) */ + (z_const char *)"stream error", /* Z_STREAM_ERROR (-2) */ + (z_const char *)"data error", /* Z_DATA_ERROR (-3) */ + (z_const char *)"insufficient memory", /* Z_MEM_ERROR (-4) */ + (z_const char *)"buffer error", /* Z_BUF_ERROR (-5) */ + (z_const char *)"incompatible version",/* Z_VERSION_ERROR (-6) */ + (z_const char *)"" +}; + +#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] + +#define ERR_RETURN(strm,err) \ + return (strm->msg = ERR_MSG(err), (err)) +/* To be used only when the state is known to be valid */ + +#define STORED_BLOCK 0 +#define STATIC_TREES 1 +#define DYN_TREES 2 +/* The three kinds of block type */ + +#define MIN_MATCH 3 +#define MAX_MATCH 258 +/* The minimum and maximum match lengths */ + +#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ + +#define BASE 65521U /* largest prime smaller than 65536 */ +#define NMAX 5552 +/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ + +#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;} +#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); +#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); +#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); +#define DO16(buf) DO8(buf,0); DO8(buf,8); + +#define MOD(a) a %= BASE +#define MOD28(a) a %= BASE +#define MOD63(a) a %= BASE + +static uLong adler32( uLong adler, const Bytef *buf, uInt len ) +{ + unsigned long sum2; + unsigned n; + + /* split Adler-32 into component sums */ + sum2 = (adler >> 16) & 0xffff; + adler &= 0xffff; + + /* in case user likes doing a byte at a time, keep it fast */ + if (len == 1) { + adler += buf[0]; + if (adler >= BASE) + adler -= BASE; + sum2 += adler; + if (sum2 >= BASE) + sum2 -= BASE; + return adler | (sum2 << 16); + } + + /* initial Adler-32 value (deferred check for len == 1 speed) */ + if (buf == Z_NULL) + return 1L; + + /* in case short lengths are provided, keep it somewhat fast */ + if (len < 16) { + while (len--) { + adler += *buf++; + sum2 += adler; + } + if (adler >= BASE) + adler -= BASE; + MOD28(sum2); /* only added so many BASE's */ + return adler | (sum2 << 16); + } + + /* do length NMAX blocks -- requires just one modulo operation */ + while (len >= NMAX) { + len -= NMAX; + n = NMAX / 16; /* NMAX is divisible by 16 */ + do { + DO16(buf); /* 16 sums unrolled */ + buf += 16; + } while (--n); + MOD(adler); + MOD(sum2); + } + + /* do remaining bytes (less than NMAX, still just one modulo) */ + if (len) { /* avoid modulos if none remaining */ + while (len >= 16) { + len -= 16; + DO16(buf); + buf += 16; + } + while (len--) { + adler += *buf++; + sum2 += adler; + } + MOD(adler); + MOD(sum2); + } + + /* return recombined sums */ + return adler | (sum2 << 16); +} + +/* =========================================================================== + * Internal compression state. + */ + +#define LENGTH_CODES 29 +/* number of length codes, not counting the special END_BLOCK code */ + +#define LITERALS 256 +/* number of literal bytes 0..255 */ + +#define L_CODES (LITERALS+1+LENGTH_CODES) +/* number of Literal or Length codes, including the END_BLOCK code */ + +#define D_CODES 30 +/* number of distance codes */ + +#define BL_CODES 19 +/* number of codes used to transfer the bit lengths */ + +#define HEAP_SIZE (2*L_CODES+1) +/* maximum heap size */ + +#define MAX_BITS 15 +/* All codes must not exceed MAX_BITS bits */ + +#define Buf_size 16 +/* size of bit buffer in bi_buf */ + +#define INIT_STATE 42 /* zlib header -> BUSY_STATE */ +#ifdef GZIP +# define GZIP_STATE 57 /* gzip header -> BUSY_STATE | EXTRA_STATE */ +#endif +#define EXTRA_STATE 69 /* gzip extra block -> NAME_STATE */ +#define NAME_STATE 73 /* gzip file name -> COMMENT_STATE */ +#define COMMENT_STATE 91 /* gzip comment -> HCRC_STATE */ +#define HCRC_STATE 103 /* gzip header CRC -> BUSY_STATE */ +#define BUSY_STATE 113 /* deflate -> FINISH_STATE */ +#define FINISH_STATE 666 /* stream complete */ +/* Stream status */ + + +/* Data structure describing a single value and its code string. */ +typedef struct ct_data_s { + union { + ush freq; /* frequency count */ + ush code; /* bit string */ + } fc; + union { + ush dad; /* father node in Huffman tree */ + ush len; /* length of bit string */ + } dl; +} FAR ct_data; + +#define Freq fc.freq +#define Code fc.code +#define Dad dl.dad +#define Len dl.len + +typedef struct static_tree_desc_s static_tree_desc; + +typedef struct tree_desc_s { + ct_data *dyn_tree; /* the dynamic tree */ + int max_code; /* largest code with non zero frequency */ + const static_tree_desc *stat_desc; /* the corresponding static tree */ +} FAR tree_desc; + +typedef ush Pos; +typedef Pos FAR Posf; +typedef unsigned IPos; + +/* A Pos is an index in the character window. We use short instead of int to + * save space in the various tables. IPos is used only for parameter passing. + */ + +typedef struct internal_state { + z_streamp strm; /* pointer back to this zlib stream */ + int status; /* as the name implies */ + Bytef *pending_buf; /* output still pending */ + ulg pending_buf_size; /* size of pending_buf */ + Bytef *pending_out; /* next pending byte to output to the stream */ + ulg pending; /* nb of bytes in the pending buffer */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + gz_headerp gzhead; /* gzip header information to write */ + ulg gzindex; /* where in extra, name, or comment */ + Byte method; /* can only be DEFLATED */ + int last_flush; /* value of flush param for previous deflate call */ + + /* used by deflate.c: */ + + uInt w_size; /* LZ77 window size (32K by default) */ + uInt w_bits; /* log2(w_size) (8..16) */ + uInt w_mask; /* w_size - 1 */ + + Bytef *window; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. Also, it limits + * the window size to 64K, which is quite useful on MSDOS. + * To do: use the user input buffer as sliding window. + */ + + ulg window_size; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + Posf *prev; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + Posf *head; /* Heads of the hash chains or NIL. */ + + uInt ins_h; /* hash index of string to be inserted */ + uInt hash_size; /* number of elements in hash table */ + uInt hash_bits; /* log2(hash_size) */ + uInt hash_mask; /* hash_size-1 */ + + uInt hash_shift; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + long block_start; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + uInt match_length; /* length of best match */ + IPos prev_match; /* previous match */ + int match_available; /* set if previous match exists */ + uInt strstart; /* start of string to insert */ + uInt match_start; /* start of matching string */ + uInt lookahead; /* number of valid bytes ahead in window */ + + uInt prev_length; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + uInt max_chain_length; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + uInt max_lazy_match; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ +# define max_insert_length max_lazy_match + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + int level; /* compression level (1..9) */ + int strategy; /* favor or force Huffman coding*/ + + uInt good_match; + /* Use a faster search when the previous match is longer than this */ + + int nice_match; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + /* Didn't use ct_data typedef below to suppress compiler warning */ + struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + struct tree_desc_s l_desc; /* desc. for literal tree */ + struct tree_desc_s d_desc; /* desc. for distance tree */ + struct tree_desc_s bl_desc; /* desc. for bit length tree */ + + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + int heap_len; /* number of elements in the heap */ + int heap_max; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + uch depth[2*L_CODES+1]; + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + uchf *l_buf; /* buffer for literals or lengths */ + + uInt lit_bufsize; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + uInt last_lit; /* running index in l_buf */ + + ushf *d_buf; + /* Buffer for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + ulg opt_len; /* bit length of current block with optimal trees */ + ulg static_len; /* bit length of current block with static trees */ + uInt matches; /* number of string matches in current block */ + uInt insert; /* bytes at end of window left to insert */ + +#ifdef ZLIB_DEBUG + ulg compressed_len; /* total bit length of compressed file mod 2^32 */ + ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ +#endif + + ush bi_buf; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + int bi_valid; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + + ulg high_water; + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ + +} FAR deflate_state; + +/* Output a byte on the stream. + * IN assertion: there is enough room in pending_buf. + */ +#define put_byte(s, c) {s->pending_buf[s->pending++] = (Bytef)(c);} + + +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +/* Minimum amount of lookahead, except at the end of the input file. + * See deflate.c for comments about the MIN_MATCH+1. + */ + +#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD) +/* In order to simplify the code, particularly on 16 bit machines, match + * distances are limited to MAX_DIST instead of WSIZE. + */ + +#define WIN_INIT MAX_MATCH +/* Number of bytes after end of data in window to initialize in order to avoid + memory checker errors from longest match routines */ + + +#define MAX_BL_BITS 7 +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +#define END_BLOCK 256 +/* end of block literal code */ + +#define REP_3_6 16 +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +#define REPZ_3_10 17 +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +#define REPZ_11_138 18 +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +static const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */ + = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0}; + +static const int extra_dbits[D_CODES] /* extra bits for each distance code */ + = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + +static const int extra_blbits[BL_CODES]/* extra bits for each bit length code */ + = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7}; + +static const uch bl_order[BL_CODES] + = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +#define DIST_CODE_LEN 512 /* see definition of array dist_code below */ + +static const ct_data static_ltree[L_CODES+2] = { +{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}}, +{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}}, +{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}}, +{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}}, +{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}}, +{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}}, +{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}}, +{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}}, +{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}}, +{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}}, +{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}}, +{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}}, +{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}}, +{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}}, +{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}}, +{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}}, +{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}}, +{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}}, +{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}}, +{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}}, +{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}}, +{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}}, +{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}}, +{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}}, +{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}}, +{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}}, +{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}}, +{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}}, +{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}}, +{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}}, +{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}}, +{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}}, +{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}}, +{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}}, +{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}}, +{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}}, +{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}}, +{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}}, +{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}}, +{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}}, +{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}}, +{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}}, +{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}}, +{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}}, +{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}}, +{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}}, +{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}}, +{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}}, +{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}}, +{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}}, +{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}}, +{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}}, +{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}}, +{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}}, +{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}}, +{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}}, +{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}}, +{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}} +}; + +static const ct_data static_dtree[D_CODES] = { +{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}}, +{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}}, +{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}}, +{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}}, +{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}}, +{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} +}; + +static const uch _dist_code[DIST_CODE_LEN] = { + 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, + 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, +10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, +11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, +12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, +18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 +}; + +static const uch _length_code[MAX_MATCH-MIN_MATCH+1]= { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, +13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, +17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, +19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, +21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, +22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 +}; + +static const int base_length[LENGTH_CODES] = { +0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, +64, 80, 96, 112, 128, 160, 192, 224, 0 +}; + +static const int base_dist[D_CODES] = { + 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, + 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, + 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 +}; + + +struct static_tree_desc_s { + const ct_data *static_tree; /* static tree or NULL */ + const intf *extra_bits; /* extra bits for each code or NULL */ + int extra_base; /* base index for extra_bits */ + int elems; /* max number of elements in the tree */ + int max_length; /* max bit length for the codes */ +}; + +static const static_tree_desc static_l_desc = +{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; + +static const static_tree_desc static_d_desc = +{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; + +static const static_tree_desc static_bl_desc = +{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; + +#define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len) + /* Send a code of the given tree. c and tree must not have side effects */ + +#define d_code(dist) \ + ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) +/* Mapping from a distance to a distance code. dist is the distance - 1 and + * must not have side effects. _dist_code[256] and _dist_code[257] are never + * used. + */ + +# define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->d_buf[s->last_lit] = 0; \ + s->l_buf[s->last_lit++] = cc; \ + s->dyn_ltree[cc].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +# define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (uch)(length); \ + ush dist = (ush)(distance); \ + s->d_buf[s->last_lit] = dist; \ + s->l_buf[s->last_lit++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } + + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +#define put_short(s, w) { \ + put_byte(s, (uch)((w) & 0xff)); \ + put_byte(s, (uch)((ush)(w) >> 8)); \ +} + +#define send_bits(s, value, length) \ +{ int len = length;\ + if (s->bi_valid > (int)Buf_size - len) {\ + int val = (int)value;\ + s->bi_buf |= (ush)val << s->bi_valid;\ + put_short(s, s->bi_buf);\ + s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\ + s->bi_valid += len - Buf_size;\ + } else {\ + s->bi_buf |= (ush)(value) << s->bi_valid;\ + s->bi_valid += len;\ + }\ +} + + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +static void compress_block( deflate_state *s, const ct_data *ltree, const ct_data *dtree ) +{ + unsigned dist; /* distance of matched string */ + int lc; /* match length or unmatched char (if dist == 0) */ + unsigned lx = 0; /* running index in l_buf */ + unsigned code; /* the code to send */ + int extra; /* number of extra bits to send */ + + if (s->last_lit != 0) do { + dist = s->d_buf[lx]; + lc = s->l_buf[lx++]; + if (dist == 0) { + send_code(s, lc, ltree); /* send a literal byte */ + Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code+LITERALS+1, ltree); /* send the length code */ + extra = extra_lbits[code]; + if (extra != 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra != 0) { + dist -= (unsigned)base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, + "pendingBuf overflow"); + + } while (lx < s->last_lit); + + send_code(s, END_BLOCK, ltree); +} + +/* =========================================================================== + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * "black list" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * "gray list" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). + * IN assertion: the fields Freq of dyn_ltree are set. + */ +static int detect_data_type( deflate_state *s ) +{ + /* black_mask is the bit mask of black-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + unsigned long black_mask = 0xf3ffc07fUL; + int n; + + /* Check for non-textual ("black-listed") bytes. */ + for (n = 0; n <= 31; n++, black_mask >>= 1) + if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0)) + return Z_BINARY; + + /* Check for textual ("white-listed") bytes. */ + if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 + || s->dyn_ltree[13].Freq != 0) + return Z_TEXT; + for (n = 32; n < LITERALS; n++) + if (s->dyn_ltree[n].Freq != 0) + return Z_TEXT; + + /* There are no "black-listed" or "white-listed" bytes: + * this stream either is empty or has tolerated ("gray-listed") bytes only. + */ + return Z_BINARY; +} + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +static unsigned bi_reverse( unsigned code, int len ) +{ + register unsigned res = 0; + do { + res |= code & 1; + code >>= 1, res <<= 1; + } while (--len > 0); + return res >> 1; +} + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +static void bi_flush( deflate_state *s ) +{ + if (s->bi_valid == 16) { + put_short(s, s->bi_buf); + s->bi_buf = 0; + s->bi_valid = 0; + } else if (s->bi_valid >= 8) { + put_byte(s, (Byte)s->bi_buf); + s->bi_buf >>= 8; + s->bi_valid -= 8; + } +} + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +static void bi_windup( deflate_state *s ) +{ + if (s->bi_valid > 8) { + put_short(s, s->bi_buf); + } else if (s->bi_valid > 0) { + put_byte(s, (Byte)s->bi_buf); + } + s->bi_buf = 0; + s->bi_valid = 0; +#ifdef ZLIB_DEBUG + s->bits_sent = (s->bits_sent+7) & ~7; +#endif +} + +/* =========================================================================== + * Initialize a new block. + */ +static void init_block( deflate_state *s ) +{ + int n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; + for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; + for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; + + s->dyn_ltree[END_BLOCK].Freq = 1; + s->opt_len = s->static_len = 0L; + s->last_lit = s->matches = 0; +} + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +static void _tr_init( deflate_state *s ) +{ + s->l_desc.dyn_tree = s->dyn_ltree; + s->l_desc.stat_desc = &static_l_desc; + + s->d_desc.dyn_tree = s->dyn_dtree; + s->d_desc.stat_desc = &static_d_desc; + + s->bl_desc.dyn_tree = s->bl_tree; + s->bl_desc.stat_desc = &static_bl_desc; + + s->bi_buf = 0; + s->bi_valid = 0; +#ifdef ZLIB_DEBUG + s->compressed_len = 0L; + s->bits_sent = 0L; +#endif + + /* Initialize the first block of the first file: */ + init_block(s); +} + +#define SMALLEST 1 +/* Index within the heap array of least frequent node in the Huffman tree */ + + +/* =========================================================================== + * Remove the smallest element from the heap and recreate the heap with + * one less element. Updates heap and heap_len. + */ +#define pqremove(s, tree, top) \ +{\ + top = s->heap[SMALLEST]; \ + s->heap[SMALLEST] = s->heap[s->heap_len--]; \ + pqdownheap(s, tree, SMALLEST); \ +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +#define smaller(tree, n, m, depth) \ + (tree[n].Freq < tree[m].Freq || \ + (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m])) + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +static void pqdownheap( deflate_state *s, ct_data *tree, int k ) +{ + int v = s->heap[k]; + int j = k << 1; /* left son of k */ + while (j <= s->heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s->heap_len && + smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s->heap[j], s->depth)) break; + + /* Exchange v with the smallest son */ + s->heap[k] = s->heap[j]; k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s->heap[k] = v; +} + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +static void gen_bitlen( deflate_state *s, tree_desc *desc ) +{ + ct_data *tree = desc->dyn_tree; + int max_code = desc->max_code; + const ct_data *stree = desc->stat_desc->static_tree; + const intf *extra = desc->stat_desc->extra_bits; + int base = desc->stat_desc->extra_base; + int max_length = desc->stat_desc->max_length; + int h; /* heap index */ + int n, m; /* iterate over the tree elements */ + int bits; /* bit length */ + int xbits; /* extra bits */ + ush f; /* frequency */ + int overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0; + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ + + for (h = s->heap_max+1; h < HEAP_SIZE; h++) { + n = s->heap[h]; + bits = tree[tree[n].Dad].Len + 1; + if (bits > max_length) bits = max_length, overflow++; + tree[n].Len = (ush)bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) continue; /* not a leaf node */ + + s->bl_count[bits]++; + xbits = 0; + if (n >= base) xbits = extra[n-base]; + f = tree[n].Freq; + s->opt_len += (ulg)f * (unsigned)(bits + xbits); + if (stree) s->static_len += (ulg)f * (unsigned)(stree[n].Len + xbits); + } + if (overflow == 0) return; + + Tracev((stderr,"\nbit length overflow\n")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length-1; + while (s->bl_count[bits] == 0) bits--; + s->bl_count[bits]--; /* move one leaf down the tree */ + s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ + s->bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits != 0; bits--) { + n = s->bl_count[bits]; + while (n != 0) { + m = s->heap[--h]; + if (m > max_code) continue; + if ((unsigned) tree[m].Len != (unsigned) bits) { + Tracev((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s->opt_len += ((ulg)bits - tree[m].Len) * tree[m].Freq; + tree[m].Len = (ush)bits; + } + n--; + } + } +} + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +static void gen_codes( ct_data *tree, int max_code, ushf *bl_count ) +{ + ush next_code[MAX_BITS+1]; /* next code value for each bit length */ + unsigned code = 0; /* running code value */ + int bits; /* bit index */ + int n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + code = (code + bl_count[bits-1]) << 1; + next_code[bits] = (ush)code; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + Assert (code + bl_count[MAX_BITS]-1 == (1<dyn_tree; + const ct_data *stree = desc->stat_desc->static_tree; + int elems = desc->stat_desc->elems; + int n, m; /* iterate over heap elements */ + int max_code = -1; /* largest code with non zero frequency */ + int node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + s->heap_len = 0, s->heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n].Freq != 0) { + s->heap[++(s->heap_len)] = max_code = n; + s->depth[n] = 0; + } else { + tree[n].Len = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s->heap_len < 2) { + node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0); + tree[node].Freq = 1; + s->depth[node] = 0; + s->opt_len--; if (stree) s->static_len -= stree[node].Len; + /* node is 0 or 1 so it does not have extra bits */ + } + desc->max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + pqremove(s, tree, n); /* n = node of least frequency */ + m = s->heap[SMALLEST]; /* m = node of next least frequency */ + + s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */ + s->heap[--(s->heap_max)] = m; + + /* Create a new node father of n and m */ + tree[node].Freq = tree[n].Freq + tree[m].Freq; + s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ? + s->depth[n] : s->depth[m]) + 1); + tree[n].Dad = tree[m].Dad = (ush)node; +#ifdef DUMP_BL_TREE + if (tree == s->bl_tree) { + fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)", + node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); + } +#endif + /* and insert the new node in the heap */ + s->heap[SMALLEST] = node++; + pqdownheap(s, tree, SMALLEST); + + } while (s->heap_len >= 2); + + s->heap[--(s->heap_max)] = s->heap[SMALLEST]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, (tree_desc *)desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes ((ct_data *)tree, max_code, s->bl_count); +} + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +static void scan_tree( deflate_state *s, ct_data *tree, int max_code ) +{ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + if (nextlen == 0) max_count = 138, min_count = 3; + tree[max_code+1].Len = (ush)0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n+1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + s->bl_tree[curlen].Freq += count; + } else if (curlen != 0) { + if (curlen != prevlen) s->bl_tree[curlen].Freq++; + s->bl_tree[REP_3_6].Freq++; + } else if (count <= 10) { + s->bl_tree[REPZ_3_10].Freq++; + } else { + s->bl_tree[REPZ_11_138].Freq++; + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +static void send_tree( deflate_state *s, ct_data *tree, int max_code ) +{ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ /* guard already set */ + if (nextlen == 0) max_count = 138, min_count = 3; + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n+1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + do { send_code(s, curlen, s->bl_tree); } while (--count != 0); + + } else if (curlen != 0) { + if (curlen != prevlen) { + send_code(s, curlen, s->bl_tree); count--; + } + Assert(count >= 3 && count <= 6, " 3_6?"); + send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); + + } else { + send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +static int build_bl_tree( deflate_state *s ) +{ + int max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code); + scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, (tree_desc *)(&(s->bl_desc))); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) { + if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; + } + /* Update opt_len to include the bit length tree and counts */ + s->opt_len += 3*((ulg)max_blindex+1) + 5+5+4; + Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + s->opt_len, s->static_len)); + + return max_blindex; +} + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +static void send_all_trees( deflate_state *s, int lcodes, int dcodes, int blcodes ) +{ + int rank; /* index in bl_order */ + + Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + "too many codes"); + Tracev((stderr, "\nbl counts: ")); + send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes-1, 5); + send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); + } + Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ + Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ + Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +} + +/* =========================================================================== + * Send a stored block + */ +static void _tr_stored_block( deflate_state *s, charf *buf, ulg stored_len, int last ) +{ + send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */ + bi_windup(s); /* align on byte boundary */ + put_short(s, (ush)stored_len); + put_short(s, (ush)~stored_len); + zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len); + s->pending += stored_len; +#ifdef ZLIB_DEBUG + s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; + s->compressed_len += (stored_len + 4) << 3; + s->bits_sent += 2*16; + s->bits_sent += stored_len<<3; +#endif +} + +/* =========================================================================== + * Flush the bits in the bit buffer to pending output (leaves at most 7 bits) + */ +static void _tr_flush_bits( deflate_state *s ) +{ + bi_flush(s); +} + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + */ +static void _tr_align( deflate_state *s ) +{ + send_bits(s, STATIC_TREES<<1, 3); + send_code(s, END_BLOCK, static_ltree); +#ifdef ZLIB_DEBUG + s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ +#endif + bi_flush(s); +} + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and write out the encoded block. + */ +static void _tr_flush_block( deflate_state *s, charf *buf, ulg stored_len, int last ) +{ + ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + int max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s->level > 0) { + + /* Check if the file is binary or text */ + if (s->strm->data_type == Z_UNKNOWN) + s->strm->data_type = detect_data_type(s); + + /* Construct the literal and distance trees */ + build_tree(s, (tree_desc *)(&(s->l_desc))); + Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + + build_tree(s, (tree_desc *)(&(s->d_desc))); + Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ + opt_lenb = (s->opt_len+3+7)>>3; + static_lenb = (s->static_len+3+7)>>3; + + Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + s->last_lit)); + + if (static_lenb <= opt_lenb) opt_lenb = static_lenb; + + } else { + Assert(buf != (char*)0, "lost buf"); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + +#ifdef FORCE_STORED + if (buf != (char*)0) { /* force stored block */ +#else + if (stored_len+4 <= opt_lenb && buf != (char*)0) { + /* 4: two words for the lengths */ +#endif + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, last); + +#ifdef FORCE_STATIC + } else if (static_lenb >= 0) { /* force static trees */ +#else + } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) { +#endif + send_bits(s, (STATIC_TREES<<1)+last, 3); + compress_block(s, (const ct_data *)static_ltree, + (const ct_data *)static_dtree); +#ifdef ZLIB_DEBUG + s->compressed_len += 3 + s->static_len; +#endif + } else { + send_bits(s, (DYN_TREES<<1)+last, 3); + send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, + max_blindex+1); + compress_block(s, (const ct_data *)s->dyn_ltree, + (const ct_data *)s->dyn_dtree); +#ifdef ZLIB_DEBUG + s->compressed_len += 3 + s->opt_len; +#endif + } + Assert (s->compressed_len == s->bits_sent, "bad compressed size"); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (last) { + bi_windup(s); +#ifdef ZLIB_DEBUG + s->compressed_len += 7; /* align on byte boundary */ +#endif + } + Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, + s->compressed_len-7*last)); +} + +const char deflate_copyright[] = + " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* =========================================================================== + * Function prototypes. + */ +typedef enum { + need_more, /* block not completed, need more input or more output */ + block_done, /* block flush performed */ + finish_started, /* finish started, need only more output at next deflate */ + finish_done /* finish done, accept no more input or output */ +} block_state; + +typedef block_state (*compress_func)(deflate_state *s, int flush); +/* Compression function. Returns the block state after the call. */ + +static int deflateReset(z_streamp strm); +static block_state deflate_stored(deflate_state *s, int flush); +static block_state deflate_fast(deflate_state *s, int flush); +static block_state deflate_slow(deflate_state *s, int flush); +static block_state deflate_rle(deflate_state *s, int flush); +static block_state deflate_huff(deflate_state *s, int flush); +static void lm_init(deflate_state *s); + +/* =========================================================================== + * Local data + */ + +#define NIL 0 +/* Tail of hash chains */ + +#ifndef TOO_FAR +# define TOO_FAR 4096 +#endif +/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +typedef struct config_s { + ush good_length; /* reduce lazy search above this match length */ + ush max_lazy; /* do not perform lazy search above this match length */ + ush nice_length; /* quit search above this match length */ + ush max_chain; + compress_func func; +} config; + +static const config configuration_table[10] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}, /* max speed, no lazy matches */ +/* 2 */ {4, 5, 16, 8, deflate_fast}, +/* 3 */ {4, 6, 32, 32, deflate_fast}, + +/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */ +/* 5 */ {8, 16, 32, 32, deflate_slow}, +/* 6 */ {8, 16, 128, 128, deflate_slow}, +/* 7 */ {8, 32, 128, 256, deflate_slow}, +/* 8 */ {32, 128, 258, 1024, deflate_slow}, +/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */ + +/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 + * For deflate_fast() (levels <= 3) good is ignored and lazy has a different + * meaning. + */ + +/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */ +#define RANK(f) (((f) * 2) - ((f) > 4 ? 9 : 0)) + +/* =========================================================================== + * Update a hash value with the given input byte + * IN assertion: all calls to UPDATE_HASH are made with consecutive input + * characters, so that a running hash key can be computed from the previous + * key instead of complete recalculation each time. + */ +#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) + + +/* =========================================================================== + * Insert string str in the dictionary and set match_head to the previous head + * of the hash chain (the most recent string with same hash key). Return + * the previous length of the hash chain. + * If this file is compiled with -DFASTEST, the compression level is forced + * to 1, and no hash chains are maintained. + * IN assertion: all calls to INSERT_STRING are made with consecutive input + * characters and the first MIN_MATCH bytes of str are valid (except for + * the last MIN_MATCH-1 bytes of the input file). + */ +#ifdef FASTEST +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#else +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#endif + +/* =========================================================================== + * Initialize the hash table (avoiding 64K overflow for 16 bit systems). + * prev[] will be initialized on the fly. + */ +#define CLEAR_HASH(s) \ + s->head[s->hash_size-1] = NIL; \ + zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); + +/* =========================================================================== + * Slide the hash table when sliding the window down (could be avoided with 32 + * bit values at the expense of memory usage). We slide even when level == 0 to + * keep the hash table consistent if we switch back to level > 0 later. + */ +static void slide_hash( deflate_state *s ) +{ + unsigned n, m; + Posf *p; + uInt wsize = s->w_size; + + n = s->hash_size; + p = &s->head[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m - wsize : NIL); + } while (--n); + n = wsize; +#ifndef FASTEST + p = &s->prev[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m - wsize : NIL); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); +#endif +} + +/* ========================================================================= */ +int deflateInit( z_streamp strm, int level ) +{ + return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); + /* To do: ignore strm->next_in if we use it as window */ +} + +/* ========================================================================= */ +int deflateInit2( z_streamp strm, int level, int method, int windowBits, int memLevel, int strategy ) +{ + deflate_state *s; + int wrap = 1; + ushf *overlay; + /* We overlay pending_buf and d_buf+l_buf. This works since the average + * output size for (length,distance) codes is <= 24 bits. + */ + + strm->msg = Z_NULL; +#ifdef FASTEST + if (level != 0) level = 1; +#else + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#endif + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } +#ifdef GZIP + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } +#endif + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_FIXED || (windowBits == 8 && wrap != 1)) { + return Z_STREAM_ERROR; + } + if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */ + s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state)); + if (s == Z_NULL) return Z_MEM_ERROR; + strm->state = (struct internal_state FAR *)s; + s->strm = strm; + s->status = INIT_STATE; /* to pass state test in deflateReset() */ + + s->wrap = wrap; + s->gzhead = Z_NULL; + s->w_bits = (uInt)windowBits; + s->w_size = 1 << s->w_bits; + s->w_mask = s->w_size - 1; + + s->hash_bits = (uInt)memLevel + 7; + s->hash_size = 1 << s->hash_bits; + s->hash_mask = s->hash_size - 1; + s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); + + s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); + s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); + s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); + + s->high_water = 0; /* nothing written to s->window yet */ + + s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + s->pending_buf = (uchf *) overlay; + s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); + + if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || + s->pending_buf == Z_NULL) { + s->status = FINISH_STATE; + strm->msg = ERR_MSG(Z_MEM_ERROR); + deflateEnd (strm); + return Z_MEM_ERROR; + } + s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + + s->level = level; + s->strategy = strategy; + s->method = (Byte)method; + + return deflateReset(strm); +} + +/* ========================================================================= + * Check for a valid deflate stream state. Return 0 if ok, 1 if not. + */ +static int deflateStateCheck( z_streamp strm ) +{ + deflate_state *s; + if (strm == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) + return 1; + s = strm->state; + if (s == Z_NULL || s->strm != strm || (s->status != INIT_STATE && +#ifdef GZIP + s->status != GZIP_STATE && +#endif + s->status != EXTRA_STATE && + s->status != NAME_STATE && + s->status != COMMENT_STATE && + s->status != HCRC_STATE && + s->status != BUSY_STATE && + s->status != FINISH_STATE)) + return 1; + return 0; +} + +/* ========================================================================= */ +static int deflateResetKeep( z_streamp strm ) +{ + deflate_state *s; + + if (deflateStateCheck(strm)) { + return Z_STREAM_ERROR; + } + + strm->total_in = strm->total_out = 0; + strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */ + strm->data_type = Z_UNKNOWN; + + s = (deflate_state *)strm->state; + s->pending = 0; + s->pending_out = s->pending_buf; + + if (s->wrap < 0) { + s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */ + } + s->status = +#ifdef GZIP + s->wrap == 2 ? GZIP_STATE : +#endif + s->wrap ? INIT_STATE : BUSY_STATE; + strm->adler = +#ifdef GZIP + s->wrap == 2 ? crc32(0L, Z_NULL, 0) : +#endif + adler32(0L, Z_NULL, 0); + s->last_flush = Z_NO_FLUSH; + + _tr_init(s); + + return Z_OK; +} + +/* ========================================================================= */ +static int deflateReset( z_streamp strm ) +{ + int ret; + + ret = deflateResetKeep(strm); + if (ret == Z_OK) + lm_init(strm->state); + return ret; +} + +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +static void putShortMSB( deflate_state *s, uInt b ) +{ + put_byte(s, (Byte)(b >> 8)); + put_byte(s, (Byte)(b & 0xff)); +} + +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output, except for + * some deflate_stored() output, goes through this function so some + * applications may wish to modify it to avoid allocating a large + * strm->next_out buffer and copying into it. (See also read_buf()). + */ +static void flush_pending( z_streamp strm ) +{ + unsigned len; + deflate_state *s = strm->state; + + _tr_flush_bits(s); + len = s->pending; + if (len > strm->avail_out) len = strm->avail_out; + if (len == 0) return; + + zmemcpy(strm->next_out, s->pending_out, len); + strm->next_out += len; + s->pending_out += len; + strm->total_out += len; + strm->avail_out -= len; + s->pending -= len; + if (s->pending == 0) { + s->pending_out = s->pending_buf; + } +} + +/* =========================================================================== + * Update the header CRC with the bytes s->pending_buf[beg..s->pending - 1]. + */ +#define HCRC_UPDATE(beg) \ + do { \ + if (s->gzhead->hcrc && s->pending > (beg)) \ + strm->adler = crc32(strm->adler, s->pending_buf + (beg), \ + s->pending - (beg)); \ + } while (0) + +/* ========================================================================= */ +int deflate( z_streamp strm, int flush ) +{ + int old_flush; /* value of flush param for previous deflate call */ + deflate_state *s; + + if (deflateStateCheck(strm) || flush > Z_BLOCK || flush < 0) { + return Z_STREAM_ERROR; + } + s = strm->state; + + if (strm->next_out == Z_NULL || + (strm->avail_in != 0 && strm->next_in == Z_NULL) || + (s->status == FINISH_STATE && flush != Z_FINISH)) { + ERR_RETURN(strm, Z_STREAM_ERROR); + } + if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR); + + old_flush = s->last_flush; + s->last_flush = flush; + + /* Flush as much pending output as possible */ + if (s->pending != 0) { + flush_pending(strm); + if (strm->avail_out == 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s->last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) && + flush != Z_FINISH) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s->status == FINISH_STATE && strm->avail_in != 0) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* Write the header */ + if (s->status == INIT_STATE) { + /* zlib header */ + uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; + uInt level_flags; + + if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) + level_flags = 0; + else if (s->level < 6) + level_flags = 1; + else if (s->level == 6) + level_flags = 2; + else + level_flags = 3; + header |= (level_flags << 6); + if (s->strstart != 0) header |= PRESET_DICT; + header += 31 - (header % 31); + + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s->strstart != 0) { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + strm->adler = adler32(0L, Z_NULL, 0); + s->status = BUSY_STATE; + + /* Compression must start with an empty pending buffer */ + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + } +#ifdef GZIP + if (s->status == GZIP_STATE) { + /* gzip header */ + strm->adler = crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (s->gzhead == Z_NULL) { + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); + s->status = BUSY_STATE; + + /* Compression must start with an empty pending buffer */ + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + } + else { + put_byte(s, (s->gzhead->text ? 1 : 0) + + (s->gzhead->hcrc ? 2 : 0) + + (s->gzhead->extra == Z_NULL ? 0 : 4) + + (s->gzhead->name == Z_NULL ? 0 : 8) + + (s->gzhead->comment == Z_NULL ? 0 : 16) + ); + put_byte(s, (Byte)(s->gzhead->time & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff)); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, s->gzhead->os & 0xff); + if (s->gzhead->extra != Z_NULL) { + put_byte(s, s->gzhead->extra_len & 0xff); + put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); + } + if (s->gzhead->hcrc) + strm->adler = crc32(strm->adler, s->pending_buf, + s->pending); + s->gzindex = 0; + s->status = EXTRA_STATE; + } + } + if (s->status == EXTRA_STATE) { + if (s->gzhead->extra != Z_NULL) { + ulg beg = s->pending; /* start of bytes to update crc */ + uInt left = (s->gzhead->extra_len & 0xffff) - s->gzindex; + while (s->pending + left > s->pending_buf_size) { + uInt copy = s->pending_buf_size - s->pending; + zmemcpy(s->pending_buf + s->pending, + s->gzhead->extra + s->gzindex, copy); + s->pending = s->pending_buf_size; + HCRC_UPDATE(beg); + s->gzindex += copy; + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + beg = 0; + left -= copy; + } + zmemcpy(s->pending_buf + s->pending, + s->gzhead->extra + s->gzindex, left); + s->pending += left; + HCRC_UPDATE(beg); + s->gzindex = 0; + } + s->status = NAME_STATE; + } + if (s->status == NAME_STATE) { + if (s->gzhead->name != Z_NULL) { + ulg beg = s->pending; /* start of bytes to update crc */ + int val; + do { + if (s->pending == s->pending_buf_size) { + HCRC_UPDATE(beg); + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + beg = 0; + } + val = s->gzhead->name[s->gzindex++]; + put_byte(s, val); + } while (val != 0); + HCRC_UPDATE(beg); + s->gzindex = 0; + } + s->status = COMMENT_STATE; + } + if (s->status == COMMENT_STATE) { + if (s->gzhead->comment != Z_NULL) { + ulg beg = s->pending; /* start of bytes to update crc */ + int val; + do { + if (s->pending == s->pending_buf_size) { + HCRC_UPDATE(beg); + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + beg = 0; + } + val = s->gzhead->comment[s->gzindex++]; + put_byte(s, val); + } while (val != 0); + HCRC_UPDATE(beg); + } + s->status = HCRC_STATE; + } + if (s->status == HCRC_STATE) { + if (s->gzhead->hcrc) { + if (s->pending + 2 > s->pending_buf_size) { + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + } + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + strm->adler = crc32(0L, Z_NULL, 0); + } + s->status = BUSY_STATE; + + /* Compression must start with an empty pending buffer */ + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + } +#endif + + /* Start a new block or continue the current one. + */ + if (strm->avail_in != 0 || s->lookahead != 0 || + (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { + block_state bstate; + + bstate = s->level == 0 ? deflate_stored(s, flush) : + s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : + s->strategy == Z_RLE ? deflate_rle(s, flush) : + (*(configuration_table[s->level].func))(s, flush); + + if (bstate == finish_started || bstate == finish_done) { + s->status = FINISH_STATE; + } + if (bstate == need_more || bstate == finish_started) { + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate == block_done) { + if (flush == Z_PARTIAL_FLUSH) { + _tr_align(s); + } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ + _tr_stored_block(s, (char*)0, 0L, 0); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush == Z_FULL_FLUSH) { + CLEAR_HASH(s); /* forget history */ + if (s->lookahead == 0) { + s->strstart = 0; + s->block_start = 0L; + s->insert = 0; + } + } + } + flush_pending(strm); + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + + if (flush != Z_FINISH) return Z_OK; + if (s->wrap <= 0) return Z_STREAM_END; + + /* Write the trailer */ +#ifdef GZIP + if (s->wrap == 2) { + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 16) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 24) & 0xff)); + put_byte(s, (Byte)(strm->total_in & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 8) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 16) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 24) & 0xff)); + } + else +#endif + { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */ + return s->pending != 0 ? Z_OK : Z_STREAM_END; +} + +/* ========================================================================= */ +int deflateEnd( z_streamp strm ) +{ + int status; + + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; + + status = strm->state->status; + + /* Deallocate in reverse order of allocations: */ + TRY_FREE(strm, strm->state->pending_buf); + TRY_FREE(strm, strm->state->head); + TRY_FREE(strm, strm->state->prev); + TRY_FREE(strm, strm->state->window); + + ZFREE(strm, strm->state); + strm->state = Z_NULL; + + return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; +} + +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->next_in buffer and copying from it. + * (See also flush_pending()). + */ +static unsigned read_buf( z_streamp strm, Bytef *buf, unsigned size ) +{ + unsigned len = strm->avail_in; + + if (len > size) len = size; + if (len == 0) return 0; + + strm->avail_in -= len; + + zmemcpy(buf, strm->next_in, len); + if (strm->state->wrap == 1) { + strm->adler = adler32(strm->adler, buf, len); + } +#ifdef GZIP + else if (strm->state->wrap == 2) { + strm->adler = crc32(strm->adler, buf, len); + } +#endif + strm->next_in += len; + strm->total_in += len; + + return len; +} + +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +static void lm_init( deflate_state *s ) +{ + s->window_size = (ulg)2L*s->w_size; + + CLEAR_HASH(s); + + /* Set the default configuration parameters: + */ + s->max_lazy_match = configuration_table[s->level].max_lazy; + s->good_match = configuration_table[s->level].good_length; + s->nice_match = configuration_table[s->level].nice_length; + s->max_chain_length = configuration_table[s->level].max_chain; + + s->strstart = 0; + s->block_start = 0L; + s->lookahead = 0; + s->insert = 0; + s->match_length = s->prev_length = MIN_MATCH-1; + s->match_available = 0; + s->ins_h = 0; +} + +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +static uInt longest_match( deflate_state *s, IPos cur_match ) +{ + unsigned chain_length = s->max_chain_length;/* max hash chain length */ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + int best_len = (int)s->prev_length; /* best match length so far */ + int nice_match = s->nice_match; /* stop if match long enough */ + IPos limit = s->strstart > (IPos)MAX_DIST(s) ? + s->strstart - (IPos)MAX_DIST(s) : NIL; + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + Posf *prev = s->prev; + uInt wmask = s->w_mask; + +#ifdef UNALIGNED_OK + /* Compare two bytes at a time. Note: this is not always beneficial. + * Try with and without -DUNALIGNED_OK to check. + */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; + register ush scan_start = *(ushf*)scan; + register ush scan_end = *(ushf*)(scan+best_len-1); +#else + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + register Byte scan_end1 = scan[best_len-1]; + register Byte scan_end = scan[best_len]; +#endif + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + if (s->prev_length >= s->good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if ((uInt)nice_match > s->lookahead) nice_match = (int)s->lookahead; + + Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + do { + Assert(cur_match < s->strstart, "no future"); + match = s->window + cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2. Note that the checks below + * for insufficient lookahead only occur occasionally for performance + * reasons. Therefore uninitialized memory will be accessed, and + * conditional jumps will be made that depend on those values. + * However the length of the match is limited to the lookahead, so + * the output of deflate is not affected by the uninitialized values. + */ +#if (defined(UNALIGNED_OK) && MAX_MATCH == 258) + /* This code assumes sizeof(unsigned short) == 2. Do not use + * UNALIGNED_OK if your compiler uses a different size. + */ + if (*(ushf*)(match+best_len-1) != scan_end || + *(ushf*)match != scan_start) continue; + + /* It is not necessary to compare scan[2] and match[2] since they are + * always equal when the other bytes match, given that the hash keys + * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at + * strstart+3, +5, ... up to strstart+257. We check for insufficient + * lookahead only every 4th comparison; the 128th check will be made + * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is + * necessary to put more guard bytes at the end of the window, or + * to check more often for insufficient lookahead. + */ + Assert(scan[2] == match[2], "scan[2]?"); + scan++, match++; + do { + } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + scan < strend); + /* The funny "do {}" generates better code on most compilers */ + + /* Here, scan <= window+strstart+257 */ + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + if (*scan == *match) scan++; + + len = (MAX_MATCH - 1) - (int)(strend-scan); + scan = strend - (MAX_MATCH-1); + +#else /* UNALIGNED_OK */ + + if (match[best_len] != scan_end || + match[best_len-1] != scan_end1 || + *match != *scan || + *++match != scan[1]) continue; + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match++; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + scan = strend - MAX_MATCH; + +#endif /* UNALIGNED_OK */ + + if (len > best_len) { + s->match_start = cur_match; + best_len = len; + if (len >= nice_match) break; +#ifdef UNALIGNED_OK + scan_end = *(ushf*)(scan+best_len-1); +#else + scan_end1 = scan[best_len-1]; + scan_end = scan[best_len]; +#endif + } + } while ((cur_match = prev[cur_match & wmask]) > limit + && --chain_length != 0); + + if ((uInt)best_len <= s->lookahead) return (uInt)best_len; + return s->lookahead; +} + +#define check_match(s, start, match, length) + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +static void fill_window( deflate_state *s ) +{ + unsigned n; + unsigned more; /* Amount of free space at the end of the window. */ + uInt wsize = s->w_size; + + Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); + + do { + more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); + + /* Deal with !@#$% 64K limit: */ + if (sizeof(int) <= 2) { + if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + more = wsize; + + } else if (more == (unsigned)(-1)) { + /* Very unlikely, but possible on 16 bit machine if + * strstart == 0 && lookahead == 1 (input done a byte at time) + */ + more--; + } + } + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s->strstart >= wsize+MAX_DIST(s)) { + + zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more); + s->match_start -= wsize; + s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ + s->block_start -= (long) wsize; + slide_hash(s); + more += wsize; + } + if (s->strm->avail_in == 0) break; + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + Assert(more >= 2, "more < 2"); + + n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); + s->lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s->lookahead + s->insert >= MIN_MATCH) { + uInt str = s->strstart - s->insert; + s->ins_h = s->window[str]; + UPDATE_HASH(s, s->ins_h, s->window[str + 1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + while (s->insert) { + UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); +#ifndef FASTEST + s->prev[str & s->w_mask] = s->head[s->ins_h]; +#endif + s->head[s->ins_h] = (Pos)str; + str++; + s->insert--; + if (s->lookahead + s->insert < MIN_MATCH) + break; + } + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); + + /* If the WIN_INIT bytes after the end of the current data have never been + * written, then zero those bytes in order to avoid memory check reports of + * the use of uninitialized (or uninitialised as Julian writes) bytes by + * the longest match routines. Update the high water mark for the next + * time through here. WIN_INIT is set to MAX_MATCH since the longest match + * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + */ + if (s->high_water < s->window_size) { + ulg curr = s->strstart + (ulg)(s->lookahead); + ulg init; + + if (s->high_water < curr) { + /* Previous high water mark below current data -- zero WIN_INIT + * bytes or up to end of window, whichever is less. + */ + init = s->window_size - curr; + if (init > WIN_INIT) + init = WIN_INIT; + zmemzero(s->window + curr, (unsigned)init); + s->high_water = curr + init; + } + else if (s->high_water < (ulg)curr + WIN_INIT) { + /* High water mark at or above current data, but below current data + * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up + * to end of window, whichever is less. + */ + init = (ulg)curr + WIN_INIT - s->high_water; + if (init > s->window_size - s->high_water) + init = s->window_size - s->high_water; + zmemzero(s->window + s->high_water, (unsigned)init); + s->high_water += init; + } + } + + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "not enough room for search"); +} + +/* =========================================================================== + * Flush the current block, with given end-of-file flag. + * IN assertion: strstart is set to the end of the current match. + */ +#define FLUSH_BLOCK_ONLY(s, last) { \ + _tr_flush_block(s, (s->block_start >= 0L ? \ + (charf *)&s->window[(unsigned)s->block_start] : \ + (charf *)Z_NULL), \ + (ulg)((long)s->strstart - s->block_start), \ + (last)); \ + s->block_start = s->strstart; \ + flush_pending(s->strm); \ + Tracev((stderr,"[FLUSH]")); \ +} + +/* Same but force premature exit if necessary. */ +#define FLUSH_BLOCK(s, last) { \ + FLUSH_BLOCK_ONLY(s, last); \ + if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \ +} + +/* Maximum stored block length in deflate format (not including header). */ +#define MAX_STORED 65535 + +/* Minimum of a and b. */ +#define MIN(a, b) ((a) > (b) ? (b) : (a)) + +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * + * In case deflateParams() is used to later switch to a non-zero compression + * level, s->matches (otherwise unused when storing) keeps track of the number + * of hash table slides to perform. If s->matches is 1, then one hash table + * slide will be done when switching. If s->matches is 2, the maximum value + * allowed here, then the hash table will be cleared, since two or more slides + * is the same as a clear. + * + * deflate_stored() is written to minimize the number of times an input byte is + * copied. It is most efficient with large input and output buffers, which + * maximizes the opportunites to have a single copy from next_in to next_out. + */ +static block_state deflate_stored( deflate_state *s, int flush ) +{ + /* Smallest worthy block size when not flushing or finishing. By default + * this is 32K. This can be as small as 507 bytes for memLevel == 1. For + * large input and output buffers, the stored block size will be larger. + */ + unsigned min_block = MIN(s->pending_buf_size - 5, s->w_size); + + /* Copy as many min_block or larger stored blocks directly to next_out as + * possible. If flushing, copy the remaining available input to next_out as + * stored blocks, if there is enough space. + */ + unsigned len, left, have, last = 0; + unsigned used = s->strm->avail_in; + do { + /* Set len to the maximum size block that we can copy directly with the + * available input data and output space. Set left to how much of that + * would be copied from what's left in the window. + */ + len = MAX_STORED; /* maximum deflate stored block length */ + have = (s->bi_valid + 42) >> 3; /* number of header bytes */ + if (s->strm->avail_out < have) /* need room for header */ + break; + /* maximum stored block length that will fit in avail_out: */ + have = s->strm->avail_out - have; + left = s->strstart - s->block_start; /* bytes left in window */ + if (len > (ulg)left + s->strm->avail_in) + len = left + s->strm->avail_in; /* limit len to the input */ + if (len > have) + len = have; /* limit len to the output */ + + /* If the stored block would be less than min_block in length, or if + * unable to copy all of the available input when flushing, then try + * copying to the window and the pending buffer instead. Also don't + * write an empty block when flushing -- deflate() does that. + */ + if (len < min_block && ((len == 0 && flush != Z_FINISH) || + flush == Z_NO_FLUSH || + len != left + s->strm->avail_in)) + break; + + /* Make a dummy stored block in pending to get the header bytes, + * including any pending bits. This also updates the debugging counts. + */ + last = flush == Z_FINISH && len == left + s->strm->avail_in ? 1 : 0; + _tr_stored_block(s, (char *)0, 0L, last); + + /* Replace the lengths in the dummy stored block with len. */ + s->pending_buf[s->pending - 4] = len; + s->pending_buf[s->pending - 3] = len >> 8; + s->pending_buf[s->pending - 2] = ~len; + s->pending_buf[s->pending - 1] = ~len >> 8; + + /* Write the stored block header bytes. */ + flush_pending(s->strm); + +#ifdef ZLIB_DEBUG + /* Update debugging counts for the data about to be copied. */ + s->compressed_len += len << 3; + s->bits_sent += len << 3; +#endif + + /* Copy uncompressed bytes from the window to next_out. */ + if (left) { + if (left > len) + left = len; + zmemcpy(s->strm->next_out, s->window + s->block_start, left); + s->strm->next_out += left; + s->strm->avail_out -= left; + s->strm->total_out += left; + s->block_start += left; + len -= left; + } + + /* Copy uncompressed bytes directly from next_in to next_out, updating + * the check value. + */ + if (len) { + read_buf(s->strm, s->strm->next_out, len); + s->strm->next_out += len; + s->strm->avail_out -= len; + s->strm->total_out += len; + } + } while (last == 0); + + /* Update the sliding window with the last s->w_size bytes of the copied + * data, or append all of the copied data to the existing window if less + * than s->w_size bytes were copied. Also update the number of bytes to + * insert in the hash tables, in the event that deflateParams() switches to + * a non-zero compression level. + */ + used -= s->strm->avail_in; /* number of input bytes directly copied */ + if (used) { + /* If any input was used, then no unused input remains in the window, + * therefore s->block_start == s->strstart. + */ + if (used >= s->w_size) { /* supplant the previous history */ + s->matches = 2; /* clear hash */ + zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size); + s->strstart = s->w_size; + } + else { + if (s->window_size - s->strstart <= used) { + /* Slide the window down. */ + s->strstart -= s->w_size; + zmemcpy(s->window, s->window + s->w_size, s->strstart); + if (s->matches < 2) + s->matches++; /* add a pending slide_hash() */ + } + zmemcpy(s->window + s->strstart, s->strm->next_in - used, used); + s->strstart += used; + } + s->block_start = s->strstart; + s->insert += MIN(used, s->w_size - s->insert); + } + if (s->high_water < s->strstart) + s->high_water = s->strstart; + + /* If the last block was written to next_out, then done. */ + if (last) + return finish_done; + + /* If flushing and all input has been consumed, then done. */ + if (flush != Z_NO_FLUSH && flush != Z_FINISH && + s->strm->avail_in == 0 && (long)s->strstart == s->block_start) + return block_done; + + /* Fill the window with any remaining input. */ + have = s->window_size - s->strstart - 1; + if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) { + /* Slide the window down. */ + s->block_start -= s->w_size; + s->strstart -= s->w_size; + zmemcpy(s->window, s->window + s->w_size, s->strstart); + if (s->matches < 2) + s->matches++; /* add a pending slide_hash() */ + have += s->w_size; /* more space now */ + } + if (have > s->strm->avail_in) + have = s->strm->avail_in; + if (have) { + read_buf(s->strm, s->window + s->strstart, have); + s->strstart += have; + } + if (s->high_water < s->strstart) + s->high_water = s->strstart; + + /* There was not enough avail_out to write a complete worthy or flushed + * stored block to next_out. Write a stored block to pending instead, if we + * have enough input for a worthy block, or if flushing and there is enough + * room for the remaining input as a stored block in the pending buffer. + */ + have = (s->bi_valid + 42) >> 3; /* number of header bytes */ + /* maximum stored block length that will fit in pending: */ + have = MIN(s->pending_buf_size - have, MAX_STORED); + min_block = MIN(have, s->w_size); + left = s->strstart - s->block_start; + if (left >= min_block || + ((left || flush == Z_FINISH) && flush != Z_NO_FLUSH && + s->strm->avail_in == 0 && left <= have)) { + len = MIN(left, have); + last = flush == Z_FINISH && s->strm->avail_in == 0 && + len == left ? 1 : 0; + _tr_stored_block(s, (charf *)s->window + s->block_start, len, last); + s->block_start += len; + flush_pending(s->strm); + } + + /* We've done all we can with the available input and output. */ + return last ? finish_started : need_more; +} + +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +static block_state deflate_fast( deflate_state *s, int flush ) +{ + IPos hash_head; /* head of the hash chain */ + int bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = NIL; + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s->match_length = longest_match (s, hash_head); + /* longest_match() sets match_start */ + } + if (s->match_length >= MIN_MATCH) { + check_match(s, s->strstart, s->match_start, s->match_length); + + _tr_tally_dist(s, s->strstart - s->match_start, + s->match_length - MIN_MATCH, bflush); + + s->lookahead -= s->match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ +#ifndef FASTEST + if (s->match_length <= s->max_insert_length && + s->lookahead >= MIN_MATCH) { + s->match_length--; /* string at strstart already in table */ + do { + s->strstart++; + INSERT_STRING(s, s->strstart, hash_head); + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s->match_length != 0); + s->strstart++; + } else +#endif + { + s->strstart += s->match_length; + s->match_length = 0; + s->ins_h = s->window[s->strstart]; + UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->last_lit) + FLUSH_BLOCK(s, 0); + return block_done; +} + +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +static block_state deflate_slow( deflate_state *s, int flush ) +{ + IPos hash_head; /* head of hash chain */ + int bflush; /* set if current block must be flushed */ + + /* Process the input block. */ + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = NIL; + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + */ + s->prev_length = s->match_length, s->prev_match = s->match_start; + s->match_length = MIN_MATCH-1; + + if (hash_head != NIL && s->prev_length < s->max_lazy_match && + s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s->match_length = longest_match (s, hash_head); + /* longest_match() sets match_start */ + + if (s->match_length <= 5 && (s->strategy == Z_FILTERED +#if TOO_FAR <= 32767 + || (s->match_length == MIN_MATCH && + s->strstart - s->match_start > TOO_FAR) +#endif + )) { + + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s->match_length = MIN_MATCH-1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) { + uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + + check_match(s, s->strstart-1, s->prev_match, s->prev_length); + + _tr_tally_dist(s, s->strstart -1 - s->prev_match, + s->prev_length - MIN_MATCH, bflush); + + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + s->lookahead -= s->prev_length-1; + s->prev_length -= 2; + do { + if (++s->strstart <= max_insert) { + INSERT_STRING(s, s->strstart, hash_head); + } + } while (--s->prev_length != 0); + s->match_available = 0; + s->match_length = MIN_MATCH-1; + s->strstart++; + + if (bflush) FLUSH_BLOCK(s, 0); + + } else if (s->match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + if (bflush) { + FLUSH_BLOCK_ONLY(s, 0); + } + s->strstart++; + s->lookahead--; + if (s->strm->avail_out == 0) return need_more; + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s->match_available = 1; + s->strstart++; + s->lookahead--; + } + } + Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s->match_available) { + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + s->match_available = 0; + } + s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->last_lit) + FLUSH_BLOCK(s, 0); + return block_done; +} + +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +static block_state deflate_rle( deflate_state *s, int flush ) +{ + int bflush; /* set if current block must be flushed */ + uInt prev; /* byte at distance one to match */ + Bytef *scan, *strend; /* scan goes up to strend for length of run */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest run, plus one for the unrolled loop. + */ + if (s->lookahead <= MAX_MATCH) { + fill_window(s); + if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* See how many times the previous byte repeats */ + s->match_length = 0; + if (s->lookahead >= MIN_MATCH && s->strstart > 0) { + scan = s->window + s->strstart - 1; + prev = *scan; + if (prev == *++scan && prev == *++scan && prev == *++scan) { + strend = s->window + s->strstart + MAX_MATCH; + do { + } while (prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + scan < strend); + s->match_length = MAX_MATCH - (uInt)(strend - scan); + if (s->match_length > s->lookahead) + s->match_length = s->lookahead; + } + Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + if (s->match_length >= MIN_MATCH) { + check_match(s, s->strstart, s->strstart - 1, s->match_length); + + _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush); + + s->lookahead -= s->match_length; + s->strstart += s->match_length; + s->match_length = 0; + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + s->insert = 0; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->last_lit) + FLUSH_BLOCK(s, 0); + return block_done; +} + +/* =========================================================================== + * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. + * (It will be regenerated if this run of deflate switches away from Huffman.) + */ +static block_state deflate_huff( deflate_state *s, int flush ) +{ + int bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we have a literal to write. */ + if (s->lookahead == 0) { + fill_window(s); + if (s->lookahead == 0) { + if (flush == Z_NO_FLUSH) + return need_more; + break; /* flush the current block */ + } + } + + /* Output a literal byte */ + s->match_length = 0; + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + if (bflush) FLUSH_BLOCK(s, 0); + } + s->insert = 0; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->last_lit) + FLUSH_BLOCK(s, 0); + return block_done; +} diff -Nru wine-development-5.5/dlls/cabinet/zlib.h wine-development-5.6/dlls/cabinet/zlib.h --- wine-development-5.5/dlls/cabinet/zlib.h 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/cabinet/zlib.h 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,162 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + * version 1.2.11, January 15th, 2017 + * + * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * Jean-loup Gailly Mark Adler + * jloup@gzip.org madler@alumni.caltech.edu + */ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "windef.h" + +#undef FAR +#define FAR +#define z_const const + +typedef unsigned char Byte; /* 8 bits */ +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +typedef Byte FAR Bytef; +typedef void FAR *voidpf; + +typedef char FAR charf; +typedef int FAR intf; + +typedef unsigned char uch; +typedef uch FAR uchf; +typedef unsigned short ush; +typedef ush FAR ushf; +typedef unsigned long ulg; + +typedef voidpf (*alloc_func)(voidpf opaque, uInt items, uInt size); +typedef void (*free_func)(voidpf opaque, voidpf address); + +struct internal_state; + +typedef struct z_stream_s { + z_const Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total number of input bytes read so far */ + + Bytef *next_out; /* next output byte will go here */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total number of bytes output so far */ + + z_const char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text + for deflate, or the decoding state for inflate */ + uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +#define Z_TREES 6 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field for deflate() */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define MAX_WBITS 15 /* 32K LZ77 window */ +#define MAX_MEM_LEVEL 9 + +extern int inflateInit(z_streamp strm) DECLSPEC_HIDDEN; +extern int inflateInit2(z_streamp strm, int windowBits) DECLSPEC_HIDDEN; +extern int inflate(z_streamp strm, int flush) DECLSPEC_HIDDEN; +extern int inflateEnd(z_streamp strm) DECLSPEC_HIDDEN; + +extern int deflateInit(z_streamp strm, int level) DECLSPEC_HIDDEN; +extern int deflateInit2(z_streamp strm, int level, int method, int windowBits, int memLevel, int strategy) DECLSPEC_HIDDEN; +extern int deflate(z_streamp strm, int flush) DECLSPEC_HIDDEN; +extern int deflateEnd(z_streamp strm) DECLSPEC_HIDDEN; + +#endif /* ZLIB_H */ diff -Nru wine-development-5.5/dlls/capi2032/cap20wxx.c wine-development-5.6/dlls/capi2032/cap20wxx.c --- wine-development-5.5/dlls/capi2032/cap20wxx.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/capi2032/cap20wxx.c 2020-04-10 18:54:32.000000000 +0000 @@ -37,7 +37,6 @@ #ifdef HAVE_CAPI20_H # include #endif -#include "wine/library.h" #include "wine/debug.h" #include "cap20wxx.h" @@ -61,12 +60,12 @@ if (pcapi20_register) /* loaded already */ return; - capi_handle = wine_dlopen(SONAME_LIBCAPI20, RTLD_NOW, NULL, 0); + capi_handle = dlopen(SONAME_LIBCAPI20, RTLD_NOW); if(!capi_handle) { FIXME("Wine cannot find the library %s, capi2032.dll not working.\n", SONAME_LIBCAPI20); return; } -#define LOAD_FUNCPTR(f) if((p##f = wine_dlsym(capi_handle, #f, NULL, 0)) == NULL){WARN("Can't find symbol %s\n", #f); return;} +#define LOAD_FUNCPTR(f) if((p##f = dlsym(capi_handle, #f)) == NULL){WARN("Can't find symbol %s\n", #f); return;} LOAD_FUNCPTR(capi20_register); LOAD_FUNCPTR(capi20_release); LOAD_FUNCPTR(capi20_put_message); diff -Nru wine-development-5.5/dlls/comctl32/button.c wine-development-5.6/dlls/comctl32/button.c --- wine-development-5.5/dlls/comctl32/button.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/comctl32/button.c 2020-04-10 18:54:32.000000000 +0000 @@ -90,11 +90,12 @@ HIMAGELIST glyph; /* this is a font character code when split_style doesn't have BCSS_IMAGE */ SIZE glyph_size; RECT text_margin; + HANDLE image; /* Original handle set with BM_SETIMAGE and returned with BM_GETIMAGE. */ union { HICON icon; HBITMAP bitmap; - HANDLE image; + HANDLE image; /* Duplicated handle used for drawing. */ } u; } BUTTON_INFO; @@ -488,6 +489,10 @@ case WM_NCDESTROY: SetWindowLongPtrW( hWnd, 0, 0 ); + if (infoPtr->image_type == IMAGE_BITMAP) + DeleteObject(infoPtr->u.bitmap); + else if (infoPtr->image_type == IMAGE_ICON) + DestroyIcon(infoPtr->u.icon); heap_free(infoPtr->note); heap_free(infoPtr); break; @@ -859,13 +864,14 @@ case BM_SETIMAGE: infoPtr->image_type = (DWORD)wParam; - oldHbitmap = infoPtr->u.image; - infoPtr->u.image = (HANDLE)lParam; - InvalidateRect( hWnd, NULL, FALSE ); - return (LRESULT)oldHbitmap; + oldHbitmap = infoPtr->image; + infoPtr->u.image = CopyImage((HANDLE)lParam, infoPtr->image_type, 0, 0, 0); + infoPtr->image = (HANDLE)lParam; + InvalidateRect( hWnd, NULL, FALSE ); + return (LRESULT)oldHbitmap; case BM_GETIMAGE: - return (LRESULT)infoPtr->u.image; + return (LRESULT)infoPtr->image; case BCM_SETIMAGELIST: { diff -Nru wine-development-5.5/dlls/comctl32/comctl32.h wine-development-5.6/dlls/comctl32/comctl32.h --- wine-development-5.5/dlls/comctl32/comctl32.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/comctl32/comctl32.h 2020-04-10 18:54:32.000000000 +0000 @@ -191,6 +191,7 @@ INT Str_GetPtrAtoW (LPCSTR lpSrc, LPWSTR lpDest, INT nMaxLen) DECLSPEC_HIDDEN; BOOL Str_SetPtrAtoW (LPWSTR *lppDest, LPCSTR lpSrc) DECLSPEC_HIDDEN; BOOL Str_SetPtrWtoA (LPSTR *lppDest, LPCWSTR lpSrc) DECLSPEC_HIDDEN; +BOOL imagelist_has_alpha(HIMAGELIST, UINT) DECLSPEC_HIDDEN; #define COMCTL32_VERSION_MINOR 81 diff -Nru wine-development-5.5/dlls/comctl32/imagelist.c wine-development-5.6/dlls/comctl32/imagelist.c --- wine-development-5.5/dlls/comctl32/imagelist.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/comctl32/imagelist.c 2020-04-10 18:54:32.000000000 +0000 @@ -143,6 +143,11 @@ #define TILE_COUNT 4 +BOOL imagelist_has_alpha( HIMAGELIST himl, UINT index ) +{ + return himl->item_flags[index] & ILIF_ALPHA; +} + static inline UINT imagelist_height( UINT count ) { return ((count + TILE_COUNT - 1)/TILE_COUNT); diff -Nru wine-development-5.5/dlls/comctl32/toolbar.c wine-development-5.6/dlls/comctl32/toolbar.c --- wine-development-5.5/dlls/comctl32/toolbar.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/comctl32/toolbar.c 2020-04-10 18:54:32.000000000 +0000 @@ -675,18 +675,45 @@ static void TOOLBAR_DrawMasked(HIMAGELIST himl, int index, HDC hdc, INT x, INT y, UINT draw_flags) { + IMAGELISTDRAWPARAMS draw_params = { 0 }; INT cx, cy; HBITMAP hbmMask, hbmImage; HDC hdcMask, hdcImage; ImageList_GetIconSize(himl, &cx, &cy); + draw_params.cbSize = sizeof(draw_params); + draw_params.himl = himl; + draw_params.i = index; + draw_params.hdcDst = hdc; + draw_params.x = x; + draw_params.y = y; + draw_params.cx = cx; + draw_params.cy = cy; + draw_params.rgbBk = CLR_NONE; + draw_params.rgbFg = CLR_NONE; + draw_params.fStyle = draw_flags; + draw_params.fState = ILS_NORMAL; + + /* 32bpp image with alpha channel is converted to grayscale */ + if (imagelist_has_alpha(himl, index)) + { + draw_params.fState = ILS_SATURATE; + ImageList_DrawIndirect(&draw_params); + return; + } + /* Create src image */ hdcImage = CreateCompatibleDC(hdc); hbmImage = CreateCompatibleBitmap(hdc, cx, cy); SelectObject(hdcImage, hbmImage); - ImageList_DrawEx(himl, index, hdcImage, 0, 0, cx, cy, - RGB(0xff, 0xff, 0xff), RGB(0,0,0), draw_flags); + + draw_params.x = 0; + draw_params.y = 0; + draw_params.rgbBk = RGB(0xff, 0xff, 0xff); + draw_params.rgbFg = RGB(0,0,0); + draw_params.hdcDst = hdcImage; + ImageList_DrawIndirect(&draw_params); /* Create Mask */ hdcMask = CreateCompatibleDC(0); @@ -694,8 +721,9 @@ SelectObject(hdcMask, hbmMask); /* Remove the background and all white pixels */ - ImageList_DrawEx(himl, index, hdcMask, 0, 0, cx, cy, - RGB(0xff, 0xff, 0xff), RGB(0,0,0), ILD_MASK); + draw_params.fStyle = ILD_MASK; + draw_params.hdcDst = hdcMask; + ImageList_DrawIndirect(&draw_params); SetBkColor(hdcImage, RGB(0xff, 0xff, 0xff)); BitBlt(hdcMask, 0, 0, cx, cy, hdcImage, 0, 0, NOTSRCERASE); diff -Nru wine-development-5.5/dlls/commdlg.dll16/Makefile.in wine-development-5.6/dlls/commdlg.dll16/Makefile.in --- wine-development-5.5/dlls/commdlg.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/commdlg.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ MODULE = commdlg.dll16 IMPORTS = comdlg32 user32 gdi32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,comdlg32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,comdlg32.dll C_SRCS = \ colordlg.c \ diff -Nru wine-development-5.5/dlls/compobj.dll16/Makefile.in wine-development-5.6/dlls/compobj.dll16/Makefile.in --- wine-development-5.5/dlls/compobj.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/compobj.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = compobj.dll16 IMPORTS = uuid ole32 advapi32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,ole32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll C_SRCS = compobj.c diff -Nru wine-development-5.5/dlls/crypt32/pfx.c wine-development-5.6/dlls/crypt32/pfx.c --- wine-development-5.5/dlls/crypt32/pfx.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/crypt32/pfx.c 2020-04-10 18:54:32.000000000 +0000 @@ -31,7 +31,6 @@ #include "wine/debug.h" #include "wine/heap.h" -#include "wine/library.h" #include "wine/unicode.h" WINE_DEFAULT_DEBUG_CHANNEL(crypt); @@ -72,14 +71,14 @@ { int ret; - if (!(libgnutls_handle = wine_dlopen( SONAME_LIBGNUTLS, RTLD_NOW, NULL, 0 ))) + if (!(libgnutls_handle = dlopen( SONAME_LIBGNUTLS, RTLD_NOW ))) { ERR_(winediag)( "failed to load libgnutls, no support for pfx import/export\n" ); return FALSE; } #define LOAD_FUNCPTR(f) \ - if (!(p##f = wine_dlsym( libgnutls_handle, #f, NULL, 0 ))) \ + if (!(p##f = dlsym( libgnutls_handle, #f ))) \ { \ ERR( "failed to load %s\n", #f ); \ goto fail; \ @@ -114,7 +113,7 @@ return TRUE; fail: - wine_dlclose( libgnutls_handle, NULL, 0 ); + dlclose( libgnutls_handle ); libgnutls_handle = NULL; return FALSE; } @@ -122,7 +121,7 @@ void gnutls_uninitialize(void) { pgnutls_global_deinit(); - wine_dlclose( libgnutls_handle, NULL, 0 ); + dlclose( libgnutls_handle ); libgnutls_handle = NULL; } diff -Nru wine-development-5.5/dlls/ctapi32/ctapi32.c wine-development-5.6/dlls/ctapi32/ctapi32.c --- wine-development-5.5/dlls/ctapi32/ctapi32.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ctapi32/ctapi32.c 2020-04-10 18:54:32.000000000 +0000 @@ -21,7 +21,6 @@ #include "config.h" #include "wine/port.h" #include -#include "wine/library.h" #include "wine/debug.h" #include "windef.h" #include "winreg.h" @@ -72,7 +71,7 @@ } TRACE("Loading library '%s'\n", soname); - ctapi_handle = wine_dlopen(soname, RTLD_NOW, NULL, 0); + ctapi_handle = dlopen(soname, RTLD_NOW); if (ctapi_handle) { TRACE("Successfully loaded '%s'\n", soname); } @@ -83,7 +82,7 @@ return FALSE; } -#define LOAD_FUNCPTR(f) if((p##f = wine_dlsym(ctapi_handle, #f, NULL, 0)) == NULL){WARN("Can't find symbol %s\n", #f); return FALSE;} +#define LOAD_FUNCPTR(f) if((p##f = dlsym(ctapi_handle, #f)) == NULL){WARN("Can't find symbol %s\n", #f); return FALSE;} LOAD_FUNCPTR(CT_init); LOAD_FUNCPTR(CT_data); LOAD_FUNCPTR(CT_close); @@ -134,7 +133,7 @@ break; case DLL_PROCESS_DETACH: if (lpvReserved) break; - if (ctapi_handle) wine_dlclose(ctapi_handle, NULL, 0); + if (ctapi_handle) dlclose(ctapi_handle); break; } diff -Nru wine-development-5.5/dlls/ctl3d.dll16/Makefile.in wine-development-5.6/dlls/ctl3d.dll16/Makefile.in --- wine-development-5.5/dlls/ctl3d.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ctl3d.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = ctl3d.dll16 IMPORTS = user32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,ctl3d32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,ctl3d32.dll C_SRCS = ctl3d.c diff -Nru wine-development-5.5/dlls/ctl3dv2.dll16/Makefile.in wine-development-5.6/dlls/ctl3dv2.dll16/Makefile.in --- wine-development-5.5/dlls/ctl3dv2.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ctl3dv2.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = ctl3dv2.dll16 IMPORTS = user32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,ctl3d32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,ctl3d32.dll C_SRCS = ctl3d.c diff -Nru wine-development-5.5/dlls/d2d1/brush.c wine-development-5.6/dlls/d2d1/brush.c --- wine-development-5.5/dlls/d2d1/brush.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d2d1/brush.c 2020-04-10 18:54:32.000000000 +0000 @@ -962,7 +962,7 @@ return; } - brush->u.bitmap.interpolation_mode = mode; + brush->u.bitmap.interpolation_mode = d2d1_1_interp_mode_from_d2d1(mode); if (brush->u.bitmap.sampler_state) { ID3D10SamplerState_Release(brush->u.bitmap.sampler_state); @@ -1010,8 +1010,8 @@ switch (brush->u.bitmap.interpolation_mode) { case D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR: + return D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR; case D2D1_INTERPOLATION_MODE_LINEAR: - return brush->u.bitmap.interpolation_mode; default: return D2D1_BITMAP_INTERPOLATION_MODE_LINEAR; } diff -Nru wine-development-5.5/dlls/d2d1/d2d1_private.h wine-development-5.6/dlls/d2d1/d2d1_private.h --- wine-development-5.5/dlls/d2d1/d2d1_private.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d2d1/d2d1_private.h 2020-04-10 18:54:32.000000000 +0000 @@ -634,6 +634,11 @@ dst->bottom = point->y; } +static inline D2D1_INTERPOLATION_MODE d2d1_1_interp_mode_from_d2d1(D2D1_BITMAP_INTERPOLATION_MODE mode) +{ + return (D2D1_INTERPOLATION_MODE)mode; +} + static inline const char *debug_d2d_point_2f(const D2D1_POINT_2F *point) { if (!point) diff -Nru wine-development-5.5/dlls/d2d1/device.c wine-development-5.6/dlls/d2d1/device.c --- wine-development-5.5/dlls/d2d1/device.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d2d1/device.c 2020-04-10 18:54:32.000000000 +0000 @@ -1143,7 +1143,8 @@ return; } - d2d_device_context_draw_bitmap(context, bitmap, dst_rect, opacity, interpolation_mode, src_rect, NULL); + d2d_device_context_draw_bitmap(context, bitmap, dst_rect, opacity, d2d1_1_interp_mode_from_d2d1(interpolation_mode), + src_rect, NULL); } static void STDMETHODCALLTYPE d2d_device_context_DrawText(ID2D1DeviceContext *iface, diff -Nru wine-development-5.5/dlls/d2d1/tests/d2d1.c wine-development-5.6/dlls/d2d1/tests/d2d1.c --- wine-development-5.5/dlls/d2d1/tests/d2d1.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d2d1/tests/d2d1.c 2020-04-10 18:54:32.000000000 +0000 @@ -346,20 +346,19 @@ return ((DWORD *)((BYTE *)rb->map_desc.pData + y * rb->map_desc.RowPitch))[x]; } +static BOOL compare_uint(unsigned int x, unsigned int y, unsigned int max_diff) +{ + unsigned int diff = x > y ? x - y : y - x; + + return diff <= max_diff; +} + static BOOL compare_colour(DWORD c1, DWORD c2, BYTE max_diff) { - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - return TRUE; + return compare_uint(c1 & 0xff, c2 & 0xff, max_diff) + && compare_uint((c1 >> 8) & 0xff, (c2 >> 8) & 0xff, max_diff) + && compare_uint((c1 >> 16) & 0xff, (c2 >> 16) & 0xff, max_diff) + && compare_uint((c1 >> 24) & 0xff, (c2 >> 24) & 0xff, max_diff); } static BOOL compare_float(float f, float g, unsigned int ulps) diff -Nru wine-development-5.5/dlls/d3d10_1/d3d10_1_main.c wine-development-5.6/dlls/d3d10_1/d3d10_1_main.c --- wine-development-5.5/dlls/d3d10_1/d3d10_1_main.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d10_1/d3d10_1_main.c 2020-04-10 18:54:32.000000000 +0000 @@ -61,6 +61,11 @@ #undef WINE_D3D10_TO_STR +static D3D_FEATURE_LEVEL d3d_feature_level_from_d3d10_1(D3D10_FEATURE_LEVEL1 level) +{ + return (D3D_FEATURE_LEVEL)level; +} + static HRESULT d3d10_create_device1(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver_type, HMODULE swrast, UINT flags, D3D10_FEATURE_LEVEL1 hw_level, UINT sdk_version, ID3D10Device1 **device) { @@ -159,7 +164,8 @@ } } - hr = D3D10CoreCreateDevice(factory, adapter, flags, hw_level, (ID3D10Device **)device); + hr = D3D10CoreCreateDevice(factory, adapter, flags, + d3d_feature_level_from_d3d10_1(hw_level), (ID3D10Device **)device); IDXGIAdapter_Release(adapter); IDXGIFactory_Release(factory); if (FAILED(hr)) diff -Nru wine-development-5.5/dlls/d3d10core/tests/d3d10core.c wine-development-5.6/dlls/d3d10core/tests/d3d10core.c --- wine-development-5.5/dlls/d3d10core/tests/d3d10core.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d10core/tests/d3d10core.c 2020-04-10 18:54:32.000000000 +0000 @@ -204,6 +204,13 @@ && compare_float(v1->w, v2->w, ulps); } +static BOOL compare_uint(unsigned int x, unsigned int y, unsigned int max_diff) +{ + unsigned int diff = x > y ? x - y : y - x; + + return diff <= max_diff; +} + static BOOL compare_uvec4(const struct uvec4* v1, const struct uvec4 *v2) { return v1->x == v2->x && v1->y == v2->y && v1->z == v2->z && v1->w == v2->w; @@ -211,18 +218,10 @@ static BOOL compare_color(DWORD c1, DWORD c2, BYTE max_diff) { - if (abs((int)(c1 & 0xff) - (int)(c2 & 0xff)) > max_diff) - return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((int)(c1 & 0xff) - (int)(c2 & 0xff)) > max_diff) - return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((int)(c1 & 0xff) - (int)(c2 & 0xff)) > max_diff) - return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((int)(c1 & 0xff) - (int)(c2 & 0xff)) > max_diff) - return FALSE; - return TRUE; + return compare_uint(c1 & 0xff, c2 & 0xff, max_diff) + && compare_uint((c1 >> 8) & 0xff, (c2 >> 8) & 0xff, max_diff) + && compare_uint((c1 >> 16) & 0xff, (c2 >> 16) & 0xff, max_diff) + && compare_uint((c1 >> 24) & 0xff, (c2 >> 24) & 0xff, max_diff); } struct srv_desc @@ -815,7 +814,7 @@ for (x = rect->left; x < rect->right; ++x) { value = get_readback_u8(rb, x, y); - if (abs((int)value - (int)expected_value) > max_diff) + if (!compare_uint(value, expected_value, max_diff)) goto done; } } @@ -847,7 +846,7 @@ for (x = rect->left; x < rect->right; ++x) { value = get_readback_u16(rb, x, y); - if (abs((int)value - (int)expected_value) > max_diff) + if (!compare_uint(value, expected_value, max_diff)) goto done; } } @@ -879,7 +878,7 @@ for (x = rect->left; x < rect->right; ++x) { value = get_readback_u32(rb, x, y) >> shift; - if (abs((int)value - (int)expected_value) > max_diff) + if (!compare_uint(value, expected_value, max_diff)) goto done; } } @@ -15856,7 +15855,7 @@ u32 = get_readback_data(&rb, 0, y, sizeof(*u32)); u32_value = *u32 >> shift; expected_value = depth * 16777215.0f + 0.5f; - all_match = abs(u32_value - expected_value) <= 3; + all_match = compare_uint(u32_value, expected_value, 3); ok(all_match, "Got value %#x (%.8e), expected %#x (%.8e).\n", u32_value, u32_value / 16777215.0f, @@ -15865,7 +15864,7 @@ case DXGI_FORMAT_D16_UNORM: u16 = get_readback_data(&rb, 0, y, sizeof(*u16)); expected_value = depth * 65535.0f + 0.5f; - all_match = abs(*u16 - expected_value) <= 1; + all_match = compare_uint(*u16, expected_value, 1); ok(all_match, "Got value %#x (%.8e), expected %#x (%.8e).\n", *u16, *u16 / 65535.0f, expected_value, expected_value / 65535.0f); diff -Nru wine-development-5.5/dlls/d3d11/buffer.c wine-development-5.6/dlls/d3d11/buffer.c --- wine-development-5.5/dlls/d3d11/buffer.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d11/buffer.c 2020-04-10 18:54:32.000000000 +0000 @@ -310,7 +310,7 @@ wined3d_mutex_lock(); hr = wined3d_resource_map(wined3d_buffer_get_resource(buffer->wined3d_buffer), 0, - &wined3d_map_desc, NULL, wined3d_map_flags_from_d3d11_map_type(map_type)); + &wined3d_map_desc, NULL, wined3d_map_flags_from_d3d10_map_type(map_type)); *data = wined3d_map_desc.data; wined3d_mutex_unlock(); diff -Nru wine-development-5.5/dlls/d3d11/d3d11_private.h wine-development-5.6/dlls/d3d11/d3d11_private.h --- wine-development-5.5/dlls/d3d11/d3d11_private.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d11/d3d11_private.h 2020-04-10 18:54:32.000000000 +0000 @@ -69,6 +69,7 @@ struct wined3d_resource *wined3d_resource_from_d3d11_resource(ID3D11Resource *resource) DECLSPEC_HIDDEN; struct wined3d_resource *wined3d_resource_from_d3d10_resource(ID3D10Resource *resource) DECLSPEC_HIDDEN; DWORD wined3d_map_flags_from_d3d11_map_type(D3D11_MAP map_type) DECLSPEC_HIDDEN; +DWORD wined3d_map_flags_from_d3d10_map_type(D3D10_MAP map_type) DECLSPEC_HIDDEN; DWORD wined3d_clear_flags_from_d3d11_clear_flags(UINT clear_flags) DECLSPEC_HIDDEN; unsigned int wined3d_access_from_d3d11(D3D11_USAGE usage, UINT cpu_access) DECLSPEC_HIDDEN; diff -Nru wine-development-5.5/dlls/d3d11/device.c wine-development-5.6/dlls/d3d11/device.c --- wine-development-5.5/dlls/d3d11/device.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d11/device.c 2020-04-10 18:54:32.000000000 +0000 @@ -5428,6 +5428,11 @@ return S_OK; } +static D3D11_DSV_DIMENSION d3d11_dsv_dimension_from_d3d10(D3D10_DSV_DIMENSION dim) +{ + return (D3D11_DSV_DIMENSION)dim; +} + static HRESULT STDMETHODCALLTYPE d3d10_device_CreateDepthStencilView(ID3D10Device1 *iface, ID3D10Resource *resource, const D3D10_DEPTH_STENCIL_VIEW_DESC *desc, ID3D10DepthStencilView **view) { @@ -5442,7 +5447,7 @@ if (desc) { d3d11_desc.Format = desc->Format; - d3d11_desc.ViewDimension = desc->ViewDimension; + d3d11_desc.ViewDimension = d3d11_dsv_dimension_from_d3d10(desc->ViewDimension); d3d11_desc.Flags = 0; memcpy(&d3d11_desc.u, &desc->u, sizeof(d3d11_desc.u)); } @@ -5828,13 +5833,18 @@ FIXME("iface %p, width %p, height %p stub!\n", iface, width, height); } +static D3D10_FEATURE_LEVEL1 d3d10_feature_level1_from_d3d_feature_level(D3D_FEATURE_LEVEL level) +{ + return (D3D10_FEATURE_LEVEL1)level; +} + static D3D10_FEATURE_LEVEL1 STDMETHODCALLTYPE d3d10_device_GetFeatureLevel(ID3D10Device1 *iface) { struct d3d_device *device = impl_from_ID3D10Device(iface); TRACE("iface %p.\n", iface); - return device->feature_level; + return d3d10_feature_level1_from_d3d_feature_level(device->feature_level); } static const struct ID3D10Device1Vtbl d3d10_device1_vtbl = @@ -6073,6 +6083,11 @@ return CONTAINING_RECORD(device_parent, struct d3d_device, device_parent); } +static D3D_FEATURE_LEVEL d3d_feature_level_from_wined3d(enum wined3d_feature_level level) +{ + return (D3D_FEATURE_LEVEL)level; +} + static void CDECL device_parent_wined3d_device_created(struct wined3d_device_parent *device_parent, struct wined3d_device *wined3d_device) { @@ -6083,7 +6098,7 @@ wined3d_device_incref(wined3d_device); device->wined3d_device = wined3d_device; - device->feature_level = wined3d_device_get_feature_level(wined3d_device); + device->feature_level = d3d_feature_level_from_wined3d(wined3d_device_get_feature_level(wined3d_device)); set_default_depth_stencil_state(wined3d_device); } diff -Nru wine-development-5.5/dlls/d3d11/inputlayout.c wine-development-5.6/dlls/d3d11/inputlayout.c --- wine-development-5.5/dlls/d3d11/inputlayout.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d11/inputlayout.c 2020-04-10 18:54:32.000000000 +0000 @@ -38,6 +38,11 @@ return NULL; } +static enum wined3d_input_classification wined3d_input_classification_from_d3d11(D3D11_INPUT_CLASSIFICATION slot_class) +{ + return (enum wined3d_input_classification)slot_class; +} + static HRESULT d3d11_input_layout_to_wined3d_declaration(const D3D11_INPUT_ELEMENT_DESC *element_descs, UINT element_count, const void *shader_byte_code, SIZE_T shader_byte_code_length, struct wined3d_vertex_element **wined3d_elements) @@ -69,7 +74,7 @@ e->input_slot = f->InputSlot; e->offset = f->AlignedByteOffset; e->output_slot = WINED3D_OUTPUT_SLOT_UNUSED; - e->input_slot_class = f->InputSlotClass; + e->input_slot_class = wined3d_input_classification_from_d3d11(f->InputSlotClass); e->instance_data_step_rate = f->InstanceDataStepRate; e->method = WINED3D_DECL_METHOD_DEFAULT; e->usage = 0; diff -Nru wine-development-5.5/dlls/d3d11/state.c wine-development-5.6/dlls/d3d11/state.c --- wine-development-5.5/dlls/d3d11/state.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d11/state.c 2020-04-10 18:54:32.000000000 +0000 @@ -240,6 +240,16 @@ /* ID3D10BlendState methods */ +static D3D10_BLEND d3d10_blend_from_d3d11(D3D11_BLEND factor) +{ + return (D3D10_BLEND)factor; +} + +static D3D10_BLEND_OP d3d10_blend_op_from_d3d11(D3D11_BLEND_OP op) +{ + return (D3D10_BLEND_OP)op; +} + static void STDMETHODCALLTYPE d3d10_blend_state_GetDesc(ID3D10BlendState1 *iface, D3D10_BLEND_DESC *desc) { struct d3d_blend_state *state = impl_from_ID3D10BlendState(iface); @@ -249,12 +259,12 @@ TRACE("iface %p, desc %p.\n", iface, desc); desc->AlphaToCoverageEnable = d3d11_desc->AlphaToCoverageEnable; - desc->SrcBlend = d3d11_desc->RenderTarget[0].SrcBlend; - desc->DestBlend = d3d11_desc->RenderTarget[0].DestBlend; - desc->BlendOp = d3d11_desc->RenderTarget[0].BlendOp; - desc->SrcBlendAlpha = d3d11_desc->RenderTarget[0].SrcBlendAlpha; - desc->DestBlendAlpha = d3d11_desc->RenderTarget[0].DestBlendAlpha; - desc->BlendOpAlpha = d3d11_desc->RenderTarget[0].BlendOpAlpha; + desc->SrcBlend = d3d10_blend_from_d3d11(d3d11_desc->RenderTarget[0].SrcBlend); + desc->DestBlend = d3d10_blend_from_d3d11(d3d11_desc->RenderTarget[0].DestBlend); + desc->BlendOp = d3d10_blend_op_from_d3d11(d3d11_desc->RenderTarget[0].BlendOp); + desc->SrcBlendAlpha = d3d10_blend_from_d3d11(d3d11_desc->RenderTarget[0].SrcBlendAlpha); + desc->DestBlendAlpha = d3d10_blend_from_d3d11(d3d11_desc->RenderTarget[0].DestBlendAlpha); + desc->BlendOpAlpha = d3d10_blend_op_from_d3d11(d3d11_desc->RenderTarget[0].BlendOpAlpha); for (i = 0; i < D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) { desc->BlendEnable[i] = d3d11_desc->RenderTarget[i].BlendEnable; @@ -303,6 +313,16 @@ d3d_blend_state_wined3d_object_destroyed, }; +static enum wined3d_blend wined3d_blend_from_d3d11(D3D11_BLEND factor) +{ + return (enum wined3d_blend)factor; +} + +static enum wined3d_blend_op wined3d_blend_op_from_d3d11(D3D11_BLEND_OP op) +{ + return (enum wined3d_blend_op)op; +} + HRESULT d3d_blend_state_create(struct d3d_device *device, const D3D11_BLEND_DESC *desc, struct d3d_blend_state **state) { @@ -385,12 +405,12 @@ for (i = 0; i < D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) { wined3d_desc.rt[i].enable = desc->RenderTarget[i].BlendEnable; - wined3d_desc.rt[i].src = desc->RenderTarget[i].SrcBlend; - wined3d_desc.rt[i].dst = desc->RenderTarget[i].DestBlend; - wined3d_desc.rt[i].op = desc->RenderTarget[i].BlendOp; - wined3d_desc.rt[i].src_alpha = desc->RenderTarget[i].SrcBlendAlpha; - wined3d_desc.rt[i].dst_alpha = desc->RenderTarget[i].DestBlendAlpha; - wined3d_desc.rt[i].op_alpha = desc->RenderTarget[i].BlendOpAlpha; + wined3d_desc.rt[i].src = wined3d_blend_from_d3d11(desc->RenderTarget[i].SrcBlend); + wined3d_desc.rt[i].dst = wined3d_blend_from_d3d11(desc->RenderTarget[i].DestBlend); + wined3d_desc.rt[i].op = wined3d_blend_op_from_d3d11(desc->RenderTarget[i].BlendOp); + wined3d_desc.rt[i].src_alpha = wined3d_blend_from_d3d11(desc->RenderTarget[i].SrcBlendAlpha); + wined3d_desc.rt[i].dst_alpha = wined3d_blend_from_d3d11(desc->RenderTarget[i].DestBlendAlpha); + wined3d_desc.rt[i].op_alpha = wined3d_blend_op_from_d3d11(desc->RenderTarget[i].BlendOpAlpha); wined3d_desc.rt[i].writemask = desc->RenderTarget[i].RenderTargetWriteMask; } @@ -1061,6 +1081,16 @@ d3d_rasterizer_state_wined3d_object_destroyed, }; +static enum wined3d_fill_mode wined3d_fill_mode_from_d3d11(D3D11_FILL_MODE mode) +{ + return (enum wined3d_fill_mode)mode; +} + +static enum wined3d_cull wined3d_cull_from_d3d11(D3D11_CULL_MODE mode) +{ + return (enum wined3d_cull)mode; +} + static HRESULT d3d_rasterizer_state_init(struct d3d_rasterizer_state *state, struct d3d_device *device, const D3D11_RASTERIZER_DESC *desc) { @@ -1080,8 +1110,8 @@ return E_FAIL; } - wined3d_desc.fill_mode = desc->FillMode; - wined3d_desc.cull_mode = desc->CullMode; + wined3d_desc.fill_mode = wined3d_fill_mode_from_d3d11(desc->FillMode); + wined3d_desc.cull_mode = wined3d_cull_from_d3d11(desc->CullMode); wined3d_desc.front_ccw = desc->FrontCounterClockwise; wined3d_desc.depth_bias = desc->DepthBias; wined3d_desc.depth_bias_clamp = desc->DepthBiasClamp; diff -Nru wine-development-5.5/dlls/d3d11/tests/d3d11.c wine-development-5.6/dlls/d3d11/tests/d3d11.c --- wine-development-5.5/dlls/d3d11/tests/d3d11.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d11/tests/d3d11.c 2020-04-10 18:54:32.000000000 +0000 @@ -260,6 +260,13 @@ && compare_float(v1->w, v2->w, ulps); } +static BOOL compare_uint(unsigned int x, unsigned int y, unsigned int max_diff) +{ + unsigned int diff = x > y ? x - y : y - x; + + return diff <= max_diff; +} + static BOOL compare_uvec4(const struct uvec4* v1, const struct uvec4 *v2) { return v1->x == v2->x && v1->y == v2->y && v1->z == v2->z && v1->w == v2->w; @@ -267,18 +274,10 @@ static BOOL compare_color(DWORD c1, DWORD c2, BYTE max_diff) { - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - return TRUE; + return compare_uint(c1 & 0xff, c2 & 0xff, max_diff) + && compare_uint((c1 >> 8) & 0xff, (c2 >> 8) & 0xff, max_diff) + && compare_uint((c1 >> 16) & 0xff, (c2 >> 16) & 0xff, max_diff) + && compare_uint((c1 >> 24) & 0xff, (c2 >> 24) & 0xff, max_diff); } struct srv_desc @@ -1012,7 +1011,7 @@ for (x = rect->left; x < rect->right; ++x) { value = get_readback_u8(rb, x, y, z); - if (abs((int)value - (int)expected_value) > max_diff) + if (!compare_uint(value, expected_value, max_diff)) goto done; } } @@ -1047,7 +1046,7 @@ for (x = rect->left; x < rect->right; ++x) { value = get_readback_u16(rb, x, y, z); - if (abs((int)value - (int)expected_value) > max_diff) + if (!compare_uint(value, expected_value, max_diff)) goto done; } } @@ -1082,7 +1081,7 @@ for (x = rect->left; x < rect->right; ++x) { value = get_readback_u32(rb, x, y, z) >> shift; - if (abs((int)value - (int)expected_value) > max_diff) + if (!compare_uint(value, expected_value, max_diff)) goto done; } } @@ -25842,7 +25841,7 @@ u32 = get_readback_data(&rb, 0, y, 0, sizeof(*u32)); u32_value = *u32 >> shift; expected_value = depth * 16777215.0f + 0.5f; - all_match = abs(u32_value - expected_value) <= 3; + all_match = compare_uint(u32_value, expected_value, 3); ok(all_match, "Got value %#x (%.8e), expected %#x (%.8e).\n", u32_value, u32_value / 16777215.0f, @@ -25851,7 +25850,7 @@ case DXGI_FORMAT_D16_UNORM: u16 = get_readback_data(&rb, 0, y, 0, sizeof(*u16)); expected_value = depth * 65535.0f + 0.5f; - all_match = abs(*u16 - expected_value) <= 1; + all_match = compare_uint(*u16, expected_value, 1); ok(all_match, "Got value %#x (%.8e), expected %#x (%.8e).\n", *u16, *u16 / 65535.0f, expected_value, expected_value / 65535.0f); diff -Nru wine-development-5.5/dlls/d3d11/texture.c wine-development-5.6/dlls/d3d11/texture.c --- wine-development-5.5/dlls/d3d11/texture.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d11/texture.c 2020-04-10 18:54:32.000000000 +0000 @@ -356,7 +356,7 @@ wined3d_mutex_lock(); if (SUCCEEDED(hr = wined3d_resource_map(wined3d_texture_get_resource(texture->wined3d_texture), sub_resource_idx, - &wined3d_map_desc, NULL, wined3d_map_flags_from_d3d11_map_type(map_type)))) + &wined3d_map_desc, NULL, wined3d_map_flags_from_d3d10_map_type(map_type)))) { *data = wined3d_map_desc.data; } @@ -858,7 +858,7 @@ wined3d_mutex_lock(); if (SUCCEEDED(hr = wined3d_resource_map(wined3d_texture_get_resource(texture->wined3d_texture), sub_resource_idx, - &wined3d_map_desc, NULL, wined3d_map_flags_from_d3d11_map_type(map_type)))) + &wined3d_map_desc, NULL, wined3d_map_flags_from_d3d10_map_type(map_type)))) { mapped_texture->pData = wined3d_map_desc.data; mapped_texture->RowPitch = wined3d_map_desc.row_pitch; @@ -1355,7 +1355,7 @@ wined3d_mutex_lock(); if (SUCCEEDED(hr = wined3d_resource_map(wined3d_texture_get_resource(texture->wined3d_texture), sub_resource_idx, - &wined3d_map_desc, NULL, wined3d_map_flags_from_d3d11_map_type(map_type)))) + &wined3d_map_desc, NULL, wined3d_map_flags_from_d3d10_map_type(map_type)))) { mapped_texture->pData = wined3d_map_desc.data; mapped_texture->RowPitch = wined3d_map_desc.row_pitch; diff -Nru wine-development-5.5/dlls/d3d11/utils.c wine-development-5.6/dlls/d3d11/utils.c --- wine-development-5.5/dlls/d3d11/utils.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d11/utils.c 2020-04-10 18:54:32.000000000 +0000 @@ -756,6 +756,11 @@ } } +DWORD wined3d_map_flags_from_d3d10_map_type(D3D10_MAP map_type) +{ + return wined3d_map_flags_from_d3d11_map_type((D3D11_MAP)map_type); +} + DWORD wined3d_clear_flags_from_d3d11_clear_flags(UINT clear_flags) { DWORD wined3d_clear_flags = 0; diff -Nru wine-development-5.5/dlls/d3d11/view.c wine-development-5.6/dlls/d3d11/view.c --- wine-development-5.5/dlls/d3d11/view.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d11/view.c 2020-04-10 18:54:32.000000000 +0000 @@ -1212,9 +1212,6 @@ { wined3d_desc->format_id = wined3dformat_from_dxgi_format(desc->Format); - if (desc->Flags) - FIXME("Unhandled depth stencil view flags %#x.\n", desc->Flags); - wined3d_desc->flags = 0; if (desc->Flags & D3D11_DSV_READ_ONLY_DEPTH) wined3d_desc->flags |= WINED3D_VIEW_READ_ONLY_DEPTH; diff -Nru wine-development-5.5/dlls/d3d12/tests/d3d12.c wine-development-5.6/dlls/d3d12/tests/d3d12.c --- wine-development-5.5/dlls/d3d12/tests/d3d12.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d12/tests/d3d12.c 2020-04-10 18:54:32.000000000 +0000 @@ -24,20 +24,19 @@ #include "dxgi1_6.h" #include "wine/test.h" +static BOOL compare_uint(unsigned int x, unsigned int y, unsigned int max_diff) +{ + unsigned int diff = x > y ? x - y : y - x; + + return diff <= max_diff; +} + static BOOL compare_color(DWORD c1, DWORD c2, unsigned int max_diff) { - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - return TRUE; + return compare_uint(c1 & 0xff, c2 & 0xff, max_diff) + && compare_uint((c1 >> 8) & 0xff, (c2 >> 8) & 0xff, max_diff) + && compare_uint((c1 >> 16) & 0xff, (c2 >> 16) & 0xff, max_diff) + && compare_uint((c1 >> 24) & 0xff, (c2 >> 24) & 0xff, max_diff); } static BOOL equal_luid(LUID a, LUID b) diff -Nru wine-development-5.5/dlls/d3d8/d3d8_private.h wine-development-5.6/dlls/d3d8/d3d8_private.h --- wine-development-5.5/dlls/d3d8/d3d8_private.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d8/d3d8_private.h 2020-04-10 18:54:32.000000000 +0000 @@ -369,4 +369,14 @@ return bind_flags; } +static inline D3DMULTISAMPLE_TYPE d3dmultisample_type_from_wined3d(enum wined3d_multisample_type type) +{ + return (D3DMULTISAMPLE_TYPE)type; +} + +static inline enum wined3d_device_type wined3d_device_type_from_d3d(D3DDEVTYPE type) +{ + return (enum wined3d_device_type)type; +} + #endif /* __WINE_D3DX8_PRIVATE_H */ diff -Nru wine-development-5.5/dlls/d3d8/device.c wine-development-5.6/dlls/d3d8/device.c --- wine-development-5.5/dlls/d3d8/device.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d8/device.c 2020-04-10 18:54:32.000000000 +0000 @@ -35,7 +35,8 @@ BYTE *c = (BYTE *)&format; /* Don't translate FOURCC formats */ - if (isprint(c[0]) && isprint(c[1]) && isprint(c[2]) && isprint(c[3])) return format; + if (isprint(c[0]) && isprint(c[1]) && isprint(c[2]) && isprint(c[3])) + return (D3DFORMAT)format; switch(format) { @@ -85,7 +86,8 @@ BYTE *c = (BYTE *)&format; /* Don't translate FOURCC formats */ - if (isprint(c[0]) && isprint(c[1]) && isprint(c[2]) && isprint(c[3])) return format; + if (isprint(c[0]) && isprint(c[1]) && isprint(c[2]) && isprint(c[3])) + return (enum wined3d_format_id)format; switch(format) { @@ -204,7 +206,7 @@ present_parameters->BackBufferHeight = swapchain_desc->backbuffer_height; present_parameters->BackBufferFormat = d3dformat_from_wined3dformat(swapchain_desc->backbuffer_format); present_parameters->BackBufferCount = swapchain_desc->backbuffer_count; - present_parameters->MultiSampleType = swapchain_desc->multisample_type; + present_parameters->MultiSampleType = d3dmultisample_type_from_wined3d(swapchain_desc->multisample_type); present_parameters->SwapEffect = d3dswapeffect_from_wined3dswapeffect(swapchain_desc->swap_effect); present_parameters->hDeviceWindow = swapchain_desc->device_window; present_parameters->Windowed = swapchain_desc->windowed; @@ -255,6 +257,11 @@ } } +static enum wined3d_multisample_type wined3d_multisample_type_from_d3d(D3DMULTISAMPLE_TYPE type) +{ + return (enum wined3d_multisample_type)type; +} + static BOOL wined3d_swapchain_desc_from_present_parameters(struct wined3d_swapchain_desc *swapchain_desc, const D3DPRESENT_PARAMETERS *present_parameters) { @@ -291,7 +298,7 @@ swapchain_desc->backbuffer_format = wined3dformat_from_d3dformat(present_parameters->BackBufferFormat); swapchain_desc->backbuffer_count = max(1, present_parameters->BackBufferCount); swapchain_desc->backbuffer_bind_flags = WINED3D_BIND_RENDER_TARGET; - swapchain_desc->multisample_type = present_parameters->MultiSampleType; + swapchain_desc->multisample_type = wined3d_multisample_type_from_d3d(present_parameters->MultiSampleType); swapchain_desc->multisample_quality = 0; /* d3d9 only */ swapchain_desc->swap_effect = wined3dswapeffect_from_d3dswapeffect(present_parameters->SwapEffect); swapchain_desc->device_window = present_parameters->hDeviceWindow; @@ -432,6 +439,23 @@ caps->MaxVertexShaderConst = min(D3D8_MAX_VERTEX_SHADER_CONSTANTF, caps->MaxVertexShaderConst); } +static enum wined3d_transform_state wined3d_transform_state_from_d3d(D3DTRANSFORMSTATETYPE state) +{ + return (enum wined3d_transform_state)state; +} + +static enum wined3d_render_state wined3d_render_state_from_d3d(D3DRENDERSTATETYPE state) +{ + if (state == D3DRS_ZBIAS) + return WINED3D_RS_DEPTHBIAS; + return (enum wined3d_render_state)state; +} + +static enum wined3d_primitive_type wined3d_primitive_type_from_d3d(D3DPRIMITIVETYPE type) +{ + return (enum wined3d_primitive_type)type; +} + /* Handle table functions */ static DWORD d3d8_allocate_handle(struct d3d8_handle_table *t, void *object, enum d3d8_handle_type type) { @@ -739,6 +763,8 @@ { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); struct d3d8_surface *bitmap_impl = unsafe_impl_from_IDirect3DSurface8(bitmap); + D3DSURFACE_DESC surface_desc; + D3DDISPLAYMODE mode; HRESULT hr; TRACE("iface %p, hotspot_x %u, hotspot_y %u, bitmap %p.\n", @@ -750,6 +776,26 @@ return D3DERR_INVALIDCALL; } + if (FAILED(hr = IDirect3DSurface8_GetDesc(bitmap, &surface_desc))) + { + WARN("Failed to get surface description, hr %#x.\n", hr); + return hr; + } + + if (FAILED(hr = IDirect3D8_GetAdapterDisplayMode(device->d3d_parent, device->adapter_ordinal, + &mode))) + { + WARN("Failed to get device display mode, hr %#x.\n", hr); + return hr; + } + + if (surface_desc.Width > mode.Width || surface_desc.Height > mode.Height) + { + WARN("Surface dimension %ux%u exceeds display mode %ux%u.\n", surface_desc.Width, + surface_desc.Height, mode.Width, mode.Height); + return D3DERR_INVALIDCALL; + } + wined3d_mutex_lock(); hr = wined3d_device_set_cursor_properties(device->wined3d_device, hotspot_x, hotspot_y, bitmap_impl->wined3d_texture, bitmap_impl->sub_resource_idx); @@ -1241,7 +1287,8 @@ access |= WINED3D_RESOURCE_ACCESS_MAP_R | WINED3D_RESOURCE_ACCESS_MAP_W; return d3d8_device_create_surface(device, wined3dformat_from_d3dformat(format), - multisample_type, WINED3D_BIND_RENDER_TARGET, access, width, height, surface); + wined3d_multisample_type_from_d3d(multisample_type), + WINED3D_BIND_RENDER_TARGET, access, width, height, surface); } static HRESULT WINAPI d3d8_device_CreateDepthStencilSurface(IDirect3DDevice8 *iface, @@ -1259,7 +1306,7 @@ *surface = NULL; return d3d8_device_create_surface(device, wined3dformat_from_d3dformat(format), - multisample_type, WINED3D_BIND_DEPTH_STENCIL, + wined3d_multisample_type_from_d3d(multisample_type), WINED3D_BIND_DEPTH_STENCIL, WINED3D_RESOURCE_ACCESS_GPU, width, height, surface); } @@ -1621,7 +1668,8 @@ /* Note: D3DMATRIX is compatible with struct wined3d_matrix. */ wined3d_mutex_lock(); - wined3d_stateblock_set_transform(device->update_state, state, (const struct wined3d_matrix *)matrix); + wined3d_stateblock_set_transform(device->update_state, + wined3d_transform_state_from_d3d(state), (const struct wined3d_matrix *)matrix); wined3d_mutex_unlock(); return D3D_OK; @@ -1651,7 +1699,8 @@ /* Note: D3DMATRIX is compatible with struct wined3d_matrix. */ wined3d_mutex_lock(); - wined3d_stateblock_multiply_transform(device->state, state, (const struct wined3d_matrix *)matrix); + wined3d_stateblock_multiply_transform(device->state, + wined3d_transform_state_from_d3d(state), (const struct wined3d_matrix *)matrix); wined3d_mutex_unlock(); return D3D_OK; @@ -1875,9 +1924,7 @@ TRACE("iface %p, state %#x, value %#x.\n", iface, state, value); wined3d_mutex_lock(); - if (state == D3DRS_ZBIAS) - state = WINED3D_RS_DEPTHBIAS; - wined3d_stateblock_set_render_state(device->update_state, state, value); + wined3d_stateblock_set_render_state(device->update_state, wined3d_render_state_from_d3d(state), value); if (state == D3DRS_POINTSIZE && value == D3D8_RESZ_CODE) resolve_depth_buffer(device); wined3d_mutex_unlock(); @@ -2439,7 +2486,7 @@ vertex_count = vertex_count_from_primitive_count(primitive_type, primitive_count); wined3d_mutex_lock(); d3d8_device_upload_sysmem_vertex_buffers(device, start_vertex, vertex_count); - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type, 0); + wined3d_device_set_primitive_type(device->wined3d_device, wined3d_primitive_type_from_d3d(primitive_type), 0); wined3d_device_apply_stateblock(device->wined3d_device, device->state); hr = wined3d_device_draw_primitive(device->wined3d_device, start_vertex, vertex_count); wined3d_mutex_unlock(); @@ -2464,7 +2511,7 @@ base_vertex_index = device->stateblock_state->base_vertex_index; d3d8_device_upload_sysmem_vertex_buffers(device, base_vertex_index + min_vertex_idx, vertex_count); d3d8_device_upload_sysmem_index_buffer(device, start_idx, index_count); - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type, 0); + wined3d_device_set_primitive_type(device->wined3d_device, wined3d_primitive_type_from_d3d(primitive_type), 0); wined3d_device_apply_stateblock(device->wined3d_device, device->state); hr = wined3d_device_draw_indexed_primitive(device->wined3d_device, start_idx, index_count); wined3d_mutex_unlock(); @@ -2558,7 +2605,7 @@ if (FAILED(hr)) goto done; - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type, 0); + wined3d_device_set_primitive_type(device->wined3d_device, wined3d_primitive_type_from_d3d(primitive_type), 0); wined3d_device_apply_stateblock(device->wined3d_device, device->state); hr = wined3d_device_draw_primitive(device->wined3d_device, vb_pos / stride, vtx_count); wined3d_stateblock_set_stream_source(device->state, 0, NULL, 0, 0); @@ -2686,7 +2733,7 @@ wined3dformat_from_d3dformat(index_format)); wined3d_stateblock_set_base_vertex_index(device->state, vb_pos / vertex_stride - min_vertex_idx); - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type, 0); + wined3d_device_set_primitive_type(device->wined3d_device, wined3d_primitive_type_from_d3d(primitive_type), 0); wined3d_device_apply_stateblock(device->wined3d_device, device->state); hr = wined3d_device_draw_indexed_primitive(device->wined3d_device, ib_pos / idx_fmt_size, idx_count); @@ -3694,7 +3741,7 @@ wined3d_mutex_lock(); wined3d_adapter = wined3d_output_get_adapter(parent->wined3d_outputs[output_idx]); - if (FAILED(hr = wined3d_device_create(wined3d, wined3d_adapter, device_type, + if (FAILED(hr = wined3d_device_create(wined3d, wined3d_adapter, wined3d_device_type_from_d3d(device_type), focus_window, flags, 4, feature_levels, ARRAY_SIZE(feature_levels), &device->device_parent, &device->wined3d_device))) { @@ -3704,7 +3751,7 @@ return hr; } - wined3d_get_device_caps(wined3d_adapter, device_type, &caps); + wined3d_get_device_caps(wined3d_adapter, wined3d_device_type_from_d3d(device_type), &caps); device->max_user_clip_planes = caps.MaxUserClipPlanes; device->vs_uniform_count = caps.MaxVertexShaderConst; diff -Nru wine-development-5.5/dlls/d3d8/directx.c wine-development-5.6/dlls/d3d8/directx.c --- wine-development-5.5/dlls/d3d8/directx.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d8/directx.c 2020-04-10 18:54:32.000000000 +0000 @@ -232,8 +232,8 @@ return WINED3DERR_NOTAVAILABLE; wined3d_mutex_lock(); - hr = wined3d_check_device_type(d3d8->wined3d, d3d8->wined3d_outputs[output_idx], device_type, - wined3dformat_from_d3dformat(display_format), + hr = wined3d_check_device_type(d3d8->wined3d, d3d8->wined3d_outputs[output_idx], + wined3d_device_type_from_d3d(device_type), wined3dformat_from_d3dformat(display_format), wined3dformat_from_d3dformat(backbuffer_format), windowed); wined3d_mutex_unlock(); @@ -298,13 +298,13 @@ { DWORD levels; - hr = wined3d_check_device_multisample_type(wined3d_adapter, device_type, + hr = wined3d_check_device_multisample_type(wined3d_adapter, wined3d_device_type_from_d3d(device_type), WINED3DFMT_D24_UNORM_S8_UINT, FALSE, WINED3D_MULTISAMPLE_NON_MASKABLE, &levels); if (SUCCEEDED(hr) && !levels) hr = D3DERR_NOTAVAILABLE; } else - hr = wined3d_check_device_format(d3d8->wined3d, wined3d_adapter, device_type, + hr = wined3d_check_device_format(d3d8->wined3d, wined3d_adapter, wined3d_device_type_from_d3d(device_type), wined3dformat_from_d3dformat(adapter_format), usage, bind_flags, wined3d_rtype, wined3dformat_from_d3dformat(format)); wined3d_mutex_unlock(); @@ -332,7 +332,7 @@ wined3d_mutex_lock(); wined3d_adapter = wined3d_output_get_adapter(d3d8->wined3d_outputs[output_idx]); - hr = wined3d_check_device_multisample_type(wined3d_adapter, device_type, + hr = wined3d_check_device_multisample_type(wined3d_adapter, wined3d_device_type_from_d3d(device_type), wined3dformat_from_d3dformat(format), windowed, (enum wined3d_multisample_type)multisample_type, NULL); wined3d_mutex_unlock(); @@ -357,7 +357,7 @@ wined3d_mutex_lock(); wined3d_adapter = wined3d_output_get_adapter(d3d8->wined3d_outputs[output_idx]); - hr = wined3d_check_depth_stencil_match(wined3d_adapter, device_type, + hr = wined3d_check_depth_stencil_match(wined3d_adapter, wined3d_device_type_from_d3d(device_type), wined3dformat_from_d3dformat(adapter_format), wined3dformat_from_d3dformat(rt_format), wined3dformat_from_d3dformat(ds_format)); wined3d_mutex_unlock(); @@ -384,7 +384,7 @@ wined3d_mutex_lock(); wined3d_adapter = wined3d_output_get_adapter(d3d8->wined3d_outputs[output_idx]); - hr = wined3d_get_device_caps(wined3d_adapter, device_type, &wined3d_caps); + hr = wined3d_get_device_caps(wined3d_adapter, wined3d_device_type_from_d3d(device_type), &wined3d_caps); wined3d_mutex_unlock(); d3dcaps_from_wined3dcaps(caps, &wined3d_caps, adapter); diff -Nru wine-development-5.5/dlls/d3d8/surface.c wine-development-5.6/dlls/d3d8/surface.c --- wine-development-5.5/dlls/d3d8/surface.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d8/surface.c 2020-04-10 18:54:32.000000000 +0000 @@ -193,7 +193,7 @@ desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage, wined3d_desc.bind_flags); desc->Pool = d3dpool_from_wined3daccess(wined3d_desc.access, wined3d_desc.usage); desc->Size = wined3d_desc.size; - desc->MultiSampleType = wined3d_desc.multisample_type; + desc->MultiSampleType = d3dmultisample_type_from_wined3d(wined3d_desc.multisample_type); desc->Width = wined3d_desc.width; desc->Height = wined3d_desc.height; diff -Nru wine-development-5.5/dlls/d3d8/tests/device.c wine-development-5.6/dlls/d3d8/tests/device.c --- wine-development-5.5/dlls/d3d8/tests/device.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d8/tests/device.c 2020-04-10 18:54:32.000000000 +0000 @@ -75,6 +75,14 @@ return IUnknown_Release( object ); } +static void get_virtual_rect(RECT *rect) +{ + rect->left = GetSystemMetrics(SM_XVIRTUALSCREEN); + rect->top = GetSystemMetrics(SM_YVIRTUALSCREEN); + rect->right = rect->left + GetSystemMetrics(SM_CXVIRTUALSCREEN); + rect->bottom = rect->top + GetSystemMetrics(SM_CYVIRTUALSCREEN); +} + static HWND create_window(void) { RECT r = {0, 0, 640, 480}; @@ -931,16 +939,30 @@ static void test_cursor(void) { + unsigned int adapter_idx, adapter_count, test_idx; IDirect3DSurface8 *cursor = NULL; + struct device_desc device_desc; + unsigned int width, height; IDirect3DDevice8 *device; + HRESULT expected_hr, hr; + D3DDISPLAYMODE mode; CURSORINFO info; IDirect3D8 *d3d; ULONG refcount; HCURSOR cur; HWND window; - HRESULT hr; BOOL ret; + static const DWORD device_flags[] = {0, CREATE_DEVICE_FULLSCREEN}; + static const SIZE cursor_sizes[] = + { + {1, 1}, + {2, 4}, + {3, 2}, + {2, 3}, + {6, 6}, + }; + window = create_window(); ok(!!window, "Failed to create a window.\n"); @@ -1001,8 +1023,88 @@ ok(info.flags & (CURSOR_SHOWING|CURSOR_SUPPRESSED), "The gdi cursor is hidden (%08x)\n", info.flags); ok(info.hCursor != cur, "The cursor handle is %p\n", info.hCursor); + /* Cursor dimensions must all be powers of two */ + for (test_idx = 0; test_idx < ARRAY_SIZE(cursor_sizes); ++test_idx) + { + width = cursor_sizes[test_idx].cx; + height = cursor_sizes[test_idx].cy; + hr = IDirect3DDevice8_CreateImageSurface(device, width, height, D3DFMT_A8R8G8B8, &cursor); + ok(hr == D3D_OK, "Test %u: CreateImageSurface failed, hr %#x.\n", test_idx, hr); + hr = IDirect3DDevice8_SetCursorProperties(device, 0, 0, cursor); + if (width && !(width & (width - 1)) && height && !(height & (height - 1))) + expected_hr = D3D_OK; + else + expected_hr = D3DERR_INVALIDCALL; + ok(hr == expected_hr, "Test %u: Expect SetCursorProperties return %#x, got %#x.\n", + test_idx, expected_hr, hr); + IDirect3DSurface8_Release(cursor); + } + refcount = IDirect3DDevice8_Release(device); ok(!refcount, "Device has %u references left.\n", refcount); + + /* Cursor dimensions must not exceed adapter display mode */ + device_desc.device_window = window; + device_desc.width = 640; + device_desc.height = 480; + + adapter_count = IDirect3D8_GetAdapterCount(d3d); + for (adapter_idx = 0; adapter_idx < adapter_count; ++adapter_idx) + { + for (test_idx = 0; test_idx < ARRAY_SIZE(device_flags); ++test_idx) + { + device_desc.adapter_ordinal = adapter_idx; + device_desc.flags = device_flags[test_idx]; + if (!(device = create_device(d3d, window, &device_desc))) + { + skip("Adapter %u test %u: Failed to create a D3D device.\n", adapter_idx, test_idx); + break; + } + + hr = IDirect3D8_GetAdapterDisplayMode(d3d, adapter_idx, &mode); + ok(hr == D3D_OK, "Adapter %u test %u: GetAdapterDisplayMode failed, hr %#x.\n", + adapter_idx, test_idx, hr); + + /* Find the largest width and height that are powers of two and less than the display mode */ + width = 1; + height = 1; + while (width * 2 <= mode.Width) + width *= 2; + while (height * 2 <= mode.Height) + height *= 2; + + hr = IDirect3DDevice8_CreateImageSurface(device, width, height, D3DFMT_A8R8G8B8, &cursor); + ok(hr == D3D_OK, "Adapter %u test %u: CreateImageSurface failed, hr %#x.\n", + adapter_idx, test_idx, hr); + hr = IDirect3DDevice8_SetCursorProperties(device, 0, 0, cursor); + ok(hr == D3D_OK, "Adapter %u test %u: SetCursorProperties failed, hr %#x.\n", + adapter_idx, test_idx, hr); + IDirect3DSurface8_Release(cursor); + + hr = IDirect3DDevice8_CreateImageSurface(device, width * 2, height, D3DFMT_A8R8G8B8, + &cursor); + ok(hr == D3D_OK, "Adapter %u test %u: CreateImageSurface failed, hr %#x.\n", + adapter_idx, test_idx, hr); + hr = IDirect3DDevice8_SetCursorProperties(device, 0, 0, cursor); + ok(hr == D3DERR_INVALIDCALL, + "Adapter %u test %u: Expect SetCursorProperties return %#x, got %#x.\n", + adapter_idx, test_idx, D3DERR_INVALIDCALL, hr); + IDirect3DSurface8_Release(cursor); + + hr = IDirect3DDevice8_CreateImageSurface(device, width, height * 2, D3DFMT_A8R8G8B8, + &cursor); + ok(hr == D3D_OK, "Adapter %u test %u: CreateImageSurface failed, hr %#x.\n", + adapter_idx, test_idx, hr); + hr = IDirect3DDevice8_SetCursorProperties(device, 0, 0, cursor); + ok(hr == D3DERR_INVALIDCALL, + "Adapter %u test %u: Expect SetCursorProperties return %#x, got %#x.\n", + adapter_idx, test_idx, D3DERR_INVALIDCALL, hr); + IDirect3DSurface8_Release(cursor); + + refcount = IDirect3DDevice8_Release(device); + ok(!refcount, "Adapter %u: Device has %u references left.\n", adapter_idx, refcount); + } + } cleanup: IDirect3D8_Release(d3d); DestroyWindow(window); @@ -1294,8 +1396,8 @@ { const struct mode *mode_a = a; const struct mode *mode_b = b; - unsigned int w = mode_a->w - mode_b->w; - unsigned int h = mode_a->h - mode_b->h; + int w = mode_a->w - mode_b->w; + int h = mode_a->h - mode_b->h; return abs(w) >= abs(h) ? -w : -h; } @@ -2662,6 +2764,7 @@ { struct wndproc_thread_param thread_params; struct device_desc device_desc; + static WINDOWPOS windowpos; IDirect3DDevice8 *device; WNDCLASSA wc = {0}; IDirect3D8 *d3d8; @@ -2677,7 +2780,6 @@ DEVMODEW devmode; LONG change_ret, device_style; BOOL ret; - WINDOWPOS windowpos; static const struct message create_messages[] = { @@ -2777,7 +2879,7 @@ {WM_SIZE, FOCUS_WINDOW, TRUE, SIZE_MAXIMIZED}, {0, 0, FALSE, 0}, }; - struct message mode_change_messages[] = + static const struct message mode_change_messages[] = { {WM_WINDOWPOSCHANGING, DEVICE_WINDOW, FALSE, 0}, {WM_WINDOWPOSCHANGED, DEVICE_WINDOW, FALSE, 0}, @@ -2790,7 +2892,7 @@ * ShowWindow does not send such a message because the window is already visible. */ {0, 0, FALSE, 0}, }; - struct message mode_change_messages_hidden[] = + static const struct message mode_change_messages_hidden[] = { {WM_WINDOWPOSCHANGING, DEVICE_WINDOW, FALSE, 0}, {WM_WINDOWPOSCHANGED, DEVICE_WINDOW, FALSE, 0}, @@ -2857,6 +2959,9 @@ return; } + filter_messages = NULL; + expect_messages = NULL; + wc.lpfnWndProc = test_proc; wc.lpszClassName = "d3d8_test_wndproc_wc"; ok(RegisterClassA(&wc), "Failed to register window class.\n"); @@ -3200,6 +3305,7 @@ flush_events(); ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it, i=%u.\n", expect_messages->message, expect_messages->window, i); + expect_messages = NULL; /* World of Warplanes hides the window by removing WS_VISIBLE and expects Reset() to show it again. */ device_style = GetWindowLongA(device_window, GWL_STYLE); @@ -3219,6 +3325,7 @@ flush_events(); ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it.\n", expect_messages->message, expect_messages->window); + expect_messages = NULL; ok(windowpos.hwnd == device_window && !windowpos.hwndInsertAfter && !windowpos.x && !windowpos.y && !windowpos.cx && !windowpos.cy @@ -3242,6 +3349,7 @@ done: filter_messages = NULL; + expect_messages = NULL; IDirect3D8_Release(d3d8); SetEvent(thread_params.test_finished); @@ -3272,6 +3380,9 @@ d3d8 = Direct3DCreate8(D3D_SDK_VERSION); ok(!!d3d8, "Failed to create a D3D object.\n"); + filter_messages = NULL; + expect_messages = NULL; + wc.lpfnWndProc = test_proc; wc.lpszClassName = "d3d8_test_wndproc_wc"; ok(RegisterClassA(&wc), "Failed to register window class.\n"); @@ -4177,6 +4288,9 @@ HRESULT hr; ULONG ref; + filter_messages = NULL; + expect_messages = NULL; + wc.lpfnWndProc = test_proc; wc.lpszClassName = "d3d8_test_wndproc_wc"; ok(RegisterClassA(&wc), "Failed to register window class.\n"); @@ -9980,6 +10094,80 @@ DestroyWindow(window); } +static void test_cursor_clipping(void) +{ + unsigned int adapter_idx, adapter_count, mode_idx; + D3DDISPLAYMODE mode, current_mode; + struct device_desc device_desc; + RECT virtual_rect, clip_rect; + IDirect3DDevice8 *device; + IDirect3D8 *d3d; + HWND window; + HRESULT hr; + + window = create_window(); + ok(!!window, "Failed to create a window.\n"); + d3d = Direct3DCreate8(D3D_SDK_VERSION); + ok(!!d3d, "Failed to create a D3D object.\n"); + + device_desc.device_window = window; + device_desc.flags = CREATE_DEVICE_FULLSCREEN; + + adapter_count = IDirect3D8_GetAdapterCount(d3d); + for (adapter_idx = 0; adapter_idx < adapter_count; ++adapter_idx) + { + hr = IDirect3D8_GetAdapterDisplayMode(d3d, adapter_idx, ¤t_mode); + ok(hr == D3D_OK, "Adapter %u: GetAdapterDisplayMode failed, hr %#x.\n", adapter_idx, hr); + for (mode_idx = 0; SUCCEEDED(IDirect3D8_EnumAdapterModes(d3d, adapter_idx, mode_idx, &mode)); + ++mode_idx) + { + if (mode.Format != D3DFMT_X8R8G8B8) + continue; + if (mode.Width < 640 || mode.Height < 480) + continue; + if (mode.Width != current_mode.Width && mode.Height != current_mode.Height) + break; + } + ok(mode.Width != current_mode.Width && mode.Height != current_mode.Height, + "Adapter %u: Failed to find a different mode than %ux%u.\n", adapter_idx, + current_mode.Width, current_mode.Height); + + ok(ClipCursor(NULL), "Adapter %u: ClipCursor failed, error %#x.\n", adapter_idx, + GetLastError()); + get_virtual_rect(&virtual_rect); + ok(GetClipCursor(&clip_rect), "Adapter %u: GetClipCursor failed, error %#x.\n", adapter_idx, + GetLastError()); + ok(EqualRect(&clip_rect, &virtual_rect), "Adapter %u: Expect clip rect %s, got %s.\n", + adapter_idx, wine_dbgstr_rect(&virtual_rect), wine_dbgstr_rect(&clip_rect)); + + device_desc.adapter_ordinal = adapter_idx; + device_desc.width = mode.Width; + device_desc.height = mode.Height; + if (!(device = create_device(d3d, window, &device_desc))) + { + skip("Adapter %u: Failed to create a D3D device.\n", adapter_idx); + break; + } + flush_events(); + get_virtual_rect(&virtual_rect); + ok(GetClipCursor(&clip_rect), "Adapter %u: GetClipCursor failed, error %#x.\n", adapter_idx, + GetLastError()); + ok(EqualRect(&clip_rect, &virtual_rect), "Adapter %u: Expect clip rect %s, got %s.\n", + adapter_idx, wine_dbgstr_rect(&virtual_rect), wine_dbgstr_rect(&clip_rect)); + + IDirect3DDevice8_Release(device); + flush_events(); + get_virtual_rect(&virtual_rect); + ok(GetClipCursor(&clip_rect), "Adapter %u: GetClipCursor failed, error %#x.\n", adapter_idx, + GetLastError()); + ok(EqualRect(&clip_rect, &virtual_rect), "Adapter %u: Expect clip rect %s, got %s.\n", + adapter_idx, wine_dbgstr_rect(&virtual_rect), wine_dbgstr_rect(&clip_rect)); + } + + IDirect3D8_Release(d3d); + DestroyWindow(window); +} + START_TEST(device) { HMODULE d3d8_handle = GetModuleHandleA("d3d8.dll"); @@ -10098,6 +10286,7 @@ test_get_display_mode(); test_multi_adapter(); test_creation_parameters(); + test_cursor_clipping(); UnregisterClassA("d3d8_test_wc", GetModuleHandleA(NULL)); } diff -Nru wine-development-5.5/dlls/d3d8/tests/visual.c wine-development-5.6/dlls/d3d8/tests/visual.c --- wine-development-5.5/dlls/d3d8/tests/visual.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d8/tests/visual.c 2020-04-10 18:54:32.000000000 +0000 @@ -51,16 +51,19 @@ 0, 0, rect.right - rect.left, rect.bottom - rect.top, 0, 0, 0, 0); } +static BOOL compare_uint(unsigned int x, unsigned int y, unsigned int max_diff) +{ + unsigned int diff = x > y ? x - y : y - x; + + return diff <= max_diff; +} + static BOOL color_match(D3DCOLOR c1, D3DCOLOR c2, BYTE max_diff) { - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - return TRUE; + return compare_uint(c1 & 0xff, c2 & 0xff, max_diff) + && compare_uint((c1 >> 8) & 0xff, (c2 >> 8) & 0xff, max_diff) + && compare_uint((c1 >> 16) & 0xff, (c2 >> 16) & 0xff, max_diff) + && compare_uint((c1 >> 24) & 0xff, (c2 >> 24) & 0xff, max_diff); } static BOOL compare_float(float f, float g, unsigned int ulps) diff -Nru wine-development-5.5/dlls/d3d8/texture.c wine-development-5.6/dlls/d3d8/texture.c --- wine-development-5.5/dlls/d3d8/texture.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d8/texture.c 2020-04-10 18:54:32.000000000 +0000 @@ -255,7 +255,7 @@ desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage, wined3d_desc.bind_flags); desc->Pool = d3dpool_from_wined3daccess(wined3d_desc.access, wined3d_desc.usage); desc->Size = wined3d_desc.size; - desc->MultiSampleType = wined3d_desc.multisample_type; + desc->MultiSampleType = d3dmultisample_type_from_wined3d(wined3d_desc.multisample_type); desc->Width = wined3d_desc.width; desc->Height = wined3d_desc.height; } @@ -602,7 +602,7 @@ desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage, wined3d_desc.bind_flags); desc->Pool = d3dpool_from_wined3daccess(wined3d_desc.access, wined3d_desc.usage); desc->Size = wined3d_desc.size; - desc->MultiSampleType = wined3d_desc.multisample_type; + desc->MultiSampleType = d3dmultisample_type_from_wined3d(wined3d_desc.multisample_type); desc->Width = wined3d_desc.width; desc->Height = wined3d_desc.height; } diff -Nru wine-development-5.5/dlls/d3d9/d3d9_private.h wine-development-5.6/dlls/d3d9/d3d9_private.h --- wine-development-5.5/dlls/d3d9/d3d9_private.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d9/d3d9_private.h 2020-04-10 18:54:32.000000000 +0000 @@ -336,6 +336,16 @@ } } +static inline D3DMULTISAMPLE_TYPE d3dmultisample_type_from_wined3d(enum wined3d_multisample_type type) +{ + return (D3DMULTISAMPLE_TYPE)type; +} + +static inline D3DSCANLINEORDERING d3dscanlineordering_from_wined3d(enum wined3d_scanline_ordering ordering) +{ + return (D3DSCANLINEORDERING)ordering; +} + static inline unsigned int map_access_from_usage(unsigned int usage) { if (usage & D3DUSAGE_WRITEONLY) @@ -384,4 +394,19 @@ return usage & WINED3DUSAGE_MASK; } +static inline enum wined3d_multisample_type wined3d_multisample_type_from_d3d(D3DMULTISAMPLE_TYPE type) +{ + return (enum wined3d_multisample_type)type; +} + +static inline enum wined3d_device_type wined3d_device_type_from_d3d(D3DDEVTYPE type) +{ + return (enum wined3d_device_type)type; +} + +static inline enum wined3d_scanline_ordering wined3d_scanline_ordering_from_d3d(D3DSCANLINEORDERING ordering) +{ + return (enum wined3d_scanline_ordering)ordering; +} + #endif /* __WINE_D3D9_PRIVATE_H */ diff -Nru wine-development-5.5/dlls/d3d9/device.c wine-development-5.6/dlls/d3d9/device.c --- wine-development-5.5/dlls/d3d9/device.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d9/device.c 2020-04-10 18:54:32.000000000 +0000 @@ -44,7 +44,8 @@ BYTE *c = (BYTE *)&format; /* Don't translate FOURCC formats */ - if (isprint(c[0]) && isprint(c[1]) && isprint(c[2]) && isprint(c[3])) return format; + if (isprint(c[0]) && isprint(c[1]) && isprint(c[2]) && isprint(c[3])) + return (D3DFORMAT)format; switch(format) { @@ -108,7 +109,8 @@ BYTE *c = (BYTE *)&format; /* Don't translate FOURCC formats */ - if (isprint(c[0]) && isprint(c[1]) && isprint(c[2]) && isprint(c[3])) return format; + if (isprint(c[0]) && isprint(c[1]) && isprint(c[2]) && isprint(c[3])) + return (enum wined3d_format_id)format; switch(format) { @@ -244,7 +246,7 @@ present_parameters->BackBufferHeight = swapchain_desc->backbuffer_height; present_parameters->BackBufferFormat = d3dformat_from_wined3dformat(swapchain_desc->backbuffer_format); present_parameters->BackBufferCount = swapchain_desc->backbuffer_count; - present_parameters->MultiSampleType = swapchain_desc->multisample_type; + present_parameters->MultiSampleType = d3dmultisample_type_from_wined3d(swapchain_desc->multisample_type); present_parameters->MultiSampleQuality = swapchain_desc->multisample_quality; present_parameters->SwapEffect = d3dswapeffect_from_wined3dswapeffect(swapchain_desc->swap_effect); present_parameters->hDeviceWindow = swapchain_desc->device_window; @@ -335,7 +337,7 @@ swapchain_desc->backbuffer_format = wined3dformat_from_d3dformat(present_parameters->BackBufferFormat); swapchain_desc->backbuffer_count = max(1, present_parameters->BackBufferCount); swapchain_desc->backbuffer_bind_flags = WINED3D_BIND_RENDER_TARGET; - swapchain_desc->multisample_type = present_parameters->MultiSampleType; + swapchain_desc->multisample_type = wined3d_multisample_type_from_d3d(present_parameters->MultiSampleType); swapchain_desc->multisample_quality = present_parameters->MultiSampleQuality; swapchain_desc->swap_effect = wined3dswapeffect_from_d3dswapeffect(present_parameters->SwapEffect); swapchain_desc->device_window = present_parameters->hDeviceWindow; @@ -551,6 +553,31 @@ } } +static enum wined3d_texture_filter_type wined3d_texture_filter_type_from_d3d(D3DTEXTUREFILTERTYPE type) +{ + return (enum wined3d_texture_filter_type)type; +} + +static enum wined3d_transform_state wined3d_transform_state_from_d3d(D3DTRANSFORMSTATETYPE type) +{ + return (enum wined3d_transform_state)type; +} + +static enum wined3d_render_state wined3d_render_state_from_d3d(D3DRENDERSTATETYPE type) +{ + return (enum wined3d_render_state)type; +} + +static enum wined3d_sampler_state wined3d_sampler_state_from_d3d(D3DSAMPLERSTATETYPE type) +{ + return (enum wined3d_sampler_state)type; +} + +static enum wined3d_primitive_type wined3d_primitive_type_from_d3d(D3DPRIMITIVETYPE type) +{ + return (enum wined3d_primitive_type)type; +} + static void device_reset_viewport_state(struct d3d9_device *device) { struct wined3d_viewport vp; @@ -787,6 +814,8 @@ { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); struct d3d9_surface *bitmap_impl = unsafe_impl_from_IDirect3DSurface9(bitmap); + D3DSURFACE_DESC surface_desc; + D3DDISPLAYMODE mode; HRESULT hr; TRACE("iface %p, hotspot_x %u, hotspot_y %u, bitmap %p.\n", @@ -798,6 +827,26 @@ return D3DERR_INVALIDCALL; } + if (FAILED(hr = IDirect3DSurface9_GetDesc(bitmap, &surface_desc))) + { + WARN("Failed to get surface description, hr %#x.\n", hr); + return hr; + } + + if (FAILED(hr = IDirect3D9_GetAdapterDisplayMode(&device->d3d_parent->IDirect3D9Ex_iface, + device->adapter_ordinal, &mode))) + { + WARN("Failed to get device display mode, hr %#x.\n", hr); + return hr; + } + + if (surface_desc.Width > mode.Width || surface_desc.Height > mode.Height) + { + WARN("Surface dimension %ux%u exceeds display mode %ux%u.\n", surface_desc.Width, + surface_desc.Height, mode.Width, mode.Height); + return D3DERR_INVALIDCALL; + } + wined3d_mutex_lock(); hr = wined3d_device_set_cursor_properties(device->wined3d_device, hotspot_x, hotspot_y, bitmap_impl->wined3d_texture, bitmap_impl->sub_resource_idx); @@ -1008,7 +1057,7 @@ wined3d_mode.height = mode->Height; wined3d_mode.refresh_rate = mode->RefreshRate; wined3d_mode.format_id = wined3dformat_from_d3dformat(mode->Format); - wined3d_mode.scanline_ordering = mode->ScanLineOrdering; + wined3d_mode.scanline_ordering = wined3d_scanline_ordering_from_d3d(mode->ScanLineOrdering); } if (!wined3d_swapchain_desc_from_present_parameters(&swapchain_desc, present_parameters, extended)) @@ -1521,8 +1570,8 @@ IDirect3DSurface9_AddRef(*surface); if (user_mem) - wined3d_texture_update_desc(texture, width, height, - desc.format, multisample_type, multisample_quality, user_mem, 0); + wined3d_texture_update_desc(texture, width, height, desc.format, + multisample_type, multisample_quality, user_mem, 0); wined3d_texture_decref(texture); @@ -1574,8 +1623,9 @@ if (lockable) access |= WINED3D_RESOURCE_ACCESS_MAP_R | WINED3D_RESOURCE_ACCESS_MAP_W; - return d3d9_device_create_surface(device, 0, wined3dformat_from_d3dformat(format), multisample_type, - multisample_quality, 0, WINED3D_BIND_RENDER_TARGET, access, width, height, NULL, surface); + return d3d9_device_create_surface(device, 0, wined3dformat_from_d3dformat(format), + wined3d_multisample_type_from_d3d(multisample_type), multisample_quality, 0, + WINED3D_BIND_RENDER_TARGET, access, width, height, NULL, surface); } static HRESULT WINAPI d3d9_device_CreateDepthStencilSurface(IDirect3DDevice9Ex *iface, UINT width, UINT height, @@ -1606,8 +1656,8 @@ flags |= WINED3D_TEXTURE_CREATE_DISCARD; return d3d9_device_create_surface(device, flags, wined3dformat_from_d3dformat(format), - multisample_type, multisample_quality, 0, WINED3D_BIND_DEPTH_STENCIL, - WINED3D_RESOURCE_ACCESS_GPU, width, height, NULL, surface); + wined3d_multisample_type_from_d3d(multisample_type), multisample_quality, 0, + WINED3D_BIND_DEPTH_STENCIL, WINED3D_RESOURCE_ACCESS_GPU, width, height, NULL, surface); } @@ -1806,8 +1856,8 @@ } } - hr = wined3d_texture_blt(dst->wined3d_texture, dst->sub_resource_idx, dst_rect, - src->wined3d_texture, src->sub_resource_idx, src_rect, 0, NULL, filter); + hr = wined3d_texture_blt(dst->wined3d_texture, dst->sub_resource_idx, dst_rect, src->wined3d_texture, + src->sub_resource_idx, src_rect, 0, NULL, wined3d_texture_filter_type_from_d3d(filter)); if (hr == WINEDDERR_INVALIDRECT) hr = D3DERR_INVALIDCALL; if (SUCCEEDED(hr) && dst->texture) @@ -2136,7 +2186,8 @@ /* Note: D3DMATRIX is compatible with struct wined3d_matrix. */ wined3d_mutex_lock(); - wined3d_stateblock_set_transform(device->update_state, state, (const struct wined3d_matrix *)matrix); + wined3d_stateblock_set_transform(device->update_state, + wined3d_transform_state_from_d3d(state), (const struct wined3d_matrix *)matrix); wined3d_mutex_unlock(); return D3D_OK; @@ -2166,7 +2217,8 @@ /* Note: D3DMATRIX is compatible with struct wined3d_matrix. */ wined3d_mutex_lock(); - wined3d_stateblock_multiply_transform(device->state, state, (const struct wined3d_matrix *)matrix); + wined3d_stateblock_multiply_transform(device->state, + wined3d_transform_state_from_d3d(state), (const struct wined3d_matrix *)matrix); wined3d_mutex_unlock(); return D3D_OK; @@ -2369,7 +2421,7 @@ TRACE("iface %p, state %#x, value %#x.\n", iface, state, value); wined3d_mutex_lock(); - wined3d_stateblock_set_render_state(device->update_state, state, value); + wined3d_stateblock_set_render_state(device->update_state, wined3d_render_state_from_d3d(state), value); if (state == D3DRS_POINTSIZE && value == D3D9_RESZ_CODE) resolve_depth_buffer(device); wined3d_mutex_unlock(); @@ -2715,7 +2767,7 @@ sampler -= D3DVERTEXTEXTURESAMPLER0 - WINED3D_VERTEX_SAMPLER_OFFSET; wined3d_mutex_lock(); - wined3d_stateblock_set_sampler_state(device->update_state, sampler, state, value); + wined3d_stateblock_set_sampler_state(device->update_state, sampler, wined3d_sampler_state_from_d3d(state), value); wined3d_mutex_unlock(); return D3D_OK; @@ -2965,7 +3017,7 @@ vertex_count = vertex_count_from_primitive_count(primitive_type, primitive_count); d3d9_device_upload_sysmem_vertex_buffers(device, 0, start_vertex, vertex_count); d3d9_generate_auto_mipmaps(device); - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type, 0); + wined3d_device_set_primitive_type(device->wined3d_device, wined3d_primitive_type_from_d3d(primitive_type), 0); hr = wined3d_device_draw_primitive(device->wined3d_device, start_vertex, vertex_count); if (SUCCEEDED(hr)) d3d9_rts_flag_auto_gen_mipmap(device); @@ -2999,7 +3051,7 @@ d3d9_device_upload_sysmem_index_buffer(device, start_idx, index_count); d3d9_generate_auto_mipmaps(device); wined3d_stateblock_set_base_vertex_index(device->state, base_vertex_idx); - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type, 0); + wined3d_device_set_primitive_type(device->wined3d_device, wined3d_primitive_type_from_d3d(primitive_type), 0); wined3d_device_apply_stateblock(device->wined3d_device, device->state); hr = wined3d_device_draw_indexed_primitive(device->wined3d_device, start_idx, index_count); if (SUCCEEDED(hr)) @@ -3108,7 +3160,7 @@ goto done; d3d9_generate_auto_mipmaps(device); - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type, 0); + wined3d_device_set_primitive_type(device->wined3d_device, wined3d_primitive_type_from_d3d(primitive_type), 0); wined3d_device_apply_stateblock(device->wined3d_device, device->state); hr = wined3d_device_draw_primitive(device->wined3d_device, vb_pos / stride, vtx_count); wined3d_stateblock_set_stream_source(device->state, 0, NULL, 0, 0); @@ -3252,7 +3304,7 @@ wined3d_stateblock_set_base_vertex_index(device->state, vb_pos / vertex_stride - min_vertex_idx); wined3d_device_apply_stateblock(device->wined3d_device, device->state); - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type, 0); + wined3d_device_set_primitive_type(device->wined3d_device, wined3d_primitive_type_from_d3d(primitive_type), 0); hr = wined3d_device_draw_indexed_primitive(device->wined3d_device, ib_pos / idx_fmt_size, idx_count); wined3d_stateblock_set_stream_source(device->state, 0, NULL, 0, 0); @@ -4254,8 +4306,8 @@ access |= WINED3D_RESOURCE_ACCESS_MAP_R | WINED3D_RESOURCE_ACCESS_MAP_W; return d3d9_device_create_surface(device, 0, wined3dformat_from_d3dformat(format), - multisample_type, multisample_quality, usage & WINED3DUSAGE_MASK, - WINED3D_BIND_RENDER_TARGET, access, width, height, NULL, surface); + wined3d_multisample_type_from_d3d(multisample_type), multisample_quality, + usage & WINED3DUSAGE_MASK, WINED3D_BIND_RENDER_TARGET, access, width, height, NULL, surface); } static HRESULT WINAPI d3d9_device_CreateOffscreenPlainSurfaceEx(IDirect3DDevice9Ex *iface, @@ -4294,8 +4346,8 @@ *surface = NULL; return d3d9_device_create_surface(device, flags, wined3dformat_from_d3dformat(format), - multisample_type, multisample_quality, usage & WINED3DUSAGE_MASK, WINED3D_BIND_DEPTH_STENCIL, - WINED3D_RESOURCE_ACCESS_GPU, width, height, NULL, surface); + wined3d_multisample_type_from_d3d(multisample_type), multisample_quality, usage & WINED3DUSAGE_MASK, + WINED3D_BIND_DEPTH_STENCIL, WINED3D_RESOURCE_ACCESS_GPU, width, height, NULL, surface); } static HRESULT WINAPI DECLSPEC_HOTPATCH d3d9_device_ResetEx(IDirect3DDevice9Ex *iface, @@ -4347,7 +4399,7 @@ mode->Height = wined3d_mode.height; mode->RefreshRate = wined3d_mode.refresh_rate; mode->Format = d3dformat_from_wined3dformat(wined3d_mode.format_id); - mode->ScanLineOrdering = wined3d_mode.scanline_ordering; + mode->ScanLineOrdering = d3dscanlineordering_from_wined3d(wined3d_mode.scanline_ordering); } return hr; @@ -4658,7 +4710,7 @@ wined3d_mutex_lock(); wined3d_adapter = wined3d_output_get_adapter(parent->wined3d_outputs[output_idx]); - if (FAILED(hr = wined3d_device_create(wined3d, wined3d_adapter, device_type, + if (FAILED(hr = wined3d_device_create(wined3d, wined3d_adapter, wined3d_device_type_from_d3d(device_type), focus_window, flags, 4, feature_levels, ARRAY_SIZE(feature_levels), &device->device_parent, &device->wined3d_device))) { @@ -4667,7 +4719,7 @@ return hr; } - wined3d_get_device_caps(wined3d_adapter, device_type, &wined3d_caps); + wined3d_get_device_caps(wined3d_adapter, wined3d_device_type_from_d3d(device_type), &wined3d_caps); d3d9_caps_from_wined3dcaps(parent, adapter, &caps, &wined3d_caps); device->max_user_clip_planes = caps.MaxUserClipPlanes; device->vs_uniform_count = caps.MaxVertexShaderConst; diff -Nru wine-development-5.5/dlls/d3d9/directx.c wine-development-5.6/dlls/d3d9/directx.c --- wine-development-5.5/dlls/d3d9/directx.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d9/directx.c 2020-04-10 18:54:32.000000000 +0000 @@ -268,8 +268,8 @@ return WINED3DERR_NOTAVAILABLE; wined3d_mutex_lock(); - hr = wined3d_check_device_type(d3d9->wined3d, d3d9->wined3d_outputs[output_idx], device_type, - wined3dformat_from_d3dformat(display_format), + hr = wined3d_check_device_type(d3d9->wined3d, d3d9->wined3d_outputs[output_idx], + wined3d_device_type_from_d3d(device_type), wined3dformat_from_d3dformat(display_format), wined3dformat_from_d3dformat(backbuffer_format), windowed); wined3d_mutex_unlock(); @@ -334,13 +334,13 @@ { DWORD levels; - hr = wined3d_check_device_multisample_type(wined3d_adapter, device_type, + hr = wined3d_check_device_multisample_type(wined3d_adapter, wined3d_device_type_from_d3d(device_type), WINED3DFMT_D24_UNORM_S8_UINT, FALSE, WINED3D_MULTISAMPLE_NON_MASKABLE, &levels); if (SUCCEEDED(hr) && !levels) hr = D3DERR_NOTAVAILABLE; } else - hr = wined3d_check_device_format(d3d9->wined3d, wined3d_adapter, device_type, + hr = wined3d_check_device_format(d3d9->wined3d, wined3d_adapter, wined3d_device_type_from_d3d(device_type), wined3dformat_from_d3dformat(adapter_format), usage, bind_flags, wined3d_rtype, wined3dformat_from_d3dformat(format)); wined3d_mutex_unlock(); @@ -368,8 +368,9 @@ wined3d_mutex_lock(); wined3d_adapter = wined3d_output_get_adapter(d3d9->wined3d_outputs[output_idx]); - hr = wined3d_check_device_multisample_type(wined3d_adapter, device_type, - wined3dformat_from_d3dformat(format), windowed, multisample_type, levels); + hr = wined3d_check_device_multisample_type(wined3d_adapter, + wined3d_device_type_from_d3d(device_type), wined3dformat_from_d3dformat(format), + windowed, wined3d_multisample_type_from_d3d(multisample_type), levels); wined3d_mutex_unlock(); if (hr == WINED3DERR_NOTAVAILABLE && levels) *levels = 1; @@ -394,9 +395,9 @@ wined3d_mutex_lock(); wined3d_adapter = wined3d_output_get_adapter(d3d9->wined3d_outputs[output_idx]); - hr = wined3d_check_depth_stencil_match(wined3d_adapter, device_type, - wined3dformat_from_d3dformat(adapter_format), wined3dformat_from_d3dformat(rt_format), - wined3dformat_from_d3dformat(ds_format)); + hr = wined3d_check_depth_stencil_match(wined3d_adapter, + wined3d_device_type_from_d3d(device_type), wined3dformat_from_d3dformat(adapter_format), + wined3dformat_from_d3dformat(rt_format), wined3dformat_from_d3dformat(ds_format)); wined3d_mutex_unlock(); return hr; @@ -418,7 +419,7 @@ wined3d_mutex_lock(); hr = wined3d_check_device_format_conversion(d3d9->wined3d_outputs[output_idx], - device_type, wined3dformat_from_d3dformat(src_format), + wined3d_device_type_from_d3d(device_type), wined3dformat_from_d3dformat(src_format), wined3dformat_from_d3dformat(dst_format)); wined3d_mutex_unlock(); @@ -446,7 +447,7 @@ wined3d_mutex_lock(); wined3d_adapter = wined3d_output_get_adapter(d3d9->wined3d_outputs[output_idx]); - hr = wined3d_get_device_caps(wined3d_adapter, device_type, &wined3d_caps); + hr = wined3d_get_device_caps(wined3d_adapter, wined3d_device_type_from_d3d(device_type), &wined3d_caps); wined3d_mutex_unlock(); d3d9_caps_from_wined3dcaps(d3d9, adapter, caps, &wined3d_caps); @@ -525,7 +526,7 @@ wined3d_mutex_lock(); count = wined3d_output_get_mode_count(d3d9->wined3d_outputs[output_idx], - wined3dformat_from_d3dformat(filter->Format), filter->ScanLineOrdering); + wined3dformat_from_d3dformat(filter->Format), wined3d_scanline_ordering_from_d3d(filter->ScanLineOrdering)); wined3d_mutex_unlock(); return count; @@ -550,9 +551,8 @@ return D3DERR_INVALIDCALL; wined3d_mutex_lock(); - hr = wined3d_output_get_mode(d3d9->wined3d_outputs[output_idx], - wined3dformat_from_d3dformat(filter->Format), filter->ScanLineOrdering, mode_idx, - &wined3d_mode); + hr = wined3d_output_get_mode(d3d9->wined3d_outputs[output_idx], wined3dformat_from_d3dformat(filter->Format), + wined3d_scanline_ordering_from_d3d(filter->ScanLineOrdering), mode_idx, &wined3d_mode); wined3d_mutex_unlock(); if (SUCCEEDED(hr)) @@ -561,7 +561,7 @@ mode->Height = wined3d_mode.height; mode->RefreshRate = wined3d_mode.refresh_rate; mode->Format = d3dformat_from_wined3dformat(wined3d_mode.format_id); - mode->ScanLineOrdering = wined3d_mode.scanline_ordering; + mode->ScanLineOrdering = d3dscanlineordering_from_wined3d(wined3d_mode.scanline_ordering); } return hr; @@ -596,7 +596,7 @@ mode->Height = wined3d_mode.height; mode->RefreshRate = wined3d_mode.refresh_rate; mode->Format = d3dformat_from_wined3dformat(wined3d_mode.format_id); - mode->ScanLineOrdering = wined3d_mode.scanline_ordering; + mode->ScanLineOrdering = d3dscanlineordering_from_wined3d(wined3d_mode.scanline_ordering); } return hr; diff -Nru wine-development-5.5/dlls/d3d9/query.c wine-development-5.6/dlls/d3d9/query.c --- wine-development-5.5/dlls/d3d9/query.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d9/query.c 2020-04-10 18:54:32.000000000 +0000 @@ -24,6 +24,16 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d9); +static D3DQUERYTYPE d3dquerytype_from_wined3d(enum wined3d_query_type type) +{ + return (D3DQUERYTYPE)type; +} + +static enum wined3d_query_type wined3d_query_type_from_d3d(D3DQUERYTYPE type) +{ + return (enum wined3d_query_type)type; +} + static inline struct d3d9_query *impl_from_IDirect3DQuery9(IDirect3DQuery9 *iface) { return CONTAINING_RECORD(iface, struct d3d9_query, IDirect3DQuery9_iface); @@ -98,7 +108,7 @@ TRACE("iface %p.\n", iface); wined3d_mutex_lock(); - type = wined3d_query_get_type(query->wined3d_query); + type = d3dquerytype_from_wined3d(wined3d_query_get_type(query->wined3d_query)); wined3d_mutex_unlock(); return type; @@ -198,7 +208,7 @@ query->refcount = 1; wined3d_mutex_lock(); - if (FAILED(hr = wined3d_query_create(device->wined3d_device, type, + if (FAILED(hr = wined3d_query_create(device->wined3d_device, wined3d_query_type_from_d3d(type), query, &d3d9_null_wined3d_parent_ops, &query->wined3d_query))) { wined3d_mutex_unlock(); diff -Nru wine-development-5.5/dlls/d3d9/surface.c wine-development-5.6/dlls/d3d9/surface.c --- wine-development-5.5/dlls/d3d9/surface.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d9/surface.c 2020-04-10 18:54:32.000000000 +0000 @@ -224,7 +224,7 @@ desc->Type = D3DRTYPE_SURFACE; desc->Usage = d3dusage_from_wined3dusage(wined3d_desc.usage, wined3d_desc.bind_flags); desc->Pool = d3dpool_from_wined3daccess(wined3d_desc.access, wined3d_desc.usage); - desc->MultiSampleType = wined3d_desc.multisample_type; + desc->MultiSampleType = d3dmultisample_type_from_wined3d(wined3d_desc.multisample_type); desc->MultiSampleQuality = wined3d_desc.multisample_quality; desc->Width = wined3d_desc.width; desc->Height = wined3d_desc.height; diff -Nru wine-development-5.5/dlls/d3d9/swapchain.c wine-development-5.6/dlls/d3d9/swapchain.c --- wine-development-5.5/dlls/d3d9/swapchain.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d9/swapchain.c 2020-04-10 18:54:32.000000000 +0000 @@ -320,7 +320,7 @@ mode->Height = wined3d_mode.height; mode->RefreshRate = wined3d_mode.refresh_rate; mode->Format = d3dformat_from_wined3dformat(wined3d_mode.format_id); - mode->ScanLineOrdering = wined3d_mode.scanline_ordering; + mode->ScanLineOrdering = d3dscanlineordering_from_wined3d(wined3d_mode.scanline_ordering); } return hr; diff -Nru wine-development-5.5/dlls/d3d9/tests/d3d9ex.c wine-development-5.6/dlls/d3d9/tests/d3d9ex.c --- wine-development-5.5/dlls/d3d9/tests/d3d9ex.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d9/tests/d3d9ex.c 2020-04-10 18:54:32.000000000 +0000 @@ -48,18 +48,19 @@ return !strcmp(identifier->Driver, "d3d10warp.dll"); } -static BOOL color_match(D3DCOLOR c1, D3DCOLOR c2, BYTE max_diff) +static BOOL compare_uint(unsigned int x, unsigned int y, unsigned int max_diff) { - unsigned int i; + unsigned int diff = x > y ? x - y : y - x; - for (i = 0; i < 4; ++i) - { - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - c1 >>= 8; - c2 >>= 8; - } - return TRUE; + return diff <= max_diff; +} + +static BOOL color_match(D3DCOLOR c1, D3DCOLOR c2, BYTE max_diff) +{ + return compare_uint(c1 & 0xff, c2 & 0xff, max_diff) + && compare_uint((c1 >> 8) & 0xff, (c2 >> 8) & 0xff, max_diff) + && compare_uint((c1 >> 16) & 0xff, (c2 >> 16) & 0xff, max_diff) + && compare_uint((c1 >> 24) & 0xff, (c2 >> 24) & 0xff, max_diff); } static DWORD get_pixel_color(IDirect3DDevice9Ex *device, unsigned int x, unsigned int y) @@ -2630,6 +2631,7 @@ { struct wndproc_thread_param thread_params; struct device_desc device_desc; + static WINDOWPOS windowpos; IDirect3DDevice9Ex *device; WNDCLASSA wc = {0}; HANDLE thread; @@ -2645,7 +2647,6 @@ LONG change_ret, device_style; BOOL ret; IDirect3D9Ex *d3d9ex; - WINDOWPOS windowpos; static const struct message create_messages[] = { @@ -2746,7 +2747,7 @@ /* WM_SIZE(SIZE_MAXIMIZED) is unreliable on native. */ {0, 0, FALSE, 0}, }; - struct message mode_change_messages[] = + static const struct message mode_change_messages[] = { {WM_WINDOWPOSCHANGING, DEVICE_WINDOW, FALSE, 0}, {WM_WINDOWPOSCHANGED, DEVICE_WINDOW, FALSE, 0}, @@ -2759,7 +2760,7 @@ * ShowWindow does not send such a message because the window is already visible. */ {0, 0, FALSE, 0}, }; - struct message mode_change_messages_hidden[] = + static const struct message mode_change_messages_hidden[] = { {WM_WINDOWPOSCHANGING, DEVICE_WINDOW, FALSE, 0}, {WM_WINDOWPOSCHANGED, DEVICE_WINDOW, FALSE, 0}, @@ -2776,7 +2777,7 @@ {WM_DISPLAYCHANGE, FOCUS_WINDOW, FALSE, 0}, {0, 0, FALSE, 0}, }; - struct + static const struct { DWORD create_flags; const struct message *focus_loss_messages; @@ -2858,6 +2859,9 @@ return; } + filter_messages = NULL; + expect_messages = NULL; + wc.lpfnWndProc = test_proc; wc.lpszClassName = "d3d9_test_wndproc_wc"; ok(RegisterClassA(&wc), "Failed to register window class.\n"); @@ -3188,6 +3192,7 @@ flush_events(); ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it, i=%u.\n", expect_messages->message, expect_messages->window, i); + expect_messages = NULL; /* World of Warplanes hides the window by removing WS_VISIBLE and expects Reset() to show it again. */ device_style = GetWindowLongA(device_window, GWL_STYLE); @@ -3207,6 +3212,7 @@ flush_events(); ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it, i=%u.\n", expect_messages->message, expect_messages->window, i); + expect_messages = NULL; if (!(tests[i].create_flags & CREATE_DEVICE_NOWINDOWCHANGES)) { @@ -3243,6 +3249,7 @@ done: filter_messages = NULL; + expect_messages = NULL; DestroyWindow(device_window); DestroyWindow(focus_window); SetEvent(thread_params.test_finished); @@ -3269,6 +3276,9 @@ DWORD res, tid; HWND tmp; + filter_messages = NULL; + expect_messages = NULL; + wc.lpfnWndProc = test_proc; wc.lpszClassName = "d3d9_test_wndproc_wc"; ok(RegisterClassA(&wc), "Failed to register window class.\n"); diff -Nru wine-development-5.5/dlls/d3d9/tests/device.c wine-development-5.6/dlls/d3d9/tests/device.c --- wine-development-5.5/dlls/d3d9/tests/device.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d9/tests/device.c 2020-04-10 18:54:32.000000000 +0000 @@ -119,6 +119,14 @@ return equal; } +static void get_virtual_rect(RECT *rect) +{ + rect->left = GetSystemMetrics(SM_XVIRTUALSCREEN); + rect->top = GetSystemMetrics(SM_YVIRTUALSCREEN); + rect->right = rect->left + GetSystemMetrics(SM_CXVIRTUALSCREEN); + rect->bottom = rect->top + GetSystemMetrics(SM_CYVIRTUALSCREEN); +} + static HWND create_window(void) { RECT r = {0, 0, 640, 480}; @@ -1742,16 +1750,30 @@ static void test_cursor(void) { + unsigned int adapter_idx, adapter_count, test_idx; IDirect3DSurface9 *cursor = NULL; + struct device_desc device_desc; + unsigned int width, height; IDirect3DDevice9 *device; + HRESULT expected_hr, hr; + D3DDISPLAYMODE mode; CURSORINFO info; IDirect3D9 *d3d; ULONG refcount; HCURSOR cur; HWND window; - HRESULT hr; BOOL ret; + static const DWORD device_flags[] = {0, CREATE_DEVICE_FULLSCREEN}; + static const SIZE cursor_sizes[] = + { + {1, 1}, + {2, 4}, + {3, 2}, + {2, 3}, + {6, 6}, + }; + window = create_window(); ok(!!window, "Failed to create a window.\n"); @@ -1812,8 +1834,90 @@ ok(info.flags & (CURSOR_SHOWING|CURSOR_SUPPRESSED), "The gdi cursor is hidden (%08x)\n", info.flags); ok(info.hCursor != cur, "The cursor handle is %p\n", info.hCursor); + /* Cursor dimensions must all be powers of two */ + for (test_idx = 0; test_idx < ARRAY_SIZE(cursor_sizes); ++test_idx) + { + width = cursor_sizes[test_idx].cx; + height = cursor_sizes[test_idx].cy; + hr = IDirect3DDevice9_CreateOffscreenPlainSurface(device, width, height, D3DFMT_A8R8G8B8, + D3DPOOL_DEFAULT, &cursor, NULL); + ok(hr == D3D_OK, "Test %u: CreateOffscreenPlainSurface failed, hr %#x.\n", test_idx, hr); + hr = IDirect3DDevice9_SetCursorProperties(device, 0, 0, cursor); + if (width && !(width & (width - 1)) && height && !(height & (height - 1))) + expected_hr = D3D_OK; + else + expected_hr = D3DERR_INVALIDCALL; + ok(hr == expected_hr, "Test %u: Expect SetCursorProperties return %#x, got %#x.\n", + test_idx, expected_hr, hr); + IDirect3DSurface9_Release(cursor); + } + refcount = IDirect3DDevice9_Release(device); ok(!refcount, "Device has %u references left.\n", refcount); + + /* Cursor dimensions must not exceed adapter display mode */ + device_desc.device_window = window; + device_desc.width = 640; + device_desc.height = 480; + + adapter_count = IDirect3D9_GetAdapterCount(d3d); + for (adapter_idx = 0; adapter_idx < adapter_count; ++adapter_idx) + { + for (test_idx = 0; test_idx < ARRAY_SIZE(device_flags); ++test_idx) + { + device_desc.adapter_ordinal = adapter_idx; + device_desc.flags = device_flags[test_idx]; + if (!(device = create_device(d3d, window, &device_desc))) + { + skip("Adapter %u test %u: Failed to create a D3D device.\n", adapter_idx, test_idx); + break; + } + + hr = IDirect3D9_GetAdapterDisplayMode(d3d, adapter_idx, &mode); + ok(hr == D3D_OK, "Adapter %u test %u: GetAdapterDisplayMode failed, hr %#x.\n", + adapter_idx, test_idx, hr); + + /* Find the largest width and height that are powers of two and less than the display mode */ + width = 1; + height = 1; + while (width * 2 <= mode.Width) + width *= 2; + while (height * 2 <= mode.Height) + height *= 2; + + hr = IDirect3DDevice9_CreateOffscreenPlainSurface(device, width, height, + D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &cursor, NULL); + ok(hr == D3D_OK, "Adapter %u test %u: CreateOffscreenPlainSurface failed, hr %#x.\n", + adapter_idx, test_idx, hr); + hr = IDirect3DDevice9_SetCursorProperties(device, 0, 0, cursor); + ok(hr == D3D_OK, "Adapter %u test %u: SetCursorProperties failed, hr %#x.\n", + adapter_idx, test_idx, hr); + IDirect3DSurface9_Release(cursor); + + hr = IDirect3DDevice9_CreateOffscreenPlainSurface(device, width * 2, height, + D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &cursor, NULL); + ok(hr == D3D_OK, "Adapter %u test %u: CreateOffscreenPlainSurface failed, hr %#x.\n", + adapter_idx, test_idx, hr); + hr = IDirect3DDevice9_SetCursorProperties(device, 0, 0, cursor); + ok(hr == D3DERR_INVALIDCALL, + "Adapter %u test %u: Expect SetCursorProperties return %#x, got %#x.\n", + adapter_idx, test_idx, D3DERR_INVALIDCALL, hr); + IDirect3DSurface9_Release(cursor); + + hr = IDirect3DDevice9_CreateOffscreenPlainSurface(device, width, height * 2, + D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &cursor, NULL); + ok(hr == D3D_OK, "Adapter %u test %u: CreateOffscreenPlainSurface failed, hr %#x.\n", + adapter_idx, test_idx, hr); + hr = IDirect3DDevice9_SetCursorProperties(device, 0, 0, cursor); + ok(hr == D3DERR_INVALIDCALL, + "Adapter %u test %u: Expect SetCursorProperties return %#x, got %#x.\n", + adapter_idx, test_idx, D3DERR_INVALIDCALL, hr); + IDirect3DSurface9_Release(cursor); + + refcount = IDirect3DDevice9_Release(device); + ok(!refcount, "Adapter %u: Device has %u references left.\n", adapter_idx, refcount); + } + } cleanup: IDirect3D9_Release(d3d); DestroyWindow(window); @@ -3655,6 +3759,7 @@ { struct wndproc_thread_param thread_params; struct device_desc device_desc; + static WINDOWPOS windowpos; IDirect3DDevice9 *device; WNDCLASSA wc = {0}; IDirect3D9 *d3d9; @@ -3670,7 +3775,6 @@ DEVMODEW devmode; LONG change_ret, device_style; BOOL ret; - WINDOWPOS windowpos; static const struct message create_messages[] = { @@ -3784,7 +3888,7 @@ /* WM_SIZE(SIZE_MAXIMIZED) is unreliable on native. */ {0, 0, FALSE, 0}, }; - struct message mode_change_messages[] = + static const struct message mode_change_messages[] = { {WM_WINDOWPOSCHANGING, DEVICE_WINDOW, FALSE, 0}, {WM_WINDOWPOSCHANGED, DEVICE_WINDOW, FALSE, 0}, @@ -3797,7 +3901,7 @@ * ShowWindow does not send such a message because the window is already visible. */ {0, 0, FALSE, 0}, }; - struct message mode_change_messages_hidden[] = + static const struct message mode_change_messages_hidden[] = { {WM_WINDOWPOSCHANGING, DEVICE_WINDOW, FALSE, 0}, {WM_WINDOWPOSCHANGED, DEVICE_WINDOW, FALSE, 0}, @@ -3814,7 +3918,7 @@ {WM_DISPLAYCHANGE, FOCUS_WINDOW, FALSE, 0}, {0, 0, FALSE, 0}, }; - struct + static const struct { DWORD create_flags; const struct message *focus_loss_messages, *reactivate_messages; @@ -3893,6 +3997,9 @@ return; } + filter_messages = NULL; + expect_messages = NULL; + wc.lpfnWndProc = test_proc; wc.lpszClassName = "d3d9_test_wndproc_wc"; ok(RegisterClassA(&wc), "Failed to register window class.\n"); @@ -4258,6 +4365,7 @@ flush_events(); ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it, i=%u.\n", expect_messages->message, expect_messages->window, i); + expect_messages = NULL; /* World of Warplanes hides the window by removing WS_VISIBLE and expects Reset() to show it again. */ device_style = GetWindowLongA(device_window, GWL_STYLE); @@ -4277,6 +4385,7 @@ flush_events(); ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it, i=%u.\n", expect_messages->message, expect_messages->window, i); + expect_messages = NULL; if (!(tests[i].create_flags & CREATE_DEVICE_NOWINDOWCHANGES)) { @@ -4314,6 +4423,7 @@ done: filter_messages = NULL; + expect_messages = NULL; DestroyWindow(device_window); DestroyWindow(focus_window); SetEvent(thread_params.test_finished); @@ -4344,6 +4454,9 @@ d3d9 = Direct3DCreate9(D3D_SDK_VERSION); ok(!!d3d9, "Failed to create a D3D object.\n"); + filter_messages = NULL; + expect_messages = NULL; + wc.lpfnWndProc = test_proc; wc.lpszClassName = "d3d9_test_wndproc_wc"; ok(RegisterClassA(&wc), "Failed to register window class.\n"); @@ -4557,6 +4670,7 @@ d3d = Direct3DCreate9(D3D_SDK_VERSION); ok(!!d3d, "Failed to create a D3D object.\n"); + filter_messages = NULL; expect_messages = messages; wc.cbSize = sizeof(wc); @@ -5259,6 +5373,9 @@ HRESULT hr; ULONG ref; + filter_messages = NULL; + expect_messages = NULL; + wc.lpfnWndProc = test_proc; wc.lpszClassName = "d3d9_test_wndproc_wc"; ok(RegisterClassA(&wc), "Failed to register window class.\n"); @@ -13720,6 +13837,78 @@ DestroyWindow(window); } +static void test_cursor_clipping(void) +{ + unsigned int adapter_idx, adapter_count, mode_idx; + D3DDISPLAYMODE mode, current_mode; + struct device_desc device_desc; + RECT virtual_rect, clip_rect; + IDirect3DDevice9 *device; + IDirect3D9 *d3d; + HWND window; + HRESULT hr; + + window = create_window(); + ok(!!window, "Failed to create a window.\n"); + d3d = Direct3DCreate9(D3D_SDK_VERSION); + ok(!!d3d, "Failed to create a D3D object.\n"); + + device_desc.device_window = window; + device_desc.flags = CREATE_DEVICE_FULLSCREEN; + + adapter_count = IDirect3D9_GetAdapterCount(d3d); + for (adapter_idx = 0; adapter_idx < adapter_count; ++adapter_idx) + { + hr = IDirect3D9_GetAdapterDisplayMode(d3d, adapter_idx, ¤t_mode); + ok(hr == D3D_OK, "Adapter %u: GetAdapterDisplayMode failed, hr %#x.\n", adapter_idx, hr); + for (mode_idx = 0; SUCCEEDED(IDirect3D9_EnumAdapterModes(d3d, adapter_idx, D3DFMT_X8R8G8B8, + mode_idx, &mode)); ++mode_idx) + { + if (mode.Width < 640 || mode.Height < 480) + continue; + if (mode.Width != current_mode.Width && mode.Height != current_mode.Height) + break; + } + ok(mode.Width != current_mode.Width && mode.Height != current_mode.Height, + "Adapter %u: Failed to find a different mode than %ux%u.\n", adapter_idx, + current_mode.Width, current_mode.Height); + + ok(ClipCursor(NULL), "Adapter %u: ClipCursor failed, error %#x.\n", adapter_idx, + GetLastError()); + get_virtual_rect(&virtual_rect); + ok(GetClipCursor(&clip_rect), "Adapter %u: GetClipCursor failed, error %#x.\n", adapter_idx, + GetLastError()); + ok(EqualRect(&clip_rect, &virtual_rect), "Adapter %u: Expect clip rect %s, got %s.\n", + adapter_idx, wine_dbgstr_rect(&virtual_rect), wine_dbgstr_rect(&clip_rect)); + + device_desc.adapter_ordinal = adapter_idx; + device_desc.width = mode.Width; + device_desc.height = mode.Height; + if (!(device = create_device(d3d, window, &device_desc))) + { + skip("Adapter %u: Failed to create a D3D device.\n", adapter_idx); + break; + } + flush_events(); + get_virtual_rect(&virtual_rect); + ok(GetClipCursor(&clip_rect), "Adapter %u: GetClipCursor failed, error %#x.\n", adapter_idx, + GetLastError()); + ok(EqualRect(&clip_rect, &virtual_rect), "Adapter %u: Expect clip rect %s, got %s.\n", + adapter_idx, wine_dbgstr_rect(&virtual_rect), wine_dbgstr_rect(&clip_rect)); + + IDirect3DDevice9_Release(device); + flush_events(); + get_virtual_rect(&virtual_rect); + ok(GetClipCursor(&clip_rect), "Adapter %u: GetClipCursor failed, error %#x.\n", adapter_idx, + GetLastError()); + ok(EqualRect(&clip_rect, &virtual_rect), "Adapter %u: Expect clip rect %s, got %s.\n", + adapter_idx, wine_dbgstr_rect(&virtual_rect), wine_dbgstr_rect(&clip_rect)); + } + + IDirect3D9_Release(d3d); + DestroyWindow(window); +} + START_TEST(device) { HMODULE d3d9_handle = GetModuleHandleA("d3d9.dll"); @@ -13853,6 +14042,7 @@ test_multi_adapter(); test_shader_validator(); test_creation_parameters(); + test_cursor_clipping(); UnregisterClassA("d3d9_test_wc", GetModuleHandleA(NULL)); } diff -Nru wine-development-5.5/dlls/d3d9/tests/visual.c wine-development-5.6/dlls/d3d9/tests/visual.c --- wine-development-5.5/dlls/d3d9/tests/visual.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d9/tests/visual.c 2020-04-10 18:54:32.000000000 +0000 @@ -63,16 +63,19 @@ return hwnd; } +static BOOL compare_uint(unsigned int x, unsigned int y, unsigned int max_diff) +{ + unsigned int diff = x > y ? x - y : y - x; + + return diff <= max_diff; +} + static BOOL color_match(D3DCOLOR c1, D3DCOLOR c2, BYTE max_diff) { - if (abs((int)(c1 & 0xff) - (int)(c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((int)(c1 & 0xff) - (int)(c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((int)(c1 & 0xff) - (int)(c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((int)(c1 & 0xff) - (int)(c2 & 0xff)) > max_diff) return FALSE; - return TRUE; + return compare_uint(c1 & 0xff, c2 & 0xff, max_diff) + && compare_uint((c1 >> 8) & 0xff, (c2 >> 8) & 0xff, max_diff) + && compare_uint((c1 >> 16) & 0xff, (c2 >> 16) & 0xff, max_diff) + && compare_uint((c1 >> 24) & 0xff, (c2 >> 24) & 0xff, max_diff); } static BOOL compare_float(float f, float g, unsigned int ulps) @@ -1511,7 +1514,7 @@ depth = (WORD *)((BYTE *)lr.pBits + y * lr.Pitch); for (x = 0; x < 4; ++x) { - ok(abs(depth[x] - 0x7fff) <= 2, "Got depth 0x%04x at %u, %u.\n", depth[x], x, y); + ok(compare_uint(depth[x], 0x7fff, 2), "Got depth 0x%04x at %u, %u.\n", depth[x], x, y); } } hr = IDirect3DSurface9_UnlockRect(ds); @@ -1726,7 +1729,7 @@ /* Windows drivers disagree on how to promote the 8 bit per channel * input argument to 16 bit for D3DFMT_G16R16. */ ok(color_match(surface_data[0], formats[i].fill_value, 2) && - abs((expected_a) - (fill_a)) < 3, + compare_uint(expected_a, fill_a, 2), "Expected clear value 0x%08x, got 0x%08x, fmt=%s.\n", formats[i].fill_value, surface_data[0], formats[i].name); hr = IDirect3DSurface9_UnlockRect(surface); diff -Nru wine-development-5.5/dlls/d3d9/texture.c wine-development-5.6/dlls/d3d9/texture.c --- wine-development-5.5/dlls/d3d9/texture.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3d9/texture.c 2020-04-10 18:54:32.000000000 +0000 @@ -367,7 +367,7 @@ desc->Type = D3DRTYPE_SURFACE; desc->Usage = texture->usage; desc->Pool = d3dpool_from_wined3daccess(wined3d_desc.access, wined3d_desc.usage); - desc->MultiSampleType = wined3d_desc.multisample_type; + desc->MultiSampleType = d3dmultisample_type_from_wined3d(wined3d_desc.multisample_type); desc->MultiSampleQuality = wined3d_desc.multisample_quality; desc->Width = wined3d_desc.width; desc->Height = wined3d_desc.height; @@ -774,7 +774,7 @@ desc->Type = D3DRTYPE_SURFACE; desc->Usage = texture->usage; desc->Pool = d3dpool_from_wined3daccess(wined3d_desc.access, wined3d_desc.usage); - desc->MultiSampleType = wined3d_desc.multisample_type; + desc->MultiSampleType = d3dmultisample_type_from_wined3d(wined3d_desc.multisample_type); desc->MultiSampleQuality = wined3d_desc.multisample_quality; desc->Width = wined3d_desc.width; desc->Height = wined3d_desc.height; diff -Nru wine-development-5.5/dlls/d3dcompiler_43/d3dcompiler_private.h wine-development-5.6/dlls/d3dcompiler_43/d3dcompiler_private.h --- wine-development-5.5/dlls/d3dcompiler_43/d3dcompiler_private.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dcompiler_43/d3dcompiler_private.h 2020-04-10 18:54:32.000000000 +0000 @@ -661,6 +661,12 @@ struct hlsl_type *data_type; struct source_location loc; + + /* Liveness ranges. "index" is the index of this instruction. Since this is + * essentially an SSA value, the earliest live point is the index. This is + * true even for loops, since currently we can't have a reference to a + * value generated in an earlier iteration of the loop. */ + unsigned int index, last_read; }; #define HLSL_STORAGE_EXTERN 0x00000001 @@ -699,7 +705,7 @@ const struct reg_reservation *reg_reservation; struct list scope_entry, param_entry; - struct hlsl_var_allocation *allocation; + unsigned int first_write, last_read; }; struct hlsl_ir_function @@ -734,6 +740,7 @@ struct hlsl_ir_node node; /* loop condition is stored in the body (as "if (!condition) break;") */ struct list *body; + unsigned int next_index; /* liveness index of the end of the loop */ }; enum hlsl_ir_expr_op { diff -Nru wine-development-5.5/dlls/d3dcompiler_43/hlsl.y wine-development-5.6/dlls/d3dcompiler_43/hlsl.y --- wine-development-5.5/dlls/d3dcompiler_43/hlsl.y 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dcompiler_43/hlsl.y 2020-04-10 18:54:32.000000000 +0000 @@ -21,6 +21,7 @@ %{ #include "wine/debug.h" +#include #include #include "d3dcompiler_private.h" @@ -915,6 +916,22 @@ return NULL; } +static struct hlsl_ir_function_decl *get_func_entry(const char *name) +{ + struct hlsl_ir_function_decl *decl; + struct hlsl_ir_function *func; + struct wine_rb_entry *entry; + + if ((entry = wine_rb_get(&hlsl_ctx.functions, name))) + { + func = WINE_RB_ENTRY_VALUE(entry, struct hlsl_ir_function, entry); + WINE_RB_FOR_EACH_ENTRY(decl, &func->overloads, struct hlsl_ir_function_decl, entry) + return decl; + } + + return NULL; +} + static struct list *append_unop(struct list *list, struct hlsl_ir_node *node) { list_add_tail(list, &node->entry); @@ -2545,9 +2562,160 @@ wine_rb_for_each_entry(&func->overloads, dump_function_decl, NULL); } +/* Allocate a unique, ordered index to each instruction, which will be used for + * computing liveness ranges. */ +static unsigned int index_instructions(struct list *instrs, unsigned int index) +{ + struct hlsl_ir_node *instr; + + LIST_FOR_EACH_ENTRY(instr, instrs, struct hlsl_ir_node, entry) + { + instr->index = index++; + + if (instr->type == HLSL_IR_IF) + { + struct hlsl_ir_if *iff = if_from_node(instr); + index = index_instructions(iff->then_instrs, index); + if (iff->else_instrs) + index = index_instructions(iff->else_instrs, index); + } + else if (instr->type == HLSL_IR_LOOP) + { + index = index_instructions(loop_from_node(instr)->body, index); + loop_from_node(instr)->next_index = index; + } + } + + return index; +} + +/* Walk the chain of derefs and retrieve the actual variable we care about. */ +static struct hlsl_ir_var *hlsl_var_from_deref(const struct hlsl_deref *deref) +{ + switch (deref->type) + { + case HLSL_IR_DEREF_VAR: + return deref->v.var; + case HLSL_IR_DEREF_ARRAY: + return hlsl_var_from_deref(&deref_from_node(deref->v.array.array)->src); + case HLSL_IR_DEREF_RECORD: + return hlsl_var_from_deref(&deref_from_node(deref->v.record.record)->src); + } + assert(0); + return NULL; +} + +/* Compute the earliest and latest liveness for each variable. In the case that + * a variable is accessed inside of a loop, we promote its liveness to extend + * to at least the range of the entire loop. Note that we don't need to do this + * for anonymous nodes, since there's currently no way to use a node which was + * calculated in an earlier iteration of the loop. */ +static void compute_liveness_recurse(struct list *instrs, unsigned int loop_first, unsigned int loop_last) +{ + struct hlsl_ir_node *instr; + struct hlsl_ir_var *var; + + LIST_FOR_EACH_ENTRY(instr, instrs, struct hlsl_ir_node, entry) + { + switch (instr->type) + { + case HLSL_IR_ASSIGNMENT: + { + struct hlsl_ir_assignment *assignment = assignment_from_node(instr); + var = hlsl_var_from_deref(&assignment->lhs); + if (!var->first_write) + var->first_write = loop_first ? min(instr->index, loop_first) : instr->index; + assignment->rhs->last_read = instr->index; + break; + } + case HLSL_IR_CONSTANT: + break; + case HLSL_IR_CONSTRUCTOR: + { + struct hlsl_ir_constructor *constructor = constructor_from_node(instr); + unsigned int i; + for (i = 0; i < constructor->args_count; ++i) + constructor->args[i]->last_read = instr->index; + break; + } + case HLSL_IR_DEREF: + { + struct hlsl_ir_deref *deref = deref_from_node(instr); + var = hlsl_var_from_deref(&deref->src); + var->last_read = loop_last ? max(instr->index, loop_last) : instr->index; + if (deref->src.type == HLSL_IR_DEREF_ARRAY) + deref->src.v.array.index->last_read = instr->index; + break; + } + case HLSL_IR_EXPR: + { + struct hlsl_ir_expr *expr = expr_from_node(instr); + expr->operands[0]->last_read = instr->index; + if (expr->operands[1]) + expr->operands[1]->last_read = instr->index; + if (expr->operands[2]) + expr->operands[2]->last_read = instr->index; + break; + } + case HLSL_IR_IF: + { + struct hlsl_ir_if *iff = if_from_node(instr); + compute_liveness_recurse(iff->then_instrs, loop_first, loop_last); + if (iff->else_instrs) + compute_liveness_recurse(iff->else_instrs, loop_first, loop_last); + iff->condition->last_read = instr->index; + break; + } + case HLSL_IR_JUMP: + { + struct hlsl_ir_jump *jump = jump_from_node(instr); + if (jump->type == HLSL_IR_JUMP_RETURN && jump->return_value) + jump->return_value->last_read = instr->index; + break; + } + case HLSL_IR_LOOP: + { + struct hlsl_ir_loop *loop = loop_from_node(instr); + compute_liveness_recurse(loop->body, loop_first ? loop_first : instr->index, + loop_last ? loop_last : loop->next_index); + break; + } + case HLSL_IR_SWIZZLE: + { + struct hlsl_ir_swizzle *swizzle = swizzle_from_node(instr); + swizzle->val->last_read = instr->index; + break; + } + default: + break; + } + } +} + +static void compute_liveness(struct hlsl_ir_function_decl *entry_func) +{ + struct hlsl_ir_var *var; + + LIST_FOR_EACH_ENTRY(var, &hlsl_ctx.globals->vars, struct hlsl_ir_var, scope_entry) + { + var->first_write = 1; + } + + LIST_FOR_EACH_ENTRY(var, entry_func->parameters, struct hlsl_ir_var, param_entry) + { + if (var->modifiers & HLSL_STORAGE_IN) + var->first_write = 1; + if (var->modifiers & HLSL_STORAGE_OUT) + var->last_read = UINT_MAX; + } + + compute_liveness_recurse(entry_func->body, 0, 0); +} + struct bwriter_shader *parse_hlsl(enum shader_type type, DWORD major, DWORD minor, const char *entrypoint, char **messages) { + struct hlsl_ir_function_decl *entry_func; struct hlsl_scope *scope, *next_scope; struct hlsl_type *hlsl_type, *next_type; struct hlsl_ir_var *var, *next_var; @@ -2573,12 +2741,6 @@ hlsl_parse(); - if (TRACE_ON(hlsl_parser)) - { - TRACE("IR dump.\n"); - wine_rb_for_each_entry(&hlsl_ctx.functions, dump_function, NULL); - } - TRACE("Compilation status = %d\n", hlsl_ctx.status); if (messages) { @@ -2597,6 +2759,27 @@ d3dcompiler_free((void *)hlsl_ctx.source_files[i]); d3dcompiler_free(hlsl_ctx.source_files); + if (hlsl_ctx.status == PARSE_ERR) + goto out; + + if (!(entry_func = get_func_entry(entrypoint))) + { + hlsl_message("error: entry point %s is not defined\n", debugstr_a(entrypoint)); + goto out; + } + + /* Index 0 means unused; index 1 means function entry, so start at 2. */ + index_instructions(entry_func->body, 2); + + if (TRACE_ON(hlsl_parser)) + { + TRACE("IR dump.\n"); + wine_rb_for_each_entry(&hlsl_ctx.functions, dump_function, NULL); + } + + compute_liveness(entry_func); + +out: TRACE("Freeing functions IR.\n"); wine_rb_destroy(&hlsl_ctx.functions, free_function_rb, NULL); diff -Nru wine-development-5.5/dlls/d3dcompiler_43/utils.c wine-development-5.6/dlls/d3dcompiler_43/utils.c --- wine-development-5.5/dlls/d3dcompiler_43/utils.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dcompiler_43/utils.c 2020-04-10 18:54:32.000000000 +0000 @@ -2156,7 +2156,7 @@ static void debug_dump_instr(const struct hlsl_ir_node *instr) { - wine_dbg_printf("%p: ", instr); + wine_dbg_printf("%4u: %p: ", instr->index, instr); switch (instr->type) { case HLSL_IR_EXPR: diff -Nru wine-development-5.5/dlls/d3drm/tests/d3drm.c wine-development-5.6/dlls/d3drm/tests/d3drm.c --- wine-development-5.5/dlls/d3drm/tests/d3drm.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3drm/tests/d3drm.c 2020-04-10 18:54:32.000000000 +0000 @@ -103,6 +103,21 @@ expect_vector_(line, left, U1(*right).x, U2(*right).y, U3(*right).z, 0); } +static BOOL compare_uint(unsigned int x, unsigned int y, unsigned int max_diff) +{ + unsigned int diff = x > y ? x - y : y - x; + + return diff <= max_diff; +} + +static BOOL compare_color(D3DCOLOR c1, D3DCOLOR c2, BYTE max_diff) +{ + return compare_uint(c1 & 0xff, c2 & 0xff, max_diff) + && compare_uint((c1 >> 8) & 0xff, (c2 >> 8) & 0xff, max_diff) + && compare_uint((c1 >> 16) & 0xff, (c2 >> 16) & 0xff, max_diff) + && compare_uint((c1 >> 24) & 0xff, (c2 >> 24) & 0xff, max_diff); +} + static D3DRMMATRIX4D identity = { { 1.0f, 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f, 0.0f }, @@ -6714,18 +6729,6 @@ return device; } -static BOOL compare_color(D3DCOLOR c1, D3DCOLOR c2, BYTE max_diff) -{ - if ((c1 & 0xff) - (c2 & 0xff) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if ((c1 & 0xff) - (c2 & 0xff) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if ((c1 & 0xff) - (c2 & 0xff) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if ((c1 & 0xff) - (c2 & 0xff) > max_diff) return FALSE; - return TRUE; -} - static void clear_depth_surface(IDirectDrawSurface *surface, DWORD value) { HRESULT hr; diff -Nru wine-development-5.5/dlls/d3dx9_24/Makefile.in wine-development-5.6/dlls/d3dx9_24/Makefile.in --- wine-development-5.5/dlls/d3dx9_24/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_24/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=24 MODULE = d3dx9_24.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_25/Makefile.in wine-development-5.6/dlls/d3dx9_25/Makefile.in --- wine-development-5.5/dlls/d3dx9_25/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_25/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=25 MODULE = d3dx9_25.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_26/Makefile.in wine-development-5.6/dlls/d3dx9_26/Makefile.in --- wine-development-5.5/dlls/d3dx9_26/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_26/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=26 MODULE = d3dx9_26.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_27/Makefile.in wine-development-5.6/dlls/d3dx9_27/Makefile.in --- wine-development-5.5/dlls/d3dx9_27/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_27/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=27 MODULE = d3dx9_27.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_28/Makefile.in wine-development-5.6/dlls/d3dx9_28/Makefile.in --- wine-development-5.5/dlls/d3dx9_28/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_28/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=28 MODULE = d3dx9_28.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_29/Makefile.in wine-development-5.6/dlls/d3dx9_29/Makefile.in --- wine-development-5.5/dlls/d3dx9_29/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_29/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=29 MODULE = d3dx9_29.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_30/Makefile.in wine-development-5.6/dlls/d3dx9_30/Makefile.in --- wine-development-5.5/dlls/d3dx9_30/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_30/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=30 MODULE = d3dx9_30.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_31/Makefile.in wine-development-5.6/dlls/d3dx9_31/Makefile.in --- wine-development-5.5/dlls/d3dx9_31/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_31/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=31 MODULE = d3dx9_31.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_32/Makefile.in wine-development-5.6/dlls/d3dx9_32/Makefile.in --- wine-development-5.5/dlls/d3dx9_32/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_32/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=32 MODULE = d3dx9_32.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_33/Makefile.in wine-development-5.6/dlls/d3dx9_33/Makefile.in --- wine-development-5.5/dlls/d3dx9_33/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_33/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=33 MODULE = d3dx9_33.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_34/Makefile.in wine-development-5.6/dlls/d3dx9_34/Makefile.in --- wine-development-5.5/dlls/d3dx9_34/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_34/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=34 MODULE = d3dx9_34.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_35/Makefile.in wine-development-5.6/dlls/d3dx9_35/Makefile.in --- wine-development-5.5/dlls/d3dx9_35/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_35/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=35 MODULE = d3dx9_35.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_36/font.c wine-development-5.6/dlls/d3dx9_36/font.c --- wine-development-5.5/dlls/d3dx9_36/font.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_36/font.c 2020-04-10 18:54:32.000000000 +0000 @@ -552,11 +552,11 @@ heap_free(sla); } -static const WCHAR *read_line(HDC hdc, const WCHAR *str, int *count, +static const WCHAR *read_line(HDC hdc, const WCHAR *str, unsigned int *count, WCHAR *dest, unsigned int *dest_len, int width, DWORD format, SIZE *size) { + unsigned int orig_count = *count; unsigned int i = 0; - int orig_count = *count; int num_fit; *dest_len = 0; @@ -599,26 +599,80 @@ return NULL; } +static int compute_rect(struct d3dx_font *font, const WCHAR *string, unsigned int count, + WCHAR *line, RECT *rect, DWORD format) +{ + int y, lh, width, top = rect->top; + int max_width = 0; + SIZE size; + + y = rect->top; + lh = font->metrics.tmHeight; + width = rect->right - rect->left; + + while (string) + { + unsigned int line_len; + + string = read_line(font->hdc, string, &count, line, &line_len, width, format, &size); + + if (size.cx > max_width) + max_width = size.cx; + + y += lh; + if (!(format & DT_NOCLIP) && (y > rect->bottom)) + break; + } + + if (format & DT_CENTER) + { + rect->left += (rect->right - rect->left - max_width) / 2; + rect->right = rect->left + max_width; + } + else if (format & DT_RIGHT) + { + rect->left = rect->right - max_width; + } + else + { + rect->right = rect->left + max_width; + } + + if (format & DT_VCENTER) + { + rect->top += (rect->bottom - y) / 2; + rect->bottom = rect->top + y - top; + } + else if (format & DT_BOTTOM) + { + rect->top += rect->bottom - y; + } + else + { + rect->bottom = y; + } + + return rect->bottom - top; +} + static INT WINAPI ID3DXFontImpl_DrawTextW(ID3DXFont *iface, ID3DXSprite *sprite, - const WCHAR *string, INT count, RECT *rect, DWORD format, D3DCOLOR color) + const WCHAR *string, INT in_count, RECT *rect, DWORD format, D3DCOLOR color) { struct d3dx_font *font = impl_from_ID3DXFont(iface); + int lh, x, y, width, top, ret = 0; ID3DXSprite *target = sprite; + unsigned int count; + RECT r = {0}; WCHAR *line; - RECT textrect = {0}; - int lh, x, y, width; - int max_width = 0; - int ret = 0; SIZE size; - TRACE("iface %p, sprite %p, string %s, count %d, rect %s, format %#x, color 0x%08x.\n", - iface, sprite, debugstr_wn(string, count), count, wine_dbgstr_rect(rect), format, color); + TRACE("iface %p, sprite %p, string %s, in_count %d, rect %s, format %#x, color 0x%08x.\n", + iface, sprite, debugstr_wn(string, in_count), in_count, wine_dbgstr_rect(rect), format, color); if (!string) return 0; - if (count < 0) - count = lstrlenW(string); + count = in_count < 0 ? lstrlenW(string) : in_count; if (!count) return 0; @@ -629,20 +683,40 @@ if (format & DT_SINGLELINE) format &= ~DT_WORDBREAK; - if (rect) - textrect = *rect; - - x = textrect.left; - y = textrect.top; - width = textrect.right - textrect.left; - - lh = font->metrics.tmHeight; - line = heap_alloc(count * sizeof(*line)); if (!line) return 0; - if (!(format & DT_CALCRECT) && !sprite) + if (!rect || format & (DT_CALCRECT | DT_VCENTER | DT_BOTTOM)) + { + if (!rect) + { + rect = &r; + format |= DT_NOCLIP; + } + else if (!(format & DT_CALCRECT)) + { + r = *rect; + rect = &r; + } + + top = rect->top; + + ret = compute_rect(font, string, count, line, rect, format); + + if (format & DT_CALCRECT) + goto cleanup; + } + else + { + top = rect->top; + } + + y = rect->top; + lh = font->metrics.tmHeight; + width = rect->right - rect->left; + + if (!sprite) { D3DXCreateSprite(font->device, &target); ID3DXSprite_Begin(target, 0); @@ -650,72 +724,62 @@ while (string) { - unsigned int line_len; + unsigned int line_len, i; + GCP_RESULTSW results; + D3DXVECTOR3 pos; string = read_line(font->hdc, string, &count, line, &line_len, width, format, &size); - if (!(format & DT_CALCRECT)) - { - GCP_RESULTSW results; - D3DXVECTOR3 pos; - unsigned int i; - - memset(&results, 0, sizeof(results)); - results.nGlyphs = line_len; - - results.lpCaretPos = heap_alloc(line_len * sizeof(*results.lpCaretPos)); - if (!results.lpCaretPos) - goto cleanup; + if (format & DT_CENTER) + x = (rect->left + rect->right - size.cx) / 2; + else if (format & DT_RIGHT) + x = rect->right - size.cx; + else + x = rect->left; + + memset(&results, 0, sizeof(results)); + results.nGlyphs = line_len; + + results.lpCaretPos = heap_alloc(line_len * sizeof(*results.lpCaretPos)); + if (!results.lpCaretPos) + goto cleanup; - results.lpGlyphs = heap_alloc(line_len * sizeof(*results.lpGlyphs)); - if (!results.lpGlyphs) - { - heap_free(results.lpCaretPos); - goto cleanup; - } - - GetCharacterPlacementW(font->hdc, line, line_len, 0, &results, 0); + results.lpGlyphs = heap_alloc(line_len * sizeof(*results.lpGlyphs)); + if (!results.lpGlyphs) + { + heap_free(results.lpCaretPos); + goto cleanup; + } - for (i = 0; i < results.nGlyphs; ++i) - { - IDirect3DTexture9 *texture; - POINT cell_inc; - RECT black_box; + GetCharacterPlacementW(font->hdc, line, line_len, 0, &results, 0); - ID3DXFont_GetGlyphData(iface, results.lpGlyphs[i], &texture, &black_box, &cell_inc); + for (i = 0; i < results.nGlyphs; ++i) + { + IDirect3DTexture9 *texture; + POINT cell_inc; + RECT black_box; - if (!texture) - continue; + ID3DXFont_GetGlyphData(iface, results.lpGlyphs[i], &texture, &black_box, &cell_inc); - pos.x = cell_inc.x + x + results.lpCaretPos[i]; - pos.y = cell_inc.y + y; + if (!texture) + continue; - ID3DXSprite_Draw(target, texture, &black_box, NULL, &pos, color); - IDirect3DTexture9_Release(texture); - } + pos.x = cell_inc.x + x + results.lpCaretPos[i]; + pos.y = cell_inc.y + y; - heap_free(results.lpCaretPos); - heap_free(results.lpGlyphs); - } - else if (size.cx > max_width) - { - max_width = size.cx; + ID3DXSprite_Draw(target, texture, &black_box, NULL, &pos, color); + IDirect3DTexture9_Release(texture); } + heap_free(results.lpCaretPos); + heap_free(results.lpGlyphs); + y += lh; - if (!(DT_NOCLIP & format) && (y > textrect.bottom)) + if (!(DT_NOCLIP & format) && (y > rect->bottom)) break; } - if (format & DT_CALCRECT && rect) - { - *rect = textrect; - - rect->bottom = y; - rect->right = rect->left + max_width; - } - - ret = y - textrect.top; + ret = y - top; cleanup: if (target != sprite) diff -Nru wine-development-5.5/dlls/d3dx9_36/Makefile.in wine-development-5.6/dlls/d3dx9_36/Makefile.in --- wine-development-5.5/dlls/d3dx9_36/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_36/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,7 +1,7 @@ EXTRADEFS = -DD3DX_SDK_VERSION=36 MODULE = d3dx9_36.dll IMPORTLIB = d3dx9 -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 DELAYIMPORTS = windowscodecs usp10 EXTRADLLFLAGS = -mno-cygwin diff -Nru wine-development-5.5/dlls/d3dx9_36/tests/core.c wine-development-5.6/dlls/d3dx9_36/tests/core.c --- wine-development-5.5/dlls/d3dx9_36/tests/core.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_36/tests/core.c 2020-04-10 18:54:32.000000000 +0000 @@ -770,6 +770,9 @@ height = ID3DXFont_DrawTextW(font, NULL, long_textW, -1, &rect, DT_WORDBREAK | DT_NOCLIP, 0xff00ff); ok(height == 96, "Got unexpected height %d.\n", height); + height = ID3DXFont_DrawTextW(font, NULL, L"a\na", -1, NULL, 0, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + height = ID3DXFont_DrawTextW(font, NULL, L"a\na", -1, &rect, 0, 0xff00ff); ok(height == 24, "Got unexpected height %d.\n", height); @@ -839,14 +842,14 @@ height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_WORDBREAK | DT_RIGHT, 0xff00ff); ok(height == 36, "Got unexpected height %d.\n", height); - height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_WORDBREAK | DT_RIGHT, 0xff00ff); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_WORDBREAK | DT_CENTER, 0xff00ff); ok(height == 36, "Got unexpected height %d.\n", height); height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_BOTTOM, 0xff00ff); - todo_wine ok(height == 40, "Got unexpected height %d.\n", height); + ok(height == 40, "Got unexpected height %d.\n", height); height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_VCENTER, 0xff00ff); - todo_wine ok(height == 32, "Got unexpected height %d.\n", height); + ok(height == 32, "Got unexpected height %d.\n", height); height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_RIGHT, 0xff00ff); ok(height == 24, "Got unexpected height %d.\n", height); @@ -859,6 +862,311 @@ ok(height == 24, "Got unexpected height %d.\n", height); check_rect(&rect, 10, 10, 30, 34); + SetRect(&rect, -10, 10, 30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, -10, 10, 10, 34); + + SetRect(&rect, 10, -10, 50, 30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, -10, 30, 14); + + SetRect(&rect, 10, 10, -30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 10, 30, 34); + + SetRect(&rect, 10, 10, 50, -30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 10, 30, 34); + + SetRect(&rect, 10, 10, 50, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 10, 30, 34); + + SetRect(&rect, -10, 10, 30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, -10, 10, 10, 34); + + SetRect(&rect, 10, -10, 50, 30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, -10, 30, 14); + + SetRect(&rect, 10, 10, -30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 12, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 10, 53, 22); + + SetRect(&rect, 10, 10, 50, -30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 10, 30, 34); + + SetRect(&rect, 10, 10, 50, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_BOTTOM | DT_CALCRECT, 0xff00ff); + ok(height == 40, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 26, 30, 50); + + SetRect(&rect, -10, 10, 30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_BOTTOM | DT_CALCRECT, 0xff00ff); + ok(height == 40, "Got unexpected height %d.\n", height); + check_rect(&rect, -10, 26, 10, 50); + + SetRect(&rect, 10, -10, 50, 30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_BOTTOM | DT_CALCRECT, 0xff00ff); + ok(height == 40, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 6, 30, 30); + + SetRect(&rect, 10, 10, -30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_BOTTOM | DT_CALCRECT, 0xff00ff); + ok(height == 40, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 26, 30, 50); + + SetRect(&rect, 10, 10, 50, -30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_BOTTOM | DT_CALCRECT, 0xff00ff); + ok(height == -40, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, -54, 30, -30); + + SetRect(&rect, 10, 10, 50, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_BOTTOM | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 40, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 26, 30, 50); + + SetRect(&rect, -10, 10, 30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_BOTTOM | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 40, "Got unexpected height %d.\n", height); + check_rect(&rect, -10, 26, 10, 50); + + SetRect(&rect, 10, -10, 50, 30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_BOTTOM | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 40, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 6, 30, 30); + + SetRect(&rect, 10, 10, -30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_BOTTOM | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 40, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 38, 53, 50); + + SetRect(&rect, 10, 10, 50, -30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_BOTTOM | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == -40, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, -54, 30, -30); + + SetRect(&rect, 10, 10, 50, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_VCENTER | DT_CALCRECT, 0xff00ff); + ok(height == 32, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 18, 30, 42); + + SetRect(&rect, -10, 10, 30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_VCENTER | DT_CALCRECT, 0xff00ff); + ok(height == 32, "Got unexpected height %d.\n", height); + check_rect(&rect, -10, 18, 10, 42); + + SetRect(&rect, 10, -10, 50, 30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_VCENTER | DT_CALCRECT, 0xff00ff); + ok(height == 32, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, -2, 30, 22); + + SetRect(&rect, 10, 10, -30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_VCENTER | DT_CALCRECT, 0xff00ff); + ok(height == 32, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 18, 30, 42); + + SetRect(&rect, 10, 10, 50, -30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_VCENTER | DT_CALCRECT, 0xff00ff); + ok(height == -8, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, -22, 30, 2); + + SetRect(&rect, 10, 10, 50, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_VCENTER | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 32, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 18, 30, 42); + + SetRect(&rect, -10, 10, 30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_VCENTER | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 32, "Got unexpected height %d.\n", height); + check_rect(&rect, -10, 18, 10, 42); + + SetRect(&rect, 10, -10, 50, 30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_VCENTER | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 32, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, -2, 30, 22); + + SetRect(&rect, 10, 10, -30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_VCENTER | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 26, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 24, 53, 36); + + SetRect(&rect, 10, 10, 50, -30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_VCENTER | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == -8, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, -22, 30, 2); + + SetRect(&rect, 10, 10, 50, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_RIGHT | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 30, 10, 50, 34); + + SetRect(&rect, -10, 10, 30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_RIGHT | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 10, 30, 34); + + SetRect(&rect, 10, -10, 50, 30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_RIGHT | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 30, -10, 50, 14); + + SetRect(&rect, 10, 10, -30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_RIGHT | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, -50, 10, -30, 34); + + SetRect(&rect, 10, 10, 50, -30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_RIGHT | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 30, 10, 50, 34); + + SetRect(&rect, 10, 10, 50, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_RIGHT | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 30, 10, 50, 34); + + SetRect(&rect, -10, 10, 30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_RIGHT | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 10, 10, 30, 34); + + SetRect(&rect, 10, -10, 50, 30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_RIGHT | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 30, -10, 50, 14); + + SetRect(&rect, 10, 10, -30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_RIGHT | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 12, "Got unexpected height %d.\n", height); + check_rect(&rect, -73, 10, -30, 22); + + SetRect(&rect, 10, 10, 50, -30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_RIGHT | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 30, 10, 50, 34); + + SetRect(&rect, 10, 10, 50, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_CENTER | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 20, 10, 40, 34); + + SetRect(&rect, -10, 10, 30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_CENTER | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 0, 10, 20, 34); + + SetRect(&rect, 10, -10, 50, 30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_CENTER | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 20, -10, 40, 14); + + SetRect(&rect, 10, 10, -30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_CENTER | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, -20, 10, 0, 34); + + SetRect(&rect, 10, 10, 50, -30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_CENTER | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 20, 10, 40, 34); + + SetRect(&rect, 10, 10, 50, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_CENTER | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 20, 10, 40, 34); + + SetRect(&rect, -10, 10, 30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_CENTER | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 0, 10, 20, 34); + + SetRect(&rect, 10, -10, 50, 30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_CENTER | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 20, -10, 40, 14); + + SetRect(&rect, 10, 10, -30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_CENTER | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 12, "Got unexpected height %d.\n", height); + check_rect(&rect, -31, 10, 12, 22); + + SetRect(&rect, 10, 10, 50, -30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_CENTER | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 24, "Got unexpected height %d.\n", height); + check_rect(&rect, 20, 10, 40, 34); + + SetRect(&rect, 10, 10, 50, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_CENTER | DT_VCENTER | DT_CALCRECT, 0xff00ff); + ok(height == 32, "Got unexpected height %d.\n", height); + check_rect(&rect, 20, 18, 40, 42); + + SetRect(&rect, 10, 10, 50, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_CENTER | DT_VCENTER | DT_CALCRECT, 0xff00ff); + ok(height == 32, "Got unexpected height %d.\n", height); + check_rect(&rect, 20, 18, 40, 42); + + SetRect(&rect, -10, 10, 30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_CENTER | DT_VCENTER | DT_CALCRECT, 0xff00ff); + ok(height == 32, "Got unexpected height %d.\n", height); + check_rect(&rect, 0, 18, 20, 42); + + SetRect(&rect, 10, -10, 50, 30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_CENTER | DT_VCENTER | DT_CALCRECT, 0xff00ff); + ok(height == 32, "Got unexpected height %d.\n", height); + check_rect(&rect, 20, -2, 40, 22); + + SetRect(&rect, 10, 10, -30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_CENTER | DT_VCENTER | DT_CALCRECT, 0xff00ff); + ok(height == 32, "Got unexpected height %d.\n", height); + check_rect(&rect, -20, 18, 0, 42); + + SetRect(&rect, 10, 10, 50, -30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa\naaaa", -1, &rect, DT_CENTER | DT_VCENTER | DT_CALCRECT, 0xff00ff); + ok(height == -8, "Got unexpected height %d.\n", height); + check_rect(&rect, 20, -22, 40, 2); + + SetRect(&rect, 10, 10, 50, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_CENTER | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 32, "Got unexpected height %d.\n", height); + check_rect(&rect, 20, 18, 40, 42); + + SetRect(&rect, 10, 10, 50, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_CENTER | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 32, "Got unexpected height %d.\n", height); + check_rect(&rect, 20, 18, 40, 42); + + SetRect(&rect, -10, 10, 30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_CENTER | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 32, "Got unexpected height %d.\n", height); + check_rect(&rect, 0, 18, 20, 42); + + SetRect(&rect, 10, -10, 50, 30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_CENTER | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 32, "Got unexpected height %d.\n", height); + check_rect(&rect, 20, -2, 40, 22); + + SetRect(&rect, 10, 10, -30, 50); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_CENTER | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == 26, "Got unexpected height %d.\n", height); + check_rect(&rect, -31, 24, 12, 36); + + SetRect(&rect, 10, 10, 50, -30); + height = ID3DXFont_DrawTextW(font, NULL, L"aaaa aaaa", -1, &rect, DT_CENTER | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT, 0xff00ff); + ok(height == -8, "Got unexpected height %d.\n", height); + check_rect(&rect, 20, -22, 40, 2); + ID3DXFont_Release(font); } diff -Nru wine-development-5.5/dlls/d3dx9_36/tests/texture.c wine-development-5.6/dlls/d3dx9_36/tests/texture.c --- wine-development-5.5/dlls/d3dx9_36/tests/texture.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_36/tests/texture.c 2020-04-10 18:54:32.000000000 +0000 @@ -146,20 +146,19 @@ got->x, got->y, got->z, got->w); } +static BOOL compare_uint(unsigned int x, unsigned int y, unsigned int max_diff) +{ + unsigned int diff = x > y ? x - y : y - x; + + return diff <= max_diff; +} + static BOOL compare_color(DWORD c1, DWORD c2, BYTE max_diff) { - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) - return FALSE; - return TRUE; + return compare_uint(c1 & 0xff, c2 & 0xff, max_diff) + && compare_uint((c1 >> 8) & 0xff, (c2 >> 8) & 0xff, max_diff) + && compare_uint((c1 >> 16) & 0xff, (c2 >> 16) & 0xff, max_diff) + && compare_uint((c1 >> 24) & 0xff, (c2 >> 24) & 0xff, max_diff); } static BOOL is_autogenmipmap_supported(IDirect3DDevice9 *device, D3DRESOURCETYPE resource_type) diff -Nru wine-development-5.5/dlls/d3dx9_37/Makefile.in wine-development-5.6/dlls/d3dx9_37/Makefile.in --- wine-development-5.5/dlls/d3dx9_37/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_37/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=37 MODULE = d3dx9_37.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_38/Makefile.in wine-development-5.6/dlls/d3dx9_38/Makefile.in --- wine-development-5.5/dlls/d3dx9_38/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_38/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=38 MODULE = d3dx9_38.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_39/Makefile.in wine-development-5.6/dlls/d3dx9_39/Makefile.in --- wine-development-5.5/dlls/d3dx9_39/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_39/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=39 MODULE = d3dx9_39.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_40/Makefile.in wine-development-5.6/dlls/d3dx9_40/Makefile.in --- wine-development-5.5/dlls/d3dx9_40/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_40/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=40 MODULE = d3dx9_40.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_41/Makefile.in wine-development-5.6/dlls/d3dx9_41/Makefile.in --- wine-development-5.5/dlls/d3dx9_41/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_41/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=41 MODULE = d3dx9_41.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_42/Makefile.in wine-development-5.6/dlls/d3dx9_42/Makefile.in --- wine-development-5.5/dlls/d3dx9_42/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_42/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=42 MODULE = d3dx9_42.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/d3dx9_43/Makefile.in wine-development-5.6/dlls/d3dx9_43/Makefile.in --- wine-development-5.5/dlls/d3dx9_43/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/d3dx9_43/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ EXTRADEFS = -DD3DX_SDK_VERSION=43 MODULE = d3dx9_43.dll -IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase +IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 PARENTSRC = ../d3dx9_36 DELAYIMPORTS = windowscodecs usp10 diff -Nru wine-development-5.5/dlls/dbghelp/coff.c wine-development-5.6/dlls/dbghelp/coff.c --- wine-development-5.5/dlls/dbghelp/coff.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/coff.c 2020-04-10 18:54:32.000000000 +0000 @@ -32,16 +32,9 @@ * Add symbol size to internal symbol table. */ -#include "config.h" -#include "wine/port.h" - #include #include - #include -#ifdef HAVE_UNISTD_H -# include -#endif #include #include "windef.h" diff -Nru wine-development-5.5/dlls/dbghelp/cpu_arm64.c wine-development-5.6/dlls/dbghelp/cpu_arm64.c --- wine-development-5.5/dlls/dbghelp/cpu_arm64.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/cpu_arm64.c 2020-04-10 18:54:32.000000000 +0000 @@ -155,7 +155,7 @@ } #endif -static unsigned arm64_map_dwarf_register(unsigned regno, BOOL eh_frame) +static unsigned arm64_map_dwarf_register(unsigned regno, const struct module* module, BOOL eh_frame) { if (regno <= 28) return CV_ARM64_X0 + regno; if (regno == 29) return CV_ARM64_FP; diff -Nru wine-development-5.5/dlls/dbghelp/cpu_arm.c wine-development-5.6/dlls/dbghelp/cpu_arm.c --- wine-development-5.5/dlls/dbghelp/cpu_arm.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/cpu_arm.c 2020-04-10 18:54:32.000000000 +0000 @@ -153,7 +153,7 @@ } #endif -static unsigned arm_map_dwarf_register(unsigned regno, BOOL eh_frame) +static unsigned arm_map_dwarf_register(unsigned regno, const struct module* module, BOOL eh_frame) { if (regno <= 15) return CV_ARM_R0 + regno; if (regno == 128) return CV_ARM_CPSR; diff -Nru wine-development-5.5/dlls/dbghelp/cpu_i386.c wine-development-5.6/dlls/dbghelp/cpu_i386.c --- wine-development-5.5/dlls/dbghelp/cpu_i386.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/cpu_i386.c 2020-04-10 18:54:32.000000000 +0000 @@ -508,7 +508,7 @@ return FALSE; } -static unsigned i386_map_dwarf_register(unsigned regno, BOOL eh_frame) +static unsigned i386_map_dwarf_register(unsigned regno, const struct module* module, BOOL eh_frame) { unsigned reg; @@ -520,13 +520,11 @@ case 3: reg = CV_REG_EBX; 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) + if (eh_frame && module->type == DMT_MACHO) 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; diff -Nru wine-development-5.5/dlls/dbghelp/cpu_ppc.c wine-development-5.6/dlls/dbghelp/cpu_ppc.c --- wine-development-5.5/dlls/dbghelp/cpu_ppc.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/cpu_ppc.c 2020-04-10 18:54:32.000000000 +0000 @@ -55,7 +55,7 @@ return FALSE; } -static unsigned ppc_map_dwarf_register(unsigned regno, BOOL eh_frame) +static unsigned ppc_map_dwarf_register(unsigned regno, const struct module* module, BOOL eh_frame) { FIXME("not done\n"); return 0; diff -Nru wine-development-5.5/dlls/dbghelp/cpu_x86_64.c wine-development-5.6/dlls/dbghelp/cpu_x86_64.c --- wine-development-5.5/dlls/dbghelp/cpu_x86_64.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/cpu_x86_64.c 2020-04-10 18:54:32.000000000 +0000 @@ -726,7 +726,7 @@ return NULL; } -static unsigned x86_64_map_dwarf_register(unsigned regno, BOOL eh_frame) +static unsigned x86_64_map_dwarf_register(unsigned regno, const struct module* module, BOOL eh_frame) { unsigned reg; @@ -949,9 +949,7 @@ /* we need to read into the other process */ /* rtf = (RUNTIME_FUNCTION*)(module->module.BaseOfImage + (rtf->UnwindData & ~1)); */ } - if (ReadProcessMemory(dc->process->handle, - (void*)(dc->modules[index].base + rtf->UnwindData), - &ui, sizeof(ui), NULL)) + if (read_process_memory(dc->process, dc->modules[index].base + rtf->UnwindData, &ui, sizeof(ui))) minidump_add_memory_block(dc, dc->modules[index].base + rtf->UnwindData, FIELD_OFFSET(UNWIND_INFO, UnwindCode) + ui.CountOfCodes * sizeof(UNWIND_CODE), 0); rtf++; diff -Nru wine-development-5.5/dlls/dbghelp/dbghelp.c wine-development-5.6/dlls/dbghelp/dbghelp.c --- wine-development-5.5/dlls/dbghelp/dbghelp.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/dbghelp.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,7 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" #include #include "dbghelp_private.h" @@ -268,6 +267,23 @@ return TRUE; } +const WCHAR *process_getenv(const struct process *process, const WCHAR *name) +{ + size_t name_len; + const WCHAR *iter; + + if (!process->environment) return NULL; + name_len = lstrlenW(name); + + for (iter = process->environment; *iter; iter += lstrlenW(iter) + 1) + { + if (!wcsnicmp(iter, name, name_len) && iter[name_len] == '=') + return iter + name_len + 1; + } + + return NULL; +} + /****************************************************************** * check_live_target * @@ -275,7 +291,7 @@ static BOOL check_live_target(struct process* pcs) { PROCESS_BASIC_INFORMATION pbi; - ULONG_PTR base = 0; + ULONG_PTR base = 0, env = 0; if (!GetProcessId(pcs->handle)) return FALSE; if (GetEnvironmentVariableA("DBGHELP_NOLIVE", NULL, 0)) return FALSE; @@ -286,12 +302,58 @@ if (!pcs->is_64bit) { - PEB32 *peb32 = (PEB32 *)pbi.PebBaseAddress; - DWORD base32 = 0; - ReadProcessMemory(pcs->handle, &peb32->Reserved[0], &base32, sizeof(base32), NULL); - base = base32; + DWORD env32; + PEB32 peb32; + C_ASSERT(sizeof(void*) != 4 || FIELD_OFFSET(RTL_USER_PROCESS_PARAMETERS, Environment) == 0x48); + if (!ReadProcessMemory(pcs->handle, pbi.PebBaseAddress, &peb32, sizeof(peb32), NULL)) return FALSE; + base = peb32.Reserved[0]; + if (read_process_memory(pcs, peb32.ProcessParameters + 0x48, &env32, sizeof(env32))) env = env32; } - else ReadProcessMemory(pcs->handle, &pbi.PebBaseAddress->Reserved[0], &base, sizeof(base), NULL); + else + { + PEB peb; + if (!ReadProcessMemory(pcs->handle, pbi.PebBaseAddress, &peb, sizeof(peb), NULL)) return FALSE; + base = peb.Reserved[0]; + ReadProcessMemory(pcs->handle, &peb.ProcessParameters->Environment, &env, sizeof(env), NULL); + } + + /* read debuggee environment block */ + if (env) + { + size_t buf_size = 0, i, last_null = -1; + WCHAR *buf = NULL; + + do + { + size_t read_size = sysinfo.dwAllocationGranularity - (env & (sysinfo.dwAllocationGranularity - 1)); + if (buf) + { + WCHAR *new_buf; + if (!(new_buf = realloc(buf, buf_size + read_size))) break; + buf = new_buf; + } + else if(!(buf = malloc(read_size))) break; + + if (!read_process_memory(pcs, env, (char*)buf + buf_size, read_size)) break; + for (i = buf_size / sizeof(WCHAR); i < (buf_size + read_size) / sizeof(WCHAR); i++) + { + if (buf[i]) continue; + if (last_null + 1 == i) + { + pcs->environment = realloc(buf, (i + 1) * sizeof(WCHAR)); + buf = NULL; + break; + } + last_null = i; + } + env += read_size; + buf_size += read_size; + } + while (buf); + free(buf); + } + + if (!base) return FALSE; TRACE("got debug info address %#lx from PEB %p\n", base, pbi.PebBaseAddress); return elf_read_wine_loader_dbg_info(pcs, base) || macho_read_wine_loader_dbg_info(pcs, base); @@ -448,6 +510,7 @@ while ((*ppcs)->lmodules) module_remove(*ppcs, (*ppcs)->lmodules); HeapFree(GetProcessHeap(), 0, (*ppcs)->search_path); + free((*ppcs)->environment); next = (*ppcs)->next; HeapFree(GetProcessHeap(), 0, *ppcs); *ppcs = next; diff -Nru wine-development-5.5/dlls/dbghelp/dbghelp_private.h wine-development-5.6/dlls/dbghelp/dbghelp_private.h --- wine-development-5.5/dlls/dbghelp/dbghelp_private.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/dbghelp_private.h 2020-04-10 18:54:32.000000000 +0000 @@ -30,7 +30,6 @@ #include "oaidl.h" #include "winnls.h" #include "wine/list.h" -#include "wine/unicode.h" #include "wine/rbtree.h" #include "cvconst.h" @@ -404,6 +403,7 @@ HANDLE handle; const struct loader_ops* loader; WCHAR* search_path; + WCHAR* environment; PSYMBOL_REGISTERED_CALLBACK64 reg_cb; PSYMBOL_REGISTERED_CALLBACK reg_cb32; @@ -421,6 +421,11 @@ BOOL is_64bit; }; +static inline BOOL read_process_memory(const struct process *process, UINT64 addr, void *buf, size_t size) +{ + return ReadProcessMemory(process->handle, (void*)(UINT_PTR)addr, buf, size, NULL); +} + struct line_info { ULONG_PTR is_first : 1, @@ -560,7 +565,7 @@ void* (*find_runtime_function)(struct module*, DWORD64 addr); /* dwarf dedicated information */ - unsigned (*map_dwarf_register)(unsigned regno, BOOL eh_frame); + unsigned (*map_dwarf_register)(unsigned regno, const struct module* module, BOOL eh_frame); /* context related manipulation */ void * (*fetch_context_reg)(union ctx *ctx, unsigned regno, unsigned *size); @@ -601,6 +606,7 @@ extern void* fetch_buffer(struct process* pcs, unsigned size) DECLSPEC_HIDDEN; extern const char* wine_dbgstr_addr(const ADDRESS64* addr) DECLSPEC_HIDDEN; extern struct cpu* cpu_find(DWORD) DECLSPEC_HIDDEN; +extern const WCHAR *process_getenv(const struct process *process, const WCHAR *name); extern DWORD calc_crc32(HANDLE handle) DECLSPEC_HIDDEN; /* elf_module.c */ @@ -666,7 +672,8 @@ PCSTR full_path, enum module_type type, const GUID* guid, DWORD dw1, DWORD dw2, WCHAR *buffer, BOOL* is_unmatched) DECLSPEC_HIDDEN; extern WCHAR *get_dos_file_name(const WCHAR *filename) DECLSPEC_HIDDEN; -extern BOOL search_dll_path(const WCHAR *name, BOOL (*match)(void*, HANDLE, const WCHAR*), void *param) DECLSPEC_HIDDEN; +extern BOOL search_dll_path(const struct process* process, const WCHAR *name, + BOOL (*match)(void*, HANDLE, const WCHAR*), void *param) DECLSPEC_HIDDEN; extern BOOL search_unix_path(const WCHAR *name, const char *path, BOOL (*match)(void*, HANDLE, const WCHAR*), void *param) DECLSPEC_HIDDEN; extern const WCHAR* file_name(const WCHAR* str) DECLSPEC_HIDDEN; extern const char* file_nameA(const char* str) DECLSPEC_HIDDEN; @@ -694,7 +701,7 @@ BOOL is_public, BOOL is_global, unsigned char other, struct symt_compiland* compiland, void* user); extern BOOL stabs_parse(struct module* module, ULONG_PTR load_offset, - const char* stabs, int stablen, + const char* stabs, size_t nstab, size_t stabsize, const char* strs, int strtablen, stabs_def_cb callback, void* user) DECLSPEC_HIDDEN; @@ -716,7 +723,7 @@ extern const char* symt_get_name(const struct symt* sym) DECLSPEC_HIDDEN; extern WCHAR* symt_get_nameW(const struct symt* sym) DECLSPEC_HIDDEN; extern BOOL symt_get_address(const struct symt* type, ULONG64* addr) DECLSPEC_HIDDEN; -extern int symt_cmp_addr(const void* p1, const void* p2) DECLSPEC_HIDDEN; +extern int __cdecl symt_cmp_addr(const void* p1, const void* p2) DECLSPEC_HIDDEN; extern void copy_symbolW(SYMBOL_INFOW* siw, const SYMBOL_INFO* si) DECLSPEC_HIDDEN; extern struct symt_ht* symt_find_nearest(struct module* module, DWORD_PTR addr) DECLSPEC_HIDDEN; diff -Nru wine-development-5.5/dlls/dbghelp/dwarf.c wine-development-5.6/dlls/dbghelp/dwarf.c --- wine-development-5.5/dlls/dbghelp/dwarf.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/dwarf.c 2020-04-10 18:54:32.000000000 +0000 @@ -22,30 +22,14 @@ #define NONAMELESSUNION -#include "config.h" - #include -#include -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef HAVE_SYS_MMAN_H -#include -#endif #include #include #include -#ifdef HAVE_UNISTD_H -# include -#endif #include #include #include -#ifdef HAVE_ZLIB -#include -#endif - #include "windef.h" #include "winternl.h" #include "winbase.h" @@ -55,6 +39,7 @@ #include "dbghelp_private.h" #include "image_private.h" +#include "zlib.h" #include "wine/debug.h" @@ -648,18 +633,18 @@ #define Wine_DW_no_register 0x7FFFFFFF -static unsigned dwarf2_map_register(int regno) +static unsigned dwarf2_map_register(int regno, const struct module* module) { if (regno == Wine_DW_no_register) { FIXME("What the heck map reg 0x%x\n",regno); return 0; } - return dbghelp_current_cpu->map_dwarf_register(regno, FALSE); + return dbghelp_current_cpu->map_dwarf_register(regno, module, FALSE); } static enum location_error -compute_location(dwarf2_traverse_context_t* ctx, struct location* loc, +compute_location(const struct module *module, dwarf2_traverse_context_t* ctx, struct location* loc, HANDLE hproc, const struct location* frame) { DWORD_PTR tmp, stack[64]; @@ -686,7 +671,7 @@ */ if (!piece_found) { - DWORD cvreg = dwarf2_map_register(op - DW_OP_reg0); + DWORD cvreg = dwarf2_map_register(op - DW_OP_reg0, module); if (loc->reg != Wine_DW_no_register) FIXME("Only supporting one reg (%s/%d -> %s/%d)\n", dbghelp_current_cpu->fetch_regname(loc->reg), loc->reg, @@ -703,7 +688,7 @@ */ if (!piece_found) { - DWORD cvreg = dwarf2_map_register(op - DW_OP_breg0); + DWORD cvreg = dwarf2_map_register(op - DW_OP_breg0, module); if (loc->reg != Wine_DW_no_register) FIXME("Only supporting one breg (%s/%d -> %s/%d)\n", dbghelp_current_cpu->fetch_regname(loc->reg), loc->reg, @@ -733,7 +718,7 @@ case DW_OP_pick: stack[stk + 1] = stack[stk - dwarf2_parse_byte(ctx)]; stk++; break; case DW_OP_swap: tmp = stack[stk]; stack[stk] = stack[stk-1]; stack[stk-1] = tmp; break; case DW_OP_rot: tmp = stack[stk]; stack[stk] = stack[stk-1]; stack[stk-1] = stack[stk-2]; stack[stk-2] = tmp; break; - case DW_OP_abs: stack[stk] = labs(stack[stk]); break; + case DW_OP_abs: stack[stk] = sizeof(stack[stk]) == 8 ? llabs((INT64)stack[stk]) : abs((INT32)stack[stk]); break; case DW_OP_neg: stack[stk] = -stack[stk]; break; case DW_OP_not: stack[stk] = ~stack[stk]; break; case DW_OP_and: stack[stk-1] &= stack[stk]; stk--; break; @@ -755,14 +740,17 @@ case DW_OP_eq: stack[stk-1] = (stack[stk-1] == stack[stk]); stk--; break; case DW_OP_ne: stack[stk-1] = (stack[stk-1] != stack[stk]); stk--; break; case DW_OP_skip: tmp = dwarf2_parse_u2(ctx); ctx->data += tmp; break; - case DW_OP_bra: tmp = dwarf2_parse_u2(ctx); if (!stack[stk--]) ctx->data += tmp; break; + case DW_OP_bra: + tmp = dwarf2_parse_u2(ctx); + if (!stack[stk--]) ctx->data += tmp; + break; case DW_OP_regx: tmp = dwarf2_leb128_as_unsigned(ctx); if (!piece_found) { if (loc->reg != Wine_DW_no_register) FIXME("Only supporting one reg\n"); - loc->reg = dwarf2_map_register(tmp); + loc->reg = dwarf2_map_register(tmp, module); } loc->kind = loc_register; break; @@ -770,7 +758,7 @@ tmp = dwarf2_leb128_as_unsigned(ctx); if (loc->reg != Wine_DW_no_register) FIXME("Only supporting one regx\n"); - loc->reg = dwarf2_map_register(tmp); + loc->reg = dwarf2_map_register(tmp, module); stack[++stk] = dwarf2_leb128_as_signed(ctx); loc->kind = loc_regrel; break; @@ -929,7 +917,7 @@ lctx.end_data = xloc.u.block.ptr + xloc.u.block.size; lctx.word_size = ctx->module->format_info[DFI_DWARF]->u.dwarf2_info->word_size; - err = compute_location(&lctx, loc, NULL, frame); + err = compute_location(ctx->module, &lctx, loc, NULL, frame); if (err < 0) { loc->kind = loc_error; @@ -942,7 +930,7 @@ *ptr = xloc.u.block.size; memcpy(ptr + 1, xloc.u.block.ptr, xloc.u.block.size); loc->offset = (ULONG_PTR)ptr; - compute_location(&lctx, loc, NULL, frame); + compute_location(ctx->module, &lctx, loc, NULL, frame); } } return TRUE; @@ -2527,7 +2515,7 @@ modfmt->u.dwarf2_info->debug_loc.address + pframe->offset, ip, &lctx)) return loc_err_out_of_scope; - if ((err = compute_location(&lctx, frame, pcs->handle, NULL)) < 0) return err; + if ((err = compute_location(modfmt->module, &lctx, frame, pcs->handle, NULL)) < 0) return err; if (frame->kind >= loc_user) { WARN("Couldn't compute runtime frame location\n"); @@ -2781,7 +2769,7 @@ return (reg < NB_FRAME_REGS); } -static void execute_cfa_instructions(dwarf2_traverse_context_t* ctx, +static void execute_cfa_instructions(struct module* module, dwarf2_traverse_context_t* ctx, ULONG_PTR last_ip, struct frame_info *info) { while (ctx->data < ctx->end_data && info->ip <= last_ip + info->signal_frame) @@ -2806,7 +2794,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, TRUE)), + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, module, TRUE)), offset); info->state.regs[reg] = offset; info->state.rules[reg] = RULE_CFA_OFFSET; @@ -2818,7 +2806,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, TRUE))); + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, module, TRUE))); info->state.rules[reg] = RULE_UNSET; break; } @@ -2865,7 +2853,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, TRUE)), + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, module, TRUE)), offset); info->state.regs[reg] = offset; info->state.rules[reg] = RULE_CFA_OFFSET; @@ -2877,7 +2865,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, TRUE))); + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, module, TRUE))); info->state.rules[reg] = RULE_UNSET; break; } @@ -2887,7 +2875,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, TRUE))); + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, module, TRUE))); info->state.rules[reg] = RULE_UNDEFINED; break; } @@ -2897,7 +2885,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, TRUE))); + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, module, TRUE))); info->state.regs[reg] = reg; info->state.rules[reg] = RULE_SAME; break; @@ -2909,8 +2897,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, TRUE)), - dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg2, TRUE))); + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, module, TRUE)), + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg2, module, TRUE))); info->state.regs[reg] = reg2; info->state.rules[reg] = RULE_OTHER_REG; break; @@ -2938,7 +2926,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, TRUE)), + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, module, TRUE)), offset); info->state.cfa_reg = reg; info->state.cfa_offset = offset; @@ -2951,7 +2939,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, TRUE))); + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, module, TRUE))); info->state.cfa_reg = reg; info->state.cfa_rule = RULE_CFA_OFFSET; break; @@ -2985,7 +2973,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, TRUE)), + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg, module, TRUE)), expr, expr + len); info->state.regs[reg] = expr; info->state.rules[reg] = (op == DW_CFA_expression) ? RULE_EXPRESSION : RULE_VAL_EXPRESSION; @@ -3008,10 +2996,10 @@ } /* retrieve a context register from its dwarf number */ -static DWORD64 get_context_reg(struct cpu_stack_walk *csw, union ctx *context, +static DWORD64 get_context_reg(const struct module* module, struct cpu_stack_walk *csw, union ctx *context, ULONG_PTR dw_reg) { - unsigned regno = csw->cpu->map_dwarf_register(dw_reg, TRUE), sz; + unsigned regno = csw->cpu->map_dwarf_register(dw_reg, module, TRUE), sz; void* ptr = csw->cpu->fetch_context_reg(context, regno, &sz); if (sz == 8) @@ -3024,10 +3012,10 @@ } /* set a context register from its dwarf number */ -static void set_context_reg(struct cpu_stack_walk* csw, union ctx *context, +static void set_context_reg(const struct module* module, struct cpu_stack_walk* csw, union ctx *context, ULONG_PTR dw_reg, ULONG_PTR val, BOOL isdebuggee) { - unsigned regno = csw->cpu->map_dwarf_register(dw_reg, TRUE), sz; + unsigned regno = csw->cpu->map_dwarf_register(dw_reg, module, TRUE), sz; ULONG_PTR* ptr = csw->cpu->fetch_context_reg(context, regno, &sz); if (isdebuggee) @@ -3058,12 +3046,12 @@ } /* copy a register from one context to another using dwarf number */ -static void copy_context_reg(struct cpu_stack_walk *csw, +static void copy_context_reg(const struct module* module, struct cpu_stack_walk *csw, union ctx *dstcontext, ULONG_PTR dwregdst, union ctx *srccontext, ULONG_PTR dwregsrc) { - unsigned regdstno = csw->cpu->map_dwarf_register(dwregdst, TRUE), szdst; - unsigned regsrcno = csw->cpu->map_dwarf_register(dwregsrc, TRUE), szsrc; + unsigned regdstno = csw->cpu->map_dwarf_register(dwregdst, module, TRUE), szdst; + unsigned regsrcno = csw->cpu->map_dwarf_register(dwregsrc, module, TRUE), szsrc; ULONG_PTR* ptrdst = csw->cpu->fetch_context_reg(dstcontext, regdstno, &szdst); ULONG_PTR* ptrsrc = csw->cpu->fetch_context_reg(srccontext, regsrcno, &szsrc); @@ -3098,9 +3086,9 @@ if (opcode >= DW_OP_lit0 && opcode <= DW_OP_lit31) stack[++sp] = opcode - DW_OP_lit0; else if (opcode >= DW_OP_reg0 && opcode <= DW_OP_reg31) - stack[++sp] = get_context_reg(csw, context, opcode - DW_OP_reg0); + stack[++sp] = get_context_reg(module, csw, context, opcode - DW_OP_reg0); else if (opcode >= DW_OP_breg0 && opcode <= DW_OP_breg31) - stack[++sp] = get_context_reg(csw, context, opcode - DW_OP_breg0) + stack[++sp] = get_context_reg(module, csw, context, opcode - DW_OP_breg0) + dwarf2_leb128_as_signed(&ctx); else switch (opcode) { @@ -3131,7 +3119,7 @@ case DW_OP_pick: stack[sp + 1] = stack[sp - dwarf2_parse_byte(&ctx)]; sp++; break; case DW_OP_swap: tmp = stack[sp]; stack[sp] = stack[sp-1]; stack[sp-1] = tmp; break; case DW_OP_rot: tmp = stack[sp]; stack[sp] = stack[sp-1]; stack[sp-1] = stack[sp-2]; stack[sp-2] = tmp; break; - case DW_OP_abs: stack[sp] = labs(stack[sp]); break; + case DW_OP_abs: stack[sp] = sizeof(stack[sp]) == 8 ? llabs((INT64)stack[sp]) : abs((INT32)stack[sp]); break; case DW_OP_neg: stack[sp] = -stack[sp]; break; case DW_OP_not: stack[sp] = ~stack[sp]; break; case DW_OP_and: stack[sp-1] &= stack[sp]; sp--; break; @@ -3159,12 +3147,12 @@ stack[++sp] = dwarf2_parse_augmentation_ptr(&ctx, tmp); break; case DW_OP_regx: - stack[++sp] = get_context_reg(csw, context, dwarf2_leb128_as_unsigned(&ctx)); + stack[++sp] = get_context_reg(module, csw, context, dwarf2_leb128_as_unsigned(&ctx)); break; case DW_OP_bregx: reg = dwarf2_leb128_as_unsigned(&ctx); tmp = dwarf2_leb128_as_signed(&ctx); - stack[++sp] = get_context_reg(csw, context, reg) + tmp; + stack[++sp] = get_context_reg(module, csw, context, reg) + tmp; break; case DW_OP_deref_size: sz = dwarf2_parse_byte(&ctx); @@ -3211,7 +3199,7 @@ *cfa = eval_expression(module, csw, (const unsigned char*)state->cfa_offset, context); break; default: - *cfa = get_context_reg(csw, context, state->cfa_reg) + state->cfa_offset; + *cfa = get_context_reg(module, csw, context, state->cfa_reg) + state->cfa_offset; break; } if (!*cfa) return; @@ -3225,18 +3213,18 @@ case RULE_SAME: break; case RULE_CFA_OFFSET: - set_context_reg(csw, &new_context, i, *cfa + state->regs[i], TRUE); + set_context_reg(module, csw, &new_context, i, *cfa + state->regs[i], TRUE); break; case RULE_OTHER_REG: - copy_context_reg(csw, &new_context, i, context, state->regs[i]); + copy_context_reg(module, csw, &new_context, i, context, state->regs[i]); break; case RULE_EXPRESSION: value = eval_expression(module, csw, (const unsigned char*)state->regs[i], context); - set_context_reg(csw, &new_context, i, value, TRUE); + set_context_reg(module, csw, &new_context, i, value, TRUE); break; case RULE_VAL_EXPRESSION: value = eval_expression(module, csw, (const unsigned char*)state->regs[i], context); - set_context_reg(csw, &new_context, i, value, FALSE); + set_context_reg(module, csw, &new_context, i, value, FALSE); break; } } @@ -3288,11 +3276,11 @@ TRACE("function %lx/%lx code_align %lu data_align %ld retaddr %s\n", ip, info.ip, info.code_align, info.data_align, - csw->cpu->fetch_regname(csw->cpu->map_dwarf_register(info.retaddr_reg, TRUE))); + csw->cpu->fetch_regname(csw->cpu->map_dwarf_register(info.retaddr_reg, pair.effective, TRUE))); /* if at very beginning of function, return and use default unwinder */ if (ip == info.ip) return FALSE; - execute_cfa_instructions(&cie_ctx, ip, &info); + execute_cfa_instructions(pair.effective, &cie_ctx, ip, &info); if (info.aug_z_format) /* get length of augmentation data */ { @@ -3303,7 +3291,7 @@ dwarf2_parse_augmentation_ptr(&fde_ctx, info.lsda_encoding); /* handler_data */ if (end) fde_ctx.data = end; - execute_cfa_instructions(&fde_ctx, ip, &info); + execute_cfa_instructions(pair.effective, &fde_ctx, ip, &info); /* if there is no information about retaddr, use default unwinder */ if (info.state.rules[info.retaddr_reg] == RULE_UNSET) return FALSE; @@ -3356,7 +3344,7 @@ } do_compute: /* now get the variable */ - err = compute_location(&lctx, loc, pcs->handle, &frame); + err = compute_location(modfmt->module, &lctx, loc, pcs->handle, &frame); break; case loc_register: case loc_regrel: @@ -3375,7 +3363,6 @@ } } -#ifdef HAVE_ZLIB static void *zalloc(void *priv, uInt items, uInt sz) { return HeapAlloc(GetProcessHeap(), 0, items * sz); @@ -3457,8 +3444,6 @@ return ret; } -#endif - static inline BOOL dwarf2_init_section(dwarf2_section_t* section, struct image_file_map* fmap, const char* sectname, const char* zsectname, struct image_section_map* ism) @@ -3482,11 +3467,7 @@ if (zsectname && image_find_section(fmap, zsectname, ism)) { -#ifdef HAVE_ZLIB return dwarf2_init_zsection(section, zsectname, ism); -#else - FIXME("dbghelp not built with zlib, but compressed section found\n" ); -#endif } return FALSE; diff -Nru wine-development-5.5/dlls/dbghelp/elf_module.c wine-development-5.6/dlls/dbghelp/elf_module.c --- wine-development-5.5/dlls/dbghelp/elf_module.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/elf_module.c 2020-04-10 18:54:32.000000000 +0000 @@ -19,81 +19,21 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - -#if defined(__svr4__) || defined(__sun) -#define __ELF__ 1 -/* large files are not supported by libelf */ -#undef _FILE_OFFSET_BITS -#define _FILE_OFFSET_BITS 32 -#endif - #include #include #include #include "dbghelp_private.h" -#include "winternl.h" - #include "image_private.h" +#include "winternl.h" #include "wine/debug.h" #include "wine/heap.h" -#ifdef __ELF__ - #define ELF_INFO_DEBUG_HEADER 0x0001 #define ELF_INFO_MODULE 0x0002 #define ELF_INFO_NAME 0x0004 -#ifndef NT_GNU_BUILD_ID -#define NT_GNU_BUILD_ID 3 -#endif - -#ifndef HAVE_STRUCT_R_DEBUG -struct r_debug -{ - int r_version; - struct link_map *r_map; - ElfW(Addr) r_brk; - enum - { - RT_CONSISTENT, - RT_ADD, - RT_DELETE - } r_state; - ElfW(Addr) r_ldbase; -}; -#endif /* HAVE_STRUCT_R_DEBUG */ - -struct r_debug32 -{ - int r_version; - DWORD r_map; - Elf32_Addr r_brk; - int r_state; - Elf32_Addr r_ldbase; -}; - -#ifndef HAVE_STRUCT_LINK_MAP -struct link_map -{ - ElfW(Addr) l_addr; - char *l_name; - ElfW(Dyn) *l_ld; - struct link_map *l_next, *l_prev; -}; -#endif /* HAVE_STRUCT_LINK_MAP */ - -struct link_map32 -{ - Elf32_Addr l_addr; - DWORD l_name; - DWORD l_ld; - DWORD l_next, l_prev; -}; - WINE_DEFAULT_DEBUG_CHANNEL(dbghelp); struct elf_info @@ -104,10 +44,30 @@ const WCHAR* module_name; /* OUT found module name (if ELF_INFO_NAME is set) */ }; +struct elf_sym32 +{ + UINT32 st_name; /* Symbol name (string tbl index) */ + UINT32 st_value; /* Symbol value */ + UINT32 st_size; /* Symbol size */ + UINT8 st_info; /* Symbol type and binding */ + UINT8 st_other; /* Symbol visibility */ + UINT16 st_shndx; /* Section index */ +}; + +struct elf_sym +{ + UINT32 st_name; /* Symbol name (string tbl index) */ + UINT8 st_info; /* Symbol type and binding */ + UINT8 st_other; /* Symbol visibility */ + UINT16 st_shndx; /* Section index */ + UINT64 st_value; /* Symbol value */ + UINT64 st_size; /* Symbol size */ +}; + struct symtab_elt { struct hash_table_elt ht_elt; - Elf64_Sym sym; + struct elf_sym sym; struct symt_compiland* compiland; unsigned used; }; @@ -128,6 +88,39 @@ struct image_file_map file_map; }; +/* Legal values for sh_type (section type). */ +#define ELF_SHT_NULL 0 /* Section header table entry unused */ +#define ELF_SHT_PROGBITS 1 /* Program data */ +#define ELF_SHT_SYMTAB 2 /* Symbol table */ +#define ELF_SHT_STRTAB 3 /* String table */ +#define ELF_SHT_RELA 4 /* Relocation entries with addends */ +#define ELF_SHT_HASH 5 /* Symbol hash table */ +#define ELF_SHT_DYNAMIC 6 /* Dynamic linking information */ +#define ELF_SHT_NOTE 7 /* Notes */ +#define ELF_SHT_NOBITS 8 /* Program space with no data (bss) */ +#define ELF_SHT_REL 9 /* Relocation entries, no addends */ +#define ELF_SHT_SHLIB 10 /* Reserved */ +#define ELF_SHT_DYNSYM 11 /* Dynamic linker symbol table */ +#define ELF_SHT_INIT_ARRAY 14 /* Array of constructors */ +#define ELF_SHT_FINI_ARRAY 15 /* Array of destructors */ +#define ELF_SHT_PREINIT_ARRAY 16 /* Array of pre-constructors */ +#define ELF_SHT_GROUP 17 /* Section group */ +#define ELF_SHT_SYMTAB_SHNDX 18 /* Extended section indeces */ +#define ELF_SHT_NUM 19 /* Number of defined types. */ + +/* Legal values for ST_TYPE subfield of st_info (symbol type). */ +#define ELF_STT_NOTYPE 0 /* Symbol type is unspecified */ +#define ELF_STT_OBJECT 1 /* Symbol is a data object */ +#define ELF_STT_FUNC 2 /* Symbol is a code object */ +#define ELF_STT_SECTION 3 /* Symbol associated with a section */ +#define ELF_STT_FILE 4 /* Symbol's name is file name */ + +#define ELF_PT_LOAD 1 /* Loadable program segment */ + +#define ELF_DT_DEBUG 21 /* For debugging; unspecified */ + +#define ELF_AT_SYSINFO_EHDR 33 + /****************************************************************** * elf_map_section * @@ -141,7 +134,7 @@ assert(ism->fmap->modtype == DMT_ELF); if (ism->sidx < 0 || ism->sidx >= ism->fmap->u.elf.elfhdr.e_shnum || - fmap->sect[ism->sidx].shdr.sh_type == SHT_NOBITS) + fmap->sect[ism->sidx].shdr.sh_type == ELF_SHT_NOBITS) return IMAGE_NO_MAP; if (fmap->target_copy) @@ -340,7 +333,7 @@ }; static BOOL elf_map_file_read(struct image_file_map* fmap, struct elf_map_file_data* emfd, - void* buf, size_t len, off_t off) + void* buf, size_t len, size_t off) { LARGE_INTEGER li; DWORD bytes_read; @@ -367,10 +360,22 @@ { if (fmap->addr_size == 32) { - Elf32_Shdr shdr32; + struct + { + UINT32 sh_name; /* Section name (string tbl index) */ + UINT32 sh_type; /* Section type */ + UINT32 sh_flags; /* Section flags */ + UINT32 sh_addr; /* Section virtual addr at execution */ + UINT32 sh_offset; /* Section file offset */ + UINT32 sh_size; /* Section size in bytes */ + UINT32 sh_link; /* Link to another section */ + UINT32 sh_info; /* Additional section information */ + UINT32 sh_addralign; /* Section alignment */ + UINT32 sh_entsize; /* Entry size if section holds table */ + } shdr32; if (!elf_map_file_read(fmap, emfd, &shdr32, sizeof(shdr32), - fmap->u.elf.elfhdr.e_shoff + i * sizeof(Elf32_Shdr))) + fmap->u.elf.elfhdr.e_shoff + i * sizeof(shdr32))) return FALSE; fmap->u.elf.sect[i].shdr.sh_name = shdr32.sh_name; @@ -387,7 +392,7 @@ else { if (!elf_map_file_read(fmap, emfd, &fmap->u.elf.sect[i].shdr, sizeof(fmap->u.elf.sect[i].shdr), - fmap->u.elf.elfhdr.e_shoff + i * sizeof(Elf64_Shdr))) + fmap->u.elf.elfhdr.e_shoff + i * sizeof(fmap->u.elf.sect[i].shdr))) return FALSE; } return TRUE; @@ -400,11 +405,10 @@ */ static BOOL elf_map_file(struct elf_map_file_data* emfd, struct image_file_map* fmap) { - static const BYTE elf_signature[4] = { ELFMAG0, ELFMAG1, ELFMAG2, ELFMAG3 }; unsigned int i; size_t tmp, page_mask = sysinfo.dwPageSize - 1; WCHAR *dos_path; - unsigned char e_ident[EI_NIDENT]; + unsigned char e_ident[ARRAY_SIZE(fmap->u.elf.elfhdr.e_ident)]; elf_reset_file_map(fmap); @@ -432,19 +436,35 @@ return FALSE; /* and check for an ELF header */ - if (memcmp(e_ident, elf_signature, sizeof(elf_signature))) + if (memcmp(e_ident, "\177ELF", 4)) return FALSE; - fmap->addr_size = e_ident[EI_CLASS] == ELFCLASS64 ? 64 : 32; + fmap->addr_size = e_ident[4] == 2 /* ELFCLASS64 */ ? 64 : 32; if (fmap->addr_size == 32) { - Elf32_Ehdr elfhdr32; + struct + { + UINT8 e_ident[16]; /* Magic number and other info */ + UINT16 e_type; /* Object file type */ + UINT16 e_machine; /* Architecture */ + UINT32 e_version; /* Object file version */ + UINT32 e_entry; /* Entry point virtual address */ + UINT32 e_phoff; /* Program header table file offset */ + UINT32 e_shoff; /* Section header table file offset */ + UINT32 e_flags; /* Processor-specific flags */ + UINT16 e_ehsize; /* ELF header size in bytes */ + UINT16 e_phentsize; /* Program header table entry size */ + UINT16 e_phnum; /* Program header table entry count */ + UINT16 e_shentsize; /* Section header table entry size */ + UINT16 e_shnum; /* Section header table entry count */ + UINT16 e_shstrndx; /* Section header string table index */ + } elfhdr32; if (!elf_map_file_read(fmap, emfd, &elfhdr32, sizeof(elfhdr32), 0)) return FALSE; - memcpy(fmap->u.elf.elfhdr.e_ident, elfhdr32.e_ident, EI_NIDENT); + memcpy(fmap->u.elf.elfhdr.e_ident, elfhdr32.e_ident, sizeof(e_ident)); fmap->u.elf.elfhdr.e_type = elfhdr32.e_type; fmap->u.elf.elfhdr.e_machine = elfhdr32.e_machine; fmap->u.elf.elfhdr.e_version = elfhdr32.e_version; @@ -487,11 +507,21 @@ { if (fmap->addr_size == 32) { - Elf32_Phdr phdr; + struct + { + UINT32 p_type; /* Segment type */ + UINT32 p_offset; /* Segment file offset */ + UINT32 p_vaddr; /* Segment virtual address */ + UINT32 p_paddr; /* Segment physical address */ + UINT32 p_filesz; /* Segment size in file */ + UINT32 p_memsz; /* Segment size in memory */ + UINT32 p_flags; /* Segment flags */ + UINT32 p_align; /* Segment alignment */ + } phdr; if (elf_map_file_read(fmap, emfd, &phdr, sizeof(phdr), fmap->u.elf.elfhdr.e_phoff + i * sizeof(phdr)) && - phdr.p_type == PT_LOAD) + phdr.p_type == ELF_PT_LOAD) { tmp = (phdr.p_vaddr + phdr.p_memsz + page_mask) & ~page_mask; if (fmap->u.elf.elf_size < tmp) fmap->u.elf.elf_size = tmp; @@ -500,11 +530,21 @@ } else { - Elf64_Phdr phdr; + struct + { + UINT32 p_type; /* Segment type */ + UINT32 p_flags; /* Segment flags */ + UINT64 p_offset; /* Segment file offset */ + UINT64 p_vaddr; /* Segment virtual address */ + UINT64 p_paddr; /* Segment physical address */ + UINT64 p_filesz; /* Segment size in file */ + UINT64 p_memsz; /* Segment size in memory */ + UINT64 p_align; /* Segment alignment */ + } phdr; if (elf_map_file_read(fmap, emfd, &phdr, sizeof(phdr), fmap->u.elf.elfhdr.e_phoff + i * sizeof(phdr)) && - phdr.p_type == PT_LOAD) + phdr.p_type == ELF_PT_LOAD) { tmp = (phdr.p_vaddr + phdr.p_memsz + page_mask) & ~page_mask; if (fmap->u.elf.elf_size < tmp) fmap->u.elf.elf_size = tmp; @@ -590,8 +630,8 @@ struct image_section_map ism, ism_str; const char *symtab; - if (!elf_find_section_type(fmap, ".symtab", SHT_SYMTAB, &ism) && - !elf_find_section_type(fmap, ".dynsym", SHT_DYNSYM, &ism)) return; + if (!elf_find_section_type(fmap, ".symtab", ELF_SHT_SYMTAB, &ism) && + !elf_find_section_type(fmap, ".dynsym", ELF_SHT_DYNSYM, &ism)) return; if ((symtab = image_map_section(&ism)) == IMAGE_NO_MAP) return; ism_str.fmap = ism.fmap; ism_str.sidx = fmap->u.elf.sect[ism.sidx].shdr.sh_link; @@ -602,18 +642,19 @@ } nsym = image_get_map_size(&ism) / - (fmap->addr_size == 32 ? sizeof(Elf32_Sym) : sizeof(Elf64_Sym)); + (fmap->addr_size == 32 ? sizeof(struct elf_sym32) : sizeof(struct elf_sym)); for (j = 0; thunks[j].symname; j++) thunks[j].rva_start = thunks[j].rva_end = 0; for (i = 0; i < nsym; i++) { - Elf64_Sym sym; + struct elf_sym sym; + unsigned int type; if (fmap->addr_size == 32) { - Elf32_Sym *sym32 = &((Elf32_Sym *)symtab)[i]; + struct elf_sym32 *sym32 = &((struct elf_sym32 *)symtab)[i]; sym.st_name = sym32->st_name; sym.st_value = sym32->st_value; @@ -623,16 +664,15 @@ sym.st_shndx = sym32->st_shndx; } else - sym = ((Elf64_Sym *)symtab)[i]; + sym = ((struct elf_sym *)symtab)[i]; + + type = sym.st_info & 0xf; /* Ignore certain types of entries which really aren't of that much * interest. */ - if ((ELF32_ST_TYPE(sym.st_info) != STT_NOTYPE && - ELF32_ST_TYPE(sym.st_info) != STT_FILE && - ELF32_ST_TYPE(sym.st_info) != STT_OBJECT && - ELF32_ST_TYPE(sym.st_info) != STT_FUNC) || - sym.st_shndx == SHN_UNDEF) + if ((type != ELF_STT_NOTYPE && type != ELF_STT_FILE && type != ELF_STT_OBJECT && type != ELF_STT_FUNC) + || !sym.st_shndx) { continue; } @@ -640,16 +680,16 @@ symname = strp + sym.st_name; /* handle some specific symtab (that we'll throw away when done) */ - switch (ELF32_ST_TYPE(sym.st_info)) + switch (type) { - case STT_FILE: + case ELF_STT_FILE: if (symname) compiland = symt_new_compiland(module, sym.st_value, source_new(module, NULL, symname)); else compiland = NULL; continue; - case STT_NOTYPE: + case ELF_STT_NOTYPE: /* we are only interested in wine markers inserted by winebuild */ for (j = 0; thunks[j].symname; j++) { @@ -706,9 +746,9 @@ * * lookup a symbol by name in our internal hash table for the symtab */ -static const Elf64_Sym *elf_lookup_symtab(const struct module* module, - const struct hash_table* ht_symtab, - const char* name, const struct symt* compiland) +static const struct elf_sym *elf_lookup_symtab(const struct module* module, + const struct hash_table* ht_symtab, + const char* name, const struct symt* compiland) { struct symtab_elt* weak_result = NULL; /* without compiland name */ struct symtab_elt* result = NULL; @@ -769,6 +809,11 @@ return &result->sym; } +static BOOL elf_is_local_symbol(unsigned int info) +{ + return !(info >> 4); +} + /****************************************************************** * elf_finish_stabs_info * @@ -780,7 +825,7 @@ struct hash_table_iter hti; void* ptr; struct symt_ht* sym; - const Elf64_Sym* symp; + const struct elf_sym* symp; struct elf_module_info* elf_info = module->format_info[DFI_ELF]->u.elf_info; hash_table_iter_init(&module->ht_symbols, &hti, NULL); @@ -835,7 +880,7 @@ ((struct symt_function*)sym)->address, wine_dbgstr_longlong(elf_info->elf_addr + symp->st_value)); ((struct symt_data*)sym)->u.var.offset = elf_info->elf_addr + symp->st_value; - ((struct symt_data*)sym)->kind = (ELF32_ST_BIND(symp->st_info) == STB_LOCAL) ? + ((struct symt_data*)sym)->kind = elf_is_local_symbol(symp->st_info) ? DataIsFileStatic : DataIsGlobal; } else FIXME("Couldn't find %s!%s\n", @@ -894,18 +939,18 @@ * used yet (ie we have no debug information on them) * That's the case, for example, of the .spec.c files */ - switch (ELF32_ST_TYPE(ste->sym.st_info)) + switch (ste->sym.st_info & 0xf) { - case STT_FUNC: + case ELF_STT_FUNC: symt_new_function(module, ste->compiland, ste->ht_elt.name, addr, ste->sym.st_size, NULL); break; - case STT_OBJECT: + case ELF_STT_OBJECT: loc.kind = loc_absolute; loc.reg = 0; loc.offset = addr; symt_new_global_variable(module, ste->compiland, ste->ht_elt.name, - ELF32_ST_BIND(ste->sym.st_info) == STB_LOCAL, + elf_is_local_symbol(ste->sym.st_info), loc, ste->sym.st_size, NULL); break; default: @@ -1007,7 +1052,7 @@ { /* OK, now just parse all of the stabs. */ lret = stabs_parse(module, module->format_info[DFI_ELF]->u.elf_info->elf_addr, - stab, image_get_map_size(&stab_sect), + stab, image_get_map_size(&stab_sect) / sizeof(struct stab_nlist), sizeof(struct stab_nlist), stabstr, image_get_map_size(&stabstr_sect), NULL, NULL); if (lret) @@ -1023,8 +1068,8 @@ lret = dwarf2_parse(module, module->reloc_delta, thunks, fmap); ret = ret || lret; } - if (strstrW(module->module.ModuleName, S_ElfW) || - !strcmpW(module->module.ModuleName, S_WineLoaderW)) + if (wcsstr(module->module.ModuleName, S_ElfW) || + !wcscmp(module->module.ModuleName, S_WineLoaderW)) { /* add the thunks for native libraries */ if (!(dbghelp_options & SYMOPT_PUBLICS_ONLY)) @@ -1094,7 +1139,7 @@ { struct image_section_map ism; - if (elf_find_section_type(fmap, ".dynamic", SHT_DYNAMIC, &ism)) + if (elf_find_section_type(fmap, ".dynamic", ELF_SHT_DYNAMIC, &ism)) { char* ptr = (char*)(ULONG_PTR)fmap->u.elf.sect[ism.sidx].shdr.sh_addr; ULONG_PTR len; @@ -1103,16 +1148,20 @@ if (fmap->addr_size == 32) { - Elf32_Dyn dyn; + struct + { + INT32 d_tag; /* Dynamic entry type */ + UINT32 d_val; /* Integer or address value */ + } dyn; do { if (!ReadProcessMemory(pcs->handle, ptr, &dyn, sizeof(dyn), &len) || len != sizeof(dyn)) return ret; - if (dyn.d_tag == DT_DEBUG) + if (dyn.d_tag == ELF_DT_DEBUG) { - elf_info->dbg_hdr_addr = dyn.d_un.d_ptr; + elf_info->dbg_hdr_addr = dyn.d_val; if (load_offset == 0 && dyn_addr == 0) /* likely the case */ /* Assume this module (the Wine loader) has been * loaded at its preferred address */ @@ -1120,21 +1169,25 @@ break; } ptr += sizeof(dyn); - } while (dyn.d_tag != DT_NULL); - if (dyn.d_tag == DT_NULL) return ret; + } while (dyn.d_tag); + if (!dyn.d_tag) return ret; } else { - Elf64_Dyn dyn; + struct + { + INT64 d_tag; /* Dynamic entry type */ + UINT64 d_val; /* Integer or address value */ + } dyn; do { if (!ReadProcessMemory(pcs->handle, ptr, &dyn, sizeof(dyn), &len) || len != sizeof(dyn)) return ret; - if (dyn.d_tag == DT_DEBUG) + if (dyn.d_tag == ELF_DT_DEBUG) { - elf_info->dbg_hdr_addr = dyn.d_un.d_ptr; + elf_info->dbg_hdr_addr = dyn.d_val; if (load_offset == 0 && dyn_addr == 0) /* likely the case */ /* Assume this module (the Wine loader) has been * loaded at its preferred address */ @@ -1142,8 +1195,8 @@ break; } ptr += sizeof(dyn); - } while (dyn.d_tag != DT_NULL); - if (dyn.d_tag == DT_NULL) return ret; + } while (dyn.d_tag); + if (!dyn.d_tag) return ret; } } elf_end_find(fmap); @@ -1156,7 +1209,7 @@ struct image_section_map ism; ULONG_PTR modbase = load_offset; - if (elf_find_section_type(fmap, ".dynamic", SHT_DYNAMIC, &ism)) + if (elf_find_section_type(fmap, ".dynamic", ELF_SHT_DYNAMIC, &ism)) { ULONG_PTR rva_dyn = elf_get_map_rva(&ism); @@ -1210,7 +1263,7 @@ ptr = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(filename) + 1) * sizeof(WCHAR)); if (ptr) { - strcpyW(ptr, filename); + lstrcpyW(ptr, filename); elf_info->module_name = ptr; } else ret = FALSE; @@ -1273,7 +1326,6 @@ return elf_load_file(load_file->process, filename, load_file->load_offset, load_file->dyn_addr, load_file->elf_info); } -#ifdef AT_SYSINFO_EHDR /****************************************************************** * elf_search_auxv * @@ -1283,9 +1335,9 @@ { char buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME]; SYMBOL_INFO*si = (SYMBOL_INFO*)buffer; - void* addr; - void* str; - void* str_max; + BYTE* addr; + BYTE* str; + BYTE* str_max; si->SizeOfStruct = sizeof(*si); si->MaxNameLen = MAX_SYM_NAME; @@ -1313,36 +1365,43 @@ if (pcs->is_64bit) { - Elf64_auxv_t auxv; + struct + { + UINT64 a_type; + UINT64 a_val; + } auxv; - while (ReadProcessMemory(pcs->handle, addr, &auxv, sizeof(auxv), NULL) && auxv.a_type != AT_NULL) + while (ReadProcessMemory(pcs->handle, addr, &auxv, sizeof(auxv), NULL) && auxv.a_type) { if (auxv.a_type == type) { - *val = auxv.a_un.a_val; + *val = auxv.a_val; return TRUE; } - addr = (void*)((DWORD_PTR)addr + sizeof(auxv)); + addr += sizeof(auxv); } } else { - Elf32_auxv_t auxv; + struct + { + UINT32 a_type; + UINT32 a_val; + } auxv; - while (ReadProcessMemory(pcs->handle, addr, &auxv, sizeof(auxv), NULL) && auxv.a_type != AT_NULL) + while (ReadProcessMemory(pcs->handle, addr, &auxv, sizeof(auxv), NULL) && auxv.a_type) { if (auxv.a_type == type) { - *val = auxv.a_un.a_val; + *val = auxv.a_val; return TRUE; } - addr = (void*)((DWORD_PTR)addr + sizeof(auxv)); + addr += sizeof(auxv); } } return FALSE; } -#endif /****************************************************************** * elf_search_and_load_file @@ -1365,7 +1424,7 @@ return module->module.SymType; } - if (strstrW(filename, S_libstdcPPW)) return FALSE; /* We know we can't do it */ + if (wcsstr(filename, S_libstdcPPW)) return FALSE; /* We know we can't do it */ ret = elf_load_file(pcs, filename, load_offset, dyn_addr, elf_info); /* if relative pathname, try some absolute base dirs */ if (!ret && filename == file_name(filename)) @@ -1376,9 +1435,8 @@ load_elf.dyn_addr = dyn_addr; load_elf.elf_info = elf_info; - ret = search_unix_path(filename, getenv("PATH"), elf_load_file_cb, &load_elf) - || search_unix_path(filename, getenv("LD_LIBRARY_PATH"), elf_load_file_cb, &load_elf) - || search_dll_path(filename, elf_load_file_cb, &load_elf); + ret = search_unix_path(filename, getenv("LD_LIBRARY_PATH"), elf_load_file_cb, &load_elf) + || search_dll_path(pcs, filename, elf_load_file_cb, &load_elf); } return ret; @@ -1398,16 +1456,27 @@ { WCHAR bufstrW[MAX_PATH]; char bufstr[256]; - void *lm_addr; + ULONG_PTR lm_addr; if (pcs->is_64bit) { - struct r_debug dbg_hdr; - struct link_map lm; + struct + { + UINT32 r_version; + UINT64 r_map; + UINT64 r_brk; + UINT32 r_state; + UINT64 r_ldbase; + } dbg_hdr; + struct + { + UINT64 l_addr; + UINT64 l_name; + UINT64 l_ld; + UINT64 l_next, l_prev; + } lm; - if (!pcs->dbg_hdr_addr || - !ReadProcessMemory(pcs->handle, (void*)pcs->dbg_hdr_addr, - &dbg_hdr, sizeof(dbg_hdr), NULL)) + if (!pcs->dbg_hdr_addr || !read_process_memory(pcs, pcs->dbg_hdr_addr, &dbg_hdr, sizeof(dbg_hdr))) return FALSE; /* Now walk the linked list. In all known ELF implementations, @@ -1415,18 +1484,17 @@ * cases the first entry doesn't appear with a name, in other cases it * does. */ - for (lm_addr = (void*)dbg_hdr.r_map; lm_addr; lm_addr = (void*)lm.l_next) + for (lm_addr = dbg_hdr.r_map; lm_addr; lm_addr = lm.l_next) { - if (!ReadProcessMemory(pcs->handle, lm_addr, &lm, sizeof(lm), NULL)) + if (!read_process_memory(pcs, lm_addr, &lm, sizeof(lm))) return FALSE; - if (lm.l_prev != NULL && /* skip first entry, normally debuggee itself */ - lm.l_name != NULL && - ReadProcessMemory(pcs->handle, lm.l_name, bufstr, sizeof(bufstr), NULL)) + if (lm.l_prev && /* skip first entry, normally debuggee itself */ + lm.l_name && read_process_memory(pcs, lm.l_name, bufstr, sizeof(bufstr))) { bufstr[sizeof(bufstr) - 1] = '\0'; MultiByteToWideChar(CP_UNIXCP, 0, bufstr, -1, bufstrW, ARRAY_SIZE(bufstrW)); - if (main_name && !bufstrW[0]) strcpyW(bufstrW, main_name); + if (main_name && !bufstrW[0]) lstrcpyW(bufstrW, main_name); if (!cb(bufstrW, (ULONG_PTR)lm.l_addr, (ULONG_PTR)lm.l_ld, FALSE, user)) break; } @@ -1434,12 +1502,23 @@ } else { - struct r_debug32 dbg_hdr; - struct link_map32 lm; + struct + { + UINT32 r_version; + UINT32 r_map; + UINT32 r_brk; + UINT32 r_state; + UINT32 r_ldbase; + } dbg_hdr; + struct + { + UINT32 l_addr; + UINT32 l_name; + UINT32 l_ld; + UINT32 l_next, l_prev; + } lm; - if (!pcs->dbg_hdr_addr || - !ReadProcessMemory(pcs->handle, (void*)pcs->dbg_hdr_addr, - &dbg_hdr, sizeof(dbg_hdr), NULL)) + if (!pcs->dbg_hdr_addr || !read_process_memory(pcs, pcs->dbg_hdr_addr, &dbg_hdr, sizeof(dbg_hdr))) return FALSE; /* Now walk the linked list. In all known ELF implementations, @@ -1447,38 +1526,33 @@ * cases the first entry doesn't appear with a name, in other cases it * does. */ - for (lm_addr = (void *)(DWORD_PTR)dbg_hdr.r_map; lm_addr; - lm_addr = (void *)(DWORD_PTR)lm.l_next) + for (lm_addr = dbg_hdr.r_map; lm_addr; lm_addr = lm.l_next) { - if (!ReadProcessMemory(pcs->handle, lm_addr, &lm, sizeof(lm), NULL)) + if (!read_process_memory(pcs, lm_addr, &lm, sizeof(lm))) return FALSE; if (lm.l_prev && /* skip first entry, normally debuggee itself */ - lm.l_name && - ReadProcessMemory(pcs->handle, (void *)(DWORD_PTR)lm.l_name, - bufstr, sizeof(bufstr), NULL)) + lm.l_name && read_process_memory(pcs, lm.l_name, bufstr, sizeof(bufstr))) { bufstr[sizeof(bufstr) - 1] = '\0'; MultiByteToWideChar(CP_UNIXCP, 0, bufstr, -1, bufstrW, ARRAY_SIZE(bufstrW)); - if (main_name && !bufstrW[0]) strcpyW(bufstrW, main_name); + if (main_name && !bufstrW[0]) lstrcpyW(bufstrW, main_name); if (!cb(bufstrW, (ULONG_PTR)lm.l_addr, (ULONG_PTR)lm.l_ld, FALSE, user)) break; } } } -#ifdef AT_SYSINFO_EHDR if (!lm_addr) { ULONG_PTR ehdr_addr; - if (elf_search_auxv(pcs, AT_SYSINFO_EHDR, &ehdr_addr)) + if (elf_search_auxv(pcs, ELF_AT_SYSINFO_EHDR, &ehdr_addr)) { static const WCHAR vdsoW[] = {'[','v','d','s','o',']','.','s','o',0}; cb(vdsoW, ehdr_addr, 0, TRUE, user); } } -#endif return TRUE; } @@ -1694,22 +1768,3 @@ pcs->loader = &elf_loader_ops; return TRUE; } - -#else /* !__ELF__ */ - -BOOL elf_map_handle(HANDLE handle, struct image_file_map* fmap) -{ - return FALSE; -} - -BOOL elf_read_wine_loader_dbg_info(struct process* pcs, ULONG_PTR addr) -{ - return FALSE; -} - -int elf_is_in_thunk_area(ULONG_PTR addr, - const struct elf_thunk_area* thunks) -{ - return -1; -} -#endif /* __ELF__ */ diff -Nru wine-development-5.5/dlls/dbghelp/image.c wine-development-5.6/dlls/dbghelp/image.c --- wine-development-5.5/dlls/dbghelp/image.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/image.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,7 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" #include #include #include diff -Nru wine-development-5.5/dlls/dbghelp/image_private.h wine-development-5.6/dlls/dbghelp/image_private.h --- wine-development-5.5/dlls/dbghelp/image_private.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/image_private.h 2020-04-10 18:54:32.000000000 +0000 @@ -19,43 +19,83 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#ifdef HAVE_ELF_H -# include -#endif -#ifdef HAVE_SYS_ELF32_H -# include -#endif -#ifdef HAVE_SYS_EXEC_ELF_H -# include -#endif -#if !defined(DT_NUM) -# if defined(DT_COUNT) -# define DT_NUM DT_COUNT -# else -/* this seems to be a satisfactory value on Solaris, which doesn't support this AFAICT */ -# define DT_NUM 24 -# endif -#endif -#ifdef HAVE_LINK_H -# include -#endif -#ifdef HAVE_SYS_LINK_H -# include -#endif -#ifdef HAVE_MACH_O_LOADER_H -#include -#endif - #define IMAGE_NO_MAP ((void*)-1) -#ifndef __ELF__ -#ifndef SHT_NULL -#define SHT_NULL 0 -#endif -#ifndef NT_GNU_BUILD_ID -#define NT_GNU_BUILD_ID 3 -#endif -#endif +struct elf_header +{ + UINT8 e_ident[16]; /* Magic number and other info */ + UINT16 e_type; /* Object file type */ + UINT16 e_machine; /* Architecture */ + UINT32 e_version; /* Object file version */ + UINT64 e_entry; /* Entry point virtual address */ + UINT64 e_phoff; /* Program header table file offset */ + UINT64 e_shoff; /* Section header table file offset */ + UINT32 e_flags; /* Processor-specific flags */ + UINT16 e_ehsize; /* ELF header size in bytes */ + UINT16 e_phentsize; /* Program header table entry size */ + UINT16 e_phnum; /* Program header table entry count */ + UINT16 e_shentsize; /* Section header table entry size */ + UINT16 e_shnum; /* Section header table entry count */ + UINT16 e_shstrndx; /* Section header string table index */ +}; + +struct elf_section_header +{ + UINT32 sh_name; /* Section name (string tbl index) */ + UINT32 sh_type; /* Section type */ + UINT64 sh_flags; /* Section flags */ + UINT64 sh_addr; /* Section virtual addr at execution */ + UINT64 sh_offset; /* Section file offset */ + UINT64 sh_size; /* Section size in bytes */ + UINT32 sh_link; /* Link to another section */ + UINT32 sh_info; /* Additional section information */ + UINT64 sh_addralign; /* Section alignment */ + UINT64 sh_entsize; /* Entry size if section holds table */ +}; + +struct macho_load_command +{ + UINT32 cmd; /* type of load command */ + UINT32 cmdsize; /* total size of command in bytes */ +}; + +struct macho_uuid_command +{ + UINT32 cmd; /* LC_UUID */ + UINT32 cmdsize; + UINT8 uuid[16]; +}; + +struct macho_section +{ + char sectname[16]; /* name of this section */ + char segname[16]; /* segment this section goes in */ + UINT64 addr; /* memory address of this section */ + UINT64 size; /* size in bytes of this section */ + UINT32 offset; /* file offset of this section */ + UINT32 align; /* section alignment (power of 2) */ + UINT32 reloff; /* file offset of relocation entries */ + UINT32 nreloc; /* number of relocation entries */ + UINT32 flags; /* flags (section type and attributes)*/ + UINT32 reserved1; /* reserved (for offset or index) */ + UINT32 reserved2; /* reserved (for count or sizeof) */ + UINT32 reserved3; /* reserved */ +}; + +struct macho_section32 +{ + char sectname[16]; /* name of this section */ + char segname[16]; /* segment this section goes in */ + UINT32 addr; /* memory address of this section */ + UINT32 size; /* size in bytes of this section */ + UINT32 offset; /* file offset of this section */ + UINT32 align; /* section alignment (power of 2) */ + UINT32 reloff; /* file offset of relocation entries */ + UINT32 nreloc; /* number of relocation entries */ + UINT32 flags; /* flags (section type and attributes)*/ + UINT32 reserved1; /* reserved (for offset or index) */ + UINT32 reserved2; /* reserved (for count or sizeof) */ +}; /* structure holding information while handling an ELF image * allows one by one section mapping for memory savings @@ -75,14 +115,12 @@ HANDLE handle; const char* shstrtab; char* target_copy; -#ifdef __ELF__ - Elf64_Ehdr elfhdr; + struct elf_header elfhdr; struct { - Elf64_Shdr shdr; + struct elf_section_header shdr; const char* mapped; }* sect; -#endif } elf; struct macho_file_map { @@ -90,12 +128,12 @@ size_t segs_start; HANDLE handle; struct image_file_map* dsym; /* the debug symbols file associated with this one */ - -#ifdef HAVE_MACH_O_LOADER_H - struct mach_header mach_header; size_t header_size; /* size of real header in file */ - const struct load_command* load_commands; - const struct uuid_command* uuid; + size_t commands_size; + unsigned int commands_count; + + const struct macho_load_command* load_commands; + const struct macho_uuid_command* uuid; /* The offset in the file which is this architecture. mach_header was * read from arch_offset. */ @@ -104,11 +142,10 @@ int num_sections; struct { - struct section_64 section; + struct macho_section section; const char* mapped; unsigned int ignored : 1; }* sect; -#endif } macho; struct pe_file_map { @@ -133,6 +170,24 @@ LONG_PTR sidx; }; +struct stab_nlist +{ + unsigned n_strx; + unsigned char n_type; + char n_other; + short n_desc; + unsigned n_value; +}; + +struct macho64_nlist +{ + unsigned n_strx; + unsigned char n_type; + char n_other; + short n_desc; + UINT64 n_value; +}; + BOOL image_check_alternate(struct image_file_map* fmap, const struct module* module) DECLSPEC_HIDDEN; BOOL elf_map_handle(HANDLE handle, struct image_file_map* fmap) DECLSPEC_HIDDEN; diff -Nru wine-development-5.5/dlls/dbghelp/inflate.c wine-development-5.6/dlls/dbghelp/inflate.c --- wine-development-5.5/dlls/dbghelp/inflate.c 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/inflate.c 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,1916 @@ +/* inflate.c -- zlib decompression + * + * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * Jean-loup Gailly Mark Adler + * jloup@gzip.org madler@alumni.caltech.edu + */ + +#include +#include +#include +#include +#include "winternl.h" +#include "zlib.h" + +#define DEF_WBITS MAX_WBITS +#define zmemcpy memcpy +#define zmemzero(dest, len) memset(dest, 0, len) + +#define Assert(cond,msg) +#define Trace(x) +#define Tracev(x) +#define Tracevv(x) +#define Tracecv(c,x) + +#define GUNZIP + +#define ZALLOC(strm, items, size) \ + (*((strm)->zalloc))((strm)->opaque, (items), (size)) +#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) +#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} + +/* Reverse the bytes in a 32-bit value */ +#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ + (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) + +#define BASE 65521U /* largest prime smaller than 65536 */ +#define NMAX 5552 +/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ + +#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;} +#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); +#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); +#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); +#define DO16(buf) DO8(buf,0); DO8(buf,8); + +#define MOD(a) a %= BASE +#define MOD28(a) a %= BASE +#define MOD63(a) a %= BASE + +static uLong adler32( uLong adler, const Bytef *buf, uInt len ) +{ + unsigned long sum2; + unsigned n; + + /* split Adler-32 into component sums */ + sum2 = (adler >> 16) & 0xffff; + adler &= 0xffff; + + /* in case user likes doing a byte at a time, keep it fast */ + if (len == 1) { + adler += buf[0]; + if (adler >= BASE) + adler -= BASE; + sum2 += adler; + if (sum2 >= BASE) + sum2 -= BASE; + return adler | (sum2 << 16); + } + + /* initial Adler-32 value (deferred check for len == 1 speed) */ + if (buf == Z_NULL) + return 1L; + + /* in case short lengths are provided, keep it somewhat fast */ + if (len < 16) { + while (len--) { + adler += *buf++; + sum2 += adler; + } + if (adler >= BASE) + adler -= BASE; + MOD28(sum2); /* only added so many BASE's */ + return adler | (sum2 << 16); + } + + /* do length NMAX blocks -- requires just one modulo operation */ + while (len >= NMAX) { + len -= NMAX; + n = NMAX / 16; /* NMAX is divisible by 16 */ + do { + DO16(buf); /* 16 sums unrolled */ + buf += 16; + } while (--n); + MOD(adler); + MOD(sum2); + } + + /* do remaining bytes (less than NMAX, still just one modulo) */ + if (len) { /* avoid modulos if none remaining */ + while (len >= 16) { + len -= 16; + DO16(buf); + buf += 16; + } + while (len--) { + adler += *buf++; + sum2 += adler; + } + MOD(adler); + MOD(sum2); + } + + /* return recombined sums */ + return adler | (sum2 << 16); +} + +typedef struct { + unsigned char op; /* operation, extra bits, table bits */ + unsigned char bits; /* bits in this part of the code */ + unsigned short val; /* offset in table or code value */ +} code; + +#define ENOUGH_LENS 852 +#define ENOUGH_DISTS 592 +#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS) + +/* Type of code to build for inflate_table() */ +typedef enum { + CODES, + LENS, + DISTS +} codetype; + +/* Possible inflate modes between inflate() calls */ +typedef enum { + HEAD = 16180, /* i: waiting for magic header */ + FLAGS, /* i: waiting for method and flags (gzip) */ + TIME, /* i: waiting for modification time (gzip) */ + OS, /* i: waiting for extra flags and operating system (gzip) */ + EXLEN, /* i: waiting for extra length (gzip) */ + EXTRA, /* i: waiting for extra bytes (gzip) */ + NAME, /* i: waiting for end of file name (gzip) */ + COMMENT, /* i: waiting for end of comment (gzip) */ + HCRC, /* i: waiting for header crc (gzip) */ + DICTID, /* i: waiting for dictionary check value */ + DICT, /* waiting for inflateSetDictionary() call */ + TYPE, /* i: waiting for type bits, including last-flag bit */ + TYPEDO, /* i: same, but skip check to exit inflate on new block */ + STORED, /* i: waiting for stored size (length and complement) */ + COPY_, /* i/o: same as COPY below, but only first time in */ + COPY, /* i/o: waiting for input or output to copy stored block */ + TABLE, /* i: waiting for dynamic block table lengths */ + LENLENS, /* i: waiting for code length code lengths */ + CODELENS, /* i: waiting for length/lit and distance code lengths */ + LEN_, /* i: same as LEN below, but only first time in */ + LEN, /* i: waiting for length/lit/eob code */ + LENEXT, /* i: waiting for length extra bits */ + DIST, /* i: waiting for distance code */ + DISTEXT, /* i: waiting for distance extra bits */ + MATCH, /* o: waiting for output space to copy string */ + LIT, /* o: waiting for output space to write literal */ + CHECK, /* i: waiting for 32-bit check value */ + LENGTH, /* i: waiting for 32-bit length (gzip) */ + DONE, /* finished check, done -- remain here until reset */ + BAD, /* got a data error -- remain here until reset */ + MEM, /* got an inflate() memory error -- remain here until reset */ + SYNC /* looking for synchronization bytes to restart inflate() */ +} inflate_mode; + +/* State maintained between inflate() calls -- approximately 7K bytes, not + including the allocated sliding window, which is up to 32K bytes. */ +struct inflate_state { + z_streamp strm; /* pointer back to this zlib stream */ + inflate_mode mode; /* current inflate mode */ + int last; /* true if processing last block */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip, + bit 2 true to validate check value */ + int havedict; /* true if dictionary provided */ + int flags; /* gzip header method and flags (0 if zlib) */ + unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ + unsigned long check; /* protected copy of check value */ + unsigned long total; /* protected copy of output count */ + gz_headerp head; /* where to save gzip header information */ + /* sliding window */ + unsigned wbits; /* log base 2 of requested window size */ + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned wnext; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if needed */ + /* bit accumulator */ + unsigned long hold; /* input bit accumulator */ + unsigned bits; /* number of bits in "in" */ + /* for string and stored block copying */ + unsigned length; /* literal or length of data to copy */ + unsigned offset; /* distance back to copy string from */ + /* for table and code decoding */ + unsigned extra; /* extra bits needed */ + /* fixed and dynamic code tables */ + code const FAR *lencode; /* starting table for length/literal codes */ + code const FAR *distcode; /* starting table for distance codes */ + unsigned lenbits; /* index bits for lencode */ + unsigned distbits; /* index bits for distcode */ + /* dynamic table building */ + unsigned ncode; /* number of code length code lengths */ + unsigned nlen; /* number of length code lengths */ + unsigned ndist; /* number of distance code lengths */ + unsigned have; /* number of code lengths in lens[] */ + code FAR *next; /* next available space in codes[] */ + unsigned short lens[320]; /* temporary storage for code lengths */ + unsigned short work[288]; /* work area for code table building */ + code codes[ENOUGH]; /* space for code tables */ + int sane; /* if false, allow invalid distance too far */ + int back; /* bits back of last unprocessed length/lit */ + unsigned was; /* initial length of match */ +}; + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state->mode == LEN + strm->avail_in >= 6 + strm->avail_out >= 258 + start >= strm->avail_out + state->bits < 8 + + On return, state->mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm->avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm->avail_out >= 258 for each loop to avoid checking for + output space. + */ +static void inflate_fast( z_streamp strm, unsigned start ) +{ + struct inflate_state FAR *state; + z_const unsigned char FAR *in; /* local strm->next_in */ + z_const unsigned char FAR *last; /* have enough input while in < last */ + unsigned char FAR *out; /* local strm->next_out */ + unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ + unsigned char FAR *end; /* while out < end, enough space available */ +#ifdef INFLATE_STRICT + unsigned dmax; /* maximum distance from zlib header */ +#endif + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned wnext; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ + unsigned long hold; /* local strm->hold */ + unsigned bits; /* local strm->bits */ + code const FAR *lcode; /* local strm->lencode */ + code const FAR *dcode; /* local strm->distcode */ + unsigned lmask; /* mask for first level of length codes */ + unsigned dmask; /* mask for first level of distance codes */ + code here; /* retrieved table entry */ + unsigned op; /* code bits, operation, extra bits, or */ + /* window position, window bytes to copy */ + unsigned len; /* match length, unused bytes */ + unsigned dist; /* match distance */ + unsigned char FAR *from; /* where to copy match from */ + + /* copy state to local variables */ + state = (struct inflate_state FAR *)strm->state; + in = strm->next_in; + last = in + (strm->avail_in - 5); + out = strm->next_out; + beg = out - (start - strm->avail_out); + end = out + (strm->avail_out - 257); +#ifdef INFLATE_STRICT + dmax = state->dmax; +#endif + wsize = state->wsize; + whave = state->whave; + wnext = state->wnext; + window = state->window; + hold = state->hold; + bits = state->bits; + lcode = state->lencode; + dcode = state->distcode; + lmask = (1U << state->lenbits) - 1; + dmask = (1U << state->distbits) - 1; + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + do { + if (bits < 15) { + hold += (unsigned long)(*in++) << bits; + bits += 8; + hold += (unsigned long)(*in++) << bits; + bits += 8; + } + here = lcode[hold & lmask]; + dolen: + op = (unsigned)(here.bits); + hold >>= op; + bits -= op; + op = (unsigned)(here.op); + if (op == 0) { /* literal */ + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", here.val)); + *out++ = (unsigned char)(here.val); + } + else if (op & 16) { /* length base */ + len = (unsigned)(here.val); + op &= 15; /* number of extra bits */ + if (op) { + if (bits < op) { + hold += (unsigned long)(*in++) << bits; + bits += 8; + } + len += (unsigned)hold & ((1U << op) - 1); + hold >>= op; + bits -= op; + } + Tracevv((stderr, "inflate: length %u\n", len)); + if (bits < 15) { + hold += (unsigned long)(*in++) << bits; + bits += 8; + hold += (unsigned long)(*in++) << bits; + bits += 8; + } + here = dcode[hold & dmask]; + dodist: + op = (unsigned)(here.bits); + hold >>= op; + bits -= op; + op = (unsigned)(here.op); + if (op & 16) { /* distance base */ + dist = (unsigned)(here.val); + op &= 15; /* number of extra bits */ + if (bits < op) { + hold += (unsigned long)(*in++) << bits; + bits += 8; + if (bits < op) { + hold += (unsigned long)(*in++) << bits; + bits += 8; + } + } + dist += (unsigned)hold & ((1U << op) - 1); +#ifdef INFLATE_STRICT + if (dist > dmax) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#endif + hold >>= op; + bits -= op; + Tracevv((stderr, "inflate: distance %u\n", dist)); + op = (unsigned)(out - beg); /* max distance in output */ + if (dist > op) { /* see if copy from window */ + op = dist - op; /* distance back in window */ + if (op > whave) { + if (state->sane) { + strm->msg = + (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + if (len <= op - whave) { + do { + *out++ = 0; + } while (--len); + continue; + } + len -= op - whave; + do { + *out++ = 0; + } while (--op > whave); + if (op == 0) { + from = out - dist; + do { + *out++ = *from++; + } while (--len); + continue; + } +#endif + } + from = window; + if (wnext == 0) { /* very common case */ + from += wsize - op; + if (op < len) { /* some from window */ + len -= op; + do { + *out++ = *from++; + } while (--op); + from = out - dist; /* rest from output */ + } + } + else if (wnext < op) { /* wrap around window */ + from += wsize + wnext - op; + op -= wnext; + if (op < len) { /* some from end of window */ + len -= op; + do { + *out++ = *from++; + } while (--op); + from = window; + if (wnext < len) { /* some from start of window */ + op = wnext; + len -= op; + do { + *out++ = *from++; + } while (--op); + from = out - dist; /* rest from output */ + } + } + } + else { /* contiguous in window */ + from += wnext - op; + if (op < len) { /* some from window */ + len -= op; + do { + *out++ = *from++; + } while (--op); + from = out - dist; /* rest from output */ + } + } + while (len > 2) { + *out++ = *from++; + *out++ = *from++; + *out++ = *from++; + len -= 3; + } + if (len) { + *out++ = *from++; + if (len > 1) + *out++ = *from++; + } + } + else { + from = out - dist; /* copy direct from output */ + do { /* minimum length is three */ + *out++ = *from++; + *out++ = *from++; + *out++ = *from++; + len -= 3; + } while (len > 2); + if (len) { + *out++ = *from++; + if (len > 1) + *out++ = *from++; + } + } + } + else if ((op & 64) == 0) { /* 2nd level distance code */ + here = dcode[here.val + (hold & ((1U << op) - 1))]; + goto dodist; + } + else { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + } + else if ((op & 64) == 0) { /* 2nd level length code */ + here = lcode[here.val + (hold & ((1U << op) - 1))]; + goto dolen; + } + else if (op & 32) { /* end-of-block */ + Tracevv((stderr, "inflate: end of block\n")); + state->mode = TYPE; + break; + } + else { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + } while (in < last && out < end); + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + len = bits >> 3; + in -= len; + bits -= len << 3; + hold &= (1U << bits) - 1; + + /* update state and return */ + strm->next_in = in; + strm->next_out = out; + strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last)); + strm->avail_out = (unsigned)(out < end ? + 257 + (end - out) : 257 - (out - end)); + state->hold = hold; + state->bits = bits; + return; +} + +#define MAXBITS 15 + +static int inflate_table( codetype type, unsigned short FAR *lens, unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work ) +{ + unsigned len; /* a code's length in bits */ + unsigned sym; /* index of code symbols */ + unsigned min, max; /* minimum and maximum code lengths */ + unsigned root; /* number of index bits for root table */ + unsigned curr; /* number of index bits for current table */ + unsigned drop; /* code bits to drop for sub-table */ + int left; /* number of prefix codes available */ + unsigned used; /* code entries in table used */ + unsigned huff; /* Huffman code */ + unsigned incr; /* for incrementing code, index */ + unsigned fill; /* index for replicating entries */ + unsigned low; /* low bits for current root entry */ + unsigned mask; /* mask for low root bits */ + code here; /* table entry for duplication */ + code FAR *next; /* next available space in table */ + const unsigned short FAR *base; /* base value table to use */ + const unsigned short FAR *extra; /* extra bits table to use */ + unsigned match; /* use base and extra for symbol >= match */ + unsigned short count[MAXBITS+1]; /* number of codes of each length */ + unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ + static const unsigned short lbase[31] = { /* Length codes 257..285 base */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; + static const unsigned short lext[31] = { /* Length codes 257..285 extra */ + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202}; + static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577, 0, 0}; + static const unsigned short dext[32] = { /* Distance codes 0..29 extra */ + 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, + 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, + 28, 28, 29, 29, 64, 64}; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for (len = 0; len <= MAXBITS; len++) + count[len] = 0; + for (sym = 0; sym < codes; sym++) + count[lens[sym]]++; + + /* bound code lengths, force root to be within code lengths */ + root = *bits; + for (max = MAXBITS; max >= 1; max--) + if (count[max] != 0) break; + if (root > max) root = max; + if (max == 0) { /* no symbols to code at all */ + here.op = (unsigned char)64; /* invalid code marker */ + here.bits = (unsigned char)1; + here.val = (unsigned short)0; + *(*table)++ = here; /* make a table to force an error */ + *(*table)++ = here; + *bits = 1; + return 0; /* no symbols, but wait for decoding to report error */ + } + for (min = 1; min < max; min++) + if (count[min] != 0) break; + if (root < min) root = min; + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) return -1; /* over-subscribed */ + } + if (left > 0 && (type == CODES || max != 1)) + return -1; /* incomplete set */ + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) + offs[len + 1] = offs[len] + count[len]; + + /* sort symbols by length, by symbol order within each length */ + for (sym = 0; sym < codes; sym++) + if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym; + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftrees.h + for more information. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + switch (type) { + case CODES: + base = extra = work; /* dummy value--not used */ + match = 20; + break; + case LENS: + base = lbase; + extra = lext; + match = 257; + break; + default: /* DISTS */ + base = dbase; + extra = dext; + match = 0; + } + + /* initialize state for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = *table; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = (unsigned)(-1); /* trigger new sub-table when len > root */ + used = 1U << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if ((type == LENS && used > ENOUGH_LENS) || + (type == DISTS && used > ENOUGH_DISTS)) + return 1; + + /* process all codes and make table entries */ + for (;;) { + /* create table entry */ + here.bits = (unsigned char)(len - drop); + if (work[sym] + 1U < match) { + here.op = (unsigned char)0; + here.val = work[sym]; + } + else if (work[sym] >= match) { + here.op = (unsigned char)(extra[work[sym] - match]); + here.val = base[work[sym] - match]; + } + else { + here.op = (unsigned char)(32 + 64); /* end of block */ + here.val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1U << (len - drop); + fill = 1U << curr; + min = fill; /* save offset to next table */ + do { + fill -= incr; + next[(huff >> drop) + fill] = here; + } while (fill != 0); + + /* backwards increment the len-bit code huff */ + incr = 1U << (len - 1); + while (huff & incr) + incr >>= 1; + if (incr != 0) { + huff &= incr - 1; + huff += incr; + } + else + huff = 0; + + /* go to next symbol, update count, len */ + sym++; + if (--(count[len]) == 0) { + if (len == max) break; + len = lens[work[sym]]; + } + + /* create new sub-table if needed */ + if (len > root && (huff & mask) != low) { + /* if first time, transition to sub-tables */ + if (drop == 0) + drop = root; + + /* increment past last table */ + next += min; /* here min is 1 << curr */ + + /* determine length of next table */ + curr = len - drop; + left = (int)(1 << curr); + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) break; + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1U << curr; + if ((type == LENS && used > ENOUGH_LENS) || + (type == DISTS && used > ENOUGH_DISTS)) + return 1; + + /* point entry in root table to sub-table */ + low = huff & mask; + (*table)[low].op = (unsigned char)curr; + (*table)[low].bits = (unsigned char)root; + (*table)[low].val = (unsigned short)(next - *table); + } + } + + /* fill in remaining table entry if code is incomplete (guaranteed to have + at most one remaining entry, since if the code is incomplete, the + maximum code length that was allowed to get this far is one bit) */ + if (huff != 0) { + here.op = (unsigned char)64; /* invalid code marker */ + here.bits = (unsigned char)(len - drop); + here.val = (unsigned short)0; + next[huff] = here; + } + + /* set return parameters */ + *table += used; + *bits = root; + return 0; +} + +static int inflateStateCheck( z_streamp strm ) +{ + struct inflate_state FAR *state; + if (strm == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) + return 1; + state = (struct inflate_state FAR *)strm->state; + if (state == Z_NULL || state->strm != strm || + state->mode < HEAD || state->mode > SYNC) + return 1; + return 0; +} + +static int inflateResetKeep( z_streamp strm ) +{ + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + strm->total_in = strm->total_out = state->total = 0; + strm->msg = Z_NULL; + if (state->wrap) /* to support ill-conceived Java test suite */ + strm->adler = state->wrap & 1; + state->mode = HEAD; + state->last = 0; + state->havedict = 0; + state->dmax = 32768U; + state->head = Z_NULL; + state->hold = 0; + state->bits = 0; + state->lencode = state->distcode = state->next = state->codes; + state->sane = 1; + state->back = -1; + Tracev((stderr, "inflate: reset\n")); + return Z_OK; +} + +static int inflateReset( z_streamp strm ) +{ + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + state->wsize = 0; + state->whave = 0; + state->wnext = 0; + return inflateResetKeep(strm); +} + +static int inflateReset2( z_streamp strm, int windowBits ) +{ + int wrap; + struct inflate_state FAR *state; + + /* get the state */ + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + + /* extract wrap request from windowBits parameter */ + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } + else { + wrap = (windowBits >> 4) + 5; +#ifdef GUNZIP + if (windowBits < 48) + windowBits &= 15; +#endif + } + + /* set number of window bits, free window if different */ + if (windowBits && (windowBits < 8 || windowBits > 15)) + return Z_STREAM_ERROR; + if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) { + ZFREE(strm, state->window); + state->window = Z_NULL; + } + + /* update state and reset the rest of it */ + state->wrap = wrap; + state->wbits = (unsigned)windowBits; + return inflateReset(strm); +} + +int inflateInit2( z_streamp strm, int windowBits ) +{ + int ret; + struct inflate_state FAR *state; + + strm->msg = Z_NULL; /* in case we return an error */ + state = (struct inflate_state FAR *) + ZALLOC(strm, 1, sizeof(struct inflate_state)); + if (state == Z_NULL) return Z_MEM_ERROR; + Tracev((stderr, "inflate: allocated\n")); + strm->state = (struct internal_state FAR *)state; + state->strm = strm; + state->window = Z_NULL; + state->mode = HEAD; /* to pass state test in inflateReset2() */ + ret = inflateReset2(strm, windowBits); + if (ret != Z_OK) { + ZFREE(strm, state); + strm->state = Z_NULL; + } + return ret; +} + +int inflateInit( z_streamp strm ) +{ + return inflateInit2(strm, DEF_WBITS); +} + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +static void fixedtables( struct inflate_state FAR *state ) +{ + static const code lenfix[512] = { + {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, + {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, + {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, + {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, + {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, + {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, + {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, + {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, + {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, + {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, + {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, + {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, + {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, + {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, + {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, + {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, + {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, + {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, + {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, + {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, + {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, + {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, + {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, + {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, + {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, + {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, + {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, + {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, + {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, + {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, + {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, + {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, + {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, + {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, + {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, + {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, + {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, + {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, + {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, + {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, + {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, + {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, + {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, + {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, + {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, + {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, + {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, + {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, + {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, + {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, + {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, + {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, + {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, + {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, + {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, + {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, + {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, + {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, + {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, + {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, + {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, + {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, + {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, + {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, + {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, + {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, + {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, + {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, + {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, + {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, + {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, + {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, + {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, + {0,9,255} + }; + + static const code distfix[32] = { + {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, + {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, + {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, + {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, + {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, + {22,5,193},{64,5,0} + }; + + state->lencode = lenfix; + state->lenbits = 9; + state->distcode = distfix; + state->distbits = 5; +} + +/* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called + when a window is already in use, or when output has been written during this + inflate call, but the end of the deflate stream has not been reached yet. + It is also called to create a window for dictionary data when a dictionary + is loaded. + + Providing output buffers larger than 32K to inflate() should provide a speed + advantage, since only the last 32K of output is copied to the sliding window + upon return from inflate(), and since all distances after the first 32K of + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ +static int updatewindow( z_streamp strm, const Bytef *end, unsigned copy ) +{ + struct inflate_state FAR *state; + unsigned dist; + + state = (struct inflate_state FAR *)strm->state; + + /* if it hasn't been done already, allocate space for the window */ + if (state->window == Z_NULL) { + state->window = (unsigned char FAR *) + ZALLOC(strm, 1U << state->wbits, + sizeof(unsigned char)); + if (state->window == Z_NULL) return 1; + } + + /* if window not in use yet, initialize */ + if (state->wsize == 0) { + state->wsize = 1U << state->wbits; + state->wnext = 0; + state->whave = 0; + } + + /* copy state->wsize or less output bytes into the circular window */ + if (copy >= state->wsize) { + zmemcpy(state->window, end - state->wsize, state->wsize); + state->wnext = 0; + state->whave = state->wsize; + } + else { + dist = state->wsize - state->wnext; + if (dist > copy) dist = copy; + zmemcpy(state->window + state->wnext, end - copy, dist); + copy -= dist; + if (copy) { + zmemcpy(state->window, end - copy, copy); + state->wnext = copy; + state->whave = state->wsize; + } + else { + state->wnext += dist; + if (state->wnext == state->wsize) state->wnext = 0; + if (state->whave < state->wsize) state->whave += dist; + } + } + return 0; +} + +/* Macros for inflate(): */ + +#define crc32(crc,buf,len) RtlComputeCrc32(crc,buf,len) + +/* check function to use adler32() for zlib or crc32() for gzip */ +#ifdef GUNZIP +# define UPDATE(check, buf, len) \ + (state->flags ? crc32(check, buf, len) : adler32(check, buf, len)) +#else +# define UPDATE(check, buf, len) adler32(check, buf, len) +#endif + +/* check macros for header crc */ +#ifdef GUNZIP +# define CRC2(check, word) \ + do { \ + hbuf[0] = (unsigned char)(word); \ + hbuf[1] = (unsigned char)((word) >> 8); \ + check = crc32(check, hbuf, 2); \ + } while (0) + +# define CRC4(check, word) \ + do { \ + hbuf[0] = (unsigned char)(word); \ + hbuf[1] = (unsigned char)((word) >> 8); \ + hbuf[2] = (unsigned char)((word) >> 16); \ + hbuf[3] = (unsigned char)((word) >> 24); \ + check = crc32(check, hbuf, 4); \ + } while (0) +#endif + +/* Load registers with state in inflate() for speed */ +#define LOAD() \ + do { \ + put = strm->next_out; \ + left = strm->avail_out; \ + next = strm->next_in; \ + have = strm->avail_in; \ + hold = state->hold; \ + bits = state->bits; \ + } while (0) + +/* Restore state from registers in inflate() */ +#define RESTORE() \ + do { \ + strm->next_out = put; \ + strm->avail_out = left; \ + strm->next_in = next; \ + strm->avail_in = have; \ + state->hold = hold; \ + state->bits = bits; \ + } while (0) + +/* Clear the input bit accumulator */ +#define INITBITS() \ + do { \ + hold = 0; \ + bits = 0; \ + } while (0) + +/* Get a byte of input into the bit accumulator, or return from inflate() + if there is no input available. */ +#define PULLBYTE() \ + do { \ + if (have == 0) goto inf_leave; \ + have--; \ + hold += (unsigned long)(*next++) << bits; \ + bits += 8; \ + } while (0) + +/* Assure that there are at least n bits in the bit accumulator. If there is + not enough available input to do that, then return from inflate(). */ +#define NEEDBITS(n) \ + do { \ + while (bits < (unsigned)(n)) \ + PULLBYTE(); \ + } while (0) + +/* Return the low n bits of the bit accumulator (n < 16) */ +#define BITS(n) \ + ((unsigned)hold & ((1U << (n)) - 1)) + +/* Remove n bits from the bit accumulator */ +#define DROPBITS(n) \ + do { \ + hold >>= (n); \ + bits -= (unsigned)(n); \ + } while (0) + +/* Remove zero to seven bits as needed to go to a byte boundary */ +#define BYTEBITS() \ + do { \ + hold >>= bits & 7; \ + bits -= bits & 7; \ + } while (0) + +/* + inflate() uses a state machine to process as much input data and generate as + much output data as possible before returning. The state machine is + structured roughly as follows: + + for (;;) switch (state) { + ... + case STATEn: + if (not enough input data or output space to make progress) + return; + ... make progress ... + state = STATEm; + break; + ... + } + + so when inflate() is called again, the same case is attempted again, and + if the appropriate resources are provided, the machine proceeds to the + next state. The NEEDBITS() macro is usually the way the state evaluates + whether it can proceed or should return. NEEDBITS() does the return if + the requested bits are not available. The typical use of the BITS macros + is: + + NEEDBITS(n); + ... do something with BITS(n) ... + DROPBITS(n); + + where NEEDBITS(n) either returns from inflate() if there isn't enough + input left to load n bits into the accumulator, or it continues. BITS(n) + gives the low n bits in the accumulator. When done, DROPBITS(n) drops + the low n bits off the accumulator. INITBITS() clears the accumulator + and sets the number of available bits to zero. BYTEBITS() discards just + enough bits to put the accumulator on a byte boundary. After BYTEBITS() + and a NEEDBITS(8), then BITS(8) would return the next byte in the stream. + + NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return + if there is no input available. The decoding of variable length codes uses + PULLBYTE() directly in order to pull just enough bytes to decode the next + code, and no more. + + Some states loop until they get enough input, making sure that enough + state information is maintained to continue the loop where it left off + if NEEDBITS() returns in the loop. For example, want, need, and keep + would all have to actually be part of the saved state in case NEEDBITS() + returns: + + case STATEw: + while (want < need) { + NEEDBITS(n); + keep[want++] = BITS(n); + DROPBITS(n); + } + state = STATEx; + case STATEx: + + As shown above, if the next state is also the next case, then the break + is omitted. + + A state may also return if there is not enough output space available to + complete that state. Those states are copying stored data, writing a + literal byte, and copying a matching string. + + When returning, a "goto inf_leave" is used to update the total counters, + update the check value, and determine whether any progress has been made + during that inflate() call in order to return the proper return code. + Progress is defined as a change in either strm->avail_in or strm->avail_out. + When there is a window, goto inf_leave will update the window with the last + output written. If a goto inf_leave occurs in the middle of decompression + and there is no window currently, goto inf_leave will create one and copy + output to the window for the next call of inflate(). + + In this implementation, the flush parameter of inflate() only affects the + return code (per zlib.h). inflate() always writes as much as possible to + strm->next_out, given the space available and the provided input--the effect + documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers + the allocation of and copying into a sliding window until necessary, which + provides the effect documented in zlib.h for Z_FINISH when the entire input + stream available. So the only thing the flush parameter actually does is: + when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it + will return Z_BUF_ERROR if it has not reached the end of the stream. + */ + +int inflate( z_streamp strm, int flush ) +{ + struct inflate_state FAR *state; + z_const unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ + unsigned have, left; /* available input and output */ + unsigned long hold; /* bit buffer */ + unsigned bits; /* bits in bit buffer */ + unsigned in, out; /* save starting available input and output */ + unsigned copy; /* number of stored or match bytes to copy */ + unsigned char FAR *from; /* where to copy match bytes from */ + code here; /* current decoding table entry */ + code last; /* parent table entry */ + unsigned len; /* length to copy for repeats, bits to drop */ + int ret; /* return code */ +#ifdef GUNZIP + unsigned char hbuf[4]; /* buffer for gzip header crc calculation */ +#endif + static const unsigned short order[19] = /* permutation of code lengths */ + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + if (inflateStateCheck(strm) || strm->next_out == Z_NULL || + (strm->next_in == Z_NULL && strm->avail_in != 0)) + return Z_STREAM_ERROR; + + state = (struct inflate_state FAR *)strm->state; + if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */ + LOAD(); + in = have; + out = left; + ret = Z_OK; + for (;;) + switch (state->mode) { + case HEAD: + if (state->wrap == 0) { + state->mode = TYPEDO; + break; + } + NEEDBITS(16); +#ifdef GUNZIP + if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */ + if (state->wbits == 0) + state->wbits = 15; + state->check = crc32(0L, Z_NULL, 0); + CRC2(state->check, hold); + INITBITS(); + state->mode = FLAGS; + break; + } + state->flags = 0; /* expect zlib header */ + if (state->head != Z_NULL) + state->head->done = -1; + if (!(state->wrap & 1) || /* check if zlib header allowed */ +#else + if ( +#endif + ((BITS(8) << 8) + (hold >> 8)) % 31) { + strm->msg = (char *)"incorrect header check"; + state->mode = BAD; + break; + } + if (BITS(4) != Z_DEFLATED) { + strm->msg = (char *)"unknown compression method"; + state->mode = BAD; + break; + } + DROPBITS(4); + len = BITS(4) + 8; + if (state->wbits == 0) + state->wbits = len; + if (len > 15 || len > state->wbits) { + strm->msg = (char *)"invalid window size"; + state->mode = BAD; + break; + } + state->dmax = 1U << len; + Tracev((stderr, "inflate: zlib header ok\n")); + strm->adler = state->check = adler32(0L, Z_NULL, 0); + state->mode = hold & 0x200 ? DICTID : TYPE; + INITBITS(); + break; +#ifdef GUNZIP + case FLAGS: + NEEDBITS(16); + state->flags = (int)(hold); + if ((state->flags & 0xff) != Z_DEFLATED) { + strm->msg = (char *)"unknown compression method"; + state->mode = BAD; + break; + } + if (state->flags & 0xe000) { + strm->msg = (char *)"unknown header flags set"; + state->mode = BAD; + break; + } + if (state->head != Z_NULL) + state->head->text = (int)((hold >> 8) & 1); + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC2(state->check, hold); + INITBITS(); + state->mode = TIME; + case TIME: + NEEDBITS(32); + if (state->head != Z_NULL) + state->head->time = hold; + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC4(state->check, hold); + INITBITS(); + state->mode = OS; + case OS: + NEEDBITS(16); + if (state->head != Z_NULL) { + state->head->xflags = (int)(hold & 0xff); + state->head->os = (int)(hold >> 8); + } + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC2(state->check, hold); + INITBITS(); + state->mode = EXLEN; + case EXLEN: + if (state->flags & 0x0400) { + NEEDBITS(16); + state->length = (unsigned)(hold); + if (state->head != Z_NULL) + state->head->extra_len = (unsigned)hold; + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC2(state->check, hold); + INITBITS(); + } + else if (state->head != Z_NULL) + state->head->extra = Z_NULL; + state->mode = EXTRA; + case EXTRA: + if (state->flags & 0x0400) { + copy = state->length; + if (copy > have) copy = have; + if (copy) { + if (state->head != Z_NULL && + state->head->extra != Z_NULL) { + len = state->head->extra_len - state->length; + zmemcpy(state->head->extra + len, next, + len + copy > state->head->extra_max ? + state->head->extra_max - len : copy); + } + if ((state->flags & 0x0200) && (state->wrap & 4)) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + state->length -= copy; + } + if (state->length) goto inf_leave; + } + state->length = 0; + state->mode = NAME; + case NAME: + if (state->flags & 0x0800) { + if (have == 0) goto inf_leave; + copy = 0; + do { + len = (unsigned)(next[copy++]); + if (state->head != Z_NULL && + state->head->name != Z_NULL && + state->length < state->head->name_max) + state->head->name[state->length++] = (Bytef)len; + } while (len && copy < have); + if ((state->flags & 0x0200) && (state->wrap & 4)) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + if (len) goto inf_leave; + } + else if (state->head != Z_NULL) + state->head->name = Z_NULL; + state->length = 0; + state->mode = COMMENT; + case COMMENT: + if (state->flags & 0x1000) { + if (have == 0) goto inf_leave; + copy = 0; + do { + len = (unsigned)(next[copy++]); + if (state->head != Z_NULL && + state->head->comment != Z_NULL && + state->length < state->head->comm_max) + state->head->comment[state->length++] = (Bytef)len; + } while (len && copy < have); + if ((state->flags & 0x0200) && (state->wrap & 4)) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + if (len) goto inf_leave; + } + else if (state->head != Z_NULL) + state->head->comment = Z_NULL; + state->mode = HCRC; + case HCRC: + if (state->flags & 0x0200) { + NEEDBITS(16); + if ((state->wrap & 4) && hold != (state->check & 0xffff)) { + strm->msg = (char *)"header crc mismatch"; + state->mode = BAD; + break; + } + INITBITS(); + } + if (state->head != Z_NULL) { + state->head->hcrc = (int)((state->flags >> 9) & 1); + state->head->done = 1; + } + strm->adler = state->check = crc32(0L, Z_NULL, 0); + state->mode = TYPE; + break; +#endif + case DICTID: + NEEDBITS(32); + strm->adler = state->check = ZSWAP32(hold); + INITBITS(); + state->mode = DICT; + case DICT: + if (state->havedict == 0) { + RESTORE(); + return Z_NEED_DICT; + } + strm->adler = state->check = adler32(0L, Z_NULL, 0); + state->mode = TYPE; + case TYPE: + if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; + case TYPEDO: + if (state->last) { + BYTEBITS(); + state->mode = CHECK; + break; + } + NEEDBITS(3); + state->last = BITS(1); + DROPBITS(1); + switch (BITS(2)) { + case 0: /* stored block */ + Tracev((stderr, "inflate: stored block%s\n", + state->last ? " (last)" : "")); + state->mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + Tracev((stderr, "inflate: fixed codes block%s\n", + state->last ? " (last)" : "")); + state->mode = LEN_; /* decode codes */ + if (flush == Z_TREES) { + DROPBITS(2); + goto inf_leave; + } + break; + case 2: /* dynamic block */ + Tracev((stderr, "inflate: dynamic codes block%s\n", + state->last ? " (last)" : "")); + state->mode = TABLE; + break; + case 3: + strm->msg = (char *)"invalid block type"; + state->mode = BAD; + } + DROPBITS(2); + break; + case STORED: + BYTEBITS(); /* go to byte boundary */ + NEEDBITS(32); + if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { + strm->msg = (char *)"invalid stored block lengths"; + state->mode = BAD; + break; + } + state->length = (unsigned)hold & 0xffff; + Tracev((stderr, "inflate: stored length %u\n", + state->length)); + INITBITS(); + state->mode = COPY_; + if (flush == Z_TREES) goto inf_leave; + case COPY_: + state->mode = COPY; + case COPY: + copy = state->length; + if (copy) { + if (copy > have) copy = have; + if (copy > left) copy = left; + if (copy == 0) goto inf_leave; + zmemcpy(put, next, copy); + have -= copy; + next += copy; + left -= copy; + put += copy; + state->length -= copy; + break; + } + Tracev((stderr, "inflate: stored end\n")); + state->mode = TYPE; + break; + case TABLE: + NEEDBITS(14); + state->nlen = BITS(5) + 257; + DROPBITS(5); + state->ndist = BITS(5) + 1; + DROPBITS(5); + state->ncode = BITS(4) + 4; + DROPBITS(4); +#ifndef PKZIP_BUG_WORKAROUND + if (state->nlen > 286 || state->ndist > 30) { + strm->msg = (char *)"too many length or distance symbols"; + state->mode = BAD; + break; + } +#endif + Tracev((stderr, "inflate: table sizes ok\n")); + state->have = 0; + state->mode = LENLENS; + case LENLENS: + while (state->have < state->ncode) { + NEEDBITS(3); + state->lens[order[state->have++]] = (unsigned short)BITS(3); + DROPBITS(3); + } + while (state->have < 19) + state->lens[order[state->have++]] = 0; + state->next = state->codes; + state->lencode = (const code FAR *)(state->next); + state->lenbits = 7; + ret = inflate_table(CODES, state->lens, 19, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid code lengths set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: code lengths ok\n")); + state->have = 0; + state->mode = CODELENS; + case CODELENS: + while (state->have < state->nlen + state->ndist) { + for (;;) { + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if (here.val < 16) { + DROPBITS(here.bits); + state->lens[state->have++] = here.val; + } + else { + if (here.val == 16) { + NEEDBITS(here.bits + 2); + DROPBITS(here.bits); + if (state->have == 0) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + len = state->lens[state->have - 1]; + copy = 3 + BITS(2); + DROPBITS(2); + } + else if (here.val == 17) { + NEEDBITS(here.bits + 3); + DROPBITS(here.bits); + len = 0; + copy = 3 + BITS(3); + DROPBITS(3); + } + else { + NEEDBITS(here.bits + 7); + DROPBITS(here.bits); + len = 0; + copy = 11 + BITS(7); + DROPBITS(7); + } + if (state->have + copy > state->nlen + state->ndist) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + while (copy--) + state->lens[state->have++] = (unsigned short)len; + } + } + + /* handle error breaks in while */ + if (state->mode == BAD) break; + + /* check for end-of-block code (better have one) */ + if (state->lens[256] == 0) { + strm->msg = (char *)"invalid code -- missing end-of-block"; + state->mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ + state->next = state->codes; + state->lencode = (const code FAR *)(state->next); + state->lenbits = 9; + ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid literal/lengths set"; + state->mode = BAD; + break; + } + state->distcode = (const code FAR *)(state->next); + state->distbits = 6; + ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, + &(state->next), &(state->distbits), state->work); + if (ret) { + strm->msg = (char *)"invalid distances set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: codes ok\n")); + state->mode = LEN_; + if (flush == Z_TREES) goto inf_leave; + case LEN_: + state->mode = LEN; + case LEN: + if (have >= 6 && left >= 258) { + RESTORE(); + inflate_fast(strm, out); + LOAD(); + if (state->mode == TYPE) + state->back = -1; + break; + } + state->back = 0; + for (;;) { + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if (here.op && (here.op & 0xf0) == 0) { + last = here; + for (;;) { + here = state->lencode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + here.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + state->back += last.bits; + } + DROPBITS(here.bits); + state->back += here.bits; + state->length = (unsigned)here.val; + if ((int)(here.op) == 0) { + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", here.val)); + state->mode = LIT; + break; + } + if (here.op & 32) { + Tracevv((stderr, "inflate: end of block\n")); + state->back = -1; + state->mode = TYPE; + break; + } + if (here.op & 64) { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + state->extra = (unsigned)(here.op) & 15; + state->mode = LENEXT; + case LENEXT: + if (state->extra) { + NEEDBITS(state->extra); + state->length += BITS(state->extra); + DROPBITS(state->extra); + state->back += state->extra; + } + Tracevv((stderr, "inflate: length %u\n", state->length)); + state->was = state->length; + state->mode = DIST; + case DIST: + for (;;) { + here = state->distcode[BITS(state->distbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if ((here.op & 0xf0) == 0) { + last = here; + for (;;) { + here = state->distcode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + here.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + state->back += last.bits; + } + DROPBITS(here.bits); + state->back += here.bits; + if (here.op & 64) { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + state->offset = (unsigned)here.val; + state->extra = (unsigned)(here.op) & 15; + state->mode = DISTEXT; + case DISTEXT: + if (state->extra) { + NEEDBITS(state->extra); + state->offset += BITS(state->extra); + DROPBITS(state->extra); + state->back += state->extra; + } +#ifdef INFLATE_STRICT + if (state->offset > state->dmax) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#endif + Tracevv((stderr, "inflate: distance %u\n", state->offset)); + state->mode = MATCH; + case MATCH: + if (left == 0) goto inf_leave; + copy = out - left; + if (state->offset > copy) { /* copy from window */ + copy = state->offset - copy; + if (copy > state->whave) { + if (state->sane) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + Trace((stderr, "inflate.c too far\n")); + copy -= state->whave; + if (copy > state->length) copy = state->length; + if (copy > left) copy = left; + left -= copy; + state->length -= copy; + do { + *put++ = 0; + } while (--copy); + if (state->length == 0) state->mode = LEN; + break; +#endif + } + if (copy > state->wnext) { + copy -= state->wnext; + from = state->window + (state->wsize - copy); + } + else + from = state->window + (state->wnext - copy); + if (copy > state->length) copy = state->length; + } + else { /* copy from output */ + from = put - state->offset; + copy = state->length; + } + if (copy > left) copy = left; + left -= copy; + state->length -= copy; + do { + *put++ = *from++; + } while (--copy); + if (state->length == 0) state->mode = LEN; + break; + case LIT: + if (left == 0) goto inf_leave; + *put++ = (unsigned char)(state->length); + left--; + state->mode = LEN; + break; + case CHECK: + if (state->wrap) { + NEEDBITS(32); + out -= left; + strm->total_out += out; + state->total += out; + if ((state->wrap & 4) && out) + strm->adler = state->check = + UPDATE(state->check, put - out, out); + out = left; + if ((state->wrap & 4) && ( +#ifdef GUNZIP + state->flags ? hold : +#endif + ZSWAP32(hold)) != state->check) { + strm->msg = (char *)"incorrect data check"; + state->mode = BAD; + break; + } + INITBITS(); + Tracev((stderr, "inflate: check matches trailer\n")); + } +#ifdef GUNZIP + state->mode = LENGTH; + case LENGTH: + if (state->wrap && state->flags) { + NEEDBITS(32); + if (hold != (state->total & 0xffffffffUL)) { + strm->msg = (char *)"incorrect length check"; + state->mode = BAD; + break; + } + INITBITS(); + Tracev((stderr, "inflate: length matches trailer\n")); + } +#endif + state->mode = DONE; + case DONE: + ret = Z_STREAM_END; + goto inf_leave; + case BAD: + ret = Z_DATA_ERROR; + goto inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + default: + return Z_STREAM_ERROR; + } + + /* + Return from inflate(), updating the total counts and the check value. + If there was no progress during the inflate() call, return a buffer + error. Call updatewindow() to create and/or update the window state. + Note: a memory error from inflate() is non-recoverable. + */ + inf_leave: + RESTORE(); + if (state->wsize || (out != strm->avail_out && state->mode < BAD && + (state->mode < CHECK || flush != Z_FINISH))) + if (updatewindow(strm, strm->next_out, out - strm->avail_out)) { + state->mode = MEM; + return Z_MEM_ERROR; + } + in -= strm->avail_in; + out -= strm->avail_out; + strm->total_in += in; + strm->total_out += out; + state->total += out; + if ((state->wrap & 4) && out) + strm->adler = state->check = + UPDATE(state->check, strm->next_out - out, out); + strm->data_type = (int)state->bits + (state->last ? 64 : 0) + + (state->mode == TYPE ? 128 : 0) + + (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0); + if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) + ret = Z_BUF_ERROR; + return ret; +} + +int inflateEnd(z_streamp strm) +{ + struct inflate_state FAR *state; + if (inflateStateCheck(strm)) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (state->window != Z_NULL) ZFREE(strm, state->window); + ZFREE(strm, strm->state); + strm->state = Z_NULL; + Tracev((stderr, "inflate: end\n")); + return Z_OK; +} diff -Nru wine-development-5.5/dlls/dbghelp/macho_module.c wine-development-5.6/dlls/dbghelp/macho_module.c --- wine-development-5.5/dlls/dbghelp/macho_module.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/macho_module.c 2020-04-10 18:54:32.000000000 +0000 @@ -21,66 +21,50 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#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 -#endif - #include #include #include #include -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef HAVE_SYS_MMAN_H -# include -#endif #include "ntstatus.h" #define WIN32_NO_STATUS #include "dbghelp_private.h" +#include "image_private.h" + #include "winternl.h" +#include "winioctl.h" +#define WINE_MOUNTMGR_EXTENSIONS +#include "ddk/mountmgr.h" + #include "wine/debug.h" #include "wine/heap.h" -#include "image_private.h" -#ifdef HAVE_MACH_O_LOADER_H - -#include -#include -#include -#include - -struct dyld_image_info32 { - uint32_t /* const struct mach_header* */ imageLoadAddress; - uint32_t /* const char* */ imageFilePath; - uint32_t /* uintptr_t */ imageFileModDate; +struct dyld_image_info32 +{ + UINT32 imageLoadAddress; /* const struct mach_header* */ + UINT32 imageFilePath; /* const char* */ + UINT32 imageFileModDate; /* uintptr_t */ }; -struct dyld_all_image_infos32 { - uint32_t version; - uint32_t infoArrayCount; - uint32_t /* const struct dyld_image_info* */ infoArray; +struct dyld_all_image_infos32 +{ + UINT32 version; + UINT32 infoArrayCount; + UINT32 infoArray; /* const struct dyld_image_info* */ }; -struct dyld_image_info64 { - uint64_t /* const struct mach_header* */ imageLoadAddress; - uint64_t /* const char* */ imageFilePath; - uint64_t /* uintptr_t */ imageFileModDate; +struct dyld_image_info64 +{ + UINT64 imageLoadAddress; /* const struct mach_header* */ + UINT64 imageFilePath; /* const char* */ + UINT64 imageFileModDate; /* uintptr_t */ }; -struct dyld_all_image_infos64 { - uint32_t version; - uint32_t infoArrayCount; - uint64_t /* const struct dyld_image_info* */ infoArray; +struct dyld_all_image_infos64 +{ + UINT32 version; + UINT32 infoArrayCount; + UINT64 infoArray; /* const struct dyld_image_info* */ }; union wine_image_info { @@ -93,6 +77,58 @@ struct dyld_all_image_infos64 infos64; }; +struct macho_header +{ + UINT32 magic; /* mach magic number identifier */ + UINT32 cputype; /* cpu specifier */ + UINT32 cpusubtype; /* machine specifier */ + UINT32 filetype; /* type of file */ + UINT32 ncmds; /* number of load commands */ + UINT32 sizeofcmds; /* the size of all the load commands */ + UINT32 flags; /* flags */ + UINT32 reserved; /* reserved */ +}; + +struct macho_segment_command +{ + UINT32 cmd; /* LC_SEGMENT_64 */ + UINT32 cmdsize; /* includes sizeof section_64 structs */ + char segname[16]; /* segment name */ + UINT64 vmaddr; /* memory address of this segment */ + UINT64 vmsize; /* memory size of this segment */ + UINT64 fileoff; /* file offset of this segment */ + UINT64 filesize; /* amount to map from the file */ + UINT32 maxprot; /* maximum VM protection */ + UINT32 initprot; /* initial VM protection */ + UINT32 nsects; /* number of sections in segment */ + UINT32 flags; /* flags */ +}; + +struct macho_segment_command32 +{ + UINT32 cmd; /* LC_SEGMENT */ + UINT32 cmdsize; /* includes sizeof section structs */ + char segname[16]; /* segment name */ + UINT32 vmaddr; /* memory address of this segment */ + UINT32 vmsize; /* memory size of this segment */ + UINT32 fileoff; /* file offset of this segment */ + UINT32 filesize; /* amount to map from the file */ + UINT32 maxprot; /* maximum VM protection */ + UINT32 initprot; /* initial VM protection */ + UINT32 nsects; /* number of sections in segment */ + UINT32 flags; /* flags */ +}; + +struct macho_symtab_command +{ + UINT32 cmd; /* LC_SYMTAB */ + UINT32 cmdsize; /* sizeof(struct symtab_command) */ + UINT32 symoff; /* symbol table offset */ + UINT32 nsyms; /* number of symbol table entries */ + UINT32 stroff; /* string table offset */ + UINT32 strsize; /* string table size in bytes */ +}; + #ifdef WORDS_BIGENDIAN #define swap_ulong_be_to_host(n) (n) #else @@ -111,6 +147,27 @@ memory by dyld. */ #define MACHO_DYLD_IN_SHARED_CACHE 0x80000000 +#define MACHO_FAT_MAGIC 0xcafebabe +#define MACHO_MH_MAGIC_32 0xfeedface +#define MACHO_MH_MAGIC_64 0xfeedfacf + +#define MACHO_CPU_TYPE_X86 0x00000007 +#define MACHO_CPU_TYPE_X86_64 0x01000007 + +#define MACHO_MH_EXECUTE 0x2 +#define MACHO_MH_DYLIB 0x6 +#define MACHO_MH_DYLINKER 0x7 +#define MACHO_MH_BUNDLE 0x8 +#define MACHO_MH_DSYM 0xa + +#define MACHO_LC_SEGMENT 0x01 +#define MACHO_LC_SYMTAB 0x02 +#define MACHO_LC_SEGMENT_64 0x19 +#define MACHO_LC_UUID 0x1b + +#define MACHO_SECTION_TYPE 0x000000ff +#define MACHO_S_ATTR_PURE_INSTRUCTIONS 0x80000000 +#define MACHO_S_ATTR_SOME_INSTRUCTIONS 0x00000400 #define UUID_STRING_LEN 37 /* 16 bytes at 2 hex digits apiece, 4 dashes, and the null terminator */ @@ -141,7 +198,7 @@ static void macho_unmap_file(struct image_file_map* fmap); -static char* format_uuid(const uint8_t uuid[16], char out[UUID_STRING_LEN]) +static char* format_uuid(const UINT8 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], @@ -443,12 +500,12 @@ * * Maps the load commands from a Mach-O file into memory */ -static const struct load_command* macho_map_load_commands(struct macho_file_map* fmap) +static const struct macho_load_command* macho_map_load_commands(struct macho_file_map* fmap) { if (fmap->load_commands == IMAGE_NO_MAP) { - fmap->load_commands = (const struct load_command*) macho_map_range( - fmap, fmap->header_size, fmap->mach_header.sizeofcmds, NULL); + fmap->load_commands = (const struct macho_load_command*) macho_map_range( + fmap, fmap->header_size, fmap->commands_size, NULL); TRACE("Mapped load commands: %p\n", fmap->load_commands); } @@ -466,7 +523,7 @@ { TRACE("Unmapping load commands: %p\n", fmap->load_commands); macho_unmap_range(NULL, (const void**)&fmap->load_commands, fmap, - fmap->header_size, fmap->mach_header.sizeofcmds); + fmap->header_size, fmap->commands_size); } } @@ -475,9 +532,9 @@ * * Advance to the next load command */ -static const struct load_command* macho_next_load_command(const struct load_command* lc) +static const struct macho_load_command* macho_next_load_command(const struct macho_load_command* lc) { - return (const struct load_command*)((const char*)lc + lc->cmdsize); + return (const struct macho_load_command*)((const char*)lc + lc->cmdsize); } /****************************************************************** @@ -492,11 +549,11 @@ * processed. */ static int macho_enum_load_commands(struct image_file_map *ifm, unsigned cmd, - int (*cb)(struct image_file_map*, const struct load_command*, void*), + int (*cb)(struct image_file_map*, const struct macho_load_command*, void*), void* user) { struct macho_file_map* fmap = &ifm->u.macho; - const struct load_command* lc; + const struct macho_load_command* lc; int i; int count = 0; @@ -504,9 +561,9 @@ if ((lc = macho_map_load_commands(fmap)) == IMAGE_NO_MAP) return -1; - TRACE("%d total commands\n", fmap->mach_header.ncmds); + TRACE("%u total commands\n", fmap->commands_count); - for (i = 0; i < fmap->mach_header.ncmds; i++, lc = macho_next_load_command(lc)) + for (i = 0; i < fmap->commands_count; i++, lc = macho_next_load_command(lc)) { int result; @@ -528,20 +585,20 @@ * significant sections in a Mach-O file. All commands are * expected to be of LC_SEGMENT[_64] type. */ -static int macho_count_sections(struct image_file_map* ifm, const struct load_command* lc, void* user) +static int macho_count_sections(struct image_file_map* ifm, const struct macho_load_command* lc, void* user) { char segname[16]; - uint32_t nsects; + size_t nsects; if (ifm->addr_size == 32) { - const struct segment_command *sc = (const struct segment_command *)lc; + const struct macho_segment_command32 *sc = (const struct macho_segment_command32 *)lc; memcpy(segname, sc->segname, sizeof(segname)); nsects = sc->nsects; } else { - const struct segment_command_64 *sc = (const struct segment_command_64 *)lc; + const struct macho_segment_command *sc = (const struct macho_segment_command *)lc; memcpy(segname, sc->segname, sizeof(segname)); nsects = sc->nsects; } @@ -560,21 +617,21 @@ * range covered by the segments of a Mach-O file and builds the * section map. All commands are expected to be of LC_SEGMENT[_64] type. */ -static int macho_load_section_info(struct image_file_map* ifm, const struct load_command* lc, void* user) +static int macho_load_section_info(struct image_file_map* ifm, const struct macho_load_command* lc, void* user) { struct macho_file_map* fmap = &ifm->u.macho; struct section_info* info = user; BOOL ignore; int i; ULONG_PTR tmp, page_mask = sysinfo.dwPageSize - 1; - uint64_t vmaddr, vmsize; + UINT64 vmaddr, vmsize; char segname[16]; - uint32_t nsects; + size_t nsects; const void *sections; if (ifm->addr_size == 32) { - const struct segment_command *sc = (const struct segment_command *)lc; + const struct macho_segment_command32 *sc = (const struct macho_segment_command32 *)lc; vmaddr = sc->vmaddr; vmsize = sc->vmsize; memcpy(segname, sc->segname, sizeof(segname)); @@ -583,7 +640,7 @@ } else { - const struct segment_command_64 *sc = (const struct segment_command_64 *)lc; + const struct macho_segment_command *sc = (const struct macho_segment_command *)lc; vmaddr = sc->vmaddr; vmsize = sc->vmsize; memcpy(segname, sc->segname, sizeof(segname)); @@ -599,7 +656,7 @@ /* Images in the dyld shared cache have their segments mapped non-contiguously. We don't know how to properly locate any of the segments other than __TEXT, so ignore them. */ - ignore = (info->split_segs && strcmp(segname, SEG_TEXT)); + ignore = (info->split_segs && strcmp(segname, "__TEXT")); if (!strncmp(segname, "WINE_", 5)) TRACE("Ignoring special Wine segment %s\n", debugstr_an(segname, sizeof(segname))); @@ -624,7 +681,7 @@ { if (ifm->addr_size == 32) { - const struct section *section = &((const struct section *)sections)[i]; + const struct macho_section32 *section = &((const struct macho_section32 *)sections)[i]; memcpy(fmap->sect[info->section_index].section.sectname, section->sectname, sizeof(section->sectname)); memcpy(fmap->sect[info->section_index].section.segname, section->segname, sizeof(section->segname)); fmap->sect[info->section_index].section.addr = section->addr; @@ -636,7 +693,7 @@ fmap->sect[info->section_index].section.flags = section->flags; } else - fmap->sect[info->section_index].section = ((const struct section_64 *)sections)[i]; + fmap->sect[info->section_index].section = ((const struct macho_section *)sections)[i]; fmap->sect[info->section_index].mapped = IMAGE_NO_MAP; fmap->sect[info->section_index].ignored = ignore; @@ -652,9 +709,9 @@ * Callback for macho_enum_load_commands. Records the UUID load * command of a Mach-O file. */ -static int find_uuid(struct image_file_map* ifm, const struct load_command* lc, void* user) +static int find_uuid(struct image_file_map* ifm, const struct macho_load_command* lc, void* user) { - ifm->u.macho.uuid = (const struct uuid_command*)lc; + ifm->u.macho.uuid = (const struct macho_uuid_command*)lc; return 1; } @@ -682,16 +739,22 @@ BOOL split_segs, struct image_file_map* ifm) { struct macho_file_map* fmap = &ifm->u.macho; - struct fat_header fat_header; + struct macho_header mach_header; int i; WCHAR* filename; struct section_info info; BOOL ret = FALSE; - cpu_type_t target_cpu = (pcs->is_64bit) ? CPU_TYPE_X86_64 : CPU_TYPE_X86; - uint32_t target_magic = (pcs->is_64bit) ? MH_MAGIC_64 : MH_MAGIC; - uint32_t target_cmd = (pcs->is_64bit) ? LC_SEGMENT_64 : LC_SEGMENT; + UINT32 target_cpu = (pcs->is_64bit) ? MACHO_CPU_TYPE_X86_64 : MACHO_CPU_TYPE_X86; + UINT32 target_magic = (pcs->is_64bit) ? MACHO_MH_MAGIC_64 : MACHO_MH_MAGIC_32; + UINT32 target_cmd = (pcs->is_64bit) ? MACHO_LC_SEGMENT_64 : MACHO_LC_SEGMENT; DWORD bytes_read; + struct + { + UINT32 magic; /* FAT_MAGIC or FAT_MAGIC_64 */ + UINT32 nfat_arch; /* number of structs that follow */ + } fat_header; + TRACE("(%s, %p)\n", debugstr_w(filenameW), fmap); reset_file_map(ifm); @@ -700,7 +763,7 @@ ifm->ops = &macho_file_map_ops; ifm->alternate = NULL; ifm->addr_size = (pcs->is_64bit) ? 64 : 32; - fmap->header_size = (pcs->is_64bit) ? sizeof(struct mach_header_64) : sizeof(struct mach_header); + fmap->header_size = (pcs->is_64bit) ? sizeof(struct macho_header) : FIELD_OFFSET(struct macho_header, reserved); if (!(filename = get_dos_file_name(filenameW))) return FALSE; @@ -720,12 +783,20 @@ TRACE("... got possible fat header\n"); /* Fat header is always in big-endian order. */ - if (swap_ulong_be_to_host(fat_header.magic) == FAT_MAGIC) + if (swap_ulong_be_to_host(fat_header.magic) == MACHO_FAT_MAGIC) { int narch = swap_ulong_be_to_host(fat_header.nfat_arch); for (i = 0; i < narch; i++) { - struct fat_arch fat_arch; + struct + { + UINT32 cputype; /* cpu specifier (int) */ + UINT32 cpusubtype; /* machine specifier (int) */ + UINT32 offset; /* file offset to this object file */ + UINT32 size; /* size of this object file */ + UINT32 align; /* alignment as a power of 2 */ + } fat_arch; + if (!ReadFile(fmap->handle, &fat_arch, sizeof(fat_arch), &bytes_read, NULL) || bytes_read != sizeof(fat_arch)) goto done; if (swap_ulong_be_to_host(fat_arch.cputype) == target_cpu) @@ -745,21 +816,22 @@ /* Individual architecture (standalone or within a fat file) is in its native byte order. */ SetFilePointer(fmap->handle, fmap->arch_offset, 0, FILE_BEGIN); - if (!ReadFile(fmap->handle, &fmap->mach_header, sizeof(fmap->mach_header), &bytes_read, NULL) - || bytes_read != sizeof(fmap->mach_header)) + if (!ReadFile(fmap->handle, &mach_header, fmap->header_size, &bytes_read, NULL) + || bytes_read != fmap->header_size) goto done; TRACE("... got possible Mach header\n"); /* and check for a Mach-O header */ - if (fmap->mach_header.magic != target_magic || - fmap->mach_header.cputype != target_cpu) goto done; + if (mach_header.magic != target_magic || mach_header.cputype != target_cpu) goto done; + fmap->commands_size = mach_header.sizeofcmds; + fmap->commands_count = mach_header.ncmds; /* Make sure the file type is one of the ones we expect. */ - switch (fmap->mach_header.filetype) + switch (mach_header.filetype) { - case MH_EXECUTE: - case MH_DYLIB: - case MH_DYLINKER: - case MH_BUNDLE: - case MH_DSYM: + case MACHO_MH_EXECUTE: + case MACHO_MH_DYLIB: + case MACHO_MH_DYLINKER: + case MACHO_MH_BUNDLE: + case MACHO_MH_DSYM: break; default: goto done; @@ -790,7 +862,7 @@ TRACE("segs_start: 0x%08lx, segs_size: 0x%08lx\n", (ULONG_PTR)fmap->segs_start, (ULONG_PTR)fmap->segs_size); - if (macho_enum_load_commands(ifm, LC_UUID, find_uuid, NULL) < 0) + if (macho_enum_load_commands(ifm, MACHO_LC_UUID, find_uuid, NULL) < 0) goto done; if (fmap->uuid) { @@ -863,8 +935,8 @@ sectidx--; /* convert from 1-based to 0-based */ if (sectidx >= fmap->num_sections || fmap->sect[sectidx].ignored) return FALSE; - ret = (!(fmap->sect[sectidx].section.flags & SECTION_TYPE) && - (fmap->sect[sectidx].section.flags & (S_ATTR_PURE_INSTRUCTIONS|S_ATTR_SOME_INSTRUCTIONS))); + ret = (!(fmap->sect[sectidx].section.flags & MACHO_SECTION_TYPE) && + (fmap->sect[sectidx].section.flags & (MACHO_S_ATTR_PURE_INSTRUCTIONS | MACHO_S_ATTR_SOME_INSTRUCTIONS))); TRACE("-> %d\n", ret); return ret; } @@ -925,14 +997,14 @@ * load commands from the Mach-O file. */ static int macho_parse_symtab(struct image_file_map* ifm, - const struct load_command* lc, void* user) + const struct macho_load_command* lc, void* user) { struct macho_file_map* fmap = &ifm->u.macho; - const struct symtab_command* sc = (const struct symtab_command*)lc; + const struct macho_symtab_command* sc = (const struct macho_symtab_command*)lc; struct macho_debug_info* mdi = user; const char* stabstr; int ret = 0; - size_t stabsize = (ifm->addr_size == 32) ? sizeof(struct nlist) : sizeof(struct nlist_64); + size_t stabsize = (ifm->addr_size == 32) ? sizeof(struct stab_nlist) : sizeof(struct macho64_nlist); const char *stab; TRACE("(%p/%p, %p, %p) %u syms at 0x%08x, strings 0x%08x - 0x%08x\n", fmap, fmap->handle, lc, @@ -944,7 +1016,7 @@ if (!stabs_parse(mdi->module, mdi->module->format_info[DFI_MACHO]->u.macho_info->load_addr - fmap->segs_start, - stab, sc->nsyms * stabsize, + stab, sc->nsyms, stabsize, stabstr, sc->strsize, macho_stabs_def_cb, mdi)) ret = -1; @@ -1160,6 +1232,48 @@ return FALSE; } +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 WCHAR *query_dsym(const GUID *uuid, const WCHAR *filename) +{ + MOUNTMGR_TARGET_NAME *query; + WCHAR *ret = NULL; + char buf[1024]; + HANDLE mgr; + BOOL res; + + mgr = CreateFileW(MOUNTMGR_DOS_DEVICE_NAME, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, + OPEN_EXISTING, 0, 0); + if (mgr == INVALID_HANDLE_VALUE) return NULL; + + query = (void *)buf; + res = DeviceIoControl( mgr, IOCTL_MOUNTMGR_QUERY_SYMBOL_FILE, (void*)uuid, sizeof(*uuid), query, sizeof(buf), NULL, NULL ); + if (!res && GetLastError() == ERROR_MORE_DATA) + { + size_t size = FIELD_OFFSET(MOUNTMGR_TARGET_NAME, DeviceName[query->DeviceNameLength]); + query = HeapAlloc(GetProcessHeap(), 0, size); + if (query) + res = DeviceIoControl( mgr, IOCTL_MOUNTMGR_QUERY_SYMBOL_FILE, (void*)uuid, sizeof(*uuid), query, size, NULL, NULL ); + } + CloseHandle(mgr); + + if (res && (ret = HeapAlloc(GetProcessHeap(), 0, + query->DeviceNameLength + sizeof(dsym_subpath) + lstrlenW(filename) * sizeof(WCHAR)))) + { + WCHAR *p = ret; + memcpy(p, query->DeviceName, query->DeviceNameLength); + p += query->DeviceNameLength / sizeof(WCHAR); + memcpy(p, dsym_subpath, sizeof(dsym_subpath)); + p += ARRAY_SIZE(dsym_subpath) - 1; + lstrcpyW(p, filename); + } + + if (query != (void *)buf) HeapFree(GetProcessHeap(), 0, query); + return ret; +} + /****************************************************************** * find_and_map_dsym * @@ -1174,16 +1288,11 @@ static void find_and_map_dsym(struct process *pcs, 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. */ @@ -1191,56 +1300,28 @@ return; p = file_name(module->module.LoadedImageName); - len = strlenW(module->module.LoadedImageName) + strlenW(dot_dsym) + strlenW(dsym_subpath) + strlenW(p) + 1; + len = lstrlenW(module->module.LoadedImageName) + lstrlenW(dot_dsym) + lstrlenW(dsym_subpath) + lstrlenW(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); + lstrcpyW(path, module->module.LoadedImageName); + lstrcatW(path, dot_dsym); + lstrcatW(path, dsym_subpath); + lstrcatW(path, p); if (try_dsym(pcs, path, fmap)) goto found; - strcpyW(path + strlenW(module->module.LoadedImageName), dot_dwarf); + lstrcpyW(path + lstrlenW(module->module.LoadedImageName), dot_dwarf); if (try_dsym(pcs, 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(pcs, path, fmap)) - goto found; - } - } + HeapFree(GetProcessHeap(), 0, path); + if ((path = query_dsym((const GUID *)fmap->uuid->uuid, p))) try_dsym(pcs, path, fmap); found: HeapFree(GetProcessHeap(), 0, path); - if (query) CFRelease(query); } /****************************************************************** @@ -1259,11 +1340,11 @@ if (load_addr) { - cpu_type_t target_cpu = (process->is_64bit) ? CPU_TYPE_X86_64 : CPU_TYPE_X86; - uint32_t target_magic = (process->is_64bit) ? MH_MAGIC_64 : MH_MAGIC; - struct mach_header header; + UINT32 target_cpu = (process->is_64bit) ? MACHO_CPU_TYPE_X86_64 : MACHO_CPU_TYPE_X86; + UINT32 target_magic = (process->is_64bit) ? MACHO_MH_MAGIC_64 : MACHO_MH_MAGIC_32; + struct macho_header header; - if (ReadProcessMemory(process->handle, (void*)load_addr, &header, sizeof(header), NULL) && + if (read_process_memory(process, load_addr, &header, FIELD_OFFSET(struct macho_header, reserved)) && header.magic == target_magic && header.cputype == target_cpu && header.flags & MACHO_DYLD_IN_SHARED_CACHE) { @@ -1313,7 +1394,7 @@ mdi.module = module; pool_init(&mdi.pool, 65536); hash_table_init(&mdi.pool, &mdi.ht_symtab, 256); - result = macho_enum_load_commands(ifm, LC_SYMTAB, macho_parse_symtab, &mdi); + result = macho_enum_load_commands(ifm, MACHO_LC_SYMTAB, macho_parse_symtab, &mdi); if (result > 0) ret = TRUE; else if (result < 0) @@ -1322,7 +1403,7 @@ if (!(dbghelp_options & SYMOPT_PUBLICS_ONLY) && fmap->dsym) { mdi.fmap = &fmap->dsym->u.macho; - result = macho_enum_load_commands(fmap->dsym, LC_SYMTAB, macho_parse_symtab, &mdi); + result = macho_enum_load_commands(fmap->dsym, MACHO_LC_SYMTAB, macho_parse_symtab, &mdi); if (result > 0) ret = TRUE; else if (result < 0) @@ -1367,41 +1448,6 @@ } /****************************************************************** - * get_dyld_image_info_address - */ -static ULONG_PTR get_dyld_image_info_address(struct process* pcs) -{ - ULONG_PTR dyld_image_info_address = 0; - -#ifndef __LP64__ /* No reading the symtab with nlist(3) in LP64 */ - if (!dyld_image_info_address) - { - static void* dyld_all_image_infos_addr; - - /* Our next best guess is that dyld was loaded at its base address - and we can find the dyld image infos address by looking up its symbol. */ - if (!dyld_all_image_infos_addr) - { - struct nlist nl[2]; - memset(nl, 0, sizeof(nl)); - nl[0].n_un.n_name = (char*)"_dyld_all_image_infos"; - if (!nlist("/usr/lib/dyld", nl)) - dyld_all_image_infos_addr = (void*)nl[0].n_value; - } - - if (dyld_all_image_infos_addr) - { - TRACE("got dyld_image_info_address %p from /usr/lib/dyld symbol table\n", - dyld_all_image_infos_addr); - dyld_image_info_address = (ULONG_PTR)dyld_all_image_infos_addr; - } - } -#endif - - return dyld_image_info_address; -} - -/****************************************************************** * macho_load_file * * Loads the information for Mach-O module stored in 'filename'. @@ -1468,7 +1514,7 @@ ptr = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(filename) + 1) * sizeof(WCHAR)); if (ptr) { - strcpyW(ptr, filename); + lstrcpyW(ptr, filename); macho_info->module_name = ptr; } else ret = FALSE; @@ -1520,21 +1566,15 @@ return module->module.SymType; } - if (strstrW(filename, S_libstdcPPW)) return FALSE; /* We know we can't do it */ + if (wcsstr(filename, S_libstdcPPW)) return FALSE; /* We know we can't do it */ load_params.process = pcs; load_params.load_addr = load_addr; load_params.macho_info = macho_info; - /* If has no directories, try PATH first. */ + /* Try DYLD_LIBRARY_PATH first. */ p = file_name(filename); - if (p == filename) - { - ret = search_unix_path(filename, getenv("PATH"), macho_load_file_cb, &load_params); - } - /* Try DYLD_LIBRARY_PATH, with just the filename (no directories). */ - if (!ret) - ret = search_unix_path(p, getenv("DYLD_LIBRARY_PATH"), macho_load_file_cb, &load_params); + ret = search_unix_path(p, getenv("DYLD_LIBRARY_PATH"), macho_load_file_cb, &load_params); /* Try the path as given. */ if (!ret) @@ -1548,7 +1588,7 @@ ret = search_unix_path(p, fallback, macho_load_file_cb, &load_params); } if (!ret && p == filename) - ret = search_dll_path(filename, macho_load_file_cb, &load_params); + ret = search_dll_path(pcs, filename, macho_load_file_cb, &load_params); return ret; } @@ -1578,8 +1618,7 @@ else len = sizeof(image_infos.infos32); if (!pcs->dbg_hdr_addr || - !ReadProcessMemory(pcs->handle, (void*)pcs->dbg_hdr_addr, - &image_infos, len, NULL)) + !read_process_memory(pcs, pcs->dbg_hdr_addr, &image_infos, len)) goto done; if (!pcs->is_64bit) { @@ -1589,7 +1628,7 @@ } if (!image_infos.infos64.infoArray) goto done; - TRACE("Process has %u image infos at %p\n", image_infos.infos64.infoArrayCount, (void*)image_infos.infos64.infoArray); + TRACE("Process has %u image infos at %s\n", image_infos.infos64.infoArrayCount, wine_dbgstr_longlong(image_infos.infos64.infoArray)); if (pcs->is_64bit) len = sizeof(info_array->info64); @@ -1598,8 +1637,7 @@ len *= image_infos.infos64.infoArrayCount; info_array = HeapAlloc(GetProcessHeap(), 0, len); if (!info_array || - !ReadProcessMemory(pcs->handle, (void*)image_infos.infos64.infoArray, - info_array, len, NULL)) + !read_process_memory(pcs, image_infos.infos64.infoArray, info_array, len)) goto done; TRACE("... read image infos\n"); @@ -1615,12 +1653,12 @@ info.imageFilePath = info32->imageFilePath; } if (info.imageFilePath && - ReadProcessMemory(pcs->handle, (void*)info.imageFilePath, bufstr, sizeof(bufstr), NULL)) + read_process_memory(pcs, info.imageFilePath, bufstr, sizeof(bufstr))) { bufstr[sizeof(bufstr) - 1] = '\0'; TRACE("[%d] image file %s\n", i, debugstr_a(bufstr)); MultiByteToWideChar(CP_UNIXCP, 0, bufstr, -1, bufstrW, ARRAY_SIZE(bufstrW)); - if (main_name && !bufstrW[0]) strcpyW(bufstrW, main_name); + if (main_name && !bufstrW[0]) lstrcpyW(bufstrW, main_name); if (!cb(bufstrW, info.imageLoadAddress, user)) break; } } @@ -1702,6 +1740,7 @@ TRACE("(%p, %p, %p)\n", process->handle, cb, user); macho_info.flags = MACHO_INFO_NAME; + macho_info.module_name = NULL; ret = macho_enum_modules_internal(process, macho_info.module_name, cb, user); HeapFree(GetProcessHeap(), 0, (char*)macho_info.module_name); return ret; @@ -1791,16 +1830,15 @@ BOOL ret = FALSE; union wine_all_image_infos image_infos; union wine_image_info image_info; - uint32_t len; - char path[PATH_MAX]; + unsigned int len; + char path[1024]; BOOL got_path = FALSE; if (pcs->is_64bit) len = sizeof(image_infos.infos64); else len = sizeof(image_infos.infos32); - if (pcs->dbg_hdr_addr && - ReadProcessMemory(pcs->handle, (void*)pcs->dbg_hdr_addr, &image_infos, len, NULL)) + if (read_process_memory(pcs, pcs->dbg_hdr_addr, &image_infos, len)) { if (pcs->is_64bit) len = sizeof(image_info.info64); @@ -1812,7 +1850,7 @@ len = sizeof(image_info.info32); } if (image_infos.infos64.infoArray && image_infos.infos64.infoArrayCount && - ReadProcessMemory(pcs->handle, (void*)image_infos.infos64.infoArray, &image_info, len, NULL)) + read_process_memory(pcs, image_infos.infos64.infoArray, &image_info, len)) { if (!pcs->is_64bit) { @@ -1822,7 +1860,7 @@ } for (len = sizeof(path); image_info.info64.imageFilePath && len > 0; len /= 2) { - if (ReadProcessMemory(pcs->handle, (void*)image_info.info64.imageFilePath, path, len, NULL)) + if (read_process_memory(pcs, image_info.info64.imageFilePath, path, len)) { path[len - 1] = 0; got_path = TRUE; @@ -1833,18 +1871,6 @@ } } - /* If we couldn't get the executable path from the target process, try our - own. It will almost always be the same. */ - if (!got_path) - { - len = sizeof(path); - if (!_NSGetExecutablePath(path, &len)) - { - got_path = TRUE; - TRACE("using own executable path: %s\n", debugstr_a(path)); - } - } - if (got_path) { WCHAR* pathW; @@ -1887,7 +1913,7 @@ struct macho_info macho_info; TRACE("(%p/%p)\n", pcs, pcs->handle); - pcs->dbg_hdr_addr = addr ? addr : get_dyld_image_info_address(pcs); + pcs->dbg_hdr_addr = addr; macho_info.flags = MACHO_INFO_MODULE; if (!macho_search_loader(pcs, &macho_info)) return FALSE; macho_info.module->format_info[DFI_MACHO]->u.macho_info->is_loader = 1; @@ -1896,12 +1922,3 @@ TRACE("Found macho debug header %#lx\n", pcs->dbg_hdr_addr); return TRUE; } - -#else /* HAVE_MACH_O_LOADER_H */ - -BOOL macho_read_wine_loader_dbg_info(struct process* pcs, ULONG_PTR addr) -{ - return FALSE; -} - -#endif /* HAVE_MACH_O_LOADER_H */ diff -Nru wine-development-5.5/dlls/dbghelp/Makefile.in wine-development-5.6/dlls/dbghelp/Makefile.in --- wine-development-5.5/dlls/dbghelp/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -2,8 +2,8 @@ IMPORTLIB = dbghelp EXTRADEFS = -D_IMAGEHLP_SOURCE_ DELAYIMPORTS = version -EXTRAINCL = $(Z_CFLAGS) -EXTRALIBS = $(Z_LIBS) $(CORESERVICES_LIBS) $(COREFOUNDATION_LIBS) + +EXTRADLLFLAGS = -mno-cygwin C_SRCS = \ coff.c \ @@ -16,6 +16,7 @@ dwarf.c \ elf_module.c \ image.c \ + inflate.c \ macho_module.c \ minidump.c \ module.c \ diff -Nru wine-development-5.5/dlls/dbghelp/minidump.c wine-development-5.6/dlls/dbghelp/minidump.c --- wine-development-5.5/dlls/dbghelp/minidump.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/minidump.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,7 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" #include #define NONAMELESSUNION @@ -832,9 +831,7 @@ for (pos = 0; pos < dc->mem[i].size; pos += sizeof(tmp)) { len = min(dc->mem[i].size - pos, sizeof(tmp)); - if (ReadProcessMemory(dc->process->handle, - (void*)(DWORD_PTR)(dc->mem[i].base + pos), - tmp, len, NULL)) + if (read_process_memory(dc->process, dc->mem[i].base + pos, tmp, len)) WriteFile(dc->hFile, tmp, len, &written, NULL); } dc->rva += mdMem.Memory.DataSize; @@ -890,9 +887,7 @@ for (pos = 0; pos < dc->mem64[i].size; pos += sizeof(tmp)) { len = min(dc->mem64[i].size - pos, sizeof(tmp)); - if (ReadProcessMemory(dc->process->handle, - (void*)(ULONG_PTR)(dc->mem64[i].base + pos), - tmp, len, NULL)) + if (read_process_memory(dc->process, dc->mem64[i].base + pos, tmp, len)) WriteFile(dc->hFile, tmp, len, &written, NULL); } filepos.QuadPart += mdMem64.DataSize; diff -Nru wine-development-5.5/dlls/dbghelp/module.c wine-development-5.6/dlls/dbghelp/module.c --- wine-development-5.5/dlls/dbghelp/module.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/module.c 2020-04-10 18:54:32.000000000 +0000 @@ -19,7 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" #include #include #include @@ -34,6 +33,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(dbghelp); +#define NOTE_GNU_BUILD_ID 3 + const WCHAR S_ElfW[] = {'<','e','l','f','>','\0'}; const WCHAR S_WineLoaderW[] = {'<','w','i','n','e','-','l','o','a','d','e','r','>','\0'}; static const WCHAR S_DotSoW[] = {'.','s','o','\0'}; @@ -54,9 +55,9 @@ for (e = ext; *e; e++) { - l = strlenW(*e); + l = lstrlenW(*e); if (l >= len) return 0; - if (strncmpiW(&ptr[len - l], *e, l)) continue; + if (wcsnicmp(&ptr[len - l], *e, l)) continue; return l; } return 0; @@ -66,7 +67,7 @@ { const WCHAR* ptr; - if (!endptr) endptr = name + strlenW(name); + if (!endptr) endptr = name + lstrlenW(name); for (ptr = endptr - 1; ptr >= name; ptr--) { if (*ptr == '/' || *ptr == '\\') break; @@ -94,14 +95,14 @@ else { buffer = heap_alloc( sizeof(wineW) + 2 * sizeof(WCHAR) ); - strcpyW( buffer, wineW ); + lstrcpyW( buffer, wineW ); } - if (!strcmpW( filename, buffer )) + if (!wcscmp( filename, buffer )) ret = TRUE; - strcatW( buffer, suffixW ); - if (!strcmpW( filename, buffer )) + lstrcatW( buffer, suffixW ); + if (!wcscmp( filename, buffer )) ret = TRUE; heap_free( buffer ); @@ -113,7 +114,7 @@ const WCHAR *ptr, *endptr; size_t len, l; - ptr = get_filename(in, endptr = in + strlenW(in)); + ptr = get_filename(in, endptr = in + lstrlenW(in)); len = min(endptr - ptr, size - 1); memcpy(out, ptr, len * sizeof(WCHAR)); out[len] = '\0'; @@ -123,11 +124,11 @@ lstrcpynW(out, S_WineLoaderW, size); else { - if (len > 3 && !strcmpiW(&out[len - 3], S_DotSoW) && + if (len > 3 && !wcsicmp(&out[len - 3], S_DotSoW) && (l = match_ext(out, len - 3))) - strcpyW(&out[len - l - 3], S_ElfW); + lstrcpyW(&out[len - l - 3], S_ElfW); } - while ((*out = tolowerW(*out))) out++; + while ((*out = towlower(*out))) out++; } void module_set_module(struct module* module, const WCHAR* name) @@ -156,15 +157,15 @@ else { buffer = heap_alloc( sizeof(wineW) + 2 * sizeof(WCHAR) ); - strcpyW( buffer, wineW ); + lstrcpyW( buffer, wineW ); } - p = buffer + strlenW( buffer ) - strlenW( suffixW ); - if (p > buffer && !strcmpW( p, suffixW )) + p = buffer + lstrlenW( buffer ) - lstrlenW( suffixW ); + if (p > buffer && !wcscmp( p, suffixW )) *p = 0; if (pcs->is_64bit) - strcatW(buffer, suffixW); + lstrcatW(buffer, suffixW); TRACE( "returning %s\n", debugstr_w(buffer) ); return buffer; @@ -268,7 +269,7 @@ for (module = pcs->lmodules; module; module = module->next) { - if (!strcmpiW(name, module->module.ModuleName)) return module; + if (!wcsicmp(name, module->module.ModuleName)) return module; } SetLastError(ERROR_INVALID_NAME); return NULL; @@ -294,14 +295,14 @@ /* first compare the loaded image name... */ for (module = pcs->lmodules; module; module = module->next) { - if (!strcmpiW(name, module->module.LoadedImageName)) + if (!wcsicmp(name, module->module.LoadedImageName)) return module; } /* then compare the standard filenames (without the path) ... */ filename = get_filename(name, NULL); for (module = pcs->lmodules; module; module = module->next) { - if (!strcmpiW(filename, get_filename(module->module.LoadedImageName, NULL))) + if (!wcsicmp(filename, get_filename(module->module.LoadedImageName, NULL))) return module; } SetLastError(ERROR_INVALID_NAME); @@ -443,7 +444,7 @@ if (!base) return FALSE; filename = get_filename(ImageName, NULL); - len = strlenW(filename); + len = lstrlenW(filename); for (module = pcs->lmodules; module; module = module->next) { @@ -452,7 +453,7 @@ base < module->module.BaseOfImage + module->module.ImageSize) { modname = get_filename(module->module.LoadedImageName, NULL); - if (!strncmpiW(modname, filename, len) && + if (!wcsnicmp(modname, filename, len) && !memcmp(modname + len, S_DotSoW, 3 * sizeof(WCHAR))) { return TRUE; @@ -531,17 +532,17 @@ if (!fmap_link) return FALSE; filename_len = MultiByteToWideChar(CP_UNIXCP, 0, filename, -1, NULL, 0); - path_len = strlenW(module->module.LoadedImageName); - if (module->real_path) path_len = max(path_len, strlenW(module->real_path)); + path_len = lstrlenW(module->module.LoadedImageName); + if (module->real_path) path_len = max(path_len, lstrlenW(module->real_path)); p = HeapAlloc(GetProcessHeap(), 0, (globalDebugDirLen + path_len + 6 + 1 + filename_len + 1) * sizeof(WCHAR)); if (!p) goto found; /* we prebuild the string with "execdir" */ - strcpyW(p, module->module.LoadedImageName); + lstrcpyW(p, module->module.LoadedImageName); slash = p; - if ((slash2 = strrchrW(slash, '/'))) slash = slash2 + 1; - if ((slash2 = strrchrW(slash, '\\'))) slash = slash2 + 1; + if ((slash2 = wcsrchr(slash, '/'))) slash = slash2 + 1; + if ((slash2 = wcsrchr(slash, '\\'))) slash = slash2 + 1; /* testing execdir/filename */ MultiByteToWideChar(CP_UNIXCP, 0, filename, -1, slash, filename_len); @@ -554,10 +555,10 @@ if (module->real_path) { - strcpyW(p, module->real_path); + lstrcpyW(p, module->real_path); slash = p; - if ((slash2 = strrchrW(slash, '/'))) slash = slash2 + 1; - if ((slash2 = strrchrW(slash, '\\'))) slash = slash2 + 1; + if ((slash2 = wcsrchr(slash, '/'))) slash = slash2 + 1; + if ((slash2 = wcsrchr(slash, '\\'))) slash = slash2 + 1; MultiByteToWideChar(CP_UNIXCP, 0, filename, -1, slash, filename_len); if (image_check_debug_link(p, fmap_link, crc)) goto found; } @@ -640,7 +641,7 @@ if (note != IMAGE_NO_MAP) { /* the usual ELF note structure: name-size desc-size type */ - if (note[2] == NT_GNU_BUILD_ID) + if (note[2] == NOTE_GNU_BUILD_ID) { if (note[1] == idlen && !memcmp(note + 3 + ((note[0] + 3) >> 2), idend - idlen, idlen)) @@ -686,7 +687,7 @@ if (note != IMAGE_NO_MAP) { /* the usual ELF note structure: name-size desc-size type */ - if (note[2] == NT_GNU_BUILD_ID) + if (note[2] == NOTE_GNU_BUILD_ID) { ret = image_locate_build_id_target(fmap, (const BYTE*)(note + 3 + ((note[0] + 3) >> 2)), note[1]); } @@ -1173,9 +1174,9 @@ miw.CheckSum = miw64.CheckSum; miw.NumSyms = miw64.NumSyms; miw.SymType = miw64.SymType; - strcpyW(miw.ModuleName, miw64.ModuleName); - strcpyW(miw.ImageName, miw64.ImageName); - strcpyW(miw.LoadedImageName, miw64.LoadedImageName); + lstrcpyW(miw.ModuleName, miw64.ModuleName); + lstrcpyW(miw.ImageName, miw64.ImageName); + lstrcpyW(miw.LoadedImageName, miw64.LoadedImageName); memcpy(ModuleInfo, &miw, ModuleInfo->SizeOfStruct); return TRUE; diff -Nru wine-development-5.5/dlls/dbghelp/msc.c wine-development-5.6/dlls/dbghelp/msc.c --- wine-development-5.5/dlls/dbghelp/msc.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/msc.c 2020-04-10 18:54:32.000000000 +0000 @@ -34,17 +34,10 @@ #define NONAMELESSUNION -#include "config.h" -#include "wine/port.h" - #include #include #include - #include -#ifdef HAVE_UNISTD_H -# include -#endif #include #include "windef.h" @@ -2689,7 +2682,7 @@ { ptr = (const char*)imp + sizeof(*imp) + strlen(imp->filename); if (i >= CV_MAX_MODULES) FIXME("Out of bounds!!!\n"); - if (!_strnicmp(pdb_lookup->filename, imp->filename, -1)) + if (!stricmp(pdb_lookup->filename, imp->filename)) { if (module_index != -1) FIXME("Twice the entry\n"); else module_index = i; diff -Nru wine-development-5.5/dlls/dbghelp/path.c wine-development-5.6/dlls/dbghelp/path.c --- wine-development-5.5/dlls/dbghelp/path.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/path.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,7 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" #include #include #include @@ -47,7 +46,7 @@ { const WCHAR* p; - for (p = str + strlenW(str) - 1; p >= str && !is_sep(*p); p--); + for (p = str + lstrlenW(str) - 1; p >= str && !is_sep(*p); p--); return p + 1; } @@ -55,7 +54,7 @@ { int len; - for (len = strlenW(src) - 1; (len > 0) && (!is_sep(src[len])); len--); + for (len = lstrlenW(src) - 1; (len > 0) && (!is_sep(src[len])); len--); memcpy( dst, src, len * sizeof(WCHAR) ); dst[len] = 0; } @@ -177,12 +176,12 @@ TRACE("(%s %s %p %p)\n", debugstr_w(file), debugstr_w(match), filestop, matchstop); - fptr = file + strlenW(file) - 1; - mptr = match + strlenW(match) - 1; + fptr = file + lstrlenW(file) - 1; + mptr = match + lstrlenW(match) - 1; while (fptr >= file && mptr >= match) { - if (toupperW(*fptr) != toupperW(*mptr) && !(is_sep(*fptr) && is_sep(*mptr))) + if (towupper(*fptr) != towupper(*mptr) && !(is_sep(*fptr) && is_sep(*mptr))) break; fptr--; mptr--; } @@ -230,10 +229,10 @@ static const WCHAR S_DotW[] = {'.','\0'}; static const WCHAR S_DotDotW[] = {'.','.','\0'}; - pos = strlenW(buffer); + pos = lstrlenW(buffer); if (pos == 0) return FALSE; if (buffer[pos - 1] != '\\') buffer[pos++] = '\\'; - strcpyW(buffer + pos, S_AllW); + lstrcpyW(buffer + pos, S_AllW); if ((h = FindFirstFileW(buffer, &fd)) == INVALID_HANDLE_VALUE) return FALSE; /* doc doesn't specify how the tree is enumerated... @@ -241,9 +240,9 @@ */ do { - if (!strcmpW(fd.cFileName, S_DotW) || !strcmpW(fd.cFileName, S_DotDotW)) continue; + if (!wcscmp(fd.cFileName, S_DotW) || !wcscmp(fd.cFileName, S_DotDotW)) continue; - strcpyW(buffer + pos, fd.cFileName); + lstrcpyW(buffer + pos, fd.cFileName); if (recurse && (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) found = do_searchW(file, buffer, TRUE, cb, user); else if (SymMatchFileNameW(buffer, file, NULL, NULL)) @@ -264,7 +263,7 @@ { TRACE("(%s, %s, %p)\n", debugstr_w(root), debugstr_w(file), buffer); - strcpyW(buffer, root); + lstrcpyW(buffer, root); return do_searchW(file, buffer, TRUE, NULL, NULL); } @@ -297,7 +296,7 @@ TRACE("(%p %s %s %p %p %p)\n", hProcess, debugstr_w(root), debugstr_w(file), buffer, cb, user); - strcpyW(buffer, root); + lstrcpyW(buffer, root); return do_searchW(file, buffer, TRUE, cb, user); } @@ -391,13 +390,13 @@ /* first check full path to file */ if (sffip_cb(full_path, &s)) { - strcpyW(buffer, full_path); + lstrcpyW(buffer, full_path); return TRUE; } while (searchPath) { - ptr = strchrW(searchPath, ';'); + ptr = wcschr(searchPath, ';'); if (ptr) { memcpy(tmp, searchPath, (ptr - searchPath) * sizeof(WCHAR)); @@ -406,12 +405,12 @@ } else { - strcpyW(tmp, searchPath); + lstrcpyW(tmp, searchPath); searchPath = NULL; } if (do_searchW(filename, tmp, FALSE, sffip_cb, &s)) { - strcpyW(buffer, tmp); + lstrcpyW(buffer, tmp); return TRUE; } } @@ -585,7 +584,7 @@ } if (matched > mf->matched) { - strcpyW(mf->filename, buffer); + lstrcpyW(mf->filename, buffer); mf->matched = matched; } /* yes, EnumDirTree/do_search and SymFindFileInPath callbacks use the opposite @@ -620,7 +619,7 @@ /* first check full path to file */ if (module_find_cb(full_pathW, &mf)) { - strcpyW( buffer, full_pathW ); + lstrcpyW( buffer, full_pathW ); return TRUE; } @@ -644,7 +643,7 @@ while (searchPath) { - ptr = strchrW(searchPath, ';'); + ptr = wcschr(searchPath, ';'); if (ptr) { memcpy(buffer, searchPath, (ptr - searchPath) * sizeof(WCHAR)); @@ -653,7 +652,7 @@ } else { - strcpyW(buffer, searchPath); + lstrcpyW(buffer, searchPath); searchPath = NULL; } /* return first fully matched file */ @@ -662,7 +661,7 @@ /* if no fully matching file is found, return the best matching file if any */ if ((dbghelp_options & SYMOPT_LOAD_ANYTHING) && mf.matched) { - strcpyW( buffer, mf.filename ); + lstrcpyW( buffer, mf.filename ); *is_unmatched = TRUE; return TRUE; } @@ -692,19 +691,17 @@ return dos_path; } -BOOL search_dll_path(const WCHAR *name, BOOL (*match)(void*, HANDLE, const WCHAR*), void *param) +BOOL search_dll_path(const struct process *process, const WCHAR *name, BOOL (*match)(void*, HANDLE, const WCHAR*), void *param) { + const WCHAR *env; size_t len, i; HANDLE file; WCHAR *buf; BOOL ret; - static const WCHAR winebuilddirW[] = {'W','I','N','E','B','U','I','L','D','D','I','R',0}; - static const WCHAR winedlldirW[] = {'W','I','N','E','D','L','L','D','I','R','%','u',0}; - name = file_name(name); - if ((len = GetEnvironmentVariableW(winebuilddirW, NULL, 0))) + if ((env = process_getenv(process, L"WINEBUILDDIR"))) { WCHAR *p, *end; const WCHAR dllsW[] = { '\\','d','l','l','s','\\' }; @@ -713,16 +710,19 @@ const WCHAR dot_exeW[] = {'.','e','x','e',0}; const WCHAR dot_soW[] = {'.','s','o',0}; + + len = lstrlenW(env); if (!(buf = heap_alloc((len + 8 + 3 * lstrlenW(name)) * sizeof(WCHAR)))) return FALSE; - end = buf + GetEnvironmentVariableW(winebuilddirW, buf, len); + wcscpy(buf, env); + end = buf + len; memcpy(end, dllsW, sizeof(dllsW)); - strcpyW(end + ARRAY_SIZE(dllsW), name); - if ((p = strrchrW(end, '.')) && !lstrcmpW(p, dot_soW)) *p = 0; - if ((p = strrchrW(end, '.')) && !lstrcmpW(p, dot_dllW)) *p = 0; - p = end + strlenW(end); + lstrcpyW(end + ARRAY_SIZE(dllsW), name); + if ((p = wcsrchr(end, '.')) && !lstrcmpW(p, dot_soW)) *p = 0; + if ((p = wcsrchr(end, '.')) && !lstrcmpW(p, dot_dllW)) *p = 0; + p = end + lstrlenW(end); *p++ = '\\'; - strcpyW(p, name); + lstrcpyW(p, name); file = CreateFileW(buf, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (file != INVALID_HANDLE_VALUE) { @@ -733,12 +733,12 @@ memcpy(end, programsW, sizeof(programsW)); end += ARRAY_SIZE(programsW); - strcpyW(end, name); - if ((p = strrchrW(end, '.')) && !lstrcmpW(p, dot_soW)) *p = 0; - if ((p = strrchrW(end, '.')) && !lstrcmpW(p, dot_exeW)) *p = 0; - p = end + strlenW(end); + lstrcpyW(end, name); + if ((p = wcsrchr(end, '.')) && !lstrcmpW(p, dot_soW)) *p = 0; + if ((p = wcsrchr(end, '.')) && !lstrcmpW(p, dot_exeW)) *p = 0; + p = end + lstrlenW(end); *p++ = '\\'; - strcpyW(p, name); + lstrcpyW(p, name); file = CreateFileW(buf, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (file != INVALID_HANDLE_VALUE) { @@ -753,13 +753,14 @@ for (i = 0;; i++) { WCHAR env_name[64]; - sprintfW(env_name, winedlldirW, i); - if (!(len = GetEnvironmentVariableW(env_name, NULL, 0))) break; + swprintf(env_name, ARRAY_SIZE(env_name), L"WINEDLLDIR%u", i); + if (!(env = process_getenv(process, env_name))) return FALSE; + len = lstrlenW(env); if (!(buf = heap_alloc((len + lstrlenW(name) + 2) * sizeof(WCHAR)))) return FALSE; len = GetEnvironmentVariableW(env_name, buf, len); buf[len++] = '\\'; - strcpyW(buf + len, name); + lstrcpyW(buf + len, name); file = CreateFileW(buf, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (file != INVALID_HANDLE_VALUE) { diff -Nru wine-development-5.5/dlls/dbghelp/pe_module.c wine-development-5.6/dlls/dbghelp/pe_module.c --- wine-development-5.5/dlls/dbghelp/pe_module.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/pe_module.c 2020-04-10 18:54:32.000000000 +0000 @@ -21,9 +21,6 @@ * */ -#include "config.h" -#include "wine/port.h" - #include #include #include @@ -130,7 +127,7 @@ sectname = memcpy(tmp, sectname, IMAGE_SIZEOF_SHORT_NAME); tmp[IMAGE_SIZEOF_SHORT_NAME] = '\0'; } - if (!_strnicmp(sectname, name, -1)) + if (!stricmp(sectname, name)) { ism->fmap = fmap; ism->sidx = i; @@ -500,7 +497,7 @@ { ret = stabs_parse(module, module->module.BaseOfImage - fmap->u.pe.ntheader.OptionalHeader.ImageBase, - stab, image_get_map_size(§_stabs), + stab, image_get_map_size(§_stabs) / sizeof(struct stab_nlist), sizeof(struct stab_nlist), stabstr, image_get_map_size(§_stabstr), NULL, NULL); } @@ -780,7 +777,7 @@ return NULL; opened = TRUE; } - else if (name) strcpyW(loaded_name, name); + else if (name) lstrcpyW(loaded_name, name); else if (dbghelp_options & SYMOPT_DEFERRED_LOADS) FIXME("Trouble ahead (no module name passed in deferred mode)\n"); if (!(modfmt = HeapAlloc(GetProcessHeap(), 0, sizeof(struct module_format) + sizeof(struct pe_module_info)))) @@ -789,7 +786,7 @@ if (pe_map_file(hFile, &modfmt->u.pe_info->fmap, DMT_PE)) { struct builtin_search builtin = { NULL }; - if (modfmt->u.pe_info->fmap.u.pe.builtin && search_dll_path(loaded_name, search_builtin_pe, &builtin)) + if (modfmt->u.pe_info->fmap.u.pe.builtin && search_dll_path(pcs, loaded_name, search_builtin_pe, &builtin)) { TRACE("reloaded %s from %s\n", debugstr_w(loaded_name), debugstr_w(builtin.path)); image_unmap_file(&modfmt->u.pe_info->fmap); diff -Nru wine-development-5.5/dlls/dbghelp/source.c wine-development-5.6/dlls/dbghelp/source.c --- wine-development-5.5/dlls/dbghelp/source.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/source.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,7 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ -#include "config.h" #include #include #include diff -Nru wine-development-5.5/dlls/dbghelp/stabs.c wine-development-5.6/dlls/dbghelp/stabs.c --- wine-development-5.5/dlls/dbghelp/stabs.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/stabs.c 2020-04-10 18:54:32.000000000 +0000 @@ -29,61 +29,38 @@ * available (hopefully) from http://sources.redhat.com/gdb/onlinedocs */ -#include "config.h" -#include "wine/port.h" - #include #include -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef HAVE_SYS_MMAN_H -#include -#endif #include #include #include #include -#ifdef HAVE_UNISTD_H -# include -#endif #include #include #include -#ifdef HAVE_MACH_O_NLIST_H -# include -#endif - #include "windef.h" #include "winbase.h" #include "winnls.h" #include "dbghelp_private.h" +#include "image_private.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(dbghelp_stabs); /* Masks for n_type field */ -#ifndef N_STAB #define N_STAB 0xe0 -#endif -#ifndef N_TYPE +#define N_PEXT 0x10 #define N_TYPE 0x1e -#endif -#ifndef N_EXT #define N_EXT 0x01 -#endif /* Values for (n_type & N_TYPE) */ -#ifndef N_UNDF #define N_UNDF 0x00 -#endif -#ifndef N_ABS #define N_ABS 0x02 -#endif - +#define N_INDR 0x0a +#define N_SECT 0x0e #define N_GSYM 0x20 #define N_FUN 0x24 #define N_STSYM 0x26 @@ -106,15 +83,6 @@ #define N_EXCL 0xc2 #define N_RBRAC 0xe0 -struct stab_nlist -{ - unsigned n_strx; - unsigned char n_type; - char n_other; - short n_desc; - unsigned n_value; -}; - static void stab_strcpy(char* dest, int sz, const char* source) { char* ptr = dest; @@ -1262,7 +1230,7 @@ } BOOL stabs_parse(struct module* module, ULONG_PTR load_offset, - const char* pv_stab_ptr, int stablen, + const char* pv_stab_ptr, size_t nstab, size_t stabsize, const char* strs, int strtablen, stabs_def_cb callback, void* user) { @@ -1271,7 +1239,6 @@ struct symt_compiland* compiland = NULL; char* srcpath = NULL; int i; - int nstab; const char* ptr; char* stabbuff; unsigned int stabbufflen; @@ -1287,14 +1254,8 @@ BOOL ret = TRUE; struct location loc; unsigned char type; - size_t stabsize = sizeof(struct stab_nlist); uint64_t n_value; -#ifdef __APPLE__ - if (module->process->is_64bit) - stabsize = sizeof(struct nlist_64); -#endif - nstab = stablen / stabsize; strs_end = strs + strtablen; memset(stabs_basic, 0, sizeof(stabs_basic)); @@ -1313,11 +1274,7 @@ for (i = 0; i < nstab; i++) { stab_ptr = (struct stab_nlist *)(pv_stab_ptr + i * stabsize); - n_value = stab_ptr->n_value; -#ifdef __APPLE__ - if (module->process->is_64bit) - n_value = ((struct nlist_64 *)stab_ptr)->n_value; -#endif + n_value = stabsize == sizeof(struct macho64_nlist) ? ((struct macho64_nlist *)stab_ptr)->n_value : stab_ptr->n_value; ptr = strs + stab_ptr->n_strx; if ((ptr > strs_end) || (ptr + strlen(ptr) > strs_end)) { @@ -1343,7 +1300,10 @@ if (stab_ptr->n_type & N_STAB) type = stab_ptr->n_type; else + { type = (stab_ptr->n_type & N_TYPE); + if (module->type == DMT_MACHO) type &= ~N_PEXT; + } /* only symbol entries contain a typedef */ switch (type) @@ -1640,19 +1600,17 @@ case N_BNSYM: case N_ENSYM: case N_OSO: + case N_INDR: /* Always ignore these, they seem to be used only on Darwin. */ break; case N_ABS: -#ifdef N_SECT case N_SECT: -#endif /* FIXME: Other definition types (N_TEXT, N_DATA, N_BSS, ...)? */ if (callback) { BOOL is_public = (stab_ptr->n_type & N_EXT); BOOL is_global = is_public; -#ifdef N_PEXT /* "private extern"; shared among compilation units in a shared * library, but not accessible from outside the library. */ if (stab_ptr->n_type & N_PEXT) @@ -1660,7 +1618,6 @@ is_public = FALSE; is_global = TRUE; } -#endif if (*ptr == '_') ptr++; stab_strcpy(symname, sizeof(symname), ptr); diff -Nru wine-development-5.5/dlls/dbghelp/stack.c wine-development-5.6/dlls/dbghelp/stack.c --- wine-development-5.5/dlls/dbghelp/stack.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/stack.c 2020-04-10 18:54:32.000000000 +0000 @@ -21,7 +21,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" #include #include #include diff -Nru wine-development-5.5/dlls/dbghelp/storage.c wine-development-5.6/dlls/dbghelp/storage.c --- wine-development-5.5/dlls/dbghelp/storage.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/storage.c 2020-04-10 18:54:32.000000000 +0000 @@ -20,7 +20,6 @@ */ -#include "config.h" #include #include #include "wine/debug.h" diff -Nru wine-development-5.5/dlls/dbghelp/symbol.c wine-development-5.6/dlls/dbghelp/symbol.c --- wine-development-5.5/dlls/dbghelp/symbol.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/symbol.c 2020-04-10 18:54:32.000000000 +0000 @@ -21,8 +21,6 @@ #define NONAMELESSUNION -#include "config.h" - #include #include #include @@ -53,7 +51,7 @@ return cmp_addr(ref, addr); } -int symt_cmp_addr(const void* p1, const void* p2) +int __cdecl symt_cmp_addr(const void* p1, const void* p2) { const struct symt* sym1 = *(const struct symt* const *)p1; const struct symt* sym2 = *(const struct symt* const *)p2; @@ -1041,7 +1039,7 @@ if (BaseOfDll == 0) { /* do local variables ? */ - if (!Mask || !(bang = strchrW(Mask, '!'))) + if (!Mask || !(bang = wcschr(Mask, '!'))) return symt_enum_locals(pair.pcs, Mask, se); if (bang == Mask) return FALSE; @@ -1084,7 +1082,7 @@ return FALSE; /* we always ignore module name from Mask when BaseOfDll is defined */ - if (Mask && (bang = strchrW(Mask, '!'))) + if (Mask && (bang = wcschr(Mask, '!'))) { if (bang == Mask) return FALSE; Mask = bang + 1; @@ -1843,7 +1841,7 @@ { MultiByteToWideChar(CP_ACP, 0, ptr, -1, undecorated_name, undecorated_length); undecorated_name[undecorated_length - 1] = 0; - ret = strlenW(undecorated_name); + ret = lstrlenW(undecorated_name); und_free(ptr); } HeapFree(GetProcessHeap(), 0, buf); @@ -1866,7 +1864,7 @@ static inline int re_match_char(WCHAR ch1, WCHAR ch2, BOOL _case) { - return _case ? ch1 - ch2 : toupperW(ch1) - toupperW(ch2); + return _case ? ch1 - ch2 : towupper(ch1) - towupper(ch2); } static const WCHAR* re_match_one(const WCHAR* string, const WCHAR* elt, BOOL _case) diff -Nru wine-development-5.5/dlls/dbghelp/type.c wine-development-5.6/dlls/dbghelp/type.c --- wine-development-5.5/dlls/dbghelp/type.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/type.c 2020-04-10 18:54:32.000000000 +0000 @@ -24,7 +24,6 @@ #define NONAMELESSUNION -#include "config.h" #include #include #include diff -Nru wine-development-5.5/dlls/dbghelp/zlib.h wine-development-5.6/dlls/dbghelp/zlib.h --- wine-development-5.5/dlls/dbghelp/zlib.h 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/dbghelp/zlib.h 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,162 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + * version 1.2.11, January 15th, 2017 + * + * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * Jean-loup Gailly Mark Adler + * jloup@gzip.org madler@alumni.caltech.edu + */ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "windef.h" + +#undef FAR +#define FAR +#define z_const const + +typedef unsigned char Byte; /* 8 bits */ +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +typedef Byte FAR Bytef; +typedef void FAR *voidpf; + +typedef char FAR charf; +typedef int FAR intf; + +typedef unsigned char uch; +typedef uch FAR uchf; +typedef unsigned short ush; +typedef ush FAR ushf; +typedef unsigned long ulg; + +typedef voidpf (*alloc_func)(voidpf opaque, uInt items, uInt size); +typedef void (*free_func)(voidpf opaque, voidpf address); + +struct internal_state; + +typedef struct z_stream_s { + z_const Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total number of input bytes read so far */ + + Bytef *next_out; /* next output byte will go here */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total number of bytes output so far */ + + z_const char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text + for deflate, or the decoding state for inflate */ + uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +#define Z_TREES 6 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field for deflate() */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define MAX_WBITS 15 /* 32K LZ77 window */ +#define MAX_MEM_LEVEL 9 + +extern int inflateInit(z_streamp strm) DECLSPEC_HIDDEN; +extern int inflateInit2(z_streamp strm, int windowBits) DECLSPEC_HIDDEN; +extern int inflate(z_streamp strm, int flush) DECLSPEC_HIDDEN; +extern int inflateEnd(z_streamp strm) DECLSPEC_HIDDEN; + +extern int deflateInit(z_streamp strm, int level) DECLSPEC_HIDDEN; +extern int deflateInit2(z_streamp strm, int level, int method, int windowBits, int memLevel, int strategy) DECLSPEC_HIDDEN; +extern int deflate(z_streamp strm, int flush) DECLSPEC_HIDDEN; +extern int deflateEnd(z_streamp strm) DECLSPEC_HIDDEN; + +#endif /* ZLIB_H */ diff -Nru wine-development-5.5/dlls/ddeml.dll16/Makefile.in wine-development-5.6/dlls/ddeml.dll16/Makefile.in --- wine-development-5.5/dlls/ddeml.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ddeml.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = ddeml.dll16 IMPORTS = user32 -EXTRADLLFLAGS = -m16 -mno-cygwin +EXTRADLLFLAGS = -m16 C_SRCS = ddeml.c diff -Nru wine-development-5.5/dlls/ddraw/ddraw.c wine-development-5.6/dlls/ddraw/ddraw.c --- wine-development-5.5/dlls/ddraw/ddraw.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ddraw/ddraw.c 2020-04-10 18:54:32.000000000 +0000 @@ -665,6 +665,8 @@ static HRESULT WINAPI ddraw7_RestoreDisplayMode(IDirectDraw7 *iface) { struct ddraw *ddraw = impl_from_IDirectDraw7(iface); + struct wined3d_display_mode mode; + RECT clip_rect; HRESULT hr; TRACE("iface %p.\n", iface); @@ -684,7 +686,15 @@ } if (SUCCEEDED(hr = wined3d_output_set_display_mode(ddraw->wined3d_output, NULL))) + { ddraw->flags &= ~DDRAW_RESTORE_MODE; + if (ddraw->cooperative_level & DDSCL_EXCLUSIVE && + SUCCEEDED(hr = wined3d_output_get_display_mode(ddraw->wined3d_output, &mode, NULL))) + { + SetRect(&clip_rect, 0, 0, mode.width, mode.height); + ClipCursor(&clip_rect); + } + } InterlockedCompareExchange(&ddraw->device_state, DDRAW_DEVICE_STATE_NOT_RESTORED, DDRAW_DEVICE_STATE_OK); @@ -768,6 +778,7 @@ struct wined3d_rendertarget_view *rtv = NULL, *dsv = NULL; struct wined3d_stateblock *stateblock; BOOL restore_state = FALSE; + RECT clip_rect; HRESULT hr; TRACE("ddraw %p, window %p, flags %#x, restore_mode_on_normal %x.\n", ddraw, window, cooplevel, @@ -942,12 +953,11 @@ wined3d_stateblock_decref(stateblock); } - if (!(cooplevel & DDSCL_EXCLUSIVE) && (ddraw->cooperative_level & DDSCL_EXCLUSIVE) - && restore_mode_on_normal) + if (!(cooplevel & DDSCL_EXCLUSIVE) && (ddraw->cooperative_level & DDSCL_EXCLUSIVE)) { - hr = ddraw7_RestoreDisplayMode(&ddraw->IDirectDraw7_iface); - if (FAILED(hr)) + if (restore_mode_on_normal && FAILED(ddraw7_RestoreDisplayMode(&ddraw->IDirectDraw7_iface))) ERR("RestoreDisplayMode failed\n"); + ClipCursor(NULL); } if ((ddraw->cooperative_level & DDSCL_EXCLUSIVE) @@ -965,6 +975,12 @@ } } + if (cooplevel & DDSCL_EXCLUSIVE) + { + SetRect(&clip_rect, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); + ClipCursor(&clip_rect); + } + /* Unhandled flags */ if (cooplevel & DDSCL_ALLOWREBOOT) WARN("Unhandled flag DDSCL_ALLOWREBOOT, harmless\n"); @@ -1059,6 +1075,7 @@ struct ddraw *ddraw = impl_from_IDirectDraw7(iface); struct wined3d_display_mode mode; enum wined3d_format_id format; + RECT clip_rect; HRESULT hr; TRACE("iface %p, width %u, height %u, bpp %u, refresh_rate %u, flags %#x.\n", @@ -1117,6 +1134,12 @@ ddrawformat_from_wined3dformat(&ddraw->primary->surface_desc.u4.ddpfPixelFormat, mode.format_id); } ddraw->flags |= DDRAW_RESTORE_MODE; + + if (ddraw->cooperative_level & DDSCL_EXCLUSIVE) + { + SetRect(&clip_rect, 0, 0, width, height); + ClipCursor(&clip_rect); + } } InterlockedCompareExchange(&ddraw->device_state, DDRAW_DEVICE_STATE_NOT_RESTORED, DDRAW_DEVICE_STATE_OK); diff -Nru wine-development-5.5/dlls/ddraw/ddraw_private.h wine-development-5.6/dlls/ddraw/ddraw_private.h --- wine-development-5.5/dlls/ddraw/ddraw_private.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ddraw/ddraw_private.h 2020-04-10 18:54:32.000000000 +0000 @@ -219,6 +219,8 @@ struct ddraw_surface *root; struct wined3d_device *wined3d_device; + + void *texture_memory; }; HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_desc, diff -Nru wine-development-5.5/dlls/ddraw/device.c wine-development-5.6/dlls/ddraw/device.c --- wine-development-5.5/dlls/ddraw/device.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ddraw/device.c 2020-04-10 18:54:32.000000000 +0000 @@ -72,6 +72,40 @@ return oldcw; } +static enum wined3d_render_state wined3d_render_state_from_ddraw(D3DRENDERSTATETYPE state) +{ + if (state == D3DRENDERSTATE_ZBIAS) + return WINED3D_RS_DEPTHBIAS; + return (enum wined3d_render_state)state; +} + +static enum wined3d_transform_state wined3d_transform_state_from_ddraw(D3DTRANSFORMSTATETYPE state) +{ + switch (state) + { + case D3DTRANSFORMSTATE_WORLD: + return WINED3D_TS_WORLD_MATRIX(0); + case D3DTRANSFORMSTATE_WORLD1: + return WINED3D_TS_WORLD_MATRIX(1); + case D3DTRANSFORMSTATE_WORLD2: + return WINED3D_TS_WORLD_MATRIX(2); + case D3DTRANSFORMSTATE_WORLD3: + return WINED3D_TS_WORLD_MATRIX(3); + default: + return (enum wined3d_transform_state)state; + } +} + +static enum wined3d_primitive_type wined3d_primitive_type_from_ddraw(D3DPRIMITIVETYPE type) +{ + return (enum wined3d_primitive_type)type; +} + +static enum wined3d_stateblock_type wined3d_stateblock_type_from_ddraw(D3DSTATEBLOCKTYPE type) +{ + return (enum wined3d_stateblock_type)type; +} + static inline struct d3d_device *impl_from_IUnknown(IUnknown *iface) { return CONTAINING_RECORD(iface, struct d3d_device, IUnknown_inner); @@ -2396,10 +2430,6 @@ hr = DDERR_INVALIDPARAMS; break; - case D3DRENDERSTATE_ZBIAS: - *value = device_state->rs[WINED3D_RS_DEPTHBIAS]; - break; - default: if (state >= D3DRENDERSTATE_STIPPLEPATTERN00 && state <= D3DRENDERSTATE_STIPPLEPATTERN31) @@ -2408,7 +2438,7 @@ hr = E_NOTIMPL; break; } - *value = device_state->rs[state]; + *value = device_state->rs[wined3d_render_state_from_ddraw(state)]; } wined3d_mutex_unlock(); @@ -2622,10 +2652,6 @@ hr = DDERR_INVALIDPARAMS; break; - case D3DRENDERSTATE_ZBIAS: - wined3d_stateblock_set_render_state(device->update_state, WINED3D_RS_DEPTHBIAS, value); - break; - default: if (state >= D3DRENDERSTATE_STIPPLEPATTERN00 && state <= D3DRENDERSTATE_STIPPLEPATTERN31) @@ -2635,7 +2661,7 @@ break; } - wined3d_stateblock_set_render_state(device->update_state, state, value); + wined3d_stateblock_set_render_state(device->update_state, wined3d_render_state_from_ddraw(state), value); break; } wined3d_mutex_unlock(); @@ -3097,34 +3123,16 @@ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); - enum wined3d_transform_state wined3d_state; TRACE("iface %p, state %#x, matrix %p.\n", iface, state, matrix); - switch (state) - { - case D3DTRANSFORMSTATE_WORLD: - wined3d_state = WINED3D_TS_WORLD_MATRIX(0); - break; - case D3DTRANSFORMSTATE_WORLD1: - wined3d_state = WINED3D_TS_WORLD_MATRIX(1); - break; - case D3DTRANSFORMSTATE_WORLD2: - wined3d_state = WINED3D_TS_WORLD_MATRIX(2); - break; - case D3DTRANSFORMSTATE_WORLD3: - wined3d_state = WINED3D_TS_WORLD_MATRIX(3); - break; - default: - wined3d_state = state; - } - if (!matrix) return DDERR_INVALIDPARAMS; /* Note: D3DMATRIX is compatible with struct wined3d_matrix. */ wined3d_mutex_lock(); - wined3d_stateblock_set_transform(device->update_state, wined3d_state, (const struct wined3d_matrix *)matrix); + wined3d_stateblock_set_transform(device->update_state, + wined3d_transform_state_from_ddraw(state), (const struct wined3d_matrix *)matrix); wined3d_mutex_unlock(); return D3D_OK; @@ -3206,34 +3214,15 @@ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); - enum wined3d_transform_state wined3d_state; TRACE("iface %p, state %#x, matrix %p.\n", iface, state, matrix); - switch (state) - { - case D3DTRANSFORMSTATE_WORLD: - wined3d_state = WINED3D_TS_WORLD_MATRIX(0); - break; - case D3DTRANSFORMSTATE_WORLD1: - wined3d_state = WINED3D_TS_WORLD_MATRIX(1); - break; - case D3DTRANSFORMSTATE_WORLD2: - wined3d_state = WINED3D_TS_WORLD_MATRIX(2); - break; - case D3DTRANSFORMSTATE_WORLD3: - wined3d_state = WINED3D_TS_WORLD_MATRIX(3); - break; - default: - wined3d_state = state; - } - if (!matrix) return DDERR_INVALIDPARAMS; /* Note: D3DMATRIX is compatible with struct wined3d_matrix. */ wined3d_mutex_lock(); - memcpy(matrix, &device->stateblock_state->transforms[wined3d_state], sizeof(*matrix)); + memcpy(matrix, &device->stateblock_state->transforms[wined3d_transform_state_from_ddraw(state)], sizeof(*matrix)); wined3d_mutex_unlock(); return D3D_OK; @@ -3310,32 +3299,13 @@ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); - enum wined3d_transform_state wined3d_state; TRACE("iface %p, state %#x, matrix %p.\n", iface, state, matrix); - switch (state) - { - case D3DTRANSFORMSTATE_WORLD: - wined3d_state = WINED3D_TS_WORLD_MATRIX(0); - break; - case D3DTRANSFORMSTATE_WORLD1: - wined3d_state = WINED3D_TS_WORLD_MATRIX(1); - break; - case D3DTRANSFORMSTATE_WORLD2: - wined3d_state = WINED3D_TS_WORLD_MATRIX(2); - break; - case D3DTRANSFORMSTATE_WORLD3: - wined3d_state = WINED3D_TS_WORLD_MATRIX(3); - break; - default: - wined3d_state = state; - } - /* Note: D3DMATRIX is compatible with struct wined3d_matrix. */ wined3d_mutex_lock(); wined3d_stateblock_multiply_transform(device->state, - wined3d_state, (struct wined3d_matrix *)matrix); + wined3d_transform_state_from_ddraw(state), (struct wined3d_matrix *)matrix); wined3d_mutex_unlock(); return D3D_OK; @@ -3504,7 +3474,7 @@ goto done; wined3d_stateblock_set_vertex_declaration(device->state, ddraw_find_decl(device->ddraw, fvf)); - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type, 0); + wined3d_device_set_primitive_type(device->wined3d_device, wined3d_primitive_type_from_ddraw(primitive_type), 0); wined3d_device_apply_stateblock(device->wined3d_device, device->state); hr = wined3d_device_draw_primitive(device->wined3d_device, vb_pos / stride, vertex_count); @@ -3715,7 +3685,7 @@ wined3d_stateblock_set_index_buffer(device->state, device->index_buffer, WINED3DFMT_R16_UINT); wined3d_stateblock_set_vertex_declaration(device->state, ddraw_find_decl(device->ddraw, fvf)); - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type, 0); + wined3d_device_set_primitive_type(device->wined3d_device, wined3d_primitive_type_from_ddraw(primitive_type), 0); wined3d_stateblock_set_base_vertex_index(device->state, vb_pos / stride); wined3d_device_apply_stateblock(device->wined3d_device, device->state); hr = wined3d_device_draw_indexed_primitive(device->wined3d_device, ib_pos / sizeof(*indices), index_count); @@ -4042,7 +4012,7 @@ goto done; wined3d_stateblock_set_vertex_declaration(device->state, ddraw_find_decl(device->ddraw, fvf)); - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type, 0); + wined3d_device_set_primitive_type(device->wined3d_device, wined3d_primitive_type_from_ddraw(primitive_type), 0); wined3d_device_apply_stateblock(device->wined3d_device, device->state); hr = wined3d_device_draw_primitive(device->wined3d_device, vb_pos / dst_stride, vertex_count); @@ -4178,7 +4148,7 @@ wined3d_stateblock_set_base_vertex_index(device->state, vb_pos / vtx_dst_stride); wined3d_stateblock_set_vertex_declaration(device->state, ddraw_find_decl(device->ddraw, fvf)); - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type, 0); + wined3d_device_set_primitive_type(device->wined3d_device, wined3d_primitive_type_from_ddraw(primitive_type), 0); wined3d_device_apply_stateblock(device->wined3d_device, device->state); hr = wined3d_device_draw_indexed_primitive(device->wined3d_device, ib_pos / sizeof(WORD), index_count); @@ -4300,7 +4270,7 @@ } /* Now draw the primitives */ - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type, 0); + wined3d_device_set_primitive_type(device->wined3d_device, wined3d_primitive_type_from_ddraw(primitive_type), 0); wined3d_device_apply_stateblock(device->wined3d_device, device->state); hr = wined3d_device_draw_primitive(device->wined3d_device, start_vertex, vertex_count); @@ -4454,7 +4424,7 @@ return hr; } - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type, 0); + wined3d_device_set_primitive_type(device->wined3d_device, wined3d_primitive_type_from_ddraw(primitive_type), 0); wined3d_device_apply_stateblock(device->wined3d_device, device->state); hr = wined3d_device_draw_indexed_primitive(device->wined3d_device, ib_pos / sizeof(WORD), index_count); @@ -6004,9 +5974,8 @@ return D3DERR_INBEGINSTATEBLOCK; } - /* The D3DSTATEBLOCKTYPE enum is fine here. */ - hr = wined3d_stateblock_create(device->wined3d_device, device->state, type, &wined3d_sb); - if (FAILED(hr)) + if (FAILED(hr = wined3d_stateblock_create(device->wined3d_device, + device->state, wined3d_stateblock_type_from_ddraw(type), &wined3d_sb))) { WARN("Failed to create stateblock, hr %#x.\n", hr); wined3d_mutex_unlock(); diff -Nru wine-development-5.5/dlls/ddraw/surface.c wine-development-5.6/dlls/ddraw/surface.c --- wine-development-5.5/dlls/ddraw/surface.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ddraw/surface.c 2020-04-10 18:54:32.000000000 +0000 @@ -5832,8 +5832,11 @@ static void STDMETHODCALLTYPE ddraw_texture_wined3d_object_destroyed(void *parent) { - TRACE("parent %p.\n", parent); + struct ddraw_texture *texture = parent; + TRACE("texture %p, texture_memory %p.\n", texture, texture->texture_memory); + + heap_free(texture->texture_memory); heap_free(parent); } @@ -5847,18 +5850,50 @@ return DD_OK; } +static HRESULT ddraw_surface_reserve_memory(struct wined3d_texture *wined3d_texture) +{ + static const unsigned int extra_size = 0x10000; + + struct ddraw_texture *texture = wined3d_texture_get_parent(wined3d_texture); + struct wined3d_resource_desc desc; + unsigned int pitch, slice_pitch; + HRESULT hr; + + wined3d_resource_get_desc(wined3d_texture_get_resource(wined3d_texture), &desc); + if (!(texture->texture_memory = heap_alloc_zero(desc.size + extra_size))) + { + ERR("Out of memory.\n"); + return E_OUTOFMEMORY; + } + TRACE("texture->texture_memory %p.\n", texture->texture_memory); + + wined3d_texture_get_pitch(wined3d_texture, 0, &pitch, &slice_pitch); + + if (FAILED(hr = wined3d_texture_update_desc(wined3d_texture, + desc.width, desc.height, desc.format, + WINED3D_MULTISAMPLE_NONE, 0, texture->texture_memory, pitch))) + { + heap_free(texture->texture_memory); + texture->texture_memory = NULL; + } + + return hr; +} + HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_desc, struct ddraw_surface **surface, IUnknown *outer_unknown, unsigned int version) { struct wined3d_sub_resource_desc wined3d_mip_desc; struct ddraw_surface *root, *mip, **attach; struct wined3d_resource_desc wined3d_desc; + DDPIXELFORMAT wined3d_display_mode_format; struct wined3d_texture *wined3d_texture; struct wined3d_display_mode mode; DDSURFACEDESC2 *desc, *mip_desc; struct ddraw_texture *texture; unsigned int layers = 1; unsigned int pitch = 0; + BOOL reserve_memory; UINT levels, i, j; HRESULT hr; @@ -5879,6 +5914,7 @@ if (!(texture = heap_alloc(sizeof(*texture)))) return E_OUTOFMEMORY; + texture->texture_memory = NULL; texture->version = version; texture->surface_desc = *surface_desc; desc = &texture->surface_desc; @@ -6020,12 +6056,14 @@ return hr_ddraw_from_wined3d(hr); } + wined3d_display_mode_format.dwSize = sizeof(wined3d_display_mode_format); + ddrawformat_from_wined3dformat(&wined3d_display_mode_format, mode.format_id); + /* No pixelformat given? Use the current screen format. */ if (!(desc->dwFlags & DDSD_PIXELFORMAT)) { desc->dwFlags |= DDSD_PIXELFORMAT; - desc->u4.ddpfPixelFormat.dwSize = sizeof(desc->u4.ddpfPixelFormat); - ddrawformat_from_wined3dformat(&desc->u4.ddpfPixelFormat, mode.format_id); + desc->u4.ddpfPixelFormat = wined3d_display_mode_format; } wined3d_desc.resource_type = WINED3D_RTYPE_TEXTURE_2D; @@ -6214,6 +6252,7 @@ if (desc->ddsCaps.dwCaps2 & (DDSCAPS2_TEXTUREMANAGE | DDSCAPS2_D3DTEXTUREMANAGE)) { + wined3d_desc.bind_flags &= ~WINED3D_BIND_RENDER_TARGET; wined3d_desc.access = WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_CPU | WINED3D_RESOURCE_ACCESS_MAP_R | WINED3D_RESOURCE_ACCESS_MAP_W; /* Managed textures have the system memory flag set. */ @@ -6434,6 +6473,16 @@ goto fail; } + reserve_memory = !(desc->dwFlags & DDSD_LPSURFACE) + && desc->ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY + && wined3d_display_mode_format.u1.dwRGBBitCount <= 16; + + if (reserve_memory && FAILED(hr = ddraw_surface_reserve_memory(wined3d_texture))) + { + ERR("Failed to reserve surface memory, hr %#x.\n", hr); + goto fail; + } + if (desc->dwFlags & DDSD_BACKBUFFERCOUNT) { unsigned int count = desc->u5.dwBackBufferCount; @@ -6448,6 +6497,7 @@ goto fail; } + texture->texture_memory = NULL; texture->version = version; texture->surface_desc = root->surface_desc; desc = &texture->surface_desc; @@ -6487,6 +6537,12 @@ wined3d_texture_set_color_key(wined3d_texture, DDCKEY_SRCBLT, (struct wined3d_color_key *)&desc->ddckCKSrcBlt); + if (reserve_memory && FAILED(hr = ddraw_surface_reserve_memory(wined3d_texture))) + { + hr = hr_ddraw_from_wined3d(hr); + goto fail; + } + *attach = last; attach = &last->complex_array[0]; } diff -Nru wine-development-5.5/dlls/ddraw/tests/ddraw1.c wine-development-5.6/dlls/ddraw/tests/ddraw1.c --- wine-development-5.5/dlls/ddraw/tests/ddraw1.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ddraw/tests/ddraw1.c 2020-04-10 18:54:32.000000000 +0000 @@ -49,18 +49,6 @@ HANDLE thread; }; -static BOOL compare_color(D3DCOLOR c1, D3DCOLOR c2, BYTE max_diff) -{ - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - return TRUE; -} - static BOOL compare_float(float f, float g, unsigned int ulps) { int x = *(int *)&f; @@ -85,6 +73,47 @@ && compare_float(vec->w, w, ulps); } +static BOOL compare_uint(unsigned int x, unsigned int y, unsigned int max_diff) +{ + unsigned int diff = x > y ? x - y : y - x; + + return diff <= max_diff; +} + +static BOOL compare_color(D3DCOLOR c1, D3DCOLOR c2, BYTE max_diff) +{ + return compare_uint(c1 & 0xff, c2 & 0xff, max_diff) + && compare_uint((c1 >> 8) & 0xff, (c2 >> 8) & 0xff, max_diff) + && compare_uint((c1 >> 16) & 0xff, (c2 >> 16) & 0xff, max_diff) + && compare_uint((c1 >> 24) & 0xff, (c2 >> 24) & 0xff, max_diff); +} + +static void get_virtual_rect(RECT *rect) +{ + rect->left = GetSystemMetrics(SM_XVIRTUALSCREEN); + rect->top = GetSystemMetrics(SM_YVIRTUALSCREEN); + rect->right = rect->left + GetSystemMetrics(SM_CXVIRTUALSCREEN); + rect->bottom = rect->top + GetSystemMetrics(SM_CYVIRTUALSCREEN); +} + +/* Try to make sure pending X events have been processed before continuing */ +static void flush_events(void) +{ + int diff = 200; + DWORD time; + MSG msg; + + time = GetTickCount() + diff; + while (diff > 0) + { + if (MsgWaitForMultipleObjects(0, NULL, FALSE, 100, QS_ALLINPUT) == WAIT_TIMEOUT) + break; + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + DispatchMessageA(&msg); + diff = time - GetTickCount(); + } +} + static BOOL ddraw_get_identifier(IDirectDraw *ddraw, DDDEVICEIDENTIFIER *identifier) { IDirectDraw4 *ddraw4; @@ -11770,7 +11799,7 @@ depth = *((DWORD *)ptr) & z_mask; expected_depth = (x * (0.9 / 640.0) + y * (0.1 / 480.0)) * z_mask; max_diff = ((0.5f * 0.9f) / 640.0f) * z_mask; - ok(abs(expected_depth - depth) <= max_diff, + ok(compare_uint(expected_depth, depth, max_diff), "z_depth %u: Got depth 0x%08x (diff %d), expected 0x%08x+/-%u, at %u, %u.\n", z_depth, depth, expected_depth - depth, expected_depth, max_diff, x, y); } @@ -13204,6 +13233,142 @@ DestroyWindow(window); } +struct find_different_mode_param +{ + unsigned int old_width; + unsigned int old_height; + unsigned int new_width; + unsigned int new_height; +}; + +static HRESULT CALLBACK find_different_mode_callback(DDSURFACEDESC *surface_desc, void *context) +{ + struct find_different_mode_param *param = context; + + if (U1(U4(*surface_desc).ddpfPixelFormat).dwRGBBitCount != registry_mode.dmBitsPerPel) + return DDENUMRET_OK; + + if (surface_desc->dwWidth != param->old_width && surface_desc->dwHeight != param->old_height) + { + param->new_width = surface_desc->dwWidth; + param->new_height = surface_desc->dwHeight; + return DDENUMRET_CANCEL; + } + + return DDENUMRET_OK; +} + +static void test_cursor_clipping(void) +{ + struct find_different_mode_param param; + DDSURFACEDESC surface_desc; + RECT rect, clip_rect; + IDirectDraw *ddraw; + HWND window; + HRESULT hr; + + window = create_window(); + ok(!!window, "Failed to create a window.\n"); + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + + memset(&surface_desc, 0, sizeof(surface_desc)); + surface_desc.dwSize = sizeof(surface_desc); + hr = IDirectDraw_GetDisplayMode(ddraw, &surface_desc); + ok(hr == DD_OK, "GetDisplayMode failed, hr %#x.\n", hr); + + memset(¶m, 0, sizeof(param)); + param.old_width = surface_desc.dwWidth; + param.old_height = surface_desc.dwHeight; + hr = IDirectDraw_EnumDisplayModes(ddraw, 0, NULL, ¶m, find_different_mode_callback); + ok(hr == DD_OK, "EnumDisplayModes failed, hr %#x.\n", hr); + if (!(param.new_width && param.new_height)) + { + skip("Failed to find a different mode than %ux%u.\n", param.old_width, param.old_height); + goto done; + } + + ok(ClipCursor(NULL), "ClipCursor failed, error %#x.\n", GetLastError()); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + /* Set cooperative level to normal */ + hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); + ok(hr == DD_OK, "SetCooperativeLevel failed, hr %#x.\n", hr); + flush_events(); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + hr = set_display_mode(ddraw, param.new_width, param.new_height); + ok(hr == DD_OK || hr == DDERR_UNSUPPORTED, "SetDisplayMode failed, hr %#x.\n", hr); + if (FAILED(hr)) + { + win_skip("SetDisplayMode failed, hr %#x.\n", hr); + goto done; + } + flush_events(); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + hr = IDirectDraw_RestoreDisplayMode(ddraw); + ok(hr == DD_OK, "RestoreDisplayMode failed, hr %#x.\n", hr); + flush_events(); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + /* Switch to full screen cooperative level */ + hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + ok(hr == DD_OK, "SetCooperativeLevel failed, hr %#x.\n", hr); + flush_events(); + SetRect(&rect, 0, 0, param.old_width, param.old_height); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + hr = set_display_mode(ddraw, param.new_width, param.new_height); + ok(hr == DD_OK || hr == DDERR_UNSUPPORTED, "SetDisplayMode failed, hr %#x.\n", hr); + if (FAILED(hr)) + { + win_skip("SetDisplayMode failed, hr %#x.\n", hr); + goto done; + } + flush_events(); + SetRect(&rect, 0, 0, param.new_width, param.new_height); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + /* Restore display mode */ + hr = IDirectDraw_RestoreDisplayMode(ddraw); + ok(hr == DD_OK, "RestoreDisplayMode failed, hr %#x.\n", hr); + flush_events(); + SetRect(&rect, 0, 0, param.old_width, param.old_height); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + /* Switch to normal cooperative level */ + hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); + ok(hr == DD_OK, "SetCooperativeLevel failed, hr %#x.\n", hr); + flush_events(); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + +done: + IDirectDraw_Release(ddraw); + DestroyWindow(window); +} + START_TEST(ddraw1) { DDDEVICEIDENTIFIER identifier; @@ -13316,4 +13481,5 @@ test_clipper_refcount(); test_caps(); test_d32_support(); + test_cursor_clipping(); } diff -Nru wine-development-5.5/dlls/ddraw/tests/ddraw2.c wine-development-5.6/dlls/ddraw/tests/ddraw2.c --- wine-development-5.5/dlls/ddraw/tests/ddraw2.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ddraw/tests/ddraw2.c 2020-04-10 18:54:32.000000000 +0000 @@ -50,18 +50,6 @@ HANDLE thread; }; -static BOOL compare_color(D3DCOLOR c1, D3DCOLOR c2, BYTE max_diff) -{ - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - return TRUE; -} - static BOOL compare_float(float f, float g, unsigned int ulps) { int x = *(int *)&f; @@ -86,6 +74,47 @@ && compare_float(vec->w, w, ulps); } +static BOOL compare_uint(unsigned int x, unsigned int y, unsigned int max_diff) +{ + unsigned int diff = x > y ? x - y : y - x; + + return diff <= max_diff; +} + +static BOOL compare_color(D3DCOLOR c1, D3DCOLOR c2, BYTE max_diff) +{ + return compare_uint(c1 & 0xff, c2 & 0xff, max_diff) + && compare_uint((c1 >> 8) & 0xff, (c2 >> 8) & 0xff, max_diff) + && compare_uint((c1 >> 16) & 0xff, (c2 >> 16) & 0xff, max_diff) + && compare_uint((c1 >> 24) & 0xff, (c2 >> 24) & 0xff, max_diff); +} + +static void get_virtual_rect(RECT *rect) +{ + rect->left = GetSystemMetrics(SM_XVIRTUALSCREEN); + rect->top = GetSystemMetrics(SM_YVIRTUALSCREEN); + rect->right = rect->left + GetSystemMetrics(SM_CXVIRTUALSCREEN); + rect->bottom = rect->top + GetSystemMetrics(SM_CYVIRTUALSCREEN); +} + +/* Try to make sure pending X events have been processed before continuing */ +static void flush_events(void) +{ + int diff = 200; + DWORD time; + MSG msg; + + time = GetTickCount() + diff; + while (diff > 0) + { + if (MsgWaitForMultipleObjects(0, NULL, FALSE, 100, QS_ALLINPUT) == WAIT_TIMEOUT) + break; + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + DispatchMessageA(&msg); + diff = time - GetTickCount(); + } +} + static BOOL ddraw_get_identifier(IDirectDraw2 *ddraw, DDDEVICEIDENTIFIER *identifier) { IDirectDraw4 *ddraw4; @@ -12749,10 +12778,10 @@ /* The ddraw2 version of this test behaves similarly to the ddraw7 version on Nvidia GPUs, * except that we only have D16 (broken on geforce 9) and D24X8 (broken on geforce 7) available. * Accept all nvidia GPUs as broken here, but still expect one of the formats to pass. */ - ok(abs(expected_depth - depth) <= max_diff || ddraw_is_nvidia(ddraw), + ok(compare_uint(expected_depth, depth, max_diff) || ddraw_is_nvidia(ddraw), "Test %u: Got depth 0x%08x (diff %d), expected 0x%08x+/-%u, at %u, %u.\n", i, depth, expected_depth - depth, expected_depth, max_diff, x, y); - if (abs(expected_depth - depth) > max_diff) + if (!compare_uint(expected_depth, depth, max_diff)) all_pass = FALSE; } } @@ -14045,6 +14074,142 @@ DestroyWindow(window); } +struct find_different_mode_param +{ + unsigned int old_width; + unsigned int old_height; + unsigned int new_width; + unsigned int new_height; +}; + +static HRESULT CALLBACK find_different_mode_callback(DDSURFACEDESC *surface_desc, void *context) +{ + struct find_different_mode_param *param = context; + + if (U1(U4(*surface_desc).ddpfPixelFormat).dwRGBBitCount != registry_mode.dmBitsPerPel) + return DDENUMRET_OK; + + if (surface_desc->dwWidth != param->old_width && surface_desc->dwHeight != param->old_height) + { + param->new_width = surface_desc->dwWidth; + param->new_height = surface_desc->dwHeight; + return DDENUMRET_CANCEL; + } + + return DDENUMRET_OK; +} + +static void test_cursor_clipping(void) +{ + struct find_different_mode_param param; + DDSURFACEDESC surface_desc; + RECT rect, clip_rect; + IDirectDraw2 *ddraw; + HWND window; + HRESULT hr; + + window = create_window(); + ok(!!window, "Failed to create a window.\n"); + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + + memset(&surface_desc, 0, sizeof(surface_desc)); + surface_desc.dwSize = sizeof(surface_desc); + hr = IDirectDraw2_GetDisplayMode(ddraw, &surface_desc); + ok(hr == DD_OK, "GetDisplayMode failed, hr %#x.\n", hr); + + memset(¶m, 0, sizeof(param)); + param.old_width = surface_desc.dwWidth; + param.old_height = surface_desc.dwHeight; + hr = IDirectDraw2_EnumDisplayModes(ddraw, 0, NULL, ¶m, find_different_mode_callback); + ok(hr == DD_OK, "EnumDisplayModes failed, hr %#x.\n", hr); + if (!(param.new_width && param.new_height)) + { + skip("Failed to find a different mode than %ux%u.\n", param.old_width, param.old_height); + goto done; + } + + ok(ClipCursor(NULL), "ClipCursor failed, error %#x.\n", GetLastError()); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + /* Set cooperative level to normal */ + hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); + ok(hr == DD_OK, "SetCooperativeLevel failed, hr %#x.\n", hr); + flush_events(); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + hr = set_display_mode(ddraw, param.new_width, param.new_height); + ok(hr == DD_OK || hr == DDERR_UNSUPPORTED, "SetDisplayMode failed, hr %#x.\n", hr); + if (FAILED(hr)) + { + win_skip("SetDisplayMode failed, hr %#x.\n", hr); + goto done; + } + flush_events(); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + hr = IDirectDraw2_RestoreDisplayMode(ddraw); + ok(hr == DD_OK, "RestoreDisplayMode failed, hr %#x.\n", hr); + flush_events(); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + /* Switch to full screen cooperative level */ + hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + ok(hr == DD_OK, "SetCooperativeLevel failed, hr %#x.\n", hr); + flush_events(); + SetRect(&rect, 0, 0, param.old_width, param.old_height); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + hr = set_display_mode(ddraw, param.new_width, param.new_height); + ok(hr == DD_OK || hr == DDERR_UNSUPPORTED, "SetDisplayMode failed, hr %#x.\n", hr); + if (FAILED(hr)) + { + win_skip("SetDisplayMode failed, hr %#x.\n", hr); + goto done; + } + flush_events(); + SetRect(&rect, 0, 0, param.new_width, param.new_height); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + /* Restore display mode */ + hr = IDirectDraw2_RestoreDisplayMode(ddraw); + ok(hr == DD_OK, "RestoreDisplayMode failed, hr %#x.\n", hr); + flush_events(); + SetRect(&rect, 0, 0, param.old_width, param.old_height); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + /* Switch to normal cooperative level */ + hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); + ok(hr == DD_OK, "SetCooperativeLevel failed, hr %#x.\n", hr); + flush_events(); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + +done: + IDirectDraw2_Release(ddraw); + DestroyWindow(window); +} + START_TEST(ddraw2) { DDDEVICEIDENTIFIER identifier; @@ -14164,4 +14329,5 @@ test_clipper_refcount(); test_caps(); test_d32_support(); + test_cursor_clipping(); } diff -Nru wine-development-5.5/dlls/ddraw/tests/ddraw4.c wine-development-5.6/dlls/ddraw/tests/ddraw4.c --- wine-development-5.5/dlls/ddraw/tests/ddraw4.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ddraw/tests/ddraw4.c 2020-04-10 18:54:32.000000000 +0000 @@ -80,16 +80,45 @@ && compare_float(vec->w, w, ulps); } +static BOOL compare_uint(unsigned int x, unsigned int y, unsigned int max_diff) +{ + unsigned int diff = x > y ? x - y : y - x; + + return diff <= max_diff; +} + static BOOL compare_color(D3DCOLOR c1, D3DCOLOR c2, BYTE max_diff) { - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - return TRUE; + return compare_uint(c1 & 0xff, c2 & 0xff, max_diff) + && compare_uint((c1 >> 8) & 0xff, (c2 >> 8) & 0xff, max_diff) + && compare_uint((c1 >> 16) & 0xff, (c2 >> 16) & 0xff, max_diff) + && compare_uint((c1 >> 24) & 0xff, (c2 >> 24) & 0xff, max_diff); +} + +static void get_virtual_rect(RECT *rect) +{ + rect->left = GetSystemMetrics(SM_XVIRTUALSCREEN); + rect->top = GetSystemMetrics(SM_YVIRTUALSCREEN); + rect->right = rect->left + GetSystemMetrics(SM_CXVIRTUALSCREEN); + rect->bottom = rect->top + GetSystemMetrics(SM_CYVIRTUALSCREEN); +} + +/* Try to make sure pending X events have been processed before continuing */ +static void flush_events(void) +{ + int diff = 200; + DWORD time; + MSG msg; + + time = GetTickCount() + diff; + while (diff > 0) + { + if (MsgWaitForMultipleObjects(0, NULL, FALSE, 100, QS_ALLINPUT) == WAIT_TIMEOUT) + break; + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + DispatchMessageA(&msg); + diff = time - GetTickCount(); + } } static BOOL ddraw_get_identifier(IDirectDraw4 *ddraw, DDDEVICEIDENTIFIER *identifier) @@ -5955,6 +5984,8 @@ const DDPIXELFORMAT *pf; DWORD caps_in; DWORD caps_out; + DWORD caps2_in; + DWORD caps2_out; HRESULT create_device_hr; HRESULT set_rt_hr, alternative_set_rt_hr; } @@ -5964,6 +5995,8 @@ NULL, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, + 0, + 0, D3D_OK, D3D_OK, D3D_OK, @@ -5972,6 +6005,8 @@ NULL, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, + 0, + 0, D3D_OK, D3D_OK, D3D_OK, @@ -5980,6 +6015,8 @@ NULL, DDSCAPS_OFFSCREENPLAIN, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -5988,6 +6025,8 @@ NULL, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE, + 0, + 0, D3DERR_SURFACENOTINVIDMEM, D3D_OK, D3D_OK, @@ -5996,6 +6035,8 @@ NULL, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -6004,6 +6045,8 @@ NULL, DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY, DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, + 0, + 0, D3D_OK, D3D_OK, D3D_OK, @@ -6012,6 +6055,8 @@ NULL, DDSCAPS_3DDEVICE, DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, + 0, + 0, D3D_OK, D3D_OK, D3D_OK, @@ -6020,6 +6065,8 @@ NULL, 0, DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -6028,6 +6075,8 @@ NULL, DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE, DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE, + 0, + 0, D3DERR_SURFACENOTINVIDMEM, D3D_OK, D3D_OK, @@ -6036,14 +6085,38 @@ NULL, DDSCAPS_SYSTEMMEMORY, DDSCAPS_SYSTEMMEMORY, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, }, { + NULL, + DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE, + DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY, + DDSCAPS2_TEXTUREMANAGE, + DDSCAPS2_TEXTUREMANAGE, + D3DERR_SURFACENOTINVIDMEM, + D3D_OK, + D3D_OK, + }, + { + NULL, + DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE, + DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY, + DDSCAPS2_D3DTEXTUREMANAGE, + DDSCAPS2_D3DTEXTUREMANAGE, + D3DERR_SURFACENOTINVIDMEM, + D3D_OK, + D3D_OK, + }, + { &p8_fmt, 0, DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -6052,6 +6125,8 @@ &p8_fmt, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE, ~0U /* AMD r200 */, + 0, + 0, DDERR_NOPALETTEATTACHED, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -6060,6 +6135,8 @@ &p8_fmt, DDSCAPS_OFFSCREENPLAIN, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -6068,6 +6145,8 @@ &p8_fmt, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE, + 0, + 0, DDERR_NOPALETTEATTACHED, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -6076,6 +6155,8 @@ &p8_fmt, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -6084,6 +6165,8 @@ &z_fmt, DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER, DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDPIXELFORMAT, D3D_OK /* r200 */, @@ -6092,6 +6175,8 @@ &z_fmt, DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER, DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDPIXELFORMAT, D3D_OK /* r200 */, @@ -6100,6 +6185,8 @@ &z_fmt, DDSCAPS_ZBUFFER, DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -6108,6 +6195,8 @@ &z_fmt, DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER, DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDPIXELFORMAT, D3D_OK /* r200 */, @@ -6116,6 +6205,8 @@ &z_fmt, DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER, DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -6157,6 +6248,7 @@ surface_desc.dwSize = sizeof(surface_desc); surface_desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; surface_desc.ddsCaps.dwCaps = test_data[i].caps_in; + surface_desc.ddsCaps.dwCaps2 = test_data[i].caps2_in; if (test_data[i].pf) { surface_desc.dwFlags |= DDSD_PIXELFORMAT; @@ -6165,8 +6257,8 @@ surface_desc.dwWidth = 640; surface_desc.dwHeight = 480; hr = IDirectDraw4_CreateSurface(ddraw, &surface_desc, &surface, NULL); - ok(SUCCEEDED(hr), "Test %u: Failed to create surface with caps %#x, hr %#x.\n", - i, test_data[i].caps_in, hr); + ok(SUCCEEDED(hr), "Test %u: Failed to create surface with caps %#x and caps2 %#x, hr %#x.\n", + i, test_data[i].caps_in, test_data[i].caps2_in, hr); memset(&surface_desc, 0, sizeof(surface_desc)); surface_desc.dwSize = sizeof(surface_desc); @@ -6175,6 +6267,9 @@ ok(test_data[i].caps_out == ~0U || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out, "Test %u: Got unexpected caps %#x, expected %#x.\n", i, surface_desc.ddsCaps.dwCaps, test_data[i].caps_out); + ok(surface_desc.ddsCaps.dwCaps2 == test_data[i].caps2_out, + "Test %u: Got unexpected caps2 %#x, expected %#x.\n", + i, surface_desc.ddsCaps.dwCaps2, test_data[i].caps2_out); hr = IDirect3D3_CreateDevice(d3d, &IID_IDirect3DHALDevice, surface, &device, NULL); ok(hr == test_data[i].create_device_hr, "Test %u: Got unexpected hr %#x, expected %#x.\n", @@ -6210,6 +6305,7 @@ surface_desc.dwSize = sizeof(surface_desc); surface_desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; surface_desc.ddsCaps.dwCaps = test_data[i].caps_in; + surface_desc.ddsCaps.dwCaps2 = test_data[i].caps2_in; if (test_data[i].pf) { surface_desc.dwFlags |= DDSD_PIXELFORMAT; @@ -15282,10 +15378,10 @@ * returns 0 for that format. Give up on pre-filtering formats, accept Nvidia as generally * broken here, but still expect at least one format (D16 or D24X8 in practise) to pass. */ todo_wine_if(tests[i].todo) - ok(abs(expected_depth - depth) <= max_diff || ddraw_is_nvidia(ddraw), + ok(compare_uint(expected_depth, depth, max_diff) || ddraw_is_nvidia(ddraw), "Test %u: Got depth 0x%08x (diff %d), expected 0x%08x+/-%u, at %u, %u.\n", i, depth, expected_depth - depth, expected_depth, max_diff, x, y); - if (abs(expected_depth - depth) > max_diff) + if (!compare_uint(expected_depth, depth, max_diff)) all_pass = FALSE; hr = IDirectDrawSurface4_Unlock(ds, &r); @@ -17003,6 +17099,142 @@ DestroyWindow(window); } +struct find_different_mode_param +{ + unsigned int old_width; + unsigned int old_height; + unsigned int new_width; + unsigned int new_height; +}; + +static HRESULT CALLBACK find_different_mode_callback(DDSURFACEDESC2 *surface_desc, void *context) +{ + struct find_different_mode_param *param = context; + + if (U1(U4(*surface_desc).ddpfPixelFormat).dwRGBBitCount != registry_mode.dmBitsPerPel) + return DDENUMRET_OK; + + if (surface_desc->dwWidth != param->old_width && surface_desc->dwHeight != param->old_height) + { + param->new_width = surface_desc->dwWidth; + param->new_height = surface_desc->dwHeight; + return DDENUMRET_CANCEL; + } + + return DDENUMRET_OK; +} + +static void test_cursor_clipping(void) +{ + struct find_different_mode_param param; + DDSURFACEDESC2 surface_desc; + RECT rect, clip_rect; + IDirectDraw4 *ddraw; + HWND window; + HRESULT hr; + + window = create_window(); + ok(!!window, "Failed to create a window.\n"); + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + + memset(&surface_desc, 0, sizeof(surface_desc)); + surface_desc.dwSize = sizeof(surface_desc); + hr = IDirectDraw4_GetDisplayMode(ddraw, &surface_desc); + ok(hr == DD_OK, "GetDisplayMode failed, hr %#x.\n", hr); + + memset(¶m, 0, sizeof(param)); + param.old_width = surface_desc.dwWidth; + param.old_height = surface_desc.dwHeight; + hr = IDirectDraw4_EnumDisplayModes(ddraw, 0, NULL, ¶m, find_different_mode_callback); + ok(hr == DD_OK, "EnumDisplayModes failed, hr %#x.\n", hr); + if (!(param.new_width && param.new_height)) + { + skip("Failed to find a different mode than %ux%u.\n", param.old_width, param.old_height); + goto done; + } + + ok(ClipCursor(NULL), "ClipCursor failed, error %#x.\n", GetLastError()); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + /* Set cooperative level to normal */ + hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); + ok(hr == DD_OK, "SetCooperativeLevel failed, hr %#x.\n", hr); + flush_events(); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + hr = set_display_mode(ddraw, param.new_width, param.new_height); + ok(hr == DD_OK || hr == DDERR_UNSUPPORTED, "SetDisplayMode failed, hr %#x.\n", hr); + if (FAILED(hr)) + { + win_skip("SetDisplayMode failed, hr %#x.\n", hr); + goto done; + } + flush_events(); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + hr = IDirectDraw4_RestoreDisplayMode(ddraw); + ok(hr == DD_OK, "RestoreDisplayMode failed, hr %#x.\n", hr); + flush_events(); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + /* Switch to full screen cooperative level */ + hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + ok(hr == DD_OK, "SetCooperativeLevel failed, hr %#x.\n", hr); + flush_events(); + SetRect(&rect, 0, 0, param.old_width, param.old_height); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + hr = set_display_mode(ddraw, param.new_width, param.new_height); + ok(hr == DD_OK || hr == DDERR_UNSUPPORTED, "SetDisplayMode failed, hr %#x.\n", hr); + if (FAILED(hr)) + { + win_skip("SetDisplayMode failed, hr %#x.\n", hr); + goto done; + } + flush_events(); + SetRect(&rect, 0, 0, param.new_width, param.new_height); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + /* Restore display mode */ + hr = IDirectDraw4_RestoreDisplayMode(ddraw); + ok(hr == DD_OK, "RestoreDisplayMode failed, hr %#x.\n", hr); + flush_events(); + SetRect(&rect, 0, 0, param.old_width, param.old_height); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + /* Switch to normal cooperative level */ + hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); + ok(hr == DD_OK, "SetCooperativeLevel failed, hr %#x.\n", hr); + flush_events(); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + +done: + IDirectDraw4_Release(ddraw); + DestroyWindow(window); +} + START_TEST(ddraw4) { DDDEVICEIDENTIFIER identifier; @@ -17138,4 +17370,5 @@ test_caps(); test_d32_support(); test_surface_format_conversion_alpha(); + test_cursor_clipping(); } diff -Nru wine-development-5.5/dlls/ddraw/tests/ddraw7.c wine-development-5.6/dlls/ddraw/tests/ddraw7.c --- wine-development-5.5/dlls/ddraw/tests/ddraw7.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ddraw/tests/ddraw7.c 2020-04-10 18:54:32.000000000 +0000 @@ -87,16 +87,19 @@ && compare_float(vec->w, w, ulps); } +static BOOL compare_uint(unsigned int x, unsigned int y, unsigned int max_diff) +{ + unsigned int diff = x > y ? x - y : y - x; + + return diff <= max_diff; +} + static BOOL compare_color(D3DCOLOR c1, D3DCOLOR c2, BYTE max_diff) { - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - return TRUE; + return compare_uint(c1 & 0xff, c2 & 0xff, max_diff) + && compare_uint((c1 >> 8) & 0xff, (c2 >> 8) & 0xff, max_diff) + && compare_uint((c1 >> 16) & 0xff, (c2 >> 16) & 0xff, max_diff) + && compare_uint((c1 >> 24) & 0xff, (c2 >> 24) & 0xff, max_diff); } static ULONG get_refcount(IUnknown *iface) @@ -105,6 +108,32 @@ return IUnknown_Release(iface); } +static void get_virtual_rect(RECT *rect) +{ + rect->left = GetSystemMetrics(SM_XVIRTUALSCREEN); + rect->top = GetSystemMetrics(SM_YVIRTUALSCREEN); + rect->right = rect->left + GetSystemMetrics(SM_CXVIRTUALSCREEN); + rect->bottom = rect->top + GetSystemMetrics(SM_CYVIRTUALSCREEN); +} + +/* Try to make sure pending X events have been processed before continuing */ +static void flush_events(void) +{ + int diff = 200; + DWORD time; + MSG msg; + + time = GetTickCount() + diff; + while (diff > 0) + { + if (MsgWaitForMultipleObjects(0, NULL, FALSE, 100, QS_ALLINPUT) == WAIT_TIMEOUT) + break; + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + DispatchMessageA(&msg); + diff = time - GetTickCount(); + } +} + static BOOL ddraw_get_identifier(IDirectDraw7 *ddraw, DDDEVICEIDENTIFIER2 *identifier) { HRESULT hr; @@ -5687,6 +5716,8 @@ const DDPIXELFORMAT *pf; DWORD caps_in; DWORD caps_out; + DWORD caps2_in; + DWORD caps2_out; HRESULT create_device_hr; HRESULT set_rt_hr, alternative_set_rt_hr; } @@ -5696,6 +5727,8 @@ NULL, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, + 0, + 0, D3D_OK, D3D_OK, D3D_OK, @@ -5704,6 +5737,8 @@ NULL, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, + 0, + 0, D3D_OK, D3D_OK, D3D_OK, @@ -5712,6 +5747,8 @@ NULL, DDSCAPS_OFFSCREENPLAIN, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -5720,6 +5757,8 @@ NULL, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE, + 0, + 0, D3DERR_SURFACENOTINVIDMEM, DDERR_INVALIDPARAMS, D3D_OK, @@ -5728,6 +5767,8 @@ NULL, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -5736,6 +5777,8 @@ NULL, DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY, DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, + 0, + 0, D3D_OK, D3D_OK, D3D_OK, @@ -5744,6 +5787,8 @@ NULL, DDSCAPS_3DDEVICE, DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, + 0, + 0, D3D_OK, D3D_OK, D3D_OK, @@ -5752,6 +5797,8 @@ NULL, 0, DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -5760,6 +5807,8 @@ NULL, DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE, DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE, + 0, + 0, D3DERR_SURFACENOTINVIDMEM, DDERR_INVALIDPARAMS, D3D_OK, @@ -5768,14 +5817,38 @@ NULL, DDSCAPS_SYSTEMMEMORY, DDSCAPS_SYSTEMMEMORY, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, }, { + NULL, + DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE, + DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY, + DDSCAPS2_TEXTUREMANAGE, + DDSCAPS2_TEXTUREMANAGE, + D3DERR_SURFACENOTINVIDMEM, + DDERR_INVALIDPARAMS, + D3D_OK, + }, + { + NULL, + DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE, + DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY, + DDSCAPS2_D3DTEXTUREMANAGE, + DDSCAPS2_D3DTEXTUREMANAGE, + D3DERR_SURFACENOTINVIDMEM, + DDERR_INVALIDPARAMS, + D3D_OK, + }, + { &p8_fmt, 0, DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -5784,6 +5857,8 @@ &p8_fmt, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE, ~0U /* AMD r200 */, + 0, + 0, DDERR_NOPALETTEATTACHED, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -5792,6 +5867,8 @@ &p8_fmt, DDSCAPS_OFFSCREENPLAIN, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -5800,6 +5877,8 @@ &p8_fmt, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE, + 0, + 0, DDERR_NOPALETTEATTACHED, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -5808,6 +5887,8 @@ &p8_fmt, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -5816,6 +5897,8 @@ &z_fmt, DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER, DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDPIXELFORMAT, DDERR_INVALIDPIXELFORMAT, @@ -5824,6 +5907,8 @@ &z_fmt, DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER, DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDPIXELFORMAT, DDERR_INVALIDPIXELFORMAT, @@ -5832,6 +5917,8 @@ &z_fmt, DDSCAPS_ZBUFFER, DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -5840,6 +5927,8 @@ &z_fmt, DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER, DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT, @@ -5848,6 +5937,8 @@ &z_fmt, DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER, DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER, + 0, + 0, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, DDERR_INVALIDCAPS, @@ -5894,6 +5985,7 @@ surface_desc.dwSize = sizeof(surface_desc); surface_desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; surface_desc.ddsCaps.dwCaps = test_data[i].caps_in; + surface_desc.ddsCaps.dwCaps2 = test_data[i].caps2_in; if (test_data[i].pf) { surface_desc.dwFlags |= DDSD_PIXELFORMAT; @@ -5902,8 +5994,8 @@ surface_desc.dwWidth = 640; surface_desc.dwHeight = 480; hr = IDirectDraw7_CreateSurface(ddraw, &surface_desc, &surface, NULL); - ok(SUCCEEDED(hr), "Test %u: Failed to create surface with caps %#x, hr %#x.\n", - i, test_data[i].caps_in, hr); + ok(SUCCEEDED(hr), "Test %u: Failed to create surface with caps %#x and caps2 %#x, hr %#x.\n", + i, test_data[i].caps_in, test_data[i].caps2_in, hr); memset(&surface_desc, 0, sizeof(surface_desc)); surface_desc.dwSize = sizeof(surface_desc); @@ -5912,6 +6004,9 @@ ok(test_data[i].caps_out == ~0U || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out, "Test %u: Got unexpected caps %#x, expected %#x.\n", i, surface_desc.ddsCaps.dwCaps, test_data[i].caps_out); + ok(surface_desc.ddsCaps.dwCaps2 == test_data[i].caps2_out, + "Test %u: Got unexpected caps2 %#x, expected %#x.\n", + i, surface_desc.ddsCaps.dwCaps2, test_data[i].caps2_out); hr = IDirect3D7_CreateDevice(d3d, devtype, surface, &device); ok(hr == test_data[i].create_device_hr, "Test %u: Got unexpected hr %#x, expected %#x.\n", @@ -5947,6 +6042,7 @@ surface_desc.dwSize = sizeof(surface_desc); surface_desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; surface_desc.ddsCaps.dwCaps = test_data[i].caps_in; + surface_desc.ddsCaps.dwCaps2 = test_data[i].caps2_in; if (test_data[i].pf) { surface_desc.dwFlags |= DDSD_PIXELFORMAT; @@ -14726,11 +14822,11 @@ * Arx Fatalis is broken on the Geforce 9 in the same way it was broken in Wine (bug 43654). * The !tests[i].s_depth is supposed to rule out D16 on GF9 and D24X8 on GF7. */ todo_wine_if(tests[i].todo) - ok(abs(expected_depth - depth) <= max_diff + ok(compare_uint(expected_depth, depth, max_diff) || (ddraw_is_nvidia(ddraw) && (all_zero || all_one || !tests[i].s_depth)), "Test %u: Got depth 0x%08x (diff %d), expected 0x%08x+/-%u, at %u, %u.\n", i, depth, expected_depth - depth, expected_depth, max_diff, x, y); - if (abs(expected_depth - depth) > max_diff) + if (!compare_uint(expected_depth, depth, max_diff)) all_pass = FALSE; hr = IDirectDrawSurface7_Unlock(ds, &r); @@ -17232,6 +17328,142 @@ DestroyWindow(window); } +struct find_different_mode_param +{ + unsigned int old_width; + unsigned int old_height; + unsigned int new_width; + unsigned int new_height; +}; + +static HRESULT CALLBACK find_different_mode_callback(DDSURFACEDESC2 *surface_desc, void *context) +{ + struct find_different_mode_param *param = context; + + if (U1(U4(*surface_desc).ddpfPixelFormat).dwRGBBitCount != registry_mode.dmBitsPerPel) + return DDENUMRET_OK; + + if (surface_desc->dwWidth != param->old_width && surface_desc->dwHeight != param->old_height) + { + param->new_width = surface_desc->dwWidth; + param->new_height = surface_desc->dwHeight; + return DDENUMRET_CANCEL; + } + + return DDENUMRET_OK; +} + +static void test_cursor_clipping(void) +{ + struct find_different_mode_param param; + DDSURFACEDESC2 surface_desc; + RECT rect, clip_rect; + IDirectDraw7 *ddraw; + HWND window; + HRESULT hr; + + window = create_window(); + ok(!!window, "Failed to create a window.\n"); + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + + memset(&surface_desc, 0, sizeof(surface_desc)); + surface_desc.dwSize = sizeof(surface_desc); + hr = IDirectDraw7_GetDisplayMode(ddraw, &surface_desc); + ok(hr == DD_OK, "GetDisplayMode failed, hr %#x.\n", hr); + + memset(¶m, 0, sizeof(param)); + param.old_width = surface_desc.dwWidth; + param.old_height = surface_desc.dwHeight; + hr = IDirectDraw7_EnumDisplayModes(ddraw, 0, NULL, ¶m, find_different_mode_callback); + ok(hr == DD_OK, "EnumDisplayModes failed, hr %#x.\n", hr); + if (!(param.new_width && param.new_height)) + { + skip("Failed to find a different mode than %ux%u.\n", param.old_width, param.old_height); + goto done; + } + + ok(ClipCursor(NULL), "ClipCursor failed, error %#x.\n", GetLastError()); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + /* Set cooperative level to normal */ + hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); + ok(hr == DD_OK, "SetCooperativeLevel failed, hr %#x.\n", hr); + flush_events(); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + hr = set_display_mode(ddraw, param.new_width, param.new_height); + ok(hr == DD_OK || hr == DDERR_UNSUPPORTED, "SetDisplayMode failed, hr %#x.\n", hr); + if (FAILED(hr)) + { + win_skip("SetDisplayMode failed, hr %#x.\n", hr); + goto done; + } + flush_events(); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + hr = IDirectDraw7_RestoreDisplayMode(ddraw); + ok(hr == DD_OK, "RestoreDisplayMode failed, hr %#x.\n", hr); + flush_events(); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + /* Switch to full screen cooperative level */ + hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + ok(hr == DD_OK, "SetCooperativeLevel failed, hr %#x.\n", hr); + flush_events(); + SetRect(&rect, 0, 0, param.old_width, param.old_height); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + hr = set_display_mode(ddraw, param.new_width, param.new_height); + ok(hr == DD_OK || hr == DDERR_UNSUPPORTED, "SetDisplayMode failed, hr %#x.\n", hr); + if (FAILED(hr)) + { + win_skip("SetDisplayMode failed, hr %#x.\n", hr); + goto done; + } + flush_events(); + SetRect(&rect, 0, 0, param.new_width, param.new_height); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + /* Restore display mode */ + hr = IDirectDraw7_RestoreDisplayMode(ddraw); + ok(hr == DD_OK, "RestoreDisplayMode failed, hr %#x.\n", hr); + flush_events(); + SetRect(&rect, 0, 0, param.old_width, param.old_height); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + + /* Switch to normal cooperative level */ + hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); + ok(hr == DD_OK, "SetCooperativeLevel failed, hr %#x.\n", hr); + flush_events(); + get_virtual_rect(&rect); + ok(GetClipCursor(&clip_rect), "GetClipCursor failed, error %#x.\n", GetLastError()); + ok(EqualRect(&clip_rect, &rect), "Expect clip rect %s, got %s.\n", wine_dbgstr_rect(&rect), + wine_dbgstr_rect(&clip_rect)); + +done: + IDirectDraw7_Release(ddraw); + DestroyWindow(window); +} + START_TEST(ddraw7) { DDDEVICEIDENTIFIER2 identifier; @@ -17382,4 +17614,5 @@ test_d32_support(); test_surface_format_conversion_alpha(); test_compressed_surface_stretch(); + test_cursor_clipping(); } diff -Nru wine-development-5.5/dlls/ddraw/tests/ddrawmodes.c wine-development-5.6/dlls/ddraw/tests/ddrawmodes.c --- wine-development-5.5/dlls/ddraw/tests/ddrawmodes.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ddraw/tests/ddrawmodes.c 2020-04-10 18:54:32.000000000 +0000 @@ -558,7 +558,7 @@ ok(DD_OK==rc || DDERR_UNSUPPORTED==rc,"SetDisplayMode returned: %x\n",rc); if (rc == DD_OK) { - RECT r, scrn, test, virt; + RECT scrn, test, virt; SetRect(&virt, 0, 0, GetSystemMetrics(SM_CXVIRTUALSCREEN), GetSystemMetrics(SM_CYVIRTUALSCREEN)); OffsetRect(&virt, GetSystemMetrics(SM_XVIRTUALSCREEN), GetSystemMetrics(SM_YVIRTUALSCREEN)); @@ -598,17 +598,6 @@ ok(DD_OK==rc, "SetDisplayMode returned: %x\n",rc); } } - ok(GetClipCursor(&r), "GetClipCursor() failed\n"); - /* ddraw sets clip rect here to the screen size, even for - multiple monitors */ - ok(EqualRect(&r, &scrn), "Invalid clip rect: (%d %d) x (%d %d)\n", - r.left, r.top, r.right, r.bottom); - - ok(ClipCursor(NULL), "ClipCursor() failed\n"); - ok(GetClipCursor(&r), "GetClipCursor() failed\n"); - ok(EqualRect(&r, &virt), "Invalid clip rect: (%d %d) x (%d %d)\n", - r.left, r.top, r.right, r.bottom); - rc = IDirectDraw_RestoreDisplayMode(lpDD); ok(DD_OK==rc,"RestoreDisplayMode returned: %x\n",rc); } diff -Nru wine-development-5.5/dlls/ddraw/tests/visual.c wine-development-5.6/dlls/ddraw/tests/visual.c --- wine-development-5.5/dlls/ddraw/tests/visual.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ddraw/tests/visual.c 2020-04-10 18:54:32.000000000 +0000 @@ -45,16 +45,19 @@ static HRESULT (WINAPI *pDirectDrawCreateEx)(GUID *driver_guid, void **ddraw, REFIID interface_iid, IUnknown *outer); +static BOOL compare_uint(unsigned int x, unsigned int y, unsigned int max_diff) +{ + unsigned int diff = x > y ? x - y : y - x; + + return diff <= max_diff; +} + static BOOL color_match(D3DCOLOR c1, D3DCOLOR c2, BYTE max_diff) { - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - return TRUE; + return compare_uint(c1 & 0xff, c2 & 0xff, max_diff) + && compare_uint((c1 >> 8) & 0xff, (c2 >> 8) & 0xff, max_diff) + && compare_uint((c1 >> 16) & 0xff, (c2 >> 16) & 0xff, max_diff) + && compare_uint((c1 >> 24) & 0xff, (c2 >> 24) & 0xff, max_diff); } static HRESULT WINAPI enum_z_fmt(DDPIXELFORMAT *fmt, void *ctx) diff -Nru wine-development-5.5/dlls/dispdib.dll16/Makefile.in wine-development-5.6/dlls/dispdib.dll16/Makefile.in --- wine-development-5.5/dlls/dispdib.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dispdib.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,4 +1,4 @@ MODULE = dispdib.dll16 -EXTRADLLFLAGS = -m16 -mno-cygwin +EXTRADLLFLAGS = -m16 C_SRCS = dispdib.c diff -Nru wine-development-5.5/dlls/display.drv16/Makefile.in wine-development-5.6/dlls/display.drv16/Makefile.in --- wine-development-5.5/dlls/display.drv16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/display.drv16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,7 +1,7 @@ MODULE = display.drv16 IMPORTS = user32 -EXTRADLLFLAGS = -m16 -mno-cygwin +EXTRADLLFLAGS = -m16 C_SRCS = display.c diff -Nru wine-development-5.5/dlls/dsound/Makefile.in wine-development-5.6/dlls/dsound/Makefile.in --- wine-development-5.5/dlls/dsound/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dsound/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ MODULE = dsound.dll IMPORTLIB = dsound -IMPORTS = dxguid uuid winmm ole32 advapi32 user32 ucrtbase +IMPORTS = dxguid uuid winmm ole32 advapi32 user32 EXTRADLLFLAGS = -mno-cygwin diff -Nru wine-development-5.5/dlls/dsuiext/dsuiext.c wine-development-5.6/dlls/dsuiext/dsuiext.c --- wine-development-5.5/dlls/dsuiext/dsuiext.c 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/dsuiext/dsuiext.c 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,328 @@ +/* + * Copyright 2020 Dmitry Timoshkov + * + * 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 + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "objbase.h" +#include "rpcproxy.h" +#include "initguid.h" +#include "iads.h" +#include "dsclient.h" + +#include "wine/heap.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dsuiext); + +typedef struct +{ + IDsDisplaySpecifier IDsDisplaySpecifier_iface; + LONG ref; +} DisplaySpec; + +static inline DisplaySpec *impl_from_IDsDisplaySpecifier(IDsDisplaySpecifier *iface) +{ + return CONTAINING_RECORD(iface, DisplaySpec, IDsDisplaySpecifier_iface); +} + +static HRESULT WINAPI dispspec_QueryInterface(IDsDisplaySpecifier *iface, REFIID iid, void **obj) +{ + TRACE("%p,%s,%p\n", iface, debugstr_guid(iid), obj); + + if (!iid || !obj) return E_INVALIDARG; + + if (IsEqualGUID(iid, &IID_IUnknown) || + IsEqualGUID(iid, &IID_IDsDisplaySpecifier)) + { + iface->lpVtbl->AddRef(iface); + *obj = iface; + return S_OK; + } + + FIXME("interface %s is not implemented\n", debugstr_guid(iid)); + return E_NOINTERFACE; +} + +static ULONG WINAPI dispspec_AddRef(IDsDisplaySpecifier *iface) +{ + DisplaySpec *dispspec = impl_from_IDsDisplaySpecifier(iface); + return InterlockedIncrement(&dispspec->ref); +} + +static ULONG WINAPI dispspec_Release(IDsDisplaySpecifier *iface) +{ + DisplaySpec *dispspec = impl_from_IDsDisplaySpecifier(iface); + LONG ref = InterlockedDecrement(&dispspec->ref); + + if (!ref) + { + TRACE("destroying %p\n", iface); + heap_free(dispspec); + } + + return ref; +} + +static HRESULT WINAPI dispspec_SetServer(IDsDisplaySpecifier *iface, LPCWSTR server, LPCWSTR user, + LPCWSTR password, DWORD flags) +{ + FIXME("%p,%s,%s,%p,%08x: stub\n", iface, debugstr_w(server), debugstr_w(user), password, flags); + return E_NOTIMPL; +} + +static HRESULT WINAPI dispspec_SetLanguageID(IDsDisplaySpecifier *iface, LANGID lang) +{ + FIXME("%p,%08x: stub\n", iface, lang); + return E_NOTIMPL; +} + +static HRESULT WINAPI dispspec_GetDisplaySpecifier(IDsDisplaySpecifier *iface, LPCWSTR object, + REFIID iid, void **obj) +{ + FIXME("%p,%s,%s,%p: stub\n", iface, debugstr_w(object), debugstr_guid(iid), obj); + return E_NOTIMPL; +} + +static HRESULT WINAPI dispspec_GetIconLocation(IDsDisplaySpecifier *iface, LPCWSTR object, + DWORD flags, LPWSTR buffer, INT size, INT *id) +{ + FIXME("%p,%s,%08x,%p,%d,%p: stub\n", iface, debugstr_w(object), flags, buffer, size, id); + return E_NOTIMPL; +} + +static HICON WINAPI dispspec_GetIcon(IDsDisplaySpecifier *iface, LPCWSTR object, + DWORD flags, INT cx, INT cy) +{ + FIXME("%p,%s,%08x,%dx%d: stub\n", iface, debugstr_w(object), flags, cx, cy); + return 0; +} + +static HRESULT WINAPI dispspec_GetFriendlyClassName(IDsDisplaySpecifier *iface, LPCWSTR object, + LPWSTR buffer, INT size) +{ + FIXME("%p,%s,%p,%d: stub\n", iface, debugstr_w(object), buffer, size); + return E_NOTIMPL; +} + +static HRESULT WINAPI dispspec_GetFriendlyAttributeName(IDsDisplaySpecifier *iface, LPCWSTR object, + LPCWSTR name, LPWSTR buffer, UINT size) +{ + FIXME("%p,%s,%s,%p,%d: stub\n", iface, debugstr_w(object), debugstr_w(name), buffer, size); + return E_NOTIMPL; +} + +static BOOL WINAPI dispspec_IsClassContainer(IDsDisplaySpecifier *iface, LPCWSTR object, + LPCWSTR path, DWORD flags) +{ + FIXME("%p,%s,%s,%08x: stub\n", iface, debugstr_w(object), debugstr_w(path), flags); + return FALSE; +} + +static HRESULT WINAPI dispspec_GetClassCreationInfo(IDsDisplaySpecifier *iface, LPCWSTR object, + LPDSCLASSCREATIONINFO *info) +{ + FIXME("%p,%s,%p: stub\n", iface, debugstr_w(object), info); + return E_NOTIMPL; +} + +static HRESULT WINAPI dispspec_EnumClassAttributes(IDsDisplaySpecifier *iface, LPCWSTR object, + LPDSENUMATTRIBUTES cb, LPARAM param) +{ + FIXME("%p,%s,%p,%08lx: stub\n", iface, debugstr_w(object), cb, param); + return E_NOTIMPL; +} + +static ADSTYPE WINAPI dispspec_GetAttributeADsType(IDsDisplaySpecifier *iface, LPCWSTR name) +{ + FIXME("%p,%s: stub\n", iface, debugstr_w(name)); + return ADSTYPE_INVALID; +} + +static const IDsDisplaySpecifierVtbl IDsDisplaySpecifier_vtbl = +{ + dispspec_QueryInterface, + dispspec_AddRef, + dispspec_Release, + dispspec_SetServer, + dispspec_SetLanguageID, + dispspec_GetDisplaySpecifier, + dispspec_GetIconLocation, + dispspec_GetIcon, + dispspec_GetFriendlyClassName, + dispspec_GetFriendlyAttributeName, + dispspec_IsClassContainer, + dispspec_GetClassCreationInfo, + dispspec_EnumClassAttributes, + dispspec_GetAttributeADsType +}; + +static HRESULT DsDisplaySpecifier_create(REFIID iid, void **obj) +{ + DisplaySpec *dispspec; + HRESULT hr; + + dispspec = heap_alloc(sizeof(*dispspec)); + if (!dispspec) return E_OUTOFMEMORY; + + dispspec->IDsDisplaySpecifier_iface.lpVtbl = &IDsDisplaySpecifier_vtbl; + dispspec->ref = 1; + + hr = dispspec->IDsDisplaySpecifier_iface.lpVtbl->QueryInterface(&dispspec->IDsDisplaySpecifier_iface, iid, obj); + dispspec->IDsDisplaySpecifier_iface.lpVtbl->Release(&dispspec->IDsDisplaySpecifier_iface); + + return hr; +} + +static const struct class_info +{ + const CLSID *clsid; + HRESULT (*constructor)(REFIID, void **); +} class_info[] = +{ + { &CLSID_DsDisplaySpecifier, DsDisplaySpecifier_create } +}; + +typedef struct +{ + IClassFactory IClassFactory_iface; + LONG ref; + const struct class_info *info; +} class_factory; + +static inline class_factory *impl_from_IClassFactory(IClassFactory *iface) +{ + return CONTAINING_RECORD(iface, class_factory, IClassFactory_iface); +} + +static HRESULT WINAPI factory_QueryInterface(IClassFactory *iface, REFIID iid, LPVOID *obj) +{ + TRACE("%p,%s,%p\n", iface, debugstr_guid(iid), obj); + + if (!iid || !obj) return E_INVALIDARG; + + if (IsEqualIID(iid, &IID_IUnknown) || + IsEqualIID(iid, &IID_IClassFactory)) + { + IClassFactory_AddRef(iface); + *obj = iface; + return S_OK; + } + + *obj = NULL; + FIXME("interface %s is not implemented\n", debugstr_guid(iid)); + return E_NOINTERFACE; +} + +static ULONG WINAPI factory_AddRef(IClassFactory *iface) +{ + class_factory *factory = impl_from_IClassFactory(iface); + ULONG ref = InterlockedIncrement(&factory->ref); + + TRACE("(%p) ref %u\n", iface, ref); + + return ref; +} + +static ULONG WINAPI factory_Release(IClassFactory *iface) +{ + class_factory *factory = impl_from_IClassFactory(iface); + ULONG ref = InterlockedDecrement(&factory->ref); + + TRACE("(%p) ref %u\n", iface, ref); + + if (!ref) + heap_free(factory); + + return ref; +} + +static HRESULT WINAPI factory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID iid, void **obj) +{ + class_factory *factory = impl_from_IClassFactory(iface); + + TRACE("%p,%s,%p\n", outer, debugstr_guid(iid), obj); + + if (!iid || !obj) return E_INVALIDARG; + + *obj = NULL; + if (outer) return CLASS_E_NOAGGREGATION; + + return factory->info->constructor(iid, obj); +} + +static HRESULT WINAPI factory_LockServer(IClassFactory *iface, BOOL lock) +{ + FIXME("%p,%d: stub\n", iface, lock); + return S_OK; +} + +static const struct IClassFactoryVtbl factory_vtbl = +{ + factory_QueryInterface, + factory_AddRef, + factory_Release, + factory_CreateInstance, + factory_LockServer +}; + +static HRESULT factory_constructor(const struct class_info *info, REFIID riid, void **obj) +{ + class_factory *factory; + HRESULT hr; + + factory = heap_alloc(sizeof(*factory)); + if (!factory) return E_OUTOFMEMORY; + + factory->IClassFactory_iface.lpVtbl = &factory_vtbl; + factory->ref = 1; + factory->info = info; + + hr = IClassFactory_QueryInterface(&factory->IClassFactory_iface, riid, obj); + IClassFactory_Release(&factory->IClassFactory_iface); + + return hr; +} + +HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, LPVOID *obj) +{ + int i; + + TRACE("%s,%s,%p\n", debugstr_guid(clsid), debugstr_guid(iid), obj); + + if (!clsid || !iid || !obj) return E_INVALIDARG; + + *obj = NULL; + + for (i = 0; i < ARRAY_SIZE(class_info); i++) + { + if (IsEqualCLSID(class_info[i].clsid, clsid)) + return factory_constructor(&class_info[i], iid, obj); + } + + FIXME("class %s/%s is not implemented\n", debugstr_guid(clsid), debugstr_guid(iid)); + return CLASS_E_CLASSNOTAVAILABLE; +} + +HRESULT WINAPI DllCanUnloadNow(void) +{ + return S_FALSE; +} diff -Nru wine-development-5.5/dlls/dsuiext/dsuiext.idl wine-development-5.6/dlls/dsuiext/dsuiext.idl --- wine-development-5.5/dlls/dsuiext/dsuiext.idl 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/dsuiext/dsuiext.idl 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,25 @@ +/* + * Copyright 2020 Dmitry Timoshkov + * + * 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 + */ + +#pragma makedep register + +[ + uuid(1ab4a8c0-6a0b-11d2-ad49-00c04fa31a86), + threading(apartment) +] +coclass DisplaySpecifier { interface IDsDisplaySpecifier; } diff -Nru wine-development-5.5/dlls/dsuiext/dsuiext.spec wine-development-5.6/dlls/dsuiext/dsuiext.spec --- wine-development-5.5/dlls/dsuiext/dsuiext.spec 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/dsuiext/dsuiext.spec 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,9 @@ +@ stdcall -private DllCanUnloadNow() +@ stdcall -private DllGetClassObject(ptr ptr ptr) +@ stub DllInstall +@ stub DllRegisterServer +@ stub DllUnregisterServer +@ stub DsBrowseForContainerA +@ stub DsBrowseForContainerW +@ stub DsGetFriendlyClassName +@ stub DsGetIcon diff -Nru wine-development-5.5/dlls/dsuiext/Makefile.in wine-development-5.6/dlls/dsuiext/Makefile.in --- wine-development-5.5/dlls/dsuiext/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/dsuiext/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,10 @@ +MODULE = dsuiext.dll +IMPORTS = ole32 uuid + +EXTRADLLFLAGS = -mno-cygwin + +C_SRCS = \ + dsuiext.c + +IDL_SRCS = \ + dsuiext.idl diff -Nru wine-development-5.5/dlls/dwrite/freetype.c wine-development-5.6/dlls/dwrite/freetype.c --- wine-development-5.5/dlls/dwrite/freetype.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dwrite/freetype.c 2020-04-10 18:54:32.000000000 +0000 @@ -32,7 +32,6 @@ #endif /* HAVE_FT2BUILD_H */ #include "windef.h" -#include "wine/library.h" #include "wine/debug.h" #include "dwrite_private.h" @@ -179,13 +178,13 @@ { FT_Version_t FT_Version; - ft_handle = wine_dlopen(SONAME_LIBFREETYPE, RTLD_NOW, NULL, 0); + ft_handle = dlopen(SONAME_LIBFREETYPE, RTLD_NOW); if (!ft_handle) { WINE_MESSAGE("Wine cannot find the FreeType font library.\n"); return FALSE; } -#define LOAD_FUNCPTR(f) if((p##f = wine_dlsym(ft_handle, #f, NULL, 0)) == NULL){WARN("Can't find symbol %s\n", #f); goto sym_not_found;} +#define LOAD_FUNCPTR(f) if((p##f = dlsym(ft_handle, #f)) == NULL){WARN("Can't find symbol %s\n", #f); goto sym_not_found;} LOAD_FUNCPTR(FT_Done_FreeType) LOAD_FUNCPTR(FT_Done_Glyph) LOAD_FUNCPTR(FT_Get_First_Char) @@ -217,11 +216,11 @@ LOAD_FUNCPTR(FTC_Manager_LookupSize) LOAD_FUNCPTR(FTC_Manager_RemoveFaceID) #undef LOAD_FUNCPTR - pFT_Outline_EmboldenXY = wine_dlsym(ft_handle, "FT_Outline_EmboldenXY", NULL, 0); + pFT_Outline_EmboldenXY = dlsym(ft_handle, "FT_Outline_EmboldenXY"); if (pFT_Init_FreeType(&library) != 0) { ERR("Can't init FreeType library\n"); - wine_dlclose(ft_handle, NULL, 0); + dlclose(ft_handle); ft_handle = NULL; return FALSE; } @@ -235,7 +234,7 @@ ERR("Failed to init FreeType cache\n"); pFTC_Manager_Done(cache_manager); pFT_Done_FreeType(library); - wine_dlclose(ft_handle, NULL, 0); + dlclose(ft_handle); ft_handle = NULL; return FALSE; } @@ -245,7 +244,7 @@ sym_not_found: WINE_MESSAGE("Wine cannot find certain functions that it needs from FreeType library.\n"); - wine_dlclose(ft_handle, NULL, 0); + dlclose(ft_handle); ft_handle = NULL; return FALSE; } diff -Nru wine-development-5.5/dlls/dxgi/factory.c wine-development-5.6/dlls/dxgi/factory.c --- wine-development-5.5/dlls/dxgi/factory.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dxgi/factory.c 2020-04-10 18:54:32.000000000 +0000 @@ -445,10 +445,21 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CheckFeatureSupport(IWineDXGIFactory *iface, DXGI_FEATURE feature, void *feature_data, UINT data_size) { - FIXME("iface %p, feature %#x, feature_data %p, data_size %u stub!\n", + TRACE("iface %p, feature %#x, feature_data %p, data_size %u.\n", iface, feature, feature_data, data_size); - return E_NOTIMPL; + switch (feature) + { + case DXGI_FEATURE_PRESENT_ALLOW_TEARING: + if (data_size != sizeof(BOOL)) + return DXGI_ERROR_INVALID_CALL; + *(BOOL *)feature_data = TRUE; + return S_OK; + + default: + WARN("Unsupported feature %#x.\n", feature); + return DXGI_ERROR_INVALID_CALL; + } } static const struct IWineDXGIFactoryVtbl dxgi_factory_vtbl = diff -Nru wine-development-5.5/dlls/dxgi/swapchain.c wine-development-5.6/dlls/dxgi/swapchain.c --- wine-development-5.5/dlls/dxgi/swapchain.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dxgi/swapchain.c 2020-04-10 18:54:32.000000000 +0000 @@ -30,7 +30,6 @@ #ifndef USE_WIN32_VULKAN #define WINE_VK_HOST #endif -#include "wine/library.h" #include "wine/vulkan.h" #include "wine/vulkan_driver.h" #include @@ -952,18 +951,18 @@ static void *load_library(const char *name) { - return wine_dlopen(name, RTLD_NOW, NULL, 0); + return dlopen(name, RTLD_NOW); } static void *get_library_proc(void *handle, const char *name) { - return wine_dlsym(handle, name, NULL, 0); + return dlsym(handle, name); } static void close_library(void *handle) { if (handle) - wine_dlclose(handle, NULL, 0); + dlclose(handle); } static PFN_vkGetInstanceProcAddr load_vulkan(void **vulkan_handle) diff -Nru wine-development-5.5/dlls/dxgi/tests/dxgi.c wine-development-5.6/dlls/dxgi/tests/dxgi.c --- wine-development-5.5/dlls/dxgi/tests/dxgi.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/dxgi/tests/dxgi.c 2020-04-10 18:54:32.000000000 +0000 @@ -121,6 +121,14 @@ return IUnknown_Release(unknown); } +static void get_virtual_rect(RECT *rect) +{ + rect->left = GetSystemMetrics(SM_XVIRTUALSCREEN); + rect->top = GetSystemMetrics(SM_YVIRTUALSCREEN); + rect->right = rect->left + GetSystemMetrics(SM_CXVIRTUALSCREEN); + rect->bottom = rect->top + GetSystemMetrics(SM_CYVIRTUALSCREEN); +} + #define check_interface(a, b, c, d) check_interface_(__LINE__, a, b, c, d) static HRESULT check_interface_(unsigned int line, void *iface, REFIID iid, BOOL supported, BOOL is_broken) @@ -1298,8 +1306,13 @@ static void test_find_closest_matching_mode(void) { + static const DXGI_MODE_SCALING scaling_tests[] = + { + DXGI_MODE_SCALING_CENTERED, + DXGI_MODE_SCALING_STRETCHED + }; DXGI_MODE_DESC *modes, mode, matching_mode; - unsigned int i, mode_count; + unsigned int i, j, mode_count; IDXGIAdapter *adapter; IDXGIDevice *device; IDXGIOutput *output; @@ -1451,23 +1464,25 @@ ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); check_mode_desc(&matching_mode, &modes[0], MODE_DESC_CHECK_RESOLUTION & MODE_DESC_CHECK_FORMAT); - memset(&mode, 0, sizeof(mode)); - mode.Width = modes[0].Width; - mode.Height = modes[0].Height; - mode.Format = modes[0].Format; - mode.Scaling = DXGI_MODE_SCALING_CENTERED; - hr = IDXGIOutput_FindClosestMatchingMode(output, &mode, &matching_mode, NULL); - ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); - check_mode_desc(&matching_mode, &modes[0], MODE_DESC_CHECK_RESOLUTION & MODE_DESC_CHECK_FORMAT); + for (i = 0; i < ARRAY_SIZE(scaling_tests); ++i) + { + for (j = 0; j < mode_count; ++j) + { + if (modes[j].Scaling != scaling_tests[i]) + continue; - memset(&mode, 0, sizeof(mode)); - mode.Width = modes[0].Width; - mode.Height = modes[0].Height; - mode.Format = modes[0].Format; - mode.Scaling = DXGI_MODE_SCALING_STRETCHED; - hr = IDXGIOutput_FindClosestMatchingMode(output, &mode, &matching_mode, NULL); - ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); - check_mode_desc(&matching_mode, &modes[0], MODE_DESC_CHECK_RESOLUTION & MODE_DESC_CHECK_FORMAT); + memset(&mode, 0, sizeof(mode)); + mode.Width = modes[j].Width; + mode.Height = modes[j].Height; + mode.Format = modes[j].Format; + mode.Scaling = modes[j].Scaling; + hr = IDXGIOutput_FindClosestMatchingMode(output, &mode, &matching_mode, NULL); + ok(hr == S_OK, "Test %u: Got unexpected hr %#x.\n", i, hr); + check_mode_desc(&matching_mode, &modes[j], + MODE_DESC_IGNORE_REFRESH_RATE | MODE_DESC_IGNORE_SCANLINE_ORDERING); + break; + } + } heap_free(modes); @@ -2123,7 +2138,7 @@ {-49, -50}, {-50, -50}, {-51, -50}, {-49, -51}, {-50, -51}, {-51, -51}, }; - unsigned int x, y; + unsigned int x = 0, y = 0; switch (i) { @@ -5987,6 +6002,192 @@ ok(status == STATUS_SUCCESS, "Got unexpected status %#x.\n", status); } +static void test_cursor_clipping(IUnknown *device, BOOL is_d3d12) +{ + unsigned int adapter_idx, output_idx, mode_idx, mode_count; + DXGI_SWAP_CHAIN_DESC swapchain_desc; + DXGI_OUTPUT_DESC output_desc; + IDXGIAdapter *adapter = NULL; + RECT virtual_rect, clip_rect; + unsigned int width, height; + IDXGISwapChain *swapchain; + DXGI_MODE_DESC *modes; + IDXGIFactory *factory; + IDXGIOutput *output; + ULONG refcount; + HRESULT hr; + + get_factory(device, is_d3d12, &factory); + + swapchain_desc.SampleDesc.Count = 1; + swapchain_desc.SampleDesc.Quality = 0; + swapchain_desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + swapchain_desc.BufferCount = is_d3d12 ? 2 : 1; + swapchain_desc.Windowed = TRUE; + swapchain_desc.SwapEffect = is_d3d12 ? DXGI_SWAP_EFFECT_FLIP_DISCARD : DXGI_SWAP_EFFECT_DISCARD; + swapchain_desc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; + + for (adapter_idx = 0; SUCCEEDED(IDXGIFactory_EnumAdapters(factory, adapter_idx, &adapter)); + ++adapter_idx) + { + for (output_idx = 0; SUCCEEDED(IDXGIAdapter_EnumOutputs(adapter, output_idx, &output)); + ++output_idx) + { + hr = IDXGIOutput_GetDisplayModeList(output, DXGI_FORMAT_R8G8B8A8_UNORM, 0, &mode_count, + NULL); + ok(SUCCEEDED(hr) || broken(hr == DXGI_ERROR_NOT_CURRENTLY_AVAILABLE), /* Win 7 TestBots */ + "Adapter %u output %u: GetDisplayModeList failed, hr %#x.\n", adapter_idx, + output_idx, hr); + if (hr == DXGI_ERROR_NOT_CURRENTLY_AVAILABLE) + { + win_skip("Adapter %u output %u: GetDisplayModeList() not supported.\n", adapter_idx, + output_idx); + IDXGIOutput_Release(output); + continue; + } + + modes = heap_calloc(mode_count, sizeof(*modes)); + hr = IDXGIOutput_GetDisplayModeList(output, DXGI_FORMAT_R8G8B8A8_UNORM, 0, &mode_count, + modes); + ok(hr == S_OK, "Adapter %u output %u: GetDisplayModeList failed, hr %#x.\n", + adapter_idx, output_idx, hr); + + hr = IDXGIOutput_GetDesc(output, &output_desc); + ok(hr == S_OK, "Adapter %u output %u: GetDesc failed, hr %#x.\n", adapter_idx, + output_idx, hr); + width = output_desc.DesktopCoordinates.right - output_desc.DesktopCoordinates.left; + height = output_desc.DesktopCoordinates.bottom - output_desc.DesktopCoordinates.top; + for (mode_idx = 0; mode_idx < mode_count; ++mode_idx) + { + if (modes[mode_idx].Width != width && modes[mode_idx].Height != height) + break; + } + ok(modes[mode_idx].Width != width && modes[mode_idx].Height != height, + "Adapter %u output %u: Failed to find a different mode than %ux%u.\n", + adapter_idx, output_idx, width, height); + + ok(ClipCursor(NULL), "Adapter %u output %u: ClipCursor failed, error %#x.\n", + adapter_idx, output_idx, GetLastError()); + get_virtual_rect(&virtual_rect); + ok(GetClipCursor(&clip_rect), + "Adapter %u output %u: GetClipCursor failed, error %#x.\n", adapter_idx, + output_idx, GetLastError()); + ok(EqualRect(&clip_rect, &virtual_rect), + "Adapter %u output %u: Expect clip rect %s, got %s.\n", adapter_idx, output_idx, + wine_dbgstr_rect(&virtual_rect), wine_dbgstr_rect(&clip_rect)); + + swapchain_desc.BufferDesc.Width = modes[mode_idx].Width; + swapchain_desc.BufferDesc.Height = modes[mode_idx].Height; + swapchain_desc.BufferDesc.RefreshRate = modes[mode_idx].RefreshRate; + swapchain_desc.BufferDesc.Format = modes[mode_idx].Format; + swapchain_desc.BufferDesc.ScanlineOrdering = modes[mode_idx].ScanlineOrdering; + swapchain_desc.BufferDesc.Scaling = modes[mode_idx].Scaling; + swapchain_desc.OutputWindow = create_window(); + heap_free(modes); + hr = IDXGIFactory_CreateSwapChain(factory, (IUnknown *)device, &swapchain_desc, + &swapchain); + ok(hr == S_OK, "Adapter %u output %u: CreateSwapChain failed, hr %#x.\n", + adapter_idx, output_idx, hr); + + flush_events(); + get_virtual_rect(&virtual_rect); + ok(GetClipCursor(&clip_rect), + "Adapter %u output %u: GetClipCursor failed, error %#x.\n", adapter_idx, + output_idx, GetLastError()); + ok(EqualRect(&clip_rect, &virtual_rect), + "Adapter %u output %u: Expect clip rect %s, got %s.\n", adapter_idx, output_idx, + wine_dbgstr_rect(&virtual_rect), wine_dbgstr_rect(&clip_rect)); + + hr = IDXGISwapChain_SetFullscreenState(swapchain, TRUE, NULL); + ok(hr == S_OK || hr == DXGI_ERROR_NOT_CURRENTLY_AVAILABLE || + broken(hr == DXGI_ERROR_UNSUPPORTED), /* Win 7 testbot */ + "Adapter %u output %u: SetFullscreenState failed, hr %#x.\n", adapter_idx, + output_idx, hr); + if (FAILED(hr)) + { + skip("Adapter %u output %u: Could not change fullscreen state, hr %#x.\n", + adapter_idx, output_idx, hr); + IDXGISwapChain_Release(swapchain); + IDXGIOutput_Release(output); + DestroyWindow(swapchain_desc.OutputWindow); + continue; + } + + flush_events(); + get_virtual_rect(&virtual_rect); + ok(GetClipCursor(&clip_rect), + "Adapter %u output %u: GetClipCursor failed, error %#x.\n", adapter_idx, + output_idx, GetLastError()); + ok(EqualRect(&clip_rect, &virtual_rect), + "Adapter %u output %u: Expect clip rect %s, got %s.\n", adapter_idx, output_idx, + wine_dbgstr_rect(&virtual_rect), wine_dbgstr_rect(&clip_rect)); + + hr = IDXGISwapChain_SetFullscreenState(swapchain, FALSE, NULL); + ok(hr == S_OK, "Adapter %u output %u: Got unexpected hr %#x.\n", adapter_idx, + output_idx, hr); + refcount = IDXGISwapChain_Release(swapchain); + ok(!refcount, "Adapter %u output %u: IDXGISwapChain has %u references left.\n", + adapter_idx, output_idx, refcount); + refcount = IDXGIOutput_Release(output); + ok(!refcount, "Adapter %u output %u: IDXGIOutput has %u references left.\n", + adapter_idx, output_idx, refcount); + DestroyWindow(swapchain_desc.OutputWindow); + + flush_events(); + get_virtual_rect(&virtual_rect); + ok(GetClipCursor(&clip_rect), + "Adapter %u output %u: GetClipCursor failed, error %#x.\n", adapter_idx, + output_idx, GetLastError()); + ok(EqualRect(&clip_rect, &virtual_rect), + "Adapter %u output %u: Expect clip rect %s, got %s.\n", adapter_idx, output_idx, + wine_dbgstr_rect(&virtual_rect), wine_dbgstr_rect(&clip_rect)); + } + + IDXGIAdapter_Release(adapter); + } + + refcount = IDXGIFactory_Release(factory); + ok(refcount == !is_d3d12, "Got unexpected refcount %u.\n", refcount); +} + +static void test_factory_check_feature_support(void) +{ + IDXGIFactory5 *factory; + ULONG ref_count; + HRESULT hr; + BOOL data; + + if (FAILED(hr = CreateDXGIFactory(&IID_IDXGIFactory5, (void**)&factory))) + { + win_skip("IDXGIFactory5 is not available.\n"); + return; + } + + hr = IDXGIFactory5_CheckFeatureSupport(factory, 0x12345678, (void *)&data, sizeof(data)); + ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr); + + /* Crashes on Windows. */ + if (0) + { + hr = IDXGIFactory5_CheckFeatureSupport(factory, DXGI_FEATURE_PRESENT_ALLOW_TEARING, NULL, sizeof(data)); + ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr); + } + + hr = IDXGIFactory5_CheckFeatureSupport(factory, DXGI_FEATURE_PRESENT_ALLOW_TEARING, &data, sizeof(data) - 1); + ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr); + + hr = IDXGIFactory5_CheckFeatureSupport(factory, DXGI_FEATURE_PRESENT_ALLOW_TEARING, &data, sizeof(data) + 1); + ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr); + + data = (BOOL)0xdeadbeef; + hr = IDXGIFactory5_CheckFeatureSupport(factory, DXGI_FEATURE_PRESENT_ALLOW_TEARING, &data, sizeof(data)); + ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); + ok(data == TRUE || data == FALSE, "Got unexpected data %#x.\n", data); + + ref_count = IDXGIFactory5_Release(factory); + ok(!ref_count, "Factory has %u references left.\n", ref_count); +} + static void run_on_d3d10(void (*test_func)(IUnknown *device, BOOL is_d3d12)) { IDXGIDevice *device; @@ -6079,6 +6280,7 @@ queue_test(test_output_desc); queue_test(test_object_wrapping); queue_test(test_multi_adapter); + queue_test(test_factory_check_feature_support); run_queued_tests(); @@ -6098,6 +6300,7 @@ run_on_d3d10(test_swapchain_backbuffer_index); run_on_d3d10(test_swapchain_formats); run_on_d3d10(test_output_ownership); + run_on_d3d10(test_cursor_clipping); if (!(d3d12_module = LoadLibraryA("d3d12.dll"))) { @@ -6121,6 +6324,7 @@ run_on_d3d12(test_swapchain_backbuffer_index); run_on_d3d12(test_swapchain_formats); run_on_d3d12(test_output_ownership); + run_on_d3d12(test_cursor_clipping); FreeLibrary(d3d12_module); } diff -Nru wine-development-5.5/dlls/evr/evr.c wine-development-5.6/dlls/evr/evr.c --- wine-development-5.5/dlls/evr/evr.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/evr/evr.c 2020-04-10 18:54:32.000000000 +0000 @@ -31,22 +31,22 @@ WINE_DEFAULT_DEBUG_CHANNEL(evr); -typedef struct +struct evr { struct strmbase_renderer renderer; -} evr_filter; +}; -static inline evr_filter *impl_from_strmbase_renderer(struct strmbase_renderer *iface) +static struct evr *impl_from_strmbase_renderer(struct strmbase_renderer *iface) { - return CONTAINING_RECORD(iface, evr_filter, renderer); + return CONTAINING_RECORD(iface, struct evr, renderer); } static void evr_destroy(struct strmbase_renderer *iface) { - evr_filter *filter = impl_from_strmbase_renderer(iface); + struct evr *filter = impl_from_strmbase_renderer(iface); strmbase_renderer_cleanup(&filter->renderer); - CoTaskMemFree(filter); + free(filter); } static HRESULT WINAPI evr_DoRenderSample(struct strmbase_renderer *iface, IMediaSample *sample) @@ -70,18 +70,15 @@ HRESULT evr_filter_create(IUnknown *outer, void **out) { - evr_filter *object; - - *out = NULL; + struct evr *object; - object = CoTaskMemAlloc(sizeof(evr_filter)); - if (!object) + if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; strmbase_renderer_init(&object->renderer, outer, &CLSID_EnhancedVideoRenderer, L"EVR Input0", &renderer_ops); + TRACE("Created EVR %p.\n", object); *out = &object->renderer.filter.IUnknown_inner; - return S_OK; } diff -Nru wine-development-5.5/dlls/gameux/tests/gamestatistics.c wine-development-5.6/dlls/gameux/tests/gamestatistics.c --- wine-development-5.5/dlls/gameux/tests/gamestatistics.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/gameux/tests/gamestatistics.c 2020-04-10 18:54:32.000000000 +0000 @@ -295,17 +295,17 @@ /* verify values with these which we stored before*/ hr = IGameStatistics_GetCategoryTitle(gs, 0, &lpName); ok(hr == S_OK, "getting category title failed\n"); - ok(lstrcmpW(lpName, sCategory0)==0, "getting category title returned invalid string (%s)\n", wine_dbgstr_w(lpName)); + ok(lstrcmpW(lpName, sCategory0)==0, "getting category title returned invalid string %s\n", wine_dbgstr_w(lpName)); CoTaskMemFree(lpName); hr = IGameStatistics_GetCategoryTitle(gs, 1, &lpName); ok(hr == S_OK, "getting category title failed\n"); - ok(lstrcmpW(lpName, sCategory1)==0, "getting category title returned invalid string (%s)\n", wine_dbgstr_w(lpName)); + ok(lstrcmpW(lpName, sCategory1)==0, "getting category title returned invalid string %s\n", wine_dbgstr_w(lpName)); CoTaskMemFree(lpName); hr = IGameStatistics_GetCategoryTitle(gs, 2, &lpName); ok(hr == S_OK, "getting category title failed\n"); - ok(lstrcmpW(lpName, sCategory2)==0, "getting category title returned invalid string (%s)\n", wine_dbgstr_w(lpName)); + ok(lstrcmpW(lpName, sCategory2)==0, "getting category title returned invalid string %s\n", wine_dbgstr_w(lpName)); CoTaskMemFree(lpName); /* check result if category doesn't exists */ diff -Nru wine-development-5.5/dlls/gdi32/dibdrv/opengl.c wine-development-5.6/dlls/gdi32/dibdrv/opengl.c --- wine-development-5.5/dlls/gdi32/dibdrv/opengl.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/gdi32/dibdrv/opengl.c 2020-04-10 18:54:32.000000000 +0000 @@ -24,7 +24,6 @@ #include "gdi_private.h" #include "dibdrv.h" -#include "wine/library.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(dib); @@ -99,22 +98,21 @@ { static BOOL init_done = FALSE; static void *osmesa_handle; - char buffer[200]; unsigned int i; if (init_done) return (osmesa_handle != NULL); init_done = TRUE; - osmesa_handle = wine_dlopen( SONAME_LIBOSMESA, RTLD_NOW, buffer, sizeof(buffer) ); + osmesa_handle = dlopen( SONAME_LIBOSMESA, RTLD_NOW ); if (osmesa_handle == NULL) { - ERR( "Failed to load OSMesa: %s\n", buffer ); + ERR( "Failed to load OSMesa: %s\n", dlerror() ); return FALSE; } -#define LOAD_FUNCPTR(f) do if (!(p##f = wine_dlsym( osmesa_handle, #f, buffer, sizeof(buffer) ))) \ +#define LOAD_FUNCPTR(f) do if (!(p##f = dlsym( osmesa_handle, #f ))) \ { \ - ERR( "%s not found in %s (%s), disabling.\n", #f, SONAME_LIBOSMESA, buffer ); \ + ERR( "%s not found in %s (%s), disabling.\n", #f, SONAME_LIBOSMESA, dlerror() ); \ goto failed; \ } while(0) @@ -137,7 +135,7 @@ return TRUE; failed: - wine_dlclose( osmesa_handle, NULL, 0 ); + dlclose( osmesa_handle ); osmesa_handle = NULL; return FALSE; } diff -Nru wine-development-5.5/dlls/gdi32/freetype.c wine-development-5.6/dlls/gdi32/freetype.c --- wine-development-5.5/dlls/gdi32/freetype.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/gdi32/freetype.c 2020-04-10 18:54:32.000000000 +0000 @@ -2787,7 +2787,7 @@ static void init_fontconfig(void) { - void *fc_handle = wine_dlopen(SONAME_LIBFONTCONFIG, RTLD_NOW, NULL, 0); + void *fc_handle = dlopen(SONAME_LIBFONTCONFIG, RTLD_NOW); if (!fc_handle) { @@ -2795,7 +2795,7 @@ return; } -#define LOAD_FUNCPTR(f) if((p##f = wine_dlsym(fc_handle, #f, NULL, 0)) == NULL){WARN("Can't find symbol %s\n", #f); return;} +#define LOAD_FUNCPTR(f) if((p##f = dlsym(fc_handle, #f)) == NULL){WARN("Can't find symbol %s\n", #f); return;} LOAD_FUNCPTR(FcConfigSubstitute); LOAD_FUNCPTR(FcDefaultSubstitute); LOAD_FUNCPTR(FcFontList); @@ -4151,7 +4151,7 @@ static BOOL init_freetype(void) { - ft_handle = wine_dlopen(SONAME_LIBFREETYPE, RTLD_NOW, NULL, 0); + ft_handle = dlopen(SONAME_LIBFREETYPE, RTLD_NOW); if(!ft_handle) { WINE_MESSAGE( "Wine cannot find the FreeType font library. To enable Wine to\n" @@ -4161,7 +4161,7 @@ return FALSE; } -#define LOAD_FUNCPTR(f) if((p##f = wine_dlsym(ft_handle, #f, NULL, 0)) == NULL){WARN("Can't find symbol %s\n", #f); goto sym_not_found;} +#define LOAD_FUNCPTR(f) if((p##f = dlsym(ft_handle, #f)) == NULL){WARN("Can't find symbol %s\n", #f); goto sym_not_found;} LOAD_FUNCPTR(FT_Done_Face) LOAD_FUNCPTR(FT_Get_Char_Index) @@ -4193,16 +4193,16 @@ LOAD_FUNCPTR(FT_Vector_Unit) #undef LOAD_FUNCPTR /* Don't warn if these ones are missing */ - pFT_Outline_Embolden = wine_dlsym(ft_handle, "FT_Outline_Embolden", NULL, 0); - pFT_Get_TrueType_Engine_Type = wine_dlsym(ft_handle, "FT_Get_TrueType_Engine_Type", NULL, 0); + pFT_Outline_Embolden = dlsym(ft_handle, "FT_Outline_Embolden"); + pFT_Get_TrueType_Engine_Type = dlsym(ft_handle, "FT_Get_TrueType_Engine_Type"); #ifdef FT_LCD_FILTER_H - pFT_Library_SetLcdFilter = wine_dlsym(ft_handle, "FT_Library_SetLcdFilter", NULL, 0); + pFT_Library_SetLcdFilter = dlsym(ft_handle, "FT_Library_SetLcdFilter"); #endif - pFT_Property_Set = wine_dlsym(ft_handle, "FT_Property_Set", NULL, 0); + pFT_Property_Set = dlsym(ft_handle, "FT_Property_Set"); if(pFT_Init_FreeType(&library) != 0) { ERR("Can't init FreeType library\n"); - wine_dlclose(ft_handle, NULL, 0); + dlclose(ft_handle); ft_handle = NULL; return FALSE; } @@ -4229,7 +4229,7 @@ "font library. To enable Wine to use TrueType fonts please upgrade\n" "FreeType to at least version 2.1.4.\n" "http://www.freetype.org\n"); - wine_dlclose(ft_handle, NULL, 0); + dlclose(ft_handle); ft_handle = NULL; return FALSE; } diff -Nru wine-development-5.5/dlls/gdi.exe16/Makefile.in wine-development-5.6/dlls/gdi.exe16/Makefile.in --- wine-development-5.5/dlls/gdi.exe16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/gdi.exe16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,7 +1,7 @@ MODULE = gdi.exe16 IMPORTS = user32 advapi32 gdi32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,gdi32.dll,--heap,65520 +EXTRADLLFLAGS = -m16 -Wb,--main-module,gdi32.dll,--heap,65520 C_SRCS = \ bidi.c \ diff -Nru wine-development-5.5/dlls/gdiplus/graphicspath.c wine-development-5.6/dlls/gdiplus/graphicspath.c --- wine-development-5.5/dlls/gdiplus/graphicspath.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/gdiplus/graphicspath.c 2020-04-10 18:54:32.000000000 +0000 @@ -1213,14 +1213,34 @@ GpStatus WINGDIPAPI GdipCreatePath2(GDIPCONST GpPointF* points, GDIPCONST BYTE* types, INT count, GpFillMode fill, GpPath **path) { + int i; + TRACE("(%p, %p, %d, %d, %p)\n", points, types, count, fill, path); - if(!path) + if(!points || !types || !path) return InvalidParameter; + if(count <= 0) { + *path = NULL; + return OutOfMemory; + } + *path = heap_alloc_zero(sizeof(GpPath)); if(!*path) return OutOfMemory; + for(i = 1; i < count; i++) { + if((types[i] & PathPointTypePathTypeMask) == PathPointTypeBezier) { + if(i+2 < count && + (types[i+1] & PathPointTypePathTypeMask) == PathPointTypeBezier && + (types[i+2] & PathPointTypePathTypeMask) == PathPointTypeBezier) + i += 2; + else { + count = 0; + break; + } + } + } + (*path)->pathdata.Points = heap_alloc_zero(count * sizeof(PointF)); (*path)->pathdata.Types = heap_alloc_zero(count); @@ -1233,6 +1253,8 @@ memcpy((*path)->pathdata.Points, points, count * sizeof(PointF)); memcpy((*path)->pathdata.Types, types, count); + if(count > 0) + (*path)->pathdata.Types[0] = PathPointTypeStart; (*path)->pathdata.Count = count; (*path)->datalen = count; @@ -1804,12 +1826,12 @@ } static void add_bevel_point(const GpPointF *endpoint, const GpPointF *nextpoint, - GpPen *pen, int right_side, path_list_node_t **last_point) + REAL pen_width, int right_side, path_list_node_t **last_point) { REAL segment_dy = nextpoint->Y-endpoint->Y; REAL segment_dx = nextpoint->X-endpoint->X; REAL segment_length = sqrtf(segment_dy*segment_dy + segment_dx*segment_dx); - REAL distance = pen->width/2.0; + REAL distance = pen_width / 2.0; REAL bevel_dx, bevel_dy; if (segment_length == 0.0) @@ -1835,7 +1857,7 @@ } static void widen_joint(const GpPointF *p1, const GpPointF *p2, const GpPointF *p3, - GpPen* pen, path_list_node_t **last_point) + GpPen* pen, REAL pen_width, path_list_node_t **last_point) { switch (pen->join) { @@ -1843,7 +1865,7 @@ case LineJoinMiterClipped: if ((p2->X - p1->X) * (p3->Y - p1->Y) > (p2->Y - p1->Y) * (p3->X - p1->X)) { - float distance = pen->width/2.0; + float distance = pen_width / 2.0; float length_0 = sqrtf((p2->X-p1->X)*(p2->X-p1->X)+(p2->Y-p1->Y)*(p2->Y-p1->Y)); float length_1 = sqrtf((p3->X-p2->X)*(p3->X-p2->X)+(p3->Y-p2->Y)*(p3->Y-p2->Y)); float dx0 = distance * (p2->X - p1->X) / length_0; @@ -1870,14 +1892,14 @@ /* else fall-through */ default: case LineJoinBevel: - add_bevel_point(p2, p1, pen, 1, last_point); - add_bevel_point(p2, p3, pen, 0, last_point); + add_bevel_point(p2, p1, pen_width, 1, last_point); + add_bevel_point(p2, p3, pen_width, 0, last_point); break; } } static void widen_cap(const GpPointF *endpoint, const GpPointF *nextpoint, - GpPen *pen, GpLineCap cap, GpCustomLineCap *custom, int add_first_points, + REAL pen_width, GpLineCap cap, GpCustomLineCap *custom, int add_first_points, int add_last_point, path_list_node_t **last_point) { switch (cap) @@ -1885,16 +1907,16 @@ default: case LineCapFlat: if (add_first_points) - add_bevel_point(endpoint, nextpoint, pen, 1, last_point); + add_bevel_point(endpoint, nextpoint, pen_width, 1, last_point); if (add_last_point) - add_bevel_point(endpoint, nextpoint, pen, 0, last_point); + add_bevel_point(endpoint, nextpoint, pen_width, 0, last_point); break; case LineCapSquare: { REAL segment_dy = nextpoint->Y-endpoint->Y; REAL segment_dx = nextpoint->X-endpoint->X; REAL segment_length = sqrtf(segment_dy*segment_dy + segment_dx*segment_dx); - REAL distance = pen->width/2.0; + REAL distance = pen_width / 2.0; REAL bevel_dx, bevel_dy; REAL extend_dx, extend_dy; @@ -1919,7 +1941,7 @@ REAL segment_dy = nextpoint->Y-endpoint->Y; REAL segment_dx = nextpoint->X-endpoint->X; REAL segment_length = sqrtf(segment_dy*segment_dy + segment_dx*segment_dx); - REAL distance = pen->width/2.0; + REAL distance = pen_width / 2.0; REAL dx, dy, dx2, dy2; const REAL control_point_distance = 0.5522847498307935; /* 4/3 * (sqrt(2) - 1) */ @@ -1956,7 +1978,7 @@ endpoint->Y + dx, PathPointTypeBezier); } else if (add_last_point) - add_bevel_point(endpoint, nextpoint, pen, 0, last_point); + add_bevel_point(endpoint, nextpoint, pen_width, 0, last_point); break; } case LineCapTriangle: @@ -1964,20 +1986,20 @@ REAL segment_dy = nextpoint->Y-endpoint->Y; REAL segment_dx = nextpoint->X-endpoint->X; REAL segment_length = sqrtf(segment_dy*segment_dy + segment_dx*segment_dx); - REAL distance = pen->width/2.0; + REAL distance = pen_width / 2.0; REAL dx, dy; dx = distance * segment_dx / segment_length; dy = distance * segment_dy / segment_length; if (add_first_points) { - add_bevel_point(endpoint, nextpoint, pen, 1, last_point); + add_bevel_point(endpoint, nextpoint, pen_width, 1, last_point); *last_point = add_path_list_node(*last_point, endpoint->X - dx, endpoint->Y - dy, PathPointTypeLine); } if (add_first_points || add_last_point) - add_bevel_point(endpoint, nextpoint, pen, 0, last_point); + add_bevel_point(endpoint, nextpoint, pen_width, 0, last_point); break; } } @@ -2097,60 +2119,60 @@ (*last_point)->type |= PathPointTypeCloseSubpath; } -static void widen_open_figure(const GpPointF *points, GpPen *pen, int start, int end, - GpLineCap start_cap, GpCustomLineCap *start_custom, GpLineCap end_cap, - GpCustomLineCap *end_custom, path_list_node_t **last_point) +static void widen_open_figure(const GpPointF *points, int start, int end, + GpPen *pen, REAL pen_width, GpLineCap start_cap, GpCustomLineCap *start_custom, + GpLineCap end_cap, GpCustomLineCap *end_custom, path_list_node_t **last_point) { int i; path_list_node_t *prev_point; - if (end <= start) + if (end <= start || pen_width == 0.0) return; prev_point = *last_point; widen_cap(&points[start], &points[start+1], - pen, start_cap, start_custom, FALSE, TRUE, last_point); + pen_width, start_cap, start_custom, FALSE, TRUE, last_point); for (i=start+1; istart; i--) - widen_joint(&points[i+1], &points[i], - &points[i-1], pen, last_point); + widen_joint(&points[i+1], &points[i], &points[i-1], + pen, pen_width, last_point); widen_cap(&points[start], &points[start+1], - pen, start_cap, start_custom, TRUE, FALSE, last_point); + pen_width, start_cap, start_custom, TRUE, FALSE, last_point); prev_point->next->type = PathPointTypeStart; (*last_point)->type |= PathPointTypeCloseSubpath; } -static void widen_closed_figure(GpPath *path, GpPen *pen, int start, int end, - path_list_node_t **last_point) +static void widen_closed_figure(GpPath *path, int start, int end, + GpPen *pen, REAL pen_width, path_list_node_t **last_point) { int i; path_list_node_t *prev_point; - if (end <= start) + if (end <= start || pen_width == 0.0) return; /* left outline */ prev_point = *last_point; widen_joint(&path->pathdata.Points[end], &path->pathdata.Points[start], - &path->pathdata.Points[start+1], pen, last_point); + &path->pathdata.Points[start+1], pen, pen_width, last_point); for (i=start+1; ipathdata.Points[i-1], &path->pathdata.Points[i], - &path->pathdata.Points[i+1], pen, last_point); + &path->pathdata.Points[i+1], pen, pen_width, last_point); widen_joint(&path->pathdata.Points[end-1], &path->pathdata.Points[end], - &path->pathdata.Points[start], pen, last_point); + &path->pathdata.Points[start], pen, pen_width, last_point); prev_point->next->type = PathPointTypeStart; (*last_point)->type |= PathPointTypeCloseSubpath; @@ -2159,21 +2181,21 @@ prev_point = *last_point; widen_joint(&path->pathdata.Points[start], &path->pathdata.Points[end], - &path->pathdata.Points[end-1], pen, last_point); + &path->pathdata.Points[end-1], pen, pen_width, last_point); for (i=end-1; i>start; i--) widen_joint(&path->pathdata.Points[i+1], &path->pathdata.Points[i], - &path->pathdata.Points[i-1], pen, last_point); + &path->pathdata.Points[i-1], pen, pen_width, last_point); widen_joint(&path->pathdata.Points[start+1], &path->pathdata.Points[start], - &path->pathdata.Points[end], pen, last_point); + &path->pathdata.Points[end], pen, pen_width, last_point); prev_point->next->type = PathPointTypeStart; (*last_point)->type |= PathPointTypeCloseSubpath; } -static void widen_dashed_figure(GpPath *path, GpPen *pen, int start, int end, - int closed, path_list_node_t **last_point) +static void widen_dashed_figure(GpPath *path, int start, int end, int closed, + GpPen *pen, REAL pen_width, path_list_node_t **last_point) { int i, j; REAL dash_pos=0.0; @@ -2190,7 +2212,7 @@ int draw_start_cap=0; static const REAL dash_dot_dot[6] = { 3.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; - if (end <= start) + if (end <= start || pen_width == 0.0) return; switch (pen->dash) @@ -2267,7 +2289,7 @@ tmp_points[num_tmp_points].X = path->pathdata.Points[i].X + segment_dx * segment_pos / segment_length; tmp_points[num_tmp_points].Y = path->pathdata.Points[i].Y + segment_dy * segment_pos / segment_length; - widen_open_figure(tmp_points, pen, 0, num_tmp_points, + widen_open_figure(tmp_points, 0, num_tmp_points, pen, pen_width, draw_start_cap ? pen->startcap : LineCapFlat, pen->customstart, LineCapFlat, NULL, last_point); draw_start_cap = 0; @@ -2301,7 +2323,7 @@ if (dash_index % 2 == 0 && num_tmp_points != 0) { /* last dash overflows last segment */ - widen_open_figure(tmp_points, pen, 0, num_tmp_points-1, + widen_open_figure(tmp_points, 0, num_tmp_points-1, pen, pen_width, draw_start_cap ? pen->startcap : LineCapFlat, pen->customstart, closed ? LineCapFlat : pen->endcap, pen->customend, last_point); } @@ -2337,6 +2359,7 @@ if (status == Ok) { REAL anchor_pen_width = max(pen->width, 2.0); + REAL pen_width = (pen->unit == UnitWorld) ? max(pen->width, 1.0) : pen->width; BYTE *types = flat_path->pathdata.Types; last_point = points; @@ -2364,17 +2387,17 @@ if ((types[i]&PathPointTypeCloseSubpath) == PathPointTypeCloseSubpath) { if (pen->dash != DashStyleSolid) - widen_dashed_figure(flat_path, pen, subpath_start, i, 1, &last_point); + widen_dashed_figure(flat_path, subpath_start, i, 1, pen, pen_width, &last_point); else - widen_closed_figure(flat_path, pen, subpath_start, i, &last_point); + widen_closed_figure(flat_path, subpath_start, i, pen, pen_width, &last_point); } else if (i == flat_path->pathdata.Count-1 || (types[i+1]&PathPointTypePathTypeMask) == PathPointTypeStart) { if (pen->dash != DashStyleSolid) - widen_dashed_figure(flat_path, pen, subpath_start, i, 0, &last_point); + widen_dashed_figure(flat_path, subpath_start, i, 0, pen, pen_width, &last_point); else - widen_open_figure(flat_path->pathdata.Points, pen, subpath_start, i, pen->startcap, pen->customstart, pen->endcap, pen->customend, &last_point); + widen_open_figure(flat_path->pathdata.Points, subpath_start, i, pen, pen_width, pen->startcap, pen->customstart, pen->endcap, pen->customend, &last_point); } } diff -Nru wine-development-5.5/dlls/gdiplus/Makefile.in wine-development-5.6/dlls/gdiplus/Makefile.in --- wine-development-5.5/dlls/gdiplus/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/gdiplus/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ MODULE = gdiplus.dll IMPORTLIB = gdiplus -IMPORTS = uuid shlwapi ole32 user32 gdi32 ucrtbase +IMPORTS = uuid shlwapi ole32 user32 gdi32 DELAYIMPORTS = windowscodecs EXTRADLLFLAGS = -mno-cygwin diff -Nru wine-development-5.5/dlls/gdiplus/tests/graphicspath.c wine-development-5.6/dlls/gdiplus/tests/graphicspath.c --- wine-development-5.5/dlls/gdiplus/tests/graphicspath.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/gdiplus/tests/graphicspath.c 2020-04-10 18:54:32.000000000 +0000 @@ -174,6 +174,108 @@ GdipDeletePath(path); } +static void test_createpath2(void) +{ + GpStatus status; + GpPath* path = NULL; + GpPathData data; + INT i, count, expect_count; + + PointF test_line_points[] = {{1.0,1.0}, {2.0,1.0}}; + BYTE test_line_types[] = {PathPointTypeStart, PathPointTypeLine}; + + PointF test_bez_points[] = {{1.0,1.0}, {2.0,1.0}, {3.0,1.0}, {4.0,1.0}, + {5.0,1.0}, {6.0,1.0}, {7.0,1.0}}; + BYTE test_bez_types[] = {PathPointTypeStart, PathPointTypeBezier, + PathPointTypeBezier, PathPointTypeBezier, PathPointTypeBezier, + PathPointTypeBezier, PathPointTypeBezier}; + + status = GdipCreatePath2(test_line_points, test_line_types, 2, FillModeAlternate, &path); + expect(Ok, status); + status = GdipGetPointCount(path, &count); + expect(Ok, status); + expect(2, count); + GdipDeletePath(path); + + status = GdipCreatePath2(test_line_points, test_line_types, 1, FillModeAlternate, &path); + expect(Ok, status); + status = GdipGetPointCount(path, &count); + expect(Ok, status); + expect(1, count); + GdipDeletePath(path); + + path = (void *)0xdeadbeef; + status = GdipCreatePath2(test_line_points, test_line_types, 0, FillModeAlternate, &path); + expect(OutOfMemory, status); + ok(!path, "Expected NULL, got %p\n", path); + if(path && path != (void *)0xdeadbeef) + GdipDeletePath(path); + + path = (void *)0xdeadbeef; + status = GdipCreatePath2(test_line_points, test_line_types, -1, FillModeAlternate, &path); + expect(OutOfMemory, status); + ok(!path, "Expected NULL, got %p\n", path); + if(path && path != (void *)0xdeadbeef) + GdipDeletePath(path); + + path = (void *)0xdeadbeef; + status = GdipCreatePath2(NULL, test_line_types, 2, FillModeAlternate, &path); + expect(InvalidParameter, status); + ok(path == (void *)0xdeadbeef, "Expected %p, got %p\n", (void *)0xdeadbeef, path); + if(path && path != (void *)0xdeadbeef) + GdipDeletePath(path); + + path = (void *)0xdeadbeef; + status = GdipCreatePath2(test_line_points, NULL, 2, FillModeAlternate, &path); + expect(InvalidParameter, status); + ok(path == (void *)0xdeadbeef, "Expected %p, got %p\n", (void *)0xdeadbeef, path); + if(path && path != (void *)0xdeadbeef) + GdipDeletePath(path); + + status = GdipCreatePath2(test_line_points, test_line_types, 2, FillModeAlternate, NULL); + expect(InvalidParameter, status); + + /* Zero-length line points do not get altered */ + path = NULL; + test_line_points[1].X = test_line_points[0].X; + test_line_points[1].Y = test_line_points[0].Y; + status = GdipCreatePath2(test_line_points, test_line_types, 2, FillModeAlternate, &path); + expect(Ok, status); + status = GdipGetPointCount(path, &count); + expect(Ok, status); + expect(2, count); + GdipDeletePath(path); + + /* The type of the first point is always converted to PathPointTypeStart */ + test_line_types[0] = PathPointTypeLine; + status = GdipCreatePath2(test_line_points, test_line_types, 1, FillModeAlternate, &path); + expect(Ok, status); + status = GdipGetPointCount(path, &count); + expect(Ok, status); + expect(1, count); + data.Count = count; + data.Types = GdipAlloc(sizeof(BYTE) * count); + data.Points = GdipAlloc(sizeof(PointF) * count); + status = GdipGetPathData(path, &data); + expect(Ok, status); + expect((data.Points[0].X == 1.0) && (data.Points[0].Y == 1.0), TRUE); + expect(data.Types[0], PathPointTypeStart); + GdipFree(data.Points); + GdipFree(data.Types); + GdipDeletePath(path); + + /* Bezier points must come in groups of three */ + for(i = 2; i <= 7; i++) { + expect_count = (i % 3 == 1) ? i : 0; + status = GdipCreatePath2(test_bez_points, test_bez_types, i, FillModeAlternate, &path); + expect(Ok, status); + status = GdipGetPointCount(path, &count); + expect(Ok, status); + expect(expect_count, count); + GdipDeletePath(path); + } +} + static path_test_t line2_path[] = { {0.0, 50.0, PathPointTypeStart, 0, 0}, /*0*/ {5.0, 45.0, PathPointTypeLine, 0, 0}, /*1*/ @@ -1077,6 +1179,13 @@ {45.0, 10.0, PathPointTypeLine|PathPointTypeCloseSubpath, 0, 0}, /*7*/ }; +static path_test_t widenline_unit_path[] = { + {5.0, 9.5, PathPointTypeStart, 0, 0}, /*0*/ + {50.0, 9.5, PathPointTypeLine, 0, 0}, /*1*/ + {50.0, 10.5, PathPointTypeLine, 0, 0}, /*2*/ + {5.0, 10.5, PathPointTypeLine|PathPointTypeCloseSubpath, 0, 0} /*3*/ + }; + static void test_widen(void) { GpStatus status; @@ -1239,7 +1348,24 @@ status = GdipGetPointCount(path, &count); expect(Ok, status); - todo_wine expect(0, count); + expect(0, count); + + /* pen width = 0 pixels, UnitWorld - result is a path 1 unit wide */ + GdipDeletePen(pen); + status = GdipCreatePen1(0xffffffff, 0.0, UnitWorld, &pen); + expect(Ok, status); + + status = GdipResetPath(path); + expect(Ok, status); + status = GdipAddPathLine(path, 5.0, 10.0, 50.0, 10.0); + expect(Ok, status); + + status = GdipWidenPath(path, pen, m, 1.0); + expect(Ok, status); + + status = GdipGetPointCount(path, &count); + expect(Ok, status); + ok_path_fudge(path, widenline_unit_path, ARRAY_SIZE(widenline_unit_path), FALSE, 0.000005); GdipDeleteMatrix(m); GdipDeletePen(pen); @@ -1365,7 +1491,7 @@ }; static path_test_t widenline_capsquareanchor_thin_path[] = { - {6.414213, 8.585786, PathPointTypeStart, 4, 0}, /*0*/ + {6.414213, 8.585786, PathPointTypeStart, 0, 0}, /*0*/ {6.414213, 11.414213, PathPointTypeLine, 0, 0}, /*1*/ {3.585786, 11.414213, PathPointTypeLine, 0, 0}, /*2*/ {3.585786, 8.585786, PathPointTypeLine|PathPointTypeCloseSubpath, 0, 0}, /*3*/ @@ -1453,7 +1579,7 @@ { LineCapArrowAnchor, 10.0, widenline_caparrowanchor_path, ARRAY_SIZE(widenline_caparrowanchor_path), FALSE, TRUE }, { LineCapSquareAnchor, 0.0, widenline_capsquareanchor_thin_path, - ARRAY_SIZE(widenline_capsquareanchor_thin_path), FALSE, TRUE }, + ARRAY_SIZE(widenline_capsquareanchor_thin_path) }, { LineCapSquareAnchor, 10.0, widenline_capsquareanchor_dashed_path, ARRAY_SIZE(widenline_capsquareanchor_dashed_path), TRUE }, }; @@ -1639,6 +1765,7 @@ test_constructor_destructor(); test_getpathdata(); + test_createpath2(); test_line2(); test_arc(); test_worldbounds(); diff -Nru wine-development-5.5/dlls/glu32/glu.c wine-development-5.6/dlls/glu32/glu.c --- wine-development-5.5/dlls/glu32/glu.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/glu32/glu.c 2020-04-10 18:54:32.000000000 +0000 @@ -27,7 +27,6 @@ #include "wine/wgl.h" #include "wine/glu.h" -#include "wine/library.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(glu); @@ -116,12 +115,10 @@ static BOOL WINAPI load_libglu( INIT_ONCE *once, void *param, void **context ) { #ifdef SONAME_LIBGLU - char error[256]; - - if ((libglu_handle = wine_dlopen( SONAME_LIBGLU, RTLD_NOW, error, sizeof(error) ))) + if ((libglu_handle = dlopen( SONAME_LIBGLU, RTLD_NOW ))) TRACE( "loaded %s\n", SONAME_LIBGLU ); else - ERR( "Failed to load %s: %s\n", SONAME_LIBGLU, error ); + ERR( "Failed to load %s: %s\n", SONAME_LIBGLU, dlerror() ); #else ERR( "libGLU is needed but support was not included at build time\n" ); #endif @@ -133,7 +130,7 @@ void *ret; if (!InitOnceExecuteOnce( &init_once, load_libglu, NULL, NULL )) return NULL; - if (!(ret = wine_dlsym( libglu_handle, name, NULL, 0 ))) ERR( "Can't find %s\n", name ); + if (!(ret = dlsym( libglu_handle, name ))) ERR( "Can't find %s\n", name ); return ret; } diff -Nru wine-development-5.5/dlls/gphoto2.ds/ds_image.c wine-development-5.6/dlls/gphoto2.ds/ds_image.c --- wine-development-5.5/dlls/gphoto2.ds/ds_image.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/gphoto2.ds/ds_image.c 2020-04-10 18:54:32.000000000 +0000 @@ -27,7 +27,6 @@ #include "gphoto2_i.h" #include "wingdi.h" #include "winuser.h" -#include "wine/library.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(twain); @@ -46,10 +45,10 @@ static void *load_libjpeg(void) { - if((libjpeg_handle = wine_dlopen(SONAME_LIBJPEG, RTLD_NOW, NULL, 0)) != NULL) { + if((libjpeg_handle = dlopen(SONAME_LIBJPEG, RTLD_NOW)) != NULL) { #define LOAD_FUNCPTR(f) \ - if((p##f = wine_dlsym(libjpeg_handle, #f, NULL, 0)) == NULL) { \ + if((p##f = dlsym(libjpeg_handle, #f)) == NULL) { \ libjpeg_handle = NULL; \ return NULL; \ } diff -Nru wine-development-5.5/dlls/iphlpapi/iphlpapi_main.c wine-development-5.6/dlls/iphlpapi/iphlpapi_main.c --- wine-development-5.5/dlls/iphlpapi/iphlpapi_main.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/iphlpapi/iphlpapi_main.c 2020-04-10 18:54:32.000000000 +0000 @@ -1248,6 +1248,9 @@ sizeof(SOCKADDR_STORAGE) - FIELD_OFFSET( SOCKADDR_IN, sin_zero) ); } +#if defined(HAVE_STRUCT___RES_STATE__U__EXT_NSCOUNT6) || \ + (defined(HAVE___RES_GET_STATE) && defined(HAVE___RES_GETSERVERS)) || \ + defined(HAVE_RES_GETSERVERS) static void sockaddr_in6_to_WS_storage( SOCKADDR_STORAGE *dst, const struct sockaddr_in6 *src ) { SOCKADDR_IN6 *s = (SOCKADDR_IN6 *)dst; @@ -1260,6 +1263,7 @@ memset( (char *)s + sizeof(SOCKADDR_IN6), 0, sizeof(SOCKADDR_STORAGE) - sizeof(SOCKADDR_IN6) ); } +#endif #ifdef HAVE_STRUCT___RES_STATE /* call res_init() just once because of a bug in Mac OS X 10.4 */ @@ -1281,6 +1285,47 @@ LeaveCriticalSection(&res_init_cs); } +#ifdef HAVE_RES_GETSERVERS +static int get_dns_servers( SOCKADDR_STORAGE *servers, int num, BOOL ip4_only ) +{ + struct __res_state *state = &_res; + int i, found = 0, total; + SOCKADDR_STORAGE *addr = servers; + union res_sockaddr_union *buf; + + initialise_resolver(); + + total = res_getservers( state, NULL, 0 ); + + if ((!servers || !num) && !ip4_only) return total; + + buf = HeapAlloc( GetProcessHeap(), 0, total * sizeof(union res_sockaddr_union) ); + total = res_getservers( state, buf, total ); + + for (i = 0; i < total; i++) + { + if (buf[i].sin6.sin6_family == AF_INET6 && ip4_only) continue; + if (buf[i].sin.sin_family != AF_INET && buf[i].sin6.sin6_family != AF_INET6) continue; + + found++; + if (!servers || !num) continue; + + if (buf[i].sin6.sin6_family == AF_INET6) + { + sockaddr_in6_to_WS_storage( addr, &buf[i].sin6 ); + } + else + { + sockaddr_in_to_WS_storage( addr, &buf[i].sin ); + } + if (++addr >= servers + num) break; + } + + HeapFree( GetProcessHeap(), 0, buf ); + return found; +} +#else + static int get_dns_servers( SOCKADDR_STORAGE *servers, int num, BOOL ip4_only ) { int i, ip6_count = 0; @@ -1316,6 +1361,7 @@ } return addr - servers; } +#endif #elif defined(HAVE___RES_GET_STATE) && defined(HAVE___RES_GETSERVERS) static int get_dns_servers( SOCKADDR_STORAGE *servers, int num, BOOL ip4_only ) diff -Nru wine-development-5.5/dlls/iphlpapi/ipstats.c wine-development-5.6/dlls/iphlpapi/ipstats.c --- wine-development-5.5/dlls/iphlpapi/ipstats.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/iphlpapi/ipstats.c 2020-04-10 18:54:32.000000000 +0000 @@ -139,6 +139,9 @@ #ifdef HAVE_LIBPROC_H #include #endif +#ifdef HAVE_IFADDRS_H +#include +#endif #ifndef ROUNDUP #define ROUNDUP(a) \ @@ -2652,6 +2655,7 @@ return rowA->dwLocalPort - rowB->dwLocalPort; } +#if defined(__linux__) || (defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_STRUCT_XINPGEN)) struct ipv6_addr_scope { IN6_ADDR addr; @@ -2662,52 +2666,83 @@ { struct ipv6_addr_scope *table = NULL; unsigned int table_size = 0; +#ifdef __linux__ + char buf[512], *ptr; + FILE *fp; +#elif defined(HAVE_GETIFADDRS) + struct ifaddrs *addrs, *cur; +#endif if (!(table = HeapAlloc( GetProcessHeap(), 0, sizeof(table[0]) ))) return NULL; #ifdef __linux__ + if (!(fp = fopen( "/proc/net/if_inet6", "r" ))) + goto failed; + + while ((ptr = fgets( buf, sizeof(buf), fp ))) { - FILE *fp; - char buf[512], *ptr; + WORD a[8]; + DWORD scope; + struct ipv6_addr_scope *new_table; + struct ipv6_addr_scope *entry; + unsigned int i; - if (!(fp = fopen( "/proc/net/if_inet6", "r" ))) + if (sscanf( ptr, "%4hx%4hx%4hx%4hx%4hx%4hx%4hx%4hx %*s %*s %x", + &a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7], &scope ) != 9) + continue; + + table_size++; + if (!(new_table = HeapReAlloc( GetProcessHeap(), 0, table, table_size * sizeof(table[0]) ))) + { + fclose(fp); goto failed; + } - while ((ptr = fgets( buf, sizeof(buf), fp ))) + table = new_table; + entry = &table[table_size - 1]; + + i = 0; + while (i < 8) { - WORD a[8]; - DWORD scope; - struct ipv6_addr_scope *new_table; - struct ipv6_addr_scope *entry; - unsigned int i; + entry->addr.u.Word[i] = htons(a[i]); + i++; + } - if (sscanf( ptr, "%4hx%4hx%4hx%4hx%4hx%4hx%4hx%4hx %*s %*s %x", - &a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7], &scope ) != 9) - continue; + entry->scope = htons(scope); + } - table_size++; - if (!(new_table = HeapReAlloc( GetProcessHeap(), 0, table, table_size * sizeof(table[0]) ))) - { - fclose(fp); - goto failed; - } + fclose(fp); +#elif defined(HAVE_GETIFADDRS) + if (getifaddrs(&addrs) == -1) + goto failed; - table = new_table; - entry = &table[table_size - 1]; + for (cur = addrs; cur; cur = cur->ifa_next) + { + struct sockaddr_in6 *sin6; + struct ipv6_addr_scope *new_table; + struct ipv6_addr_scope *entry; - i = 0; - while (i < 8) - { - entry->addr.u.Word[i] = htons(a[i]); - i++; - } + if (cur->ifa_addr->sa_family != AF_INET6) + continue; - entry->scope = htons(scope); + sin6 = (struct sockaddr_in6 *)cur->ifa_addr; + + table_size++; + if (!(new_table = HeapReAlloc( GetProcessHeap(), 0, table, table_size * sizeof(table[0]) ))) + { + freeifaddrs(addrs); + goto failed; } - fclose(fp); + table = new_table; + entry = &table[table_size - 1]; + + memcpy(&entry->addr, &sin6->sin6_addr, sizeof(entry->addr)); + entry->scope = sin6->sin6_scope_id; } + + freeifaddrs(addrs); #else FIXME( "not implemented\n" ); goto failed; @@ -2745,12 +2780,12 @@ return -1; } +#endif DWORD build_tcp6_table( TCP_TABLE_CLASS class, void **tablep, BOOL order, HANDLE heap, DWORD flags, DWORD *size ) { MIB_TCP6TABLE *table; - MIB_TCP6ROW_OWNER_MODULE row; DWORD ret = NO_ERROR, count = 16, table_size, row_size; if (!(table_size = get_tcp6_table_sizes( class, count, &row_size ))) @@ -2763,6 +2798,7 @@ #ifdef __linux__ { + MIB_TCP6ROW_OWNER_MODULE row; FILE *fp; if ((fp = fopen( "/proc/net/tcp6", "r" ))) @@ -2828,6 +2864,128 @@ } else ret = ERROR_NOT_SUPPORTED; } +#elif defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_STRUCT_XINPGEN) + { + static const char zero[sizeof(IN6_ADDR)] = {0}; + + MIB_TCP6ROW_OWNER_MODULE row; + size_t len = 0; + char *buf = NULL; + struct xinpgen *xig, *orig_xig; + struct pid_map *map = NULL; + unsigned num_entries; + struct ipv6_addr_scope *addr_scopes = NULL; + unsigned int addr_scopes_size = 0; + + if (sysctlbyname( "net.inet.tcp.pcblist", NULL, &len, NULL, 0 ) < 0) + { + ERR( "Failure to read net.inet.tcp.pcblist via sysctlbyname!\n" ); + ret = ERROR_NOT_SUPPORTED; + goto done; + } + + buf = HeapAlloc( GetProcessHeap(), 0, len ); + if (!buf) + { + ret = ERROR_OUTOFMEMORY; + goto done; + } + + if (sysctlbyname( "net.inet.tcp.pcblist", buf, &len, NULL, 0 ) < 0) + { + ERR( "Failure to read net.inet.tcp.pcblist via sysctlbyname!\n" ); + ret = ERROR_NOT_SUPPORTED; + goto done; + } + + addr_scopes = get_ipv6_addr_scope_table( &addr_scopes_size ); + if (!addr_scopes) + { + ret = ERROR_OUTOFMEMORY; + goto done; + } + + if (class >= TCP_TABLE_OWNER_PID_LISTENER) map = get_pid_map( &num_entries ); + + /* Might be nothing here; first entry is just a header it seems */ + if (len <= sizeof (struct xinpgen)) goto done; + + orig_xig = (struct xinpgen *)buf; + xig = orig_xig; + + for (xig = (struct xinpgen *)((char *)xig + xig->xig_len); + xig->xig_len > sizeof (struct xinpgen); + xig = (struct xinpgen *)((char *)xig + xig->xig_len)) + { +#if __FreeBSD_version >= 1200026 + struct xtcpcb *tcp = (struct xtcpcb *)xig; + struct xinpcb *in = &tcp->xt_inp; + struct xsocket *sock = &in->xi_socket; +#else + struct tcpcb *tcp = &((struct xtcpcb *)xig)->xt_tp; + struct inpcb *in = &((struct xtcpcb *)xig)->xt_inp; + struct xsocket *sock = &((struct xtcpcb *)xig)->xt_socket; +#endif + + /* Ignore sockets for other protocols */ + if (sock->xso_protocol != IPPROTO_TCP) + continue; + + /* Ignore PCBs that were freed while generating the data */ + if (in->inp_gencnt > orig_xig->xig_gen) + continue; + + /* we're only interested in IPv6 addresses */ + if (!(in->inp_vflag & INP_IPV6) || + (in->inp_vflag & INP_IPV4)) + continue; + + /* If all 0's, skip it */ + if (!memcmp( &in->in6p_laddr, zero, sizeof(zero) ) && !in->inp_lport && + !memcmp( &in->in6p_faddr, zero, sizeof(zero) ) && !in->inp_fport) + continue; + + /* Fill in structure details */ + memcpy( &row.ucLocalAddr, &in->in6p_laddr.s6_addr, sizeof(row.ucLocalAddr) ); + row.dwLocalPort = in->inp_lport; + row.dwLocalScopeId = find_ipv6_addr_scope( (const IN6_ADDR *)&row.ucLocalAddr, addr_scopes, addr_scopes_size ); + memcpy( &row.ucRemoteAddr, &in->in6p_faddr.s6_addr, sizeof(row.ucRemoteAddr) ); + row.dwRemotePort = in->inp_fport; + row.dwLocalScopeId = find_ipv6_addr_scope( (const IN6_ADDR *)&row.ucRemoteAddr, addr_scopes, addr_scopes_size ); + row.dwState = TCPStateToMIBState( tcp->t_state ); + if (!match_class( class, row.dwState )) continue; + + if (class <= TCP_TABLE_BASIC_ALL) + { + /* MIB_TCP6ROW has a different field order */ + MIB_TCP6ROW basic_row; + basic_row.State = row.dwState; + memcpy( &basic_row.LocalAddr, &row.ucLocalAddr, sizeof(row.ucLocalAddr) ); + basic_row.dwLocalScopeId = row.dwLocalScopeId; + basic_row.dwLocalPort = row.dwLocalPort; + memcpy( &basic_row.RemoteAddr, &row.ucRemoteAddr, sizeof(row.ucRemoteAddr) ); + basic_row.dwRemoteScopeId = row.dwRemoteScopeId; + basic_row.dwRemotePort = row.dwRemotePort; + if (!(table = append_table_row( heap, flags, table, &table_size, &count, &basic_row, row_size ))) + break; + continue; + } + + row.dwOwningPid = find_owning_pid( map, num_entries, (UINT_PTR)sock->so_pcb ); + if (class >= TCP_TABLE_OWNER_MODULE_LISTENER) + { + row.liCreateTimestamp.QuadPart = 0; /* FIXME */ + memset( &row.OwningModuleInfo, 0, sizeof(row.OwningModuleInfo) ); + } + if (!(table = append_table_row( heap, flags, table, &table_size, &count, &row, row_size ))) + break; + } + + done: + HeapFree( GetProcessHeap(), 0, map ); + HeapFree( GetProcessHeap(), 0, buf ); + HeapFree( GetProcessHeap(), 0, addr_scopes ); + } #else FIXME( "not implemented\n" ); ret = ERROR_NOT_SUPPORTED; @@ -2912,6 +3070,105 @@ } else ret = ERROR_NOT_SUPPORTED; } +#elif defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_STRUCT_XINPGEN) + { + static const char zero[sizeof(IN6_ADDR)] = {0}; + + size_t len = 0; + char *buf = NULL; + struct xinpgen *xig, *orig_xig; + struct pid_map *map = NULL; + unsigned num_entries; + struct ipv6_addr_scope *addr_scopes = NULL; + unsigned int addr_scopes_size = 0; + + if (sysctlbyname( "net.inet.udp.pcblist", NULL, &len, NULL, 0 ) < 0) + { + ERR( "Failure to read net.inet.udp.pcblist via sysctlbyname!\n" ); + ret = ERROR_NOT_SUPPORTED; + goto done; + } + + buf = HeapAlloc( GetProcessHeap(), 0, len ); + if (!buf) + { + ret = ERROR_OUTOFMEMORY; + goto done; + } + + if (sysctlbyname( "net.inet.udp.pcblist", buf, &len, NULL, 0 ) < 0) + { + ERR ("Failure to read net.inet.udp.pcblist via sysctlbyname!\n"); + ret = ERROR_NOT_SUPPORTED; + goto done; + } + + addr_scopes = get_ipv6_addr_scope_table( &addr_scopes_size ); + if (!addr_scopes) + { + ret = ERROR_OUTOFMEMORY; + goto done; + } + + if (class >= UDP_TABLE_OWNER_PID) map = get_pid_map( &num_entries ); + + /* Might be nothing here; first entry is just a header it seems */ + if (len <= sizeof (struct xinpgen)) goto done; + + orig_xig = (struct xinpgen *)buf; + xig = orig_xig; + + for (xig = (struct xinpgen *)((char *)xig + xig->xig_len); + xig->xig_len > sizeof (struct xinpgen); + xig = (struct xinpgen *)((char *)xig + xig->xig_len)) + { +#if __FreeBSD_version >= 1200026 + struct xinpcb *in = (struct xinpcb *)xig; + struct xsocket *sock = &in->xi_socket; +#else + struct inpcb *in = &((struct xinpcb *)xig)->xi_inp; + struct xsocket *sock = &((struct xinpcb *)xig)->xi_socket; +#endif + + /* Ignore sockets for other protocols */ + if (sock->xso_protocol != IPPROTO_UDP) + continue; + + /* Ignore PCBs that were freed while generating the data */ + if (in->inp_gencnt > orig_xig->xig_gen) + continue; + + /* we're only interested in IPv6 addresses */ + if (!(in->inp_vflag & INP_IPV6) || + (in->inp_vflag & INP_IPV4)) + continue; + + /* If all 0's, skip it */ + if (!memcmp( &in->in6p_laddr.s6_addr, zero, sizeof(zero) ) && !in->inp_lport) + continue; + + /* Fill in structure details */ + memcpy(row.ucLocalAddr, &in->in6p_laddr.s6_addr, sizeof(row.ucLocalAddr)); + row.dwLocalPort = in->inp_lport; + row.dwLocalScopeId = find_ipv6_addr_scope((const IN6_ADDR *)&row.ucLocalAddr, addr_scopes, addr_scopes_size); + if (class >= UDP_TABLE_OWNER_PID) + row.dwOwningPid = find_owning_pid( map, num_entries, (UINT_PTR)sock->so_pcb ); + if (class >= UDP_TABLE_OWNER_MODULE) + { + row.liCreateTimestamp.QuadPart = 0; /* FIXME */ + row.u.dwFlags = 0; + row.u.SpecificPortBind = !(in->inp_flags & INP_ANONPORT); + memset( &row.OwningModuleInfo, 0, sizeof(row.OwningModuleInfo) ); + } + if (!(table = append_table_row( heap, flags, table, &table_size, &count, &row, row_size ))) + break; + } + + done: + HeapFree( GetProcessHeap(), 0, map ); + HeapFree( GetProcessHeap(), 0, buf ); + HeapFree( GetProcessHeap(), 0, addr_scopes ); + } #else FIXME( "not implemented\n" ); ret = ERROR_NOT_SUPPORTED; diff -Nru wine-development-5.5/dlls/kerberos/krb5_ap.c wine-development-5.6/dlls/kerberos/krb5_ap.c --- wine-development-5.5/dlls/kerberos/krb5_ap.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/kerberos/krb5_ap.c 2020-04-10 18:54:32.000000000 +0000 @@ -44,7 +44,6 @@ #include "ntsecpkg.h" #include "winternl.h" #include "wine/heap.h" -#include "wine/library.h" #include "wine/debug.h" #include "wine/unicode.h" @@ -119,14 +118,14 @@ static void load_krb5(void) { - if (!(libkrb5_handle = wine_dlopen(SONAME_LIBKRB5, RTLD_NOW, NULL, 0))) + if (!(libkrb5_handle = dlopen(SONAME_LIBKRB5, RTLD_NOW))) { WARN("Failed to load %s, Kerberos support will be disabled\n", SONAME_LIBKRB5); return; } #define LOAD_FUNCPTR(f) \ - if (!(p_##f = wine_dlsym(libkrb5_handle, #f, NULL, 0))) \ + if (!(p_##f = dlsym(libkrb5_handle, #f))) \ { \ ERR("Failed to load %s\n", #f); \ goto fail; \ @@ -161,7 +160,7 @@ return; fail: - wine_dlclose(libkrb5_handle, NULL, 0); + dlclose(libkrb5_handle); libkrb5_handle = NULL; } @@ -623,14 +622,14 @@ static BOOL load_gssapi_krb5(void) { - if (!(libgssapi_krb5_handle = wine_dlopen( SONAME_LIBGSSAPI_KRB5, RTLD_NOW, NULL, 0 ))) + if (!(libgssapi_krb5_handle = dlopen( SONAME_LIBGSSAPI_KRB5, RTLD_NOW ))) { ERR_(winediag)( "Failed to load libgssapi_krb5, Kerberos SSP support will not be available.\n" ); return FALSE; } #define LOAD_FUNCPTR(f) \ - if (!(p##f = wine_dlsym( libgssapi_krb5_handle, #f, NULL, 0 ))) \ + if (!(p##f = dlsym( libgssapi_krb5_handle, #f ))) \ { \ ERR( "Failed to load %s\n", #f ); \ goto fail; \ @@ -658,14 +657,14 @@ return TRUE; fail: - wine_dlclose( libgssapi_krb5_handle, NULL, 0 ); + dlclose( libgssapi_krb5_handle ); libgssapi_krb5_handle = NULL; return FALSE; } static void unload_gssapi_krb5(void) { - wine_dlclose( libgssapi_krb5_handle, NULL, 0 ); + dlclose( libgssapi_krb5_handle ); libgssapi_krb5_handle = NULL; } diff -Nru wine-development-5.5/dlls/kernel32/comm.c wine-development-5.6/dlls/kernel32/comm.c --- wine-development-5.5/dlls/kernel32/comm.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/kernel32/comm.c 2020-04-10 18:54:32.000000000 +0000 @@ -95,20 +95,25 @@ member of DCB and not fParity even when parity is specified in the device control string */ - switch(toupperW(*ptr++)) + switch(*ptr++) { + case 'e': case 'E': *lpparity = EVENPARITY; break; + case 'm': case 'M': *lpparity = MARKPARITY; break; + case 'n': case 'N': *lpparity = NOPARITY; break; + case 'o': case 'O': *lpparity = ODDPARITY; break; + case 's': case 'S': *lpparity = SPACEPARITY; break; @@ -239,7 +244,7 @@ { device++; while(*device == ' ') device++; - if(*device) last = toupperW(*device++); + if(*device) last = *device++; while(*device == ' ') device++; } @@ -255,6 +260,7 @@ lpdcb->fDtrControl = DTR_CONTROL_ENABLE; lpdcb->fRtsControl = RTS_CONTROL_ENABLE; break; + case 'x': case 'X': lpdcb->fInX = TRUE; lpdcb->fOutX = TRUE; @@ -263,6 +269,7 @@ lpdcb->fDtrControl = DTR_CONTROL_ENABLE; lpdcb->fRtsControl = RTS_CONTROL_ENABLE; break; + case 'p': case 'P': lpdcb->fInX = FALSE; lpdcb->fOutX = FALSE; diff -Nru wine-development-5.5/dlls/kernel32/editline.c wine-development-5.6/dlls/kernel32/editline.c --- wine-development-5.5/dlls/kernel32/editline.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/kernel32/editline.c 2020-04-10 18:54:32.000000000 +0000 @@ -27,6 +27,7 @@ #include "windef.h" #include "winbase.h" #include "wincon.h" +#include "winuser.h" #include "wine/unicode.h" #include "winnls.h" #include "wine/debug.h" @@ -361,7 +362,10 @@ */ static inline BOOL WCEL_iswalnum(WCHAR wc) { - return get_char_typeW(wc) & (C1_ALPHA|C1_DIGIT|C1_LOWER|C1_UPPER); + WORD type; + + GetStringTypeW( CT_CTYPE1, &wc, 1, &type ); + return type & (C1_ALPHA|C1_DIGIT|C1_LOWER|C1_UPPER); } static int WCEL_GetLeftWordTransition(WCEL_Context* ctx, int ofs) @@ -598,9 +602,7 @@ unsigned int new_ofs = WCEL_GetRightWordTransition(ctx, ctx->ofs); if (new_ofs != ctx->ofs) { - unsigned int i; - for (i = ctx->ofs; i <= new_ofs; i++) - ctx->line[i] = tolowerW(ctx->line[i]); + CharLowerBuffW( ctx->line + ctx->ofs, new_ofs - ctx->ofs + 1 ); WCEL_Update(ctx, ctx->ofs, new_ofs - ctx->ofs + 1); ctx->ofs = new_ofs; } @@ -611,9 +613,7 @@ unsigned int new_ofs = WCEL_GetRightWordTransition(ctx, ctx->ofs); if (new_ofs != ctx->ofs) { - unsigned int i; - for (i = ctx->ofs; i <= new_ofs; i++) - ctx->line[i] = toupperW(ctx->line[i]); + CharUpperBuffW( ctx->line + ctx->ofs, new_ofs - ctx->ofs + 1 ); WCEL_Update(ctx, ctx->ofs, new_ofs - ctx->ofs + 1); ctx->ofs = new_ofs; } @@ -624,11 +624,8 @@ unsigned int new_ofs = WCEL_GetRightWordTransition(ctx, ctx->ofs); if (new_ofs != ctx->ofs) { - unsigned int i; - - ctx->line[ctx->ofs] = toupperW(ctx->line[ctx->ofs]); - for (i = ctx->ofs + 1; i <= new_ofs; i++) - ctx->line[i] = tolowerW(ctx->line[i]); + CharUpperBuffW( ctx->line + ctx->ofs, 1 ); + CharLowerBuffW( ctx->line + ctx->ofs + 1, new_ofs - ctx->ofs ); WCEL_Update(ctx, ctx->ofs, new_ofs - ctx->ofs + 1); ctx->ofs = new_ofs; } diff -Nru wine-development-5.5/dlls/kernel32/file.c wine-development-5.6/dlls/kernel32/file.c --- wine-development-5.5/dlls/kernel32/file.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/kernel32/file.c 2020-04-10 18:54:32.000000000 +0000 @@ -43,6 +43,7 @@ #include "ddk/ntddk.h" #include "kernel_private.h" #include "fileapi.h" +#include "shlwapi.h" #include "wine/exception.h" #include "wine/unicode.h" @@ -502,16 +503,13 @@ static const WCHAR prefixW[] = {'r','f',0}; WCHAR temp_path[MAX_PATH], temp_file[MAX_PATH]; - if (!GetTempPathW( ARRAY_SIZE(temp_path), temp_path ) - || !GetTempFileNameW( temp_path, prefixW, 0, temp_file ) + lstrcpynW( temp_path, lpReplacedFileName, ARRAY_SIZE( temp_path ) ); + PathRemoveFileSpecW( temp_path ); + if (!GetTempFileNameW( temp_path, prefixW, 0, temp_file ) || !MoveFileExW( lpReplacedFileName, temp_file, MOVEFILE_REPLACE_EXISTING )) return FALSE; - if (!DeleteFileW( temp_file )) - { - SetLastError( ERROR_UNABLE_TO_REMOVE_REPLACED ); - return FALSE; - } + DeleteFileW( temp_file ); } /* diff -Nru wine-development-5.5/dlls/kernel32/format_msg.c wine-development-5.6/dlls/kernel32/format_msg.c --- wine-development-5.5/dlls/kernel32/format_msg.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/kernel32/format_msg.c 2020-04-10 18:54:32.000000000 +0000 @@ -184,7 +184,7 @@ } else *p++ = *format++; } - while (isdigitW(*format)) *p++ = *format++; + while (*format >= '0' && *format <= '9') *p++ = *format++; if (*format == '.') { @@ -196,7 +196,7 @@ format++; } else - while (isdigitW(*format)) *p++ = *format++; + while (*format >= '0' && *format <= '9') *p++ = *format++; } /* replicate MS bug: drop an argument when using va_list with width/precision */ diff -Nru wine-development-5.5/dlls/kernel32/path.c wine-development-5.6/dlls/kernel32/path.c --- wine-development-5.5/dlls/kernel32/path.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/kernel32/path.c 2020-04-10 18:54:32.000000000 +0000 @@ -257,21 +257,12 @@ static BOOL is_same_file(HANDLE h1, HANDLE h2) { - int fd1; - BOOL ret = FALSE; - if (wine_server_handle_to_fd(h1, 0, &fd1, NULL) == STATUS_SUCCESS) - { - int fd2; - if (wine_server_handle_to_fd(h2, 0, &fd2, NULL) == STATUS_SUCCESS) - { - struct stat stat1, stat2; - if (fstat(fd1, &stat1) == 0 && fstat(fd2, &stat2) == 0) - ret = (stat1.st_dev == stat2.st_dev && stat1.st_ino == stat2.st_ino); - wine_server_release_fd(h2, fd2); - } - wine_server_release_fd(h1, fd1); - } - return ret; + FILE_ID_INFORMATION id1, id2; + IO_STATUS_BLOCK io; + + return !NtQueryInformationFile( h1, &io, &id1, sizeof(id1), FileIdInformation ) + && !NtQueryInformationFile( h2, &io, &id2, sizeof(id2), FileIdInformation ) + && !memcmp( &id1, &id2, sizeof(FILE_ID_INFORMATION) ); } /************************************************************************** diff -Nru wine-development-5.5/dlls/kernel32/profile.c wine-development-5.6/dlls/kernel32/profile.c --- wine-development-5.5/dlls/kernel32/profile.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/kernel32/profile.c 2020-04-10 18:54:32.000000000 +0000 @@ -270,8 +270,8 @@ /* returns TRUE if a whitespace character, else FALSE */ static inline BOOL PROFILE_isspaceW(WCHAR c) { - /* ^Z (DOS EOF) is a space too (found on CD-ROMs) */ - return isspaceW(c) || c == 0x1a; + /* ^Z (DOS EOF) is a space too (found on CD-ROMs) */ + return (c >= 0x09 && c <= 0x0d) || c == 0x1a || c == 0x20; } static inline ENCODING PROFILE_DetectTextEncoding(const void * buffer, int * len) @@ -311,7 +311,7 @@ WCHAR * szFile; const WCHAR *szLineStart, *szLineEnd; const WCHAR *szValueStart, *szEnd, *next_line; - int line = 0, len; + int len; PROFILESECTION *section, *first_section; PROFILESECTION **next_section; PROFILEKEY *key, *prev_key, **next_key; @@ -402,14 +402,10 @@ while (next_line < szEnd) { szLineStart = next_line; - next_line = memchrW(szLineStart, '\n', szEnd - szLineStart); - if (!next_line) next_line = memchrW(szLineStart, '\r', szEnd - szLineStart); - if (!next_line) next_line = szEnd; - else next_line++; + while (next_line < szEnd && *next_line != '\n' && *next_line != '\r') next_line++; + while (next_line < szEnd && (*next_line == '\n' || *next_line == '\r')) next_line++; szLineEnd = next_line; - line++; - /* get rid of white space */ while (szLineStart < szLineEnd && PROFILE_isspaceW(*szLineStart)) szLineStart++; while ((szLineEnd > szLineStart) && PROFILE_isspaceW(szLineEnd[-1])) szLineEnd--; @@ -418,16 +414,16 @@ if (*szLineStart == '[') /* section start */ { - const WCHAR * szSectionEnd; - if (!(szSectionEnd = memrchrW( szLineStart, ']', szLineEnd - szLineStart ))) + for (len = szLineEnd - szLineStart; len > 0; len--) if (szLineStart[len - 1] == ']') break; + if (!len) { - WARN("Invalid section header at line %d: %s\n", - line, debugstr_wn(szLineStart, (int)(szLineEnd - szLineStart)) ); + WARN("Invalid section header: %s\n", + debugstr_wn(szLineStart, (int)(szLineEnd - szLineStart)) ); } else { szLineStart++; - len = (int)(szSectionEnd - szLineStart); + len -= 2; /* no need to allocate +1 for NULL terminating character as * already included in structure */ if (!(section = HeapAlloc( GetProcessHeap(), 0, sizeof(*section) + len * sizeof(WCHAR) ))) @@ -450,7 +446,8 @@ /* get rid of white space after the name and before the start * of the value */ len = szLineEnd - szLineStart; - if ((szValueStart = memchrW( szLineStart, '=', szLineEnd - szLineStart )) != NULL) + for (szValueStart = szLineStart; szValueStart < szLineEnd; szValueStart++) if (*szValueStart == '=') break; + if (szValueStart < szLineEnd) { const WCHAR *szNameEnd = szValueStart; while ((szNameEnd > szLineStart) && PROFILE_isspaceW(szNameEnd[-1])) szNameEnd--; @@ -458,6 +455,7 @@ szValueStart++; while (szValueStart < szLineEnd && PROFILE_isspaceW(*szValueStart)) szValueStart++; } + else szValueStart = NULL; if (len || !prev_key || *prev_key->name) { @@ -1600,6 +1598,23 @@ return ret; } +static int get_hex_byte( const WCHAR *p ) +{ + int val; + + if (*p >= '0' && *p <= '9') val = *p - '0'; + else if (*p >= 'A' && *p <= 'Z') val = *p - 'A' + 10; + else if (*p >= 'a' && *p <= 'z') val = *p - 'a' + 10; + else return -1; + val <<= 4; + p++; + if (*p >= '0' && *p <= '9') val += *p - '0'; + else if (*p >= 'A' && *p <= 'Z') val += *p - 'A' + 10; + else if (*p >= 'a' && *p <= 'z') val += *p - 'a' + 10; + else return -1; + return val; +} + /*********************************************************************** * GetPrivateProfileStructW (KERNEL32.@) * @@ -1608,70 +1623,29 @@ BOOL WINAPI GetPrivateProfileStructW (LPCWSTR section, LPCWSTR key, LPVOID buf, UINT len, LPCWSTR filename) { - BOOL ret = FALSE; + BOOL ret = FALSE; + LPBYTE data = buf; + BYTE chksum = 0; + int val; + WCHAR *p, *buffer; - RtlEnterCriticalSection( &PROFILE_CritSect ); + if (!(buffer = HeapAlloc( GetProcessHeap(), 0, (2 * len + 3) * sizeof(WCHAR) ))) return FALSE; - if (PROFILE_Open( filename, FALSE )) { - PROFILEKEY *k = PROFILE_Find ( &CurProfile->section, section, key, FALSE, FALSE); - if (k) { - TRACE("value (at %p): %s\n", k->value, debugstr_w(k->value)); - if (((strlenW(k->value) - 2) / 2) == len) - { - LPWSTR end, p; - BOOL valid = TRUE; - WCHAR c; - DWORD chksum = 0; - - end = k->value + strlenW(k->value); /* -> '\0' */ - /* check for invalid chars in ASCII coded hex string */ - for (p=k->value; p < end; p++) - { - if (!isxdigitW(*p)) - { - WARN("invalid char '%x' in file %s->[%s]->%s !\n", - *p, debugstr_w(filename), debugstr_w(section), debugstr_w(key)); - valid = FALSE; - break; - } - } - if (valid) - { - BOOL highnibble = TRUE; - BYTE b = 0, val; - LPBYTE binbuf = buf; - - end -= 2; /* don't include checksum in output data */ - /* translate ASCII hex format into binary data */ - for (p=k->value; p < end; p++) - { - c = toupperW(*p); - val = (c > '9') ? - (c - 'A' + 10) : (c - '0'); - - if (highnibble) - b = val << 4; - else - { - b += val; - *binbuf++ = b; /* feed binary data into output */ - chksum += b; /* calculate checksum */ - } - highnibble ^= 1; /* toggle */ - } - /* retrieve stored checksum value */ - c = toupperW(*p++); - b = ( (c > '9') ? (c - 'A' + 10) : (c - '0') ) << 4; - c = toupperW(*p); - b += (c > '9') ? (c - 'A' + 10) : (c - '0'); - if (b == (chksum & 0xff)) /* checksums match ? */ - ret = TRUE; - } - } - } + if (GetPrivateProfileStringW( section, key, NULL, buffer, 2 * len + 3, filename ) != 2 * len + 2) + goto done; + + for (p = buffer; len; p += 2, len--) + { + if ((val = get_hex_byte( p )) == -1) goto done; + *data++ = val; + chksum += val; } - RtlLeaveCriticalSection( &PROFILE_CritSect ); + /* retrieve stored checksum value */ + if ((val = get_hex_byte( p )) == -1) goto done; + ret = ((BYTE)val == chksum); +done: + HeapFree( GetProcessHeap(), 0, buffer ); return ret; } @@ -1730,17 +1704,8 @@ *p++ = hex[sum & 0xf]; *p++ = '\0'; - RtlEnterCriticalSection( &PROFILE_CritSect ); - - if (PROFILE_Open( filename, TRUE )) { - ret = PROFILE_SetString( section, key, outstring, FALSE); - if (ret) ret = PROFILE_FlushFile(); - } - - RtlLeaveCriticalSection( &PROFILE_CritSect ); - + ret = WritePrivateProfileStringW( section, key, outstring, filename ); HeapFree( GetProcessHeap(), 0, outstring ); - return ret; } diff -Nru wine-development-5.5/dlls/kernel32/term.c wine-development-5.6/dlls/kernel32/term.c --- wine-development-5.5/dlls/kernel32/term.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/kernel32/term.c 2020-04-10 18:54:32.000000000 +0000 @@ -41,7 +41,6 @@ #include #include #include "console_private.h" -#include "wine/library.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(console); @@ -175,17 +174,17 @@ static const char ncname[] = SONAME_LIBCURSES; #endif - if (!(nc_handle = wine_dlopen(ncname, RTLD_NOW, NULL, 0))) + if (!(nc_handle = dlopen(ncname, RTLD_NOW))) { MESSAGE("Wine cannot find the " CURSES_NAME " library (%s).\n", ncname); return FALSE; } -#define LOAD_FUNCPTR(f) \ - if((p_##f = wine_dlsym(nc_handle, #f, NULL, 0)) == NULL) \ - { \ - WARN("Can't find symbol %s\n", #f); \ - goto sym_not_found; \ +#define LOAD_FUNCPTR(f) \ + if((p_##f = dlsym(nc_handle, #f)) == NULL) \ + { \ + WARN("Can't find symbol %s\n", #f); \ + goto sym_not_found; \ } LOAD_FUNCPTR(putp) @@ -202,7 +201,7 @@ "Wine cannot find certain functions that it needs inside the " CURSES_NAME "\nlibrary. To enable Wine to use " CURSES_NAME " please upgrade your " CURSES_NAME "\nlibraries\n"); - wine_dlclose(nc_handle, NULL, 0); + dlclose(nc_handle); nc_handle = NULL; return FALSE; } diff -Nru wine-development-5.5/dlls/kernel32/tests/file.c wine-development-5.6/dlls/kernel32/tests/file.c --- wine-development-5.5/dlls/kernel32/tests/file.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/kernel32/tests/file.c 2020-04-10 18:54:32.000000000 +0000 @@ -1795,7 +1795,8 @@ { BOOL ret; char temp_path[MAX_PATH], temp_file[MAX_PATH]; - HANDLE hfile; + HANDLE hfile, mapping; + char **argv; ret = DeleteFileA(NULL); ok(!ret && (GetLastError() == ERROR_INVALID_PARAMETER || @@ -1842,6 +1843,28 @@ "Expected ERROR_ACCESS_DENIED, got error %d\n", GetLastError()); ret = RemoveDirectoryA("testdir"); ok(ret, "Remove a directory failed, got error %d\n", GetLastError()); + + winetest_get_mainargs(&argv); + + ret = CopyFileA(argv[0], temp_file, FALSE); + ok(ret, "got error %u\n", GetLastError()); + hfile = CreateFileA(temp_file, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, 0, 0); + ok(hfile != INVALID_HANDLE_VALUE, "got error %u\n", GetLastError()); + + mapping = CreateFileMappingA(hfile, NULL, PAGE_READONLY | SEC_IMAGE, 0, 0, NULL); + ok(!!mapping, "got error %u\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = DeleteFileA(temp_file); + ok(!ret, "expected failure\n"); + ok(GetLastError() == ERROR_ACCESS_DENIED, "got error %u\n", GetLastError()); + + CloseHandle(mapping); + + ret = DeleteFileA(temp_file); + ok(ret, "got error %u\n", GetLastError()); + + CloseHandle(hfile); } static void test_DeleteFileW( void ) @@ -3329,17 +3352,6 @@ ofs.szPathName ); } - length = GetCurrentDirectoryA(MAX_PATH, buff) + sizeof(filename); - - if (length >= MAX_PATH) - { - trace("Buffer too small, requested length = %d, but MAX_PATH = %d. Skipping test.\n", length, MAX_PATH); - return; - } - p = buff + strlen(buff); - if (p > buff && p[-1] != '\\') *p++ = '\\'; - strcpy( p, filename ); - memset(&ofs, 0xA5, sizeof(ofs)); SetLastError(0xfaceabee); /* Create an empty file */ @@ -3366,8 +3378,8 @@ ok( ofs.cBytes == sizeof(OFSTRUCT), "OpenFile set ofs.cBytes to %d\n", ofs.cBytes ); ok( ofs.nErrCode == ERROR_SUCCESS || broken(ofs.nErrCode != ERROR_SUCCESS) /* win9x */, "OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode ); - ok( lstrcmpiA(ofs.szPathName, buff) == 0, - "OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, buff ); + ok( lstrcmpiA(ofs.szPathName, filename) == 0, + "OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, filename ); ret = _lclose(hFile); ok( !ret, "_lclose() returns %d\n", ret ); @@ -3381,8 +3393,8 @@ ok( ofs.cBytes == sizeof(OFSTRUCT), "OpenFile set ofs.cBytes to %d\n", ofs.cBytes ); ok( ofs.nErrCode == ERROR_SUCCESS || broken(ofs.nErrCode != ERROR_SUCCESS) /* win9x */, "OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode ); - ok( lstrcmpiA(ofs.szPathName, buff) == 0, - "OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, buff ); + ok( lstrcmpiA(ofs.szPathName, filename) == 0, + "OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, filename ); ret = _lclose(hFile); ok( !ret, "_lclose() returns %d\n", ret ); @@ -3396,8 +3408,8 @@ ok( ofs.cBytes == sizeof(OFSTRUCT), "OpenFile set ofs.cBytes to %d\n", ofs.cBytes ); ok( ofs.nErrCode == ERROR_SUCCESS || broken(ofs.nErrCode != ERROR_SUCCESS) /* win9x */, "OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode ); - ok( lstrcmpiA(ofs.szPathName, buff) == 0, - "OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, buff ); + ok( lstrcmpiA(ofs.szPathName, filename) == 0, + "OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, filename ); ret = _lclose(hFile); ok( !ret, "_lclose() returns %d\n", ret ); @@ -3411,8 +3423,8 @@ ok( ofs.cBytes == sizeof(OFSTRUCT), "OpenFile set ofs.cBytes to %d\n", ofs.cBytes ); ok( ofs.nErrCode == ERROR_SUCCESS || broken(ofs.nErrCode != ERROR_SUCCESS) /* win9x */, "OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode ); - ok( lstrcmpiA(ofs.szPathName, buff) == 0, - "OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, buff ); + ok( lstrcmpiA(ofs.szPathName, filename) == 0, + "OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, filename ); memset(&ofs, 0xA5, sizeof(ofs)); SetLastError(0xfaceabee); @@ -3424,8 +3436,8 @@ ok( ofs.cBytes == sizeof(OFSTRUCT), "OpenFile set ofs.cBytes to %d\n", ofs.cBytes ); ok( ofs.nErrCode == ERROR_SUCCESS || broken(ofs.nErrCode != ERROR_SUCCESS) /* win9x */, "OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode ); - ok( lstrcmpiA(ofs.szPathName, buff) == 0, - "OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, buff ); + ok( lstrcmpiA(ofs.szPathName, filename) == 0, + "OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, filename ); retval = GetFileAttributesA(filename); ok( retval == INVALID_FILE_ATTRIBUTES, "GetFileAttributesA succeeded on deleted file\n" ); @@ -3540,7 +3552,7 @@ static void test_ReplaceFileA(void) { char replaced[MAX_PATH], replacement[MAX_PATH], backup[MAX_PATH]; - HANDLE hReplacedFile, hReplacementFile, hBackupFile; + HANDLE hReplacedFile, hReplacementFile, hBackupFile, mapping; static const char replacedData[] = "file-to-replace"; static const char replacementData[] = "new-file"; static const char backupData[] = "backup-file"; @@ -3549,6 +3561,7 @@ char temp_path[MAX_PATH]; DWORD ret; BOOL retok, removeBackup = FALSE; + char **argv; if (!pReplaceFileA) { @@ -3786,6 +3799,43 @@ broken(GetLastError() == ERROR_ACCESS_DENIED), /* win2k */ "DeleteFileA: error (backup) %d\n", GetLastError()); } + + ret = GetTempFileNameA(temp_path, prefix, 0, replaced); + ok(ret, "got error %u\n", GetLastError()); + hReplacedFile = CreateFileA(replaced, 0, 0, NULL, OPEN_EXISTING, 0, 0); + ok(hReplacedFile != INVALID_HANDLE_VALUE, "got error %u\n", GetLastError()); + + ret = GetTempFileNameA(temp_path, prefix, 0, replacement); + ok(ret, "got error %u\n", GetLastError()); + + ret = ReplaceFileA(replaced, replacement, NULL, 0, 0, 0); + ok(ret, "got error %u\n", GetLastError()); + + CloseHandle(hReplacedFile); + ret = DeleteFileA(replaced); + ok(ret, "got error %u\n", GetLastError()); + + winetest_get_mainargs(&argv); + + ret = CopyFileA(argv[0], replaced, FALSE); + ok(ret, "got error %u\n", GetLastError()); + hReplacedFile = CreateFileA(replaced, GENERIC_READ, + FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, 0, 0); + ok(hReplacedFile != INVALID_HANDLE_VALUE, "got error %u\n", GetLastError()); + + mapping = CreateFileMappingA(hReplacedFile, NULL, PAGE_READONLY | SEC_IMAGE, 0, 0, NULL); + ok(!!mapping, "got error %u\n", GetLastError()); + + ret = GetTempFileNameA(temp_path, prefix, 0, replacement); + ok(ret, "got error %u\n", GetLastError()); + + ret = ReplaceFileA(replaced, replacement, NULL, 0, 0, 0); + ok(ret, "got error %u\n", GetLastError()); + + CloseHandle(mapping); + CloseHandle(hReplacedFile); + ret = DeleteFileA(replaced); + ok(ret, "got error %u\n", GetLastError()); } /* @@ -3847,9 +3897,10 @@ ok(ret || GetLastError() == ERROR_ACCESS_DENIED, "SetFileAttributesW: error setting to read only %d\n", GetLastError()); + SetLastError(0xdeadbeef); ret = pReplaceFileW(replaced, replacement, backup, 0, 0, 0); - ok(ret != ERROR_UNABLE_TO_REMOVE_REPLACED, - "ReplaceFileW: unexpected error %d\n", GetLastError()); + ok(!ret, "expected failure\n"); + ok(GetLastError() == ERROR_ACCESS_DENIED, "got error %u\n", GetLastError()); ret = SetFileAttributesW(replaced, FILE_ATTRIBUTE_NORMAL); ok(ret || GetLastError() == ERROR_ACCESS_DENIED, "SetFileAttributesW: error setting to normal %d\n", GetLastError()); diff -Nru wine-development-5.5/dlls/kernel32/tests/thread.c wine-development-5.6/dlls/kernel32/tests/thread.c --- wine-development-5.5/dlls/kernel32/tests/thread.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/kernel32/tests/thread.c 2020-04-10 18:54:32.000000000 +0000 @@ -1195,6 +1195,19 @@ ok(ret, "GetThreadSelectorEntry(SegCs) error %u\n", GetLastError()); ret = GetThreadSelectorEntry(GetCurrentThread(), ctx.SegDs, &entry); ok(ret, "GetThreadSelectorEntry(SegDs) error %u\n", GetLastError()); + ret = GetThreadSelectorEntry(GetCurrentThread(), ctx.SegDs & ~3, &entry); + ok(ret, "GetThreadSelectorEntry(SegDs) error %u\n", GetLastError()); + ret = GetThreadSelectorEntry(GetCurrentThread(), 0, &entry); + ok(ret, "GetThreadSelectorEntry(SegDs) error %u\n", GetLastError()); + ret = GetThreadSelectorEntry(GetCurrentThread(), 3, &entry); + ok(ret, "GetThreadSelectorEntry(SegDs) error %u\n", GetLastError()); + SetLastError( 0xdeadbeef ); + ret = GetThreadSelectorEntry(GetCurrentThread(), 0xdeadbeef, &entry); + ok(!ret, "GetThreadSelectorEntry(invalid) succeeded\n"); + ok( GetLastError() == ERROR_GEN_FAILURE, "wrong error %u\n", GetLastError() ); + ret = GetThreadSelectorEntry(GetCurrentThread(), ctx.SegDs + 0x100, &entry); + ok(!ret, "GetThreadSelectorEntry(invalid) succeeded\n"); + ok( GetLastError() == ERROR_GEN_FAILURE, "wrong error %u\n", GetLastError() ); memset(&entry, 0x11, sizeof(entry)); ret = GetThreadSelectorEntry(GetCurrentThread(), ctx.SegFs, &entry); @@ -1213,6 +1226,40 @@ ok(entry.HighWord.Bits.Reserved_0 == 0, "expected 0, got %u\n", entry.HighWord.Bits.Reserved_0); ok(entry.HighWord.Bits.Default_Big == 1, "expected 1, got %u\n", entry.HighWord.Bits.Default_Big); ok(entry.HighWord.Bits.Granularity == 0, "expected 0, got %u\n", entry.HighWord.Bits.Granularity); + + memset(&entry, 0x11, sizeof(entry)); + ret = GetThreadSelectorEntry(GetCurrentThread(), ctx.SegCs, &entry); + ok(ret, "GetThreadSelectorEntry(SegDs) error %u\n", GetLastError()); + entry.HighWord.Bits.Type &= ~1; /* ignore accessed bit */ + base = (void *)((entry.HighWord.Bits.BaseHi << 24) | (entry.HighWord.Bits.BaseMid << 16) | entry.BaseLow); + limit = (entry.HighWord.Bits.LimitHi << 16) | entry.LimitLow; + + ok(base == 0, "got base %p\n", base); + ok(limit == ~0u >> 12, "got limit %#x\n", limit); + ok(entry.HighWord.Bits.Type == 0x1a, "expected 0x12, got %#x\n", entry.HighWord.Bits.Type); + ok(entry.HighWord.Bits.Dpl == 3, "expected 3, got %u\n", entry.HighWord.Bits.Dpl); + ok(entry.HighWord.Bits.Pres == 1, "expected 1, got %u\n", entry.HighWord.Bits.Pres); + ok(entry.HighWord.Bits.Sys == 0, "expected 0, got %u\n", entry.HighWord.Bits.Sys); + ok(entry.HighWord.Bits.Reserved_0 == 0, "expected 0, got %u\n", entry.HighWord.Bits.Reserved_0); + ok(entry.HighWord.Bits.Default_Big == 1, "expected 1, got %u\n", entry.HighWord.Bits.Default_Big); + ok(entry.HighWord.Bits.Granularity == 1, "expected 1, got %u\n", entry.HighWord.Bits.Granularity); + + memset(&entry, 0x11, sizeof(entry)); + ret = GetThreadSelectorEntry(GetCurrentThread(), ctx.SegDs, &entry); + ok(ret, "GetThreadSelectorEntry(SegDs) error %u\n", GetLastError()); + entry.HighWord.Bits.Type &= ~1; /* ignore accessed bit */ + base = (void *)((entry.HighWord.Bits.BaseHi << 24) | (entry.HighWord.Bits.BaseMid << 16) | entry.BaseLow); + limit = (entry.HighWord.Bits.LimitHi << 16) | entry.LimitLow; + + ok(base == 0, "got base %p\n", base); + ok(limit == ~0u >> 12, "got limit %#x\n", limit); + ok(entry.HighWord.Bits.Type == 0x12, "expected 0x12, got %#x\n", entry.HighWord.Bits.Type); + ok(entry.HighWord.Bits.Dpl == 3, "expected 3, got %u\n", entry.HighWord.Bits.Dpl); + ok(entry.HighWord.Bits.Pres == 1, "expected 1, got %u\n", entry.HighWord.Bits.Pres); + ok(entry.HighWord.Bits.Sys == 0, "expected 0, got %u\n", entry.HighWord.Bits.Sys); + ok(entry.HighWord.Bits.Reserved_0 == 0, "expected 0, got %u\n", entry.HighWord.Bits.Reserved_0); + ok(entry.HighWord.Bits.Default_Big == 1, "expected 1, got %u\n", entry.HighWord.Bits.Default_Big); + ok(entry.HighWord.Bits.Granularity == 1, "expected 1, got %u\n", entry.HighWord.Bits.Granularity); } #endif /* __i386__ */ diff -Nru wine-development-5.5/dlls/kernel32/tests/timer.c wine-development-5.6/dlls/kernel32/tests/timer.c --- wine-development-5.5/dlls/kernel32/tests/timer.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/kernel32/tests/timer.c 2020-04-10 18:54:32.000000000 +0000 @@ -20,6 +20,8 @@ #include "wine/test.h" #include "winbase.h" +#include "winternl.h" +#include "winuser.h" static void test_timer(void) @@ -66,7 +68,193 @@ CloseHandle( handle ); } +#define TICKSPERSEC 10000000 + +static BOOL adjust_system_time(int sec) +{ + ULARGE_INTEGER uli; + SYSTEMTIME st; + FILETIME ft; + + GetSystemTimeAsFileTime(&ft); + uli.u.LowPart = ft.dwLowDateTime; + uli.u.HighPart = ft.dwHighDateTime; + uli.QuadPart += (LONGLONG)sec * TICKSPERSEC; + ft.dwLowDateTime = uli.u.LowPart; + ft.dwHighDateTime = uli.u.HighPart; + if (!FileTimeToSystemTime(&ft, &st)) + return FALSE; + return SetSystemTime(&st); +} + +static DWORD WINAPI thread_WaitForSingleObject(void *arg) +{ + HANDLE event; + DWORD t, r; + + event = CreateEventW(NULL, FALSE, FALSE, NULL); + ok(event != NULL, "CreateEvent failed\n"); + t = GetTickCount(); + r = WaitForSingleObject(event, 3000); + ok(r == WAIT_TIMEOUT, "WiatForSingleObject returned %x\n", r); + CloseHandle(event); + t = GetTickCount() - t; + ok(t > 2000, "t = %d\n", t); + return 0; +} + +static DWORD WINAPI thread_Sleep(void *arg) +{ + DWORD t = GetTickCount(); + + Sleep(3000); + t = GetTickCount() - t; + ok(t > 2000, "t = %d\n", t); + return 0; +} + +static DWORD WINAPI thread_SleepEx(void *arg) +{ + DWORD t = GetTickCount(); + + SleepEx(3000, TRUE); + t = GetTickCount() - t; + ok(t > 2000, "t = %d\n", t); + return 0; +} + +static DWORD WINAPI thread_WaitableTimer_rel(void *arg) +{ + LARGE_INTEGER li; + HANDLE timer; + DWORD t, r; + + li.QuadPart = -3 * TICKSPERSEC; + + timer = CreateWaitableTimerA(NULL, TRUE, NULL); + ok(timer != NULL, "CreateWaitableTimer failed\n"); + + t = GetTickCount(); + r = SetWaitableTimer(timer, &li, 0, NULL, NULL, FALSE); + ok(r, "SetWaitableTimer failed\n"); + + r = WaitForSingleObject(timer, INFINITE); + ok(r == WAIT_OBJECT_0, "WaitForSingleObject returned %d\n", r); + CloseHandle(timer); + t = GetTickCount() - t; + ok(t > 2000, "t = %d\n", t); + return 0; +} + +static DWORD WINAPI thread_WaitableTimer_abs(void *arg) +{ + LARGE_INTEGER li; + HANDLE timer; + FILETIME ft; + DWORD t, r; + + GetSystemTimeAsFileTime(&ft); + li.u.LowPart = ft.dwLowDateTime; + li.u.HighPart = ft.dwHighDateTime; + li.QuadPart += 3 * TICKSPERSEC; + + timer = CreateWaitableTimerA(NULL, TRUE, NULL); + ok(timer != NULL, "CreateWaitableTimer failed\n"); + + t = GetTickCount(); + r = SetWaitableTimer(timer, &li, 0, NULL, NULL, FALSE); + ok(r, "SetWaitableTimer failed\n"); + + r = WaitForSingleObject(timer, INFINITE); + ok(r == WAIT_OBJECT_0, "WaitForSingleObject returned %d\n", r); + CloseHandle(timer); + t = GetTickCount() - t; + ok(t < 2000, "t = %d\n", t); + return 0; +} + +static DWORD WINAPI thread_WaitableTimer_period(void *arg) +{ + LARGE_INTEGER li; + HANDLE timer; + DWORD t, r; + + li.QuadPart = -1; + + timer = CreateWaitableTimerA(NULL, FALSE, NULL); + ok(timer != NULL, "CreateWaitableTimer failed\n"); + + t = GetTickCount(); + r = SetWaitableTimer(timer, &li, 3000, NULL, NULL, FALSE); + ok(r, "SetWaitableTimer failed\n"); + + r = WaitForSingleObject(timer, INFINITE); + ok(r == WAIT_OBJECT_0, "WaitForSingleObject returned %d\n", r); + + r = WaitForSingleObject(timer, INFINITE); + ok(r == WAIT_OBJECT_0, "WaitForSingleObject returned %d\n", r); + CloseHandle(timer); + t = GetTickCount() - t; + ok(t > 2000, "t = %d\n", t); + return 0; +} + +static DWORD WINAPI thread_SetTimer(void *arg) +{ + DWORD t = GetTickCount(); + UINT_PTR timer; + MSG msg; + + timer = SetTimer(NULL, 0, 3000, NULL); + ok(timer, "SetTimer failed (%d)\n", GetLastError()); + + while (GetMessageW(&msg, NULL, 0, 0)) + { + DispatchMessageW(&msg); + if (msg.message == WM_TIMER) break; + } + + t = GetTickCount() - t; + ok(t > 2000, "t = %d\n", t); + KillTimer(NULL, timer); + return 0; +} + +static void test_timeouts(void) +{ + HANDLE threads[7]; + DWORD i; + + if (!adjust_system_time(1)) + { + skip("can't adjust system clock (%d)\n", GetLastError()); + return; + } + + + threads[0] = CreateThread(NULL, 0, thread_WaitForSingleObject, NULL, 0, NULL); + threads[1] = CreateThread(NULL, 0, thread_Sleep, NULL, 0, NULL); + threads[2] = CreateThread(NULL, 0, thread_SleepEx, NULL, 0, NULL); + threads[3] = CreateThread(NULL, 0, thread_WaitableTimer_rel, NULL, 0, NULL); + threads[4] = CreateThread(NULL, 0, thread_WaitableTimer_abs, NULL, 0, NULL); + threads[5] = CreateThread(NULL, 0, thread_WaitableTimer_period, NULL, 0, NULL); + threads[6] = CreateThread(NULL, 0, thread_SetTimer, NULL, 0, NULL); + for(i=0; iFileSystemAttributes, "expected flags %#x, got %#x\n", + attr_info->FileSystemAttributes, flags); + ok(filename_len == attr_info->MaximumComponentNameLength, "expected filename_len %u, got %u\n", + attr_info->MaximumComponentNameLength, filename_len); + ok(!wcscmp( fsname, attr_info->FileSystemName ), "expected fsname %s, got %s\n", + debugstr_w( attr_info->FileSystemName ), debugstr_w( fsname )); + ok(wcslen( fsname ) == attr_info->FileSystemNameLength / sizeof(WCHAR), + "expected fsname length %u, got %u\n", attr_info->FileSystemNameLength / sizeof(WCHAR), wcslen( fsname )); + + SetLastError(0xdeadbeef); + ret = pGetVolumeInformationByHandleW( file, NULL, 0, NULL, &filename_len, &flags, fsname, 2 ); + ok(!ret, "expected failure\n"); + ok(GetLastError() == ERROR_BAD_LENGTH, "got error %u\n", GetLastError()); + + memset(buffer, 0, sizeof(buffer)); + status = NtQueryVolumeInformationFile( file, &io, buffer, sizeof(buffer), FileFsVolumeInformation ); + ok(!status, "got status %#x\n", status); + ok(serial == volume_info->VolumeSerialNumber, "expected serial %08x, got %08x\n", + volume_info->VolumeSerialNumber, serial); + ok(!wcscmp( label, volume_info->VolumeLabel ), "expected label %s, got %s\n", + debugstr_w( volume_info->VolumeLabel ), debugstr_w( label )); + ok(wcslen( label ) == volume_info->VolumeLabelLength / sizeof(WCHAR), + "expected label length %u, got %u\n", volume_info->VolumeLabelLength / sizeof(WCHAR), wcslen( label )); + + CloseHandle( file ); +} + START_TEST(volume) { hdll = GetModuleHandleA("kernel32.dll"); @@ -1535,6 +1601,7 @@ pGetVolumePathNamesForVolumeNameA = (void *) GetProcAddress(hdll, "GetVolumePathNamesForVolumeNameA"); pGetVolumePathNamesForVolumeNameW = (void *) GetProcAddress(hdll, "GetVolumePathNamesForVolumeNameW"); pCreateSymbolicLinkA = (void *) GetProcAddress(hdll, "CreateSymbolicLinkA"); + pGetVolumeInformationByHandleW = (void *) GetProcAddress(hdll, "GetVolumeInformationByHandleW"); test_query_dos_deviceA(); test_dos_devices(); @@ -1553,4 +1620,5 @@ test_GetVolumePathNamesForVolumeNameW(); test_cdrom_ioctl(); test_mounted_folder(); + test_GetVolumeInformationByHandle(); } diff -Nru wine-development-5.5/dlls/kernel32/volume.c wine-development-5.6/dlls/kernel32/volume.c --- wine-development-5.5/dlls/kernel32/volume.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/kernel32/volume.c 2020-04-10 18:54:32.000000000 +0000 @@ -674,7 +674,7 @@ IO_STATUS_BLOCK io; OBJECT_ATTRIBUTES attr; FILE_FS_DEVICE_INFORMATION info; - WCHAR *p; + unsigned int i; enum fs_type type = FS_UNKNOWN; BOOL ret = FALSE; @@ -685,8 +685,8 @@ return FALSE; } /* there must be exactly one backslash in the name, at the end */ - p = memchrW( nt_name.Buffer + 4, '\\', (nt_name.Length - 4) / sizeof(WCHAR) ); - if (p != nt_name.Buffer + nt_name.Length / sizeof(WCHAR) - 1) + for (i = 4; i < nt_name.Length / sizeof(WCHAR); i++) if (nt_name.Buffer[i] == '\\') break; + if (i != nt_name.Length / sizeof(WCHAR) - 1) { /* check if root contains an explicit subdir */ if (root[0] && root[1] == ':') root += 2; @@ -2117,21 +2117,58 @@ /*********************************************************************** * GetVolumeInformationByHandleW (KERNEL32.@) */ -BOOL WINAPI GetVolumeInformationByHandleW(HANDLE handle, WCHAR *volnamebuf, DWORD volnamesize, DWORD *volserial, DWORD *maxlength, DWORD *flags, WCHAR *fsnamebuf, DWORD fsnamesize) +BOOL WINAPI GetVolumeInformationByHandleW( HANDLE handle, WCHAR *label, DWORD label_len, + DWORD *serial, DWORD *filename_len, DWORD *flags, + WCHAR *fsname, DWORD fsname_len ) { - FIXME("%p %p %d %p %p %p %p %d\n", handle, volnamebuf, volnamesize, volserial, maxlength, flags, fsnamebuf, fsnamesize); + IO_STATUS_BLOCK io; - if(volnamebuf && volnamesize) - *volnamebuf = 0; - if(volserial) - *volserial = 0; - if(maxlength) - *maxlength = 0; - if(flags) - *flags = 0; - if(fsnamebuf && fsnamesize) - *fsnamebuf = 0; + TRACE( "%p\n", handle ); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; + if (label || serial) + { + char buffer[sizeof(FILE_FS_VOLUME_INFORMATION) + MAX_PATH * sizeof(WCHAR)]; + FILE_FS_VOLUME_INFORMATION *info = (FILE_FS_VOLUME_INFORMATION *)buffer; + + if (!set_ntstatus( NtQueryVolumeInformationFile( handle, &io, info, sizeof(buffer), + FileFsVolumeInformation ) )) + return FALSE; + + if (label) + { + if (label_len < info->VolumeLabelLength / sizeof(WCHAR) + 1) + { + SetLastError( ERROR_BAD_LENGTH ); + return FALSE; + } + memcpy( label, info->VolumeLabel, info->VolumeLabelLength ); + label[info->VolumeLabelLength / sizeof(WCHAR)] = 0; + } + if (serial) *serial = info->VolumeSerialNumber; + } + + if (filename_len || flags || fsname) + { + char buffer[sizeof(FILE_FS_ATTRIBUTE_INFORMATION) + MAX_PATH * sizeof(WCHAR)]; + FILE_FS_ATTRIBUTE_INFORMATION *info = (FILE_FS_ATTRIBUTE_INFORMATION *)buffer; + + if (!set_ntstatus( NtQueryVolumeInformationFile( handle, &io, info, sizeof(buffer), + FileFsAttributeInformation ) )) + return FALSE; + + if (fsname) + { + if (fsname_len < info->FileSystemNameLength / sizeof(WCHAR) + 1) + { + SetLastError( ERROR_BAD_LENGTH ); + return FALSE; + } + memcpy( fsname, info->FileSystemName, info->FileSystemNameLength ); + fsname[info->FileSystemNameLength / sizeof(WCHAR)] = 0; + } + if (filename_len) *filename_len = info->MaximumComponentNameLength; + if (flags) *flags = info->FileSystemAttributes; + } + + return TRUE; } diff -Nru wine-development-5.5/dlls/kernelbase/file.c wine-development-5.6/dlls/kernelbase/file.c --- wine-development-5.5/dlls/kernelbase/file.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/kernelbase/file.c 2020-04-10 18:54:32.000000000 +0000 @@ -2201,6 +2201,7 @@ */ BOOL WINAPI DECLSPEC_HOTPATCH GetFileInformationByHandle( HANDLE file, BY_HANDLE_FILE_INFORMATION *info ) { + FILE_FS_VOLUME_INFORMATION volume_info; FILE_ALL_INFORMATION all_info; IO_STATUS_BLOCK io; NTSTATUS status; @@ -2216,12 +2217,17 @@ info->ftLastAccessTime.dwLowDateTime = all_info.BasicInformation.LastAccessTime.u.LowPart; info->ftLastWriteTime.dwHighDateTime = all_info.BasicInformation.LastWriteTime.u.HighPart; info->ftLastWriteTime.dwLowDateTime = all_info.BasicInformation.LastWriteTime.u.LowPart; - info->dwVolumeSerialNumber = 0; /* FIXME */ + info->dwVolumeSerialNumber = 0; info->nFileSizeHigh = all_info.StandardInformation.EndOfFile.u.HighPart; info->nFileSizeLow = all_info.StandardInformation.EndOfFile.u.LowPart; info->nNumberOfLinks = all_info.StandardInformation.NumberOfLinks; info->nFileIndexHigh = all_info.InternalInformation.IndexNumber.u.HighPart; info->nFileIndexLow = all_info.InternalInformation.IndexNumber.u.LowPart; + + status = NtQueryVolumeInformationFile( file, &io, &volume_info, sizeof(volume_info), FileFsVolumeInformation ); + if (status == STATUS_SUCCESS || status == STATUS_BUFFER_OVERFLOW) + info->dwVolumeSerialNumber = volume_info.VolumeSerialNumber; + return TRUE; } diff -Nru wine-development-5.5/dlls/keyboard.drv16/Makefile.in wine-development-5.6/dlls/keyboard.drv16/Makefile.in --- wine-development-5.5/dlls/keyboard.drv16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/keyboard.drv16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = keyboard.drv16 IMPORTS = user32 -EXTRADLLFLAGS = -m16 -mno-cygwin +EXTRADLLFLAGS = -m16 C_SRCS = keyboard.c diff -Nru wine-development-5.5/dlls/krnl386.exe16/atom.c wine-development-5.6/dlls/krnl386.exe16/atom.c --- wine-development-5.5/dlls/krnl386.exe16/atom.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/atom.c 2020-04-10 18:54:32.000000000 +0000 @@ -25,9 +25,6 @@ * have to be changed. */ -#include "config.h" -#include "wine/port.h" - #include #include #include @@ -39,7 +36,6 @@ #include "winerror.h" #include "winternl.h" -#include "wine/unicode.h" #include "wine/winbase16.h" #include "kernel16_private.h" diff -Nru wine-development-5.5/dlls/krnl386.exe16/dosexe.h wine-development-5.6/dlls/krnl386.exe16/dosexe.h --- wine-development-5.5/dlls/krnl386.exe16/dosexe.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/dosexe.h 2020-04-10 18:54:32.000000000 +0000 @@ -25,10 +25,10 @@ #include #include "windef.h" -#include "wine/library.h" #include "wine/windef16.h" #include "winbase.h" #include "winnt.h" /* for PCONTEXT */ +#include "kernel16_private.h" #define MAX_DOS_DRIVES 26 @@ -64,7 +64,7 @@ * segmented mode is recognized by checking whether 'seg' is 32-bit * selector which is neither system selector nor zero. */ -#define CTX_SEG_OFF_TO_LIN(context,seg,off) (wine_ldt_get_ptr((seg),(off))) +#define CTX_SEG_OFF_TO_LIN(context,seg,off) (ldt_get_ptr((seg),(off))) #define INT_BARF(context,num) \ ERR( "int%x: unknown/not implemented parameters:\n" \ diff -Nru wine-development-5.5/dlls/krnl386.exe16/dosmem.c wine-development-5.6/dlls/krnl386.exe16/dosmem.c --- wine-development-5.5/dlls/krnl386.exe16/dosmem.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/dosmem.c 2020-04-10 18:54:32.000000000 +0000 @@ -19,17 +19,11 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - #include #include #include #include #include -#ifdef HAVE_SYS_MMAN_H -# include -#endif #include "windef.h" #include "winbase.h" @@ -319,7 +313,7 @@ /* * PM / offset N*5: Interrupt N in 16-bit protected mode. */ - int16_sel = GLOBAL_Alloc( GMEM_FIXED, 5 * 256, 0, WINE_LDT_FLAGS_CODE ); + int16_sel = GLOBAL_Alloc( GMEM_FIXED, 5 * 256, 0, LDT_FLAGS_CODE ); ptr = GlobalLock16( int16_sel ); for(i=0; i<256; i++) { /* @@ -340,7 +334,7 @@ * PM / offset 3: Stub which swaps back to 32-bit application code/stack. * PM / offset 5: Stub which enables interrupts */ - relay_code_sel = GLOBAL_Alloc( GMEM_FIXED, sizeof(relay), 0, WINE_LDT_FLAGS_CODE ); + relay_code_sel = GLOBAL_Alloc( GMEM_FIXED, sizeof(relay), 0, LDT_FLAGS_CODE ); ptr = GlobalLock16( relay_code_sel ); memcpy( ptr, relay, sizeof(relay) ); GlobalUnlock16( relay_code_sel ); @@ -472,11 +466,11 @@ vectored_handler = AddVectoredExceptionHandler(FALSE, dosmem_handler); DOSMEM_0000H = GLOBAL_CreateBlock( GMEM_FIXED, DOSMEM_sysmem, - DOSMEM_64KB, 0, WINE_LDT_FLAGS_DATA ); + DOSMEM_64KB, 0, LDT_FLAGS_DATA ); DOSMEM_BiosDataSeg = GLOBAL_CreateBlock( GMEM_FIXED, DOSMEM_sysmem + 0x400, - 0x100, 0, WINE_LDT_FLAGS_DATA ); + 0x100, 0, LDT_FLAGS_DATA ); DOSMEM_BiosSysSeg = GLOBAL_CreateBlock( GMEM_FIXED, DOSMEM_dosmem + 0xf0000, - DOSMEM_64KB, 0, WINE_LDT_FLAGS_DATA ); + DOSMEM_64KB, 0, LDT_FLAGS_DATA ); return TRUE; } diff -Nru wine-development-5.5/dlls/krnl386.exe16/file.c wine-development-5.6/dlls/krnl386.exe16/file.c --- wine-development-5.5/dlls/krnl386.exe16/file.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/file.c 2020-04-10 18:54:32.000000000 +0000 @@ -23,11 +23,9 @@ * Right now, they simply call the CopyFile method. */ -#include "config.h" -#include "wine/port.h" - #include #include +#include #include #include "winerror.h" @@ -36,7 +34,6 @@ #include "winternl.h" #include "wine/winbase16.h" #include "kernel16_private.h" -#include "wine/unicode.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(file); @@ -461,10 +458,13 @@ UINT WINAPI GetTempDrive( BYTE ignored ) { WCHAR buffer[MAX_PATH]; - BYTE ret; + BYTE ret = 'C'; - if (GetTempPathW( MAX_PATH, buffer )) ret = (BYTE)toupperW(buffer[0]); - else ret = 'C'; + if (GetTempPathW( MAX_PATH, buffer )) + { + ret = buffer[0]; + if (ret >= 'a' && ret <= 'z') ret += 'A' - 'a'; + } return MAKELONG( ret | (':' << 8), 1 ); } diff -Nru wine-development-5.5/dlls/krnl386.exe16/global.c wine-development-5.6/dlls/krnl386.exe16/global.c --- wine-development-5.5/dlls/krnl386.exe16/global.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/global.c 2020-04-10 18:54:32.000000000 +0000 @@ -19,23 +19,11 @@ */ /* 0xffff sometimes seems to mean: CURRENT_DS */ -#include "config.h" -#include "wine/port.h" - #include #include #include #include -#ifdef HAVE_UNISTD_H -# include -#endif #include -#ifdef HAVE_SYS_PARAM_H -#include -#endif -#ifdef HAVE_SYS_SYSCTL_H -#include -#endif #include "wine/winbase16.h" #include "winternl.h" @@ -144,7 +132,7 @@ pArena->flags = flags & GA_MOVEABLE; if (flags & GMEM_DISCARDABLE) pArena->flags |= GA_DISCARDABLE; if (flags & GMEM_DDESHARE) pArena->flags |= GA_IPCSHARE; - if (!(selflags & (WINE_LDT_FLAGS_CODE^WINE_LDT_FLAGS_DATA))) pArena->flags |= GA_DGROUP; + if (!(selflags & (LDT_FLAGS_CODE ^ LDT_FLAGS_DATA))) pArena->flags |= GA_DGROUP; pArena->selCount = selcount; if (selcount > 1) /* clear the next arena blocks */ memset( pArena + 1, 0, (selcount - 1) * sizeof(GLOBALARENA) ); @@ -260,7 +248,7 @@ STACK16FRAME *frame = CURRENT_STACK16; owner = GetExePtr( frame->cs ); } - return GLOBAL_Alloc( flags, size, owner, WINE_LDT_FLAGS_DATA ); + return GLOBAL_Alloc( flags, size, owner, LDT_FLAGS_DATA ); } @@ -785,7 +773,7 @@ WORD wSelector; GLOBALARENA *pArena; - wSelector = GLOBAL_CreateBlock(GMEM_FIXED, lpBlock, size, hModule, WINE_LDT_FLAGS_DATA ); + wSelector = GLOBAL_CreateBlock(GMEM_FIXED, lpBlock, size, hModule, LDT_FLAGS_DATA ); pArena = GET_ARENA_PTR(wSelector); pArena->flags |= GA_DOSMEM; return MAKELONG(wSelector,uParagraph); diff -Nru wine-development-5.5/dlls/krnl386.exe16/instr.c wine-development-5.6/dlls/krnl386.exe16/instr.c --- wine-development-5.5/dlls/krnl386.exe16/instr.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/instr.c 2020-04-10 18:54:32.000000000 +0000 @@ -20,9 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - #include #include "windef.h" @@ -53,14 +50,14 @@ static inline void *make_ptr( CONTEXT *context, DWORD seg, DWORD off, int long_addr ) { - if (wine_ldt_is_system(seg)) return (void *)off; + if (ldt_is_system(seg)) return (void *)off; if (!long_addr) off = LOWORD(off); return (char *) MapSL( MAKESEGPTR( seg, 0 ) ) + off; } static inline void *get_stack( CONTEXT *context ) { - return wine_ldt_get_ptr( context->SegSs, context->Esp ); + return ldt_get_ptr( context->SegSs, context->Esp ); } #include "pshpack1.h" @@ -174,7 +171,6 @@ int long_addr, int segprefix, int *len ) { int mod, rm, base = 0, index = 0, ss = 0, seg = 0, off; - LDT_ENTRY entry; #define GET_VAL(val,type) \ { *val = *(type *)instr; instr += sizeof(type); *len += sizeof(type); } @@ -315,12 +311,11 @@ if (segprefix != -1) seg = segprefix; /* Make sure the segment and offset are valid */ - if (wine_ldt_is_system(seg)) return (BYTE *)(base + (index << ss)); + if (ldt_is_system(seg)) return (BYTE *)(base + (index << ss)); if ((seg & 7) != 7) return NULL; - wine_ldt_get_entry( seg, &entry ); - if (wine_ldt_is_empty( &entry )) return NULL; - if (wine_ldt_get_limit(&entry) < (base + (index << ss))) return NULL; - return (BYTE *)wine_ldt_get_base(&entry) + base + (index << ss); + if (!ldt_is_valid( seg )) return NULL; + if (ldt_get_limit( seg ) < (base + (index << ss))) return NULL; + return (BYTE *)ldt_get_base( seg ) + base + (index << ss); #undef GET_VAL } @@ -790,7 +785,7 @@ break; /* Unable to emulate it */ case 0xcf: /* iret */ - if (wine_ldt_is_system(context->SegCs)) break; /* don't emulate it in 32-bit code */ + if (ldt_is_system(context->SegCs)) break; /* don't emulate it in 32-bit code */ if (long_op) { DWORD *stack = get_stack( context ); @@ -884,7 +879,7 @@ EXCEPTION_RECORD *record = ptrs->ExceptionRecord; CONTEXT *context = ptrs->ContextRecord; - if (wine_ldt_is_system(context->SegCs) && + if (ldt_is_system(context->SegCs) && (record->ExceptionCode == EXCEPTION_ACCESS_VIOLATION || record->ExceptionCode == EXCEPTION_PRIV_INSTRUCTION)) { diff -Nru wine-development-5.5/dlls/krnl386.exe16/int21.c wine-development-5.6/dlls/krnl386.exe16/int21.c --- wine-development-5.5/dlls/krnl386.exe16/int21.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/int21.c 2020-04-10 18:54:32.000000000 +0000 @@ -23,17 +23,9 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - #include #include -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif +#include #include "windef.h" #include "winbase.h" @@ -45,7 +37,6 @@ #include "dosexe.h" #include "winerror.h" #include "winuser.h" -#include "wine/unicode.h" #include "wine/server.h" #include "wine/debug.h" #include "wine/exception.h" @@ -264,6 +255,13 @@ static int brk_flag; +static BYTE drive_number( WCHAR letter ) +{ + if (letter >= 'A' && letter <= 'Z') return letter - 'A'; + if (letter >= 'a' && letter <= 'z') return letter - 'a'; + return MAX_DOS_DRIVES; +} + /* Many calls translate a drive argument like this: drive number (00h = default, 01h = A:, etc) @@ -300,8 +298,7 @@ TRACE( "Failed to get current drive.\n" ); return MAX_DOS_DRIVES; } - - return toupperW( current_directory[0] ) - 'A'; + return drive_number( current_directory[0] ); } @@ -636,7 +633,7 @@ if (!GetCurrentDirectoryW( MAX_PATH, pathW )) return FALSE; - if (toupperW(pathW[0]) - 'A' != drive || pathW[1] != ':') + if (drive_number( pathW[0] ) != drive || pathW[1] != ':') { /* cwd is not on the requested drive, get the environment string instead */ @@ -765,7 +762,7 @@ result = SetEnvironmentVariableW( env_var, dirW ); /* only set current directory if on the current drive */ - if (result && (toupperW(dirW[0]) - 'A' == drive)) result = SetCurrentDirectoryW( dirW ); + if (result && (drive_number( dirW[0] ) == drive)) result = SetCurrentDirectoryW( dirW ); return result; } @@ -3352,7 +3349,7 @@ for (;;) { - sprintf( p, "wine%04x.%03d", (int)getpid(), counter ); + sprintf( p, "wine%04x.%03d", GetCurrentThreadId(), counter ); counter = (counter + 1) % 1000; SET_AX( context, @@ -3417,9 +3414,8 @@ buffer[i] = '?'; break; default: - if (strchrW( invalid_chars, *p )) return FALSE; - buffer[i] = toupperW(*p); - p++; + if (wcschr( invalid_chars, *p )) return FALSE; + buffer[i] = *p++; break; } } @@ -3454,13 +3450,13 @@ buffer[i] = '?'; break; default: - if (strchrW( invalid_chars, *p )) return FALSE; - buffer[i] = toupperW(*p); - p++; + if (wcschr( invalid_chars, *p )) return FALSE; + buffer[i] = *p++; break; } } buffer[11] = '\0'; + wcsupr( buffer ); /* at most 3 character of the extension are processed * is something behind this ? @@ -3486,8 +3482,8 @@ path = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); MultiByteToWideChar(CP_OEMCP, 0, path, -1, pathW, MAX_PATH); - p = strrchrW( pathW, '\\'); - q = strrchrW( pathW, '/'); + p = wcsrchr( pathW, '\\'); + q = wcsrchr( pathW, '/'); if (q>p) p = q; if (!p) { @@ -3514,7 +3510,7 @@ /* we must have a fully qualified file name in dta->fullPath * (we could have a UNC path, but this would lead to some errors later on) */ - dta->drive = toupperW(dta->fullPath[0]) - 'A'; + dta->drive = drive_number( dta->fullPath[0] ); dta->count = 0; dta->search_attr = CL_reg(context); return TRUE; diff -Nru wine-development-5.5/dlls/krnl386.exe16/int25.c wine-development-5.6/dlls/krnl386.exe16/int25.c --- wine-development-5.5/dlls/krnl386.exe16/int25.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/int25.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,15 +18,11 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" - #include #include #include #include -#ifdef HAVE_UNISTD_H -# include -#endif + #include "dosexe.h" #include "wine/debug.h" diff -Nru wine-development-5.5/dlls/krnl386.exe16/int26.c wine-development-5.6/dlls/krnl386.exe16/int26.c --- wine-development-5.5/dlls/krnl386.exe16/int26.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/int26.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,14 +18,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" - #include #include #include -#ifdef HAVE_UNISTD_H -# include -#endif + #include "dosexe.h" #include "wine/debug.h" diff -Nru wine-development-5.5/dlls/krnl386.exe16/int2f.c wine-development-5.6/dlls/krnl386.exe16/int2f.c --- wine-development-5.5/dlls/krnl386.exe16/int2f.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/int2f.c 2020-04-10 18:54:32.000000000 +0000 @@ -21,8 +21,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" - #include #include "ntstatus.h" diff -Nru wine-development-5.5/dlls/krnl386.exe16/int31.c wine-development-5.6/dlls/krnl386.exe16/int31.c --- wine-development-5.5/dlls/krnl386.exe16/int31.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/int31.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - #include #include "windef.h" @@ -240,21 +237,16 @@ case 0x0006: /* Get selector base address */ TRACE( "get selector base address (0x%04x)\n", BX_reg(context) ); + if (!ldt_is_valid( BX_reg(context) )) { - LDT_ENTRY entry; - WORD sel = BX_reg(context); - wine_ldt_get_entry( sel, &entry ); - if (wine_ldt_is_empty(&entry)) - { - context->Eax = 0x8022; /* invalid selector */ - SET_CFLAG(context); - } - else - { - void *base = wine_ldt_get_base(&entry); - SET_CX( context, HIWORD(base) ); - SET_DX( context, LOWORD(base) ); - } + context->Eax = 0x8022; /* invalid selector */ + SET_CFLAG(context); + } + else + { + void *base = ldt_get_base( BX_reg(context) ); + SET_CX( context, HIWORD(base) ); + SET_DX( context, LOWORD(base) ); } break; @@ -301,7 +293,7 @@ { LDT_ENTRY *entry = CTX_SEG_OFF_TO_LIN( context, context->SegEs, context->Edi ); - wine_ldt_get_entry( BX_reg(context), entry ); + ldt_get_entry( BX_reg(context), entry ); } break; @@ -310,7 +302,7 @@ { LDT_ENTRY *entry = CTX_SEG_OFF_TO_LIN( context, context->SegEs, context->Edi ); - wine_ldt_set_entry( BX_reg(context), entry ); + if (!ldt_is_system( BX_reg(context) )) ldt_set_entry( BX_reg(context), *entry ); } break; diff -Nru wine-development-5.5/dlls/krnl386.exe16/interrupts.c wine-development-5.6/dlls/krnl386.exe16/interrupts.c --- wine-development-5.5/dlls/krnl386.exe16/interrupts.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/interrupts.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" - #include #include "wine/winbase16.h" @@ -280,7 +278,7 @@ DOSVM_IntProcRelay, DOSVM_GetBuiltinHandler(intnum) ); } - else if (wine_ldt_is_system(context->SegCs)) + else if (ldt_is_system(context->SegCs)) { INTPROC proc; if (intnum >= ARRAY_SIZE(DOSVM_VectorsBuiltin)) return FALSE; diff -Nru wine-development-5.5/dlls/krnl386.exe16/ioports.c wine-development-5.6/dlls/krnl386.exe16/ioports.c --- wine-development-5.5/dlls/krnl386.exe16/ioports.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/ioports.c 2020-04-10 18:54:32.000000000 +0000 @@ -26,14 +26,9 @@ fix that, I guess. */ -#include "config.h" - #include #include #include -#ifdef HAVE_SYS_STAT_H -# include -#endif #include "windef.h" #include "winbase.h" @@ -42,7 +37,6 @@ #include "winternl.h" #include "kernel16_private.h" #include "dosexe.h" -#include "wine/unicode.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(int); diff -Nru wine-development-5.5/dlls/krnl386.exe16/kernel16_private.h wine-development-5.6/dlls/krnl386.exe16/kernel16_private.h --- wine-development-5.5/dlls/krnl386.exe16/kernel16_private.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/kernel16_private.h 2020-04-10 18:54:32.000000000 +0000 @@ -25,7 +25,6 @@ #include "winreg.h" #include "winternl.h" #include "wine/asm.h" -#include "wine/library.h" #include "pshpack1.h" @@ -232,11 +231,39 @@ extern void NE_CallUserSignalProc( HMODULE16 hModule, UINT16 code ) DECLSPEC_HIDDEN; /* selector.c */ +#define LDT_SIZE 8192 +struct ldt_copy +{ + void *base[LDT_SIZE]; + unsigned int limit[LDT_SIZE]; + unsigned char flags[LDT_SIZE]; +}; +extern const struct ldt_copy *ldt_copy DECLSPEC_HIDDEN; + +#define LDT_FLAGS_DATA 0x13 /* Data segment */ +#define LDT_FLAGS_CODE 0x1b /* Code segment */ +#define LDT_FLAGS_32BIT 0x40 /* Segment is 32-bit (code or stack) */ + +static inline void *ldt_get_base( WORD sel ) { return ldt_copy->base[sel >> 3]; } +static inline unsigned int ldt_get_limit( WORD sel ) { return ldt_copy->limit[sel >> 3]; } +static inline unsigned char ldt_get_flags( WORD sel ) { return ldt_copy->flags[sel >> 3]; } + +extern void init_selectors(void) DECLSPEC_HIDDEN; +extern BOOL ldt_is_system( WORD sel ) DECLSPEC_HIDDEN; +extern BOOL ldt_is_valid( WORD sel ) DECLSPEC_HIDDEN; +extern void *ldt_get_ptr( WORD sel, DWORD offset ) DECLSPEC_HIDDEN; +extern BOOL ldt_get_entry( WORD sel, LDT_ENTRY *entry ) DECLSPEC_HIDDEN; +extern void ldt_set_entry( WORD sel, LDT_ENTRY entry ) DECLSPEC_HIDDEN; extern WORD SELECTOR_AllocBlock( const void *base, DWORD size, unsigned char flags ) DECLSPEC_HIDDEN; extern WORD SELECTOR_ReallocBlock( WORD sel, const void *base, DWORD size ) DECLSPEC_HIDDEN; extern void SELECTOR_FreeBlock( WORD sel ) DECLSPEC_HIDDEN; #define IS_SELECTOR_32BIT(sel) \ - (wine_ldt_is_system(sel) || (wine_ldt_copy.flags[LOWORD(sel) >> 3] & WINE_LDT_FLAGS_32BIT)) + (ldt_is_system(sel) || (ldt_copy->flags[LOWORD(sel) >> 3] & LDT_FLAGS_32BIT)) + +static inline WORD get_cs(void) { WORD res; __asm__( "movw %%cs,%0" : "=r" (res) ); return res; } +static inline WORD get_ds(void) { WORD res; __asm__( "movw %%ds,%0" : "=r" (res) ); return res; } +static inline WORD get_fs(void) { WORD res; __asm__( "movw %%fs,%0" : "=r" (res) ); return res; } +static inline WORD get_gs(void) { WORD res; __asm__( "movw %%gs,%0" : "=r" (res) ); return res; } /* relay16.c */ extern int relay_call_from_16( void *entry_point, unsigned char *args16, CONTEXT *context ) DECLSPEC_HIDDEN; diff -Nru wine-development-5.5/dlls/krnl386.exe16/kernel.c wine-development-5.6/dlls/krnl386.exe16/kernel.c --- wine-development-5.5/dlls/krnl386.exe16/kernel.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/kernel.c 2020-04-10 18:54:32.000000000 +0000 @@ -35,6 +35,8 @@ extern DWORD WINAPI GetProcessFlags( DWORD processid ); +void *dummy = RaiseException; /* force importing it from kernel32 */ + static DWORD process_dword; /*********************************************************************** @@ -71,6 +73,7 @@ switch(reason) { case DLL_PROCESS_ATTACH: + init_selectors(); if (LoadLibrary16( "krnl386.exe" ) < 32) return FALSE; /* fall through */ case DLL_THREAD_ATTACH: @@ -112,8 +115,8 @@ NE_SetEntryPoint( inst, 178, GetWinFlags16() ); - NE_SetEntryPoint( inst, 454, wine_get_cs() ); - NE_SetEntryPoint( inst, 455, wine_get_ds() ); + NE_SetEntryPoint( inst, 454, get_cs() ); + NE_SetEntryPoint( inst, 455, get_ds() ); NE_SetEntryPoint( inst, 183, DOSMEM_0000H ); /* KERNEL.183: __0000H */ NE_SetEntryPoint( inst, 173, DOSMEM_BiosSysSeg ); /* KERNEL.173: __ROMBIOS */ @@ -128,7 +131,7 @@ #define SET_ENTRY_POINT( num, addr ) \ NE_SetEntryPoint( inst, (num), GLOBAL_CreateBlock( GMEM_FIXED, \ DOSMEM_MapDosToLinear(addr), 0x10000, inst, \ - WINE_LDT_FLAGS_DATA )) + LDT_FLAGS_DATA )) SET_ENTRY_POINT( 174, 0xa0000 ); /* KERNEL.174: __A000H */ SET_ENTRY_POINT( 181, 0xb0000 ); /* KERNEL.181: __B000H */ diff -Nru wine-development-5.5/dlls/krnl386.exe16/local.c wine-development-5.6/dlls/krnl386.exe16/local.c --- wine-development-5.5/dlls/krnl386.exe16/local.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/local.c 2020-04-10 18:54:32.000000000 +0000 @@ -27,10 +27,7 @@ * parameter than usual. */ -#include "config.h" - #define NONAMELESSUNION - #include #include #include "wine/winbase16.h" @@ -1785,8 +1782,8 @@ nrBlocks = (totSize + 0x7fff) >> 15; selectorTable = HeapAlloc( header->heap, 0, nrBlocks * 2 ); - selectorEven = SELECTOR_AllocBlock( base, totSize, WINE_LDT_FLAGS_DATA ); - selectorOdd = SELECTOR_AllocBlock( base + 0x8000, totSize - 0x8000, WINE_LDT_FLAGS_DATA ); + selectorEven = SELECTOR_AllocBlock( base, totSize, LDT_FLAGS_DATA ); + selectorOdd = SELECTOR_AllocBlock( base + 0x8000, totSize - 0x8000, LDT_FLAGS_DATA ); if ( !selectorTable || !selectorEven || !selectorOdd ) { HeapFree( header->heap, 0, selectorTable ); diff -Nru wine-development-5.5/dlls/krnl386.exe16/Makefile.in wine-development-5.6/dlls/krnl386.exe16/Makefile.in --- wine-development-5.5/dlls/krnl386.exe16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ MODULE = krnl386.exe16 IMPORTLIB = kernel -IMPORTS = winecrt0 kernel32 ntdll +IMPORTS = kernel32 ntdll winecrt0 DELAYIMPORTS = user32 EXTRADLLFLAGS = -m16 -nodefaultlibs -Wb,--dll-name,kernel diff -Nru wine-development-5.5/dlls/krnl386.exe16/ne_module.c wine-development-5.6/dlls/krnl386.exe16/ne_module.c --- wine-development-5.5/dlls/krnl386.exe16/ne_module.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/ne_module.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,18 +18,12 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - #include #include #include #include #include #include -#ifdef HAVE_UNISTD_H -# include -#endif #include #include "windef.h" @@ -95,7 +89,7 @@ call[i].glue = __wine_call_from_16_regs; else call[i].glue = __wine_call_from_16; - call[i].flatcs = wine_get_cs(); + call[i].flatcs = get_cs(); } if (TRACE_ON(relay)) /* patch relay functions to all point to relay_call_from_16 */ @@ -398,7 +392,6 @@ ET_BUNDLE *bundle; if (!(pModule = NE_GetPtr( hModule ))) return 0; - assert( !(pModule->ne_flags & NE_FFLAGS_WIN32) ); bundle = (ET_BUNDLE *)((BYTE *)pModule + pModule->ne_enttab); while ((ordinal < bundle->first + 1) || (ordinal > bundle->last)) @@ -452,7 +445,6 @@ int i; if (!(pModule = NE_GetPtr( hModule ))) return FALSE; - assert( !(pModule->ne_flags & NE_FFLAGS_WIN32) ); bundle = (ET_BUNDLE *)((BYTE *)pModule + pModule->ne_enttab); while ((ordinal < bundle->first + 1) || (ordinal > bundle->last)) @@ -693,7 +685,6 @@ ofs->fFixedDisk = 1; strcpy( ofs->szPathName, path ); pData += ofs->cBytes + 1; - assert( (BYTE *)pModule + size <= pData ); /* Get the non-resident names table */ @@ -921,7 +912,7 @@ } patch_code_segment( pModule ); - *(void **)mz_header->e_res2 = &wine_ldt_copy; + *(const void **)mz_header->e_res2 = ldt_copy->base; return hInstance; } @@ -1471,7 +1462,7 @@ loadedfn--; } /* case insensitive compare ... */ - if (!_strnicmp(loadedfn, s, -1)) + if (!stricmp(loadedfn, s)) return hModule; } return 0; @@ -1791,7 +1782,7 @@ loadedfn--; } /* case insensitive compare ... */ - if (!_strnicmp(loadedfn, s, -1)) + if (!stricmp(loadedfn, s)) return hModule; } /* If basename (without ext) matches the module name of a module: @@ -1938,7 +1929,6 @@ /* Module name */ pStr = (char *)pSegment; pModule->ne_restab = pStr - (char *)pModule; - assert(len<256); *pStr = len; lstrcpynA( pStr+1, basename, len+1 ); pStr += len+2; diff -Nru wine-development-5.5/dlls/krnl386.exe16/ne_segment.c wine-development-5.6/dlls/krnl386.exe16/ne_segment.c --- wine-development-5.5/dlls/krnl386.exe16/ne_segment.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/ne_segment.c 2020-04-10 18:54:32.000000000 +0000 @@ -19,24 +19,16 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - -#include #include #include #include #include -#ifdef HAVE_UNISTD_H -# include -#endif #include #include #include "wine/winbase16.h" #include "wownt32.h" #include "winternl.h" -#include "wine/library.h" #include "kernel16_private.h" #include "wine/debug.h" @@ -625,13 +617,10 @@ { /* Not SINGLEDATA */ ERR_(dll)("Library is not marked SINGLEDATA\n"); - exit(1); - } - else /* DATA NONE DLL */ - { - *ds = 0; - *heap = 0; } + /* DATA NONE DLL */ + *ds = 0; + *heap = 0; } else /* DATA SINGLE DLL */ { @@ -715,7 +704,6 @@ HMODULE16 *pDLL; if (!(pModule = NE_GetPtr( hModule ))) return; - assert( !(pModule->ne_flags & NE_FFLAGS_WIN32) ); if (pModule->dlls_to_init) { @@ -879,7 +867,6 @@ int i; if (!(pModule = NE_GetPtr( hModule ))) return; - assert( !(pModule->ne_flags & NE_FFLAGS_WIN32) ); /* Never add a module twice */ for ( i = 0; i < list->count; i++ ) @@ -1003,8 +990,6 @@ int minsize; unsigned char selflags; - assert( !(pModule->ne_flags & NE_FFLAGS_WIN32) ); - if ( segnum < 1 || segnum > pModule->ne_cseg ) return FALSE; @@ -1018,8 +1003,8 @@ if ( segnum == SELECTOROF(pModule->ne_sssp) ) minsize += pModule->ne_stack; if ( segnum == pModule->ne_autodata ) minsize += pModule->ne_heap; - selflags = (pSeg->flags & NE_SEGFLAGS_DATA) ? WINE_LDT_FLAGS_DATA : WINE_LDT_FLAGS_CODE; - if (pSeg->flags & NE_SEGFLAGS_32BIT) selflags |= WINE_LDT_FLAGS_32BIT; + selflags = (pSeg->flags & NE_SEGFLAGS_DATA) ? LDT_FLAGS_DATA : LDT_FLAGS_CODE; + if (pSeg->flags & NE_SEGFLAGS_32BIT) selflags |= LDT_FLAGS_32BIT; pSeg->hSeg = GLOBAL_Alloc( NE_Ne2MemFlags(pSeg->flags), minsize, pModule->self, selflags ); if (!pSeg->hSeg) return FALSE; diff -Nru wine-development-5.5/dlls/krnl386.exe16/relay.c wine-development-5.6/dlls/krnl386.exe16/relay.c --- wine-development-5.5/dlls/krnl386.exe16/relay.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/relay.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - #include #include #include @@ -33,8 +30,6 @@ #include "winternl.h" #include "kernel16_private.h" #include "dosexe.h" -#include "wine/unicode.h" -#include "wine/library.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(relay); @@ -59,56 +54,41 @@ } RELAY_Stack16; -static const WCHAR **debug_relay_excludelist; -static const WCHAR **debug_relay_includelist; -static const WCHAR **debug_snoop_excludelist; -static const WCHAR **debug_snoop_includelist; - -/* compare an ASCII and a Unicode string without depending on the current codepage */ -static inline int strcmpiAW( const char *strA, const WCHAR *strW ) -{ - while (*strA && (toupperW((unsigned char)*strA) == toupperW(*strW))) { strA++; strW++; } - return toupperW((unsigned char)*strA) - toupperW(*strW); -} +static const char **debug_relay_excludelist; +static const char **debug_relay_includelist; +static const char **debug_snoop_excludelist; +static const char **debug_snoop_includelist; -/* compare an ASCII and a Unicode string without depending on the current codepage */ -static inline int strncmpiAW( const char *strA, const WCHAR *strW, int n ) -{ - int ret = 0; - for ( ; n > 0; n--, strA++, strW++) - if ((ret = toupperW((unsigned char)*strA) - toupperW(*strW)) || !*strA) break; - return ret; -} /*********************************************************************** * build_list * * Build a function list from a ';'-separated string. */ -static const WCHAR **build_list( const WCHAR *buffer ) +static const char **build_list( const WCHAR *buffer ) { int count = 1; const WCHAR *p = buffer; - const WCHAR **ret; + const char **ret; - while ((p = strchrW( p, ';' ))) + while ((p = wcschr( p, ';' ))) { count++; p++; } /* allocate count+1 pointers, plus the space for a copy of the string */ if ((ret = RtlAllocateHeap( GetProcessHeap(), 0, - (count+1) * sizeof(WCHAR*) + (strlenW(buffer)+1) * sizeof(WCHAR) ))) + (count + 1) * sizeof(char *) + (lstrlenW(buffer) + 1) ))) { - WCHAR *str = (WCHAR *)(ret + count + 1); - WCHAR *p = str; + char *str = (char *)(ret + count + 1); + char *p = str; - strcpyW( str, buffer ); + while ((*str++ = *buffer++)); count = 0; for (;;) { ret[count++] = p; - if (!(p = strchrW( p, ';' ))) break; + if (!(p = strchr( p, ';' ))) break; *p++ = 0; } ret[count++] = NULL; @@ -185,25 +165,25 @@ * * Check if a given module and function is in the list. */ -static BOOL check_list( const char *module, int ordinal, const char *func, const WCHAR **list ) +static BOOL check_list( const char *module, int ordinal, const char *func, const char **list ) { char ord_str[10]; sprintf( ord_str, "%d", ordinal ); for(; *list; list++) { - const WCHAR *p = strrchrW( *list, '.' ); + const char *p = strrchr( *list, '.' ); if (p && p > *list) /* check module and function */ { int len = p - *list; - if (strncmpiAW( module, *list, len-1 ) || module[len]) continue; + if (_strnicmp( module, *list, len-1 ) || module[len]) continue; if (p[1] == '*' && !p[2]) return TRUE; - if (!strcmpiAW( ord_str, p + 1 )) return TRUE; - if (func && !strcmpiAW( func, p + 1 )) return TRUE; + if (!strcmp( ord_str, p + 1 )) return TRUE; + if (func && !stricmp( func, p + 1 )) return TRUE; } else /* function only */ { - if (func && !strcmpiAW( func, *list )) return TRUE; + if (func && !stricmp( func, *list )) return TRUE; } } return FALSE; @@ -740,6 +720,6 @@ /* * Adjust code pointer. */ - context->SegCs = wine_get_cs(); + context->SegCs = get_cs(); context->Eip = (DWORD)__wine_call_from_16_regs; } diff -Nru wine-development-5.5/dlls/krnl386.exe16/resource.c wine-development-5.6/dlls/krnl386.exe16/resource.c --- wine-development-5.5/dlls/krnl386.exe16/resource.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/resource.c 2020-04-10 18:54:32.000000000 +0000 @@ -21,9 +21,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - #include #include #include @@ -35,7 +32,6 @@ #include "wownt32.h" #include "wine/winbase16.h" #include "wine/winuser16.h" -#include "wine/unicode.h" #include "kernel16_private.h" #include "wine/debug.h" @@ -213,7 +209,7 @@ if (p[1] & 0x8000) { if (!HIWORD(typeId)) continue; - if (_strnicmp( typeId, (char *)(p + 3), -1 )) continue; + if (stricmp( typeId, (char *)(p + 3) )) continue; } else if (HIWORD(typeId) || (((DWORD)typeId & ~0x8000)!= p[1])) continue; @@ -223,7 +219,7 @@ if (p[2] & 0x8000) { if (!HIWORD(resId)) continue; - if (_strnicmp( resId, (char*)(p+3)+strlen((char*)(p+3))+1, -1 )) continue; + if (stricmp( resId, (char*)(p+3)+strlen((char*)(p+3))+1 )) continue; } else if (HIWORD(resId) || ((LOWORD(resId) & ~0x8000) != p[2])) @@ -445,7 +441,7 @@ default: len = WideCharToMultiByte( CP_ACP, 0, *src, -1, *dst, 0x7fffffff, NULL,NULL ); *dst = (char *)*dst + len; - *src = (LPCWSTR)*src + strlenW( *src ) + 1; + *src = (LPCWSTR)*src + lstrlenW( *src ) + 1; break; } } @@ -487,7 +483,7 @@ /* Transfer window caption */ WideCharToMultiByte( CP_ACP, 0, dialog32, -1, dialog16, 0x7fffffff, NULL, NULL ); dialog16 = (LPSTR)dialog16 + strlen( dialog16 ) + 1; - dialog32 = (LPCWSTR)dialog32 + strlenW( dialog32 ) + 1; + dialog32 = (LPCWSTR)dialog32 + lstrlenW( dialog32 ) + 1; /* Transfer font info */ if (style & DS_SETFONT) @@ -500,7 +496,7 @@ } WideCharToMultiByte( CP_ACP, 0, dialog32, -1, dialog16, 0x7fffffff, NULL, NULL ); /* faceName */ dialog16 = (LPSTR)dialog16 + strlen( dialog16 ) + 1; - dialog32 = (LPCWSTR)dialog32 + strlenW( dialog32 ) + 1; + dialog32 = (LPCWSTR)dialog32 + lstrlenW( dialog32 ) + 1; } /* Transfer dialog items */ @@ -548,7 +544,7 @@ default: WideCharToMultiByte( CP_ACP, 0, dialog32, -1, dialog16, 0x7fffffff, NULL, NULL ); dialog16 = (LPSTR)dialog16 + strlen( dialog16 ) + 1; - dialog32 = (LPCWSTR)dialog32 + strlenW( dialog32 ) + 1; + dialog32 = (LPCWSTR)dialog32 + lstrlenW( dialog32 ) + 1; break; } @@ -606,7 +602,7 @@ { case 0x0000: p = (const WORD *)p + 1; break; case 0xffff: p = (const WORD *)p + 2; break; - default: p = (LPCWSTR)p + strlenW( p ) + 1; break; + default: p = (LPCWSTR)p + lstrlenW( p ) + 1; break; } /* Skip class name */ @@ -614,11 +610,11 @@ { case 0x0000: p = (const WORD *)p + 1; break; case 0xffff: p = (const WORD *)p + 2; break; - default: p = (LPCWSTR)p + strlenW( p ) + 1; break; + default: p = (LPCWSTR)p + lstrlenW( p ) + 1; break; } /* Skip window caption */ - p = (LPCWSTR)p + strlenW( p ) + 1; + p = (LPCWSTR)p + lstrlenW( p ) + 1; /* Skip font info */ if (style & DS_SETFONT) @@ -629,7 +625,7 @@ p = (const WORD *)p + 1; /* weight */ p = (const WORD *)p + 1; /* italic */ } - p = (LPCWSTR)p + strlenW( p ) + 1; /* faceName */ + p = (LPCWSTR)p + lstrlenW( p ) + 1; /* faceName */ } /* Skip dialog items */ @@ -665,7 +661,7 @@ { case 0x0000: p = (const WORD *)p + 1; break; case 0xffff: p = (const WORD *)p + 2; break; - default: p = (LPCWSTR)p + strlenW( p ) + 1; break; + default: p = (LPCWSTR)p + lstrlenW( p ) + 1; break; } /* Skip window name */ @@ -673,7 +669,7 @@ { case 0x0000: p = (const WORD *)p + 1; break; case 0xffff: p = (const WORD *)p + 2; break; - default: p = (LPCWSTR)p + strlenW( p ) + 1; break; + default: p = (LPCWSTR)p + lstrlenW( p ) + 1; break; } /* Skip data */ @@ -718,7 +714,7 @@ WideCharToMultiByte( CP_ACP, 0, menu32, -1, menu16, 0x7fffffff, NULL, NULL ); menu16 = (LPSTR)menu16 + strlen( menu16 ) + 1; - menu32 = (LPCWSTR)menu32 + strlenW( menu32 ) + 1; + menu32 = (LPCWSTR)menu32 + lstrlenW( menu32 ) + 1; if ( flags & MF_END ) level--; @@ -733,7 +729,7 @@ WideCharToMultiByte( CP_ACP, 0, menu32, -1, menu16, 0x7fffffff, NULL, NULL ); menu16 = (LPSTR)menu16 + strlen( menu16 ) + 1; - menu32 = (LPCWSTR)menu32 + strlenW( menu32 ) + 1; + menu32 = (LPCWSTR)menu32 + lstrlenW( menu32 ) + 1; /* align on DWORD boundary (32-bit only) */ menu32 = (LPCVOID)(((UINT_PTR)menu32 + 3) & ~3); @@ -772,7 +768,7 @@ else level++; - p = (LPCWSTR)p + strlenW( p ) + 1; + p = (LPCWSTR)p + lstrlenW( p ) + 1; if ( flags & MF_END ) level--; @@ -784,7 +780,7 @@ p = (const DWORD *)p + 1; /* ID */ flags = get_word(&p); - p = (LPCWSTR)p + strlenW( p ) + 1; + p = (LPCWSTR)p + lstrlenW( p ) + 1; /* align on DWORD boundary (32-bit only) */ p = (LPCVOID)(((UINT_PTR)p + 3) & ~3); diff -Nru wine-development-5.5/dlls/krnl386.exe16/selector.c wine-development-5.6/dlls/krnl386.exe16/selector.c --- wine-development-5.5/dlls/krnl386.exe16/selector.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/selector.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - #include #include "wine/winbase16.h" @@ -30,12 +27,119 @@ WINE_DEFAULT_DEBUG_CHANNEL(selector); -#define LDT_SIZE 8192 +const struct ldt_copy *ldt_copy = NULL; + +static ULONG bitmap_data[LDT_SIZE / 32]; +static RTL_BITMAP ldt_bitmap = { LDT_SIZE, bitmap_data }; +static const LDT_ENTRY null_entry; +static WORD first_ldt_entry = 32; /* get the number of selectors needed to cover up to the selector limit */ static inline WORD get_sel_count( WORD sel ) { - return (wine_ldt_copy.limit[sel >> __AHSHIFT] >> 16) + 1; + return (ldt_get_limit( sel ) >> 16) + 1; +} + +static inline int is_gdt_sel( WORD sel ) +{ + return !(sel & 4); +} + +static LDT_ENTRY ldt_make_entry( const void *base, unsigned int limit, unsigned char flags ) +{ + LDT_ENTRY entry; + + entry.BaseLow = (WORD)(ULONG_PTR)base; + entry.HighWord.Bits.BaseMid = (BYTE)((ULONG_PTR)base >> 16); + entry.HighWord.Bits.BaseHi = (BYTE)((ULONG_PTR)base >> 24); + if ((entry.HighWord.Bits.Granularity = (limit >= 0x100000))) limit >>= 12; + entry.LimitLow = (WORD)limit; + entry.HighWord.Bits.LimitHi = limit >> 16; + entry.HighWord.Bits.Dpl = 3; + entry.HighWord.Bits.Pres = 1; + entry.HighWord.Bits.Type = flags; + entry.HighWord.Bits.Sys = 0; + entry.HighWord.Bits.Reserved_0 = 0; + entry.HighWord.Bits.Default_Big = (flags & LDT_FLAGS_32BIT) != 0; + return entry; +} + +/*********************************************************************** + * init_selectors + */ +void init_selectors(void) +{ + if (!is_gdt_sel( get_gs() )) first_ldt_entry += 512; + if (!is_gdt_sel( get_fs() )) first_ldt_entry += 512; + RtlSetBits( &ldt_bitmap, 0, first_ldt_entry ); + ldt_copy = (void *)GetProcAddress( GetModuleHandleA("ntdll.dll"), "__wine_ldt_copy" ); +} + +/*********************************************************************** + * ldt_is_system + */ +BOOL ldt_is_system( WORD sel ) +{ + return is_gdt_sel( sel ) || ((sel >> 3) < first_ldt_entry); +} + +/*********************************************************************** + * ldt_is_valid + */ +BOOL ldt_is_valid( WORD sel ) +{ + return !ldt_is_system( sel ) && RtlAreBitsSet( &ldt_bitmap, sel >> 3, 1 ); +} + +/*********************************************************************** + * ldt_get_ptr + */ +void *ldt_get_ptr( WORD sel, DWORD offset ) +{ + if (ldt_is_system( sel )) return (void *)offset; + if (!(ldt_get_flags( sel ) & LDT_FLAGS_32BIT)) offset &= 0xffff; + return (char *)ldt_get_base( sel ) + offset; +} + +/*********************************************************************** + * ldt_get_entry + */ +BOOL ldt_get_entry( WORD sel, LDT_ENTRY *entry ) +{ + if (!ldt_is_valid( sel )) + { + *entry = null_entry; + return FALSE; + } + *entry = ldt_make_entry( ldt_get_base( sel ), ldt_get_limit( sel ), ldt_get_flags( sel )); + return TRUE; +} + +/*********************************************************************** + * ldt_set_entry + */ +void ldt_set_entry( WORD sel, LDT_ENTRY entry ) +{ + NtSetLdtEntries( sel, entry, 0, null_entry ); +} + + +static ULONG alloc_entries( ULONG count ) +{ + ULONG idx = RtlFindClearBitsAndSet( &ldt_bitmap, count, first_ldt_entry ); + + if (idx == ~0u) return 0; + return (idx << 3) | 7; +} + +static void free_entries( ULONG sel, ULONG count ) +{ + RtlClearBits( &ldt_bitmap, sel >> 3, count ); + while (count--) + { + ldt_set_entry( sel, null_entry ); + sel += 8; + } } @@ -44,22 +148,12 @@ */ WORD WINAPI AllocSelectorArray16( WORD count ) { - WORD i, sel = wine_ldt_alloc_entries( count ); + WORD i, sel = alloc_entries( count ); if (sel) { - LDT_ENTRY entry; - wine_ldt_set_base( &entry, 0 ); - wine_ldt_set_limit( &entry, 1 ); /* avoid 0 base and limit */ - wine_ldt_set_flags( &entry, WINE_LDT_FLAGS_DATA ); - for (i = 0; i < count; i++) - { - if (wine_ldt_set_entry( sel + (i << __AHSHIFT), &entry ) < 0) - { - wine_ldt_free_entries( sel, count ); - return 0; - } - } + LDT_ENTRY entry = ldt_make_entry( 0, 1, LDT_FLAGS_DATA ); /* avoid 0 base and limit */ + for (i = 0; i < count; i++) ldt_set_entry( sel + (i << 3), entry ); } return sel; } @@ -73,15 +167,15 @@ WORD newsel, count, i; count = sel ? get_sel_count(sel) : 1; - newsel = wine_ldt_alloc_entries( count ); + newsel = alloc_entries( count ); TRACE("(%04x): returning %04x\n", sel, newsel ); if (!newsel) return 0; if (!sel) return newsel; /* nothing to copy */ for (i = 0; i < count; i++) { LDT_ENTRY entry; - wine_ldt_get_entry( sel + (i << __AHSHIFT), &entry ); - wine_ldt_set_entry( newsel + (i << __AHSHIFT), &entry ); + if (!ldt_get_entry( sel + (i << 3), &entry )) break; + ldt_set_entry( newsel + (i << 3), entry ); } return newsel; } @@ -92,14 +186,11 @@ */ WORD WINAPI FreeSelector16( WORD sel ) { - LDT_ENTRY entry; + WORD idx = sel >> 3; - wine_ldt_get_entry( sel, &entry ); - if (wine_ldt_is_empty( &entry )) return sel; /* error */ - /* Check if we are freeing current %fs selector */ - if (!((wine_get_fs() ^ sel) & ~3)) - WARN("Freeing %%fs selector (%04x), not good.\n", wine_get_fs() ); - wine_ldt_free_entries( sel, 1 ); + if (idx < first_ldt_entry) return sel; /* error */ + if (!RtlAreBitsSet( &ldt_bitmap, idx, 1 )) return sel; /* error */ + free_entries( sel, 1 ); return 0; } @@ -109,23 +200,16 @@ * * Set the LDT entries for an array of selectors. */ -static BOOL SELECTOR_SetEntries( WORD sel, const void *base, DWORD size, unsigned char flags ) +static void SELECTOR_SetEntries( WORD sel, const void *base, DWORD size, unsigned char flags ) { - LDT_ENTRY entry; - WORD i, count; + WORD i, count = (size + 0xffff) / 0x10000; - wine_ldt_set_base( &entry, base ); - wine_ldt_set_limit( &entry, size - 1 ); - wine_ldt_set_flags( &entry, flags ); - count = (size + 0xffff) / 0x10000; for (i = 0; i < count; i++) { - if (wine_ldt_set_entry( sel + (i << __AHSHIFT), &entry ) < 0) return FALSE; - wine_ldt_set_base( &entry, (char*)wine_ldt_get_base(&entry) + 0x10000); - /* yep, Windows sets limit like that, not 64K sel units */ - wine_ldt_set_limit( &entry, wine_ldt_get_limit(&entry) - 0x10000 ); + ldt_set_entry( sel + (i << 3), ldt_make_entry( base, size - 1, flags )); + base = (const char *)base + 0x10000; + size -= 0x10000; /* yep, Windows sets limit like that, not 64K sel units */ } - return TRUE; } @@ -140,12 +224,7 @@ if (!size) return 0; count = (size + 0xffff) / 0x10000; - if ((sel = wine_ldt_alloc_entries( count ))) - { - if (SELECTOR_SetEntries( sel, base, size, flags )) return sel; - wine_ldt_free_entries( sel, count ); - sel = 0; - } + if ((sel = alloc_entries( count ))) SELECTOR_SetEntries( sel, base, size, flags ); return sel; } @@ -157,10 +236,13 @@ */ void SELECTOR_FreeBlock( WORD sel ) { - WORD i, count = get_sel_count( sel ); + WORD idx = sel >> 3, count = get_sel_count( sel ); TRACE("(%04x,%d)\n", sel, count ); - for (i = 0; i < count; i++) FreeSelector16( sel + (i << __AHSHIFT) ); + + if (idx < first_ldt_entry) return; /* error */ + if (!RtlAreBitsSet( &ldt_bitmap, idx, count )) return; /* error */ + free_entries( sel, count ); } @@ -171,16 +253,34 @@ */ WORD SELECTOR_ReallocBlock( WORD sel, const void *base, DWORD size ) { - LDT_ENTRY entry; int oldcount, newcount; + BYTE flags; if (!size) size = 1; - wine_ldt_get_entry( sel, &entry ); - oldcount = (wine_ldt_get_limit(&entry) >> 16) + 1; + if (!ldt_is_valid( sel )) return sel; + flags = ldt_get_flags( sel ); + oldcount = (ldt_get_limit( sel ) >> 16) + 1; newcount = (size + 0xffff) >> 16; - sel = wine_ldt_realloc_entries( sel, oldcount, newcount ); - if (sel) SELECTOR_SetEntries( sel, base, size, wine_ldt_get_flags(&entry) ); + if (oldcount < newcount) /* we need to add selectors */ + { + ULONG idx = sel >> 3; + + if (RtlAreBitsClear( &ldt_bitmap, idx + oldcount, newcount - oldcount )) + { + RtlSetBits( &ldt_bitmap, idx + oldcount, newcount - oldcount ); + } + else + { + free_entries( sel, oldcount ); + sel = alloc_entries( newcount ); + } + } + else if (oldcount > newcount) + { + free_entries( sel + (newcount << 3), oldcount - newcount ); + } + if (sel) SELECTOR_SetEntries( sel, base, size, flags ); return sel; } @@ -190,11 +290,10 @@ */ WORD WINAPI PrestoChangoSelector16( WORD selSrc, WORD selDst ) { - LDT_ENTRY entry; - wine_ldt_get_entry( selSrc, &entry ); + if (!ldt_is_valid( selSrc )) return selDst; /* toggle the executable bit */ - entry.HighWord.Bits.Type ^= (WINE_LDT_FLAGS_CODE ^ WINE_LDT_FLAGS_DATA); - wine_ldt_set_entry( selDst, &entry ); + ldt_set_entry( selDst, ldt_make_entry( ldt_get_base( selSrc ), ldt_get_limit( selSrc ), + ldt_get_flags( selSrc ) ^ (LDT_FLAGS_CODE ^ LDT_FLAGS_DATA) )); return selDst; } @@ -206,17 +305,13 @@ WORD WINAPI AllocCStoDSAlias16( WORD sel ) { WORD newsel; - LDT_ENTRY entry; - newsel = wine_ldt_alloc_entries( 1 ); - TRACE("(%04x): returning %04x\n", - sel, newsel ); + if (!ldt_is_valid( sel )) return 0; + newsel = AllocSelector16( 0 ); + TRACE("(%04x): returning %04x\n", sel, newsel ); if (!newsel) return 0; - wine_ldt_get_entry( sel, &entry ); - entry.HighWord.Bits.Type = WINE_LDT_FLAGS_DATA; - if (wine_ldt_set_entry( newsel, &entry ) >= 0) return newsel; - wine_ldt_free_entries( newsel, 1 ); - return 0; + ldt_set_entry( newsel, ldt_make_entry( ldt_get_base(sel), ldt_get_limit(sel), LDT_FLAGS_DATA )); + return newsel; } @@ -226,29 +321,26 @@ WORD WINAPI AllocDStoCSAlias16( WORD sel ) { WORD newsel; - LDT_ENTRY entry; - newsel = wine_ldt_alloc_entries( 1 ); - TRACE("(%04x): returning %04x\n", - sel, newsel ); + if (!ldt_is_valid( sel )) return 0; + newsel = AllocSelector16( 0 ); + TRACE("(%04x): returning %04x\n", sel, newsel ); if (!newsel) return 0; - wine_ldt_get_entry( sel, &entry ); - entry.HighWord.Bits.Type = WINE_LDT_FLAGS_CODE; - if (wine_ldt_set_entry( newsel, &entry ) >= 0) return newsel; - wine_ldt_free_entries( newsel, 1 ); - return 0; + ldt_set_entry( newsel, ldt_make_entry( ldt_get_base(sel), ldt_get_limit(sel), LDT_FLAGS_CODE )); + return newsel; } /*********************************************************************** * LongPtrAdd (KERNEL.180) */ -void WINAPI LongPtrAdd16( DWORD ptr, DWORD add ) +void WINAPI LongPtrAdd16( SEGPTR ptr, DWORD add ) { - LDT_ENTRY entry; - wine_ldt_get_entry( SELECTOROF(ptr), &entry ); - wine_ldt_set_base( &entry, (char *)wine_ldt_get_base(&entry) + add ); - wine_ldt_set_entry( SELECTOROF(ptr), &entry ); + WORD sel = SELECTOROF( ptr ); + + if (!ldt_is_valid( sel )) return; + ldt_set_entry( sel, ldt_make_entry( (char *)ldt_get_base( sel ) + add, + ldt_get_limit( sel ), ldt_get_flags( sel ))); } @@ -257,12 +349,9 @@ */ DWORD WINAPI GetSelectorBase( WORD sel ) { - void *base = wine_ldt_copy.base[sel >> __AHSHIFT]; - /* if base points into DOSMEM, assume we have to * return pointer into physical lower 1MB */ - - return DOSMEM_MapLinearToDos( base ); + return DOSMEM_MapLinearToDos( ldt_get_base( sel )); } @@ -271,10 +360,9 @@ */ WORD WINAPI SetSelectorBase( WORD sel, DWORD base ) { - LDT_ENTRY entry; - wine_ldt_get_entry( sel, &entry ); - wine_ldt_set_base( &entry, DOSMEM_MapDosToLinear(base) ); - if (wine_ldt_set_entry( sel, &entry ) < 0) sel = 0; + if (!ldt_is_valid( sel )) return 0; + ldt_set_entry( sel, ldt_make_entry( DOSMEM_MapDosToLinear(base), + ldt_get_limit( sel ), ldt_get_flags( sel ))); return sel; } @@ -284,7 +372,7 @@ */ DWORD WINAPI GetSelectorLimit16( WORD sel ) { - return wine_ldt_copy.limit[sel >> __AHSHIFT]; + return ldt_get_limit( sel ); } @@ -293,10 +381,8 @@ */ WORD WINAPI SetSelectorLimit16( WORD sel, DWORD limit ) { - LDT_ENTRY entry; - wine_ldt_get_entry( sel, &entry ); - wine_ldt_set_limit( &entry, limit ); - if (wine_ldt_set_entry( sel, &entry ) < 0) sel = 0; + if (!ldt_is_valid( sel )) return 0; + ldt_set_entry( sel, ldt_make_entry( ldt_get_base( sel ), limit, ldt_get_flags( sel ))); return sel; } @@ -307,8 +393,8 @@ WORD WINAPI SelectorAccessRights16( WORD sel, WORD op, WORD val ) { LDT_ENTRY entry; - wine_ldt_get_entry( sel, &entry ); + if (!ldt_get_entry( sel, &entry )) return 0; if (op == 0) /* get */ { return entry.HighWord.Bytes.Flags1 | ((entry.HighWord.Bytes.Flags2 & 0xf0) << 8); @@ -317,7 +403,7 @@ { entry.HighWord.Bytes.Flags1 = LOBYTE(val) | 0xf0; entry.HighWord.Bytes.Flags2 = (entry.HighWord.Bytes.Flags2 & 0x0f) | (HIBYTE(val) & 0xf0); - wine_ldt_set_entry( sel, &entry ); + ldt_set_entry( sel, entry ); return 0; } } @@ -326,18 +412,13 @@ /*********************************************************************** * IsBadCodePtr (KERNEL.336) */ -BOOL16 WINAPI IsBadCodePtr16( SEGPTR lpfn ) +BOOL16 WINAPI IsBadCodePtr16( SEGPTR ptr ) { - WORD sel; - LDT_ENTRY entry; + WORD sel = SELECTOROF( ptr ); - sel = SELECTOROF(lpfn); - if (!sel) return TRUE; - wine_ldt_get_entry( sel, &entry ); - if (wine_ldt_is_empty( &entry )) return TRUE; /* check for code segment, ignoring conforming, read-only and accessed bits */ - if ((entry.HighWord.Bits.Type ^ WINE_LDT_FLAGS_CODE) & 0x18) return TRUE; - if (OFFSETOF(lpfn) > wine_ldt_get_limit(&entry)) return TRUE; + if ((ldt_get_flags( sel ) ^ LDT_FLAGS_CODE) & 0x18) return TRUE; + if (OFFSETOF(ptr) > ldt_get_limit( sel )) return TRUE; return FALSE; } @@ -347,18 +428,13 @@ */ BOOL16 WINAPI IsBadStringPtr16( SEGPTR ptr, UINT16 size ) { - WORD sel; - LDT_ENTRY entry; + WORD sel = SELECTOROF( ptr ); - sel = SELECTOROF(ptr); - if (!sel) return TRUE; - wine_ldt_get_entry( sel, &entry ); - if (wine_ldt_is_empty( &entry )) return TRUE; /* check for data or readable code segment */ - if (!(entry.HighWord.Bits.Type & 0x10)) return TRUE; /* system descriptor */ - if ((entry.HighWord.Bits.Type & 0x0a) == 0x08) return TRUE; /* non-readable code segment */ + if (!(ldt_get_flags( sel ) & 0x10)) return TRUE; /* system descriptor */ + if ((ldt_get_flags( sel ) & 0x0a) == 0x08) return TRUE; /* non-readable code segment */ if (strlen(MapSL(ptr)) < size) size = strlen(MapSL(ptr)) + 1; - if (size && (OFFSETOF(ptr) + size - 1 > wine_ldt_get_limit(&entry))) return TRUE; + if (size && (OFFSETOF(ptr) + size - 1 > ldt_get_limit( sel ))) return TRUE; return FALSE; } @@ -368,17 +444,12 @@ */ BOOL16 WINAPI IsBadHugeReadPtr16( SEGPTR ptr, DWORD size ) { - WORD sel; - LDT_ENTRY entry; + WORD sel = SELECTOROF( ptr ); - sel = SELECTOROF(ptr); - if (!sel) return TRUE; - wine_ldt_get_entry( sel, &entry ); - if (wine_ldt_is_empty( &entry )) return TRUE; /* check for data or readable code segment */ - if (!(entry.HighWord.Bits.Type & 0x10)) return TRUE; /* system descriptor */ - if ((entry.HighWord.Bits.Type & 0x0a) == 0x08) return TRUE; /* non-readable code segment */ - if (size && (OFFSETOF(ptr) + size - 1 > wine_ldt_get_limit( &entry ))) return TRUE; + if (!(ldt_get_flags( sel ) & 0x10)) return TRUE; /* system descriptor */ + if ((ldt_get_flags( sel ) & 0x0a) == 0x08) return TRUE; /* non-readable code segment */ + if (size && (OFFSETOF(ptr) + size - 1 > ldt_get_limit( sel ))) return TRUE; return FALSE; } @@ -388,16 +459,11 @@ */ BOOL16 WINAPI IsBadHugeWritePtr16( SEGPTR ptr, DWORD size ) { - WORD sel; - LDT_ENTRY entry; + WORD sel = SELECTOROF( ptr ); - sel = SELECTOROF(ptr); - if (!sel) return TRUE; - wine_ldt_get_entry( sel, &entry ); - if (wine_ldt_is_empty( &entry )) return TRUE; /* check for writable data segment, ignoring expand-down and accessed flags */ - if ((entry.HighWord.Bits.Type ^ WINE_LDT_FLAGS_DATA) & ~5) return TRUE; - if (size && (OFFSETOF(ptr) + size - 1 > wine_ldt_get_limit( &entry ))) return TRUE; + if ((ldt_get_flags( sel ) ^ LDT_FLAGS_DATA) & 0x1a) return TRUE; + if (size && (OFFSETOF(ptr) + size - 1 > ldt_get_limit( sel ))) return TRUE; return FALSE; } @@ -471,7 +537,7 @@ if (!free) /* no free entry found, create a new one */ { if (!(free = HeapAlloc( GetProcessHeap(), 0, sizeof(*free) ))) goto done; - if (!(free->sel = SELECTOR_AllocBlock( base, 0x10000, WINE_LDT_FLAGS_DATA ))) + if (!(free->sel = SELECTOR_AllocBlock( base, 0x10000, LDT_FLAGS_DATA ))) { HeapFree( GetProcessHeap(), 0, free ); goto done; @@ -519,7 +585,7 @@ */ LPVOID WINAPI MapSL( SEGPTR sptr ) { - return (char *)wine_ldt_copy.base[SELECTOROF(sptr) >> __AHSHIFT] + OFFSETOF(sptr); + return (char *)ldt_get_base( SELECTOROF(sptr) ) + OFFSETOF(sptr); } /*********************************************************************** diff -Nru wine-development-5.5/dlls/krnl386.exe16/snoop.c wine-development-5.6/dlls/krnl386.exe16/snoop.c --- wine-development-5.5/dlls/krnl386.exe16/snoop.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/snoop.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - #include #include #include @@ -30,7 +27,6 @@ #include "winnt.h" #include "wine/winbase16.h" #include "winternl.h" -#include "wine/library.h" #include "kernel16_private.h" #include "wine/debug.h" @@ -107,7 +103,7 @@ TRACE("hmod=%x, name=%s\n", hModule, name); if (!snr) { - xsnr=GLOBAL_Alloc(GMEM_ZEROINIT,2*sizeof(*snr),0,WINE_LDT_FLAGS_CODE|WINE_LDT_FLAGS_32BIT); + xsnr=GLOBAL_Alloc(GMEM_ZEROINIT,2*sizeof(*snr),0,LDT_FLAGS_CODE | LDT_FLAGS_32BIT); snr = GlobalLock16(xsnr); snr[0].pushbp = 0x5566; snr[0].pusheax = 0x50; @@ -116,7 +112,7 @@ snr[0].realfun = (DWORD)SNOOP16_Entry; snr[0].lcall = 0x9a; snr[0].callfromregs = (DWORD)__wine_call_from_16_regs; - snr[0].seg = wine_get_cs(); + snr[0].seg = get_cs(); snr[0].lret = 0xcb66; snr[1].pushbp = 0x5566; @@ -126,7 +122,7 @@ snr[1].realfun = (DWORD)SNOOP16_Return; snr[1].lcall = 0x9a; snr[1].callfromregs = (DWORD)__wine_call_from_16_regs; - snr[1].seg = wine_get_cs(); + snr[1].seg = get_cs(); snr[1].lret = 0xcb66; } while (*dll) { @@ -152,7 +148,7 @@ strcpy( (*dll)->name, name ); if ((q=strrchr((*dll)->name,'.'))) *q='\0'; - (*dll)->funhandle = GlobalHandleToSel16(GLOBAL_Alloc(GMEM_ZEROINIT,65535,0,WINE_LDT_FLAGS_CODE)); + (*dll)->funhandle = GlobalHandleToSel16(GLOBAL_Alloc(GMEM_ZEROINIT,65535,0,LDT_FLAGS_CODE)); (*dll)->funs = GlobalLock16((*dll)->funhandle); if (!(*dll)->funs) { HeapFree(GetProcessHeap(),0,*dll); @@ -270,7 +266,7 @@ rets = &((*rets)->next); } if (!*rets) { - HANDLE16 hand = GlobalHandleToSel16(GLOBAL_Alloc(GMEM_ZEROINIT,65535,0,WINE_LDT_FLAGS_CODE)); + HANDLE16 hand = GlobalHandleToSel16(GLOBAL_Alloc(GMEM_ZEROINIT,65535,0,LDT_FLAGS_CODE)); *rets = GlobalLock16(hand); (*rets)->rethandle = hand; i = 0; /* entry 0 is free */ diff -Nru wine-development-5.5/dlls/krnl386.exe16/syslevel.c wine-development-5.6/dlls/krnl386.exe16/syslevel.c --- wine-development-5.5/dlls/krnl386.exe16/syslevel.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/syslevel.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,19 +18,14 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" - #include -#ifdef HAVE_UNISTD_H -# include -#endif #include + #include "windef.h" #include "winbase.h" #include "winternl.h" #include "wine/winbase16.h" #include "kernel16_private.h" -#include "wine/library.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(syslevel); @@ -108,7 +103,7 @@ TRACE("(%p, level %d): thread %x count after %d\n", lock, lock->level, GetCurrentThreadId(), thread_data->sys_count[lock->level] ); - if (lock == &Win16Mutex) CallTo16_TebSelector = wine_get_fs(); + if (lock == &Win16Mutex) CallTo16_TebSelector = get_fs(); } /************************************************************************ diff -Nru wine-development-5.5/dlls/krnl386.exe16/task.c wine-development-5.6/dlls/krnl386.exe16/task.c --- wine-development-5.5/dlls/krnl386.exe16/task.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/task.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,16 +18,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - #include #include #include #include -#ifdef HAVE_UNISTD_H -# include -#endif #include "windef.h" #include "winbase.h" @@ -201,7 +195,7 @@ if (!sel) /* Allocate a new segment */ { sel = GLOBAL_Alloc( GMEM_FIXED, FIELD_OFFSET( THUNKS, thunks[MIN_THUNKS] ), - pTask->hPDB, WINE_LDT_FLAGS_CODE ); + pTask->hPDB, LDT_FLAGS_CODE ); if (!sel) return 0; TASK_CreateThunks( sel, 0, MIN_THUNKS ); pThunk->next = sel; @@ -300,7 +294,7 @@ /* Allocate a selector for the PDB */ pTask->hPDB = GLOBAL_CreateBlock( GMEM_FIXED, &pTask->pdb, sizeof(PDB16), - hModule, WINE_LDT_FLAGS_DATA ); + hModule, LDT_FLAGS_DATA ); /* Fill the PDB */ @@ -341,7 +335,7 @@ /* Allocate a code segment alias for the TDB */ pTask->hCSAlias = GLOBAL_CreateBlock( GMEM_FIXED, pTask, sizeof(TDB), - pTask->hPDB, WINE_LDT_FLAGS_CODE ); + pTask->hPDB, LDT_FLAGS_CODE ); /* Default DTA overwrites command line */ diff -Nru wine-development-5.5/dlls/krnl386.exe16/thunk.c wine-development-5.6/dlls/krnl386.exe16/thunk.c --- wine-development-5.5/dlls/krnl386.exe16/thunk.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/thunk.c 2020-04-10 18:54:32.000000000 +0000 @@ -20,16 +20,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - #include #include #include #include -#ifdef HAVE_UNISTD_H -# include -#endif #include "windef.h" #include "winbase.h" @@ -39,7 +33,6 @@ #include "wine/winbase16.h" #include "wine/debug.h" -#include "wine/library.h" #include "kernel16_private.h" WINE_DEFAULT_DEBUG_CHANNEL(thunk); @@ -1075,7 +1068,7 @@ *(DWORD*)(thunk+18) = GetCurrentProcessId(); - sel = SELECTOR_AllocBlock( thunk, 32, WINE_LDT_FLAGS_CODE ); + sel = SELECTOR_AllocBlock( thunk, 32, LDT_FLAGS_CODE ); return (sel<<16)|0; } @@ -1168,7 +1161,7 @@ */ void WINAPI GetTEBSelectorFS16(void) { - CURRENT_STACK16->fs = wine_get_fs(); + CURRENT_STACK16->fs = get_fs(); } /********************************************************************** @@ -1421,8 +1414,6 @@ void WINAPI C16ThkSL(CONTEXT *context) { LPBYTE stub = MapSL(context->Eax), x = stub; - WORD cs = wine_get_cs(); - WORD ds = wine_get_ds(); /* We produce the following code: * @@ -1437,7 +1428,7 @@ * call __FLATCS:__wine_call_from_16_thunk */ - *x++ = 0xB8; *(WORD *)x = ds; x += sizeof(WORD); + *x++ = 0xB8; *(WORD *)x = get_ds(); x += sizeof(WORD); *x++ = 0x8E; *x++ = 0xC0; *x++ = 0x66; *x++ = 0x0F; *x++ = 0xB7; *x++ = 0xC9; *x++ = 0x67; *x++ = 0x66; *x++ = 0x26; *x++ = 0x8B; @@ -1449,7 +1440,7 @@ *x++ = 0x66; *x++ = 0x52; *x++ = 0x66; *x++ = 0x9A; *(void **)x = __wine_call_from_16_thunk; x += sizeof(void *); - *(WORD *)x = cs; x += sizeof(WORD); + *(WORD *)x = get_cs(); x += sizeof(WORD); /* Jump to the stub code just created */ context->Eip = LOWORD(context->Eax); @@ -1474,7 +1465,6 @@ struct ThunkDataSL *td = SL16->fpData; DWORD procAddress = (DWORD)GetProcAddress16(GetModuleHandle16("KERNEL"), (LPCSTR)631); - WORD cs = wine_get_cs(); if (!td) { @@ -1507,7 +1497,7 @@ *x++ = 0x66; *x++ = 0x52; *x++ = 0x66; *x++ = 0x9A; *(void **)x = __wine_call_from_16_thunk; x += sizeof(void *); - *(WORD *)x = cs; x += sizeof(WORD); + *(WORD *)x = get_cs(); x += sizeof(WORD); /* Jump to the stub code just created */ context->Eip = LOWORD(context->Eax); @@ -1617,7 +1607,7 @@ ThunkletHeap = HeapCreate( HEAP_CREATE_ENABLE_EXECUTE, 0x10000, 0x10000 ); if (!ThunkletHeap) return FALSE; - ThunkletCodeSel = SELECTOR_AllocBlock( ThunkletHeap, 0x10000, WINE_LDT_FLAGS_CODE ); + ThunkletCodeSel = SELECTOR_AllocBlock( ThunkletHeap, 0x10000, LDT_FLAGS_CODE ); thunk = HeapAlloc( ThunkletHeap, 0, 5 ); if (!thunk) return FALSE; @@ -1979,7 +1969,7 @@ SEGPTR stack = stack16_push( 12 ); LPWORD stackLin = MapSL(stack); /* stackLin[0] and stackLin[1] reserved for the 32-bit stack ptr */ - stackLin[2] = wine_get_ss(); + stackLin[2] = get_ds(); stackLin[3] = 0; stackLin[4] = OFFSETOF(stack) + 12; stackLin[5] = SELECTOROF(stack); @@ -2007,10 +1997,10 @@ stackLin = MapSL(stack); stackLin[0] = OFFSETOF(stack) + 4; stackLin[1] = SELECTOROF(stack); - stackLin[2] = wine_get_ds(); + stackLin[2] = get_ds(); stackLin[5] = OFFSETOF(stack) + 24; /* stackLin[6] and stackLin[7] reserved for the 32-bit stack ptr */ - stackLin[8] = wine_get_ss(); + stackLin[8] = get_ds(); stackLin[9] = 0; stackLin[10] = OFFSETOF(CALL32_CBClientEx_RetAddr); stackLin[11] = SELECTOROF(CALL32_CBClientEx_RetAddr); @@ -2048,8 +2038,7 @@ if (!code_sel32) { if (!ThunkletHeap) THUNK_Init(); - code_sel32 = SELECTOR_AllocBlock( ThunkletHeap, 0x10000, - WINE_LDT_FLAGS_CODE | WINE_LDT_FLAGS_32BIT ); + code_sel32 = SELECTOR_AllocBlock( ThunkletHeap, 0x10000, LDT_FLAGS_CODE | LDT_FLAGS_32BIT ); if (!code_sel32) return 0; } if (!(thunk = HeapAlloc( ThunkletHeap, 0, 32 ))) return 0; @@ -2066,7 +2055,7 @@ *thunk++ = 0xea; *(void **)thunk = QT_Thunk; thunk += sizeof(FARPROC16); - *(WORD *)thunk = wine_get_cs(); + *(WORD *)thunk = get_cs(); return MAKESEGPTR( code_sel32, (char *)thunk - (char *)ThunkletHeap ); } diff -Nru wine-development-5.5/dlls/krnl386.exe16/vxd.c wine-development-5.6/dlls/krnl386.exe16/vxd.c --- wine-development-5.5/dlls/krnl386.exe16/vxd.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/vxd.c 2020-04-10 18:54:32.000000000 +0000 @@ -20,17 +20,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - #include -#ifdef HAVE_UNISTD_H -# include -#endif #include -#ifdef HAVE_SYS_STAT_H -# include -#endif #include #include @@ -44,8 +35,6 @@ #include "winioctl.h" #include "kernel16_private.h" #include "dosexe.h" -#include "wine/library.h" -#include "wine/unicode.h" #include "wine/server.h" #include "wine/debug.h" @@ -156,17 +145,17 @@ /* normalize the filename */ - if (strlenW( filenameW ) >= ARRAY_SIZE(name) - 4 || - strchrW( filenameW, '/' ) || strchrW( filenameW, '\\' )) + if (lstrlenW( filenameW ) >= ARRAY_SIZE(name) - 4 || + wcschr( filenameW, '/' ) || wcschr( filenameW, '\\' )) { SetLastError( ERROR_FILE_NOT_FOUND ); return 0; } - strcpyW( name, filenameW ); - strlwrW( name ); - p = strchrW( name, '.' ); - if (!p) strcatW( name, dotVxDW ); - else if (strcmpiW( p, dotVxDW )) /* existing extension has to be .vxd */ + lstrcpyW( name, filenameW ); + wcslwr( name ); + p = wcschr( name, '.' ); + if (!p) lstrcatW( name, dotVxDW ); + else if (wcsicmp( p, dotVxDW )) /* existing extension has to be .vxd */ { SetLastError( ERROR_FILE_NOT_FOUND ); return 0; diff -Nru wine-development-5.5/dlls/krnl386.exe16/wowthunk.c wine-development-5.6/dlls/krnl386.exe16/wowthunk.c --- wine-development-5.5/dlls/krnl386.exe16/wowthunk.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/krnl386.exe16/wowthunk.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,10 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - -#include #include #include @@ -57,18 +53,14 @@ BOOL WOWTHUNK_Init(void) { /* allocate the code selector for CallTo16 routines */ - LDT_ENTRY entry; - WORD codesel = wine_ldt_alloc_entries(1); - + WORD codesel = SELECTOR_AllocBlock( __wine_call16_start, + (BYTE *)(&CallTo16_TebSelector + 1) - __wine_call16_start, + LDT_FLAGS_CODE | LDT_FLAGS_32BIT ); if (!codesel) return FALSE; - wine_ldt_set_base( &entry, __wine_call16_start ); - wine_ldt_set_limit( &entry, (BYTE *)(&CallTo16_TebSelector + 1) - __wine_call16_start - 1 ); - wine_ldt_set_flags( &entry, WINE_LDT_FLAGS_CODE | WINE_LDT_FLAGS_32BIT ); - wine_ldt_set_entry( codesel, &entry ); /* Patch the return addresses for CallTo16 routines */ - CallTo16_DataSelector = wine_get_ds(); + CallTo16_DataSelector = get_ds(); call16_ret_addr = MAKESEGPTR( codesel, (BYTE *)__wine_call_to_16_ret - __wine_call16_start ); CALL32_CBClient_RetAddr = MAKESEGPTR( codesel, (BYTE *)CALL32_CBClient_Ret - __wine_call16_start ); @@ -116,7 +108,7 @@ default: return FALSE; } - stack = wine_ldt_get_ptr( context->SegSs, context->Esp ); + stack = ldt_get_ptr( context->SegSs, context->Esp ); TRACE( "fixing up selector %x for pop instruction\n", *stack ); *stack = 0; return TRUE; @@ -141,7 +133,7 @@ else if (record->ExceptionCode == EXCEPTION_ACCESS_VIOLATION || record->ExceptionCode == EXCEPTION_PRIV_INSTRUCTION) { - if (wine_ldt_is_system(context->SegCs)) + if (ldt_is_system(context->SegCs)) { if (fix_selector( context )) return ExceptionContinueExecution; } @@ -155,7 +147,7 @@ /* check for Win16 __GP handler */ if ((gpHandler = HasGPHandler16( MAKESEGPTR( context->SegCs, context->Eip ) ))) { - WORD *stack = wine_ldt_get_ptr( context->SegSs, context->Esp ); + WORD *stack = ldt_get_ptr( context->SegSs, context->Esp ); *--stack = context->SegCs; *--stack = context->Eip; @@ -428,8 +420,6 @@ SYSLEVEL_CheckNotLevel( 2 ); } - assert( !(context->EFlags & 0x00020000) ); /* vm86 mode no longer supported */ - /* push return address */ if (dwFlags & WCB16_REGS_LONG) { diff -Nru wine-development-5.5/dlls/lzexpand.dll16/Makefile.in wine-development-5.6/dlls/lzexpand.dll16/Makefile.in --- wine-development-5.5/dlls/lzexpand.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/lzexpand.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = lzexpand.dll16 IMPORTS = lz32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,lz32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,lz32.dll C_SRCS = lzexpand.c diff -Nru wine-development-5.5/dlls/mf/main.c wine-development-5.6/dlls/mf/main.c --- wine-development-5.5/dlls/mf/main.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mf/main.c 2020-04-10 18:54:32.000000000 +0000 @@ -760,17 +760,20 @@ hr = MFCreateAsyncResult(&context->IUnknown_iface, &handler->IMFAsyncCallback_iface, (IUnknown *)caller, &item); IUnknown_Release(&context->IUnknown_iface); - IMFAsyncResult_Release(caller); if (SUCCEEDED(hr)) { if (SUCCEEDED(hr = MFPutWorkItemEx(MFASYNC_CALLBACK_QUEUE_IO, item))) { if (cancel_cookie) - IMFAsyncResult_GetState(item, cancel_cookie); + { + *cancel_cookie = (IUnknown *)caller; + IUnknown_AddRef(*cancel_cookie); + } } IMFAsyncResult_Release(item); } + IMFAsyncResult_Release(caller); return hr; } diff -Nru wine-development-5.5/dlls/mf/sar.c wine-development-5.6/dlls/mf/sar.c --- wine-development-5.5/dlls/mf/sar.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mf/sar.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,21 +18,1223 @@ #define COBJMACROS +#include "mfapi.h" #include "mfidl.h" +#include "mferror.h" #include "mf_private.h" +#include "initguid.h" +#include "mmdeviceapi.h" #include "wine/debug.h" #include "wine/heap.h" WINE_DEFAULT_DEBUG_CHANNEL(mfplat); -static HRESULT sar_create_object(IMFAttributes *attributes, void *user_context, IUnknown **obj) +struct audio_renderer; + +struct audio_renderer_stream +{ + IMFStreamSink IMFStreamSink_iface; + IMFMediaTypeHandler IMFMediaTypeHandler_iface; + LONG refcount; + struct audio_renderer *sink; + IMFMediaEventQueue *event_queue; + CRITICAL_SECTION cs; +}; + +struct audio_renderer +{ + IMFMediaSink IMFMediaSink_iface; + IMFMediaSinkPreroll IMFMediaSinkPreroll_iface; + IMFClockStateSink IMFClockStateSink_iface; + IMFMediaEventGenerator IMFMediaEventGenerator_iface; + IMFGetService IMFGetService_iface; + IMFSimpleAudioVolume IMFSimpleAudioVolume_iface; + IMFAudioStreamVolume IMFAudioStreamVolume_iface; + IMFAudioPolicy IMFAudioPolicy_iface; + LONG refcount; + IMFMediaEventQueue *event_queue; + IMFPresentationClock *clock; + BOOL is_shut_down; + struct audio_renderer_stream *stream; + CRITICAL_SECTION cs; +}; + +static struct audio_renderer *impl_from_IMFMediaSink(IMFMediaSink *iface) +{ + return CONTAINING_RECORD(iface, struct audio_renderer, IMFMediaSink_iface); +} + +static struct audio_renderer *impl_from_IMFMediaSinkPreroll(IMFMediaSinkPreroll *iface) +{ + return CONTAINING_RECORD(iface, struct audio_renderer, IMFMediaSinkPreroll_iface); +} + +static struct audio_renderer *impl_from_IMFClockStateSink(IMFClockStateSink *iface) +{ + return CONTAINING_RECORD(iface, struct audio_renderer, IMFClockStateSink_iface); +} + +static struct audio_renderer *impl_from_IMFMediaEventGenerator(IMFMediaEventGenerator *iface) +{ + return CONTAINING_RECORD(iface, struct audio_renderer, IMFMediaEventGenerator_iface); +} + +static struct audio_renderer *impl_from_IMFGetService(IMFGetService *iface) +{ + return CONTAINING_RECORD(iface, struct audio_renderer, IMFGetService_iface); +} + +static struct audio_renderer *impl_from_IMFSimpleAudioVolume(IMFSimpleAudioVolume *iface) +{ + return CONTAINING_RECORD(iface, struct audio_renderer, IMFSimpleAudioVolume_iface); +} + +static struct audio_renderer *impl_from_IMFAudioStreamVolume(IMFAudioStreamVolume *iface) +{ + return CONTAINING_RECORD(iface, struct audio_renderer, IMFAudioStreamVolume_iface); +} + +static struct audio_renderer *impl_from_IMFAudioPolicy(IMFAudioPolicy *iface) +{ + return CONTAINING_RECORD(iface, struct audio_renderer, IMFAudioPolicy_iface); +} + +static struct audio_renderer_stream *impl_from_IMFStreamSink(IMFStreamSink *iface) +{ + return CONTAINING_RECORD(iface, struct audio_renderer_stream, IMFStreamSink_iface); +} + +static struct audio_renderer_stream *impl_from_IMFMediaTypeHandler(IMFMediaTypeHandler *iface) +{ + return CONTAINING_RECORD(iface, struct audio_renderer_stream, IMFMediaTypeHandler_iface); +} + +static HRESULT WINAPI audio_renderer_sink_QueryInterface(IMFMediaSink *iface, REFIID riid, void **obj) +{ + struct audio_renderer *renderer = impl_from_IMFMediaSink(iface); + + TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj); + + if (IsEqualIID(riid, &IID_IMFMediaSink) || + IsEqualIID(riid, &IID_IUnknown)) + { + *obj = iface; + } + else if (IsEqualIID(riid, &IID_IMFMediaSinkPreroll)) + { + *obj = &renderer->IMFMediaSinkPreroll_iface; + } + else if (IsEqualIID(riid, &IID_IMFClockStateSink)) + { + *obj = &renderer->IMFClockStateSink_iface; + } + else if (IsEqualIID(riid, &IID_IMFMediaEventGenerator)) + { + *obj = &renderer->IMFMediaEventGenerator_iface; + } + else if (IsEqualIID(riid, &IID_IMFGetService)) + { + *obj = &renderer->IMFGetService_iface; + } + else + { + WARN("Unsupported %s.\n", debugstr_guid(riid)); + *obj = NULL; + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown *)*obj); + + return S_OK; +} + +static ULONG WINAPI audio_renderer_sink_AddRef(IMFMediaSink *iface) +{ + struct audio_renderer *renderer = impl_from_IMFMediaSink(iface); + ULONG refcount = InterlockedIncrement(&renderer->refcount); + TRACE("%p, refcount %u.\n", iface, refcount); + return refcount; +} + +static ULONG WINAPI audio_renderer_sink_Release(IMFMediaSink *iface) +{ + struct audio_renderer *renderer = impl_from_IMFMediaSink(iface); + ULONG refcount = InterlockedDecrement(&renderer->refcount); + + TRACE("%p, refcount %u.\n", iface, refcount); + + if (!refcount) + { + if (renderer->event_queue) + IMFMediaEventQueue_Release(renderer->event_queue); + if (renderer->clock) + IMFPresentationClock_Release(renderer->clock); + DeleteCriticalSection(&renderer->cs); + heap_free(renderer); + } + + return refcount; +} + +static HRESULT WINAPI audio_renderer_sink_GetCharacteristics(IMFMediaSink *iface, DWORD *flags) +{ + struct audio_renderer *renderer = impl_from_IMFMediaSink(iface); + + TRACE("%p, %p.\n", iface, flags); + + if (renderer->is_shut_down) + return MF_E_SHUTDOWN; + + *flags = MEDIASINK_FIXED_STREAMS | MEDIASINK_CAN_PREROLL; + + return S_OK; +} + +static HRESULT WINAPI audio_renderer_sink_AddStreamSink(IMFMediaSink *iface, DWORD stream_sink_id, + IMFMediaType *media_type, IMFStreamSink **stream_sink) +{ + struct audio_renderer *renderer = impl_from_IMFMediaSink(iface); + + TRACE("%p, %#x, %p, %p.\n", iface, stream_sink_id, media_type, stream_sink); + + return renderer->is_shut_down ? MF_E_SHUTDOWN : MF_E_STREAMSINKS_FIXED; +} + +static HRESULT WINAPI audio_renderer_sink_RemoveStreamSink(IMFMediaSink *iface, DWORD stream_sink_id) +{ + struct audio_renderer *renderer = impl_from_IMFMediaSink(iface); + + TRACE("%p, %#x.\n", iface, stream_sink_id); + + return renderer->is_shut_down ? MF_E_SHUTDOWN : MF_E_STREAMSINKS_FIXED; +} + +static HRESULT WINAPI audio_renderer_sink_GetStreamSinkCount(IMFMediaSink *iface, DWORD *count) +{ + struct audio_renderer *renderer = impl_from_IMFMediaSink(iface); + + TRACE("%p, %p.\n", iface, count); + + if (!count) + return E_POINTER; + + if (renderer->is_shut_down) + return MF_E_SHUTDOWN; + + *count = 1; + + return S_OK; +} + +static HRESULT WINAPI audio_renderer_sink_GetStreamSinkByIndex(IMFMediaSink *iface, DWORD index, + IMFStreamSink **stream) +{ + struct audio_renderer *renderer = impl_from_IMFMediaSink(iface); + HRESULT hr = S_OK; + + TRACE("%p, %u, %p.\n", iface, index, stream); + + if (renderer->is_shut_down) + return MF_E_SHUTDOWN; + + EnterCriticalSection(&renderer->cs); + + if (renderer->is_shut_down) + hr = MF_E_SHUTDOWN; + else if (index > 0) + hr = MF_E_INVALIDINDEX; + else + { + *stream = &renderer->stream->IMFStreamSink_iface; + IMFStreamSink_AddRef(*stream); + } + + LeaveCriticalSection(&renderer->cs); + + return hr; +} + +static HRESULT WINAPI audio_renderer_sink_GetStreamSinkById(IMFMediaSink *iface, DWORD stream_sink_id, + IMFStreamSink **stream) +{ + struct audio_renderer *renderer = impl_from_IMFMediaSink(iface); + HRESULT hr = S_OK; + + TRACE("%p, %#x, %p.\n", iface, stream_sink_id, stream); + + EnterCriticalSection(&renderer->cs); + + if (renderer->is_shut_down) + hr = MF_E_SHUTDOWN; + else if (stream_sink_id > 0) + hr = MF_E_INVALIDSTREAMNUMBER; + else + { + *stream = &renderer->stream->IMFStreamSink_iface; + IMFStreamSink_AddRef(*stream); + } + + LeaveCriticalSection(&renderer->cs); + + return hr; +} + +static HRESULT WINAPI audio_renderer_sink_SetPresentationClock(IMFMediaSink *iface, IMFPresentationClock *clock) +{ + struct audio_renderer *renderer = impl_from_IMFMediaSink(iface); + HRESULT hr = S_OK; + + TRACE("%p, %p.\n", iface, clock); + + EnterCriticalSection(&renderer->cs); + + if (renderer->is_shut_down) + hr = MF_E_SHUTDOWN; + else + { + if (renderer->clock) + { + IMFPresentationClock_RemoveClockStateSink(renderer->clock, &renderer->IMFClockStateSink_iface); + IMFPresentationClock_Release(renderer->clock); + } + renderer->clock = clock; + if (renderer->clock) + { + IMFPresentationClock_AddRef(renderer->clock); + IMFPresentationClock_AddClockStateSink(renderer->clock, &renderer->IMFClockStateSink_iface); + } + } + + LeaveCriticalSection(&renderer->cs); + + return hr; +} + +static HRESULT WINAPI audio_renderer_sink_GetPresentationClock(IMFMediaSink *iface, IMFPresentationClock **clock) +{ + struct audio_renderer *renderer = impl_from_IMFMediaSink(iface); + HRESULT hr = S_OK; + + TRACE("%p, %p.\n", iface, clock); + + if (!clock) + return E_POINTER; + + EnterCriticalSection(&renderer->cs); + + if (renderer->is_shut_down) + hr = MF_E_SHUTDOWN; + else if (renderer->clock) + { + *clock = renderer->clock; + IMFPresentationClock_AddRef(*clock); + } + else + hr = MF_E_NO_CLOCK; + + LeaveCriticalSection(&renderer->cs); + + return hr; +} + +static HRESULT WINAPI audio_renderer_sink_Shutdown(IMFMediaSink *iface) +{ + struct audio_renderer *renderer = impl_from_IMFMediaSink(iface); + + TRACE("%p.\n", iface); + + if (renderer->is_shut_down) + return MF_E_SHUTDOWN; + + EnterCriticalSection(&renderer->cs); + + renderer->is_shut_down = TRUE; + IMFMediaEventQueue_Shutdown(renderer->event_queue); + + /* Detach stream. */ + IMFMediaSink_Release(&renderer->stream->sink->IMFMediaSink_iface); + EnterCriticalSection(&renderer->stream->cs); + renderer->stream->sink = NULL; + IMFMediaEventQueue_Shutdown(renderer->stream->event_queue); + LeaveCriticalSection(&renderer->stream->cs); + + IMFStreamSink_Release(&renderer->stream->IMFStreamSink_iface); + renderer->stream = NULL; + + LeaveCriticalSection(&renderer->cs); + + return S_OK; +} + +static const IMFMediaSinkVtbl audio_renderer_sink_vtbl = +{ + audio_renderer_sink_QueryInterface, + audio_renderer_sink_AddRef, + audio_renderer_sink_Release, + audio_renderer_sink_GetCharacteristics, + audio_renderer_sink_AddStreamSink, + audio_renderer_sink_RemoveStreamSink, + audio_renderer_sink_GetStreamSinkCount, + audio_renderer_sink_GetStreamSinkByIndex, + audio_renderer_sink_GetStreamSinkById, + audio_renderer_sink_SetPresentationClock, + audio_renderer_sink_GetPresentationClock, + audio_renderer_sink_Shutdown, +}; + +static HRESULT WINAPI audio_renderer_preroll_QueryInterface(IMFMediaSinkPreroll *iface, REFIID riid, void **obj) { - FIXME("%p, %p, %p.\n", attributes, user_context, obj); + struct audio_renderer *renderer = impl_from_IMFMediaSinkPreroll(iface); + return IMFMediaSink_QueryInterface(&renderer->IMFMediaSink_iface, riid, obj); +} + +static ULONG WINAPI audio_renderer_preroll_AddRef(IMFMediaSinkPreroll *iface) +{ + struct audio_renderer *renderer = impl_from_IMFMediaSinkPreroll(iface); + return IMFMediaSink_AddRef(&renderer->IMFMediaSink_iface); +} + +static ULONG WINAPI audio_renderer_preroll_Release(IMFMediaSinkPreroll *iface) +{ + struct audio_renderer *renderer = impl_from_IMFMediaSinkPreroll(iface); + return IMFMediaSink_Release(&renderer->IMFMediaSink_iface); +} + +static HRESULT WINAPI audio_renderer_preroll_NotifyPreroll(IMFMediaSinkPreroll *iface, MFTIME start_time) +{ + FIXME("%p, %s.\n", iface, debugstr_time(start_time)); + + return E_NOTIMPL; +} + +static const IMFMediaSinkPrerollVtbl audio_renderer_preroll_vtbl = +{ + audio_renderer_preroll_QueryInterface, + audio_renderer_preroll_AddRef, + audio_renderer_preroll_Release, + audio_renderer_preroll_NotifyPreroll, +}; + +static HRESULT WINAPI audio_renderer_events_QueryInterface(IMFMediaEventGenerator *iface, REFIID riid, void **obj) +{ + struct audio_renderer *renderer = impl_from_IMFMediaEventGenerator(iface); + return IMFMediaSink_QueryInterface(&renderer->IMFMediaSink_iface, riid, obj); +} + +static ULONG WINAPI audio_renderer_events_AddRef(IMFMediaEventGenerator *iface) +{ + struct audio_renderer *renderer = impl_from_IMFMediaEventGenerator(iface); + return IMFMediaSink_AddRef(&renderer->IMFMediaSink_iface); +} + +static ULONG WINAPI audio_renderer_events_Release(IMFMediaEventGenerator *iface) +{ + struct audio_renderer *renderer = impl_from_IMFMediaEventGenerator(iface); + return IMFMediaSink_Release(&renderer->IMFMediaSink_iface); +} + +static HRESULT WINAPI audio_renderer_events_GetEvent(IMFMediaEventGenerator *iface, DWORD flags, IMFMediaEvent **event) +{ + struct audio_renderer *renderer = impl_from_IMFMediaEventGenerator(iface); + + TRACE("%p, %#x, %p.\n", iface, flags, event); + + return IMFMediaEventQueue_GetEvent(renderer->event_queue, flags, event); +} + +static HRESULT WINAPI audio_renderer_events_BeginGetEvent(IMFMediaEventGenerator *iface, IMFAsyncCallback *callback, + IUnknown *state) +{ + struct audio_renderer *renderer = impl_from_IMFMediaEventGenerator(iface); + + TRACE("%p, %p, %p.\n", iface, callback, state); + + return IMFMediaEventQueue_BeginGetEvent(renderer->event_queue, callback, state); +} + +static HRESULT WINAPI audio_renderer_events_EndGetEvent(IMFMediaEventGenerator *iface, IMFAsyncResult *result, + IMFMediaEvent **event) +{ + struct audio_renderer *renderer = impl_from_IMFMediaEventGenerator(iface); + + TRACE("%p, %p, %p.\n", iface, result, event); + + return IMFMediaEventQueue_EndGetEvent(renderer->event_queue, result, event); +} + +static HRESULT WINAPI audio_renderer_events_QueueEvent(IMFMediaEventGenerator *iface, MediaEventType event_type, + REFGUID ext_type, HRESULT hr, const PROPVARIANT *value) +{ + struct audio_renderer *renderer = impl_from_IMFMediaEventGenerator(iface); + + TRACE("%p, %u, %s, %#x, %p.\n", iface, event_type, debugstr_guid(ext_type), hr, value); + + return IMFMediaEventQueue_QueueEventParamVar(renderer->event_queue, event_type, ext_type, hr, value); +} + +static const IMFMediaEventGeneratorVtbl audio_renderer_events_vtbl = +{ + audio_renderer_events_QueryInterface, + audio_renderer_events_AddRef, + audio_renderer_events_Release, + audio_renderer_events_GetEvent, + audio_renderer_events_BeginGetEvent, + audio_renderer_events_EndGetEvent, + audio_renderer_events_QueueEvent, +}; + +static HRESULT WINAPI audio_renderer_clock_sink_QueryInterface(IMFClockStateSink *iface, REFIID riid, void **obj) +{ + struct audio_renderer *renderer = impl_from_IMFClockStateSink(iface); + return IMFMediaSink_QueryInterface(&renderer->IMFMediaSink_iface, riid, obj); +} + +static ULONG WINAPI audio_renderer_clock_sink_AddRef(IMFClockStateSink *iface) +{ + struct audio_renderer *renderer = impl_from_IMFClockStateSink(iface); + return IMFMediaSink_AddRef(&renderer->IMFMediaSink_iface); +} + +static ULONG WINAPI audio_renderer_clock_sink_Release(IMFClockStateSink *iface) +{ + struct audio_renderer *renderer = impl_from_IMFClockStateSink(iface); + return IMFMediaSink_Release(&renderer->IMFMediaSink_iface); +} + +static HRESULT WINAPI audio_renderer_clock_sink_OnClockStart(IMFClockStateSink *iface, MFTIME systime, LONGLONG offset) +{ + FIXME("%p, %s, %s.\n", iface, debugstr_time(systime), debugstr_time(offset)); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_clock_sink_OnClockStop(IMFClockStateSink *iface, MFTIME systime) +{ + FIXME("%p, %s.\n", iface, debugstr_time(systime)); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_clock_sink_OnClockPause(IMFClockStateSink *iface, MFTIME systime) +{ + FIXME("%p, %s.\n", iface, debugstr_time(systime)); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_clock_sink_OnClockRestart(IMFClockStateSink *iface, MFTIME systime) +{ + FIXME("%p, %s.\n", iface, debugstr_time(systime)); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_clock_sink_OnClockSetRate(IMFClockStateSink *iface, MFTIME systime, float rate) +{ + FIXME("%p, %s, %f.\n", iface, debugstr_time(systime), rate); + + return E_NOTIMPL; +} + +static const IMFClockStateSinkVtbl audio_renderer_clock_sink_vtbl = +{ + audio_renderer_clock_sink_QueryInterface, + audio_renderer_clock_sink_AddRef, + audio_renderer_clock_sink_Release, + audio_renderer_clock_sink_OnClockStart, + audio_renderer_clock_sink_OnClockStop, + audio_renderer_clock_sink_OnClockPause, + audio_renderer_clock_sink_OnClockRestart, + audio_renderer_clock_sink_OnClockSetRate, +}; + +static HRESULT WINAPI audio_renderer_get_service_QueryInterface(IMFGetService *iface, REFIID riid, void **obj) +{ + struct audio_renderer *renderer = impl_from_IMFGetService(iface); + return IMFMediaSink_QueryInterface(&renderer->IMFMediaSink_iface, riid, obj); +} + +static ULONG WINAPI audio_renderer_get_service_AddRef(IMFGetService *iface) +{ + struct audio_renderer *renderer = impl_from_IMFGetService(iface); + return IMFMediaSink_AddRef(&renderer->IMFMediaSink_iface); +} + +static ULONG WINAPI audio_renderer_get_service_Release(IMFGetService *iface) +{ + struct audio_renderer *renderer = impl_from_IMFGetService(iface); + return IMFMediaSink_Release(&renderer->IMFMediaSink_iface); +} + +static HRESULT WINAPI audio_renderer_get_service_GetService(IMFGetService *iface, REFGUID service, REFIID riid, void **obj) +{ + struct audio_renderer *renderer = impl_from_IMFGetService(iface); + + TRACE("%p, %s, %s, %p.\n", iface, debugstr_guid(service), debugstr_guid(riid), obj); + + *obj = NULL; + + if (IsEqualGUID(service, &MR_POLICY_VOLUME_SERVICE) && IsEqualIID(riid, &IID_IMFSimpleAudioVolume)) + { + *obj = &renderer->IMFSimpleAudioVolume_iface; + } + else if (IsEqualGUID(service, &MR_STREAM_VOLUME_SERVICE) && IsEqualIID(riid, &IID_IMFAudioStreamVolume)) + { + *obj = &renderer->IMFAudioStreamVolume_iface; + } + else if (IsEqualGUID(service, &MR_AUDIO_POLICY_SERVICE) && IsEqualIID(riid, &IID_IMFAudioPolicy)) + { + *obj = &renderer->IMFAudioPolicy_iface; + } + else + FIXME("Unsupported service %s, interface %s.\n", debugstr_guid(service), debugstr_guid(riid)); + + if (*obj) + IUnknown_AddRef((IUnknown *)*obj); + + return *obj ? S_OK : E_NOINTERFACE; +} + +static const IMFGetServiceVtbl audio_renderer_get_service_vtbl = +{ + audio_renderer_get_service_QueryInterface, + audio_renderer_get_service_AddRef, + audio_renderer_get_service_Release, + audio_renderer_get_service_GetService, +}; + +static HRESULT WINAPI audio_renderer_simple_volume_QueryInterface(IMFSimpleAudioVolume *iface, REFIID riid, void **obj) +{ + TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj); + + if (IsEqualIID(riid, &IID_IMFSimpleAudioVolume) || + IsEqualIID(riid, &IID_IUnknown)) + { + *obj = iface; + IMFSimpleAudioVolume_AddRef(iface); + return S_OK; + } + + WARN("Unsupported interface %s.\n", debugstr_guid(riid)); + *obj = NULL; + return E_NOINTERFACE; +} + +static ULONG WINAPI audio_renderer_simple_volume_AddRef(IMFSimpleAudioVolume *iface) +{ + struct audio_renderer *renderer = impl_from_IMFSimpleAudioVolume(iface); + return IMFMediaSink_AddRef(&renderer->IMFMediaSink_iface); +} + +static ULONG WINAPI audio_renderer_simple_volume_Release(IMFSimpleAudioVolume *iface) +{ + struct audio_renderer *renderer = impl_from_IMFSimpleAudioVolume(iface); + return IMFMediaSink_Release(&renderer->IMFMediaSink_iface); +} + +static HRESULT WINAPI audio_renderer_simple_volume_SetMasterVolume(IMFSimpleAudioVolume *iface, float level) +{ + FIXME("%p, %f.\n", iface, level); return E_NOTIMPL; } +static HRESULT WINAPI audio_renderer_simple_volume_GetMasterVolume(IMFSimpleAudioVolume *iface, float *level) +{ + FIXME("%p, %p.\n", iface, level); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_simple_volume_SetMute(IMFSimpleAudioVolume *iface, BOOL mute) +{ + FIXME("%p, %d.\n", iface, mute); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_simple_volume_GetMute(IMFSimpleAudioVolume *iface, BOOL *mute) +{ + FIXME("%p, %p.\n", iface, mute); + + return E_NOTIMPL; +} + +static const IMFSimpleAudioVolumeVtbl audio_renderer_simple_volume_vtbl = +{ + audio_renderer_simple_volume_QueryInterface, + audio_renderer_simple_volume_AddRef, + audio_renderer_simple_volume_Release, + audio_renderer_simple_volume_SetMasterVolume, + audio_renderer_simple_volume_GetMasterVolume, + audio_renderer_simple_volume_SetMute, + audio_renderer_simple_volume_GetMute, +}; + +static HRESULT WINAPI audio_renderer_stream_volume_QueryInterface(IMFAudioStreamVolume *iface, REFIID riid, void **obj) +{ + TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj); + + if (IsEqualIID(riid, &IID_IMFAudioStreamVolume) || + IsEqualIID(riid, &IID_IUnknown)) + { + *obj = iface; + IMFAudioStreamVolume_AddRef(iface); + return S_OK; + } + + WARN("Unsupported interface %s.\n", debugstr_guid(riid)); + *obj = NULL; + return E_NOINTERFACE; +} + +static ULONG WINAPI audio_renderer_stream_volume_AddRef(IMFAudioStreamVolume *iface) +{ + struct audio_renderer *renderer = impl_from_IMFAudioStreamVolume(iface); + return IMFMediaSink_AddRef(&renderer->IMFMediaSink_iface); +} + +static ULONG WINAPI audio_renderer_stream_volume_Release(IMFAudioStreamVolume *iface) +{ + struct audio_renderer *renderer = impl_from_IMFAudioStreamVolume(iface); + return IMFMediaSink_Release(&renderer->IMFMediaSink_iface); +} + +static HRESULT WINAPI audio_renderer_stream_volume_GetChannelCount(IMFAudioStreamVolume *iface, UINT32 *count) +{ + FIXME("%p, %p.\n", iface, count); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_stream_volume_SetChannelVolume(IMFAudioStreamVolume *iface, UINT32 index, float level) +{ + FIXME("%p, %u, %f.\n", iface, index, level); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_stream_volume_GetChannelVolume(IMFAudioStreamVolume *iface, UINT32 index, float *level) +{ + FIXME("%p, %u, %p.\n", iface, index, level); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_stream_volume_SetAllVolumes(IMFAudioStreamVolume *iface, UINT32 count, + const float *volumes) +{ + FIXME("%p, %u, %p.\n", iface, count, volumes); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_stream_volume_GetAllVolumes(IMFAudioStreamVolume *iface, UINT32 count, float *volumes) +{ + FIXME("%p, %u, %p.\n", iface, count, volumes); + + return E_NOTIMPL; +} + +static const IMFAudioStreamVolumeVtbl audio_renderer_stream_volume_vtbl = +{ + audio_renderer_stream_volume_QueryInterface, + audio_renderer_stream_volume_AddRef, + audio_renderer_stream_volume_Release, + audio_renderer_stream_volume_GetChannelCount, + audio_renderer_stream_volume_SetChannelVolume, + audio_renderer_stream_volume_GetChannelVolume, + audio_renderer_stream_volume_SetAllVolumes, + audio_renderer_stream_volume_GetAllVolumes, +}; + +static HRESULT WINAPI audio_renderer_policy_QueryInterface(IMFAudioPolicy *iface, REFIID riid, void **obj) +{ + TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj); + + if (IsEqualIID(riid, &IID_IMFAudioPolicy) || + IsEqualIID(riid, &IID_IUnknown)) + { + *obj = iface; + IMFAudioPolicy_AddRef(iface); + return S_OK; + } + + WARN("Unsupported interface %s.\n", debugstr_guid(riid)); + *obj = NULL; + return E_NOINTERFACE; +} + +static ULONG WINAPI audio_renderer_policy_AddRef(IMFAudioPolicy *iface) +{ + struct audio_renderer *renderer = impl_from_IMFAudioPolicy(iface); + return IMFMediaSink_AddRef(&renderer->IMFMediaSink_iface); +} + +static ULONG WINAPI audio_renderer_policy_Release(IMFAudioPolicy *iface) +{ + struct audio_renderer *renderer = impl_from_IMFAudioPolicy(iface); + return IMFMediaSink_Release(&renderer->IMFMediaSink_iface); +} + +static HRESULT WINAPI audio_renderer_policy_SetGroupingParam(IMFAudioPolicy *iface, REFGUID param) +{ + FIXME("%p, %s.\n", iface, debugstr_guid(param)); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_policy_GetGroupingParam(IMFAudioPolicy *iface, GUID *param) +{ + FIXME("%p, %p.\n", iface, param); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_policy_SetDisplayName(IMFAudioPolicy *iface, const WCHAR *name) +{ + FIXME("%p, %s.\n", iface, debugstr_w(name)); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_policy_GetDisplayName(IMFAudioPolicy *iface, WCHAR **name) +{ + FIXME("%p, %p.\n", iface, name); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_policy_SetIconPath(IMFAudioPolicy *iface, const WCHAR *path) +{ + FIXME("%p, %s.\n", iface, debugstr_w(path)); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_policy_GetIconPath(IMFAudioPolicy *iface, WCHAR **path) +{ + FIXME("%p, %p.\n", iface, path); + + return E_NOTIMPL; +} + +static const IMFAudioPolicyVtbl audio_renderer_policy_vtbl = +{ + audio_renderer_policy_QueryInterface, + audio_renderer_policy_AddRef, + audio_renderer_policy_Release, + audio_renderer_policy_SetGroupingParam, + audio_renderer_policy_GetGroupingParam, + audio_renderer_policy_SetDisplayName, + audio_renderer_policy_GetDisplayName, + audio_renderer_policy_SetIconPath, + audio_renderer_policy_GetIconPath, +}; + +static HRESULT sar_create_mmdevice(IMFAttributes *attributes, IMMDevice **device) +{ + WCHAR *endpoint; + unsigned int length, role = eMultimedia; + IMMDeviceEnumerator *devenum; + HRESULT hr; + + if (attributes) + { + /* Mutually exclusive attributes. */ + if (SUCCEEDED(IMFAttributes_GetItem(attributes, &MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE, NULL)) && + SUCCEEDED(IMFAttributes_GetItem(attributes, &MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID, NULL))) + { + return E_INVALIDARG; + } + } + + if (FAILED(hr = CoCreateInstance(&CLSID_MMDeviceEnumerator, NULL, CLSCTX_INPROC_SERVER, &IID_IMMDeviceEnumerator, + (void **)&devenum))) + { + return hr; + } + + role = eMultimedia; + if (attributes && SUCCEEDED(IMFAttributes_GetUINT32(attributes, &MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE, &role))) + TRACE("Specified role %d.\n", role); + + if (attributes && SUCCEEDED(IMFAttributes_GetAllocatedString(attributes, &MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID, + &endpoint, &length))) + { + TRACE("Specified end point %s.\n", debugstr_w(endpoint)); + hr = IMMDeviceEnumerator_GetDevice(devenum, endpoint, device); + CoTaskMemFree(endpoint); + } + else + hr = IMMDeviceEnumerator_GetDefaultAudioEndpoint(devenum, eRender, role, device); + + if (FAILED(hr)) + hr = MF_E_NO_AUDIO_PLAYBACK_DEVICE; + + IMMDeviceEnumerator_Release(devenum); + + return hr; +} + +static HRESULT WINAPI audio_renderer_stream_QueryInterface(IMFStreamSink *iface, REFIID riid, void **obj) +{ + struct audio_renderer_stream *stream = impl_from_IMFStreamSink(iface); + + TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj); + + if (IsEqualIID(riid, &IID_IMFStreamSink) || + IsEqualIID(riid, &IID_IUnknown)) + { + *obj = &stream->IMFStreamSink_iface; + } + else if (IsEqualIID(riid, &IID_IMFMediaTypeHandler)) + { + *obj = &stream->IMFMediaTypeHandler_iface; + } + else + { + WARN("Unsupported %s.\n", debugstr_guid(riid)); + *obj = NULL; + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown *)*obj); + + return S_OK; +} + +static ULONG WINAPI audio_renderer_stream_AddRef(IMFStreamSink *iface) +{ + struct audio_renderer_stream *stream = impl_from_IMFStreamSink(iface); + ULONG refcount = InterlockedIncrement(&stream->refcount); + + TRACE("%p, refcount %u.\n", iface, refcount); + + return refcount; +} + +static ULONG WINAPI audio_renderer_stream_Release(IMFStreamSink *iface) +{ + struct audio_renderer_stream *stream = impl_from_IMFStreamSink(iface); + ULONG refcount = InterlockedDecrement(&stream->refcount); + + TRACE("%p, refcount %u.\n", iface, refcount); + + if (!refcount) + { + if (stream->sink) + IMFMediaSink_Release(&stream->sink->IMFMediaSink_iface); + if (stream->event_queue) + { + IMFMediaEventQueue_Shutdown(stream->event_queue); + IMFMediaEventQueue_Release(stream->event_queue); + } + DeleteCriticalSection(&stream->cs); + heap_free(stream); + } + + return refcount; +} + +static HRESULT WINAPI audio_renderer_stream_GetEvent(IMFStreamSink *iface, DWORD flags, IMFMediaEvent **event) +{ + struct audio_renderer_stream *stream = impl_from_IMFStreamSink(iface); + + TRACE("%p, %#x, %p.\n", iface, flags, event); + + if (!stream->sink) + return MF_E_STREAMSINK_REMOVED; + + return IMFMediaEventQueue_GetEvent(stream->event_queue, flags, event); +} + +static HRESULT WINAPI audio_renderer_stream_BeginGetEvent(IMFStreamSink *iface, IMFAsyncCallback *callback, + IUnknown *state) +{ + struct audio_renderer_stream *stream = impl_from_IMFStreamSink(iface); + + TRACE("%p, %p, %p.\n", iface, callback, state); + + if (!stream->sink) + return MF_E_STREAMSINK_REMOVED; + + return IMFMediaEventQueue_BeginGetEvent(stream->event_queue, callback, state); +} + +static HRESULT WINAPI audio_renderer_stream_EndGetEvent(IMFStreamSink *iface, IMFAsyncResult *result, + IMFMediaEvent **event) +{ + struct audio_renderer_stream *stream = impl_from_IMFStreamSink(iface); + + TRACE("%p, %p, %p.\n", iface, result, event); + + if (!stream->sink) + return MF_E_STREAMSINK_REMOVED; + + return IMFMediaEventQueue_EndGetEvent(stream->event_queue, result, event); +} + +static HRESULT WINAPI audio_renderer_stream_QueueEvent(IMFStreamSink *iface, MediaEventType event_type, + REFGUID ext_type, HRESULT hr, const PROPVARIANT *value) +{ + struct audio_renderer_stream *stream = impl_from_IMFStreamSink(iface); + + TRACE("%p, %u, %s, %#x, %p.\n", iface, event_type, debugstr_guid(ext_type), hr, value); + + if (!stream->sink) + return MF_E_STREAMSINK_REMOVED; + + return IMFMediaEventQueue_QueueEventParamVar(stream->event_queue, event_type, ext_type, hr, value); +} + +static HRESULT WINAPI audio_renderer_stream_GetMediaSink(IMFStreamSink *iface, IMFMediaSink **sink) +{ + struct audio_renderer_stream *stream = impl_from_IMFStreamSink(iface); + + TRACE("%p, %p.\n", iface, sink); + + if (!stream->sink) + return MF_E_STREAMSINK_REMOVED; + + *sink = &stream->sink->IMFMediaSink_iface; + IMFMediaSink_AddRef(*sink); + + return S_OK; +} + +static HRESULT WINAPI audio_renderer_stream_GetIdentifier(IMFStreamSink *iface, DWORD *identifier) +{ + struct audio_renderer_stream *stream = impl_from_IMFStreamSink(iface); + + TRACE("%p, %p.\n", iface, identifier); + + if (!stream->sink) + return MF_E_STREAMSINK_REMOVED; + + *identifier = 0; + + return S_OK; +} + +static HRESULT WINAPI audio_renderer_stream_GetMediaTypeHandler(IMFStreamSink *iface, IMFMediaTypeHandler **handler) +{ + struct audio_renderer_stream *stream = impl_from_IMFStreamSink(iface); + + TRACE("%p, %p.\n", iface, handler); + + if (!handler) + return E_POINTER; + + if (!stream->sink) + return MF_E_STREAMSINK_REMOVED; + + *handler = &stream->IMFMediaTypeHandler_iface; + IMFMediaTypeHandler_AddRef(*handler); + + return S_OK; +} + +static HRESULT WINAPI audio_renderer_stream_ProcessSample(IMFStreamSink *iface, IMFSample *sample) +{ + FIXME("%p, %p.\n", iface, sample); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_stream_PlaceMarker(IMFStreamSink *iface, MFSTREAMSINK_MARKER_TYPE marker_type, + const PROPVARIANT *marker_value, const PROPVARIANT *context_value) +{ + FIXME("%p, %d, %p, %p.\n", iface, marker_type, marker_value, context_value); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_stream_Flush(IMFStreamSink *iface) +{ + FIXME("%p.\n", iface); + + return E_NOTIMPL; +} + +static const IMFStreamSinkVtbl audio_renderer_stream_vtbl = +{ + audio_renderer_stream_QueryInterface, + audio_renderer_stream_AddRef, + audio_renderer_stream_Release, + audio_renderer_stream_GetEvent, + audio_renderer_stream_BeginGetEvent, + audio_renderer_stream_EndGetEvent, + audio_renderer_stream_QueueEvent, + audio_renderer_stream_GetMediaSink, + audio_renderer_stream_GetIdentifier, + audio_renderer_stream_GetMediaTypeHandler, + audio_renderer_stream_ProcessSample, + audio_renderer_stream_PlaceMarker, + audio_renderer_stream_Flush, +}; + +static HRESULT WINAPI audio_renderer_stream_type_handler_QueryInterface(IMFMediaTypeHandler *iface, REFIID riid, + void **obj) +{ + struct audio_renderer_stream *stream = impl_from_IMFMediaTypeHandler(iface); + return IMFStreamSink_QueryInterface(&stream->IMFStreamSink_iface, riid, obj); +} + +static ULONG WINAPI audio_renderer_stream_type_handler_AddRef(IMFMediaTypeHandler *iface) +{ + struct audio_renderer_stream *stream = impl_from_IMFMediaTypeHandler(iface); + return IMFStreamSink_AddRef(&stream->IMFStreamSink_iface); +} + +static ULONG WINAPI audio_renderer_stream_type_handler_Release(IMFMediaTypeHandler *iface) +{ + struct audio_renderer_stream *stream = impl_from_IMFMediaTypeHandler(iface); + return IMFStreamSink_Release(&stream->IMFStreamSink_iface); +} + +static HRESULT WINAPI audio_renderer_stream_type_handler_IsMediaTypeSupported(IMFMediaTypeHandler *iface, + IMFMediaType *in_type, IMFMediaType **out_type) +{ + FIXME("%p, %p, %p.\n", iface, in_type, out_type); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_stream_type_handler_GetMediaTypeCount(IMFMediaTypeHandler *iface, DWORD *count) +{ + FIXME("%p, %p.\n", iface, count); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_stream_type_handler_GetMediaTypeByIndex(IMFMediaTypeHandler *iface, DWORD index, + IMFMediaType **media_type) +{ + FIXME("%p, %u, %p.\n", iface, index, media_type); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_stream_type_handler_SetCurrentMediaType(IMFMediaTypeHandler *iface, + IMFMediaType *media_type) +{ + FIXME("%p, %p.\n", iface, media_type); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_stream_type_handler_GetCurrentMediaType(IMFMediaTypeHandler *iface, + IMFMediaType **media_type) +{ + FIXME("%p, %p.\n", iface, media_type); + + return E_NOTIMPL; +} + +static HRESULT WINAPI audio_renderer_stream_type_handler_GetMajorType(IMFMediaTypeHandler *iface, GUID *type) +{ + struct audio_renderer_stream *stream = impl_from_IMFMediaTypeHandler(iface); + + TRACE("%p, %p.\n", iface, type); + + if (!type) + return E_POINTER; + + if (!stream->sink) + return MF_E_STREAMSINK_REMOVED; + + memcpy(type, &MFMediaType_Audio, sizeof(*type)); + return S_OK; +} + +static const IMFMediaTypeHandlerVtbl audio_renderer_stream_type_handler_vtbl = +{ + audio_renderer_stream_type_handler_QueryInterface, + audio_renderer_stream_type_handler_AddRef, + audio_renderer_stream_type_handler_Release, + audio_renderer_stream_type_handler_IsMediaTypeSupported, + audio_renderer_stream_type_handler_GetMediaTypeCount, + audio_renderer_stream_type_handler_GetMediaTypeByIndex, + audio_renderer_stream_type_handler_SetCurrentMediaType, + audio_renderer_stream_type_handler_GetCurrentMediaType, + audio_renderer_stream_type_handler_GetMajorType, +}; + +static HRESULT audio_renderer_create_stream(struct audio_renderer *sink, struct audio_renderer_stream **stream) +{ + struct audio_renderer_stream *object; + HRESULT hr; + + object = heap_alloc_zero(sizeof(*object)); + if (!object) + return E_OUTOFMEMORY; + + object->IMFStreamSink_iface.lpVtbl = &audio_renderer_stream_vtbl; + object->IMFMediaTypeHandler_iface.lpVtbl = &audio_renderer_stream_type_handler_vtbl; + object->refcount = 1; + object->sink = sink; + IMFMediaSink_AddRef(&object->sink->IMFMediaSink_iface); + InitializeCriticalSection(&object->cs); + + if (FAILED(hr = MFCreateEventQueue(&object->event_queue))) + goto failed; + + *stream = object; + + return S_OK; + +failed: + IMFStreamSink_Release(&object->IMFStreamSink_iface); + + return hr; +} + +static HRESULT sar_create_object(IMFAttributes *attributes, void *user_context, IUnknown **obj) +{ + struct audio_renderer *renderer; + IMMDevice *device; + HRESULT hr; + + TRACE("%p, %p, %p.\n", attributes, user_context, obj); + + if (!(renderer = heap_alloc_zero(sizeof(*renderer)))) + return E_OUTOFMEMORY; + + renderer->IMFMediaSink_iface.lpVtbl = &audio_renderer_sink_vtbl; + renderer->IMFMediaSinkPreroll_iface.lpVtbl = &audio_renderer_preroll_vtbl; + renderer->IMFClockStateSink_iface.lpVtbl = &audio_renderer_clock_sink_vtbl; + renderer->IMFMediaEventGenerator_iface.lpVtbl = &audio_renderer_events_vtbl; + renderer->IMFGetService_iface.lpVtbl = &audio_renderer_get_service_vtbl; + renderer->IMFSimpleAudioVolume_iface.lpVtbl = &audio_renderer_simple_volume_vtbl; + renderer->IMFAudioStreamVolume_iface.lpVtbl = &audio_renderer_stream_volume_vtbl; + renderer->IMFAudioPolicy_iface.lpVtbl = &audio_renderer_policy_vtbl; + renderer->refcount = 1; + InitializeCriticalSection(&renderer->cs); + + if (FAILED(hr = audio_renderer_create_stream(renderer, &renderer->stream))) + goto failed; + + if (FAILED(hr = MFCreateEventQueue(&renderer->event_queue))) + goto failed; + + if (FAILED(hr = sar_create_mmdevice(attributes, &device))) + goto failed; + + IMMDevice_Release(device); + + *obj = (IUnknown *)&renderer->IMFMediaSink_iface; + + return S_OK; + +failed: + + IMFMediaSink_Release(&renderer->IMFMediaSink_iface); + + return hr; +} + static void sar_shutdown_object(void *user_context, IUnknown *obj) { /* FIXME: shut down sink */ diff -Nru wine-development-5.5/dlls/mf/session.c wine-development-5.6/dlls/mf/session.c --- wine-development-5.5/dlls/mf/session.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mf/session.c 2020-04-10 18:54:32.000000000 +0000 @@ -539,10 +539,18 @@ if (topo_status == MF_TOPOSTATUS_INVALID) return; + if (list_empty(&session->topologies)) + { + FIXME("Unexpectedly empty topology queue.\n"); + return; + } + if (topo_status > session->presentation.topo_status) { + struct queued_topology *topology = LIST_ENTRY(list_head(&session->topologies), struct queued_topology, entry); + param.vt = VT_UNKNOWN; - param.punkVal = (IUnknown *)session->presentation.current_topology; + param.punkVal = (IUnknown *)topology->topology; if (FAILED(MFCreateMediaEvent(MESessionTopologyStatus, &GUID_NULL, status, ¶m, &event))) return; @@ -1240,6 +1248,7 @@ static void session_set_topology(struct media_session *session, DWORD flags, IMFTopology *topology) { + IMFTopology *resolved_topology = NULL; HRESULT hr = S_OK; /* Resolve unless claimed to be full. */ @@ -1247,8 +1256,6 @@ { if (!(flags & MFSESSION_SETTOPOLOGY_NORESOLUTION)) { - IMFTopology *resolved_topology = NULL; - hr = session_bind_output_nodes(topology); if (SUCCEEDED(hr)) @@ -1286,27 +1293,27 @@ /* With no current topology set it right away, otherwise queue. */ if (topology) { - if (session->presentation.topo_status == MF_TOPOSTATUS_INVALID) - { - hr = session_set_current_topology(session, topology); - } - else + struct queued_topology *queued_topology; + + if ((queued_topology = heap_alloc_zero(sizeof(*queued_topology)))) { - struct queued_topology *queued_topology; + queued_topology->topology = topology; + IMFTopology_AddRef(queued_topology->topology); - if ((queued_topology = heap_alloc_zero(sizeof(*queued_topology)))) - { - queued_topology->topology = topology; - IMFTopology_AddRef(queued_topology->topology); + list_add_tail(&session->topologies, &queued_topology->entry); + } - list_add_tail(&session->topologies, &queued_topology->entry); - } + if (session->presentation.topo_status == MF_TOPOSTATUS_INVALID) + { + hr = session_set_current_topology(session, topology); + session_set_topo_status(session, hr, MF_TOPOSTATUS_READY); } } - session_set_topo_status(session, hr, MF_TOPOSTATUS_READY); - LeaveCriticalSection(&session->cs); + + if (resolved_topology) + IMFTopology_Release(resolved_topology); } static HRESULT WINAPI mfsession_QueryInterface(IMFMediaSession *iface, REFIID riid, void **out) diff -Nru wine-development-5.5/dlls/mf/tests/mf.c wine-development-5.6/dlls/mf/tests/mf.c --- wine-development-5.5/dlls/mf/tests/mf.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mf/tests/mf.c 2020-04-10 18:54:32.000000000 +0000 @@ -38,6 +38,9 @@ #include "mfapi.h" #include "mferror.h" #include "mfidl.h" +#include "initguid.h" +#include "mmdeviceapi.h" +#include "audioclient.h" #include "wine/test.h" @@ -2631,14 +2634,21 @@ static void test_sar(void) { + IMFPresentationClock *present_clock, *present_clock2; + IMFMediaTypeHandler *handler, *handler2; IMFPresentationTimeSource *time_source; + IMFMediaType *mediatype, *mediatype2; IMFClockStateSink *state_sink; IMFMediaSink *sink, *sink2; + IMFStreamSink *stream_sink; + IMFAttributes *attributes; + DWORD id, flags, count; IMFActivate *activate; MFCLOCK_STATE state; IMFClock *clock; - DWORD flags; + IUnknown *unk; HRESULT hr; + GUID guid; hr = CoInitialize(NULL); ok(hr == S_OK, "Failed to initialize, hr %#x.\n", hr); @@ -2650,15 +2660,20 @@ CoUninitialize(); return; } - -todo_wine ok(hr == S_OK, "Failed to create renderer, hr %#x.\n", hr); -if (SUCCEEDED(hr)) -{ + hr = MFStartup(MF_VERSION, MFSTARTUP_FULL); + ok(hr == S_OK, "Startup failure, hr %#x.\n", hr); + + hr = MFCreatePresentationClock(&present_clock); + ok(hr == S_OK, "Failed to create presentation clock, hr %#x.\n", hr); + hr = IMFMediaSink_QueryInterface(sink, &IID_IMFPresentationTimeSource, (void **)&time_source); +todo_wine ok(hr == S_OK, "Failed to get time source interface, hr %#x.\n", hr); +if (SUCCEEDED(hr)) +{ hr = IMFPresentationTimeSource_GetUnderlyingClock(time_source, &clock); ok(hr == MF_E_NO_CLOCK, "Unexpected hr %#x.\n", hr); @@ -2679,19 +2694,224 @@ IMFClockStateSink_Release(state_sink); IMFPresentationTimeSource_Release(time_source); +} + hr = IMFMediaSink_AddStreamSink(sink, 123, NULL, &stream_sink); + ok(hr == MF_E_STREAMSINKS_FIXED, "Unexpected hr %#x.\n", hr); - IMFMediaSink_Release(sink); + hr = IMFMediaSink_RemoveStreamSink(sink, 0); + ok(hr == MF_E_STREAMSINKS_FIXED, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaSink_GetStreamSinkCount(sink, NULL); + ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaSink_GetStreamSinkCount(sink, &count); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(count == 1, "Unexpected count %u.\n", count); + + hr = IMFMediaSink_GetCharacteristics(sink, &flags); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(flags == (MEDIASINK_FIXED_STREAMS | MEDIASINK_CAN_PREROLL), "Unexpected flags %#x.\n", flags); + + hr = IMFMediaSink_QueryInterface(sink, &IID_IMFMediaSinkPreroll, (void **)&unk); + ok(hr == S_OK, "Failed to get interface, hr %#x.\n", hr); + IUnknown_Release(unk); + + /* Events */ + hr = IMFMediaSink_QueryInterface(sink, &IID_IMFMediaEventGenerator, (void **)&unk); + ok(hr == S_OK, "Failed to get interface, hr %#x.\n", hr); + IUnknown_Release(unk); + + /* Clock */ + hr = IMFMediaSink_QueryInterface(sink, &IID_IMFClockStateSink, (void **)&unk); + ok(hr == S_OK, "Failed to get interface, hr %#x.\n", hr); + IUnknown_Release(unk); + + hr = IMFMediaSink_SetPresentationClock(sink, NULL); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaSink_SetPresentationClock(sink, present_clock); +todo_wine + ok(hr == MF_E_CLOCK_NO_TIME_SOURCE, "Unexpected hr %#x.\n", hr); + + hr = MFCreateSystemTimeSource(&time_source); + ok(hr == S_OK, "Failed to create time source, hr %#x.\n", hr); + + hr = IMFPresentationClock_SetTimeSource(present_clock, time_source); + ok(hr == S_OK, "Failed to set time source, hr %#x.\n", hr); + IMFPresentationTimeSource_Release(time_source); + + hr = IMFMediaSink_SetPresentationClock(sink, present_clock); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaSink_GetPresentationClock(sink, NULL); + ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaSink_GetPresentationClock(sink, &present_clock2); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(present_clock == present_clock2, "Unexpected instance.\n"); + IMFPresentationClock_Release(present_clock2); + + /* Stream */ + hr = IMFMediaSink_GetStreamSinkByIndex(sink, 0, &stream_sink); + ok(hr == S_OK, "Failed to get a stream, hr %#x.\n", hr); + + hr = IMFStreamSink_GetIdentifier(stream_sink, &id); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(!id, "Unexpected id.\n"); + + hr = IMFStreamSink_GetMediaSink(stream_sink, &sink2); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(sink == sink2, "Unexpected object.\n"); + IMFMediaSink_Release(sink2); + + hr = IMFStreamSink_GetMediaTypeHandler(stream_sink, &handler); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFStreamSink_QueryInterface(stream_sink, &IID_IMFMediaTypeHandler, (void **)&handler2); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(handler2 == handler, "Unexpected instance.\n"); + IMFMediaTypeHandler_Release(handler2); + + hr = IMFMediaTypeHandler_GetMajorType(handler, &guid); + ok(hr == S_OK, "Failed to get major type, hr %#x.\n", hr); + ok(IsEqualGUID(&guid, &MFMediaType_Audio), "Unexpected type %s.\n", wine_dbgstr_guid(&guid)); + + count = 0; + hr = IMFMediaTypeHandler_GetMediaTypeCount(handler, &count); +todo_wine { + ok(hr == S_OK, "Failed to get type count, hr %#x.\n", hr); + ok(!!count, "Unexpected type count %u.\n", count); +} + +if (SUCCEEDED(hr)) +{ + hr = IMFMediaTypeHandler_GetCurrentMediaType(handler, &mediatype); + ok(hr == MF_E_NOT_INITIALIZED, "Unexpected hr %#x.\n", hr); + + hr = MFCreateMediaType(&mediatype); + ok(hr == S_OK, "Failed to create media type, hr %#x.\n", hr); + + hr = IMFMediaTypeHandler_IsMediaTypeSupported(handler, mediatype, NULL); + ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#x.\n", hr); + + IMFMediaType_SetGUID(mediatype, &MF_MT_MAJOR_TYPE, &MFMediaType_Audio); + hr = IMFMediaTypeHandler_IsMediaTypeSupported(handler, mediatype, NULL); + ok(hr == MF_E_INVALIDMEDIATYPE, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaTypeHandler_SetCurrentMediaType(handler, mediatype); + ok(hr == MF_E_INVALIDMEDIATYPE, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaTypeHandler_GetMediaTypeByIndex(handler, 0, &mediatype2); + ok(hr == S_OK, "Failed to get media type, hr %#x.\n", hr); + + hr = IMFMediaTypeHandler_IsMediaTypeSupported(handler, mediatype2, NULL); + ok(hr == MF_E_INVALIDMEDIATYPE, "Unexpected hr %#x.\n", hr); + + IMFMediaType_Release(mediatype); + + hr = IMFMediaTypeHandler_SetCurrentMediaType(handler, mediatype2); + ok(hr == S_OK, "Failed to set current type, hr %#x.\n", hr); + + hr = IMFMediaTypeHandler_GetCurrentMediaType(handler, &mediatype); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(mediatype == mediatype2, "Unexpected instance.\n"); + IMFMediaType_Release(mediatype); + + IMFMediaType_Release(mediatype2); + + /* Set partial type. */ + hr = MFCreateMediaType(&mediatype); + ok(hr == S_OK, "Failed to create media type, hr %#x.\n", hr); + + hr = IMFMediaType_GetGUID(mediatype2, &MF_MT_SUBTYPE, &guid); + ok(hr == S_OK, "Failed to get attribute, hr %#x.\n", hr); + + hr = IMFMediaType_SetGUID(mediatype, &MF_MT_MAJOR_TYPE, &MFMediaType_Audio); + ok(hr == S_OK, "Failed to set attribute, hr %#x.\n", hr); + + hr = IMFMediaType_SetGUID(mediatype, &MF_MT_SUBTYPE, &guid); + ok(hr == S_OK, "Failed to set attribute, hr %#x.\n", hr); + + hr = IMFMediaTypeHandler_SetCurrentMediaType(handler, mediatype); + ok(hr == S_OK, "Failed to set current type, hr %#x.\n", hr); + + hr = IMFMediaTypeHandler_GetCurrentMediaType(handler, &mediatype2); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(mediatype == mediatype2, "Unexpected instance.\n"); + IMFMediaType_Release(mediatype2); + + hr = IMFMediaType_GetCount(mediatype, &count); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(count == 2, "Unexpected attribute count %u.\n", count); + + IMFMediaType_Release(mediatype); + + /* Reset back to uninitialized state. */ + hr = IMFMediaTypeHandler_SetCurrentMediaType(handler, NULL); + ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr); + + IMFMediaTypeHandler_Release(handler); } + IMFStreamSink_Release(stream_sink); + + /* Volume control */ + hr = MFGetService((IUnknown *)sink, &MR_POLICY_VOLUME_SERVICE, &IID_IMFSimpleAudioVolume, (void **)&unk); + ok(hr == S_OK, "Failed to get interface, hr %#x.\n", hr); + IUnknown_Release(unk); + + hr = MFGetService((IUnknown *)sink, &MR_STREAM_VOLUME_SERVICE, &IID_IMFAudioStreamVolume, (void **)&unk); + ok(hr == S_OK, "Failed to get interface, hr %#x.\n", hr); + IUnknown_Release(unk); + + hr = MFGetService((IUnknown *)sink, &MR_AUDIO_POLICY_SERVICE, &IID_IMFAudioPolicy, (void **)&unk); +todo_wine + ok(hr == MF_E_NOT_INITIALIZED, "Failed to get interface, hr %#x.\n", hr); + if (SUCCEEDED(hr)) + IUnknown_Release(unk); + + /* Shutdown */ + hr = IMFMediaSink_Shutdown(sink); + ok(hr == S_OK, "Failed to shut down, hr %#x.\n", hr); + + hr = IMFMediaSink_Shutdown(sink); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaSink_AddStreamSink(sink, 123, NULL, &stream_sink); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaSink_RemoveStreamSink(sink, 0); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaSink_GetStreamSinkCount(sink, NULL); + ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaSink_GetStreamSinkCount(sink, &count); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaSink_GetCharacteristics(sink, &flags); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaSink_SetPresentationClock(sink, NULL); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaSink_SetPresentationClock(sink, present_clock); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaSink_GetPresentationClock(sink, NULL); + ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaSink_GetPresentationClock(sink, &present_clock2); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); + + IMFMediaSink_Release(sink); + /* Activation */ hr = MFCreateAudioRendererActivate(&activate); ok(hr == S_OK, "Failed to create activation object, hr %#x.\n", hr); hr = IMFActivate_ActivateObject(activate, &IID_IMFMediaSink, (void **)&sink); -todo_wine ok(hr == S_OK, "Failed to activate, hr %#x.\n", hr); -if (hr == S_OK) -{ hr = IMFActivate_ActivateObject(activate, &IID_IMFMediaSink, (void **)&sink2); ok(hr == S_OK, "Failed to activate, hr %#x.\n", hr); ok(sink == sink2, "Unexpected instance.\n"); @@ -2704,6 +2924,7 @@ ok(hr == S_OK, "Failed to shut down, hr %#x.\n", hr); hr = IMFMediaSink_GetCharacteristics(sink, &flags); +todo_wine ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); IMFMediaSink_Release(sink); @@ -2712,15 +2933,46 @@ ok(hr == S_OK, "Failed to activate, hr %#x.\n", hr); hr = IMFMediaSink_GetCharacteristics(sink, &flags); +todo_wine ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); IMFMediaSink_Release(sink); hr = IMFActivate_DetachObject(activate); ok(hr == E_NOTIMPL, "Unexpected hr %#x.\n", hr); -} + IMFActivate_Release(activate); + IMFPresentationClock_Release(present_clock); + + hr = MFShutdown(); + ok(hr == S_OK, "Shutdown failure, hr %#x.\n", hr); + + /* SAR attributes */ + hr = MFCreateAttributes(&attributes, 0); + ok(hr == S_OK, "Failed to create attributes, hr %#x.\n", hr); + + /* Specify role. */ + hr = IMFAttributes_SetUINT32(attributes, &MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE, eMultimedia); + ok(hr == S_OK, "Failed to set attribute, hr %#x.\n", hr); + + hr = MFCreateAudioRenderer(attributes, &sink); + ok(hr == S_OK, "Failed to create a sink, hr %#x.\n", hr); + IMFMediaSink_Release(sink); + + /* Invalid endpoint. */ + hr = IMFAttributes_SetString(attributes, &MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID, L"endpoint"); + ok(hr == S_OK, "Failed to set attribute, hr %#x.\n", hr); + + hr = MFCreateAudioRenderer(attributes, &sink); + ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr); + + hr = IMFAttributes_DeleteItem(attributes, &MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE); + ok(hr == S_OK, "Failed to remove attribute, hr %#x.\n", hr); + + hr = MFCreateAudioRenderer(attributes, &sink); + ok(hr == MF_E_NO_AUDIO_PLAYBACK_DEVICE, "Failed to create a sink, hr %#x.\n", hr); + CoUninitialize(); } diff -Nru wine-development-5.5/dlls/mfplat/buffer.c wine-development-5.6/dlls/mfplat/buffer.c --- wine-development-5.5/dlls/mfplat/buffer.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mfplat/buffer.c 2020-04-10 18:54:32.000000000 +0000 @@ -1211,7 +1211,8 @@ } } - IMFMediaBuffer_SetCurrentLength(buffer, dst_current_length); + if (FAILED(IMFMediaBuffer_SetCurrentLength(buffer, dst_current_length))) + WARN("Failed to set buffer length.\n"); if (locked) IMFMediaBuffer_Unlock(buffer); diff -Nru wine-development-5.5/dlls/mfplat/main.c wine-development-5.6/dlls/mfplat/main.c --- wine-development-5.5/dlls/mfplat/main.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mfplat/main.c 2020-04-10 18:54:32.000000000 +0000 @@ -1647,6 +1647,7 @@ X(MF_TOPOLOGY_ENUMERATE_SOURCE_TYPES), X(MF_MT_VIDEO_NO_FRAME_ORDERING), X(MF_MT_VIDEO_CHROMA_SITING), + X(MF_AUDIO_RENDERER_ATTRIBUTE_STREAM_CATEGORY), X(MFSampleExtension_3DVideo_SampleFormat), X(MF_MT_H264_RESOLUTION_SCALING), X(MF_MT_MPEG2_LEVEL), @@ -1749,6 +1750,7 @@ X(MF_MT_SPATIAL_AUDIO_OBJECT_METADATA_FORMAT_ID), X(MF_SAMPLEGRABBERSINK_IGNORE_CLOCK), X(MF_MT_PAN_SCAN_ENABLED), + X(MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID), X(MF_MT_DV_VAUX_CTRL_PACK), X(MFSampleExtension_ForwardedDecodeUnitType), X(MF_MT_AUDIO_AVG_BYTES_PER_SECOND), @@ -1782,6 +1784,8 @@ X(MF_TOPOLOGY_RESOLUTION_STATUS), X(MF_MT_ORIGINAL_4CC), X(MF_PD_AUDIO_ISVARIABLEBITRATE), + X(MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS), + X(MF_AUDIO_RENDERER_ATTRIBUTE_SESSION_ID), X(MF_MT_MPEG2_CONTENT_PACKET), X(MFT_PROCESS_LOCAL_Attribute), X(MFT_PROCESS_LOCAL_Attribute), @@ -1830,6 +1834,7 @@ X(MFT_FIELDOFUSE_UNLOCK_Attribute), X(MF_TOPONODE_ERROR_SUBTYPE), X(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE), + X(MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE), X(MF_MT_VIDEO_3D_LEFT_IS_BASE), X(MF_TOPONODE_WORKQUEUE_MMCSS_TASKID), #undef X @@ -8058,15 +8063,35 @@ LONGLONG start_offset) { struct system_time_source *source = impl_from_IMFClockStateSink(iface); + MFCLOCK_STATE state; HRESULT hr; TRACE("%p, %s, %s.\n", iface, debugstr_time(system_time), debugstr_time(start_offset)); EnterCriticalSection(&source->cs); + state = source->state; if (SUCCEEDED(hr = system_time_source_change_state(source, CLOCK_CMD_START))) { system_time_source_apply_rate(source, &system_time); - source->start_offset = -system_time + start_offset; + if (start_offset == PRESENTATION_CURRENT_POSITION) + { + switch (state) + { + case MFCLOCK_STATE_RUNNING: + break; + case MFCLOCK_STATE_PAUSED: + source->start_offset -= system_time; + break; + default: + source->start_offset = -system_time; + break; + ; + } + } + else + { + source->start_offset = -system_time + start_offset; + } } LeaveCriticalSection(&source->cs); diff -Nru wine-development-5.5/dlls/mfplat/mediatype.c wine-development-5.6/dlls/mfplat/mediatype.c --- wine-development-5.5/dlls/mfplat/mediatype.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mfplat/mediatype.c 2020-04-10 18:54:32.000000000 +0000 @@ -2089,3 +2089,82 @@ return S_OK; } + +static void mediatype_set_uint32(IMFMediaType *mediatype, const GUID *attr, unsigned int value, HRESULT *hr) +{ + if (SUCCEEDED(*hr)) + *hr = IMFMediaType_SetUINT32(mediatype, attr, value); +} + +static void mediatype_set_guid(IMFMediaType *mediatype, const GUID *attr, const GUID *value, HRESULT *hr) +{ + if (SUCCEEDED(*hr)) + *hr = IMFMediaType_SetGUID(mediatype, attr, value); +} + +/*********************************************************************** + * MFInitMediaTypeFromWaveFormatEx (mfplat.@) + */ +HRESULT WINAPI MFInitMediaTypeFromWaveFormatEx(IMFMediaType *mediatype, const WAVEFORMATEX *format, UINT32 size) +{ + const WAVEFORMATEXTENSIBLE *wfex = (const WAVEFORMATEXTENSIBLE *)format; + GUID subtype; + HRESULT hr; + + TRACE("%p, %p, %u.\n", mediatype, format, size); + + if (!mediatype || !format) + return E_POINTER; + + if (format->cbSize && format->cbSize < sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX)) + return E_INVALIDARG; + + if (format->cbSize + sizeof(*format) > size) + return E_INVALIDARG; + + hr = IMFMediaType_DeleteAllItems(mediatype); + + mediatype_set_guid(mediatype, &MF_MT_MAJOR_TYPE, &MFMediaType_Audio, &hr); + + if (format->wFormatTag == WAVE_FORMAT_EXTENSIBLE) + { + mediatype_set_guid(mediatype, &MF_MT_SUBTYPE, &wfex->SubFormat, &hr); + + if (wfex->dwChannelMask) + mediatype_set_uint32(mediatype, &MF_MT_AUDIO_CHANNEL_MASK, wfex->dwChannelMask, &hr); + + if (format->wBitsPerSample && wfex->Samples.wValidBitsPerSample) + mediatype_set_uint32(mediatype, &MF_MT_AUDIO_VALID_BITS_PER_SAMPLE, wfex->Samples.wValidBitsPerSample, &hr); + } + else + { + memcpy(&subtype, &MFAudioFormat_Base, sizeof(subtype)); + subtype.Data1 = format->wFormatTag; + mediatype_set_guid(mediatype, &MF_MT_SUBTYPE, &subtype, &hr); + + mediatype_set_uint32(mediatype, &MF_MT_AUDIO_PREFER_WAVEFORMATEX, 1, &hr); + } + + if (format->nChannels) + mediatype_set_uint32(mediatype, &MF_MT_AUDIO_NUM_CHANNELS, format->nChannels, &hr); + + if (format->nSamplesPerSec) + mediatype_set_uint32(mediatype, &MF_MT_AUDIO_SAMPLES_PER_SECOND, format->nSamplesPerSec, &hr); + + if (format->nAvgBytesPerSec) + mediatype_set_uint32(mediatype, &MF_MT_AUDIO_AVG_BYTES_PER_SECOND, format->nAvgBytesPerSec, &hr); + + if (format->nBlockAlign) + mediatype_set_uint32(mediatype, &MF_MT_AUDIO_BLOCK_ALIGNMENT, format->nBlockAlign, &hr); + + if (format->wBitsPerSample) + mediatype_set_uint32(mediatype, &MF_MT_AUDIO_BITS_PER_SAMPLE, format->wBitsPerSample, &hr); + + if (IsEqualGUID(&subtype, &MFAudioFormat_PCM) || + IsEqualGUID(&subtype, &MFAudioFormat_Float)) + { + mediatype_set_uint32(mediatype, &MF_MT_ALL_SAMPLES_INDEPENDENT, 1, &hr); + } + + return hr; +} diff -Nru wine-development-5.5/dlls/mfplat/mfplat.spec wine-development-5.6/dlls/mfplat/mfplat.spec --- wine-development-5.5/dlls/mfplat/mfplat.spec 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mfplat/mfplat.spec 2020-04-10 18:54:32.000000000 +0000 @@ -24,6 +24,7 @@ @ stdcall MFBeginCreateFile(long long long wstr ptr ptr ptr) @ stub MFBeginGetHostByName @ stub MFBeginRegisterWorkQueueWithMMCSS +@ stdcall MFBeginRegisterWorkQueueWithMMCSSEx(long wstr long long ptr ptr) rtworkq.RtwqBeginRegisterWorkQueueWithMMCSS @ stub MFBeginUnregisterWorkQueueWithMMCSS @ stub MFBlockThread @ stub MFCalculateBitmapImageSize @@ -107,8 +108,9 @@ @ stdcall MFGetSystemTime() @ stdcall MFGetTimerPeriodicity(ptr) @ stub MFGetUncompressedVideoFormat -@ stub MFGetWorkQueueMMCSSClass -@ stub MFGetWorkQueueMMCSSTaskId +@ stdcall MFGetWorkQueueMMCSSClass(long ptr ptr) rtworkq.RtwqGetWorkQueueMMCSSClass +@ stdcall MFGetWorkQueueMMCSSTaskId(long ptr) rtworkq.RtwqGetWorkQueueMMCSSTaskId +@ stdcall MFGetWorkQueueMMCSSPriority(long ptr) rtworkq.RtwqGetWorkQueueMMCSSPriority @ stdcall MFHeapAlloc(long long str long long) @ stdcall MFHeapFree(ptr) @ stub MFInitAMMediaTypeFromMFMediaType @@ -119,11 +121,12 @@ @ stub MFInitMediaTypeFromMPEG2VideoInfo @ stub MFInitMediaTypeFromVideoInfoHeader2 @ stub MFInitMediaTypeFromVideoInfoHeader -@ stub MFInitMediaTypeFromWaveFormatEx +@ stdcall MFInitMediaTypeFromWaveFormatEx(ptr ptr long) @ stub MFInitVideoFormat @ stub MFInitVideoFormat_RGB @ stdcall MFInvokeCallback(ptr) @ stub MFJoinIoPort +@ stdcall MFJoinWorkQueue(long long ptr) rtworkq.RtwqJoinWorkQueue @ stdcall MFLockPlatform() rtworkq.RtwqLockPlatform @ stdcall MFLockWorkQueue(long) rtworkq.RtwqLockWorkQueue @ stdcall MFPutWaitingWorkItem(long long ptr ptr) rtworkq.RtwqPutWaitingWorkItem @@ -134,9 +137,10 @@ @ stub MFRecordError @ stdcall MFRegisterLocalByteStreamHandler(wstr wstr ptr) @ stdcall MFRegisterLocalSchemeHandler(wstr ptr) +@ stdcall MFRegisterPlatformWithMMCSS(wstr ptr long) rtworkq.RtwqRegisterPlatformWithMMCSS @ stdcall MFRemovePeriodicCallback(long) rtworkq.RtwqRemovePeriodicCallback @ stdcall MFScheduleWorkItem(ptr ptr int64 ptr) -@ stdcall MFScheduleWorkItemEx(ptr int64 ptr) +@ stdcall MFScheduleWorkItemEx(ptr int64 ptr) rtworkq.RtwqScheduleWorkItem @ stub MFSerializeAttributesToStream @ stub MFSerializeEvent @ stub MFSerializeMediaTypeToStream @@ -155,9 +159,11 @@ @ stdcall MFTUnregister(int128) @ stdcall MFTUnregisterLocal(ptr) @ stdcall MFTUnregisterLocalByCLSID(int128) +@ stdcall MFUnregisterPlatformFromMMCSS() rtworkq.RtwqUnregisterPlatformFromMMCSS @ stub MFTraceError @ stub MFTraceFuncEnter @ stub MFUnblockThread +@ stdcall MFUnjoinWorkQueue(long long) rtworkq.RtwqUnjoinWorkQueue @ stdcall MFUnlockPlatform() rtworkq.RtwqUnlockPlatform @ stdcall MFUnlockWorkQueue(long) rtworkq.RtwqUnlockWorkQueue @ stdcall MFUnwrapMediaType(ptr ptr) diff -Nru wine-development-5.5/dlls/mfplat/queue.c wine-development-5.6/dlls/mfplat/queue.c --- wine-development-5.5/dlls/mfplat/queue.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mfplat/queue.c 2020-04-10 18:54:32.000000000 +0000 @@ -120,16 +120,6 @@ } /*********************************************************************** - * MFScheduleWorkItemEx (mfplat.@) - */ -HRESULT WINAPI MFScheduleWorkItemEx(IMFAsyncResult *result, INT64 timeout, MFWORKITEM_KEY *key) -{ - TRACE("%p, %s, %p.\n", result, wine_dbgstr_longlong(timeout), key); - - return RtwqScheduleWorkItem((IRtwqAsyncResult *)result, timeout, key); -} - -/*********************************************************************** * MFInvokeCallback (mfplat.@) */ HRESULT WINAPI MFInvokeCallback(IMFAsyncResult *result) diff -Nru wine-development-5.5/dlls/mfplat/tests/mfplat.c wine-development-5.6/dlls/mfplat/tests/mfplat.c --- wine-development-5.5/dlls/mfplat/tests/mfplat.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mfplat/tests/mfplat.c 2020-04-10 18:54:32.000000000 +0000 @@ -42,6 +42,8 @@ #include "initguid.h" #include "d3d11_4.h" #include "d3d9types.h" +#include "ks.h" +#include "ksmedia.h" DEFINE_GUID(DUMMY_CLSID, 0x12345678,0x1234,0x1234,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19); DEFINE_GUID(DUMMY_GUID1, 0x12345678,0x1234,0x1234,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21); @@ -76,8 +78,6 @@ static HRESULT (WINAPI *pMFCreateDXGIDeviceManager)(UINT *token, IMFDXGIDeviceManager **manager); static HRESULT (WINAPI *pMFCreateSourceResolver)(IMFSourceResolver **resolver); static HRESULT (WINAPI *pMFCreateMFByteStreamOnStream)(IStream *stream, IMFByteStream **bytestream); -static void* (WINAPI *pMFHeapAlloc)(SIZE_T size, ULONG flags, char *file, int line, EAllocationType type); -static void (WINAPI *pMFHeapFree)(void *p); static HRESULT (WINAPI *pMFPutWaitingWorkItem)(HANDLE event, LONG priority, IMFAsyncResult *result, MFWORKITEM_KEY *key); static HRESULT (WINAPI *pMFAllocateSerialWorkQueue)(DWORD queue, DWORD *serial_queue); static HRESULT (WINAPI *pMFAddPeriodicCallback)(MFPERIODICCALLBACK callback, IUnknown *context, DWORD *key); @@ -678,8 +678,6 @@ X(MFCreateTransformActivate); X(MFGetPlaneSize); X(MFGetStrideForBitmapInfoHeader); - X(MFHeapAlloc); - X(MFHeapFree); X(MFPutWaitingWorkItem); X(MFRegisterLocalByteStreamHandler); X(MFRegisterLocalSchemeHandler); @@ -2483,16 +2481,10 @@ { void *res; - if (!pMFHeapAlloc) - { - win_skip("MFHeapAlloc() is not available.\n"); - return; - } - - res = pMFHeapAlloc(16, 0, NULL, 0, eAllocationTypeIgnore); + res = MFHeapAlloc(16, 0, NULL, 0, eAllocationTypeIgnore); ok(res != NULL, "MFHeapAlloc failed.\n"); - pMFHeapFree(res); + MFHeapFree(res); } static void test_scheduled_items(void) @@ -3127,7 +3119,6 @@ hr = IMFPresentationTimeSource_GetCorrelatedTime(time_source, 0, &time, &systime); ok(hr == S_OK, "Failed to get time %#x.\n", hr); ok(time == 0, "Unexpected time stamp %s, %s.\n", wine_dbgstr_longlong(time), wine_dbgstr_longlong(systime)); - IMFClockStateSink_Release(statesink); hr = IMFClockStateSink_OnClockStart(statesink, 10, 0); ok(hr == S_OK, "Failed to start source, hr %#x.\n", hr); @@ -3172,6 +3163,114 @@ ok(time == -6, "Unexpected time stamp %s, %s.\n", wine_dbgstr_longlong(time), wine_dbgstr_longlong(systime)); + IMFClockStateSink_Release(statesink); + IMFPresentationTimeSource_Release(time_source); + + /* PRESENTATION_CURRENT_POSITION */ + hr = MFCreateSystemTimeSource(&time_source); + ok(hr == S_OK, "Failed to create time source, hr %#x.\n", hr); + + hr = IMFPresentationTimeSource_QueryInterface(time_source, &IID_IMFClockStateSink, (void **)&statesink); + ok(hr == S_OK, "Failed to get sink interface, hr %#x.\n", hr); + + hr = IMFPresentationTimeSource_GetCorrelatedTime(time_source, 0, &time, &systime); + ok(hr == S_OK, "Failed to get time %#x.\n", hr); + ok(!time && systime, "Unexpected time stamp %s, %s.\n", wine_dbgstr_longlong(time), + wine_dbgstr_longlong(systime)); + + /* INVALID -> RUNNING */ + hr = IMFClockStateSink_OnClockStart(statesink, 10, PRESENTATION_CURRENT_POSITION); + ok(hr == S_OK, "Failed to start source, hr %#x.\n", hr); + + hr = IMFPresentationTimeSource_GetCorrelatedTime(time_source, 0, &time, &systime); + ok(hr == S_OK, "Failed to get time %#x.\n", hr); + ok(time == systime - 10, "Unexpected time stamp %s, %s.\n", wine_dbgstr_longlong(time), + wine_dbgstr_longlong(systime)); + + /* RUNNING -> RUNNING */ + hr = IMFClockStateSink_OnClockStart(statesink, 20, PRESENTATION_CURRENT_POSITION); + ok(hr == S_OK, "Failed to start source, hr %#x.\n", hr); + + hr = IMFPresentationTimeSource_GetCorrelatedTime(time_source, 0, &time, &systime); + ok(hr == S_OK, "Failed to get time %#x.\n", hr); + ok(time == systime - 10, "Unexpected time stamp %s, %s.\n", wine_dbgstr_longlong(time), + wine_dbgstr_longlong(systime)); + + hr = IMFClockStateSink_OnClockStart(statesink, 0, PRESENTATION_CURRENT_POSITION); + ok(hr == S_OK, "Failed to start source, hr %#x.\n", hr); + + hr = IMFPresentationTimeSource_GetCorrelatedTime(time_source, 0, &time, &systime); + ok(hr == S_OK, "Failed to get time %#x.\n", hr); + ok(time == systime - 10, "Unexpected time stamp %s, %s.\n", wine_dbgstr_longlong(time), + wine_dbgstr_longlong(systime)); + + hr = IMFClockStateSink_OnClockStart(statesink, 0, 0); + ok(hr == S_OK, "Failed to start source, hr %#x.\n", hr); + + hr = IMFPresentationTimeSource_GetCorrelatedTime(time_source, 0, &time, &systime); + ok(hr == S_OK, "Failed to get time %#x.\n", hr); + ok(time == systime, "Unexpected time stamp %s, %s.\n", wine_dbgstr_longlong(time), + wine_dbgstr_longlong(systime)); + + hr = IMFClockStateSink_OnClockStart(statesink, 30, PRESENTATION_CURRENT_POSITION); + ok(hr == S_OK, "Failed to start source, hr %#x.\n", hr); + + hr = IMFPresentationTimeSource_GetCorrelatedTime(time_source, 0, &time, &systime); + ok(hr == S_OK, "Failed to get time %#x.\n", hr); + ok(time == systime, "Unexpected time stamp %s, %s.\n", wine_dbgstr_longlong(time), + wine_dbgstr_longlong(systime)); + + /* STOPPED -> RUNNING */ + hr = IMFClockStateSink_OnClockStop(statesink, 567); + ok(hr == S_OK, "Failed to stop source, hr %#x.\n", hr); + + hr = IMFPresentationTimeSource_GetCorrelatedTime(time_source, 0, &time, &systime); + ok(hr == S_OK, "Failed to get time %#x.\n", hr); + ok(!time && systime != 0, "Unexpected time stamp %s, %s.\n", wine_dbgstr_longlong(time), + wine_dbgstr_longlong(systime)); + + hr = IMFClockStateSink_OnClockStart(statesink, 30, PRESENTATION_CURRENT_POSITION); + ok(hr == S_OK, "Failed to start source, hr %#x.\n", hr); + + hr = IMFPresentationTimeSource_GetCorrelatedTime(time_source, 0, &time, &systime); + ok(hr == S_OK, "Failed to get time %#x.\n", hr); + ok(time == systime - 30, "Unexpected time stamp %s, %s.\n", wine_dbgstr_longlong(time), + wine_dbgstr_longlong(systime)); + + /* PAUSED -> RUNNING */ + hr = IMFClockStateSink_OnClockPause(statesink, 8); + ok(hr == S_OK, "Failed to pause source, hr %#x.\n", hr); + + hr = IMFPresentationTimeSource_GetCorrelatedTime(time_source, 0, &time, &systime); + ok(hr == S_OK, "Failed to get time %#x.\n", hr); + ok(time == (-30 + 8) && systime != 0, "Unexpected time stamp %s, %s.\n", wine_dbgstr_longlong(time), + wine_dbgstr_longlong(systime)); + + hr = IMFClockStateSink_OnClockStart(statesink, 40, PRESENTATION_CURRENT_POSITION); + ok(hr == S_OK, "Failed to start source, hr %#x.\n", hr); + + hr = IMFPresentationTimeSource_GetCorrelatedTime(time_source, 0, &time, &systime); + ok(hr == S_OK, "Failed to get time %#x.\n", hr); + ok(time == systime + (-30 + 8 - 40), "Unexpected time stamp %s, %s.\n", wine_dbgstr_longlong(time), + wine_dbgstr_longlong(systime)); + + hr = IMFClockStateSink_OnClockPause(statesink, 7); + ok(hr == S_OK, "Failed to pause source, hr %#x.\n", hr); + + hr = IMFPresentationTimeSource_GetCorrelatedTime(time_source, 0, &time, &systime); + ok(hr == S_OK, "Failed to get time %#x.\n", hr); + ok(time == (-30 + 8 - 40 + 7) && systime != 0, "Unexpected time stamp %s, %s.\n", wine_dbgstr_longlong(time), + wine_dbgstr_longlong(systime)); + + hr = IMFClockStateSink_OnClockStart(statesink, 50, 7); + ok(hr == S_OK, "Failed to start source, hr %#x.\n", hr); + + hr = IMFPresentationTimeSource_GetCorrelatedTime(time_source, 0, &time, &systime); + ok(hr == S_OK, "Failed to get time %#x.\n", hr); + ok(time == systime + (-50 + 7), "Unexpected time stamp %s, %s.\n", wine_dbgstr_longlong(time), + wine_dbgstr_longlong(systime)); + + IMFClockStateSink_Release(statesink); IMFPresentationTimeSource_Release(time_source); } @@ -4987,6 +5086,157 @@ IMFMediaType_Release(media_type); } +static void validate_media_type(IMFMediaType *mediatype, const WAVEFORMATEX *format) +{ + GUID guid, subtype; + UINT32 value; + HRESULT hr; + + hr = IMFMediaType_GetMajorType(mediatype, &guid); + ok(hr == S_OK, "Failed to get major type, hr %#x.\n", hr); + ok(IsEqualGUID(&guid, &MFMediaType_Audio), "Unexpected major type %s.\n", wine_dbgstr_guid(&guid)); + + hr = IMFMediaType_GetGUID(mediatype, &MF_MT_SUBTYPE, &guid); + ok(hr == S_OK, "Failed to get subtype, hr %#x.\n", hr); + + if (format->wFormatTag == WAVE_FORMAT_EXTENSIBLE) + { + const WAVEFORMATEXTENSIBLE *fex = (const WAVEFORMATEXTENSIBLE *)format; + ok(IsEqualGUID(&guid, &fex->SubFormat), "Unexpected subtype %s.\n", wine_dbgstr_guid(&guid)); + + if (fex->dwChannelMask) + { + hr = IMFMediaType_GetUINT32(mediatype, &MF_MT_AUDIO_CHANNEL_MASK, &value); + ok(hr == S_OK, "Failed to get attribute, hr %#x.\n", hr); + ok(value == fex->dwChannelMask, "Unexpected CHANNEL_MASK %#x.\n", value); + } + + if (format->wBitsPerSample && fex->Samples.wValidBitsPerSample) + { + hr = IMFMediaType_GetUINT32(mediatype, &MF_MT_AUDIO_VALID_BITS_PER_SAMPLE, &value); + ok(hr == S_OK, "Failed to get attribute, hr %#x.\n", hr); + ok(value == fex->Samples.wValidBitsPerSample, "Unexpected VALID_BITS_PER_SAMPLE %#x.\n", value); + } + } + else + { + memcpy(&subtype, &MFAudioFormat_Base, sizeof(subtype)); + subtype.Data1 = format->wFormatTag; + ok(IsEqualGUID(&guid, &subtype), "Unexpected subtype %s.\n", wine_dbgstr_guid(&guid)); + + hr = IMFMediaType_GetUINT32(mediatype, &MF_MT_AUDIO_PREFER_WAVEFORMATEX, &value); + ok(hr == S_OK, "Failed to get attribute, hr %#x.\n", hr); + ok(value, "Unexpected value.\n"); + } + + if (format->nChannels) + { + hr = IMFMediaType_GetUINT32(mediatype, &MF_MT_AUDIO_NUM_CHANNELS, &value); + ok(hr == S_OK, "Failed to get attribute, hr %#x.\n", hr); + ok(value == format->nChannels, "Unexpected NUM_CHANNELS %u.\n", value); + } + + if (format->nSamplesPerSec) + { + hr = IMFMediaType_GetUINT32(mediatype, &MF_MT_AUDIO_SAMPLES_PER_SECOND, &value); + ok(hr == S_OK, "Failed to get attribute, hr %#x.\n", hr); + ok(value == format->nSamplesPerSec, "Unexpected SAMPLES_PER_SECOND %u.\n", value); + } + + if (format->nAvgBytesPerSec) + { + hr = IMFMediaType_GetUINT32(mediatype, &MF_MT_AUDIO_AVG_BYTES_PER_SECOND, &value); + ok(hr == S_OK, "Failed to get attribute, hr %#x.\n", hr); + ok(value == format->nAvgBytesPerSec, "Unexpected AVG_BYTES_PER_SECOND %u.\n", value); + } + + if (format->nBlockAlign) + { + hr = IMFMediaType_GetUINT32(mediatype, &MF_MT_AUDIO_BLOCK_ALIGNMENT, &value); + ok(hr == S_OK, "Failed to get attribute, hr %#x.\n", hr); + ok(value == format->nBlockAlign, "Unexpected BLOCK_ALIGNMENT %u.\n", value); + } + + if (format->wBitsPerSample) + { + hr = IMFMediaType_GetUINT32(mediatype, &MF_MT_AUDIO_BITS_PER_SAMPLE, &value); + ok(hr == S_OK, "Failed to get attribute, hr %#x.\n", hr); + ok(value == format->wBitsPerSample, "Unexpected BITS_PER_SAMPLE %u.\n", value); + } + + /* Only set for uncompressed formats. */ + hr = IMFMediaType_GetUINT32(mediatype, &MF_MT_ALL_SAMPLES_INDEPENDENT, &value); + if (IsEqualGUID(&guid, &MFAudioFormat_Float) || + IsEqualGUID(&guid, &MFAudioFormat_PCM)) + { + ok(hr == S_OK, "Failed to get attribute, hr %#x.\n", hr); + ok(value, "Unexpected ALL_SAMPLES_INDEPENDENT value.\n"); + } + else + ok(FAILED(hr), "Unexpected ALL_SAMPLES_INDEPENDENT.\n"); +} + +static void test_MFInitMediaTypeFromWaveFormatEx(void) +{ + static const WAVEFORMATEX waveformatex_tests[] = + { + { WAVE_FORMAT_PCM, 2, 44100, 0, 2, 8 }, + { WAVE_FORMAT_PCM, 2, 44100, 1, 2, 8 }, + { WAVE_FORMAT_PCM, 0, 44100, 0, 0, 0 }, + { WAVE_FORMAT_PCM, 0, 0, 0, 0, 0 }, + { WAVE_FORMAT_IEEE_FLOAT, 2, 44100, 1, 2, 8 }, + { 1234, 0, 0, 0, 0, 0 }, + { WAVE_FORMAT_ALAW }, + { WAVE_FORMAT_CREATIVE_ADPCM }, + { WAVE_FORMAT_MPEGLAYER3 }, + { WAVE_FORMAT_MPEG_ADTS_AAC }, + { WAVE_FORMAT_ALAC }, + { WAVE_FORMAT_AMR_NB }, + { WAVE_FORMAT_AMR_WB }, + { WAVE_FORMAT_AMR_WP }, + { WAVE_FORMAT_DOLBY_AC3_SPDIF }, + { WAVE_FORMAT_DRM }, + { WAVE_FORMAT_DTS }, + { WAVE_FORMAT_FLAC }, + { WAVE_FORMAT_MPEG }, + { WAVE_FORMAT_WMAVOICE9 }, + { WAVE_FORMAT_OPUS }, + { WAVE_FORMAT_WMAUDIO2 }, + { WAVE_FORMAT_WMAUDIO3 }, + { WAVE_FORMAT_WMAUDIO_LOSSLESS }, + { WAVE_FORMAT_WMASPDIF }, + }; + WAVEFORMATEXTENSIBLE waveformatext; + IMFMediaType *mediatype; + unsigned int i; + HRESULT hr; + + hr = MFCreateMediaType(&mediatype); + ok(hr == S_OK, "Failed to create mediatype, hr %#x.\n", hr); + + for (i = 0; i < ARRAY_SIZE(waveformatex_tests); ++i) + { + hr = MFInitMediaTypeFromWaveFormatEx(mediatype, &waveformatex_tests[i], sizeof(waveformatex_tests[i])); + ok(hr == S_OK, "%d: format %#x, failed to initialize media type, hr %#x.\n", i, waveformatex_tests[i].wFormatTag, hr); + + validate_media_type(mediatype, &waveformatex_tests[i]); + + waveformatext.Format = waveformatex_tests[i]; + waveformatext.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE; + waveformatext.Format.cbSize = sizeof(waveformatext) - sizeof(waveformatext.Format); + waveformatext.Samples.wSamplesPerBlock = 123; + waveformatext.dwChannelMask = 0x8; + memcpy(&waveformatext.SubFormat, &MFAudioFormat_Base, sizeof(waveformatext.SubFormat)); + waveformatext.SubFormat.Data1 = waveformatex_tests[i].wFormatTag; + hr = MFInitMediaTypeFromWaveFormatEx(mediatype, &waveformatext.Format, sizeof(waveformatext)); + ok(hr == S_OK, "Failed to initialize media type, hr %#x.\n", hr); + + validate_media_type(mediatype, &waveformatext.Format); + } + + IMFMediaType_Release(mediatype); +} + START_TEST(mfplat) { char **argv; @@ -5041,6 +5291,7 @@ test_MFGetStrideForBitmapInfoHeader(); test_MFCreate2DMediaBuffer(); test_MFCreateMediaBufferFromMediaType(); + test_MFInitMediaTypeFromWaveFormatEx(); CoUninitialize(); } diff -Nru wine-development-5.5/dlls/mfreadwrite/reader.c wine-development-5.6/dlls/mfreadwrite/reader.c --- wine-development-5.5/dlls/mfreadwrite/reader.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mfreadwrite/reader.c 2020-04-10 18:54:32.000000000 +0000 @@ -98,7 +98,10 @@ enum media_stream_flags { - STREAM_FLAG_SAMPLE_REQUESTED = 0x1, + STREAM_FLAG_SAMPLE_REQUESTED = 0x1, /* Protects from making multiple sample requests. */ + STREAM_FLAG_SELECTED = 0x2, /* Mirrors descriptor, used to simplify tests when starting the source. */ + STREAM_FLAG_PRESENTED = 0x4, /* Set if stream was selected last time Start() was called. */ + STREAM_FLAG_REQUESTED_ONCE = 0x8, /* Used for MF_SOURCE_READER_ANY_STREAM in synchronous mode. */ }; struct media_stream @@ -108,19 +111,15 @@ IMFTransform *decoder; DWORD id; unsigned int index; - CRITICAL_SECTION cs; - CONDITION_VARIABLE sample_event; - struct list responses; enum media_stream_state state; - BOOL selected; - BOOL presented; - DWORD flags; + unsigned int flags; unsigned int requests; }; enum source_reader_async_op { SOURCE_READER_ASYNC_READ, + SOURCE_READER_ASYNC_SEEK, SOURCE_READER_ASYNC_FLUSH, SOURCE_READER_ASYNC_SAMPLE_READY, }; @@ -130,8 +129,34 @@ IUnknown IUnknown_iface; LONG refcount; enum source_reader_async_op op; - unsigned int flags; - unsigned int stream_index; + union + { + struct + { + unsigned int flags; + unsigned int stream_index; + } read; + struct + { + GUID format; + PROPVARIANT position; + } seek; + struct + { + unsigned int stream_index; + } flush; + struct + { + unsigned int stream_index; + } sample; + } u; +}; + +enum source_reader_flags +{ + SOURCE_READER_FLUSHING = 0x1, + SOURCE_READER_SEEKING = 0x2, + SOURCE_READER_SHUTDOWN_ON_RELEASE = 0x4, }; struct source_reader @@ -146,11 +171,14 @@ DWORD first_audio_stream_index; DWORD first_video_stream_index; IMFSourceReaderCallback *async_callback; - BOOL shutdown_on_release; + unsigned int flags; enum media_source_state source_state; struct media_stream *streams; DWORD stream_count; + struct list responses; CRITICAL_SECTION cs; + CONDITION_VARIABLE sample_event; + CONDITION_VARIABLE state_event; }; static inline struct source_reader *impl_from_IMFSourceReader(IMFSourceReader *iface) @@ -204,7 +232,11 @@ ULONG refcount = InterlockedIncrement(&command->refcount); if (!refcount) + { + if (command->op == SOURCE_READER_ASYNC_SEEK) + PropVariantClear(&command->u.seek.position); heap_free(command); + } return refcount; } @@ -327,7 +359,7 @@ if (response->sample) IMFSample_AddRef(response->sample); - list_add_tail(&stream->responses, &response->entry); + list_add_tail(&reader->responses, &response->entry); if (stream->requests) { @@ -335,7 +367,7 @@ { if (SUCCEEDED(source_reader_create_async_op(SOURCE_READER_ASYNC_SAMPLE_READY, &command))) { - command->stream_index = stream->index; + command->u.sample.stream_index = stream->index; if (FAILED(hr = MFPutWorkItem(MFASYNC_CALLBACK_QUEUE_STANDARD, &reader->async_commands_callback, &command->IUnknown_iface))) WARN("Failed to submit async result, hr %#x.\n", hr); @@ -343,7 +375,7 @@ } } else - WakeAllConditionVariable(&stream->sample_event); + WakeAllConditionVariable(&reader->sample_event); stream->requests--; } @@ -358,7 +390,9 @@ if (FAILED(hr = IMFMediaStream_RequestSample(stream->stream, NULL))) WARN("Sample request failed, hr %#x.\n", hr); else - stream->flags |= STREAM_FLAG_SAMPLE_REQUESTED; + { + stream->flags |= (STREAM_FLAG_SAMPLE_REQUESTED | STREAM_FLAG_REQUESTED_ONCE); + } } return hr; @@ -386,12 +420,15 @@ return hr; } + EnterCriticalSection(&reader->cs); + for (i = 0; i < reader->stream_count; ++i) { if (id == reader->streams[i].id) { - if (!InterlockedCompareExchangePointer((void **)&reader->streams[i].stream, stream, NULL)) + if (!reader->streams[i].stream) { + reader->streams[i].stream = stream; IMFMediaStream_AddRef(reader->streams[i].stream); if (FAILED(hr = IMFMediaStream_BeginGetEvent(stream, &reader->stream_events_callback, (IUnknown *)stream))) @@ -399,10 +436,8 @@ WARN("Failed to subscribe to stream events, hr %#x.\n", hr); } - EnterCriticalSection(&reader->streams[i].cs); if (reader->streams[i].requests) source_reader_request_sample(reader, &reader->streams[i]); - LeaveCriticalSection(&reader->streams[i].cs); } break; } @@ -411,6 +446,8 @@ if (i == reader->stream_count) WARN("Stream with id %#x was not present in presentation descriptor.\n", id); + LeaveCriticalSection(&reader->cs); + IMFMediaStream_Release(stream); return hr; @@ -418,25 +455,27 @@ static HRESULT source_reader_source_state_handler(struct source_reader *reader, MediaEventType event_type) { - enum media_source_state state; + EnterCriticalSection(&reader->cs); switch (event_type) { case MESourceStarted: - state = SOURCE_STATE_STARTED; + reader->source_state = SOURCE_STATE_STARTED; break; case MESourceStopped: - state = SOURCE_STATE_STOPPED; + reader->source_state = SOURCE_STATE_STOPPED; + break; + case MESourceSeeked: + reader->flags &= ~SOURCE_READER_SEEKING; break; default: - WARN("Unhandled state %d.\n", event_type); - return E_FAIL; + WARN("Unhandled event %d.\n", event_type); } - EnterCriticalSection(&reader->cs); - reader->source_state = state; LeaveCriticalSection(&reader->cs); + WakeAllConditionVariable(&reader->state_event); + return S_OK; } @@ -467,6 +506,7 @@ case MESourceStarted: case MESourcePaused: case MESourceStopped: + case MESourceSeeked: hr = source_reader_source_state_handler(reader, event_type); break; case MEBufferingStarted: @@ -630,21 +670,19 @@ return hr; } + EnterCriticalSection(&reader->cs); + for (i = 0; i < reader->stream_count; ++i) { if (id == reader->streams[i].id) { /* FIXME: propagate processing errors? */ - EnterCriticalSection(&reader->streams[i].cs); - reader->streams[i].flags &= ~STREAM_FLAG_SAMPLE_REQUESTED; hr = source_reader_process_sample(reader, &reader->streams[i], sample); if (reader->streams[i].requests) source_reader_request_sample(reader, &reader->streams[i]); - LeaveCriticalSection(&reader->streams[i].cs); - break; } } @@ -652,6 +690,8 @@ if (i == reader->stream_count) WARN("Stream with id %#x was not present in presentation descriptor.\n", id); + LeaveCriticalSection(&reader->cs); + IMFSample_Release(sample); return hr; @@ -675,14 +715,14 @@ return hr; } + EnterCriticalSection(&reader->cs); + for (i = 0; i < reader->stream_count; ++i) { struct media_stream *stream = &reader->streams[i]; if (id == stream->id) { - EnterCriticalSection(&stream->cs); - switch (event_type) { case MEEndOfStream: @@ -716,12 +756,12 @@ ; } - LeaveCriticalSection(&stream->cs); - break; } } + LeaveCriticalSection(&reader->cs); + return S_OK; } @@ -790,18 +830,33 @@ return IMFSourceReader_Release(&reader->IMFSourceReader_iface); } -static struct stream_response *media_stream_pop_response(struct media_stream *stream) +static struct stream_response *media_stream_pop_response(struct source_reader *reader, struct media_stream *stream) { - struct stream_response *response = NULL; + struct stream_response *response; struct list *head; - if ((head = list_head(&stream->responses))) + if (stream) + { + LIST_FOR_EACH_ENTRY(response, &reader->responses, struct stream_response, entry) + { + if (response->stream_index == stream->index) + { + list_remove(&response->entry); + return response; + } + } + } + else { - response = LIST_ENTRY(head, struct stream_response, entry); - list_remove(&response->entry); + if ((head = list_head(&reader->responses))) + { + response = LIST_ENTRY(head, struct stream_response, entry); + list_remove(&response->entry); + return response; + } } - return response; + return NULL; } static void source_reader_release_response(struct stream_response *response) @@ -824,18 +879,26 @@ static HRESULT source_reader_start_source(struct source_reader *reader) { - BOOL selection_changed = FALSE; + BOOL selected, selection_changed = FALSE; PROPVARIANT position; HRESULT hr = S_OK; - DWORD i; + unsigned int i; + + for (i = 0; i < reader->stream_count; ++i) + { + source_reader_get_stream_selection(reader, i, &selected); + if (selected) + reader->streams[i].flags |= STREAM_FLAG_SELECTED; + else + reader->streams[i].flags &= ~STREAM_FLAG_SELECTED; + } if (reader->source_state == SOURCE_STATE_STARTED) { for (i = 0; i < reader->stream_count; ++i) { - if (FAILED(hr = source_reader_get_stream_selection(reader, i, &reader->streams[i].selected))) - return hr; - selection_changed = reader->streams[i].selected ^ reader->streams[i].presented; + selection_changed = !!(reader->streams[i].flags & STREAM_FLAG_SELECTED) ^ + !!(reader->streams[i].flags & STREAM_FLAG_PRESENTED); if (selection_changed) break; } @@ -850,20 +913,48 @@ if (SUCCEEDED(hr = IMFMediaSource_Start(reader->source, reader->descriptor, &GUID_NULL, &position))) { for (i = 0; i < reader->stream_count; ++i) - reader->streams[i].presented = reader->streams[i].selected; + { + if (reader->streams[i].flags & STREAM_FLAG_SELECTED) + reader->streams[i].flags |= STREAM_FLAG_PRESENTED; + } } } return hr; } +static BOOL source_reader_got_response_for_stream(struct source_reader *reader, struct media_stream *stream) +{ + struct stream_response *response; + + LIST_FOR_EACH_ENTRY(response, &reader->responses, struct stream_response, entry) + { + if (response->stream_index == stream->index) + return TRUE; + } + + return FALSE; +} + static BOOL source_reader_get_read_result(struct source_reader *reader, struct media_stream *stream, DWORD flags, HRESULT *status, DWORD *stream_index, DWORD *stream_flags, LONGLONG *timestamp, IMFSample **sample) { struct stream_response *response = NULL; BOOL request_sample = FALSE; - if (list_empty(&stream->responses)) + if ((response = media_stream_pop_response(reader, stream))) + { + *status = response->status; + *stream_index = stream->index; + *stream_flags = response->stream_flags; + *timestamp = response->timestamp; + *sample = response->sample; + if (*sample) + IMFSample_AddRef(*sample); + + source_reader_release_response(response); + } + else { *status = S_OK; *stream_index = stream->index; @@ -880,25 +971,31 @@ *stream_flags = 0; } } - else - { - response = media_stream_pop_response(stream); - *status = response->status; - *stream_index = stream->index; - *stream_flags = response->stream_flags; - *timestamp = response->timestamp; - *sample = response->sample; - if (*sample) - IMFSample_AddRef(*sample); + return !request_sample; +} - source_reader_release_response(response); +static HRESULT source_reader_get_first_selected_stream(struct source_reader *reader, unsigned int flags, + unsigned int *stream_index) +{ + unsigned int i; + BOOL selected; + + for (i = 0; i < reader->stream_count; ++i) + { + source_reader_get_stream_selection(reader, i, &selected); + if (SUCCEEDED(source_reader_get_stream_selection(reader, i, &selected)) && selected && + !(reader->streams[i].flags & flags)) + { + *stream_index = i; + break; + } } - return request_sample; + return i == reader->stream_count ? MF_E_MEDIA_SOURCE_NO_STREAMS_SELECTED : S_OK; } -static HRESULT source_reader_get_stream_read_index(struct source_reader *reader, DWORD index, DWORD *stream_index) +static HRESULT source_reader_get_stream_read_index(struct source_reader *reader, unsigned int index, unsigned int *stream_index) { BOOL selected; HRESULT hr; @@ -912,8 +1009,18 @@ *stream_index = reader->first_audio_stream_index; break; case MF_SOURCE_READER_ANY_STREAM: - FIXME("Non-specific requests are not supported.\n"); - return E_NOTIMPL; + if (reader->async_callback) + { + /* Pick first selected stream. */ + hr = source_reader_get_first_selected_stream(reader, 0, stream_index); + } + else + { + /* Cycle through all selected streams once, next pick first selected. */ + if (FAILED(hr = source_reader_get_first_selected_stream(reader, STREAM_FLAG_REQUESTED_ONCE, stream_index))) + hr = source_reader_get_first_selected_stream(reader, 0, stream_index); + } + return hr; default: *stream_index = index; } @@ -925,12 +1032,19 @@ return hr; } -static void source_reader_release_responses(struct media_stream *stream) +static void source_reader_release_responses(struct source_reader *reader, struct media_stream *stream) { struct stream_response *ptr, *next; - LIST_FOR_EACH_ENTRY_SAFE(ptr, next, &stream->responses, struct stream_response, entry) + LIST_FOR_EACH_ENTRY_SAFE(ptr, next, &reader->responses, struct stream_response, entry) { + if (stream && stream->index != ptr->stream_index && + ptr->stream_index != MF_SOURCE_READER_FIRST_VIDEO_STREAM && + ptr->stream_index != MF_SOURCE_READER_FIRST_AUDIO_STREAM && + ptr->stream_index != MF_SOURCE_READER_ANY_STREAM) + { + continue; + } list_remove(&ptr->entry); source_reader_release_response(ptr); } @@ -940,52 +1054,53 @@ { struct media_stream *stream = &reader->streams[stream_index]; - EnterCriticalSection(&stream->cs); - - source_reader_release_responses(stream); + source_reader_release_responses(reader, stream); if (stream->decoder) IMFTransform_ProcessMessage(stream->decoder, MFT_MESSAGE_COMMAND_FLUSH, 0); stream->requests = 0; - - LeaveCriticalSection(&stream->cs); } static HRESULT source_reader_flush(struct source_reader *reader, unsigned int index) { unsigned int stream_index; + HRESULT hr = S_OK; - switch (index) + if (index == MF_SOURCE_READER_ALL_STREAMS) { - case MF_SOURCE_READER_FIRST_VIDEO_STREAM: - stream_index = reader->first_video_stream_index; - break; - case MF_SOURCE_READER_FIRST_AUDIO_STREAM: - stream_index = reader->first_audio_stream_index; - break; - case MF_SOURCE_READER_ALL_STREAMS: - for (stream_index = 0; stream_index < reader->stream_count; ++stream_index) - { - source_reader_flush_stream(reader, stream_index); - } - - break; - default: - stream_index = index; + for (stream_index = 0; stream_index < reader->stream_count; ++stream_index) + source_reader_flush_stream(reader, stream_index); } + else + { + switch (index) + { + case MF_SOURCE_READER_FIRST_VIDEO_STREAM: + stream_index = reader->first_video_stream_index; + break; + case MF_SOURCE_READER_FIRST_AUDIO_STREAM: + stream_index = reader->first_audio_stream_index; + break; + default: + stream_index = index; + } - source_reader_flush_stream(reader, stream_index); + if (stream_index < reader->stream_count) + source_reader_flush_stream(reader, stream_index); + else + hr = MF_E_INVALIDSTREAMNUMBER; + } - return S_OK; + return hr; } static HRESULT WINAPI source_reader_async_commands_callback_Invoke(IMFAsyncCallback *iface, IMFAsyncResult *result) { struct source_reader *reader = impl_from_async_commands_callback_IMFAsyncCallback(iface); + struct media_stream *stream, stub_stream = { .requests = 1 }; struct source_reader_async_command *command; struct stream_response *response; DWORD stream_index, stream_flags; - BOOL request_sample = FALSE; - struct media_stream *stream; + BOOL report_sample = FALSE; IMFSample *sample = NULL; LONGLONG timestamp = 0; HRESULT hr, status; @@ -999,29 +1114,32 @@ switch (command->op) { case SOURCE_READER_ASYNC_READ: - if (FAILED(hr = source_reader_get_stream_read_index(reader, command->stream_index, &stream_index))) - return hr; - - stream = &reader->streams[stream_index]; - - EnterCriticalSection(&stream->cs); + EnterCriticalSection(&reader->cs); if (SUCCEEDED(hr = source_reader_start_source(reader))) { - request_sample = source_reader_get_read_result(reader, stream, command->flags, &status, &stream_index, - &stream_flags, ×tamp, &sample); + if (SUCCEEDED(hr = source_reader_get_stream_read_index(reader, command->u.read.stream_index, &stream_index))) + { + stream = &reader->streams[stream_index]; - if (request_sample) + if (!(report_sample = source_reader_get_read_result(reader, stream, command->u.read.flags, &status, + &stream_index, &stream_flags, ×tamp, &sample))) + { + stream->requests++; + source_reader_request_sample(reader, stream); + /* FIXME: set error stream/reader state on request failure */ + } + } + else { - stream->requests++; - source_reader_request_sample(reader, stream); - /* FIXME: set error stream/reader state on request failure */ + stub_stream.index = command->u.read.stream_index; + source_reader_queue_response(reader, &stub_stream, hr, MF_SOURCE_READERF_ERROR, 0, NULL); } } - LeaveCriticalSection(&stream->cs); + LeaveCriticalSection(&reader->cs); - if (!request_sample) + if (report_sample) IMFSourceReaderCallback_OnReadSample(reader->async_callback, status, stream_index, stream_flags, timestamp, sample); @@ -1030,12 +1148,23 @@ break; + case SOURCE_READER_ASYNC_SEEK: + + EnterCriticalSection(&reader->cs); + if (SUCCEEDED(IMFMediaSource_Start(reader->source, reader->descriptor, &command->u.seek.format, + &command->u.seek.position))) + { + reader->flags |= SOURCE_READER_SEEKING; + } + LeaveCriticalSection(&reader->cs); + + break; + case SOURCE_READER_ASYNC_SAMPLE_READY: - stream = &reader->streams[command->stream_index]; - EnterCriticalSection(&stream->cs); - response = media_stream_pop_response(stream); - LeaveCriticalSection(&stream->cs); + EnterCriticalSection(&reader->cs); + response = media_stream_pop_response(reader, NULL); + LeaveCriticalSection(&reader->cs); if (response) { @@ -1046,9 +1175,12 @@ break; case SOURCE_READER_ASYNC_FLUSH: - source_reader_flush(reader, command->stream_index); + EnterCriticalSection(&reader->cs); + source_reader_flush(reader, command->u.flush.stream_index); + reader->flags &= ~SOURCE_READER_FLUSHING; + LeaveCriticalSection(&reader->cs); - IMFSourceReaderCallback_OnFlush(reader->async_callback, command->stream_index); + IMFSourceReaderCallback_OnFlush(reader->async_callback, command->u.flush.stream_index); break; default: ; @@ -1112,7 +1244,7 @@ { if (reader->async_callback) IMFSourceReaderCallback_Release(reader->async_callback); - if (reader->shutdown_on_release) + if (reader->flags & SOURCE_READER_SHUTDOWN_ON_RELEASE) IMFMediaSource_Shutdown(reader->source); if (reader->descriptor) IMFPresentationDescriptor_Release(reader->descriptor); @@ -1128,10 +1260,8 @@ IMFMediaType_Release(stream->current); if (stream->decoder) IMFTransform_Release(stream->decoder); - DeleteCriticalSection(&stream->cs); - - source_reader_release_responses(stream); } + source_reader_release_responses(reader, NULL); heap_free(reader->streams); DeleteCriticalSection(&reader->cs); heap_free(reader); @@ -1161,48 +1291,69 @@ return source_reader_get_stream_selection(reader, index, selected); } -static HRESULT WINAPI src_reader_SetStreamSelection(IMFSourceReader *iface, DWORD index, BOOL selected) +static HRESULT WINAPI src_reader_SetStreamSelection(IMFSourceReader *iface, DWORD index, BOOL selection) { struct source_reader *reader = impl_from_IMFSourceReader(iface); - unsigned int count; - HRESULT hr; + HRESULT hr = S_OK; + BOOL selection_changed = FALSE, selected; + unsigned int i; - TRACE("%p, %#x, %d.\n", iface, index, selected); + TRACE("%p, %#x, %d.\n", iface, index, selection); - switch (index) - { - case MF_SOURCE_READER_FIRST_VIDEO_STREAM: - index = reader->first_video_stream_index; - break; - case MF_SOURCE_READER_FIRST_AUDIO_STREAM: - index = reader->first_audio_stream_index; - break; - case MF_SOURCE_READER_ALL_STREAMS: - if (FAILED(hr = IMFPresentationDescriptor_GetStreamDescriptorCount(reader->descriptor, &count))) - return hr; + selection = !!selection; - for (index = 0; index < count; ++index) + EnterCriticalSection(&reader->cs); + + if (index == MF_SOURCE_READER_ALL_STREAMS) + { + for (i = 0; i < reader->stream_count; ++i) + { + if (!selection_changed) { - if (selected) - IMFPresentationDescriptor_SelectStream(reader->descriptor, index); - else - IMFPresentationDescriptor_DeselectStream(reader->descriptor, index); + source_reader_get_stream_selection(reader, i, &selected); + if (selected ^ selection) + selection_changed = TRUE; } - return S_OK; - default: - ; + if (selection) + IMFPresentationDescriptor_SelectStream(reader->descriptor, i); + else + IMFPresentationDescriptor_DeselectStream(reader->descriptor, i); + } } - - if (selected) - hr = IMFPresentationDescriptor_SelectStream(reader->descriptor, index); else - hr = IMFPresentationDescriptor_DeselectStream(reader->descriptor, index); + { + switch (index) + { + case MF_SOURCE_READER_FIRST_VIDEO_STREAM: + index = reader->first_video_stream_index; + break; + case MF_SOURCE_READER_FIRST_AUDIO_STREAM: + index = reader->first_audio_stream_index; + break; + default: + ; + } - if (FAILED(hr)) - return MF_E_INVALIDSTREAMNUMBER; + source_reader_get_stream_selection(reader, index, &selected); + if (selected ^ selection) + selection_changed = TRUE; - return S_OK; + if (selection) + hr = IMFPresentationDescriptor_SelectStream(reader->descriptor, index); + else + hr = IMFPresentationDescriptor_DeselectStream(reader->descriptor, index); + } + + if (SUCCEEDED(hr) && selection_changed) + { + for (i = 0; i < reader->stream_count; ++i) + reader->streams[i].flags &= ~STREAM_FLAG_REQUESTED_ONCE; + } + + LeaveCriticalSection(&reader->cs); + + return SUCCEEDED(hr) ? S_OK : MF_E_INVALIDSTREAMNUMBER; } static HRESULT source_reader_get_native_media_type(struct source_reader *reader, DWORD index, DWORD type_index, @@ -1510,20 +1661,60 @@ static HRESULT WINAPI src_reader_SetCurrentPosition(IMFSourceReader *iface, REFGUID format, REFPROPVARIANT position) { struct source_reader *reader = impl_from_IMFSourceReader(iface); - DWORD flags; + struct source_reader_async_command *command; + unsigned int i, flags; HRESULT hr; TRACE("%p, %s, %p.\n", iface, debugstr_guid(format), position); - /* FIXME: fail if we got pending samples. */ - if (FAILED(hr = IMFMediaSource_GetCharacteristics(reader->source, &flags))) return hr; if (!(flags & MFMEDIASOURCE_CAN_SEEK)) return MF_E_INVALIDREQUEST; - return IMFMediaSource_Start(reader->source, reader->descriptor, format, position); + EnterCriticalSection(&reader->cs); + + /* Check if we got pending requests. */ + for (i = 0; i < reader->stream_count; ++i) + { + if (reader->streams[i].requests) + { + hr = MF_E_INVALIDREQUEST; + break; + } + } + + if (SUCCEEDED(hr)) + { + if (reader->async_callback) + { + if (SUCCEEDED(hr = source_reader_create_async_op(SOURCE_READER_ASYNC_SEEK, &command))) + { + command->u.seek.format = *format; + PropVariantCopy(&command->u.seek.position, position); + + hr = MFPutWorkItem(MFASYNC_CALLBACK_QUEUE_MULTITHREADED, &reader->async_commands_callback, + &command->IUnknown_iface); + IUnknown_Release(&command->IUnknown_iface); + } + } + else + { + if (SUCCEEDED(IMFMediaSource_Start(reader->source, reader->descriptor, format, position))) + { + reader->flags |= SOURCE_READER_SEEKING; + while (reader->flags & SOURCE_READER_SEEKING) + { + SleepConditionVariableCS(&reader->state_event, &reader->cs, INFINITE); + } + } + } + } + + LeaveCriticalSection(&reader->cs); + + return hr; } static HRESULT source_reader_read_sample(struct source_reader *reader, DWORD index, DWORD flags, DWORD *actual_index, @@ -1532,7 +1723,6 @@ unsigned int actual_index_tmp; struct media_stream *stream; LONGLONG timestamp_tmp; - BOOL request_sample; DWORD stream_index; HRESULT hr = S_OK; @@ -1547,44 +1737,65 @@ if (!actual_index) actual_index = &actual_index_tmp; - if (FAILED(hr = source_reader_get_stream_read_index(reader, index, &stream_index))) + if (SUCCEEDED(hr = source_reader_start_source(reader))) { - *actual_index = index; - *stream_flags = MF_SOURCE_READERF_ERROR; - *timestamp = 0; - return hr; + if (SUCCEEDED(hr = source_reader_get_stream_read_index(reader, index, &stream_index))) + { + *actual_index = stream_index; + + stream = &reader->streams[stream_index]; + + if (!source_reader_get_read_result(reader, stream, flags, &hr, actual_index, stream_flags, + timestamp, sample)) + { + while (!source_reader_got_response_for_stream(reader, stream) && stream->state != STREAM_STATE_EOS) + { + stream->requests++; + if (FAILED(hr = source_reader_request_sample(reader, stream))) + WARN("Failed to request a sample, hr %#x.\n", hr); + SleepConditionVariableCS(&reader->sample_event, &reader->cs, INFINITE); + } + + source_reader_get_read_result(reader, stream, flags, &hr, actual_index, stream_flags, + timestamp, sample); + } + } + else + { + *actual_index = index; + *stream_flags = MF_SOURCE_READERF_ERROR; + *timestamp = 0; + } } - *actual_index = stream_index; + TRACE("Stream %u, got sample %p, flags %#x.\n", *actual_index, *sample, *stream_flags); - stream = &reader->streams[stream_index]; + return hr; +} - EnterCriticalSection(&stream->cs); +static HRESULT source_reader_read_sample_async(struct source_reader *reader, unsigned int index, unsigned int flags, + unsigned int *actual_index, unsigned int *stream_flags, LONGLONG *timestamp, IMFSample **sample) +{ + struct source_reader_async_command *command; + HRESULT hr; - if (SUCCEEDED(hr = source_reader_start_source(reader))) - { - request_sample = source_reader_get_read_result(reader, stream, flags, &hr, actual_index, stream_flags, - timestamp, sample); + if (actual_index || stream_flags || timestamp || sample) + return E_INVALIDARG; - if (request_sample) + if (reader->flags & SOURCE_READER_FLUSHING) + hr = MF_E_NOTACCEPTING; + else + { + if (SUCCEEDED(hr = source_reader_create_async_op(SOURCE_READER_ASYNC_READ, &command))) { - while (list_empty(&stream->responses) && stream->state != STREAM_STATE_EOS) - { - stream->requests++; - if (FAILED(hr = source_reader_request_sample(reader, stream))) - WARN("Failed to request a sample, hr %#x.\n", hr); - SleepConditionVariableCS(&stream->sample_event, &stream->cs, INFINITE); - } + command->u.read.stream_index = index; + command->u.read.flags = flags; - source_reader_get_read_result(reader, stream, flags, &hr, actual_index, stream_flags, - timestamp, sample); + hr = MFPutWorkItem(MFASYNC_CALLBACK_QUEUE_STANDARD, &reader->async_commands_callback, &command->IUnknown_iface); + IUnknown_Release(&command->IUnknown_iface); } } - LeaveCriticalSection(&stream->cs); - - TRACE("Stream %u, got sample %p, flags %#x.\n", *actual_index, *sample, *stream_flags); - return hr; } @@ -1592,27 +1803,60 @@ DWORD *stream_flags, LONGLONG *timestamp, IMFSample **sample) { struct source_reader *reader = impl_from_IMFSourceReader(iface); - struct source_reader_async_command *command; HRESULT hr; TRACE("%p, %#x, %#x, %p, %p, %p, %p\n", iface, index, flags, actual_index, stream_flags, timestamp, sample); - if (reader->async_callback) + EnterCriticalSection(&reader->cs); + + while (reader->flags & SOURCE_READER_SEEKING) { - if (actual_index || stream_flags || timestamp || sample) - return E_INVALIDARG; + SleepConditionVariableCS(&reader->state_event, &reader->cs, INFINITE); + } - if (FAILED(hr = source_reader_create_async_op(SOURCE_READER_ASYNC_READ, &command))) - return hr; + if (reader->async_callback) + hr = source_reader_read_sample_async(reader, index, flags, actual_index, stream_flags, timestamp, sample); + else + hr = source_reader_read_sample(reader, index, flags, actual_index, stream_flags, timestamp, sample); - command->stream_index = index; - command->flags = flags; + LeaveCriticalSection(&reader->cs); - hr = MFPutWorkItem(MFASYNC_CALLBACK_QUEUE_STANDARD, &reader->async_commands_callback, &command->IUnknown_iface); - IUnknown_Release(&command->IUnknown_iface); + return hr; +} + +static HRESULT source_reader_flush_async(struct source_reader *reader, unsigned int index) +{ + struct source_reader_async_command *command; + unsigned int stream_index; + HRESULT hr; + + if (reader->flags & SOURCE_READER_FLUSHING) + return MF_E_INVALIDREQUEST; + + switch (index) + { + case MF_SOURCE_READER_FIRST_VIDEO_STREAM: + stream_index = reader->first_video_stream_index; + break; + case MF_SOURCE_READER_FIRST_AUDIO_STREAM: + stream_index = reader->first_audio_stream_index; + break; + default: + stream_index = index; } - else - hr = source_reader_read_sample(reader, index, flags, actual_index, stream_flags, timestamp, sample); + + reader->flags |= SOURCE_READER_FLUSHING; + + if (stream_index != MF_SOURCE_READER_ALL_STREAMS && stream_index >= reader->stream_count) + return MF_E_INVALIDSTREAMNUMBER; + + if (FAILED(hr = source_reader_create_async_op(SOURCE_READER_ASYNC_FLUSH, &command))) + return hr; + + command->u.flush.stream_index = stream_index; + + hr = MFPutWorkItem(MFASYNC_CALLBACK_QUEUE_STANDARD, &reader->async_commands_callback, &command->IUnknown_iface); + IUnknown_Release(&command->IUnknown_iface); return hr; } @@ -1620,25 +1864,19 @@ static HRESULT WINAPI src_reader_Flush(IMFSourceReader *iface, DWORD index) { struct source_reader *reader = impl_from_IMFSourceReader(iface); - struct source_reader_async_command *command; HRESULT hr; TRACE("%p, %#x.\n", iface, index); - if (reader->async_callback) - { - if (FAILED(hr = source_reader_create_async_op(SOURCE_READER_ASYNC_FLUSH, &command))) - return hr; - - command->stream_index = index; + EnterCriticalSection(&reader->cs); - hr = MFPutWorkItem(MFASYNC_CALLBACK_QUEUE_MULTITHREADED, &reader->async_commands_callback, - &command->IUnknown_iface); - IUnknown_Release(&command->IUnknown_iface); - } + if (reader->async_callback) + hr = source_reader_flush_async(reader, index); else hr = source_reader_flush(reader, index); + LeaveCriticalSection(&reader->cs); + return hr; } @@ -1801,9 +2039,14 @@ object->stream_events_callback.lpVtbl = &stream_events_callback_vtbl; object->async_commands_callback.lpVtbl = &async_commands_callback_vtbl; object->refcount = 1; + list_init(&object->responses); + if (shutdown_on_release) + object->flags |= SOURCE_READER_SHUTDOWN_ON_RELEASE; object->source = source; IMFMediaSource_AddRef(object->source); InitializeCriticalSection(&object->cs); + InitializeConditionVariable(&object->sample_event); + InitializeConditionVariable(&object->state_event); if (FAILED(hr = IMFMediaSource_CreatePresentationDescriptor(object->source, &object->descriptor))) goto failed; @@ -1850,9 +2093,6 @@ break; object->streams[i].index = i; - InitializeCriticalSection(&object->streams[i].cs); - InitializeConditionVariable(&object->streams[i].sample_event); - list_init(&object->streams[i].responses); } if (FAILED(hr)) diff -Nru wine-development-5.5/dlls/mfreadwrite/tests/mfplat.c wine-development-5.6/dlls/mfreadwrite/tests/mfplat.c --- wine-development-5.5/dlls/mfreadwrite/tests/mfplat.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mfreadwrite/tests/mfplat.c 2020-04-10 18:54:32.000000000 +0000 @@ -847,38 +847,49 @@ hr = IMFSourceReader_ReadSample(reader, MF_SOURCE_READER_ANY_STREAM, 0, &actual_index, &stream_flags, ×tamp, &sample); -todo_wine { ok(hr == S_OK, "Failed to get a sample, hr %#x.\n", hr); - if (SUCCEEDED(hr)) + ok(actual_index == 1, "Unexpected stream index %u\n", actual_index); + ok(!stream_flags, "Unexpected stream flags %#x.\n", stream_flags); + ok(timestamp == 123, "Unexpected timestamp.\n"); + ok(!!sample, "Expected sample object.\n"); + IMFSample_Release(sample); + + hr = IMFSourceReader_SetStreamSelection(reader, 0, TRUE); + ok(hr == S_OK, "Failed to select a stream, hr %#x.\n", hr); + + hr = IMFSourceReader_SetStreamSelection(reader, 2, TRUE); + ok(hr == S_OK, "Failed to select a stream, hr %#x.\n", hr); + + for (i = 0; i < 2 * TEST_SOURCE_NUM_STREAMS; ++i) { - ok(actual_index == 1, "Unexpected stream index %u\n", actual_index); + hr = IMFSourceReader_ReadSample(reader, MF_SOURCE_READER_ANY_STREAM, 0, &actual_index, &stream_flags, + ×tamp, &sample); + ok(hr == S_OK, "Failed to get a sample, hr %#x.\n", hr); + ok(actual_index == (i < TEST_SOURCE_NUM_STREAMS ? i : 0), "%d: Unexpected stream index %u\n", + i, actual_index); ok(!stream_flags, "Unexpected stream flags %#x.\n", stream_flags); ok(timestamp == 123, "Unexpected timestamp.\n"); ok(!!sample, "Expected sample object.\n"); IMFSample_Release(sample); } -} - hr = IMFSourceReader_SetStreamSelection(reader, 0, TRUE); + + hr = IMFSourceReader_SetStreamSelection(reader, 0, FALSE); ok(hr == S_OK, "Failed to select a stream, hr %#x.\n", hr); - hr = IMFSourceReader_SetStreamSelection(reader, 2, TRUE); + hr = IMFSourceReader_SetStreamSelection(reader, 0, TRUE); ok(hr == S_OK, "Failed to select a stream, hr %#x.\n", hr); for (i = 0; i < 2 * TEST_SOURCE_NUM_STREAMS; ++i) { hr = IMFSourceReader_ReadSample(reader, MF_SOURCE_READER_ANY_STREAM, 0, &actual_index, &stream_flags, ×tamp, &sample); -todo_wine ok(hr == S_OK, "Failed to get a sample, hr %#x.\n", hr); - if (SUCCEEDED(hr)) - { - ok(actual_index == (i < TEST_SOURCE_NUM_STREAMS ? i : 0), "%d: Unexpected stream index %u\n", - i, actual_index); - ok(!stream_flags, "Unexpected stream flags %#x.\n", stream_flags); - ok(timestamp == 123, "Unexpected timestamp.\n"); - ok(!!sample, "Expected sample object.\n"); - IMFSample_Release(sample); - } + ok(actual_index == (i < TEST_SOURCE_NUM_STREAMS ? i : 0), "%d: Unexpected stream index %u\n", + i, actual_index); + ok(!stream_flags, "Unexpected stream flags %#x.\n", stream_flags); + ok(timestamp == 123, "Unexpected timestamp.\n"); + ok(!!sample, "Expected sample object.\n"); + IMFSample_Release(sample); } IMFSourceReader_Release(reader); @@ -951,6 +962,13 @@ hr = IMFSourceReader_ReadSample(reader, 0, 0, NULL, NULL, NULL, &sample); ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr); + /* Flush() arguments validation. */ + hr = IMFSourceReader_Flush(reader, 123); + ok(hr == MF_E_INVALIDSTREAMNUMBER, "Unexpected hr %#x.\n", hr); + + hr = IMFSourceReader_ReadSample(reader, 0, 0, NULL, NULL, NULL, NULL); + ok(hr == MF_E_NOTACCEPTING, "Unexpected hr %#x.\n", hr); + IMFSourceReader_Release(reader); } diff -Nru wine-development-5.5/dlls/mmsystem.dll16/Makefile.in wine-development-5.6/dlls/mmsystem.dll16/Makefile.in --- wine-development-5.5/dlls/mmsystem.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mmsystem.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,7 +1,7 @@ MODULE = mmsystem.dll16 IMPORTS = winmm user32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,winmm.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,winmm.dll C_SRCS = \ driver.c \ diff -Nru wine-development-5.5/dlls/mountmgr.sys/dbus.c wine-development-5.6/dlls/mountmgr.sys/dbus.c --- wine-development-5.5/dlls/mountmgr.sys/dbus.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mountmgr.sys/dbus.c 2020-04-10 18:54:32.000000000 +0000 @@ -44,7 +44,6 @@ #include "ip2string.h" #include "dhcpcsdk.h" -#include "wine/library.h" #include "wine/exception.h" #include "wine/debug.h" @@ -116,20 +115,19 @@ static BOOL load_hal_functions(void) { void *hal_handle; - char error[128]; /* Load libhal with RTLD_GLOBAL so that the dbus symbols are available. * We can't load libdbus directly since libhal may have been built against a * different version but with the same soname. Binary compatibility is for wimps. */ - if (!(hal_handle = wine_dlopen(SONAME_LIBHAL, RTLD_NOW|RTLD_GLOBAL, error, sizeof(error)))) + if (!(hal_handle = dlopen( SONAME_LIBHAL, RTLD_NOW | RTLD_GLOBAL ))) goto failed; -#define DO_FUNC(f) if (!(p_##f = wine_dlsym( RTLD_DEFAULT, #f, error, sizeof(error) ))) goto failed +#define DO_FUNC(f) if (!(p_##f = dlsym( RTLD_DEFAULT, #f ))) goto failed DBUS_FUNCS; #undef DO_FUNC -#define DO_FUNC(f) if (!(p_##f = wine_dlsym( hal_handle, #f, error, sizeof(error) ))) goto failed +#define DO_FUNC(f) if (!(p_##f = dlsym( hal_handle, #f ))) goto failed HAL_FUNCS; #undef DO_FUNC @@ -137,7 +135,7 @@ return TRUE; failed: - WARN( "failed to load HAL support: %s\n", error ); + WARN( "failed to load HAL support: %s\n", dlerror() ); return FALSE; } @@ -185,18 +183,17 @@ static BOOL load_dbus_functions(void) { void *handle; - char error[128]; - if (!(handle = wine_dlopen(SONAME_LIBDBUS_1, RTLD_NOW, error, sizeof(error)))) + if (!(handle = dlopen( SONAME_LIBDBUS_1, RTLD_NOW ))) goto failed; -#define DO_FUNC(f) if (!(p_##f = wine_dlsym( handle, #f, error, sizeof(error) ))) goto failed +#define DO_FUNC(f) if (!(p_##f = dlsym( handle, #f ))) goto failed DBUS_FUNCS; #undef DO_FUNC return TRUE; failed: - WARN( "failed to load DBUS support: %s\n", error ); + WARN( "failed to load DBUS support: %s\n", dlerror() ); return FALSE; } diff -Nru wine-development-5.5/dlls/mountmgr.sys/device.c wine-development-5.6/dlls/mountmgr.sys/device.c --- wine-development-5.5/dlls/mountmgr.sys/device.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mountmgr.sys/device.c 2020-04-10 18:54:32.000000000 +0000 @@ -71,6 +71,16 @@ static const WCHAR lun_keyW[] = {'L','o','g','i','c','a','l',' ','U','n','i','t',' ','I','d',' ','%','d',0}; static const WCHAR devnameW[] = {'D','e','v','i','c','e','N','a','m','e',0}; +enum fs_type +{ + FS_ERROR, /* error accessing the device */ + FS_UNKNOWN, /* unknown file system */ + FS_FAT1216, + FS_FAT32, + FS_ISO9660, + FS_UDF /* For reference [E] = Ecma-167.pdf, [U] = udf260.pdf */ +}; + struct disk_device { enum device_type type; /* drive type */ @@ -90,6 +100,9 @@ unsigned int ref; /* ref count */ GUID guid; /* volume uuid */ struct mount_point *mount; /* Volume{xxx} mount point */ + WCHAR label[256]; /* volume label */ + DWORD serial; /* volume serial number */ + enum fs_type fs_type; /* file system type */ }; struct dos_drive @@ -139,6 +152,15 @@ return ret; } +static WCHAR *strdupW( const WCHAR *str ) +{ + WCHAR *ret; + + if (!str) return NULL; + if ((ret = RtlAllocateHeap( GetProcessHeap(), 0, (strlenW(str) + 1) * sizeof(WCHAR) ))) strcpyW( ret, str ); + return ret; +} + static const GUID *get_default_uuid( int letter ) { static GUID guid; @@ -204,6 +226,510 @@ WM_DEVICECHANGE, code, (LPARAM)&info ); } +#define BLOCK_SIZE 2048 +#define SUPERBLOCK_SIZE BLOCK_SIZE + +#define CDFRAMES_PERSEC 75 +#define CDFRAMES_PERMIN (CDFRAMES_PERSEC * 60) +#define FRAME_OF_ADDR(a) ((a)[1] * CDFRAMES_PERMIN + (a)[2] * CDFRAMES_PERSEC + (a)[3]) +#define FRAME_OF_TOC(toc, idx) FRAME_OF_ADDR((toc)->TrackData[(idx) - (toc)->FirstTrack].Address) + +#define GETWORD(buf,off) MAKEWORD(buf[(off)],buf[(off+1)]) +#define GETLONG(buf,off) MAKELONG(GETWORD(buf,off),GETWORD(buf,off+2)) + +static int open_volume_file( const struct volume *volume, const char *file ) +{ + const char *unix_mount = volume->device->unix_mount; + char *path; + int fd; + + if (!unix_mount) return -1; + + if (unix_mount[0] == '/') + { + if (!(path = HeapAlloc( GetProcessHeap(), 0, strlen( unix_mount ) + 1 + strlen( file ) + 1 ))) + return -1; + + strcpy( path, unix_mount ); + } + else + { + const char *config_dir = wine_get_config_dir(); + + if (!(path = HeapAlloc( GetProcessHeap(), 0, strlen( config_dir ) + + strlen("/dosdevices/") + strlen(unix_mount) + 1 + strlen( file ) + 1 ))) + return -1; + + strcpy( path, config_dir ); + strcat( path, "/dosdevices/" ); + strcat( path, unix_mount ); + } + strcat( path, "/" ); + strcat( path, file ); + + fd = open( path, O_RDONLY ); + HeapFree( GetProcessHeap(), 0, path ); + return fd; +} + +/* get the label by reading it from a file at the root of the filesystem */ +static void get_filesystem_label( struct volume *volume ) +{ + int fd; + ssize_t size; + char buffer[256], *p; + + volume->label[0] = 0; + + if ((fd = open_volume_file( volume, ".windows-label" )) == -1) + return; + size = read( fd, buffer, sizeof(buffer) ); + close( fd ); + + p = buffer + size; + while (p > buffer && (p[-1] == ' ' || p[-1] == '\r' || p[-1] == '\n')) p--; + *p = 0; + if (!MultiByteToWideChar( CP_UNIXCP, 0, buffer, -1, volume->label, ARRAY_SIZE(volume->label) )) + volume->label[ARRAY_SIZE(volume->label) - 1] = 0; +} + +/* get the serial number by reading it from a file at the root of the filesystem */ +static void get_filesystem_serial( struct volume *volume ) +{ + int fd; + ssize_t size; + char buffer[32]; + + volume->serial = 0; + + if ((fd = open_volume_file( volume, ".windows-serial" )) == -1) + return; + size = read( fd, buffer, sizeof(buffer) ); + close( fd ); + + if (size < 0) return; + buffer[size] = 0; + volume->serial = strtoul( buffer, NULL, 16 ); +} + + +/****************************************************************** + * VOLUME_FindCdRomDataBestVoldesc + */ +static DWORD VOLUME_FindCdRomDataBestVoldesc( HANDLE handle ) +{ + BYTE cur_vd_type, max_vd_type = 0; + BYTE buffer[0x800]; + DWORD size, offs, best_offs = 0, extra_offs = 0; + + for (offs = 0x8000; offs <= 0x9800; offs += 0x800) + { + /* if 'CDROM' occurs at position 8, this is a pre-iso9660 cd, and + * the volume label is displaced forward by 8 + */ + if (SetFilePointer( handle, offs, NULL, FILE_BEGIN ) != offs) break; + if (!ReadFile( handle, buffer, sizeof(buffer), &size, NULL )) break; + if (size != sizeof(buffer)) break; + /* check for non-ISO9660 signature */ + if (!memcmp( buffer + 11, "ROM", 3 )) extra_offs = 8; + cur_vd_type = buffer[extra_offs]; + if (cur_vd_type == 0xff) /* voldesc set terminator */ + break; + if (cur_vd_type > max_vd_type) + { + max_vd_type = cur_vd_type; + best_offs = offs + extra_offs; + } + } + return best_offs; +} + + +/*********************************************************************** + * VOLUME_ReadFATSuperblock + */ +static enum fs_type VOLUME_ReadFATSuperblock( HANDLE handle, BYTE *buff ) +{ + DWORD size; + + /* try a fixed disk, with a FAT partition */ + if (SetFilePointer( handle, 0, NULL, FILE_BEGIN ) != 0 || + !ReadFile( handle, buff, SUPERBLOCK_SIZE, &size, NULL )) + { + if (GetLastError() == ERROR_BAD_DEV_TYPE) return FS_UNKNOWN; /* not a real device */ + return FS_ERROR; + } + + if (size < SUPERBLOCK_SIZE) return FS_UNKNOWN; + + /* FIXME: do really all FAT have their name beginning with + * "FAT" ? (At least FAT12, FAT16 and FAT32 have :) + */ + if (!memcmp(buff+0x36, "FAT", 3) || !memcmp(buff+0x52, "FAT", 3)) + { + /* guess which type of FAT we have */ + int reasonable; + unsigned int sectors, + sect_per_fat, + total_sectors, + num_boot_sectors, + num_fats, + num_root_dir_ents, + bytes_per_sector, + sectors_per_cluster, + nclust; + sect_per_fat = GETWORD(buff, 0x16); + if (!sect_per_fat) sect_per_fat = GETLONG(buff, 0x24); + total_sectors = GETWORD(buff, 0x13); + if (!total_sectors) + total_sectors = GETLONG(buff, 0x20); + num_boot_sectors = GETWORD(buff, 0x0e); + num_fats = buff[0x10]; + num_root_dir_ents = GETWORD(buff, 0x11); + bytes_per_sector = GETWORD(buff, 0x0b); + sectors_per_cluster = buff[0x0d]; + /* check if the parameters are reasonable and will not cause + * arithmetic errors in the calculation */ + reasonable = num_boot_sectors < total_sectors && + num_fats < 16 && + bytes_per_sector >= 512 && bytes_per_sector % 512 == 0 && + sectors_per_cluster >= 1; + if (!reasonable) return FS_UNKNOWN; + sectors = total_sectors - num_boot_sectors - num_fats * sect_per_fat - + (num_root_dir_ents * 32 + bytes_per_sector - 1) / bytes_per_sector; + nclust = sectors / sectors_per_cluster; + if ((buff[0x42] == 0x28 || buff[0x42] == 0x29) && + !memcmp(buff+0x52, "FAT", 3)) return FS_FAT32; + if (nclust < 65525) + { + if ((buff[0x26] == 0x28 || buff[0x26] == 0x29) && + !memcmp(buff+0x36, "FAT", 3)) + return FS_FAT1216; + } + } + return FS_UNKNOWN; +} + + +/*********************************************************************** + * VOLUME_ReadCDBlock + */ +static BOOL VOLUME_ReadCDBlock( HANDLE handle, BYTE *buff, INT offs ) +{ + DWORD size, whence = offs >= 0 ? FILE_BEGIN : FILE_END; + + if (SetFilePointer( handle, offs, NULL, whence ) != offs || + !ReadFile( handle, buff, SUPERBLOCK_SIZE, &size, NULL ) || + size != SUPERBLOCK_SIZE) + return FALSE; + + return TRUE; +} + + +/*********************************************************************** + * VOLUME_ReadCDSuperblock + */ +static enum fs_type VOLUME_ReadCDSuperblock( HANDLE handle, BYTE *buff ) +{ + int i; + DWORD offs; + + /* Check UDF first as UDF and ISO9660 structures can coexist on the same medium + * Starting from sector 16, we may find : + * - a CD-ROM Volume Descriptor Set (ISO9660) containing one or more Volume Descriptors + * - an Extended Area (UDF) -- [E] 2/8.3.1 and [U] 2.1.7 + * There is no explicit end so read 16 sectors and then give up */ + for( i=16; i<16+16; i++) + { + if (!VOLUME_ReadCDBlock(handle, buff, i*BLOCK_SIZE)) + continue; + + /* We are supposed to check "BEA01", "NSR0x" and "TEA01" IDs + verify tag checksum + * but we assume the volume is well-formatted */ + if (!memcmp(&buff[1], "BEA01", 5)) return FS_UDF; + } + + offs = VOLUME_FindCdRomDataBestVoldesc( handle ); + if (!offs) return FS_UNKNOWN; + + if (!VOLUME_ReadCDBlock(handle, buff, offs)) + return FS_ERROR; + + /* check for the iso9660 identifier */ + if (!memcmp(&buff[1], "CD001", 5)) return FS_ISO9660; + return FS_UNKNOWN; +} + + +/************************************************************************** + * UDF_Find_PVD + * Find the Primary Volume Descriptor + */ +static BOOL UDF_Find_PVD( HANDLE handle, BYTE pvd[] ) +{ + unsigned int i; + DWORD offset; + INT locations[] = { 256, -1, -257, 512 }; + + for(i=0; ifs_type) + { + case FS_ERROR: + label_len = 0; + break; + case FS_UNKNOWN: + get_filesystem_label( volume ); + return; + case FS_FAT1216: + label_ptr = superblock + 0x2b; + label_len = 11; + break; + case FS_FAT32: + label_ptr = superblock + 0x47; + label_len = 11; + break; + case FS_ISO9660: + { + BYTE ver = superblock[0x5a]; + + if (superblock[0x58] == 0x25 && superblock[0x59] == 0x2f && /* Unicode ID */ + ((ver == 0x40) || (ver == 0x43) || (ver == 0x45))) + { /* yippee, unicode */ + unsigned int i; + + for (i = 0; i < 16; i++) + volume->label[i] = (superblock[40+2*i] << 8) | superblock[41+2*i]; + volume->label[i] = 0; + while (i && volume->label[i-1] == ' ') volume->label[--i] = 0; + return; + } + label_ptr = superblock + 40; + label_len = 32; + break; + } + case FS_UDF: + { + BYTE pvd[BLOCK_SIZE]; + + if(!UDF_Find_PVD(handle, pvd)) + { + label_len = 0; + break; + } + + /* [E] 3/10.1.4 and [U] 2.1.1 */ + if(pvd[24]==8) + { + label_ptr = pvd + 24 + 1; + label_len = pvd[24+32-1]; + break; + } + else + { + unsigned int i; + + label_len = 1 + pvd[24+32-1]; + for (i = 0; i < label_len; i += 2) + volume->label[i/2] = (pvd[24+1+i] << 8) | pvd[24+1+i+1]; + volume->label[label_len] = 0; + return; + } + } + } + if (label_len) RtlMultiByteToUnicodeN( volume->label, sizeof(volume->label) - sizeof(WCHAR), + &label_len, (const char *)label_ptr, label_len ); + label_len /= sizeof(WCHAR); + volume->label[label_len] = 0; + while (label_len && volume->label[label_len-1] == ' ') volume->label[--label_len] = 0; +} + + +/************************************************************************** + * UDF_Find_FSD_Sector + * Find the File Set Descriptor used to compute the serial of a UDF volume + */ +static int UDF_Find_FSD_Sector( HANDLE handle, BYTE block[] ) +{ + int i, PVD_sector, PD_sector, PD_length; + + if(!UDF_Find_PVD(handle,block)) + goto default_sector; + + /* Retrieve the tag location of the PVD -- [E] 3/7.2 */ + PVD_sector = block[12 + 0]; + PVD_sector |= block[12 + 1] << 8; + PVD_sector |= block[12 + 2] << 16; + PVD_sector |= block[12 + 3] << 24; + + /* Find the Partition Descriptor */ + for(i=PVD_sector+1; ; i++) + { + if(!VOLUME_ReadCDBlock(handle, block, i*BLOCK_SIZE)) + goto default_sector; + + /* Partition Descriptor Tag Id -- [E] 3/10.5.1 */ + if(block[0]==5 && block[1]==0) + break; + + /* Terminating Descriptor Tag Id -- [E] 3/10.9.1 */ + if(block[0]==8 && block[1]==0) + goto default_sector; + } + + /* Find the partition starting location -- [E] 3/10.5.8 */ + PD_sector = block[188 + 0]; + PD_sector |= block[188 + 1] << 8; + PD_sector |= block[188 + 2] << 16; + PD_sector |= block[188 + 3] << 24; + + /* Find the partition length -- [E] 3/10.5.9 */ + PD_length = block[192 + 0]; + PD_length |= block[192 + 1] << 8; + PD_length |= block[192 + 2] << 16; + PD_length |= block[192 + 3] << 24; + + for(i=PD_sector; ifs_type) + { + case FS_ERROR: + break; + case FS_UNKNOWN: + get_filesystem_serial( volume ); + break; + case FS_FAT1216: + volume->serial = GETLONG( superblock, 0x27 ); + break; + case FS_FAT32: + volume->serial = GETLONG( superblock, 0x43 ); + break; + case FS_UDF: + FSD_sector = UDF_Find_FSD_Sector(handle, block); + if (!VOLUME_ReadCDBlock(handle, block, FSD_sector*BLOCK_SIZE)) + break; + superblock = block; + /* fallthrough */ + case FS_ISO9660: + { + BYTE sum[4]; + int i; + + sum[0] = sum[1] = sum[2] = sum[3] = 0; + for (i = 0; i < 2048; i += 4) + { + /* DON'T optimize this into DWORD !! (breaks overflow) */ + sum[0] += superblock[i+0]; + sum[1] += superblock[i+1]; + sum[2] += superblock[i+2]; + sum[3] += superblock[i+3]; + } + /* + * OK, another braindead one... argh. Just believe it. + * Me$$ysoft chose to reverse the serial number in NT4/W2K. + * It's true and nobody will ever be able to change it. + */ + if ((GetVersion() & 0x80000000) || volume->fs_type == FS_UDF) + volume->serial = (sum[3] << 24) | (sum[2] << 16) | (sum[1] << 8) | sum[0]; + else + volume->serial = (sum[0] << 24) | (sum[1] << 16) | (sum[2] << 8) | sum[3]; + } + } +} + + +/************************************************************************** + * VOLUME_GetAudioCDSerial + */ +static DWORD VOLUME_GetAudioCDSerial( const CDROM_TOC *toc ) +{ + DWORD serial = 0; + int i; + + for (i = 0; i <= toc->LastTrack - toc->FirstTrack; i++) + serial += ((toc->TrackData[i].Address[1] << 16) | + (toc->TrackData[i].Address[2] << 8) | + toc->TrackData[i].Address[3]); + + /* + * dwStart, dwEnd collect the beginning and end of the disc respectively, in + * frames. + * There it is collected for correcting the serial when there are less than + * 3 tracks. + */ + if (toc->LastTrack - toc->FirstTrack + 1 < 3) + { + DWORD dwStart = FRAME_OF_TOC(toc, toc->FirstTrack); + DWORD dwEnd = FRAME_OF_TOC(toc, toc->LastTrack + 1); + serial += dwEnd - dwStart; + } + return serial; +} + + /* create the disk device for a given volume */ static NTSTATUS create_disk_device( enum device_type type, struct disk_device **device_ret ) { @@ -473,6 +999,72 @@ return NULL; } +static BOOL get_volume_device_info( struct volume *volume ) +{ + const char *unix_device = volume->device->unix_device; + ANSI_STRING unix_name; + UNICODE_STRING nt_name; + OBJECT_ATTRIBUTES attr; + HANDLE handle; + NTSTATUS ret; + CDROM_TOC toc; + DWORD size; + BYTE superblock[SUPERBLOCK_SIZE]; + IO_STATUS_BLOCK io; + + if (!unix_device) + return FALSE; + + RtlInitAnsiString( &unix_name, unix_device ); + if ((ret = wine_unix_to_nt_file_name( &unix_name, &nt_name ))) + { + ERR("Failed to convert %s to NT, status %#x\n", debugstr_a(unix_device), ret); + return FALSE; + } + + InitializeObjectAttributes( &attr, &nt_name, OBJ_CASE_INSENSITIVE, 0, NULL ); + if ((ret = NtOpenFile( &handle, GENERIC_READ | SYNCHRONIZE, &attr, &io, FILE_SHARE_READ | FILE_SHARE_WRITE, + FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT ))) + { + WARN("Failed to open %s, status %#x\n", debugstr_a(unix_device), ret); + RtlFreeUnicodeString( &nt_name ); + return FALSE; + } + + if (DeviceIoControl( handle, IOCTL_CDROM_READ_TOC, NULL, 0, &toc, sizeof(toc), &size, 0 )) + { + if (!(toc.TrackData[0].Control & 0x04)) /* audio track */ + { + static const WCHAR audiocdW[] = {'A','u','d','i','o',' ','C','D',0}; + TRACE( "%s: found audio CD\n", debugstr_a(unix_device) ); + lstrcpynW( volume->label, audiocdW, ARRAY_SIZE(volume->label) ); + volume->serial = VOLUME_GetAudioCDSerial( &toc ); + volume->fs_type = FS_ISO9660; + CloseHandle( handle ); + return TRUE; + } + volume->fs_type = VOLUME_ReadCDSuperblock( handle, superblock ); + } + else + { + volume->fs_type = VOLUME_ReadFATSuperblock( handle, superblock ); + if (volume->fs_type == FS_UNKNOWN) volume->fs_type = VOLUME_ReadCDSuperblock( handle, superblock ); + } + + TRACE( "%s: found fs type %d\n", debugstr_a(unix_device), volume->fs_type ); + if (volume->fs_type == FS_ERROR) + { + CloseHandle( handle ); + return FALSE; + } + + VOLUME_GetSuperblockLabel( volume, handle, superblock ); + VOLUME_GetSuperblockSerial( volume, handle, superblock ); + + CloseHandle( handle ); + return TRUE; +} + /* change the information for an existing volume */ static NTSTATUS set_volume_info( struct volume *volume, struct dos_drive *drive, const char *device, const char *mount_point, enum device_type type, const GUID *guid ) @@ -506,6 +1098,21 @@ disk_device->unix_device = strdupA( device ); disk_device->unix_mount = strdupA( mount_point ); + if (!get_volume_device_info( volume )) + { + if (volume->device->type == DEVICE_CDROM) + volume->fs_type = FS_ISO9660; + else if (volume->device->type == DEVICE_DVD) + volume->fs_type = FS_UDF; + else + volume->fs_type = FS_UNKNOWN; + + get_filesystem_label( volume ); + get_filesystem_serial( volume ); + } + + TRACE("fs_type %#x, label %s, serial %08x\n", volume->fs_type, debugstr_w(volume->label), volume->serial); + if (guid && memcmp( &volume->guid, guid, sizeof(volume->guid) )) { volume->guid = *guid; @@ -516,6 +1123,9 @@ } } + if (!volume->serial) + memcpy(&volume->serial, &volume->guid.Data4[4], sizeof(DWORD)); + if (!volume->mount) volume->mount = add_volume_mount_point( disk_device->dev_obj, &disk_device->name, &volume->guid ); if (drive && !drive->mount) @@ -1019,8 +1629,21 @@ return status; } +enum mountmgr_fs_type get_mountmgr_fs_type(enum fs_type fs_type) +{ + switch (fs_type) + { + case FS_ISO9660: return MOUNTMGR_FS_TYPE_ISO9660; + case FS_UDF: return MOUNTMGR_FS_TYPE_UDF; + case FS_FAT1216: return MOUNTMGR_FS_TYPE_FAT; + case FS_FAT32: return MOUNTMGR_FS_TYPE_FAT32; + default: return MOUNTMGR_FS_TYPE_NTFS; + } +} + /* query information about an existing dos drive, by letter or udi */ -NTSTATUS query_dos_device( int letter, enum device_type *type, char **device, char **mount_point ) +NTSTATUS query_dos_device( int letter, enum device_type *type, enum mountmgr_fs_type *fs_type, + DWORD *serial, char **device, char **mount_point, WCHAR **label ) { NTSTATUS status = STATUS_NO_SUCH_DEVICE; struct dos_drive *drive; @@ -1032,8 +1655,44 @@ if (drive->drive != letter) continue; disk_device = drive->volume->device; if (type) *type = disk_device->type; + if (fs_type) *fs_type = get_mountmgr_fs_type( drive->volume->fs_type ); + if (serial) *serial = drive->volume->serial; + if (device) *device = strdupA( disk_device->unix_device ); + if (mount_point) *mount_point = strdupA( disk_device->unix_mount ); + if (label) *label = strdupW( drive->volume->label ); + status = STATUS_SUCCESS; + break; + } + LeaveCriticalSection( &device_section ); + return status; +} + +/* query information about an existing unix device, by dev_t */ +NTSTATUS query_unix_device( ULONGLONG unix_dev, enum device_type *type, + enum mountmgr_fs_type *fs_type, DWORD *serial, char **device, + char **mount_point, WCHAR **label ) +{ + NTSTATUS status = STATUS_NO_SUCH_DEVICE; + struct volume *volume; + struct disk_device *disk_device; + struct stat st; + + EnterCriticalSection( &device_section ); + LIST_FOR_EACH_ENTRY( volume, &volumes_list, struct volume, entry ) + { + disk_device = volume->device; + + if (!disk_device->unix_device + || stat( disk_device->unix_device, &st ) < 0 + || st.st_rdev != unix_dev) + continue; + + if (type) *type = disk_device->type; + if (fs_type) *fs_type = get_mountmgr_fs_type( volume->fs_type ); + if (serial) *serial = volume->serial; if (device) *device = strdupA( disk_device->unix_device ); if (mount_point) *mount_point = strdupA( disk_device->unix_mount ); + if (label) *label = strdupW( volume->label ); status = STATUS_SUCCESS; break; } diff -Nru wine-development-5.5/dlls/mountmgr.sys/mountmgr.c wine-development-5.6/dlls/mountmgr.sys/mountmgr.c --- wine-development-5.5/dlls/mountmgr.sys/mountmgr.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mountmgr.sys/mountmgr.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,6 +18,15 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#ifdef __APPLE__ +#include +#define LoadResource mac_LoadResource +#define GetCurrentThread mac_GetCurrentThread +#include +#undef LoadResource +#undef GetCurrentThread +#endif + #include #include @@ -25,7 +34,6 @@ #include "mountmgr.h" #include "winreg.h" -#include "wine/library.h" #include "wine/list.h" #include "wine/unicode.h" #include "wine/debug.h" @@ -286,13 +294,27 @@ char *device, *mount_point; int letter = tolowerW( input->letter ); NTSTATUS status; - DWORD size, type = DEVICE_UNKNOWN; + DWORD size, type = DEVICE_UNKNOWN, serial; + enum mountmgr_fs_type fs_type; enum device_type device_type; char *ptr; + WCHAR *label; - if (letter < 'a' || letter > 'z') return STATUS_INVALID_PARAMETER; + if (!letter) + { + if ((status = query_unix_device( input->unix_dev, &device_type, &fs_type, + &serial, &device, &mount_point, &label ))) + return status; + } + else + { + if (letter < 'a' || letter > 'z') return STATUS_INVALID_PARAMETER; + + if ((status = query_dos_device( letter - 'a', &device_type, &fs_type, &serial, &device, + &mount_point, &label ))) + return status; + } - if ((status = query_dos_device( letter - 'a', &device_type, &device, &mount_point ))) return status; switch (device_type) { case DEVICE_UNKNOWN: type = DRIVE_UNKNOWN; break; @@ -314,8 +336,11 @@ output->size = size; output->letter = letter; output->type = type; + output->fs_type = fs_type; + output->serial = serial; output->mount_point_offset = 0; output->device_offset = 0; + output->label_offset = 0; if (size > outsize) { @@ -352,6 +377,14 @@ } else output->device_offset = 0; + if (label) + { + output->label_offset = ptr - (char *)output; + strcpyW( (WCHAR *)ptr, label ); + ptr += (strlenW(label) + 1) * sizeof(WCHAR); + } + else output->label_offset = 0; + TRACE( "returning %c: dev %s mount %s type %u\n", letter, debugstr_a(device), debugstr_a(mount_point), type ); @@ -359,6 +392,7 @@ done: RtlFreeHeap( GetProcessHeap(), 0, device ); RtlFreeHeap( GetProcessHeap(), 0, mount_point ); + RtlFreeHeap( GetProcessHeap(), 0, label ); return status; } @@ -391,6 +425,96 @@ return STATUS_SUCCESS; } +/* implementation of Wine extension to use host APIs to find symbol file by GUID */ +#ifdef __APPLE__ +static void WINAPI query_symbol_file( TP_CALLBACK_INSTANCE *instance, void *context ) +{ + IRP *irp = context; + MOUNTMGR_TARGET_NAME *result; + CFStringRef query_cfstring; + WCHAR *unix_buf = NULL; + ANSI_STRING unix_path; + UNICODE_STRING path; + MDQueryRef mdquery; + const GUID *id; + size_t size; + NTSTATUS status = STATUS_NO_MEMORY; + + static const WCHAR formatW[] = { 'c','o','m','_','a','p','p','l','e','_','x','c','o','d','e', + '_','d','s','y','m','_','u','u','i','d','s',' ','=','=',' ', + '"','%','0','8','X','-','%','0','4','X','-', + '%','0','4','X','-','%','0','2','X','%','0','2','X','-', + '%','0','2','X','%','0','2','X','%','0','2','X','%','0','2','X', + '%','0','2','X','%','0','2','X','"',0 }; + WCHAR query_string[ARRAY_SIZE(formatW)]; + + id = irp->AssociatedIrp.SystemBuffer; + sprintfW( query_string, formatW, id->Data1, id->Data2, id->Data3, + id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3], + id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7] ); + if (!(query_cfstring = CFStringCreateWithCharacters(NULL, query_string, lstrlenW(query_string)))) goto done; + + mdquery = MDQueryCreate(NULL, query_cfstring, NULL, NULL); + CFRelease(query_cfstring); + if (!mdquery) goto done; + + MDQuerySetMaxCount(mdquery, 1); + TRACE("Executing %s\n", debugstr_w(query_string)); + if (MDQueryExecute(mdquery, kMDQuerySynchronous)) + { + if (MDQueryGetResultCount(mdquery) >= 1) + { + MDItemRef item = (MDItemRef)MDQueryGetResultAtIndex(mdquery, 0); + CFStringRef item_path = MDItemCopyAttribute(item, kMDItemPath); + + if (item_path) + { + CFIndex item_path_len = CFStringGetLength(item_path); + if ((unix_buf = HeapAlloc(GetProcessHeap(), 0, (item_path_len + 1) * sizeof(WCHAR)))) + { + CFStringGetCharacters(item_path, CFRangeMake(0, item_path_len), unix_buf); + unix_buf[item_path_len] = 0; + TRACE("found %s\n", debugstr_w(unix_buf)); + } + CFRelease(item_path); + } + } + else status = STATUS_NO_MORE_ENTRIES; + } + CFRelease(mdquery); + if (!unix_buf) goto done; + + RtlInitUnicodeString( &path, unix_buf ); + status = RtlUnicodeStringToAnsiString( &unix_path, &path, TRUE ); + HeapFree( GetProcessHeap(), 0, unix_buf ); + if (status) goto done; + + status = wine_unix_to_nt_file_name( &unix_path, &path ); + RtlFreeAnsiString( &unix_path ); + if (status) goto done; + + result = irp->AssociatedIrp.SystemBuffer; + result->DeviceNameLength = path.Length; + size = FIELD_OFFSET(MOUNTMGR_TARGET_NAME, DeviceName[path.Length / sizeof(WCHAR)]); + if (size <= IoGetCurrentIrpStackLocation(irp)->Parameters.DeviceIoControl.OutputBufferLength) + { + memcpy( result->DeviceName, path.Buffer, path.Length ); + irp->IoStatus.Information = size; + status = STATUS_SUCCESS; + } + else + { + irp->IoStatus.Information = sizeof(*result); + status = STATUS_BUFFER_OVERFLOW; + } + RtlFreeUnicodeString( &path ); + +done: + irp->IoStatus.u.Status = status; + IoCompleteRequest( irp, IO_NO_INCREMENT ); +} +#endif /* __APPLE__ */ + /* handler for ioctls on the mount manager device */ static NTSTATUS WINAPI mountmgr_ioctl( DEVICE_OBJECT *device, IRP *irp ) { @@ -446,6 +570,18 @@ irpsp->Parameters.DeviceIoControl.OutputBufferLength, &irp->IoStatus ); break; +#ifdef __APPLE__ + case IOCTL_MOUNTMGR_QUERY_SYMBOL_FILE: + if (irpsp->Parameters.DeviceIoControl.InputBufferLength != sizeof(GUID) + || irpsp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(MOUNTMGR_TARGET_NAME)) + { + irp->IoStatus.u.Status = STATUS_INVALID_PARAMETER; + break; + } + if (TrySubmitThreadpoolCallback( query_symbol_file, irp, NULL )) return STATUS_PENDING; + irp->IoStatus.u.Status = STATUS_NO_MEMORY; + break; +#endif default: FIXME( "ioctl %x not supported\n", irpsp->Parameters.DeviceIoControl.IoControlCode ); irp->IoStatus.u.Status = STATUS_NOT_SUPPORTED; diff -Nru wine-development-5.5/dlls/mountmgr.sys/mountmgr.h wine-development-5.6/dlls/mountmgr.sys/mountmgr.h --- wine-development-5.5/dlls/mountmgr.sys/mountmgr.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mountmgr.sys/mountmgr.h 2020-04-10 18:54:32.000000000 +0000 @@ -57,7 +57,11 @@ const char *mount_point, enum device_type type, const GUID *guid, UNICODE_STRING *devname ) DECLSPEC_HIDDEN; extern NTSTATUS remove_dos_device( int letter, const char *udi ) DECLSPEC_HIDDEN; -extern NTSTATUS query_dos_device( int letter, enum device_type *type, char **device, char **mount_point ) DECLSPEC_HIDDEN; +extern NTSTATUS query_dos_device( int letter, enum device_type *type, enum mountmgr_fs_type *fs_type, DWORD *serial, + char **device, char **mount_point, WCHAR **label ) DECLSPEC_HIDDEN; +extern NTSTATUS query_unix_device( ULONGLONG unix_dev, enum device_type *type, + DWORD *serial, enum mountmgr_fs_type *fs_type, char **device, + char **mount_point, WCHAR **label ) DECLSPEC_HIDDEN; extern NTSTATUS WINAPI harddisk_driver_entry( DRIVER_OBJECT *driver, UNICODE_STRING *path ) DECLSPEC_HIDDEN; extern NTSTATUS WINAPI serial_driver_entry( DRIVER_OBJECT *driver, UNICODE_STRING *path ) DECLSPEC_HIDDEN; extern NTSTATUS WINAPI parallel_driver_entry( DRIVER_OBJECT *driver, UNICODE_STRING *path ) DECLSPEC_HIDDEN; diff -Nru wine-development-5.5/dlls/mouse.drv16/Makefile.in wine-development-5.6/dlls/mouse.drv16/Makefile.in --- wine-development-5.5/dlls/mouse.drv16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/mouse.drv16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,7 +1,7 @@ MODULE = mouse.drv16 IMPORTS = user32 -EXTRADLLFLAGS = -m16 -mno-cygwin +EXTRADLLFLAGS = -m16 C_SRCS = mouse.c diff -Nru wine-development-5.5/dlls/msacm.dll16/Makefile.in wine-development-5.6/dlls/msacm.dll16/Makefile.in --- wine-development-5.5/dlls/msacm.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/msacm.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = msacm.dll16 IMPORTS = msacm32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,msacm32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,msacm32.dll C_SRCS = msacm.c diff -Nru wine-development-5.5/dlls/msgsm32.acm/msgsm32.c wine-development-5.6/dlls/msgsm32.acm/msgsm32.c --- wine-development-5.5/dlls/msgsm32.acm/msgsm32.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/msgsm32.acm/msgsm32.c 2020-04-10 18:54:32.000000000 +0000 @@ -42,7 +42,6 @@ #include "mmreg.h" #include "msacm.h" #include "msacmdrv.h" -#include "wine/library.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(gsm); @@ -58,8 +57,8 @@ FUNCPTR(gsm_decode); #define LOAD_FUNCPTR(f) \ - if((p##f = wine_dlsym(libgsm_handle, #f, NULL, 0)) == NULL) { \ - wine_dlclose(libgsm_handle, NULL, 0); \ + if((p##f = dlsym(libgsm_handle, #f)) == NULL) { \ + dlclose(libgsm_handle); \ libgsm_handle = NULL; \ return FALSE; \ } @@ -69,9 +68,7 @@ */ static BOOL GSM_drvLoad(void) { - char error[128]; - - libgsm_handle = wine_dlopen(SONAME_LIBGSM, RTLD_NOW, error, sizeof(error)); + libgsm_handle = dlopen(SONAME_LIBGSM, RTLD_NOW); if (libgsm_handle) { LOAD_FUNCPTR(gsm_create); @@ -83,7 +80,7 @@ } else { - ERR("Couldn't load " SONAME_LIBGSM ": %s\n", error); + ERR("Couldn't load " SONAME_LIBGSM ": %s\n", dlerror()); return FALSE; } } @@ -94,7 +91,7 @@ static LRESULT GSM_drvFree(void) { if (libgsm_handle) - wine_dlclose(libgsm_handle, NULL, 0); + dlclose(libgsm_handle); return 1; } diff -Nru wine-development-5.5/dlls/msscript.ocx/msscript.idl wine-development-5.6/dlls/msscript.ocx/msscript.idl --- wine-development-5.5/dlls/msscript.ocx/msscript.idl 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/msscript.ocx/msscript.idl 2020-04-10 18:54:32.000000000 +0000 @@ -63,7 +63,7 @@ ] interface IScriptProcedureCollection : IDispatch { [id(DISPID_NEWENUM), propget] - HRESULT _NewEnum([out, retval] IUnknown *ppenumProcedures); + HRESULT _NewEnum([out, retval] IUnknown **ppenumProcedures); [id(DISPID_VALUE), propget] HRESULT Item( @@ -87,7 +87,7 @@ HRESULT Name([out, retval] BSTR *pbstrName); [id(0x03e8), propget] - HRESULT CodeObject([out, retval] IDispatch *ppdispObject); + HRESULT CodeObject([out, retval] IDispatch **ppdispObject); [id(0x03e9), propget] HRESULT Procedures([out, retval] IScriptProcedureCollection **ppdispProcedures); @@ -120,7 +120,7 @@ ] interface IScriptModuleCollection : IDispatch { [id(DISPID_NEWENUM), propget] - HRESULT _NewEnum([out, retval] IUnknown *ppenumContexts); + HRESULT _NewEnum([out, retval] IUnknown **ppenumContexts); [id(DISPID_VALUE), propget] HRESULT Item( diff -Nru wine-development-5.5/dlls/msscript.ocx/tests/msscript.idl wine-development-5.6/dlls/msscript.ocx/tests/msscript.idl --- wine-development-5.5/dlls/msscript.ocx/tests/msscript.idl 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/msscript.ocx/tests/msscript.idl 2020-04-10 18:54:32.000000000 +0000 @@ -63,7 +63,7 @@ ] interface IScriptProcedureCollection : IDispatch { [id(DISPID_NEWENUM), propget] - HRESULT _NewEnum([out, retval] IUnknown *ppenumProcedures); + HRESULT _NewEnum([out, retval] IUnknown **ppenumProcedures); [id(DISPID_VALUE), propget] HRESULT Item( @@ -87,7 +87,7 @@ HRESULT Name([out, retval] BSTR *pbstrName); [id(0x03e8), propget] - HRESULT CodeObject([out, retval] IDispatch *ppdispObject); + HRESULT CodeObject([out, retval] IDispatch **ppdispObject); [id(0x03e9), propget] HRESULT Procedures([out, retval] IScriptProcedureCollection **ppdispProcedures); @@ -120,7 +120,7 @@ ] interface IScriptModuleCollection : IDispatch { [id(DISPID_NEWENUM), propget] - HRESULT _NewEnum([out, retval] IUnknown *ppenumContexts); + HRESULT _NewEnum([out, retval] IUnknown **ppenumContexts); [id(DISPID_VALUE), propget] HRESULT Item( diff -Nru wine-development-5.5/dlls/msvcp140/Makefile.in wine-development-5.6/dlls/msvcp140/Makefile.in --- wine-development-5.5/dlls/msvcp140/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/msvcp140/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,4 @@ MODULE = msvcp140.dll -IMPORTS = ucrtbase EXTRADEFS = -D_MSVCP_VER=140 PARENTSRC = ../msvcp90 diff -Nru wine-development-5.5/dlls/msvcr90/tests/msvcr90.c wine-development-5.6/dlls/msvcr90/tests/msvcr90.c --- wine-development-5.5/dlls/msvcr90/tests/msvcr90.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/msvcr90/tests/msvcr90.c 2020-04-10 18:54:32.000000000 +0000 @@ -135,7 +135,7 @@ static int (__cdecl *p__memicmp_l)(const char*, const char*, size_t, _locale_t); static int (__cdecl *p__vsnwprintf)(wchar_t *buffer,size_t count, const wchar_t *format, __ms_va_list valist); static size_t (__cdecl *p___strncnt)(const char *str, size_t count); -static int (__cdecl *p_swscanf)(const wchar_t *str, const wchar_t* format, ...); +static int (WINAPIV *p_swscanf)(const wchar_t *str, const wchar_t* format, ...); static int (__cdecl *p____mb_cur_max_l_func)(_locale_t locale); static _locale_t (__cdecl *p__create_locale)(int, const char*); static void (__cdecl *p__free_locale)(_locale_t); diff -Nru wine-development-5.5/dlls/msvcrt/data.c wine-development-5.6/dlls/msvcrt/data.c --- wine-development-5.5/dlls/msvcrt/data.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/msvcrt/data.c 2020-04-10 18:54:32.000000000 +0000 @@ -23,12 +23,13 @@ #include #include "msvcrt.h" -#include "wine/library.h" #include "wine/unicode.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(msvcrt); +static WCHAR **initial_wargv; +static int initial_argc; int MSVCRT___argc = 0; static int wargc_expand; unsigned int MSVCRT__commode = 0; @@ -159,6 +160,69 @@ return argv; } +static WCHAR **cmdline_to_argv( const WCHAR *src, int *ret_argc ) +{ + WCHAR **argv, *arg, *dst; + int argc, in_quotes = 0, bcount = 0, len = lstrlenW(src) + 1; + + argc = 2 + len / 2; + argv = HeapAlloc( GetProcessHeap(), 0, argc * sizeof(*argv) + len * sizeof(WCHAR) ); + arg = dst = (WCHAR *)(argv + argc); + argc = 0; + while (*src) + { + if ((*src == ' ' || *src == '\t') && !in_quotes) + { + /* skip the remaining spaces */ + while (*src == ' ' || *src == '\t') src++; + if (!*src) break; + /* close the argument and copy it */ + *dst++ = 0; + argv[argc++] = arg; + /* start with a new argument */ + arg = dst; + bcount = 0; + } + else if (*src == '\\') + { + *dst++ = *src++; + bcount++; + } + else if (*src == '"') + { + if ((bcount & 1) == 0) + { + /* Preceded by an even number of '\', this is half that + * number of '\', plus a '"' which we discard. + */ + dst -= bcount / 2; + src++; + if (in_quotes && *src == '"') *dst++ = *src++; + else in_quotes = !in_quotes; + } + else + { + /* Preceded by an odd number of '\', this is half that + * number of '\' followed by a '"' + */ + dst -= bcount / 2 + 1; + *dst++ = *src++; + } + bcount = 0; + } + else /* a regular character */ + { + *dst++ = *src++; + bcount = 0; + } + } + *dst = 0; + argv[argc++] = arg; + argv[argc] = NULL; + *ret_argc = argc; + return argv; +} + typedef void (CDECL *_INITTERMFUN)(void); typedef int (CDECL *_INITTERM_E_FN)(void); @@ -348,9 +412,10 @@ MSVCRT__acmdln = MSVCRT__strdup( GetCommandLineA() ); MSVCRT__wcmdln = MSVCRT__wcsdup( GetCommandLineW() ); - MSVCRT___argc = __wine_main_argc; - MSVCRT___wargv = __wine_main_wargv; - MSVCRT___argv = build_argv( MSVCRT___wargv ); + initial_wargv = cmdline_to_argv( GetCommandLineW(), &initial_argc ); + MSVCRT___argc = initial_argc; + MSVCRT___wargv = initial_wargv; + MSVCRT___argv = build_argv( initial_wargv ); TRACE("got %s, wide = %s argc=%d\n", debugstr_a(MSVCRT__acmdln), debugstr_w(MSVCRT__wcmdln),MSVCRT___argc); @@ -419,21 +484,21 @@ HANDLE h; args_no = 0; - for(i=0; i<__wine_main_argc; i++) { + for(i=0; i < initial_argc; i++) { WIN32_FIND_DATAW data; int len = 0; is_expandable = FALSE; - for(path_len = strlenW(__wine_main_wargv[i])-1; path_len>=0; path_len--) { - if(__wine_main_wargv[i][path_len]=='*' || __wine_main_wargv[i][path_len]=='?') + for(path_len = strlenW(initial_wargv[i])-1; path_len>=0; path_len--) { + if(initial_wargv[i][path_len]=='*' || initial_wargv[i][path_len]=='?') is_expandable = TRUE; - else if(__wine_main_wargv[i][path_len]=='\\' || __wine_main_wargv[i][path_len]=='/') + else if(initial_wargv[i][path_len]=='\\' || initial_wargv[i][path_len]=='/') break; } path_len++; if(is_expandable) - h = FindFirstFileW(__wine_main_wargv[i], &data); + h = FindFirstFileW(initial_wargv[i], &data); else h = INVALID_HANDLE_VALUE; @@ -446,7 +511,7 @@ len = strlenW(data.cFileName)+1; if(argv) { argv[args_no] = (MSVCRT_wchar_t*)(argv+*argc+1)+size; - memcpy(argv[args_no], __wine_main_wargv[i], path_len*sizeof(MSVCRT_wchar_t)); + memcpy(argv[args_no], initial_wargv[i], path_len*sizeof(MSVCRT_wchar_t)); memcpy(argv[args_no]+path_len, data.cFileName, len*sizeof(MSVCRT_wchar_t)); } args_no++; @@ -456,10 +521,10 @@ } if(!len) { - len = strlenW(__wine_main_wargv[i])+1; + len = strlenW(initial_wargv[i])+1; if(argv) { argv[args_no] = (MSVCRT_wchar_t*)(argv+*argc+1)+size; - memcpy(argv[args_no], __wine_main_wargv[i], len*sizeof(MSVCRT_wchar_t)); + memcpy(argv[args_no], initial_wargv[i], len*sizeof(MSVCRT_wchar_t)); } args_no++; size += len; @@ -496,8 +561,8 @@ } } if (!expand_wildcards) { - MSVCRT___argc = __wine_main_argc; - MSVCRT___wargv = __wine_main_wargv; + MSVCRT___argc = initial_argc; + MSVCRT___wargv = initial_wargv; } /* Initialize the _wenviron array if it's not already created. */ @@ -533,8 +598,8 @@ } } if (!expand_wildcards) { - MSVCRT___argc = __wine_main_argc; - MSVCRT___argv = build_argv( __wine_main_wargv ); + MSVCRT___argc = initial_argc; + MSVCRT___argv = build_argv( initial_wargv ); } *argc = MSVCRT___argc; diff -Nru wine-development-5.5/dlls/msvfw32/msvideo_main.c wine-development-5.6/dlls/msvfw32/msvideo_main.c --- wine-development-5.5/dlls/msvfw32/msvideo_main.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/msvfw32/msvideo_main.c 2020-04-10 18:54:32.000000000 +0000 @@ -322,7 +322,7 @@ info->fccType = ret_type; info->fccHandler = ret_handler; MultiByteToWideChar(CP_ACP, 0, s + 10, -1, info->szDriver, ARRAY_SIZE(info->szDriver)); - TRACE("Returning codec %s, driver %s.\n", debugstr_an(s, 8), debugstr_a(s + 10)); + TRACE("Returning codec %s, driver %s.\n", debugstr_an(s, 9), debugstr_a(s + 10)); return TRUE; } } diff -Nru wine-development-5.5/dlls/msvideo.dll16/Makefile.in wine-development-5.6/dlls/msvideo.dll16/Makefile.in --- wine-development-5.5/dlls/msvideo.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/msvideo.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ MODULE = msvideo.dll16 IMPORTS = msvfw32 version advapi32 user32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,msvfw32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,msvfw32.dll C_SRCS = msvideo16.c diff -Nru wine-development-5.5/dlls/msxml3/main.c wine-development-5.6/dlls/msxml3/main.c --- wine-development-5.5/dlls/msxml3/main.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/msxml3/main.c 2020-04-10 18:54:32.000000000 +0000 @@ -55,7 +55,6 @@ #include "wine/unicode.h" #include "wine/debug.h" -#include "wine/library.h" #include "msxml_private.h" @@ -190,12 +189,12 @@ #ifdef SONAME_LIBXSLT void (*pxsltInit)(void); /* Missing in libxslt <= 1.1.14 */ - libxslt_handle = wine_dlopen(SONAME_LIBXSLT, RTLD_NOW, NULL, 0); + libxslt_handle = dlopen(SONAME_LIBXSLT, RTLD_NOW); if (!libxslt_handle) return; #define LOAD_FUNCPTR(f, needed) \ - if ((p##f = wine_dlsym(libxslt_handle, #f, NULL, 0)) == NULL) \ + if ((p##f = dlsym(libxslt_handle, #f)) == NULL) \ if (needed) { WARN("Can't find symbol %s\n", #f); goto sym_not_found; } LOAD_FUNCPTR(xsltInit, 0); LOAD_FUNCPTR(xsltApplyStylesheet, 1); @@ -225,7 +224,7 @@ return; sym_not_found: - wine_dlclose(libxslt_handle, NULL, 0); + dlclose(libxslt_handle); libxslt_handle = NULL; #endif } @@ -435,7 +434,7 @@ if (libxslt_handle) { pxsltCleanupGlobals(); - wine_dlclose(libxslt_handle, NULL, 0); + dlclose(libxslt_handle); } #endif /* Restore default Callbacks */ diff -Nru wine-development-5.5/dlls/netapi32/netapi32.c wine-development-5.6/dlls/netapi32/netapi32.c --- wine-development-5.5/dlls/netapi32/netapi32.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/netapi32/netapi32.c 2020-04-10 18:54:32.000000000 +0000 @@ -57,7 +57,6 @@ #include "dsgetdc.h" #include "davclnt.h" #include "wine/debug.h" -#include "wine/library.h" #include "wine/list.h" #include "wine/unicode.h" #include "initguid.h" @@ -134,19 +133,17 @@ static BOOL libnetapi_init(void) { - char buf[200]; - if (libnetapi_handle) return TRUE; - if (!(libnetapi_handle = wine_dlopen( SONAME_LIBNETAPI, RTLD_NOW, buf, sizeof(buf) ))) + if (!(libnetapi_handle = dlopen( SONAME_LIBNETAPI, RTLD_NOW ))) { - WARN( "Failed to load libnetapi: %s\n", buf ); + WARN( "Failed to load libnetapi: %s\n", dlerror() ); return FALSE; } #define LOAD_FUNCPTR(f) \ - if (!(p##f = wine_dlsym( libnetapi_handle, #f, buf, sizeof(buf) ))) \ + if (!(p##f = dlsym( libnetapi_handle, #f ))) \ { \ - ERR( "Failed to load %s: %s\n", #f, buf ); \ + ERR( "Failed to load %s: %s\n", #f, dlerror() ); \ goto error; \ } @@ -167,7 +164,7 @@ if (init_context()) return TRUE; error: - wine_dlclose( libnetapi_handle, NULL, 0 ); + dlclose( libnetapi_handle ); libnetapi_handle = NULL; return FALSE; } diff -Nru wine-development-5.5/dlls/ntdll/actctx.c wine-development-5.6/dlls/ntdll/actctx.c --- wine-development-5.5/dlls/ntdll/actctx.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/actctx.c 2020-04-10 18:54:32.000000000 +0000 @@ -36,7 +36,6 @@ #include "ntdll_misc.h" #include "wine/exception.h" #include "wine/debug.h" -#include "wine/unicode.h" WINE_DEFAULT_DEBUG_CHANNEL(actctx); @@ -735,9 +734,9 @@ { WCHAR* ptr; - if (!(ptr = RtlAllocateHeap(GetProcessHeap(), 0, (strlenW(str) + 1) * sizeof(WCHAR)))) + if (!(ptr = RtlAllocateHeap(GetProcessHeap(), 0, (wcslen(str) + 1) * sizeof(WCHAR)))) return NULL; - return strcpyW(ptr, str); + return wcscpy(ptr, str); } static WCHAR *xmlstrdupW(const xmlstr_t* str) @@ -754,7 +753,7 @@ static inline BOOL xmlstr_cmp(const xmlstr_t* xmlstr, const WCHAR *str) { - return !strncmpW(xmlstr->ptr, str, xmlstr->len) && !str[xmlstr->len]; + return !wcsncmp(xmlstr->ptr, str, xmlstr->len) && !str[xmlstr->len]; } static inline BOOL xmlstr_cmpi(const xmlstr_t* xmlstr, const WCHAR *str) @@ -771,20 +770,20 @@ { return (elem1->name.len == elem2->name.len && elem1->ns.len == elem2->ns.len && - !strncmpW( elem1->name.ptr, elem2->name.ptr, elem1->name.len ) && - !strncmpW( elem1->ns.ptr, elem2->ns.ptr, elem1->ns.len )); + !wcsncmp( elem1->name.ptr, elem2->name.ptr, elem1->name.len ) && + !wcsncmp( elem1->ns.ptr, elem2->ns.ptr, elem1->ns.len )); } static inline BOOL xml_elem_cmp(const struct xml_elem *elem, const WCHAR *str, const WCHAR *namespace) { if (!xmlstr_cmp( &elem->name, str )) return FALSE; if (xmlstr_cmp( &elem->ns, namespace )) return TRUE; - if (!strcmpW( namespace, asmv1W )) + if (!wcscmp( namespace, asmv1W )) { if (xmlstr_cmp( &elem->ns, asmv2W )) return TRUE; if (xmlstr_cmp( &elem->ns, asmv3W )) return TRUE; } - else if (!strcmpW( namespace, asmv2W )) + else if (!wcscmp( namespace, asmv2W )) { if (xmlstr_cmp( &elem->ns, asmv3W )) return TRUE; } @@ -1002,7 +1001,7 @@ static BOOL is_matching_string( const WCHAR *str1, const WCHAR *str2 ) { if (!str1) return !str2; - return str2 && !RtlCompareUnicodeStrings( str1, strlenW(str1), str2, strlenW(str2), TRUE ); + return str2 && !RtlCompareUnicodeStrings( str1, wcslen(str1), str2, wcslen(str2), TRUE ); } static BOOL is_matching_identity( const struct assembly_identity *id1, @@ -1014,7 +1013,7 @@ if (id1->language && id2->language && !is_matching_string( id1->language, id2->language )) { - if (strcmpW( wildcardW, id1->language ) && strcmpW( wildcardW, id2->language )) + if (wcscmp( wildcardW, id1->language ) && wcscmp( wildcardW, id2->language )) return FALSE; } if (id1->version.major != id2->version.major) return FALSE; @@ -1092,24 +1091,24 @@ const WCHAR *key = ai->public_key ? ai->public_key : noneW; const WCHAR *lang = ai->language ? ai->language : noneW; const WCHAR *name = ai->name ? ai->name : noneW; - SIZE_T size = (strlenW(arch) + 1 + strlenW(name) + 1 + strlenW(key) + 24 + 1 + - strlenW(lang) + 1) * sizeof(WCHAR) + sizeof(mskeyW); + SIZE_T size = (wcslen(arch) + 1 + wcslen(name) + 1 + wcslen(key) + 24 + 1 + + wcslen(lang) + 1) * sizeof(WCHAR) + sizeof(mskeyW); WCHAR *ret; if (!(ret = RtlAllocateHeap( GetProcessHeap(), 0, size ))) return NULL; - strcpyW( ret, arch ); - strcatW( ret, undW ); - strcatW( ret, name ); - strcatW( ret, undW ); - strcatW( ret, key ); - strcatW( ret, undW ); - sprintfW( ret + strlenW(ret), version_formatW, + wcscpy( ret, arch ); + wcscat( ret, undW ); + wcscat( ret, name ); + wcscat( ret, undW ); + wcscat( ret, key ); + wcscat( ret, undW ); + NTDLL_swprintf( ret + wcslen(ret), version_formatW, ai->version.major, ai->version.minor, ai->version.build, ai->version.revision ); - strcatW( ret, undW ); - strcatW( ret, lang ); - strcatW( ret, undW ); - strcatW( ret, mskeyW ); + wcscat( ret, undW ); + wcscat( ret, lang ); + wcscat( ret, undW ); + wcscat( ret, mskeyW ); return ret; } @@ -1118,11 +1117,11 @@ WCHAR *p = buffer; if (!str) return; - strcatW( buffer, prefix ); - p += strlenW(p); + wcscat( buffer, prefix ); + p += wcslen(p); *p++ = '"'; - strcpyW( p, str ); - p += strlenW(p); + wcscpy( p, str ); + p += wcslen(p); *p++ = '"'; *p = 0; } @@ -1141,18 +1140,18 @@ WCHAR version[64], *ret; SIZE_T size = 0; - sprintfW( version, version_formatW, + NTDLL_swprintf( version, version_formatW, ai->version.major, ai->version.minor, ai->version.build, ai->version.revision ); - if (ai->name) size += strlenW(ai->name) * sizeof(WCHAR); - if (ai->arch) size += strlenW(archW) + strlenW(ai->arch) + 2; - if (ai->public_key) size += strlenW(public_keyW) + strlenW(ai->public_key) + 2; - if (ai->type) size += strlenW(typeW) + strlenW(ai->type) + 2; - size += strlenW(versionW) + strlenW(version) + 2; + if (ai->name) size += wcslen(ai->name) * sizeof(WCHAR); + if (ai->arch) size += wcslen(archW) + wcslen(ai->arch) + 2; + if (ai->public_key) size += wcslen(public_keyW) + wcslen(ai->public_key) + 2; + if (ai->type) size += wcslen(typeW) + wcslen(ai->type) + 2; + size += wcslen(versionW) + wcslen(version) + 2; if (!(ret = RtlAllocateHeap( GetProcessHeap(), 0, (size + 1) * sizeof(WCHAR) ))) return NULL; - if (ai->name) strcpyW( ret, ai->name ); + if (ai->name) wcscpy( ret, ai->name ); else *ret = 0; append_string( ret, archW, ai->arch ); append_string( ret, public_keyW, ai->public_key ); @@ -1228,15 +1227,15 @@ static BOOL is_xmlns_attr( const struct xml_attr *attr ) { - const int len = strlenW( xmlnsW ); + const int len = wcslen( xmlnsW ); if (attr->name.len < len) return FALSE; - if (strncmpW( attr->name.ptr, xmlnsW, len )) return FALSE; + if (wcsncmp( attr->name.ptr, xmlnsW, len )) return FALSE; return (attr->name.len == len || attr->name.ptr[len] == ':'); } static void push_xmlns( xmlbuf_t *xmlbuf, const struct xml_attr *attr ) { - const int len = strlenW( xmlnsW ); + const int len = wcslen( xmlnsW ); struct xml_attr *ns; if (xmlbuf->ns_pos == MAX_NAMESPACES - 1) @@ -1262,7 +1261,7 @@ for (i = xmlbuf->ns_pos - 1; i >= 0; i--) { if (xmlbuf->namespaces[i].name.len == name->len && - !strncmpW( xmlbuf->namespaces[i].name.ptr, name->ptr, name->len )) + !wcsncmp( xmlbuf->namespaces[i].name.ptr, name->ptr, name->len )) return xmlbuf->namespaces[i].value; } if (xmlbuf->ns_pos) WARN( "namespace %s not found\n", debugstr_xmlstr( name )); @@ -1272,6 +1271,7 @@ static BOOL next_xml_attr(xmlbuf_t *xmlbuf, struct xml_attr *attr, BOOL *end) { const WCHAR* ptr; + WCHAR quote; if (xmlbuf->error) return FALSE; @@ -1319,11 +1319,12 @@ if (ptr == xmlbuf->end || (*ptr != '"' && *ptr != '\'')) return set_error( xmlbuf ); - attr->value.ptr = ++ptr; + quote = *ptr++; + attr->value.ptr = ptr; if (ptr == xmlbuf->end) return set_error( xmlbuf ); - ptr = memchrW(ptr, ptr[-1], xmlbuf->end - ptr); - if (!ptr) + while (ptr < xmlbuf->end && *ptr != quote) ptr++; + if (ptr == xmlbuf->end) { xmlbuf->ptr = xmlbuf->end; return set_error( xmlbuf ); @@ -1369,8 +1370,8 @@ for (;;) { - ptr = memchrW(xmlbuf->ptr, '<', xmlbuf->end - xmlbuf->ptr); - if (!ptr) + for (ptr = xmlbuf->ptr; ptr < xmlbuf->end; ptr++) if (*ptr == '<') break; + if (ptr == xmlbuf->end) { xmlbuf->ptr = xmlbuf->end; return set_error( xmlbuf ); @@ -1447,7 +1448,8 @@ if (xmlbuf->error) return FALSE; - if (!(ptr = memchrW(xmlbuf->ptr, '<', xmlbuf->end - xmlbuf->ptr))) return set_error( xmlbuf ); + for (ptr = xmlbuf->ptr; ptr < xmlbuf->end; ptr++) if (*ptr == '<') break; + if (ptr == xmlbuf->end) return set_error( xmlbuf ); content->ptr = xmlbuf->ptr; content->len = ptr - xmlbuf->ptr; @@ -1599,7 +1601,7 @@ n = (min+max)/2; - c = strncmpW(olemisc_values[n].name, str, len); + c = wcsncmp(olemisc_values[n].name, str, len); if (!c && !olemisc_values[n].name[len]) return olemisc_values[n].value; @@ -1948,7 +1950,7 @@ WCHAR buff[25]; if (!ret) ret = buff; - return sprintfW(ret, fmtW, ver->major, ver->minor, ver->build, ver->revision); + return NTDLL_swprintf(ret, fmtW, ver->major, ver->minor, ver->build, ver->revision); } static void parse_window_class_elem( xmlbuf_t *xmlbuf, struct dll_redirect *dll, @@ -2232,7 +2234,7 @@ { parse_assembly_identity_elem(xmlbuf, acl->actctx, &ai, &elem); /* store the newly found identity for later loading */ - if (ai.arch && !strcmpW(ai.arch, wildcardW)) ai.arch = strdupW( current_archW ); + if (ai.arch && !wcscmp(ai.arch, wildcardW)) ai.arch = strdupW( current_archW ); TRACE( "adding name=%s version=%s arch=%s\n", debugstr_w(ai.name), debugstr_version(&ai.version), debugstr_w(ai.arch) ); if (!add_dependent_assembly_id(acl, &ai)) set_error( xmlbuf ); @@ -3058,8 +3060,8 @@ if (!(status = get_module_filename( module, &name, sizeof(dotManifestW) + 10*sizeof(WCHAR) ))) { - if (resid != 1) sprintfW( name.Buffer + strlenW(name.Buffer), fmtW, resid ); - strcatW( name.Buffer, dotManifestW ); + if (resid != 1) NTDLL_swprintf( name.Buffer + wcslen(name.Buffer), fmtW, resid ); + wcscat( name.Buffer, dotManifestW ); if (!RtlDosPathNameToNtPathName_U( name.Buffer, &nameW, NULL, NULL )) status = STATUS_RESOURCE_DATA_NOT_FOUND; RtlFreeUnicodeString( &name ); @@ -3069,11 +3071,11 @@ else { if (!(buffer = RtlAllocateHeap( GetProcessHeap(), 0, - (strlenW(filename) + 10) * sizeof(WCHAR) + sizeof(dotManifestW) ))) + (wcslen(filename) + 10) * sizeof(WCHAR) + sizeof(dotManifestW) ))) return STATUS_NO_MEMORY; - strcpyW( buffer, filename ); - if (resid != 1) sprintfW( buffer + strlenW(buffer), fmtW, resid ); - strcatW( buffer, dotManifestW ); + wcscpy( buffer, filename ); + if (resid != 1) NTDLL_swprintf( buffer + wcslen(buffer), fmtW, resid ); + wcscat( buffer, dotManifestW ); RtlInitUnicodeString( &nameW, buffer ); } @@ -3104,11 +3106,11 @@ if (!lang || !wcsicmp( lang, neutralW )) lang = wildcardW; if (!(lookup = RtlAllocateHeap( GetProcessHeap(), 0, - (strlenW(ai->arch) + strlenW(ai->name) - + strlenW(ai->public_key) + strlenW(lang) + 20) * sizeof(WCHAR) + (wcslen(ai->arch) + wcslen(ai->name) + + wcslen(ai->public_key) + wcslen(lang) + 20) * sizeof(WCHAR) + sizeof(lookup_fmtW) ))) return NULL; - sprintfW( lookup, lookup_fmtW, ai->arch, ai->name, ai->public_key, + NTDLL_swprintf( lookup, lookup_fmtW, ai->arch, ai->name, ai->public_key, ai->version.major, ai->version.minor, lang ); RtlInitUnicodeString( &lookup_us, lookup ); @@ -3137,14 +3139,14 @@ if (dir_info->NextEntryOffset) data_pos += dir_info->NextEntryOffset; else data_pos = data_len; - tmp = dir_info->FileName + (strchrW(lookup, '*') - lookup); - build = atoiW(tmp); + tmp = dir_info->FileName + (wcschr(lookup, '*') - lookup); + build = wcstoul( tmp, NULL, 10 ); if (build < min_build) continue; - tmp = strchrW(tmp, '.') + 1; - revision = atoiW(tmp); + tmp = wcschr(tmp, '.') + 1; + revision = wcstoul( tmp, NULL, 10 ); if (build == min_build && revision < min_revision) continue; - tmp = strchrW(tmp, '_') + 1; - tmp = strchrW(tmp, '_') + 1; + tmp = wcschr(tmp, '_') + 1; + tmp = wcschr(tmp, '_') + 1; if (dir_info->FileNameLength - (tmp - dir_info->FileName) * sizeof(WCHAR) == sizeof(wine_trailerW) && !wcsnicmp( tmp, wine_trailerW, ARRAY_SIZE( wine_trailerW ))) { @@ -3187,11 +3189,11 @@ if (!ai->arch || !ai->name || !ai->public_key) return STATUS_NO_SUCH_FILE; if (!(path = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(manifest_dirW) + - strlenW(user_shared_data->NtSystemRoot) * sizeof(WCHAR) ))) + wcslen(user_shared_data->NtSystemRoot) * sizeof(WCHAR) ))) return STATUS_NO_MEMORY; - strcpyW( path, user_shared_data->NtSystemRoot ); - memcpy( path + strlenW(path), manifest_dirW, sizeof(manifest_dirW) ); + wcscpy( path, user_shared_data->NtSystemRoot ); + memcpy( path + wcslen(path), manifest_dirW, sizeof(manifest_dirW) ); if (!RtlDosPathNameToNtPathName_U( path, &path_us, NULL, NULL )) { @@ -3222,7 +3224,7 @@ /* append file name to directory path */ if (!(path = RtlReAllocateHeap( GetProcessHeap(), 0, path_us.Buffer, - path_us.Length + (strlenW(file) + 2) * sizeof(WCHAR) ))) + path_us.Length + (wcslen(file) + 2) * sizeof(WCHAR) ))) { RtlFreeHeap( GetProcessHeap(), 0, file ); RtlFreeUnicodeString( &path_us ); @@ -3230,9 +3232,9 @@ } path[path_us.Length/sizeof(WCHAR)] = '\\'; - strcpyW( path + path_us.Length/sizeof(WCHAR) + 1, file ); + wcscpy( path + path_us.Length/sizeof(WCHAR) + 1, file ); RtlInitUnicodeString( &path_us, path ); - *strrchrW(file, '.') = 0; /* remove .manifest extension */ + *wcsrchr(file, '.') = 0; /* remove .manifest extension */ if (!open_nt_file( &handle, &path_us )) { @@ -3265,11 +3267,11 @@ /* FIXME: add support for language specific lookup */ len = max(RtlGetFullPathName_U(acl->actctx->assemblies->manifest.info, 0, NULL, NULL) / sizeof(WCHAR), - strlenW(acl->actctx->appdir.info)); + wcslen(acl->actctx->appdir.info)); nameW.Buffer = NULL; if (!(buffer = RtlAllocateHeap( GetProcessHeap(), 0, - (len + 2 * strlenW(ai->name) + 2) * sizeof(WCHAR) + sizeof(dotManifestW) ))) + (len + 2 * wcslen(ai->name) + 2) * sizeof(WCHAR) + sizeof(dotManifestW) ))) return STATUS_NO_MEMORY; if (!(directory = build_assembly_dir( ai ))) @@ -3286,8 +3288,8 @@ * First 'appdir' is used as , if that failed * it tries application manifest file path. */ - strcpyW( buffer, acl->actctx->appdir.info ); - p = buffer + strlenW(buffer); + wcscpy( buffer, acl->actctx->appdir.info ); + p = buffer + wcslen(buffer); for (i = 0; i < 4; i++) { if (i == 2) @@ -3297,10 +3299,10 @@ } else *p++ = '\\'; - strcpyW( p, ai->name ); - p += strlenW(p); + wcscpy( p, ai->name ); + p += wcslen(p); - strcpyW( p, dotDllW ); + wcscpy( p, dotDllW ); if (RtlDosPathNameToNtPathName_U( buffer, &nameW, NULL, NULL )) { status = open_nt_file( &file, &nameW ); @@ -3315,7 +3317,7 @@ RtlFreeUnicodeString( &nameW ); } - strcpyW( p, dotManifestW ); + wcscpy( p, dotManifestW ); if (RtlDosPathNameToNtPathName_U( buffer, &nameW, NULL, NULL )) { status = open_nt_file( &file, &nameW ); @@ -3413,7 +3415,7 @@ /* each entry needs index, data and string data */ total_len += sizeof(*index); total_len += sizeof(*data); - total_len += aligned_string_len((strlenW(dll->name)+1)*sizeof(WCHAR)); + total_len += aligned_string_len((wcslen(dll->name)+1)*sizeof(WCHAR)); } dll_count += assembly->num_dlls; @@ -3443,7 +3445,7 @@ /* setup new index entry */ str.Buffer = dll->name; - str.Length = strlenW(dll->name)*sizeof(WCHAR); + str.Length = wcslen(dll->name)*sizeof(WCHAR); str.MaximumLength = str.Length + sizeof(WCHAR); /* hash original class name */ RtlHashUnicodeString(&str, TRUE, HASH_STRING_ALGORITHM_X65599, &index->hash); @@ -3602,7 +3604,7 @@ struct entity *entity = &dll->entities.base[k]; if (entity->kind == ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION) { - int class_len = strlenW(entity->u.class.name) + 1; + int class_len = wcslen(entity->u.class.name) + 1; int len; /* each class entry needs index, data and string data */ @@ -3615,7 +3617,7 @@ len = get_assembly_version(assembly, NULL) + class_len + 1 /* '!' separator */; else len = class_len; - len += strlenW(dll->name) + 1; + len += wcslen(dll->name) + 1; total_len += aligned_string_len(len*sizeof(WCHAR)); class_count++; @@ -3655,7 +3657,7 @@ /* setup new index entry */ str.Buffer = entity->u.class.name; - str.Length = strlenW(entity->u.class.name)*sizeof(WCHAR); + str.Length = wcslen(entity->u.class.name)*sizeof(WCHAR); str.MaximumLength = str.Length + sizeof(WCHAR); /* hash original class name */ RtlHashUnicodeString(&str, TRUE, HASH_STRING_ALGORITHM_X65599, &index->hash); @@ -3665,7 +3667,7 @@ versioned_len = (get_assembly_version(assembly, NULL) + 1)*sizeof(WCHAR) + str.Length; else versioned_len = str.Length; - module_len = strlenW(dll->name)*sizeof(WCHAR); + module_len = wcslen(dll->name)*sizeof(WCHAR); index->name_offset = name_offset; index->name_len = str.Length; @@ -3697,8 +3699,8 @@ if (entity->u.class.versioned) { get_assembly_version(assembly, ptrW); - strcatW(ptrW, exclW); - strcatW(ptrW, entity->u.class.name); + wcscat(ptrW, exclW); + wcscat(ptrW, entity->u.class.name); } else { @@ -3811,10 +3813,10 @@ total_len += sizeof(*data); /* help string is stored separately */ if (*entity->u.typelib.helpdir) - total_len += aligned_string_len((strlenW(entity->u.typelib.helpdir)+1)*sizeof(WCHAR)); + total_len += aligned_string_len((wcslen(entity->u.typelib.helpdir)+1)*sizeof(WCHAR)); /* module names are packed one after another */ - names_len += (strlenW(dll->name)+1)*sizeof(WCHAR); + names_len += (wcslen(dll->name)+1)*sizeof(WCHAR); tlib_count++; } @@ -3853,11 +3855,11 @@ WCHAR *ptrW; if (*entity->u.typelib.helpdir) - help_len = strlenW(entity->u.typelib.helpdir)*sizeof(WCHAR); + help_len = wcslen(entity->u.typelib.helpdir)*sizeof(WCHAR); else help_len = 0; - module_len = strlenW(dll->name)*sizeof(WCHAR); + module_len = wcslen(dll->name)*sizeof(WCHAR); /* setup new index entry */ RtlInitUnicodeString(&str, entity->u.typelib.tlbid); @@ -3991,11 +3993,11 @@ unsigned int str_len; /* all string data is stored together in aligned block */ - str_len = strlenW(entity->u.comclass.name)+1; + str_len = wcslen(entity->u.comclass.name)+1; if (entity->u.comclass.progid) - str_len += strlenW(entity->u.comclass.progid)+1; + str_len += wcslen(entity->u.comclass.progid)+1; if (entity->u.comclass.version) - str_len += strlenW(entity->u.comclass.version)+1; + str_len += wcslen(entity->u.comclass.version)+1; *len += sizeof(struct clrclass_data); *len += aligned_string_len(str_len*sizeof(WCHAR)); @@ -4007,9 +4009,9 @@ { /* progid string is stored separately */ if (entity->u.comclass.progid) - *len += aligned_string_len((strlenW(entity->u.comclass.progid)+1)*sizeof(WCHAR)); + *len += aligned_string_len((wcslen(entity->u.comclass.progid)+1)*sizeof(WCHAR)); - *module_len += (strlenW(dll->name)+1)*sizeof(WCHAR); + *module_len += (wcslen(dll->name)+1)*sizeof(WCHAR); } *count += 1; @@ -4036,11 +4038,11 @@ WCHAR *ptrW; if (entity->u.comclass.progid) - progid_len = strlenW(entity->u.comclass.progid)*sizeof(WCHAR); + progid_len = wcslen(entity->u.comclass.progid)*sizeof(WCHAR); else progid_len = 0; - module_len = dll ? strlenW(dll->name)*sizeof(WCHAR) : strlenW(mscoreeW)*sizeof(WCHAR); + module_len = dll ? wcslen(dll->name)*sizeof(WCHAR) : wcslen(mscoreeW)*sizeof(WCHAR); /* setup new index entry */ RtlInitUnicodeString(&str, entity->u.comclass.clsid); @@ -4108,11 +4110,11 @@ clrdata->size = sizeof(*clrdata); clrdata->res[0] = 0; clrdata->res[1] = 2; /* FIXME: unknown field */ - clrdata->module_len = strlenW(mscoreeW)*sizeof(WCHAR); + clrdata->module_len = wcslen(mscoreeW)*sizeof(WCHAR); clrdata->module_offset = *module_offset + data->name_len + sizeof(WCHAR); - clrdata->name_len = strlenW(entity->u.comclass.name)*sizeof(WCHAR); + clrdata->name_len = wcslen(entity->u.comclass.name)*sizeof(WCHAR); clrdata->name_offset = clrdata->size; - clrdata->version_len = entity->u.comclass.version ? strlenW(entity->u.comclass.version)*sizeof(WCHAR) : 0; + clrdata->version_len = entity->u.comclass.version ? wcslen(entity->u.comclass.version)*sizeof(WCHAR) : 0; clrdata->version_offset = clrdata->version_len ? clrdata->name_offset + clrdata->name_len + sizeof(WCHAR) : 0; clrdata->res2[0] = 0; clrdata->res2[1] = 0; @@ -4301,7 +4303,7 @@ { *len += sizeof(struct guid_index) + sizeof(struct ifacepsredirect_data); if (entity->u.ifaceps.name) - *len += aligned_string_len((strlenW(entity->u.ifaceps.name)+1)*sizeof(WCHAR)); + *len += aligned_string_len((wcslen(entity->u.ifaceps.name)+1)*sizeof(WCHAR)); *count += 1; } } @@ -4322,7 +4324,7 @@ ULONG name_len; if (entity->u.ifaceps.name) - name_len = strlenW(entity->u.ifaceps.name)*sizeof(WCHAR); + name_len = wcslen(entity->u.ifaceps.name)*sizeof(WCHAR); else name_len = 0; @@ -4498,9 +4500,9 @@ ULONG len; total_len += sizeof(*index) + sizeof(*data); - len = strlenW(entity->u.clrsurrogate.name) + 1; + len = wcslen(entity->u.clrsurrogate.name) + 1; if (entity->u.clrsurrogate.version) - len += strlenW(entity->u.clrsurrogate.version) + 1; + len += wcslen(entity->u.clrsurrogate.version) + 1; total_len += aligned_string_len(len*sizeof(WCHAR)); count++; @@ -4534,10 +4536,10 @@ WCHAR *ptrW; if (entity->u.clrsurrogate.version) - version_len = strlenW(entity->u.clrsurrogate.version)*sizeof(WCHAR); + version_len = wcslen(entity->u.clrsurrogate.version)*sizeof(WCHAR); else version_len = 0; - name_len = strlenW(entity->u.clrsurrogate.name)*sizeof(WCHAR); + name_len = wcslen(entity->u.clrsurrogate.name)*sizeof(WCHAR); /* setup new index entry */ RtlInitUnicodeString(&str, entity->u.clrsurrogate.clsid); @@ -4642,12 +4644,12 @@ { if (entity->u.comclass.progid) { - *total_len += single_len + aligned_string_len((strlenW(entity->u.comclass.progid)+1)*sizeof(WCHAR)); + *total_len += single_len + aligned_string_len((wcslen(entity->u.comclass.progid)+1)*sizeof(WCHAR)); *count += 1; } for (j = 0; j < entity->u.comclass.progids.num; j++) - *total_len += aligned_string_len((strlenW(entity->u.comclass.progids.progids[j])+1)*sizeof(WCHAR)); + *total_len += aligned_string_len((wcslen(entity->u.comclass.progids.progids[j])+1)*sizeof(WCHAR)); *total_len += single_len*entity->u.comclass.progids.num; *count += entity->u.comclass.progids.num; @@ -4923,8 +4925,8 @@ { struct entity *entity = &assembly->entities.base[j]; if (entity->kind == ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS && - !strcmpW( entity->u.settings.name, settings ) && - !strcmpW( entity->u.settings.ns, ns )) + !wcscmp( entity->u.settings.name, settings ) && + !wcscmp( entity->u.settings.ns, ns )) return entity->u.settings.value; } } @@ -4995,7 +4997,7 @@ else module = NtCurrentTeb()->Peb->ImageBaseAddress; if ((status = get_module_filename( module, &dir, 0 ))) goto error; - if ((p = strrchrW( dir.Buffer, '\\' ))) p[1] = 0; + if ((p = wcsrchr( dir.Buffer, '\\' ))) p[1] = 0; actctx->appdir.info = dir.Buffer; } @@ -5013,8 +5015,8 @@ { DWORD dir_len, source_len; - dir_len = strlenW(pActCtx->lpAssemblyDirectory); - source_len = strlenW(pActCtx->lpSource); + dir_len = wcslen(pActCtx->lpAssemblyDirectory); + source_len = wcslen(pActCtx->lpSource); if (!(source = RtlAllocateHeap( GetProcessHeap(), 0, (dir_len+source_len+2)*sizeof(WCHAR)))) { status = STATUS_NO_MEMORY; @@ -5274,9 +5276,9 @@ if (actctx->num_assemblies) assembly = actctx->assemblies; if (assembly && assembly->manifest.info) - manifest_len = strlenW(assembly->manifest.info) + 1; - if (actctx->config.info) config_len = strlenW(actctx->config.info) + 1; - if (actctx->appdir.info) appdir_len = strlenW(actctx->appdir.info) + 1; + manifest_len = wcslen(assembly->manifest.info) + 1; + if (actctx->config.info) config_len = wcslen(actctx->config.info) + 1; + if (actctx->appdir.info) appdir_len = wcslen(actctx->appdir.info) + 1; len = sizeof(*acdi) + (manifest_len + config_len + appdir_len) * sizeof(WCHAR); if (retlen) *retlen = len; @@ -5333,12 +5335,12 @@ assembly = &actctx->assemblies[index - 1]; if (!(assembly_id = build_assembly_id( &assembly->id ))) return STATUS_NO_MEMORY; - id_len = strlenW(assembly_id) + 1; - if (assembly->directory) ad_len = strlenW(assembly->directory) + 1; + id_len = wcslen(assembly_id) + 1; + if (assembly->directory) ad_len = wcslen(assembly->directory) + 1; if (assembly->manifest.info && (assembly->type == ASSEMBLY_MANIFEST || assembly->type == ASSEMBLY_SHARED_MANIFEST)) - path_len = strlenW(assembly->manifest.info) + 1; + path_len = wcslen(assembly->manifest.info) + 1; len = sizeof(*afdi) + (id_len + ad_len + path_len) * sizeof(WCHAR); @@ -5404,7 +5406,7 @@ return STATUS_INVALID_PARAMETER; dll = &assembly->dlls[acqi->ulFileIndexInAssembly]; - if (dll->name) dll_len = strlenW(dll->name) + 1; + if (dll->name) dll_len = wcslen(dll->name) + 1; len = sizeof(*afdi) + dll_len * sizeof(WCHAR); if (!buffer || bufsize < len) @@ -5586,10 +5588,10 @@ if (ns) { - if (strcmpW( ns, windowsSettings2005NSW ) && - strcmpW( ns, windowsSettings2011NSW ) && - strcmpW( ns, windowsSettings2016NSW ) && - strcmpW( ns, windowsSettings2017NSW )) + if (wcscmp( ns, windowsSettings2005NSW ) && + wcscmp( ns, windowsSettings2011NSW ) && + wcscmp( ns, windowsSettings2016NSW ) && + wcscmp( ns, windowsSettings2017NSW )) return STATUS_INVALID_PARAMETER; } else ns = windowsSettings2005NSW; @@ -5599,8 +5601,8 @@ if (!(res = find_app_settings( actctx, settings, ns ))) return STATUS_SXS_KEY_NOT_FOUND; - if (written) *written = strlenW(res) + 1; - if (size < strlenW(res)) return STATUS_BUFFER_TOO_SMALL; - strcpyW( buffer, res ); + if (written) *written = wcslen(res) + 1; + if (size < wcslen(res)) return STATUS_BUFFER_TOO_SMALL; + wcscpy( buffer, res ); return STATUS_SUCCESS; } diff -Nru wine-development-5.5/dlls/ntdll/atom.c wine-development-5.6/dlls/ntdll/atom.c --- wine-development-5.5/dlls/ntdll/atom.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/atom.c 2020-04-10 18:54:32.000000000 +0000 @@ -33,7 +33,7 @@ #include "windef.h" #include "wine/server.h" -#include "wine/unicode.h" +#include "ntdll_misc.h" #include "wine/debug.h" @@ -109,7 +109,7 @@ WCHAR tmp[16]; int ret; - ret = sprintfW( tmp, fmt, atom ); + ret = NTDLL_swprintf( tmp, fmt, atom ); if (!len) return ret * sizeof(WCHAR); if (len <= ret) ret = len - 1; memcpy( buffer, tmp, ret * sizeof(WCHAR) ); @@ -212,7 +212,7 @@ if (!table) status = STATUS_INVALID_PARAMETER; else { - size_t len = IS_INTATOM(name) ? 0 : strlenW(name); + size_t len = IS_INTATOM(name) ? 0 : wcslen(name); status = is_integral_atom( name, len, atom ); if (status == STATUS_MORE_ENTRIES) { @@ -242,7 +242,7 @@ if (!table) status = STATUS_INVALID_PARAMETER; else { - size_t len = IS_INTATOM(name) ? 0 : strlenW(name); + size_t len = IS_INTATOM(name) ? 0 : wcslen(name); status = is_integral_atom( name, len, atom ); if (status == STATUS_MORE_ENTRIES) { diff -Nru wine-development-5.5/dlls/ntdll/directory.c wine-development-5.6/dlls/ntdll/directory.c --- wine-development-5.5/dlls/ntdll/directory.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/directory.c 2020-04-10 18:54:32.000000000 +0000 @@ -104,7 +104,6 @@ #include "winternl.h" #include "ddk/wdm.h" #include "ntdll_misc.h" -#include "wine/unicode.h" #include "wine/server.h" #include "wine/list.h" #include "wine/library.h" @@ -234,7 +233,7 @@ { static const WCHAR invalid_chars[] = { INVALID_DOS_CHARS,'~','.',0 }; if (ch > 0x7f) return TRUE; - return strchrW( invalid_chars, ch ) != NULL; + return wcschr( invalid_chars, ch ) != NULL; } /* check if the device can be a mounted volume */ @@ -305,9 +304,12 @@ static inline BOOL has_wildcard( const UNICODE_STRING *mask ) { - return (!mask || - memchrW( mask->Buffer, '*', mask->Length / sizeof(WCHAR) ) || - memchrW( mask->Buffer, '?', mask->Length / sizeof(WCHAR) )); + int i; + + if (!mask) return TRUE; + for (i = 0; i < mask->Length / sizeof(WCHAR); i++) + if (mask->Buffer[i] == '*' || mask->Buffer[i] == '?') return TRUE; + return FALSE; } /* get space from the current directory data buffer, allocating a new one if necessary */ @@ -344,8 +346,8 @@ /* add a Unicode string to the directory data buffer */ static const WCHAR *add_dir_data_nameW( struct dir_data *data, const WCHAR *name ) { - WCHAR *ptr = get_dir_data_space( data, (strlenW( name ) + 1) * sizeof(WCHAR) ); - if (ptr) strcpyW( ptr, name ); + WCHAR *ptr = get_dir_data_space( data, (wcslen( name ) + 1) * sizeof(WCHAR) ); + if (ptr) wcscpy( ptr, name ); return ptr; } @@ -1316,8 +1318,8 @@ if (!is_case_sensitive) { for (p = name->Buffer, hash = 0xbeef; p < end - 1; p++) - hash = (hash<<3) ^ (hash>>5) ^ tolowerW(*p) ^ (tolowerW(p[1]) << 8); - hash = (hash<<3) ^ (hash>>5) ^ tolowerW(*p); /* Last character */ + hash = (hash<<3) ^ (hash>>5) ^ RtlDowncaseUnicodeChar(*p) ^ (RtlDowncaseUnicodeChar(p[1]) << 8); + hash = (hash<<3) ^ (hash>>5) ^ RtlDowncaseUnicodeChar(*p); /* Last character */ } else { @@ -1394,7 +1396,7 @@ if (is_case_sensitive) while (name < name_end && (*name != *mask)) name++; else - while (name < name_end && (toupperW(*name) != toupperW(*mask))) name++; + while (name < name_end && (towupper(*name) != towupper(*mask))) name++; next_to_retry = name; break; case '?': @@ -1403,7 +1405,7 @@ break; default: if (is_case_sensitive) mismatch = (*mask != *name); - else mismatch = (toupperW(*mask) != toupperW(*name)); + else mismatch = (towupper(*mask) != towupper(*name)); if (!mismatch) { @@ -1519,7 +1521,7 @@ if (start + dir_size > max_length) return STATUS_MORE_ENTRIES; max_length -= start + dir_size; - name_len = strlenW( names->long_name ) * sizeof(WCHAR); + name_len = wcslen( names->long_name ) * sizeof(WCHAR); /* if this is not the first entry, fail; the first entry is always returned (but truncated) */ if (*last_info && name_len > max_length) return STATUS_MORE_ENTRIES; @@ -1557,14 +1559,14 @@ case FileBothDirectoryInformation: info->both.EaSize = 0; /* FIXME */ - info->both.ShortNameLength = strlenW( names->short_name ) * sizeof(WCHAR); + info->both.ShortNameLength = wcslen( names->short_name ) * sizeof(WCHAR); memcpy( info->both.ShortName, names->short_name, info->both.ShortNameLength ); info->both.FileNameLength = name_len; break; case FileIdBothDirectoryInformation: info->id_both.EaSize = 0; /* FIXME */ - info->id_both.ShortNameLength = strlenW( names->short_name ) * sizeof(WCHAR); + info->id_both.ShortNameLength = wcslen( names->short_name ) * sizeof(WCHAR); memcpy( info->id_both.ShortName, names->short_name, info->id_both.ShortNameLength ); info->id_both.FileNameLength = name_len; break; @@ -1815,9 +1817,9 @@ { const struct dir_data_names *file_a = (const struct dir_data_names *)a; const struct dir_data_names *file_b = (const struct dir_data_names *)b; - int ret = RtlCompareUnicodeStrings( file_a->long_name, strlenW(file_a->long_name), - file_b->long_name, strlenW(file_b->long_name), TRUE ); - if (!ret) ret = strcmpW( file_a->long_name, file_b->long_name ); + int ret = RtlCompareUnicodeStrings( file_a->long_name, wcslen(file_a->long_name), + file_b->long_name, wcslen(file_b->long_name), TRUE ); + if (!ret) ret = wcscmp( file_a->long_name, file_b->long_name ); return ret; } @@ -2245,29 +2247,24 @@ { int i = 0; - while (i < len && *redir) + while (i < len) { - if (IS_SEPARATOR(path[i])) + int start = i; + while (i < len && !IS_SEPARATOR(path[i])) i++; + if (check_case) { - if (*redir++ != '\\') return 0; - while (i < len && IS_SEPARATOR(path[i])) i++; - continue; /* move on to next path component */ - } - else if (check_case) - { - if (path[i] != *redir) return 0; + if (wcsncmp( path + start, redir, i - start )) return 0; } else { - if (tolowerW(path[i]) != tolowerW(*redir)) return 0; + if (wcsnicmp( path + start, redir, i - start )) return 0; } - i++; - redir++; + redir += i - start; + while (i < len && IS_SEPARATOR(path[i])) i++; + if (!*redir) return i; + if (*redir++ != '\\') return 0; } - if (*redir) return 0; - if (i < len && !IS_SEPARATOR(path[i])) return 0; - while (i < len && IS_SEPARATOR(path[i])) i++; - return i; + return 0; } @@ -2687,7 +2684,7 @@ /* check for invalid characters */ for (p = name; p < name + name_len; p++) - if (*p < 32 || strchrW( invalid_charsW, *p )) return STATUS_OBJECT_NAME_INVALID; + if (*p < 32 || wcschr( invalid_charsW, *p )) return STATUS_OBJECT_NAME_INVALID; unix_len = name_len * 3 + MAX_DIR_ENTRY_LEN + 3; if (!(unix_name = RtlAllocateHeap( GetProcessHeap(), 0, unix_len ))) @@ -2775,7 +2772,7 @@ for (pos = 0; pos < name_len; pos++) { if (IS_SEPARATOR(name[pos])) break; - if (name[pos] < 32 || strchrW( invalid_charsW, name[pos] )) + if (name[pos] < 32 || wcschr( invalid_charsW, name[pos] )) return STATUS_OBJECT_NAME_INVALID; } if (pos > MAX_DIR_ENTRY_LEN) @@ -2803,7 +2800,7 @@ else { for (p = name; p < name + name_len; p++) - if (*p < 32 || strchrW( invalid_charsW, *p )) return STATUS_OBJECT_NAME_INVALID; + if (*p < 32 || wcschr( invalid_charsW, *p )) return STATUS_OBJECT_NAME_INVALID; } unix_len = (prefix_len + name_len) * 3 + MAX_DIR_ENTRY_LEN + 3; diff -Nru wine-development-5.5/dlls/ntdll/env.c wine-development-5.6/dlls/ntdll/env.c --- wine-development-5.5/dlls/ntdll/env.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/env.c 2020-04-10 18:54:32.000000000 +0000 @@ -36,7 +36,6 @@ #include "windef.h" #include "winternl.h" #include "wine/library.h" -#include "wine/unicode.h" #include "wine/debug.h" #include "ntdll_misc.h" #include "winnt.h" @@ -56,7 +55,7 @@ static inline SIZE_T get_env_length( const WCHAR *env ) { const WCHAR *end = env; - while (*end) end += strlenW(end) + 1; + while (*end) end += wcslen(end) + 1; return end + 1 - env; } @@ -399,10 +398,10 @@ set_wine_path_variable( env, wineconfigdirW, wine_get_config_dir() ); for (i = 0; (path = wine_dll_enum_load_path( i )); i++) { - sprintfW( buf, winedlldirW, i ); + NTDLL_swprintf( buf, winedlldirW, i ); set_wine_path_variable( env, buf, path ); } - sprintfW( buf, winedlldirW, i ); + NTDLL_swprintf( buf, winedlldirW, i ); set_wine_path_variable( env, buf, NULL ); /* set the PROCESSOR_ARCHITECTURE variable */ @@ -499,7 +498,7 @@ else if (is_special_env_var( str )) continue; /* skip it */ ntdll_umbstowcs( str, strlen(str) + 1, p, size - (p - ptr) ); - p += strlenW(p) + 1; + p += wcslen(p) + 1; } *p = 0; first_prefix_start = set_registry_environment( &ptr, TRUE ); @@ -640,7 +639,7 @@ { MESSAGE("Warning: could not find DOS drive for current working directory '%s', " "starting in the Windows directory.\n", cwd ? cwd : "" ); - dir->Length = strlenW( windows_dir ) * sizeof(WCHAR); + dir->Length = wcslen( windows_dir ) * sizeof(WCHAR); memcpy( dir->Buffer, windows_dir, dir->Length ); } RtlFreeHeap( GetProcessHeap(), 0, cwd ); @@ -660,7 +659,7 @@ */ static inline BOOL is_path_prefix( const WCHAR *prefix, const WCHAR *path, const WCHAR *file ) { - DWORD len = strlenW( prefix ); + DWORD len = wcslen( prefix ); if (wcsnicmp( path, prefix, len )) return FALSE; while (path[len] == '\\') len++; @@ -681,15 +680,15 @@ ntdll_umbstowcs( argv0, len, name, len ); if (RtlDetermineDosPathNameType_U( name ) != RELATIVE_PATH || - strchrW( name, '/' ) || strchrW( name, '\\' )) + wcschr( name, '/' ) || wcschr( name, '\\' )) { len = RtlGetFullPathName_U( name, sizeof(full_name), full_name, &file_part ); if (!len || len > sizeof(full_name)) goto failed; /* try first without extension */ if (RtlDoesFileExists_U( full_name )) goto done; - if (len < (MAX_PATH - 4) * sizeof(WCHAR) && !strchrW( file_part, '.' )) + if (len < (MAX_PATH - 4) * sizeof(WCHAR) && !wcschr( file_part, '.' )) { - strcatW( file_part, exeW ); + wcscat( file_part, exeW ); if (RtlDoesFileExists_U( full_name )) goto done; } /* check for builtin path inside system directory */ @@ -707,11 +706,11 @@ if (!len || len > sizeof(full_name)) { /* build builtin path inside system directory */ - len = strlenW( system_dir ); - if (strlenW( name ) >= MAX_PATH - 4 - len) goto failed; - strcpyW( full_name, system_dir ); - strcatW( full_name, name ); - if (!strchrW( name, '.' )) strcatW( full_name, exeW ); + len = wcslen( system_dir ); + if (wcslen( name ) >= MAX_PATH - 4 - len) goto failed; + wcscpy( full_name, system_dir ); + wcscat( full_name, name ); + if (!wcschr( name, '.' )) wcscat( full_name, exeW ); } } done: @@ -744,7 +743,7 @@ p = (WCHAR *)(wargv + argc + 1); if (image) { - strcpyW( p, image->Buffer ); + wcscpy( p, image->Buffer ); wargv[0] = p; p += 1 + image->Length / sizeof(WCHAR); total -= 1 + image->Length / sizeof(WCHAR); @@ -796,7 +795,7 @@ LPWSTR p; len = 1; - for (arg = argv; *arg; arg++) len += 3 + 2 * strlenW( *arg ); + for (arg = argv; *arg; arg++) len += 3 + 2 * wcslen( *arg ); cmdline->MaximumLength = len * sizeof(WCHAR); if (!(cmdline->Buffer = RtlAllocateHeap( GetProcessHeap(), 0, cmdline->MaximumLength ))) return; @@ -809,8 +808,8 @@ /* check for quotes and spaces in this argument */ if (arg == argv || !**arg) has_space = TRUE; - else has_space = strchrW( *arg, ' ' ) || strchrW( *arg, '\t' ); - has_quote = strchrW( *arg, '"' ) != NULL; + else has_space = wcschr( *arg, ' ' ) || wcschr( *arg, '\t' ); + has_quote = wcschr( *arg, '"' ) != NULL; /* now transfer it to the command line */ if (has_space) *p++ = '"'; @@ -831,8 +830,8 @@ } else { - strcpyW( p, *arg ); - p += strlenW( p ); + wcscpy( p, *arg ); + p += wcslen( p ); } if (has_space) { @@ -908,11 +907,11 @@ /* match var names, but avoid setting a var with a name including a '=' * (a starting '=' is valid though) */ - unsigned int len = strlenW( var ); + unsigned int len = wcslen( var ); if (len > namelen && var[namelen] == '=' && !RtlCompareUnicodeStrings( var, namelen, name, namelen, TRUE ) && - strchrW(var + 1, '=') == var + namelen) + wcschr(var + 1, '=') == var + namelen) { return var + namelen + 1; } @@ -953,7 +952,7 @@ var = ENV_FindVariable(var, name->Buffer, namelen); if (var != NULL) { - value->Length = strlenW(var) * sizeof(WCHAR); + value->Length = wcslen(var) * sizeof(WCHAR); if (value->Length <= value->MaximumLength) { @@ -1017,7 +1016,7 @@ /* Find a place to insert the string */ for (p = env; *p; p += varlen + 1) { - varlen = strlenW(p); + varlen = wcslen(p); if (varlen > len && p[len] == '=' && !RtlCompareUnicodeStrings( name->Buffer, len, p, len, TRUE )) break; } @@ -1025,11 +1024,11 @@ /* Realloc the buffer */ len = value ? len + value->Length / sizeof(WCHAR) + 2 : 0; - if (*p) len -= strlenW(p) + 1; /* The name already exists */ + if (*p) len -= wcslen(p) + 1; /* The name already exists */ if (len < 0) { - LPWSTR next = p + strlenW(p) + 1; /* We know there is a next one */ + LPWSTR next = p + wcslen(p) + 1; /* We know there is a next one */ memmove(next + len, next, (old_size - (next - env)) * sizeof(WCHAR)); } @@ -1081,7 +1080,7 @@ WCHAR *dst, SIZE_T count, SIZE_T *plen ) { SIZE_T len, total_size = 1; /* 1 for terminating '\0' */ - LPCWSTR env, p, var; + LPCWSTR env, var; if (!renv) { @@ -1094,27 +1093,26 @@ { if (*src != '%') { - if ((p = memchrW( src, '%', src_len ))) len = p - src; - else len = src_len; + for (len = 0; len < src_len; len++) if (src[len] == '%') break; var = src; src += len; src_len -= len; } else /* we are at the start of a variable */ { - if ((p = memchrW( src + 1, '%', src_len - 1 ))) + for (len = 1; len < src_len; len++) if (src[len] == '%') break; + if (len < src_len) { - len = p - src - 1; /* Length of the variable name */ - if ((var = ENV_FindVariable( env, src + 1, len ))) + if ((var = ENV_FindVariable( env, src + 1, len - 1 ))) { - src += len + 2; /* Skip the variable name */ - src_len -= len + 2; - len = strlenW(var); + src += len + 1; /* Skip the variable name */ + src_len -= len + 1; + len = wcslen(var); } else { var = src; /* Copy original name instead */ - len += 2; + len++; src += len; src_len -= len; } @@ -1122,7 +1120,6 @@ else /* unfinished variable name, ignore it */ { var = src; - len = src_len; /* Copy whole string */ src += len; src_len = 0; } diff -Nru wine-development-5.5/dlls/ntdll/file.c wine-development-5.6/dlls/ntdll/file.c --- wine-development-5.5/dlls/ntdll/file.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/file.c 2020-04-10 18:54:32.000000000 +0000 @@ -99,7 +99,6 @@ #include "ntstatus.h" #define WIN32_NO_STATUS #define NONAMELESSUNION -#include "wine/unicode.h" #include "wine/debug.h" #include "wine/server.h" #include "ntdll_misc.h" @@ -108,6 +107,8 @@ #include "winioctl.h" #include "ddk/ntddk.h" #include "ddk/ntddser.h" +#define WINE_MOUNTMGR_EXTENSIONS +#include "ddk/mountmgr.h" WINE_DEFAULT_DEBUG_CHANNEL(ntdll); WINE_DECLARE_DEBUG_CHANNEL(winediag); @@ -120,8 +121,6 @@ #define FILE_WRITE_TO_END_OF_FILE ((LONGLONG)-1) #define FILE_USE_FILE_POINTER_POSITION ((LONGLONG)-2) -static const WCHAR ntfsW[] = {'N','T','F','S'}; - /* fetch the attributes of a file */ static inline ULONG get_file_attributes( const struct stat *st ) { @@ -2238,6 +2237,124 @@ } +/* Find a DOS device which can act as the root of "path". + * Similar to find_drive_root(), but returns -1 instead of crossing volumes. */ +static int find_dos_device( const char *path ) +{ + int len = strlen(path); + int drive; + char *buffer; + struct stat st; + struct drive_info info[MAX_DOS_DRIVES]; + dev_t dev_id; + + if (!DIR_get_drives_info( info )) return -1; + + if (stat( path, &st ) < 0) return -1; + dev_id = st.st_dev; + + /* strip off trailing slashes */ + while (len > 1 && path[len - 1] == '/') len--; + + /* make a copy of the path */ + if (!(buffer = RtlAllocateHeap( GetProcessHeap(), 0, len + 1 ))) return -1; + memcpy( buffer, path, len ); + buffer[len] = 0; + + for (;;) + { + if (!stat( buffer, &st ) && S_ISDIR( st.st_mode )) + { + if (st.st_dev != dev_id) break; + + for (drive = 0; drive < MAX_DOS_DRIVES; drive++) + { + if ((info[drive].dev == st.st_dev) && (info[drive].ino == st.st_ino)) + { + if (len == 1) len = 0; /* preserve root slash in returned path */ + TRACE( "%s -> drive %c:, root=%s, name=%s\n", + debugstr_a(path), 'A' + drive, debugstr_a(buffer), debugstr_a(path + len)); + RtlFreeHeap( GetProcessHeap(), 0, buffer ); + return drive; + } + } + } + if (len <= 1) break; /* reached root */ + while (path[len - 1] != '/') len--; + while (path[len - 1] == '/') len--; + buffer[len] = 0; + } + RtlFreeHeap( GetProcessHeap(), 0, buffer ); + return -1; +} + +static struct mountmgr_unix_drive *get_mountmgr_fs_info( HANDLE handle, int fd ) +{ + struct mountmgr_unix_drive *drive; + OBJECT_ATTRIBUTES attr; + UNICODE_STRING string; + ANSI_STRING unix_name; + IO_STATUS_BLOCK io; + HANDLE mountmgr; + NTSTATUS status; + int letter; + + if (server_get_unix_name( handle, &unix_name )) + return NULL; + + letter = find_dos_device( unix_name.Buffer ); + RtlFreeAnsiString( &unix_name ); + + if (!(drive = RtlAllocateHeap( GetProcessHeap(), 0, 1024 ))) + return NULL; + + if (letter == -1) + { + struct stat st; + + if (fstat( fd, &st ) == -1) + { + RtlFreeHeap( GetProcessHeap(), 0, drive ); + return NULL; + } + + drive->unix_dev = st.st_dev; + drive->letter = 0; + } + else + drive->letter = 'a' + letter; + + RtlInitUnicodeString( &string, MOUNTMGR_DEVICE_NAME ); + InitializeObjectAttributes( &attr, &string, 0, NULL, NULL ); + if (NtOpenFile( &mountmgr, GENERIC_READ | SYNCHRONIZE, &attr, &io, + FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_SYNCHRONOUS_IO_NONALERT )) + return NULL; + + status = NtDeviceIoControlFile( mountmgr, NULL, NULL, NULL, &io, IOCTL_MOUNTMGR_QUERY_UNIX_DRIVE, + drive, sizeof(*drive), drive, 1024 ); + if (status == STATUS_BUFFER_OVERFLOW) + { + if (!(drive = RtlReAllocateHeap( GetProcessHeap(), 0, drive, drive->size ))) + { + RtlFreeHeap( GetProcessHeap(), 0, drive ); + NtClose( mountmgr ); + return NULL; + } + status = NtDeviceIoControlFile( mountmgr, NULL, NULL, NULL, &io, IOCTL_MOUNTMGR_QUERY_UNIX_DRIVE, + drive, sizeof(*drive), drive, drive->size ); + } + NtClose( mountmgr ); + + if (status) + { + WARN("failed to retrieve filesystem type from mountmgr, status %#x\n", status); + RtlFreeHeap( GetProcessHeap(), 0, drive ); + return NULL; + } + + return drive; +} + /****************************************************************************** * NtQueryInformationFile [NTDLL.@] * ZwQueryInformationFile [NTDLL.@] @@ -2508,8 +2625,15 @@ if (fd_get_file_info( fd, options, &st, &attr ) == -1) io->u.Status = FILE_GetNtStatus(); else { + struct mountmgr_unix_drive *drive; FILE_ID_INFORMATION *info = ptr; - info->VolumeSerialNumber = 0; /* FIXME */ + + info->VolumeSerialNumber = 0; + if ((drive = get_mountmgr_fs_info( hFile, fd ))) + { + info->VolumeSerialNumber = drive->serial; + RtlFreeHeap( GetProcessHeap(), 0, drive ); + } memset( &info->FileId, 0, sizeof(info->FileId) ); *(ULONGLONG *)&info->FileId = st.st_ino; } @@ -3121,7 +3245,6 @@ return STATUS_SUCCESS; } - /****************************************************************************** * NtQueryVolumeInformationFile [NTDLL.@] * ZwQueryVolumeInformationFile [NTDLL.@] @@ -3145,7 +3268,6 @@ { int fd, needs_close; struct stat st; - static int once; io->u.Status = server_get_unix_fd( handle, 0, &fd, &needs_close, NULL, NULL ); if (io->u.Status == STATUS_BAD_DEVICE_TYPE) @@ -3168,9 +3290,6 @@ switch( info_class ) { - case FileFsVolumeInformation: - if (!once++) FIXME( "%p: volume info not supported\n", handle ); - break; case FileFsLabelInformation: FIXME( "%p: label info not supported\n", handle ); break; @@ -3241,24 +3360,127 @@ } break; case FileFsAttributeInformation: - if (length < offsetof( FILE_FS_ATTRIBUTE_INFORMATION, FileSystemName[ARRAY_SIZE( ntfsW )] )) - io->u.Status = STATUS_BUFFER_TOO_SMALL; + { + static const WCHAR fatW[] = {'F','A','T'}; + static const WCHAR fat32W[] = {'F','A','T','3','2'}; + static const WCHAR ntfsW[] = {'N','T','F','S'}; + static const WCHAR cdfsW[] = {'C','D','F','S'}; + static const WCHAR udfW[] = {'U','D','F'}; + + FILE_FS_ATTRIBUTE_INFORMATION *info = buffer; + struct mountmgr_unix_drive *drive; + enum mountmgr_fs_type fs_type = MOUNTMGR_FS_TYPE_NTFS; + + if (length < sizeof(FILE_FS_ATTRIBUTE_INFORMATION)) + { + io->u.Status = STATUS_INFO_LENGTH_MISMATCH; + break; + } + + if ((drive = get_mountmgr_fs_info( handle, fd ))) + { + fs_type = drive->fs_type; + RtlFreeHeap( GetProcessHeap(), 0, drive ); + } else { - FILE_FS_ATTRIBUTE_INFORMATION *info = buffer; + struct statfs stfs; - FIXME( "%p: faking attribute info\n", handle ); - info->FileSystemAttributes = FILE_SUPPORTS_ENCRYPTION | FILE_FILE_COMPRESSION | - FILE_PERSISTENT_ACLS | FILE_UNICODE_ON_DISK | - FILE_CASE_PRESERVED_NAMES | FILE_CASE_SENSITIVE_SEARCH; - info->MaximumComponentNameLength = MAXIMUM_FILENAME_LENGTH - 1; - info->FileSystemNameLength = sizeof(ntfsW); - memcpy(info->FileSystemName, ntfsW, sizeof(ntfsW)); + if (!fstatfs( fd, &stfs )) + { +#if defined(linux) && defined(HAVE_FSTATFS) + switch (stfs.f_type) + { + case 0x9660: + fs_type = MOUNTMGR_FS_TYPE_ISO9660; + break; + case 0x15013346: + fs_type = MOUNTMGR_FS_TYPE_UDF; + break; + case 0x4d44: + fs_type = MOUNTMGR_FS_TYPE_FAT32; + break; + } +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__APPLE__) + if (!strcmp( stfs.f_fstypename, "cd9660" )) + fs_type = MOUNTMGR_FS_TYPE_ISO9660; + else if (!strcmp( stfs.f_fstypename, "udf" )) + fs_type = MOUNTMGR_FS_TYPE_UDF; + else if (!strcmp( stfs.f_fstypename, "msdos" )) + fs_type = MOUNTMGR_FS_TYPE_FAT32; +#endif + } + } - io->Information = sizeof(*info); - io->u.Status = STATUS_SUCCESS; + switch (fs_type) + { + case MOUNTMGR_FS_TYPE_ISO9660: + info->FileSystemAttributes = FILE_READ_ONLY_VOLUME; + info->MaximumComponentNameLength = 221; + info->FileSystemNameLength = min( sizeof(cdfsW), length - offsetof( FILE_FS_ATTRIBUTE_INFORMATION, FileSystemName ) ); + memcpy(info->FileSystemName, cdfsW, info->FileSystemNameLength); + break; + case MOUNTMGR_FS_TYPE_UDF: + info->FileSystemAttributes = FILE_READ_ONLY_VOLUME | FILE_UNICODE_ON_DISK | FILE_CASE_SENSITIVE_SEARCH; + info->MaximumComponentNameLength = 255; + info->FileSystemNameLength = min( sizeof(udfW), length - offsetof( FILE_FS_ATTRIBUTE_INFORMATION, FileSystemName ) ); + memcpy(info->FileSystemName, udfW, info->FileSystemNameLength); + break; + case MOUNTMGR_FS_TYPE_FAT: + info->FileSystemAttributes = FILE_CASE_PRESERVED_NAMES; /* FIXME */ + info->MaximumComponentNameLength = 255; + info->FileSystemNameLength = min( sizeof(fatW), length - offsetof( FILE_FS_ATTRIBUTE_INFORMATION, FileSystemName ) ); + memcpy(info->FileSystemName, fatW, info->FileSystemNameLength); + break; + case MOUNTMGR_FS_TYPE_FAT32: + info->FileSystemAttributes = FILE_CASE_PRESERVED_NAMES; /* FIXME */ + info->MaximumComponentNameLength = 255; + info->FileSystemNameLength = min( sizeof(fat32W), length - offsetof( FILE_FS_ATTRIBUTE_INFORMATION, FileSystemName ) ); + memcpy(info->FileSystemName, fat32W, info->FileSystemNameLength); + break; + default: + info->FileSystemAttributes = FILE_CASE_PRESERVED_NAMES | FILE_PERSISTENT_ACLS; + info->MaximumComponentNameLength = 255; + info->FileSystemNameLength = min( sizeof(ntfsW), length - offsetof( FILE_FS_ATTRIBUTE_INFORMATION, FileSystemName ) ); + memcpy(info->FileSystemName, ntfsW, info->FileSystemNameLength); + break; + } + + io->Information = offsetof( FILE_FS_ATTRIBUTE_INFORMATION, FileSystemName ) + info->FileSystemNameLength; + io->u.Status = STATUS_SUCCESS; + break; + } + case FileFsVolumeInformation: + { + FILE_FS_VOLUME_INFORMATION *info = buffer; + struct mountmgr_unix_drive *drive; + const WCHAR *label; + + if (length < sizeof(FILE_FS_VOLUME_INFORMATION)) + { + io->u.Status = STATUS_INFO_LENGTH_MISMATCH; + break; + } + + if (!(drive = get_mountmgr_fs_info( handle, fd ))) + { + io->u.Status = STATUS_NOT_IMPLEMENTED; + break; } + + label = (WCHAR *)((char *)drive + drive->label_offset); + info->VolumeCreationTime.QuadPart = 0; /* FIXME */ + info->VolumeSerialNumber = drive->serial; + info->VolumeLabelLength = min( wcslen( label ) * sizeof(WCHAR), + length - offsetof( FILE_FS_VOLUME_INFORMATION, VolumeLabel ) ); + info->SupportsObjects = (drive->fs_type == MOUNTMGR_FS_TYPE_NTFS); + memcpy( info->VolumeLabel, label, info->VolumeLabelLength ); + RtlFreeHeap( GetProcessHeap(), 0, drive ); + + io->Information = offsetof( FILE_FS_VOLUME_INFORMATION, VolumeLabel ) + info->VolumeLabelLength; + io->u.Status = STATUS_SUCCESS; break; + } case FileFsControlInformation: FIXME( "%p: control info not supported\n", handle ); break; diff -Nru wine-development-5.5/dlls/ntdll/loader.c wine-development-5.6/dlls/ntdll/loader.c --- wine-development-5.5/dlls/ntdll/loader.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/loader.c 2020-04-10 18:54:32.000000000 +0000 @@ -38,7 +38,6 @@ #include "wine/exception.h" #include "wine/library.h" -#include "wine/unicode.h" #include "wine/debug.h" #include "wine/list.h" #include "wine/server.h" @@ -182,7 +181,7 @@ /* check whether the file name contains a path */ static inline BOOL contains_path( LPCWSTR name ) { - return ((*name && (name[1] == ':')) || strchrW(name, '/') || strchrW(name, '\\')); + return ((*name && (name[1] == ':')) || wcschr(name, '/') || wcschr(name, '\\')); } #define RTL_UNLOAD_EVENT_TRACE_NUMBER 64 @@ -198,6 +197,7 @@ } RTL_UNLOAD_EVENT_TRACE, *PRTL_UNLOAD_EVENT_TRACE; static RTL_UNLOAD_EVENT_TRACE unload_traces[RTL_UNLOAD_EVENT_TRACE_NUMBER]; +static RTL_UNLOAD_EVENT_TRACE *unload_trace_ptr; static unsigned int unload_trace_seq; static void module_push_unload_trace( const LDR_MODULE *ldr ) @@ -214,6 +214,7 @@ ptr->ImageName[len / sizeof(*ptr->ImageName)] = 0; unload_trace_seq = (unload_trace_seq + 1) % ARRAY_SIZE(unload_traces); + unload_trace_ptr = unload_traces; } /********************************************************************* @@ -234,7 +235,7 @@ *size = &element_size; *count = &element_count; - *trace = unload_traces; + *trace = &unload_trace_ptr; } /************************************************************************* @@ -608,7 +609,7 @@ if ((end - forward) * sizeof(WCHAR) >= sizeof(mod_name)) return NULL; ascii_to_unicode( mod_name, forward, end - forward ); mod_name[end - forward] = 0; - if (!strchrW( mod_name, '.' )) + if (!wcschr( mod_name, '.' )) { if ((end - forward) * sizeof(WCHAR) >= sizeof(mod_name) - sizeof(dllW)) return NULL; memcpy( mod_name + (end - forward), dllW, sizeof(dllW) ); @@ -1186,7 +1187,7 @@ wm->ldr.LoadCount = 1; RtlCreateUnicodeString( &wm->ldr.FullDllName, nt_name->Buffer + 4 /* \??\ prefix */ ); - if ((p = strrchrW( wm->ldr.FullDllName.Buffer, '\\' ))) p++; + if ((p = wcsrchr( wm->ldr.FullDllName.Buffer, '\\' ))) p++; else p = wm->ldr.FullDllName.Buffer; RtlInitUnicodeString( &wm->ldr.BaseDllName, p ); @@ -1749,16 +1750,17 @@ { static const WCHAR nt_prefixW[] = {'\\','?','?','\\',0}; static const WCHAR soW[] = {'.','s','o',0}; - WCHAR *p, *fullname; - size_t i, len = strlen(filename); + WCHAR *p, *fullname, filenameW[256]; + size_t len = strlen(filename); + + if (len >= ARRAY_SIZE(filenameW)) return FALSE; + ascii_to_unicode( filenameW, filename, len + 1 ); /* check if path can correspond to the dll we have */ - if (path && (p = strrchrW( path->Buffer, '\\' ))) + if (path && (p = wcsrchr( path->Buffer, '\\' ))) { p++; - for (i = 0; i < len; i++) - if (tolowerW(p[i]) != tolowerW( (WCHAR)filename[i]) ) break; - if (i == len && (!p[len] || !wcsicmp( p + len, soW ))) + if (!wcsnicmp( p, filenameW, len ) && (!p[len] || !wcsicmp( p + len, soW ))) { /* the filename matches, use path as the full path */ len += p - path->Buffer; @@ -1771,11 +1773,11 @@ } if (!(fullname = RtlAllocateHeap( GetProcessHeap(), 0, - (strlenW(system_dir) + len + 5) * sizeof(WCHAR) ))) + (wcslen(system_dir) + len + 5) * sizeof(WCHAR) ))) return FALSE; - strcpyW( fullname, nt_prefixW ); - strcatW( fullname, system_dir ); - ascii_to_unicode( fullname + strlenW(fullname), filename, len + 1 ); + wcscpy( fullname, nt_prefixW ); + wcscat( fullname, system_dir ); + wcscat( fullname, filenameW ); done: RtlInitUnicodeString( nt_name, fullname ); return TRUE; @@ -2100,8 +2102,8 @@ const WCHAR *p; const WCHAR *mod_end = module; - if ((p = strrchrW( mod_end, '\\' ))) mod_end = p; - if ((p = strrchrW( mod_end, '/' ))) mod_end = p; + if ((p = wcsrchr( mod_end, '\\' ))) mod_end = p; + if ((p = wcsrchr( mod_end, '/' ))) mod_end = p; if (mod_end == module + 2 && module[1] == ':') mod_end++; if (mod_end == module && module[0] && module[1] == ':') mod_end += 2; return mod_end; @@ -2115,7 +2117,7 @@ */ static inline WCHAR *append_path( WCHAR *p, const WCHAR *str, int len ) { - if (len == -1) len = strlenW(str); + if (len == -1) len = wcslen(str); if (!len) return p; memcpy( p, str, len * sizeof(WCHAR) ); p[len] = ';'; @@ -2148,7 +2150,7 @@ if (RtlQueryEnvironmentVariable_U( NULL, &name, &value ) == STATUS_BUFFER_TOO_SMALL) path_len = value.Length; - if (dll_dir) len += strlenW( dll_dir ) + 1; + if (dll_dir) len += wcslen( dll_dir ) + 1; else len += 2; /* current directory */ if (!(p = ret = RtlAllocateHeap( GetProcessHeap(), 0, path_len + len * sizeof(WCHAR) ))) return STATUS_NO_MEMORY; @@ -2218,11 +2220,11 @@ if (flags & LOAD_LIBRARY_SEARCH_USER_DIRS) { LIST_FOR_EACH_ENTRY( dir, &dll_dir_list, struct dll_dir_entry, entry ) - len += strlenW( dir->dir + 4 /* \??\ */ ) + 1; + len += wcslen( dir->dir + 4 /* \??\ */ ) + 1; if (dll_directory.Length) len += dll_directory.Length / sizeof(WCHAR) + 1; } - if (flags & LOAD_LIBRARY_SEARCH_SYSTEM32) len += strlenW( system_dir ); + if (flags & LOAD_LIBRARY_SEARCH_SYSTEM32) len += wcslen( system_dir ); if ((p = ret = RtlAllocateHeap( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) { @@ -2234,7 +2236,7 @@ p = append_path( p, dir->dir + 4 /* \??\ */, -1 ); p = append_path( p, dll_directory.Buffer, dll_directory.Length / sizeof(WCHAR) ); } - if (flags & LOAD_LIBRARY_SEARCH_SYSTEM32) strcpyW( p, system_dir ); + if (flags & LOAD_LIBRARY_SEARCH_SYSTEM32) wcscpy( p, system_dir ); else { if (p > ret) p--; @@ -2528,7 +2530,7 @@ NTSTATUS status = STATUS_DLL_NOT_FOUND; BOOL found_image = FALSE; - len = strlenW( name ); + len = wcslen( name ); if (build_dir) maxlen = strlen(build_dir) + sizeof("/programs/") + len; for (i = 0; (path = wine_dll_enum_load_path( i )); i++) maxlen = max( maxlen, strlen(path)+1 ); maxlen += len + sizeof(".so"); @@ -2594,7 +2596,6 @@ static NTSTATUS load_so_dll( LPCWSTR load_path, const UNICODE_STRING *nt_name, const char *so_name, WINE_MODREF** pwm ) { - char error[256]; void *handle; struct builtin_load_info info, *prev_info; ANSI_STRING unix_name; @@ -2618,7 +2619,7 @@ prev_info = builtin_load_info; builtin_load_info = &info; - handle = wine_dlopen( so_name ? so_name : unix_name.Buffer, RTLD_NOW, error, sizeof(error) ); + handle = dlopen( so_name ? so_name : unix_name.Buffer, RTLD_NOW ); builtin_load_info = prev_info; RtlFreeHeap( GetProcessHeap(), 0, unix_name.Buffer ); @@ -2626,10 +2627,10 @@ { if (so_name) { - ERR("failed to load .so lib %s: %s\n", debugstr_a(so_name), error ); + ERR("failed to load .so lib %s: %s\n", debugstr_a(so_name), dlerror() ); return STATUS_PROCEDURE_NOT_FOUND; } - WARN( "failed to load .so lib %s: %s\n", debugstr_us(nt_name), error ); + WARN( "failed to load .so lib %s: %s\n", debugstr_us(nt_name), dlerror() ); return STATUS_INVALID_IMAGE_FORMAT; } @@ -2649,7 +2650,7 @@ debugstr_w(info.wm->ldr.FullDllName.Buffer), info.wm->ldr.BaseAddress, debugstr_us(nt_name) ); if (info.wm->ldr.LoadCount != -1) info.wm->ldr.LoadCount++; - wine_dlclose( handle, NULL, 0 ); /* release the libdl refcount */ + dlclose( handle ); /* release the libdl refcount */ } else { @@ -2662,7 +2663,7 @@ return STATUS_SUCCESS; failed: - wine_dlclose( handle, NULL, 0 ); + dlclose( handle ); return info.status; } @@ -2682,8 +2683,8 @@ /* Fix the name in case we have a full path and extension */ name = nt_name->Buffer; - if ((p = strrchrW( name, '\\' ))) name = p + 1; - if ((p = strrchrW( name, '/' ))) name = p + 1; + if ((p = wcsrchr( name, '\\' ))) name = p + 1; + if ((p = wcsrchr( name, '/' ))) name = p + 1; TRACE("Trying built-in %s\n", debugstr_w(name)); @@ -2760,11 +2761,11 @@ goto done; } - if ((p = strrchrW( info->lpAssemblyManifestPath, '\\' ))) + if ((p = wcsrchr( info->lpAssemblyManifestPath, '\\' ))) { DWORD len, dirlen = info->ulAssemblyDirectoryNameLength / sizeof(WCHAR); p++; - len = strlenW( p ); + len = wcslen( p ); if (!dirlen || len <= dirlen || RtlCompareUnicodeStrings( p, dirlen, info->lpAssemblyDirectoryName, dirlen, TRUE ) || wcsicmp( p + dirlen, dotManifestW )) @@ -2780,7 +2781,7 @@ } memcpy( p, info->lpAssemblyManifestPath, dirlen * sizeof(WCHAR) ); p += dirlen; - strcpyW( p, libname ); + wcscpy( p, libname ); goto done; } } @@ -2791,7 +2792,7 @@ goto done; } - needed = (strlenW(user_shared_data->NtSystemRoot) * sizeof(WCHAR) + + needed = (wcslen(user_shared_data->NtSystemRoot) * sizeof(WCHAR) + sizeof(winsxsW) + info->ulAssemblyDirectoryNameLength + nameW.Length + 2*sizeof(WCHAR)); if (!(*fullname = p = RtlAllocateHeap( GetProcessHeap(), 0, needed ))) @@ -2799,14 +2800,14 @@ status = STATUS_NO_MEMORY; goto done; } - strcpyW( p, user_shared_data->NtSystemRoot ); - p += strlenW(p); + wcscpy( p, user_shared_data->NtSystemRoot ); + p += wcslen(p); memcpy( p, winsxsW, sizeof(winsxsW) ); p += ARRAY_SIZE( winsxsW ); memcpy( p, info->lpAssemblyDirectoryName, info->ulAssemblyDirectoryNameLength ); p += info->ulAssemblyDirectoryNameLength / sizeof(WCHAR); *p++ = '\\'; - strcpyW( p, libname ); + wcscpy( p, libname ); done: RtlFreeHeap( GetProcessHeap(), 0, info ); RtlReleaseActivationContext( data.hActCtx ); @@ -2826,10 +2827,10 @@ WCHAR *name; BOOL found_image = FALSE; NTSTATUS status = STATUS_DLL_NOT_FOUND; - ULONG len = strlenW( paths ); + ULONG len = wcslen( paths ); - if (len < strlenW( system_dir )) len = strlenW( system_dir ); - len += strlenW( search ) + 2; + if (len < wcslen( system_dir )) len = wcslen( system_dir ); + len += wcslen( search ) + 2; if (!(name = RtlAllocateHeap( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) return STATUS_NO_MEMORY; @@ -2843,7 +2844,7 @@ if (*ptr == ';') ptr++; memcpy( name, paths, len * sizeof(WCHAR) ); if (len && name[len - 1] != '\\') name[len++] = '\\'; - strcpyW( name + len, search ); + wcscpy( name + len, search ); nt_name->Buffer = NULL; if ((status = RtlDosPathNameToNtPathName_U_WithStatus( name, nt_name, NULL, NULL ))) goto done; @@ -2858,8 +2859,8 @@ if (!found_image) { /* not found, return file in the system dir to be loaded as builtin */ - strcpyW( name, system_dir ); - strcatW( name, search ); + wcscpy( name, system_dir ); + wcscat( name, search ); if (!RtlDosPathNameToNtPathName_U( name, nt_name, NULL, NULL )) status = STATUS_NO_MEMORY; } else status = STATUS_IMAGE_MACHINE_TYPE_MISMATCH; @@ -2889,13 +2890,13 @@ if (default_ext) /* first append default extension */ { - if (!(ext = strrchrW( libname, '.')) || strchrW( ext, '/' ) || strchrW( ext, '\\')) + if (!(ext = wcsrchr( libname, '.')) || wcschr( ext, '/' ) || wcschr( ext, '\\')) { if (!(dllname = RtlAllocateHeap( GetProcessHeap(), 0, - (strlenW(libname)+strlenW(default_ext)+1) * sizeof(WCHAR)))) + (wcslen(libname)+wcslen(default_ext)+1) * sizeof(WCHAR)))) return STATUS_NO_MEMORY; - strcpyW( dllname, libname ); - strcatW( dllname, default_ext ); + wcscpy( dllname, libname ); + wcscat( dllname, default_ext ); libname = dllname; } } @@ -3318,7 +3319,7 @@ if (info->Type != REG_DWORD) { buffer[size / sizeof(WCHAR)] = 0; - *value = strtoulW( (WCHAR *)info->Data, 0, 16 ); + *value = wcstoul( (WCHAR *)info->Data, 0, 16 ); } else memcpy( value, info->Data, sizeof(*value) ); return status; @@ -3378,8 +3379,8 @@ attr.SecurityDescriptor = NULL; attr.SecurityQualityOfService = NULL; - if ((p = memrchrW( key->Buffer, '\\', key->Length / sizeof(WCHAR) ))) p++; - else p = key->Buffer; + p = key->Buffer + key->Length / sizeof(WCHAR); + while (p > key->Buffer && p[-1] != '\\') p--; len = key->Length - (p - key->Buffer) * sizeof(WCHAR); name_str.Buffer = path; name_str.Length = sizeof(optionsW) + len; @@ -3586,8 +3587,7 @@ free_tls_slot( &wm->ldr ); RtlReleaseActivationContext( wm->ldr.ActivationContext ); - if ((wm->ldr.Flags & LDR_WINE_INTERNAL) && wm->ldr.SectionHandle) - wine_dlclose( wm->ldr.SectionHandle, NULL, 0 ); + if ((wm->ldr.Flags & LDR_WINE_INTERNAL) && wm->ldr.SectionHandle) dlclose( wm->ldr.SectionHandle ); NtUnmapViewOfSection( NtCurrentProcess(), wm->ldr.BaseAddress ); if (cached_modref == wm) cached_modref = NULL; RtlFreeUnicodeString( &wm->ldr.FullDllName ); @@ -4161,7 +4161,7 @@ const WCHAR *module = NtCurrentTeb()->Peb->ProcessParameters->ImagePathName.Buffer; /* same check as NeedCurrentDirectoryForExePathW */ - if (!strchrW( name, '\\' )) + if (!wcschr( name, '\\' )) { static const WCHAR env_name[] = {'N','o','D','e','f','a','u','l','t','C','u','r','r','e','n','t', 'D','i','r','e','c','t','o','r','y','I','n', diff -Nru wine-development-5.5/dlls/ntdll/loadorder.c wine-development-5.6/dlls/ntdll/loadorder.c --- wine-development-5.5/dlls/ntdll/loadorder.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/loadorder.c 2020-04-10 18:54:32.000000000 +0000 @@ -32,7 +32,6 @@ #include "ntdll_misc.h" #include "wine/debug.h" -#include "wine/unicode.h" WINE_DEFAULT_DEBUG_CHANNEL(module); @@ -79,8 +78,8 @@ const WCHAR *ptr; if (name[0] && name[1] == ':') name += 2; /* strip drive specification */ - if ((ptr = strrchrW( name, '\\' ))) name = ptr + 1; - if ((ptr = strrchrW( name, '/' ))) name = ptr + 1; + if ((ptr = wcsrchr( name, '\\' ))) name = ptr + 1; + if ((ptr = wcsrchr( name, '/' ))) name = ptr + 1; return name; } @@ -89,13 +88,12 @@ * * Remove extension if it is ".dll". */ -static inline void remove_dll_ext( WCHAR *ext ) +static inline void remove_dll_ext( WCHAR *name ) { - if (ext[0] == '.' && - toupperW(ext[1]) == 'D' && - toupperW(ext[2]) == 'L' && - toupperW(ext[3]) == 'L' && - !ext[4]) ext[0] = 0; + static const WCHAR dllW[] = {'.','d','l','l',0}; + WCHAR *p = wcsrchr( name, '.' ); + + if (p && !wcsicmp( p, dllW )) *p = 0; } @@ -131,7 +129,7 @@ while (*order) { - order += strspnW( order, separatorsW ); + order += wcsspn( order, separatorsW ); switch(*order) { case 'N': /* native */ @@ -145,7 +143,7 @@ else if (ret == LO_NATIVE) return LO_NATIVE_BUILTIN; break; } - order += strcspnW( order, separatorsW ); + order += wcscspn( order, separatorsW ); } return ret; } @@ -200,7 +198,7 @@ static void add_load_order_set( WCHAR *entry ) { module_loadorder_t ldo; - WCHAR *end = strchrW( entry, '=' ); + WCHAR *end = wcschr( entry, '=' ); if (!end) return; *end++ = 0; @@ -208,13 +206,12 @@ while (*entry) { - entry += strspnW( entry, separatorsW ); - end = entry + strcspnW( entry, separatorsW ); + entry += wcsspn( entry, separatorsW ); + end = entry + wcscspn( entry, separatorsW ); if (*end) *end++ = 0; if (*entry) { - WCHAR *ext = strrchrW(entry, '.'); - if (ext) remove_dll_ext( ext ); + remove_dll_ext( entry ); ldo.modulename = entry; add_load_order( &ldo ); entry = end; @@ -255,9 +252,9 @@ { while (*entry == ';') entry++; if (!*entry) break; - next = strchrW( entry, ';' ); + next = wcschr( entry, ';' ); if (next) *next++ = 0; - else next = entry + strlenW(entry); + else next = entry + wcslen(entry); add_load_order_set( entry ); entry = next; } @@ -343,11 +340,11 @@ str = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(AppDefaultsW) + sizeof(DllOverridesW) + - strlenW(app_name) * sizeof(WCHAR) ); + wcslen(app_name) * sizeof(WCHAR) ); if (!str) return 0; - strcpyW( str, AppDefaultsW ); - strcatW( str, app_name ); - strcatW( str, DllOverridesW ); + wcscpy( str, AppDefaultsW ); + wcscat( str, app_name ); + wcscat( str, DllOverridesW ); RtlOpenCurrentUser( KEY_ALL_ACCESS, &root ); attr.Length = sizeof(attr); @@ -441,26 +438,25 @@ if (!init_done) init_load_order(); std_key = get_standard_key(); if (app_name) app_key = get_app_key( app_name ); - if (!strncmpW( path, nt_prefixW, 4 )) path += 4; + if (!wcsncmp( path, nt_prefixW, 4 )) path += 4; TRACE("looking for %s\n", debugstr_w(path)); /* Strip path information if the module resides in the system directory */ - if (!wcsnicmp( system_dir, path, strlenW( system_dir ))) + if (!wcsnicmp( system_dir, path, wcslen( system_dir ))) { - const WCHAR *p = path + strlenW( system_dir ); + const WCHAR *p = path + wcslen( system_dir ); while (*p == '\\' || *p == '/') p++; - if (!strchrW( p, '\\' ) && !strchrW( p, '/' )) path = p; + if (!wcschr( p, '\\' ) && !wcschr( p, '/' )) path = p; } - if (!(len = strlenW(path))) return ret; + if (!(len = wcslen(path))) return ret; if (!(module = RtlAllocateHeap( GetProcessHeap(), 0, (len + 2) * sizeof(WCHAR) ))) return ret; - strcpyW( module+1, path ); /* reserve module[0] for the wildcard char */ + wcscpy( module+1, path ); /* reserve module[0] for the wildcard char */ + remove_dll_ext( module + 1 ); basename = (WCHAR *)get_basename( module+1 ); - if (len >= 4) remove_dll_ext( module + 1 + len - 4 ); - /* first explicit module name */ if ((ret = get_load_order_value( std_key, app_key, module+1 )) != LO_INVALID) goto done; diff -Nru wine-development-5.5/dlls/ntdll/locale.c wine-development-5.6/dlls/ntdll/locale.c --- wine-development-5.5/dlls/ntdll/locale.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/locale.c 2020-04-10 18:54:32.000000000 +0000 @@ -24,6 +24,7 @@ #include #include +#include #include #include @@ -34,9 +35,11 @@ #include "ntstatus.h" #define WIN32_NO_STATUS +#include "windef.h" +#include "winbase.h" +#include "winnls.h" #include "ntdll_misc.h" #include "wine/library.h" -#include "wine/unicode.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(nls); @@ -590,16 +593,16 @@ break; case NLS_SECTION_CASEMAP: if (id) return STATUS_UNSUCCESSFUL; - sprintfW( buffer, keyfmtW, langW ); - sprintfW( value, langfmtW, LANGIDFROMLCID(system_lcid) ); + NTDLL_swprintf( buffer, keyfmtW, langW ); + NTDLL_swprintf( value, langfmtW, LANGIDFROMLCID(system_lcid) ); break; case NLS_SECTION_CODEPAGE: - sprintfW( buffer, keyfmtW, cpW ); - sprintfW( value, cpfmtW, id ); + NTDLL_swprintf( buffer, keyfmtW, cpW ); + NTDLL_swprintf( value, cpfmtW, id ); break; case NLS_SECTION_NORMALIZE: - sprintfW( buffer, keyfmtW, normW ); - sprintfW( value, normfmtW, id ); + NTDLL_swprintf( buffer, keyfmtW, normW ); + NTDLL_swprintf( value, normfmtW, id ); break; default: return STATUS_INVALID_PARAMETER_1; @@ -635,7 +638,7 @@ name = intlW; break; case NLS_SECTION_CODEPAGE: - sprintfW( buffer, cpdefaultW, id ); + NTDLL_swprintf( buffer, cpdefaultW, id ); name = buffer; break; case NLS_SECTION_NORMALIZE: @@ -654,10 +657,10 @@ /* try to open file in system dir */ - valueW.MaximumLength = (strlenW(name) + strlenW(dir) + 5) * sizeof(WCHAR); + valueW.MaximumLength = (wcslen(name) + wcslen(dir) + 5) * sizeof(WCHAR); if (!(valueW.Buffer = RtlAllocateHeap( GetProcessHeap(), 0, valueW.MaximumLength ))) return STATUS_NO_MEMORY; - valueW.Length = sprintfW( valueW.Buffer, pathfmtW, dir, name ) * sizeof(WCHAR); + valueW.Length = NTDLL_swprintf( valueW.Buffer, pathfmtW, dir, name ) * sizeof(WCHAR); InitializeObjectAttributes( &attr, &valueW, 0, 0, NULL ); status = NtOpenFile( file, GENERIC_READ, &attr, &io, FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_ALERT ); if (!status) TRACE( "found %s\n", debugstr_w( valueW.Buffer )); @@ -674,14 +677,14 @@ if (RtlQueryEnvironmentVariable_U( NULL, &nameW, &valueW ) != STATUS_BUFFER_TOO_SMALL) return status; } - valueW.MaximumLength = valueW.Length + sizeof(dataprefixW) + strlenW(name) * sizeof(WCHAR); + valueW.MaximumLength = valueW.Length + sizeof(dataprefixW) + wcslen(name) * sizeof(WCHAR); if (!(valueW.Buffer = RtlAllocateHeap( GetProcessHeap(), 0, valueW.MaximumLength ))) return STATUS_NO_MEMORY; if (!RtlQueryEnvironmentVariable_U( NULL, &nameW, &valueW )) { - strcatW( valueW.Buffer, dataprefixW ); - strcatW( valueW.Buffer, name ); - valueW.Length = strlenW(valueW.Buffer) * sizeof(WCHAR); + wcscat( valueW.Buffer, dataprefixW ); + wcscat( valueW.Buffer, name ); + valueW.Length = wcslen(valueW.Buffer) * sizeof(WCHAR); InitializeObjectAttributes( &attr, &valueW, 0, 0, NULL ); status = NtOpenFile( file, GENERIC_READ, &attr, &io, FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_ALERT ); if (!status) TRACE( "found %s\n", debugstr_w( valueW.Buffer )); @@ -845,11 +848,11 @@ if (len == ARRAY_SIZE(buffer)) return 0; buffer[len] = 0; - if (!(p = strpbrkW( buffer, sepW ))) + if (!(p = wcspbrk( buffer, sepW ))) { - if (!strcmpW( buffer, posixW ) || !strcmpW( buffer, cW )) + if (!wcscmp( buffer, posixW ) || !wcscmp( buffer, cW )) return MAKELCID( MAKELANGID(LANG_ENGLISH,SUBLANG_DEFAULT), SORT_DEFAULT ); - strcpyW( win_name, buffer ); + wcscpy( win_name, buffer ); } else { @@ -857,13 +860,13 @@ { *p++ = 0; country = p; - p = strpbrkW( p, sepW + 1 ); + p = wcspbrk( p, sepW + 1 ); } if (p && *p == '.') { *p++ = 0; /* charset, ignore */ - p = strchrW( p, '@' ); + p = wcschr( p, '@' ); } if (p) { @@ -874,18 +877,18 @@ /* rebuild a Windows name */ - strcpyW( win_name, buffer ); + wcscpy( win_name, buffer ); if (modifier) { - if (!strcmpW( modifier, latinW )) strcatW( win_name, latnW ); - else if (!strcmpW( modifier, euroW )) {} /* ignore */ + if (!wcscmp( modifier, latinW )) wcscat( win_name, latnW ); + else if (!wcscmp( modifier, euroW )) {} /* ignore */ else return 0; } if (country) { - p = win_name + strlenW(win_name); + p = win_name + wcslen(win_name); *p++ = '-'; - strcpyW( p, country ); + wcscpy( p, country ); } if (!RtlLocaleNameToLcid( win_name, &lcid, 0 )) return lcid; @@ -1496,7 +1499,9 @@ */ WCHAR WINAPI RtlDowncaseUnicodeChar( WCHAR wch ) { - return casemap( nls_info.LowerCaseTable, wch ); + if (nls_info.LowerCaseTable) return casemap( nls_info.LowerCaseTable, wch ); + if (wch >= 'A' && wch <= 'Z') wch += 'a' - 'A'; + return wch; } @@ -1638,7 +1643,8 @@ */ WCHAR __cdecl NTDLL_towupper( WCHAR ch ) { - return casemap( nls_info.UpperCaseTable, ch ); + if (nls_info.UpperCaseTable) return casemap( nls_info.UpperCaseTable, ch ); + return casemap_ascii( ch ); } @@ -1668,23 +1674,23 @@ *lcid = LANG_INVARIANT; goto found; } - if (strlenW( name ) >= LOCALE_NAME_MAX_LENGTH) return STATUS_INVALID_PARAMETER_1; - strcpyW( lang, name ); + if (wcslen( name ) >= LOCALE_NAME_MAX_LENGTH) return STATUS_INVALID_PARAMETER_1; + wcscpy( lang, name ); - if ((p = strpbrkW( lang, sepW )) && *p == '-') + if ((p = wcspbrk( lang, sepW )) && *p == '-') { *p++ = 0; country = p; - if ((p = strpbrkW( p, sepW )) && *p == '-') + if ((p = wcspbrk( p, sepW )) && *p == '-') { *p++ = 0; script = country; country = p; - p = strpbrkW( p, sepW ); + p = wcspbrk( p, sepW ); } if (p) *p = 0; /* FIXME: modifier is ignored */ /* second value can be script or country, check length to resolve the ambiguity */ - if (!script && strlenW( country ) == 4) + if (!script && wcslen( country ) == 4) { script = country; country = NULL; @@ -1714,13 +1720,13 @@ if (script) { - unsigned int len = strlenW( script ); + unsigned int len = wcslen( script ); if (load_string( LOCALE_SSCRIPTS, id, buf, ARRAY_SIZE(buf) )) continue; p = buf; while (*p) { if (!wcsnicmp( p, script, len ) && (!p[len] || p[len] == ';')) break; - if (!(p = strchrW( p, ';'))) break; + if (!(p = wcschr( p, ';'))) break; p++; } if (!p || !*p) continue; @@ -1978,7 +1984,7 @@ if ((status = load_norm_table( form, &info ))) return status; - if (len == -1) len = strlenW( str ); + if (len == -1) len = wcslen( str ); for (i = 0; i < len && result; i += r) { @@ -2029,7 +2035,7 @@ WCHAR *buffer = RtlAllocateHeap( GetProcessHeap(), 0, dstlen * sizeof(WCHAR) ); if (!buffer) return STATUS_NO_MEMORY; status = RtlNormalizeString( form, str, len, buffer, &dstlen ); - result = !status && (dstlen == len) && !strncmpW( buffer, str, len ); + result = !status && (dstlen == len) && !wcsncmp( buffer, str, len ); RtlFreeHeap( GetProcessHeap(), 0, buffer ); } *res = result; @@ -2051,7 +2057,7 @@ if ((status = load_norm_table( form, &info ))) return status; - if (src_len == -1) src_len = strlenW(src) + 1; + if (src_len == -1) src_len = wcslen(src) + 1; if (!*dst_len) { @@ -2255,7 +2261,7 @@ if ((status = load_norm_table( 13, &info ))) return status; - if (srclen == -1) srclen = strlenW(src) + 1; + if (srclen == -1) srclen = wcslen(src) + 1; for (i = 0; i < srclen; i++) if (src[i] < 0x20 || src[i] >= 0x7f) break; @@ -2322,7 +2328,7 @@ WCHAR ch; if (!src || srclen < -1) return STATUS_INVALID_PARAMETER; - if (srclen == -1) srclen = strlenW( src ) + 1; + if (srclen == -1) srclen = wcslen( src ) + 1; TRACE( "%x %s %p %d\n", flags, debugstr_wn(src, srclen), dst, *dstlen ); diff -Nru wine-development-5.5/dlls/ntdll/nt.c wine-development-5.6/dlls/ntdll/nt.c --- wine-development-5.5/dlls/ntdll/nt.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/nt.c 2020-04-10 18:54:32.000000000 +0000 @@ -71,7 +71,6 @@ #include "ntstatus.h" #define WIN32_NO_STATUS #include "wine/debug.h" -#include "wine/unicode.h" #include "windef.h" #include "winternl.h" #include "ntdll_misc.h" @@ -2673,10 +2672,10 @@ procname[wine_server_reply_size(reply) / sizeof(WCHAR)] = 0; /* Get only the executable name, not the path */ - if ((exename = strrchrW(procname, '\\')) != NULL) exename++; + if ((exename = wcsrchr(procname, '\\')) != NULL) exename++; else exename = procname; - wlen = (strlenW(exename) + 1) * sizeof(WCHAR); + wlen = (wcslen(exename) + 1) * sizeof(WCHAR); procstructlen = sizeof(*spi) + wlen + ((reply->threads - 1) * sizeof(SYSTEM_THREAD_INFORMATION)); @@ -3721,15 +3720,3 @@ return STATUS_NOT_IMPLEMENTED; } - -/****************************************************************************** - * NtSetLdtEntries (NTDLL.@) - * ZwSetLdtEntries (NTDLL.@) - */ -NTSTATUS WINAPI NtSetLdtEntries(ULONG selector1, ULONG entry1_low, ULONG entry1_high, - ULONG selector2, ULONG entry2_low, ULONG entry2_high) -{ - FIXME("(%u, %u, %u, %u, %u, %u): stub\n", selector1, entry1_low, entry1_high, selector2, entry2_low, entry2_high); - - return STATUS_NOT_IMPLEMENTED; -} diff -Nru wine-development-5.5/dlls/ntdll/ntdll_misc.h wine-development-5.6/dlls/ntdll/ntdll_misc.h --- wine-development-5.5/dlls/ntdll/ntdll_misc.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/ntdll_misc.h 2020-04-10 18:54:32.000000000 +0000 @@ -58,6 +58,7 @@ extern NTSTATUS context_from_server( CONTEXT *to, const context_t *from ) DECLSPEC_HIDDEN; extern NTSTATUS set_thread_context( HANDLE handle, const context_t *context, BOOL *self ) DECLSPEC_HIDDEN; extern NTSTATUS get_thread_context( HANDLE handle, context_t *context, unsigned int flags, BOOL *self ) DECLSPEC_HIDDEN; +extern NTSTATUS get_thread_ldt_entry( HANDLE handle, void *data, ULONG len, ULONG *ret_len ) DECLSPEC_HIDDEN; extern LONG WINAPI call_unhandled_exception_filter( PEXCEPTION_POINTERS eptr ) DECLSPEC_HIDDEN; #if defined(__x86_64__) || defined(__arm__) || defined(__aarch64__) @@ -91,6 +92,10 @@ extern char **build_envp( const WCHAR *envW ) DECLSPEC_HIDDEN; extern NTSTATUS restart_process( RTL_USER_PROCESS_PARAMETERS *params, NTSTATUS status ) DECLSPEC_HIDDEN; +extern int __wine_main_argc; +extern char **__wine_main_argv; +extern WCHAR **__wine_main_wargv; + /* server support */ extern timeout_t server_start_time DECLSPEC_HIDDEN; extern unsigned int server_cpus DECLSPEC_HIDDEN; @@ -295,11 +300,24 @@ LPWSTR __cdecl NTDLL_wcstok( LPWSTR str, LPCWSTR delim ); LONG __cdecl NTDLL_wcstol( LPCWSTR s, LPWSTR *end, INT base ); ULONG __cdecl NTDLL_wcstoul( LPCWSTR s, LPWSTR *end, INT base ); +int WINAPIV NTDLL_swprintf( WCHAR *str, const WCHAR *format, ... ); #define wcsicmp(s1,s2) NTDLL__wcsicmp(s1,s2) #define wcsnicmp(s1,s2,n) NTDLL__wcsnicmp(s1,s2,n) +#define towupper(c) NTDLL_towupper(c) #define wcslwr(s) NTDLL__wcslwr(s) #define wcsupr(s) NTDLL__wcsupr(s) +#define wcscpy(d,s) NTDLL_wcscpy(d,s) +#define wcscat(d,s) NTDLL_wcscat(d,s) +#define wcschr(s,c) NTDLL_wcschr(s,c) +#define wcspbrk(s,a) NTDLL_wcspbrk(s,a) +#define wcsrchr(s,c) NTDLL_wcsrchr(s,c) +#define wcstoul(s,e,b) NTDLL_wcstoul(s,e,b) +#define wcslen(s) NTDLL_wcslen(s) +#define wcscspn(s,r) NTDLL_wcscspn(s,r) +#define wcsspn(s,a) NTDLL_wcsspn(s,a) +#define wcscmp(s1,s2) NTDLL_wcscmp(s1,s2) +#define wcsncmp(s1,s2,n) NTDLL_wcsncmp(s1,s2,n) /* convert from straight ASCII to Unicode without depending on the current codepage */ static inline void ascii_to_unicode( WCHAR *dst, const char *src, size_t len ) diff -Nru wine-development-5.5/dlls/ntdll/ntdll.spec wine-development-5.6/dlls/ntdll/ntdll.spec --- wine-development-5.5/dlls/ntdll/ntdll.spec 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/ntdll.spec 2020-04-10 18:54:32.000000000 +0000 @@ -380,7 +380,7 @@ @ stdcall NtSetInformationToken(long long ptr long) @ stdcall NtSetIntervalProfile(long long) @ stdcall NtSetIoCompletion(ptr long long long long) -@ stdcall NtSetLdtEntries(long long long long long long) +@ stdcall NtSetLdtEntries(long int64 long int64) @ stub NtSetLowEventPair @ stub NtSetLowWaitHighEventPair @ stub NtSetLowWaitHighThread @@ -1350,7 +1350,7 @@ @ stdcall -private ZwSetInformationToken(long long ptr long) NtSetInformationToken @ stdcall -private ZwSetIntervalProfile(long long) NtSetIntervalProfile @ stdcall -private ZwSetIoCompletion(ptr long long long long) NtSetIoCompletion -@ stdcall -private ZwSetLdtEntries(long long long long long long) NtSetLdtEntries +@ stdcall -private ZwSetLdtEntries(long int64 long int64) NtSetLdtEntries @ stub ZwSetLowEventPair @ stub ZwSetLowWaitHighEventPair @ stub ZwSetLowWaitHighThread @@ -1558,6 +1558,7 @@ @ cdecl wine_server_release_fd(long long) @ cdecl wine_server_send_fd(long) @ cdecl __wine_make_process_system() +@ extern -arch=i386 __wine_ldt_copy # Debugging @ cdecl -norelay __wine_dbg_get_channel_flags(ptr) diff -Nru wine-development-5.5/dlls/ntdll/path.c wine-development-5.6/dlls/ntdll/path.c --- wine-development-5.5/dlls/ntdll/path.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/path.c 2020-04-10 18:54:32.000000000 +0000 @@ -36,7 +36,6 @@ #define WIN32_NO_STATUS #include "windef.h" #include "winioctl.h" -#include "wine/unicode.h" #include "wine/debug.h" #include "wine/library.h" #include "ntdll_misc.h" @@ -196,7 +195,7 @@ if (!DIR_get_drives_info( info )) return -1; /* strip off trailing slashes */ - lenW = strlenW(path); + lenW = wcslen(path); while (lenW > 1 && IS_SEPARATOR(path[lenW - 1])) lenW--; /* convert path to Unix encoding */ @@ -356,7 +355,7 @@ if (!memcmp(dos_path, global_prefix, sizeof(global_prefix)) || (!memcmp(dos_path, global_prefix2, sizeof(global_prefix2)) && dos_path[4])) { - ntpath->Length = strlenW(dos_path) * sizeof(WCHAR); + ntpath->Length = wcslen(dos_path) * sizeof(WCHAR); ntpath->MaximumLength = ntpath->Length + sizeof(WCHAR); ntpath->Buffer = RtlAllocateHeap(GetProcessHeap(), 0, ntpath->MaximumLength); if (!ntpath->Buffer) return STATUS_NO_MEMORY; @@ -364,7 +363,7 @@ ntpath->Buffer[1] = '?'; /* change \\?\ to \??\ */ if (file_part) { - if ((ptr = strrchrW( ntpath->Buffer, '\\' )) && ptr[1]) *file_part = ptr + 1; + if ((ptr = wcsrchr( ntpath->Buffer, '\\' )) && ptr[1]) *file_part = ptr + 1; else *file_part = NULL; } return STATUS_SUCCESS; @@ -394,12 +393,12 @@ return STATUS_NO_MEMORY; } - strcpyW(ntpath->Buffer, NTDosPrefixW); + wcscpy(ntpath->Buffer, NTDosPrefixW); switch (RtlDetermineDosPathNameType_U(ptr)) { case UNC_PATH: /* \\foo */ offset = 2; - strcatW(ntpath->Buffer, UncPfxW); + wcscat(ntpath->Buffer, UncPfxW); break; case DEVICE_PATH: /* \\.\foo */ offset = 4; @@ -409,11 +408,11 @@ break; } - strcatW(ntpath->Buffer, ptr + offset); - ntpath->Length = strlenW(ntpath->Buffer) * sizeof(WCHAR); + wcscat(ntpath->Buffer, ptr + offset); + ntpath->Length = wcslen(ntpath->Buffer) * sizeof(WCHAR); if (file_part && *file_part) - *file_part = ntpath->Buffer + ntpath->Length / sizeof(WCHAR) - strlenW(*file_part); + *file_part = ntpath->Buffer + ntpath->Length / sizeof(WCHAR) - wcslen(*file_part); /* FIXME: cd filling */ @@ -485,11 +484,11 @@ ULONG allocated = 0, needed, filelen; WCHAR *name = NULL; - filelen = 1 /* for \ */ + strlenW(search) + 1 /* \0 */; + filelen = 1 /* for \ */ + wcslen(search) + 1 /* \0 */; /* Windows only checks for '.' without worrying about path components */ - if (strchrW( search, '.' )) ext = NULL; - if (ext != NULL) filelen += strlenW(ext); + if (wcschr( search, '.' )) ext = NULL; + if (ext != NULL) filelen += wcslen(ext); while (*paths) { @@ -513,8 +512,8 @@ memmove(name, paths, needed * sizeof(WCHAR)); /* append '\\' if none is present */ if (needed > 0 && name[needed - 1] != '\\') name[needed++] = '\\'; - strcpyW(&name[needed], search); - if (ext) strcatW(&name[needed], ext); + wcscpy(&name[needed], search); + if (ext) wcscat(&name[needed], ext); if (RtlDoesFileExists_U(name)) { len = RtlGetFullPathName_U(name, buffer_size, buffer, file_part); @@ -560,7 +559,7 @@ { case '\\': /* .\ component */ next = p + 2; - memmove( p, next, (strlenW(next) + 1) * sizeof(WCHAR) ); + memmove( p, next, (wcslen(next) + 1) * sizeof(WCHAR) ); continue; case 0: /* final . */ if (p > path + mark) p--; @@ -575,7 +574,7 @@ p--; while (p > path + mark && p[-1] != '\\') p--; } - memmove( p, next, (strlenW(next) + 1) * sizeof(WCHAR) ); + memmove( p, next, (wcslen(next) + 1) * sizeof(WCHAR) ); continue; } else if (!p[2]) /* final .. */ @@ -597,7 +596,7 @@ if (*p == '\\') { /* remove last dot in previous dir name */ - if (p > path + mark && p[-1] == '.') memmove( p-1, p, (strlenW(p) + 1) * sizeof(WCHAR) ); + if (p > path + mark && p[-1] == '.') memmove( p-1, p, (wcslen(p) + 1) * sizeof(WCHAR) ); else p++; } } @@ -670,7 +669,7 @@ case RELATIVE_DRIVE_PATH: /* c:foo */ dep = 2; - if (toupperW(name[0]) != toupperW(cd->Buffer[0]) || cd->Buffer[1] != ':') + if (wcsnicmp( name, cd->Buffer, 2 )) { UNICODE_STRING var, val; @@ -778,7 +777,7 @@ } /* enough space ? */ - deplen = strlenW(name + dep) * sizeof(WCHAR); + deplen = wcslen(name + dep) * sizeof(WCHAR); if (reqsize + deplen + sizeof(WCHAR) > size) { /* not enough space, return need size (including terminating '\0') */ @@ -793,7 +792,7 @@ RtlFreeHeap(GetProcessHeap(), 0, ins_str); collapse_path( buffer, mark ); - reqsize = strlenW(buffer) * sizeof(WCHAR); + reqsize = wcslen(buffer) * sizeof(WCHAR); done: RtlReleasePebLock(); @@ -832,7 +831,7 @@ DWORD sz = LOWORD(dosdev); /* in bytes */ if (8 + sz + 2 > size) return sz + 10; - strcpyW(buffer, DeviceRootW); + wcscpy(buffer, DeviceRootW); memmove(buffer + 4, name + offset, sz); buffer[4 + sz / sizeof(WCHAR)] = '\0'; /* file_part isn't set in this case */ @@ -855,7 +854,7 @@ } /* find file part */ - if (file_part && (ptr = strrchrW(buffer, '\\')) != NULL && ptr >= buffer + 2 && *++ptr) + if (file_part && (ptr = wcsrchr(buffer, '\\')) != NULL && ptr >= buffer + 2 && *++ptr) *file_part = ptr; return reqsize; } diff -Nru wine-development-5.5/dlls/ntdll/printf.c wine-development-5.6/dlls/ntdll/printf.c --- wine-development-5.5/dlls/ntdll/printf.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/printf.c 2020-04-10 18:54:32.000000000 +0000 @@ -32,7 +32,6 @@ #include "windef.h" #include "winternl.h" #include "ntdll_misc.h" -#include "wine/unicode.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(ntdll); @@ -71,7 +70,7 @@ SIZE_T space = out->len - out->used; if( len < 0 ) - len = strlenW( str ); + len = wcslen( str ); if( out->unicode ) { LPWSTR p = out->buf.W + out->used; @@ -213,7 +212,7 @@ int r = 0; if( len < 0 ) - len = strlenW( str ); + len = wcslen( str ); if (flags->Precision >= 0 && flags->Precision < len) len = flags->Precision; @@ -454,7 +453,7 @@ while (*p) { - q = strchrW( p, '%' ); + q = wcschr( p, '%' ); /* there are no % characters left: output the rest of the string */ if( !q ) diff -Nru wine-development-5.5/dlls/ntdll/process.c wine-development-5.6/dlls/ntdll/process.c --- wine-development-5.5/dlls/ntdll/process.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/process.c 2020-04-10 18:54:32.000000000 +0000 @@ -53,7 +53,6 @@ #include "wine/exception.h" #include "wine/library.h" #include "wine/server.h" -#include "wine/unicode.h" #ifdef HAVE_MACH_MACH_H #include @@ -1434,13 +1433,13 @@ while (*ptr) { static const WCHAR WINEDEBUG[] = {'W','I','N','E','D','E','B','U','G','=',0}; - if (!*winedebug && !strncmpW( ptr, WINEDEBUG, ARRAY_SIZE( WINEDEBUG ) - 1 )) + if (!*winedebug && !wcsncmp( ptr, WINEDEBUG, ARRAY_SIZE( WINEDEBUG ) - 1 )) { - DWORD len = strlenW(ptr) * 3 + 1; + DWORD len = wcslen(ptr) * 3 + 1; if ((*winedebug = RtlAllocateHeap( GetProcessHeap(), 0, len ))) - ntdll_wcstoumbs( ptr, strlenW(ptr) + 1, *winedebug, len, FALSE ); + ntdll_wcstoumbs( ptr, wcslen(ptr) + 1, *winedebug, len, FALSE ); } - ptr += strlenW(ptr) + 1; + ptr += wcslen(ptr) + 1; } ptr++; return (ptr - params->Environment) * sizeof(WCHAR); @@ -1578,7 +1577,7 @@ /* check for .com or .pif extension */ if (status == STATUS_INVALID_IMAGE_NOT_MZ && - (p = strrchrW( params->ImagePathName.Buffer, '.' )) && + (p = wcsrchr( params->ImagePathName.Buffer, '.' )) && (!wcsicmp( p, comW ) || !wcsicmp( p, pifW ))) status = STATUS_INVALID_IMAGE_WIN_16; @@ -1601,11 +1600,11 @@ case STATUS_INVALID_IMAGE_NE_FORMAT: case STATUS_INVALID_IMAGE_PROTECT: cmdline = RtlAllocateHeap( GetProcessHeap(), 0, - (strlenW(system_dir) + strlenW(winevdm) + 16 + - strlenW(params->ImagePathName.Buffer) + - strlenW(params->CommandLine.Buffer)) * sizeof(WCHAR)); + (wcslen(system_dir) + wcslen(winevdm) + 16 + + wcslen(params->ImagePathName.Buffer) + + wcslen(params->CommandLine.Buffer)) * sizeof(WCHAR)); if (!cmdline) return STATUS_NO_MEMORY; - sprintfW( cmdline, argsW, (is_win64 || is_wow64) ? syswow64_dir : system_dir, + NTDLL_swprintf( cmdline, argsW, (is_win64 || is_wow64) ? syswow64_dir : system_dir, winevdm, params->ImagePathName.Buffer, params->CommandLine.Buffer ); RtlInitUnicodeString( &strW, cmdline ); memset( &pe_info, 0, sizeof(pe_info) ); diff -Nru wine-development-5.5/dlls/ntdll/reg.c wine-development-5.6/dlls/ntdll/reg.c --- wine-development-5.5/dlls/ntdll/reg.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/reg.c 2020-04-10 18:54:32.000000000 +0000 @@ -38,7 +38,6 @@ #include "wine/library.h" #include "ntdll_misc.h" #include "wine/debug.h" -#include "wine/unicode.h" WINE_DEFAULT_DEBUG_CHANNEL(reg); @@ -1099,7 +1098,7 @@ for (offset = 0; offset <= pInfo->DataLength; offset += len + sizeof(WCHAR)) { wstr = (WCHAR*)(((CHAR*)pInfo) + offset); - len = strlenW(wstr) * sizeof(WCHAR); + len = wcslen(wstr) * sizeof(WCHAR); status = pQuery->QueryRoutine(pQuery->Name, pInfo->Type, wstr, len, pContext, pQuery->EntryContext); if(status != STATUS_SUCCESS && status != STATUS_BUFFER_TOO_SMALL) @@ -1111,7 +1110,7 @@ while(count<=pInfo->DataLength) { String = (WCHAR*)(((CHAR*)pInfo) + pInfo->DataOffset)+count; - count+=strlenW(String)+1; + count+=wcslen(String)+1; RtlInitUnicodeString(&src, (WCHAR*)(((CHAR*)pInfo) + pInfo->DataOffset)); res = 0; dst.MaximumLength = 0; @@ -1187,13 +1186,13 @@ return STATUS_INVALID_PARAMETER; } - len = (strlenW(base) + strlenW(Path) + 1) * sizeof(WCHAR); + len = (wcslen(base) + wcslen(Path) + 1) * sizeof(WCHAR); str->Buffer = RtlAllocateHeap(GetProcessHeap(), 0, len); if (str->Buffer == NULL) return STATUS_NO_MEMORY; - strcpyW(str->Buffer, base); - strcatW(str->Buffer, Path); + wcscpy(str->Buffer, base); + wcscat(str->Buffer, Path); str->Length = len - sizeof(WCHAR); str->MaximumLength = len; InitializeObjectAttributes(regkey, str, OBJ_CASE_INSENSITIVE, NULL, NULL); diff -Nru wine-development-5.5/dlls/ntdll/relay.c wine-development-5.6/dlls/ntdll/relay.c --- wine-development-5.5/dlls/ntdll/relay.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/relay.c 2020-04-10 18:54:32.000000000 +0000 @@ -33,7 +33,6 @@ #include "winternl.h" #include "wine/exception.h" #include "ntdll_misc.h" -#include "wine/unicode.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(relay); @@ -104,24 +103,24 @@ const WCHAR *p = buffer; const WCHAR **ret; - while ((p = strchrW( p, ';' ))) + while ((p = wcschr( p, ';' ))) { count++; p++; } /* allocate count+1 pointers, plus the space for a copy of the string */ if ((ret = RtlAllocateHeap( GetProcessHeap(), 0, - (count+1) * sizeof(WCHAR*) + (strlenW(buffer)+1) * sizeof(WCHAR) ))) + (count+1) * sizeof(WCHAR*) + (wcslen(buffer)+1) * sizeof(WCHAR) ))) { WCHAR *str = (WCHAR *)(ret + count + 1); WCHAR *q = str; - strcpyW( str, buffer ); + wcscpy( str, buffer ); count = 0; for (;;) { ret[count++] = q; - if (!(q = strchrW( q, ';' ))) break; + if (!(q = wcschr( q, ';' ))) break; *q++ = 0; } ret[count++] = NULL; @@ -223,7 +222,7 @@ sprintf( ord_str, "%d", ordinal ); for(; *list; list++) { - const WCHAR *p = strrchrW( *list, '.' ); + const WCHAR *p = wcsrchr( *list, '.' ); if (p && p > *list) /* check module and function */ { int len = p - *list; @@ -284,7 +283,7 @@ int len; if (!wcsicmp( *listitem, module )) return !show; - len = strlenW( *listitem ); + len = wcslen( *listitem ); if (!wcsnicmp( *listitem, module, len ) && !wcsicmp( module + len, dllW )) return !show; } diff -Nru wine-development-5.5/dlls/ntdll/resource.c wine-development-5.6/dlls/ntdll/resource.c --- wine-development-5.5/dlls/ntdll/resource.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/resource.c 2020-04-10 18:54:32.000000000 +0000 @@ -43,7 +43,6 @@ #include "ntdll_misc.h" #include "wine/asm.h" #include "wine/exception.h" -#include "wine/unicode.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(resource); @@ -145,14 +144,14 @@ if (IS_INTRESOURCE(name)) return find_entry_by_id( dir, LOWORD(name), root, want_dir ); entry = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(dir + 1); - namelen = strlenW(name); + namelen = wcslen(name); min = 0; max = dir->NumberOfNamedEntries - 1; while (min <= max) { pos = (min + max) / 2; str = (const IMAGE_RESOURCE_DIR_STRING_U *)((const char *)root + entry[pos].u.s.NameOffset); - res = strncmpW( name, str->NameString, str->Length ); + res = wcsncmp( name, str->NameString, str->Length ); if (!res && namelen == str->Length) { if (!entry[pos].u2.s2.DataIsDirectory == !want_dir) diff -Nru wine-development-5.5/dlls/ntdll/rtl.c wine-development-5.6/dlls/ntdll/rtl.c --- wine-development-5.5/dlls/ntdll/rtl.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/rtl.c 2020-04-10 18:54:32.000000000 +0000 @@ -42,7 +42,6 @@ #include "winternl.h" #include "wine/debug.h" #include "wine/exception.h" -#include "wine/unicode.h" #include "ntdll_misc.h" #include "inaddr.h" #include "in6addr.h" @@ -1111,15 +1110,15 @@ TRACE("(%p:0x%x, %d, %p, %p:%d)\n", pin, pin->S_un.S_addr, port, buffer, psize, *psize); - needed = sprintfW(tmp_ip, fmt_ip, + needed = NTDLL_swprintf(tmp_ip, fmt_ip, pin->S_un.S_un_b.s_b1, pin->S_un.S_un_b.s_b2, pin->S_un.S_un_b.s_b3, pin->S_un.S_un_b.s_b4); - if (port) needed += sprintfW(tmp_ip + needed, fmt_port, ntohs(port)); + if (port) needed += NTDLL_swprintf(tmp_ip + needed, fmt_port, ntohs(port)); if (*psize > needed) { *psize = needed + 1; - strcpyW(buffer, tmp_ip); + wcscpy(buffer, tmp_ip); return STATUS_SUCCESS; } diff -Nru wine-development-5.5/dlls/ntdll/rtlstr.c wine-development-5.6/dlls/ntdll/rtlstr.c --- wine-development-5.5/dlls/ntdll/rtlstr.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/rtlstr.c 2020-04-10 18:54:32.000000000 +0000 @@ -32,7 +32,6 @@ #include "windef.h" #include "winnt.h" #include "winternl.h" -#include "wine/unicode.h" #include "wine/debug.h" #include "ntdll_misc.h" @@ -177,7 +176,7 @@ { if ((target->Buffer = (PWSTR) source)) { - unsigned int length = strlenW(source) * sizeof(WCHAR); + unsigned int length = wcslen(source) * sizeof(WCHAR); if (length > 0xfffc) length = 0xfffc; target->Length = length; @@ -206,7 +205,7 @@ PCWSTR source) /* [I] '\0' terminated unicode string used to initialize target */ { if (source != NULL) { - unsigned int len = strlenW(source) * sizeof(WCHAR); + unsigned int len = wcslen(source) * sizeof(WCHAR); if (len > 0xFFFC) { return STATUS_NAME_TOO_LONG; @@ -235,7 +234,7 @@ */ BOOLEAN WINAPI RtlCreateUnicodeString( PUNICODE_STRING target, LPCWSTR src ) { - int len = (strlenW(src) + 1) * sizeof(WCHAR); + int len = (wcslen(src) + 1) * sizeof(WCHAR); if (!(target->Buffer = RtlAllocateHeap( GetProcessHeap(), 0, len ))) return FALSE; memcpy( target->Buffer, src, len ); target->MaximumLength = len; @@ -1013,7 +1012,7 @@ LPCWSTR src) /* [I] '\0' terminated unicode string to be concatenated */ { if (src != NULL) { - unsigned int src_len = strlenW(src) * sizeof(WCHAR); + unsigned int src_len = wcslen(src) * sizeof(WCHAR); unsigned int dest_len = src_len + dest->Length; if (dest_len > dest->MaximumLength) return STATUS_BUFFER_TOO_SMALL; @@ -1228,7 +1227,7 @@ { for (i = 0; i < len; i++) { - if (strchrW(std_control_chars, s[i])) + if (wcschr(std_control_chars, s[i])) { out_flags |= IS_TEXT_UNICODE_CONTROLS; break; @@ -1240,7 +1239,7 @@ { for (i = 0; i < len; i++) { - if (strchrW(byterev_control_chars, s[i])) + if (wcschr(byterev_control_chars, s[i])) { out_flags |= IS_TEXT_UNICODE_REVERSE_CONTROLS; break; @@ -1702,7 +1701,7 @@ str->Length = str->MaximumLength = 0; return STATUS_NO_MEMORY; } - sprintfW(str->Buffer, szFormat, guid->Data1, guid->Data2, guid->Data3, + NTDLL_swprintf(str->Buffer, szFormat, guid->Data1, guid->Data2, guid->Data3, guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3], guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]); diff -Nru wine-development-5.5/dlls/ntdll/sec.c wine-development-5.6/dlls/ntdll/sec.c --- wine-development-5.5/dlls/ntdll/sec.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/sec.c 2020-04-10 18:54:32.000000000 +0000 @@ -38,7 +38,6 @@ #include "ntdll_misc.h" #include "wine/exception.h" #include "wine/library.h" -#include "wine/unicode.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(ntdll); @@ -1828,13 +1827,13 @@ DWORD i, len; *p++ = 'S'; - p += sprintfW( p, formatW, sid->Revision ); - p += sprintfW( p, formatW, MAKELONG( MAKEWORD( sid->IdentifierAuthority.Value[5], + p += NTDLL_swprintf( p, formatW, sid->Revision ); + p += NTDLL_swprintf( p, formatW, MAKELONG( MAKEWORD( sid->IdentifierAuthority.Value[5], sid->IdentifierAuthority.Value[4] ), MAKEWORD( sid->IdentifierAuthority.Value[3], sid->IdentifierAuthority.Value[2] ))); for (i = 0; i < sid->SubAuthorityCount; i++) - p += sprintfW( p, formatW, sid->SubAuthority[i] ); + p += NTDLL_swprintf( p, formatW, sid->SubAuthority[i] ); len = (p + 1 - buffer) * sizeof(WCHAR); diff -Nru wine-development-5.5/dlls/ntdll/server.c wine-development-5.6/dlls/ntdll/server.c --- wine-development-5.5/dlls/ntdll/server.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/server.c 2020-04-10 18:54:32.000000000 +0000 @@ -600,11 +600,19 @@ obj_handle_t apc_handle = 0; apc_call_t call; apc_result_t result; - timeout_t abs_timeout = timeout ? timeout->QuadPart : TIMEOUT_INFINITE; + abstime_t abs_timeout = timeout ? timeout->QuadPart : TIMEOUT_INFINITE; sigset_t old_set; memset( &result, 0, sizeof(result) ); + if (abs_timeout < 0) + { + LARGE_INTEGER now; + + RtlQueryPerformanceCounter(&now); + abs_timeout -= now.QuadPart; + } + do { pthread_sigmask( SIG_BLOCK, &server_block_set, &old_set ); @@ -619,7 +627,6 @@ wine_server_add_data( req, &result, sizeof(result) ); wine_server_add_data( req, select_op, size ); ret = server_call_unlocked( req ); - abs_timeout = reply->timeout; apc_handle = reply->apc_handle; call = reply->call; } @@ -1448,6 +1455,9 @@ */ void server_init_process_done(void) { +#ifdef __i386__ + extern struct ldt_copy __wine_ldt_copy; +#endif PEB *peb = NtCurrentTeb()->Peb; IMAGE_NT_HEADERS *nt = RtlImageNtHeader( peb->ImageBaseAddress ); void *entry = (char *)peb->ImageBaseAddress + nt->OptionalHeader.AddressOfEntryPoint; @@ -1471,7 +1481,7 @@ { req->module = wine_server_client_ptr( peb->ImageBaseAddress ); #ifdef __i386__ - req->ldt_copy = wine_server_client_ptr( &wine_ldt_copy ); + req->ldt_copy = wine_server_client_ptr( &__wine_ldt_copy ); #endif req->entry = wine_server_client_ptr( entry ); req->gui = (nt->OptionalHeader.Subsystem != IMAGE_SUBSYSTEM_WINDOWS_CUI); diff -Nru wine-development-5.5/dlls/ntdll/signal_arm64.c wine-development-5.6/dlls/ntdll/signal_arm64.c --- wine-development-5.5/dlls/ntdll/signal_arm64.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/signal_arm64.c 2020-04-10 18:54:32.000000000 +0000 @@ -2106,6 +2106,23 @@ } /********************************************************************** + * get_thread_ldt_entry + */ +NTSTATUS get_thread_ldt_entry( HANDLE handle, void *data, ULONG len, ULONG *ret_len ) +{ + return STATUS_NOT_IMPLEMENTED; +} + +/****************************************************************************** + * NtSetLdtEntries (NTDLL.@) + * ZwSetLdtEntries (NTDLL.@) + */ +NTSTATUS WINAPI NtSetLdtEntries( ULONG sel1, LDT_ENTRY entry1, ULONG sel2, LDT_ENTRY entry2 ) +{ + return STATUS_NOT_IMPLEMENTED; +} + +/********************************************************************** * DbgBreakPoint (NTDLL.@) */ __ASM_STDCALL_FUNC( DbgBreakPoint, 0, "brk #0; ret") diff -Nru wine-development-5.5/dlls/ntdll/signal_arm.c wine-development-5.6/dlls/ntdll/signal_arm.c --- wine-development-5.5/dlls/ntdll/signal_arm.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/signal_arm.c 2020-04-10 18:54:32.000000000 +0000 @@ -1278,6 +1278,23 @@ } /********************************************************************** + * get_thread_ldt_entry + */ +NTSTATUS get_thread_ldt_entry( HANDLE handle, void *data, ULONG len, ULONG *ret_len ) +{ + return STATUS_NOT_IMPLEMENTED; +} + +/****************************************************************************** + * NtSetLdtEntries (NTDLL.@) + * ZwSetLdtEntries (NTDLL.@) + */ +NTSTATUS WINAPI NtSetLdtEntries( ULONG sel1, LDT_ENTRY entry1, ULONG sel2, LDT_ENTRY entry2 ) +{ + return STATUS_NOT_IMPLEMENTED; +} + +/********************************************************************** * DbgBreakPoint (NTDLL.@) */ void WINAPI DbgBreakPoint(void) diff -Nru wine-development-5.5/dlls/ntdll/signal_i386.c wine-development-5.6/dlls/ntdll/signal_i386.c --- wine-development-5.5/dlls/ntdll/signal_i386.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/signal_i386.c 2020-04-10 18:54:32.000000000 +0000 @@ -185,6 +185,30 @@ "int $0x80" ); #endif +struct modify_ldt_s +{ + unsigned int entry_number; + void *base_addr; + unsigned int limit; + unsigned int seg_32bit : 1; + unsigned int contents : 2; + unsigned int read_exec_only : 1; + unsigned int limit_in_pages : 1; + unsigned int seg_not_present : 1; + unsigned int usable : 1; + unsigned int garbage : 25; +}; + +static inline int modify_ldt( int func, struct modify_ldt_s *ptr, unsigned long count ) +{ + return syscall( 123 /* SYS_modify_ldt */, func, ptr, count ); +} + +static inline int set_thread_area( struct modify_ldt_s *ptr ) +{ + return syscall( 243 /* SYS_set_thread_area */, ptr ); +} + #elif defined (__BSDI__) #include @@ -214,6 +238,8 @@ #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) #include +#include +#include #define EAX_sig(context) ((context)->uc_mcontext.mc_eax) #define EBX_sig(context) ((context)->uc_mcontext.mc_ebx) @@ -242,6 +268,9 @@ #elif defined (__OpenBSD__) +#include +#include + #define EAX_sig(context) ((context)->sc_eax) #define EBX_sig(context) ((context)->sc_ebx) #define ECX_sig(context) ((context)->sc_ecx) @@ -318,6 +347,8 @@ #elif defined (__APPLE__) +#include + /* work around silly renaming of struct members in OS X 10.5 */ #if __DARWIN_UNIX03 && defined(_STRUCT_X86_EXCEPTION_STATE32) #define EAX_sig(context) ((context)->uc_mcontext->__ss.__eax) @@ -365,6 +396,9 @@ #elif defined(__NetBSD__) +#include +#include + #define EAX_sig(context) ((context)->uc_mcontext.__gregs[_REG_EAX]) #define EBX_sig(context) ((context)->uc_mcontext.__gregs[_REG_EBX]) #define ECX_sig(context) ((context)->uc_mcontext.__gregs[_REG_ECX]) @@ -394,6 +428,9 @@ #elif defined(__GNU__) +#include +#include + #define EAX_sig(context) ((context)->uc_mcontext.gregs[REG_EAX]) #define EBX_sig(context) ((context)->uc_mcontext.gregs[REG_EBX]) #define ECX_sig(context) ((context)->uc_mcontext.gregs[REG_ECX]) @@ -440,6 +477,8 @@ static size_t signal_stack_mask; static size_t signal_stack_size; +static ULONG first_ldt_entry = 32; + static wine_signal_handler handlers[256]; enum i386_trap_code @@ -511,6 +550,13 @@ return (struct x86_thread_data *)NtCurrentTeb()->SystemReserved2; } +static inline WORD get_cs(void) { WORD res; __asm__( "movw %%cs,%0" : "=r" (res) ); return res; } +static inline WORD get_ds(void) { WORD res; __asm__( "movw %%ds,%0" : "=r" (res) ); return res; } +static inline WORD get_fs(void) { WORD res; __asm__( "movw %%fs,%0" : "=r" (res) ); return res; } +static inline WORD get_gs(void) { WORD res; __asm__( "movw %%gs,%0" : "=r" (res) ); return res; } +static inline void set_fs( WORD val ) { __asm__( "mov %0,%%fs" :: "r" (val)); } +static inline void set_gs( WORD val ) { __asm__( "mov %0,%%gs" :: "r" (val)); } + /* Exception record for handling exceptions happening inside exception handlers */ typedef struct { @@ -523,6 +569,22 @@ PEXCEPTION_HANDLER handler, PEXCEPTION_HANDLER nested_handler ); /*********************************************************************** + * is_gdt_sel + */ +static inline int is_gdt_sel( WORD sel ) +{ + return !(sel & 4); +} + +/*********************************************************************** + * ldt_is_system + */ +static inline int ldt_is_system( WORD sel ) +{ + return is_gdt_sel( sel ) || ((sel >> 3) < first_ldt_entry); +} + +/*********************************************************************** * dispatch_signal */ static inline int dispatch_signal(unsigned int sig) @@ -781,8 +843,8 @@ __asm__ __volatile__("mov %ss,%ax; mov %ax,%ds; mov %ax,%es"); thread_data = (struct x86_thread_data *)get_current_teb()->SystemReserved2; - wine_set_fs( thread_data->fs ); - wine_set_gs( thread_data->gs ); + set_fs( thread_data->fs ); + set_gs( thread_data->gs ); libc_sigacthandler( signal, siginfo, sigcontext ); } @@ -830,24 +892,23 @@ #ifdef FS_sig *fs = LOWORD(FS_sig(sigcontext)); #else - *fs = wine_get_fs(); + *fs = get_fs(); #endif #ifdef GS_sig *gs = LOWORD(GS_sig(sigcontext)); #else - *gs = wine_get_gs(); + *gs = get_gs(); #endif #ifndef __sun /* see above for Solaris handling */ { struct x86_thread_data *thread_data = (struct x86_thread_data *)teb->SystemReserved2; - wine_set_fs( thread_data->fs ); - wine_set_gs( thread_data->gs ); + set_fs( thread_data->fs ); + set_gs( thread_data->gs ); } #endif - if (!wine_ldt_is_system(CS_sig(sigcontext)) || - !wine_ldt_is_system(SS_sig(sigcontext))) /* 16-bit mode */ + if (!ldt_is_system(CS_sig(sigcontext)) || !ldt_is_system(SS_sig(sigcontext))) /* 16-bit mode */ { /* * Win16 or DOS protected mode. Note that during switch @@ -1079,12 +1140,12 @@ #ifdef GS_sig GS_sig(sigcontext) = context->SegGs; #else - wine_set_gs( context->SegGs ); + set_gs( context->SegGs ); #endif #ifdef FS_sig FS_sig(sigcontext) = context->SegFs; #else - wine_set_fs( context->SegFs ); + set_fs( context->SegFs ); #endif if (fpu) *fpu = context->FloatSave; @@ -1212,10 +1273,10 @@ else { CONTEXT newcontext = *context; - newcontext.SegDs = wine_get_ds(); - newcontext.SegEs = wine_get_es(); - newcontext.SegFs = wine_get_fs(); - newcontext.SegGs = wine_get_gs(); + newcontext.SegDs = get_ds(); + newcontext.SegEs = get_ds(); + newcontext.SegFs = get_fs(); + newcontext.SegGs = get_gs(); set_full_cpu_context( &newcontext ); } } @@ -1459,17 +1520,17 @@ context->Ebp = ebp; context->Esp = (DWORD)&retaddr; context->Eip = *(&edi - 1); - context->SegCs = wine_get_cs(); - context->SegSs = wine_get_ss(); + context->SegCs = get_cs(); + context->SegSs = get_ds(); context->EFlags = eflags; context->ContextFlags |= CONTEXT_CONTROL; } if (needed_flags & CONTEXT_SEGMENTS) { - context->SegDs = wine_get_ds(); - context->SegEs = wine_get_es(); - context->SegFs = wine_get_fs(); - context->SegGs = wine_get_gs(); + context->SegDs = get_ds(); + context->SegEs = get_ds(); + context->SegFs = get_fs(); + context->SegGs = get_gs(); context->ContextFlags |= CONTEXT_SEGMENTS; } if (needed_flags & CONTEXT_FLOATING_POINT) save_fpu( context ); @@ -1533,7 +1594,7 @@ BYTE instr[16]; unsigned int i, len, prefix_count = 0; - if (!wine_ldt_is_system( context->SegCs )) return 0; + if (!ldt_is_system( context->SegCs )) return 0; len = virtual_uninterrupted_read_memory( (BYTE *)context->Eip, instr, sizeof(instr) ); for (i = 0; i < len; i++) switch (instr[i]) @@ -1600,7 +1661,7 @@ WORD system_gs = x86_thread_data()->gs; if (context->SegGs == system_gs) return FALSE; - if (!wine_ldt_is_system( context->SegCs )) return FALSE; + if (!ldt_is_system( context->SegCs )) return FALSE; /* only handle faults in system libraries */ if (virtual_is_valid_code_address( instr, 1 )) return FALSE; @@ -1883,12 +1944,12 @@ EIP_sig(sigcontext) = (DWORD)raise_generic_exception; /* clear single-step, direction, and align check flag */ EFL_sig(sigcontext) &= ~(0x100|0x400|0x40000); - CS_sig(sigcontext) = wine_get_cs(); - DS_sig(sigcontext) = wine_get_ds(); - ES_sig(sigcontext) = wine_get_es(); - FS_sig(sigcontext) = wine_get_fs(); - GS_sig(sigcontext) = wine_get_gs(); - SS_sig(sigcontext) = wine_get_ss(); + CS_sig(sigcontext) = get_cs(); + DS_sig(sigcontext) = get_ds(); + ES_sig(sigcontext) = get_ds(); + FS_sig(sigcontext) = get_fs(); + GS_sig(sigcontext) = get_gs(); + SS_sig(sigcontext) = get_ds(); stack->ret_addr = (void *)0xdeadbabe; /* raise_generic_exception must not return */ stack->rec_ptr = &stack->rec; /* arguments for raise_generic_exception */ stack->context_ptr = &stack->context; @@ -2022,7 +2083,7 @@ stack->rec.NumberParameters = 2; stack->rec.ExceptionInformation[0] = 0; /* if error contains a LDT selector, use that as fault address */ - if ((err & 7) == 4 && !wine_ldt_is_system( err | 7 )) + if ((err & 7) == 4 && !ldt_is_system( err | 7 )) stack->rec.ExceptionInformation[1] = err & ~7; else { @@ -2242,8 +2303,25 @@ /*********************************************************************** - * locking for LDT routines + * LDT support */ + +#define LDT_SIZE 8192 + +#define LDT_FLAGS_DATA 0x13 /* Data segment */ +#define LDT_FLAGS_CODE 0x1b /* Code segment */ +#define LDT_FLAGS_32BIT 0x40 /* Segment is 32-bit (code or stack) */ +#define LDT_FLAGS_ALLOCATED 0x80 /* Segment is allocated */ + +struct ldt_copy +{ + void *base[LDT_SIZE]; + unsigned int limit[LDT_SIZE]; + unsigned char flags[LDT_SIZE]; +} __wine_ldt_copy; + +static WORD gdt_fs_sel; + static RTL_CRITICAL_SECTION ldt_section; static RTL_CRITICAL_SECTION_DEBUG critsect_debug = { @@ -2254,6 +2332,8 @@ static RTL_CRITICAL_SECTION ldt_section = { &critsect_debug, -1, 0, 0, 0, 0 }; static sigset_t ldt_sigset; +static const LDT_ENTRY null_entry; + static void ldt_lock(void) { sigset_t sigset; @@ -2274,6 +2354,234 @@ else RtlLeaveCriticalSection( &ldt_section ); } +static inline void *ldt_get_base( LDT_ENTRY ent ) +{ + return (void *)(ent.BaseLow | + (ULONG_PTR)ent.HighWord.Bits.BaseMid << 16 | + (ULONG_PTR)ent.HighWord.Bits.BaseHi << 24); +} + +static inline unsigned int ldt_get_limit( LDT_ENTRY ent ) +{ + unsigned int limit = ent.LimitLow | (ent.HighWord.Bits.LimitHi << 16); + if (ent.HighWord.Bits.Granularity) limit = (limit << 12) | 0xfff; + return limit; +} + +static LDT_ENTRY ldt_make_entry( void *base, unsigned int limit, unsigned char flags ) +{ + LDT_ENTRY entry; + + entry.BaseLow = (WORD)(ULONG_PTR)base; + entry.HighWord.Bits.BaseMid = (BYTE)((ULONG_PTR)base >> 16); + entry.HighWord.Bits.BaseHi = (BYTE)((ULONG_PTR)base >> 24); + if ((entry.HighWord.Bits.Granularity = (limit >= 0x100000))) limit >>= 12; + entry.LimitLow = (WORD)limit; + entry.HighWord.Bits.LimitHi = limit >> 16; + entry.HighWord.Bits.Dpl = 3; + entry.HighWord.Bits.Pres = 1; + entry.HighWord.Bits.Type = flags; + entry.HighWord.Bits.Sys = 0; + entry.HighWord.Bits.Reserved_0 = 0; + entry.HighWord.Bits.Default_Big = (flags & LDT_FLAGS_32BIT) != 0; + return entry; +} + +static void ldt_set_entry( WORD sel, LDT_ENTRY entry ) +{ + int index = sel >> 3; + +#ifdef linux + struct modify_ldt_s ldt_info = { index }; + + ldt_info.base_addr = ldt_get_base( entry ); + ldt_info.limit = entry.LimitLow | (entry.HighWord.Bits.LimitHi << 16); + ldt_info.seg_32bit = entry.HighWord.Bits.Default_Big; + ldt_info.contents = (entry.HighWord.Bits.Type >> 2) & 3; + ldt_info.read_exec_only = !(entry.HighWord.Bits.Type & 2); + ldt_info.limit_in_pages = entry.HighWord.Bits.Granularity; + ldt_info.seg_not_present = !entry.HighWord.Bits.Pres; + ldt_info.usable = entry.HighWord.Bits.Sys; + if (modify_ldt( 0x11, &ldt_info, sizeof(ldt_info) ) < 0) perror( "modify_ldt" ); +#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__DragonFly__) + /* The kernel will only let us set LDTs with user priority level */ + if (entry.HighWord.Bits.Pres && entry.HighWord.Bits.Dpl != 3) entry.HighWord.Bits.Dpl = 3; + if (i386_set_ldt(index, (union descriptor *)&entry, 1) < 0) + { + perror("i386_set_ldt"); + fprintf( stderr, "Did you reconfigure the kernel with \"options USER_LDT\"?\n" ); + exit(1); + } +#elif defined(__svr4__) || defined(_SCO_DS) + struct ssd ldt_mod; + + ldt_mod.sel = sel; + ldt_mod.bo = (unsigned long)ldt_get_base( entry ); + ldt_mod.ls = entry.LimitLow | (entry.HighWord.Bits.LimitHi << 16); + ldt_mod.acc1 = entry.HighWord.Bytes.Flags1; + ldt_mod.acc2 = entry.HighWord.Bytes.Flags2 >> 4; + if (sysi86(SI86DSCR, &ldt_mod) == -1) perror("sysi86"); +#elif defined(__APPLE__) + if (i386_set_ldt(index, (union ldt_entry *)&entry, 1) < 0) perror("i386_set_ldt"); +#elif defined(__GNU__) + if (i386_set_ldt(mach_thread_self(), sel, (descriptor_list_t)&entry, 1) != KERN_SUCCESS) + perror("i386_set_ldt"); +#else + fprintf( stderr, "No LDT support on this platform\n" ); + exit(1); +#endif + + __wine_ldt_copy.base[index] = ldt_get_base( entry ); + __wine_ldt_copy.limit[index] = ldt_get_limit( entry ); + __wine_ldt_copy.flags[index] = (entry.HighWord.Bits.Type | + (entry.HighWord.Bits.Default_Big ? LDT_FLAGS_32BIT : 0) | + LDT_FLAGS_ALLOCATED); +} + +static void ldt_init(void) +{ +#ifdef __linux__ + /* the preloader may have allocated it already */ + gdt_fs_sel = get_fs(); + if (!gdt_fs_sel || !is_gdt_sel( gdt_fs_sel )) + { + struct modify_ldt_s ldt_info = { -1 }; + + ldt_info.seg_32bit = 1; + ldt_info.usable = 1; + if (set_thread_area( &ldt_info ) >= 0) gdt_fs_sel = (ldt_info.entry_number << 3) | 3; + else gdt_fs_sel = 0; + } +#elif defined(__FreeBSD__) || defined (__FreeBSD_kernel__) + gdt_fs_sel = GSEL( GUFS_SEL, SEL_UPL ); +#endif +} + +WORD ldt_alloc_fs( TEB *teb, int first_thread ) +{ + LDT_ENTRY entry; + int idx; + + if (gdt_fs_sel) return gdt_fs_sel; + + entry = ldt_make_entry( teb, teb_size - 1, LDT_FLAGS_DATA | LDT_FLAGS_32BIT ); + + if (first_thread) /* no locking for first thread */ + { + /* leave some space if libc is using the LDT for %gs */ + if (!is_gdt_sel( get_gs() )) first_ldt_entry = 512; + idx = first_ldt_entry; + ldt_set_entry( (idx << 3) | 7, entry ); + } + else + { + ldt_lock(); + for (idx = first_ldt_entry; idx < LDT_SIZE; idx++) + { + if (__wine_ldt_copy.flags[idx]) continue; + ldt_set_entry( (idx << 3) | 7, entry ); + break; + } + ldt_unlock(); + if (idx == LDT_SIZE) return 0; + } + return (idx << 3) | 7; +} + +static void ldt_free_fs( WORD sel ) +{ + if (sel == gdt_fs_sel) return; + + ldt_lock(); + __wine_ldt_copy.flags[sel >> 3] = 0; + ldt_unlock(); +} + +static void ldt_set_fs( WORD sel, TEB *teb ) +{ + if (sel == gdt_fs_sel) + { +#ifdef __linux__ + struct modify_ldt_s ldt_info = { sel >> 3 }; + + ldt_info.base_addr = teb; + ldt_info.limit = teb_size - 1; + ldt_info.seg_32bit = 1; + if (set_thread_area( &ldt_info ) < 0) perror( "set_thread_area" ); +#elif defined(__FreeBSD__) || defined (__FreeBSD_kernel__) || defined(__DragonFly__) + i386_set_fsbase( teb ); +#endif + } + set_fs( sel ); +} + + +/********************************************************************** + * get_thread_ldt_entry + */ +NTSTATUS get_thread_ldt_entry( HANDLE handle, void *data, ULONG len, ULONG *ret_len ) +{ + THREAD_DESCRIPTOR_INFORMATION *info = data; + NTSTATUS status = STATUS_SUCCESS; + + if (len < sizeof(*info)) return STATUS_INFO_LENGTH_MISMATCH; + if (info->Selector >> 16) return STATUS_UNSUCCESSFUL; + + if (is_gdt_sel( info->Selector )) + { + if (!(info->Selector & ~3)) + info->Entry = null_entry; + else if ((info->Selector | 3) == get_cs()) + info->Entry = ldt_make_entry( 0, ~0u, LDT_FLAGS_CODE | LDT_FLAGS_32BIT ); + else if ((info->Selector | 3) == get_ds()) + info->Entry = ldt_make_entry( 0, ~0u, LDT_FLAGS_DATA | LDT_FLAGS_32BIT ); + else if ((info->Selector | 3) == get_fs()) + info->Entry = ldt_make_entry( NtCurrentTeb(), 0xfff, LDT_FLAGS_DATA | LDT_FLAGS_32BIT ); + else + return STATUS_UNSUCCESSFUL; + } + else + { + SERVER_START_REQ( get_selector_entry ) + { + req->handle = wine_server_obj_handle( handle ); + req->entry = info->Selector >> 3; + status = wine_server_call( req ); + if (!status) + { + if (reply->flags) + info->Entry = ldt_make_entry( (void *)reply->base, reply->limit, reply->flags ); + else + status = STATUS_UNSUCCESSFUL; + } + } + SERVER_END_REQ; + } + if (status == STATUS_SUCCESS && ret_len) + /* yes, that's a bit strange, but it's the way it is */ + *ret_len = sizeof(info->Entry); + + return status; +} + + +/****************************************************************************** + * NtSetLdtEntries (NTDLL.@) + * ZwSetLdtEntries (NTDLL.@) + */ +NTSTATUS WINAPI NtSetLdtEntries( ULONG sel1, LDT_ENTRY entry1, ULONG sel2, LDT_ENTRY entry2 ) +{ + if (sel1 >> 16 || sel2 >> 16) return STATUS_INVALID_LDT_DESCRIPTOR; + if (sel1 && (sel1 >> 3) < first_ldt_entry) return STATUS_INVALID_LDT_DESCRIPTOR; + if (sel2 && (sel2 >> 3) < first_ldt_entry) return STATUS_INVALID_LDT_DESCRIPTOR; + + ldt_lock(); + if (sel1) ldt_set_entry( sel1, entry1 ); + if (sel2) ldt_set_entry( sel2, entry2 ); + ldt_unlock(); + return STATUS_SUCCESS; +} + /********************************************************************** * signal_alloc_thread @@ -2285,6 +2593,7 @@ SIZE_T size; void *addr = NULL; NTSTATUS status; + int first_thread = !sigstack_alignment; if (!sigstack_alignment) { @@ -2294,6 +2603,7 @@ while ((1u << sigstack_alignment) < min_size) sigstack_alignment++; signal_stack_mask = (1 << sigstack_alignment) - 1; signal_stack_size = (1 << sigstack_alignment) - teb_size; + ldt_init(); } size = signal_stack_mask + 1; @@ -2304,7 +2614,7 @@ (*teb)->Tib.Self = &(*teb)->Tib; (*teb)->Tib.ExceptionList = (void *)~0UL; thread_data = (struct x86_thread_data *)(*teb)->SystemReserved2; - if (!(thread_data->fs = wine_ldt_alloc_fs())) + if (!(thread_data->fs = ldt_alloc_fs( *teb, first_thread ))) { size = 0; NtFreeVirtualMemory( NtCurrentProcess(), &addr, &size, MEM_RELEASE ); @@ -2323,7 +2633,7 @@ SIZE_T size = 0; struct x86_thread_data *thread_data = (struct x86_thread_data *)teb->SystemReserved2; - wine_ldt_free_fs( thread_data->fs ); + ldt_free_fs( thread_data->fs ); NtFreeVirtualMemory( NtCurrentProcess(), (void **)&teb, &size, MEM_RELEASE ); } @@ -2335,7 +2645,6 @@ { const WORD fpu_cw = 0x27f; struct x86_thread_data *thread_data = (struct x86_thread_data *)teb->SystemReserved2; - LDT_ENTRY fs_entry; stack_t ss; #ifdef __APPLE__ @@ -2351,11 +2660,8 @@ ss.ss_flags = 0; if (sigaltstack(&ss, NULL) == -1) perror( "sigaltstack" ); - wine_ldt_set_base( &fs_entry, teb ); - wine_ldt_set_limit( &fs_entry, teb_size - 1 ); - wine_ldt_set_flags( &fs_entry, WINE_LDT_FLAGS_DATA|WINE_LDT_FLAGS_32BIT ); - wine_ldt_init_fs( thread_data->fs, &fs_entry ); - thread_data->gs = wine_get_gs(); + ldt_set_fs( thread_data->fs, teb ); + thread_data->gs = get_gs(); #ifdef __GNUC__ __asm__ volatile ("fninit; fldcw %0" : : "m" (fpu_cw)); @@ -2402,8 +2708,6 @@ sig_act.sa_sigaction = trap_handler; if (sigaction( SIGTRAP, &sig_act, NULL ) == -1) goto error; #endif - - wine_ldt_init_locking( ldt_lock, ldt_unlock ); return; error: @@ -2703,12 +3007,12 @@ */ static void init_thread_context( CONTEXT *context, LPTHREAD_START_ROUTINE entry, void *arg, void *relay ) { - context->SegCs = wine_get_cs(); - context->SegDs = wine_get_ds(); - context->SegEs = wine_get_es(); - context->SegFs = wine_get_fs(); - context->SegGs = wine_get_gs(); - context->SegSs = wine_get_ss(); + context->SegCs = get_cs(); + context->SegDs = get_ds(); + context->SegEs = get_ds(); + context->SegFs = get_fs(); + context->SegGs = get_gs(); + context->SegSs = get_ds(); context->EFlags = 0x202; context->Eax = (DWORD)entry; context->Ebx = (DWORD)arg; diff -Nru wine-development-5.5/dlls/ntdll/signal_powerpc.c wine-development-5.6/dlls/ntdll/signal_powerpc.c --- wine-development-5.5/dlls/ntdll/signal_powerpc.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/signal_powerpc.c 2020-04-10 18:54:32.000000000 +0000 @@ -1256,6 +1256,23 @@ } /********************************************************************** + * get_thread_ldt_entry + */ +NTSTATUS get_thread_ldt_entry( HANDLE handle, void *data, ULONG len, ULONG *ret_len ) +{ + return STATUS_NOT_IMPLEMENTED; +} + +/****************************************************************************** + * NtSetLdtEntries (NTDLL.@) + * ZwSetLdtEntries (NTDLL.@) + */ +NTSTATUS WINAPI NtSetLdtEntries( ULONG sel1, LDT_ENTRY entry1, ULONG sel2, LDT_ENTRY entry2 ) +{ + return STATUS_NOT_IMPLEMENTED; +} + +/********************************************************************** * DbgBreakPoint (NTDLL.@) */ void WINAPI DbgBreakPoint(void) diff -Nru wine-development-5.5/dlls/ntdll/signal_x86_64.c wine-development-5.6/dlls/ntdll/signal_x86_64.c --- wine-development-5.5/dlls/ntdll/signal_x86_64.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/signal_x86_64.c 2020-04-10 18:54:32.000000000 +0000 @@ -4279,6 +4279,23 @@ } /********************************************************************** + * get_thread_ldt_entry + */ +NTSTATUS get_thread_ldt_entry( HANDLE handle, void *data, ULONG len, ULONG *ret_len ) +{ + return STATUS_NOT_IMPLEMENTED; +} + +/****************************************************************************** + * NtSetLdtEntries (NTDLL.@) + * ZwSetLdtEntries (NTDLL.@) + */ +NTSTATUS WINAPI NtSetLdtEntries( ULONG sel1, LDT_ENTRY entry1, ULONG sel2, LDT_ENTRY entry2 ) +{ + return STATUS_NOT_IMPLEMENTED; +} + +/********************************************************************** * DbgBreakPoint (NTDLL.@) */ __ASM_STDCALL_FUNC( DbgBreakPoint, 0, "int $3; ret") diff -Nru wine-development-5.5/dlls/ntdll/sync.c wine-development-5.6/dlls/ntdll/sync.c --- wine-development-5.5/dlls/ntdll/sync.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/sync.c 2020-04-10 18:54:32.000000000 +0000 @@ -1025,8 +1025,15 @@ } SERVER_END_REQ; - /* convert from absolute into relative time */ - NtQuerySystemTime(&now); + /* convert into relative time */ + if (basic_info->RemainingTime.QuadPart > 0) + NtQuerySystemTime(&now); + else + { + RtlQueryPerformanceCounter(&now); + basic_info->RemainingTime.QuadPart = -basic_info->RemainingTime.QuadPart; + } + if (now.QuadPart > basic_info->RemainingTime.QuadPart) basic_info->RemainingTime.QuadPart = 0; else @@ -2456,7 +2463,7 @@ obj_handle_t apc_handle = 0; apc_call_t call; apc_result_t result; - timeout_t abs_timeout = timeout ? timeout->QuadPart : TIMEOUT_INFINITE; + abstime_t abs_timeout = timeout ? timeout->QuadPart : TIMEOUT_INFINITE; sigset_t old_set; if (size != 1 && size != 2 && size != 4 && size != 8) @@ -2471,6 +2478,14 @@ memset( &result, 0, sizeof(result) ); + if (abs_timeout < 0) + { + LARGE_INTEGER now; + + RtlQueryPerformanceCounter(&now); + abs_timeout -= now.QuadPart; + } + do { RtlEnterCriticalSection( &addr_section ); @@ -2492,7 +2507,6 @@ wine_server_add_data( req, &result, sizeof(result) ); wine_server_add_data( req, &select_op, sizeof(select_op.keyed_event) ); ret = server_call_unlocked( req ); - abs_timeout = reply->timeout; apc_handle = reply->apc_handle; call = reply->call; } diff -Nru wine-development-5.5/dlls/ntdll/tests/env.c wine-development-5.6/dlls/ntdll/tests/env.c --- wine-development-5.5/dlls/ntdll/tests/env.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/tests/env.c 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Unit test suite for ntdll path functions + * Unit test suite for ntdll env functions * * Copyright 2003 Eric Pouech * diff -Nru wine-development-5.5/dlls/ntdll/tests/exception.c wine-development-5.6/dlls/ntdll/tests/exception.c --- wine-development-5.5/dlls/ntdll/tests/exception.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/tests/exception.c 2020-04-10 18:54:32.000000000 +0000 @@ -3410,21 +3410,20 @@ static void test_unload_trace(void) { static const WCHAR imageW[] = {'m','s','x','m','l','3','.','d','l','l',0}; - RTL_UNLOAD_EVENT_TRACE *unload_trace, *ptr; + RTL_UNLOAD_EVENT_TRACE *unload_trace, **unload_trace_ex = NULL, *ptr; ULONG *element_size, *element_count, size; - BOOL found = FALSE; HMODULE hmod; + BOOL found; unload_trace = pRtlGetUnloadEventTrace(); ok(unload_trace != NULL, "Failed to get unload events pointer.\n"); if (pRtlGetUnloadEventTraceEx) { - ptr = NULL; - pRtlGetUnloadEventTraceEx(&element_size, &element_count, (void **)&ptr); + pRtlGetUnloadEventTraceEx(&element_size, &element_count, (void **)&unload_trace_ex); ok(*element_size >= sizeof(*ptr), "Unexpected element size.\n"); ok(*element_count == RTL_UNLOAD_EVENT_TRACE_NUMBER, "Unexpected trace element count %u.\n", *element_count); - ok(ptr != NULL, "Unexpected pointer %p.\n", ptr); + ok(unload_trace_ex != NULL, "Unexpected pointer %p.\n", unload_trace_ex); size = *element_size; } else @@ -3434,6 +3433,7 @@ ok(hmod != NULL, "Failed to load library.\n"); FreeLibrary(hmod); + found = FALSE; ptr = unload_trace; while (ptr->BaseAddress != NULL) { @@ -3445,6 +3445,22 @@ ptr = (RTL_UNLOAD_EVENT_TRACE *)((char *)ptr + size); } ok(found, "Unloaded module wasn't found.\n"); + + if (unload_trace_ex) + { + found = FALSE; + ptr = *unload_trace_ex; + while (ptr->BaseAddress != NULL) + { + if (!lstrcmpW(imageW, ptr->ImageName)) + { + found = TRUE; + break; + } + ptr = (RTL_UNLOAD_EVENT_TRACE *)((char *)ptr + size); + } + ok(found, "Unloaded module wasn't found.\n"); + } } START_TEST(exception) diff -Nru wine-development-5.5/dlls/ntdll/tests/file.c wine-development-5.6/dlls/ntdll/tests/file.c --- wine-development-5.5/dlls/ntdll/tests/file.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/tests/file.c 2020-04-10 18:54:32.000000000 +0000 @@ -3900,8 +3900,6 @@ ffvi = (FILE_FS_VOLUME_INFORMATION *)buf; -todo_wine -{ ok(status == STATUS_SUCCESS, "expected STATUS_SUCCESS, got %d\n", status); ok(U(io).Status == STATUS_SUCCESS, "expected STATUS_SUCCESS, got %d\n", U(io).Status); @@ -3909,10 +3907,9 @@ "expected %d, got %lu\n", (FIELD_OFFSET(FILE_FS_VOLUME_INFORMATION, VolumeLabel) + ffvi->VolumeLabelLength), io.Information); - ok(ffvi->VolumeCreationTime.QuadPart != 0, "Missing VolumeCreationTime\n"); + todo_wine ok(ffvi->VolumeCreationTime.QuadPart != 0, "Missing VolumeCreationTime\n"); ok(ffvi->VolumeSerialNumber != 0, "Missing VolumeSerialNumber\n"); ok(ffvi->SupportsObjects == 1,"expected 1, got %d\n", ffvi->SupportsObjects); -} ok(ffvi->VolumeLabelLength == lstrlenW(ffvi->VolumeLabel) * sizeof(WCHAR), "got %d\n", ffvi->VolumeLabelLength); trace("VolumeSerialNumber: %x VolumeLabelName: %s\n", ffvi->VolumeSerialNumber, wine_dbgstr_w(ffvi->VolumeLabel)); diff -Nru wine-development-5.5/dlls/ntdll/tests/ntdll_test.h wine-development-5.6/dlls/ntdll/tests/ntdll_test.h --- wine-development-5.5/dlls/ntdll/tests/ntdll_test.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/tests/ntdll_test.h 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Unit test suite for ntdll path functions + * Unit test suite for ntdll functions * * Copyright 2003 Eric Pouech * diff -Nru wine-development-5.5/dlls/ntdll/thread.c wine-development-5.6/dlls/ntdll/thread.c --- wine-development-5.5/dlls/ntdll/thread.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/thread.c 2020-04-10 18:54:32.000000000 +0000 @@ -980,80 +980,10 @@ } } return status; + case ThreadDescriptorTableEntry: - { -#ifdef __i386__ - THREAD_DESCRIPTOR_INFORMATION* tdi = data; - if (length < sizeof(*tdi)) - status = STATUS_INFO_LENGTH_MISMATCH; - else if (!(tdi->Selector & 4)) /* GDT selector */ - { - unsigned sel = LOWORD(tdi->Selector) & ~3; /* ignore RPL */ - status = STATUS_SUCCESS; - if (!sel) /* null selector */ - memset( &tdi->Entry, 0, sizeof(tdi->Entry) ); - else - { - tdi->Entry.BaseLow = 0; - tdi->Entry.HighWord.Bits.BaseMid = 0; - tdi->Entry.HighWord.Bits.BaseHi = 0; - tdi->Entry.LimitLow = 0xffff; - tdi->Entry.HighWord.Bits.LimitHi = 0xf; - tdi->Entry.HighWord.Bits.Dpl = 3; - tdi->Entry.HighWord.Bits.Sys = 0; - tdi->Entry.HighWord.Bits.Pres = 1; - tdi->Entry.HighWord.Bits.Granularity = 1; - tdi->Entry.HighWord.Bits.Default_Big = 1; - tdi->Entry.HighWord.Bits.Type = 0x12; - tdi->Entry.HighWord.Bits.Reserved_0 = 0; - /* it has to be one of the system GDT selectors */ - if (sel != (wine_get_ds() & ~3) && sel != (wine_get_ss() & ~3)) - { - if (sel == (wine_get_cs() & ~3)) - tdi->Entry.HighWord.Bits.Type |= 8; /* code segment */ - else if (sel == (wine_get_fs() & ~3)) - { - ULONG_PTR fs_base = (ULONG_PTR)NtCurrentTeb(); - tdi->Entry.BaseLow = fs_base & 0xffff; - tdi->Entry.HighWord.Bits.BaseMid = (fs_base >> 16) & 0xff; - tdi->Entry.HighWord.Bits.BaseHi = (fs_base >> 24) & 0xff; - tdi->Entry.LimitLow = 0x0fff; - tdi->Entry.HighWord.Bits.LimitHi = 0; - tdi->Entry.HighWord.Bits.Granularity = 0; - } - else status = STATUS_ACCESS_DENIED; - } - } - } - else - { - SERVER_START_REQ( get_selector_entry ) - { - req->handle = wine_server_obj_handle( handle ); - req->entry = LOWORD(tdi->Selector) >> 3; - status = wine_server_call( req ); - if (!status) - { - if (!(reply->flags & WINE_LDT_FLAGS_ALLOCATED)) - status = STATUS_ACCESS_VIOLATION; - else - { - wine_ldt_set_base ( &tdi->Entry, (void *)reply->base ); - wine_ldt_set_limit( &tdi->Entry, reply->limit ); - wine_ldt_set_flags( &tdi->Entry, reply->flags ); - } - } - } - SERVER_END_REQ; - } - if (status == STATUS_SUCCESS && ret_len) - /* yes, that's a bit strange, but it's the way it is */ - *ret_len = sizeof(LDT_ENTRY); -#else - status = STATUS_NOT_IMPLEMENTED; -#endif - return status; - } + return get_thread_ldt_entry( handle, data, length, ret_len ); + case ThreadAmILastThread: { SERVER_START_REQ(get_thread_info) diff -Nru wine-development-5.5/dlls/ntdll/time.c wine-development-5.6/dlls/ntdll/time.c --- wine-development-5.5/dlls/ntdll/time.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/time.c 2020-04-10 18:54:32.000000000 +0000 @@ -47,7 +47,6 @@ #include "windef.h" #include "winternl.h" #include "wine/exception.h" -#include "wine/unicode.h" #include "wine/debug.h" #include "ntdll_misc.h" @@ -662,7 +661,7 @@ const struct tz_name_map *map_a, *map_b; map_a = (const struct tz_name_map *)a; map_b = (const struct tz_name_map *)b; - return strcmpW(map_a->key_name, map_b->key_name); + return wcscmp(map_a->key_name, map_b->key_name); } static BOOL match_tz_name(const char* tz_name, @@ -684,7 +683,7 @@ if (reg_tzi->DaylightDate.wMonth) return TRUE; - strcpyW(key.key_name, reg_tzi->TimeZoneKeyName); + wcscpy(key.key_name, reg_tzi->TimeZoneKeyName); match = bsearch(&key, mapping, ARRAY_SIZE(mapping), sizeof(mapping[0]), compare_tz_key); if (!match) return TRUE; @@ -729,7 +728,7 @@ UNICODE_STRING nameW, nameDynamicW; WCHAR buf[128], yearW[16]; - sprintfW(yearW, fmtW, year); + NTDLL_swprintf(yearW, fmtW, year); attrDynamic.Length = sizeof(attrDynamic); attrDynamic.RootDirectory = 0; /* will be replaced later */ diff -Nru wine-development-5.5/dlls/ntdll/version.c wine-development-5.6/dlls/ntdll/version.c --- wine-development-5.5/dlls/ntdll/version.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ntdll/version.c 2020-04-10 18:54:32.000000000 +0000 @@ -31,7 +31,6 @@ #include "ntstatus.h" #define WIN32_NO_STATUS #include "windef.h" -#include "wine/unicode.h" #include "wine/debug.h" #include "ntdll_misc.h" #include "ddk/wdm.h" @@ -281,13 +280,13 @@ { WCHAR *p, *str = (WCHAR *)info->Data; str[info->DataLength / sizeof(WCHAR)] = 0; - p = strchrW( str, '.' ); + p = wcschr( str, '.' ); if (p) { *p++ = 0; - version->dwMinorVersion = atoiW( p ); + version->dwMinorVersion = wcstoul( p, NULL, 10 ); } - version->dwMajorVersion = atoiW( str ); + version->dwMajorVersion = wcstoul( str, NULL, 10 ); } if (version->dwMajorVersion) /* we got the main version, now fetch the other fields */ @@ -302,7 +301,7 @@ { WCHAR *str = (WCHAR *)info->Data; str[info->DataLength / sizeof(WCHAR)] = 0; - version->dwBuildNumber = atoiW( str ); + version->dwBuildNumber = wcstoul( str, NULL, 10 ); } /* get version description */ @@ -398,19 +397,19 @@ { WCHAR *p, *str = (WCHAR *)info->Data; str[info->DataLength / sizeof(WCHAR)] = 0; - p = strchrW( str, '.' ); + p = wcschr( str, '.' ); if (p) *p++ = 0; - version->dwMajorVersion = atoiW( str ); + version->dwMajorVersion = wcstoul( str, NULL, 10 ); if (p) { str = p; - p = strchrW( str, '.' ); + p = wcschr( str, '.' ); if (p) { *p++ = 0; - version->dwBuildNumber = atoiW( p ); + version->dwBuildNumber = wcstoul( p, NULL, 10 ); } - version->dwMinorVersion = atoiW( str ); + version->dwMinorVersion = wcstoul( str, NULL, 10 ); } /* build number contains version too on Win9x */ version->dwBuildNumber |= MAKEWORD( version->dwMinorVersion, version->dwMajorVersion ) << 16; @@ -458,7 +457,7 @@ for (i = 0; i < ARRAY_SIZE(version_names); i++) { - if (strcmpW( version_names[i].name, name )) continue; + if (wcscmp( version_names[i].name, name )) continue; current_version = &VersionData[version_names[i].ver]; TRACE( "got win version %s\n", debugstr_w(version_names[i].name) ); return TRUE; @@ -501,11 +500,11 @@ /* open AppDefaults\\appname key */ - if ((p = strrchrW( appname, '/' ))) appname = p + 1; - if ((p = strrchrW( appname, '\\' ))) appname = p + 1; + if ((p = wcsrchr( appname, '/' ))) appname = p + 1; + if ((p = wcsrchr( appname, '\\' ))) appname = p + 1; - strcpyW( appversion, appdefaultsW ); - strcatW( appversion, appname ); + wcscpy( appversion, appdefaultsW ); + wcscat( appversion, appname ); RtlInitUnicodeString( &nameW, appversion ); attr.RootDirectory = config_key; @@ -595,7 +594,7 @@ info->dwMinorVersion = current_version->dwMinorVersion; info->dwBuildNumber = current_version->dwBuildNumber; info->dwPlatformId = current_version->dwPlatformId; - strcpyW( info->szCSDVersion, current_version->szCSDVersion ); + wcscpy( info->szCSDVersion, current_version->szCSDVersion ); if(info->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW)) { info->wServicePackMajor = current_version->wServicePackMajor; diff -Nru wine-development-5.5/dlls/odbc32/proxyodbc.c wine-development-5.6/dlls/odbc32/proxyodbc.c --- wine-development-5.5/dlls/odbc32/proxyodbc.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/odbc32/proxyodbc.c 2020-04-10 18:54:32.000000000 +0000 @@ -38,7 +38,6 @@ #include "winbase.h" #include "winreg.h" #include "wine/debug.h" -#include "wine/library.h" #include "wine/unicode.h" #include "sql.h" @@ -493,7 +492,7 @@ case DLL_PROCESS_DETACH: if (reserved) break; - if (dmHandle) wine_dlclose(dmHandle,NULL,0); + if (dmHandle) dlclose(dmHandle); } return TRUE; @@ -512,14 +511,13 @@ static BOOL ODBC_LoadDriverManager(void) { const char *s = getenv("LIB_ODBC_DRIVER_MANAGER"); - char error[256]; #ifdef SONAME_LIBODBC if (!s || !s[0]) s = SONAME_LIBODBC; #endif if (!s || !s[0]) goto failed; - dmHandle = wine_dlopen(s, RTLD_LAZY | RTLD_GLOBAL, error, sizeof(error)); + dmHandle = dlopen( s, RTLD_LAZY | RTLD_GLOBAL ); if (dmHandle != NULL) { @@ -528,7 +526,7 @@ return TRUE; } failed: - ERR_(winediag)("failed to open library %s: %s\n", debugstr_a(s), error); + ERR_(winediag)("failed to open library %s: %s\n", debugstr_a(s), dlerror()); nErrorType = ERROR_LIBRARY_NOT_FOUND; return FALSE; } @@ -546,14 +544,12 @@ static BOOL ODBC_LoadDMFunctions(void) { - char error[256]; - if (dmHandle == NULL) return FALSE; #define LOAD_FUNC(name) \ - if ((p##name = wine_dlsym( dmHandle, #name, error, sizeof(error) ))); \ - else WARN( "Failed to load %s: %s\n", #name, error ) + if ((p##name = dlsym( dmHandle, #name ))); \ + else WARN( "Failed to load %s: %s\n", #name, dlerror() ) LOAD_FUNC(SQLAllocConnect); LOAD_FUNC(SQLAllocEnv); diff -Nru wine-development-5.5/dlls/ole2disp.dll16/Makefile.in wine-development-5.6/dlls/ole2disp.dll16/Makefile.in --- wine-development-5.5/dlls/ole2disp.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ole2disp.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,4 +1,4 @@ MODULE = ole2disp.dll16 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,oleaut32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,oleaut32.dll C_SRCS = ole2disp.c diff -Nru wine-development-5.5/dlls/ole2.dll16/Makefile.in wine-development-5.6/dlls/ole2.dll16/Makefile.in --- wine-development-5.5/dlls/ole2.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ole2.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ MODULE = ole2.dll16 IMPORTS = uuid ole32 user32 gdi32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,ole32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll C_SRCS = \ memlockbytes.c \ diff -Nru wine-development-5.5/dlls/ole2nls.dll16/Makefile.in wine-development-5.6/dlls/ole2nls.dll16/Makefile.in --- wine-development-5.5/dlls/ole2nls.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ole2nls.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ MODULE = ole2nls.dll16 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,ole32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll C_SRCS = ole2nls.c diff -Nru wine-development-5.5/dlls/olecli.dll16/Makefile.in wine-development-5.6/dlls/olecli.dll16/Makefile.in --- wine-development-5.5/dlls/olecli.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/olecli.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = olecli.dll16 IMPORTS = gdi32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,olecli32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,olecli32.dll C_SRCS = olecli.c diff -Nru wine-development-5.5/dlls/olesvr.dll16/Makefile.in wine-development-5.6/dlls/olesvr.dll16/Makefile.in --- wine-development-5.5/dlls/olesvr.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/olesvr.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = olesvr.dll16 IMPORTS = gdi32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,olesvr32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,olesvr32.dll C_SRCS = olesvr.c diff -Nru wine-development-5.5/dlls/opcservices/deflate.c wine-development-5.6/dlls/opcservices/deflate.c --- wine-development-5.5/dlls/opcservices/deflate.c 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/opcservices/deflate.c 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,2974 @@ +/* deflate.c -- compress data using the deflation algorithm + * + * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * Jean-loup Gailly Mark Adler + * jloup@gzip.org madler@alumni.caltech.edu + */ + +#include +#include +#include +#include "zlib.h" + +#define DEF_MEM_LEVEL 8 +#define DEF_WBITS MAX_WBITS +#define zmemcpy memcpy +#define zmemzero(dest, len) memset(dest, 0, len) + +#define Assert(cond,msg) +#define Trace(x) +#define Tracev(x) +#define Tracevv(x) +#define Tracecv(c,x) + +#define ZALLOC(strm, items, size) \ + (*((strm)->zalloc))((strm)->opaque, (items), (size)) +#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) +#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} + +/* Reverse the bytes in a 32-bit value */ +#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ + (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) + +static const char * const z_errmsg[10] = { + (z_const char *)"need dictionary", /* Z_NEED_DICT 2 */ + (z_const char *)"stream end", /* Z_STREAM_END 1 */ + (z_const char *)"", /* Z_OK 0 */ + (z_const char *)"file error", /* Z_ERRNO (-1) */ + (z_const char *)"stream error", /* Z_STREAM_ERROR (-2) */ + (z_const char *)"data error", /* Z_DATA_ERROR (-3) */ + (z_const char *)"insufficient memory", /* Z_MEM_ERROR (-4) */ + (z_const char *)"buffer error", /* Z_BUF_ERROR (-5) */ + (z_const char *)"incompatible version",/* Z_VERSION_ERROR (-6) */ + (z_const char *)"" +}; + +#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] + +#define ERR_RETURN(strm,err) \ + return (strm->msg = ERR_MSG(err), (err)) +/* To be used only when the state is known to be valid */ + +#define STORED_BLOCK 0 +#define STATIC_TREES 1 +#define DYN_TREES 2 +/* The three kinds of block type */ + +#define MIN_MATCH 3 +#define MAX_MATCH 258 +/* The minimum and maximum match lengths */ + +#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ + +#define BASE 65521U /* largest prime smaller than 65536 */ +#define NMAX 5552 +/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ + +#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;} +#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); +#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); +#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); +#define DO16(buf) DO8(buf,0); DO8(buf,8); + +#define MOD(a) a %= BASE +#define MOD28(a) a %= BASE +#define MOD63(a) a %= BASE + +static uLong adler32( uLong adler, const Bytef *buf, uInt len ) +{ + unsigned long sum2; + unsigned n; + + /* split Adler-32 into component sums */ + sum2 = (adler >> 16) & 0xffff; + adler &= 0xffff; + + /* in case user likes doing a byte at a time, keep it fast */ + if (len == 1) { + adler += buf[0]; + if (adler >= BASE) + adler -= BASE; + sum2 += adler; + if (sum2 >= BASE) + sum2 -= BASE; + return adler | (sum2 << 16); + } + + /* initial Adler-32 value (deferred check for len == 1 speed) */ + if (buf == Z_NULL) + return 1L; + + /* in case short lengths are provided, keep it somewhat fast */ + if (len < 16) { + while (len--) { + adler += *buf++; + sum2 += adler; + } + if (adler >= BASE) + adler -= BASE; + MOD28(sum2); /* only added so many BASE's */ + return adler | (sum2 << 16); + } + + /* do length NMAX blocks -- requires just one modulo operation */ + while (len >= NMAX) { + len -= NMAX; + n = NMAX / 16; /* NMAX is divisible by 16 */ + do { + DO16(buf); /* 16 sums unrolled */ + buf += 16; + } while (--n); + MOD(adler); + MOD(sum2); + } + + /* do remaining bytes (less than NMAX, still just one modulo) */ + if (len) { /* avoid modulos if none remaining */ + while (len >= 16) { + len -= 16; + DO16(buf); + buf += 16; + } + while (len--) { + adler += *buf++; + sum2 += adler; + } + MOD(adler); + MOD(sum2); + } + + /* return recombined sums */ + return adler | (sum2 << 16); +} + +/* =========================================================================== + * Internal compression state. + */ + +#define LENGTH_CODES 29 +/* number of length codes, not counting the special END_BLOCK code */ + +#define LITERALS 256 +/* number of literal bytes 0..255 */ + +#define L_CODES (LITERALS+1+LENGTH_CODES) +/* number of Literal or Length codes, including the END_BLOCK code */ + +#define D_CODES 30 +/* number of distance codes */ + +#define BL_CODES 19 +/* number of codes used to transfer the bit lengths */ + +#define HEAP_SIZE (2*L_CODES+1) +/* maximum heap size */ + +#define MAX_BITS 15 +/* All codes must not exceed MAX_BITS bits */ + +#define Buf_size 16 +/* size of bit buffer in bi_buf */ + +#define INIT_STATE 42 /* zlib header -> BUSY_STATE */ +#ifdef GZIP +# define GZIP_STATE 57 /* gzip header -> BUSY_STATE | EXTRA_STATE */ +#endif +#define EXTRA_STATE 69 /* gzip extra block -> NAME_STATE */ +#define NAME_STATE 73 /* gzip file name -> COMMENT_STATE */ +#define COMMENT_STATE 91 /* gzip comment -> HCRC_STATE */ +#define HCRC_STATE 103 /* gzip header CRC -> BUSY_STATE */ +#define BUSY_STATE 113 /* deflate -> FINISH_STATE */ +#define FINISH_STATE 666 /* stream complete */ +/* Stream status */ + + +/* Data structure describing a single value and its code string. */ +typedef struct ct_data_s { + union { + ush freq; /* frequency count */ + ush code; /* bit string */ + } fc; + union { + ush dad; /* father node in Huffman tree */ + ush len; /* length of bit string */ + } dl; +} FAR ct_data; + +#define Freq fc.freq +#define Code fc.code +#define Dad dl.dad +#define Len dl.len + +typedef struct static_tree_desc_s static_tree_desc; + +typedef struct tree_desc_s { + ct_data *dyn_tree; /* the dynamic tree */ + int max_code; /* largest code with non zero frequency */ + const static_tree_desc *stat_desc; /* the corresponding static tree */ +} FAR tree_desc; + +typedef ush Pos; +typedef Pos FAR Posf; +typedef unsigned IPos; + +/* A Pos is an index in the character window. We use short instead of int to + * save space in the various tables. IPos is used only for parameter passing. + */ + +typedef struct internal_state { + z_streamp strm; /* pointer back to this zlib stream */ + int status; /* as the name implies */ + Bytef *pending_buf; /* output still pending */ + ulg pending_buf_size; /* size of pending_buf */ + Bytef *pending_out; /* next pending byte to output to the stream */ + ulg pending; /* nb of bytes in the pending buffer */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + gz_headerp gzhead; /* gzip header information to write */ + ulg gzindex; /* where in extra, name, or comment */ + Byte method; /* can only be DEFLATED */ + int last_flush; /* value of flush param for previous deflate call */ + + /* used by deflate.c: */ + + uInt w_size; /* LZ77 window size (32K by default) */ + uInt w_bits; /* log2(w_size) (8..16) */ + uInt w_mask; /* w_size - 1 */ + + Bytef *window; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. Also, it limits + * the window size to 64K, which is quite useful on MSDOS. + * To do: use the user input buffer as sliding window. + */ + + ulg window_size; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + Posf *prev; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + Posf *head; /* Heads of the hash chains or NIL. */ + + uInt ins_h; /* hash index of string to be inserted */ + uInt hash_size; /* number of elements in hash table */ + uInt hash_bits; /* log2(hash_size) */ + uInt hash_mask; /* hash_size-1 */ + + uInt hash_shift; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + long block_start; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + uInt match_length; /* length of best match */ + IPos prev_match; /* previous match */ + int match_available; /* set if previous match exists */ + uInt strstart; /* start of string to insert */ + uInt match_start; /* start of matching string */ + uInt lookahead; /* number of valid bytes ahead in window */ + + uInt prev_length; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + uInt max_chain_length; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + uInt max_lazy_match; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ +# define max_insert_length max_lazy_match + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + int level; /* compression level (1..9) */ + int strategy; /* favor or force Huffman coding*/ + + uInt good_match; + /* Use a faster search when the previous match is longer than this */ + + int nice_match; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + /* Didn't use ct_data typedef below to suppress compiler warning */ + struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + struct tree_desc_s l_desc; /* desc. for literal tree */ + struct tree_desc_s d_desc; /* desc. for distance tree */ + struct tree_desc_s bl_desc; /* desc. for bit length tree */ + + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + int heap_len; /* number of elements in the heap */ + int heap_max; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + uch depth[2*L_CODES+1]; + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + uchf *l_buf; /* buffer for literals or lengths */ + + uInt lit_bufsize; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + uInt last_lit; /* running index in l_buf */ + + ushf *d_buf; + /* Buffer for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + ulg opt_len; /* bit length of current block with optimal trees */ + ulg static_len; /* bit length of current block with static trees */ + uInt matches; /* number of string matches in current block */ + uInt insert; /* bytes at end of window left to insert */ + +#ifdef ZLIB_DEBUG + ulg compressed_len; /* total bit length of compressed file mod 2^32 */ + ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ +#endif + + ush bi_buf; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + int bi_valid; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + + ulg high_water; + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ + +} FAR deflate_state; + +/* Output a byte on the stream. + * IN assertion: there is enough room in pending_buf. + */ +#define put_byte(s, c) {s->pending_buf[s->pending++] = (Bytef)(c);} + + +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +/* Minimum amount of lookahead, except at the end of the input file. + * See deflate.c for comments about the MIN_MATCH+1. + */ + +#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD) +/* In order to simplify the code, particularly on 16 bit machines, match + * distances are limited to MAX_DIST instead of WSIZE. + */ + +#define WIN_INIT MAX_MATCH +/* Number of bytes after end of data in window to initialize in order to avoid + memory checker errors from longest match routines */ + + +#define MAX_BL_BITS 7 +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +#define END_BLOCK 256 +/* end of block literal code */ + +#define REP_3_6 16 +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +#define REPZ_3_10 17 +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +#define REPZ_11_138 18 +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +static const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */ + = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0}; + +static const int extra_dbits[D_CODES] /* extra bits for each distance code */ + = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + +static const int extra_blbits[BL_CODES]/* extra bits for each bit length code */ + = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7}; + +static const uch bl_order[BL_CODES] + = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +#define DIST_CODE_LEN 512 /* see definition of array dist_code below */ + +static const ct_data static_ltree[L_CODES+2] = { +{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}}, +{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}}, +{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}}, +{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}}, +{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}}, +{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}}, +{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}}, +{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}}, +{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}}, +{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}}, +{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}}, +{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}}, +{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}}, +{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}}, +{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}}, +{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}}, +{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}}, +{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}}, +{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}}, +{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}}, +{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}}, +{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}}, +{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}}, +{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}}, +{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}}, +{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}}, +{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}}, +{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}}, +{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}}, +{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}}, +{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}}, +{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}}, +{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}}, +{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}}, +{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}}, +{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}}, +{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}}, +{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}}, +{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}}, +{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}}, +{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}}, +{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}}, +{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}}, +{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}}, +{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}}, +{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}}, +{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}}, +{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}}, +{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}}, +{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}}, +{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}}, +{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}}, +{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}}, +{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}}, +{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}}, +{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}}, +{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}}, +{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}} +}; + +static const ct_data static_dtree[D_CODES] = { +{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}}, +{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}}, +{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}}, +{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}}, +{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}}, +{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} +}; + +static const uch _dist_code[DIST_CODE_LEN] = { + 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, + 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, +10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, +11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, +12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, +18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 +}; + +static const uch _length_code[MAX_MATCH-MIN_MATCH+1]= { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, +13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, +17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, +19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, +21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, +22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 +}; + +static const int base_length[LENGTH_CODES] = { +0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, +64, 80, 96, 112, 128, 160, 192, 224, 0 +}; + +static const int base_dist[D_CODES] = { + 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, + 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, + 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 +}; + + +struct static_tree_desc_s { + const ct_data *static_tree; /* static tree or NULL */ + const intf *extra_bits; /* extra bits for each code or NULL */ + int extra_base; /* base index for extra_bits */ + int elems; /* max number of elements in the tree */ + int max_length; /* max bit length for the codes */ +}; + +static const static_tree_desc static_l_desc = +{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; + +static const static_tree_desc static_d_desc = +{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; + +static const static_tree_desc static_bl_desc = +{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; + +#define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len) + /* Send a code of the given tree. c and tree must not have side effects */ + +#define d_code(dist) \ + ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) +/* Mapping from a distance to a distance code. dist is the distance - 1 and + * must not have side effects. _dist_code[256] and _dist_code[257] are never + * used. + */ + +# define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->d_buf[s->last_lit] = 0; \ + s->l_buf[s->last_lit++] = cc; \ + s->dyn_ltree[cc].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +# define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (uch)(length); \ + ush dist = (ush)(distance); \ + s->d_buf[s->last_lit] = dist; \ + s->l_buf[s->last_lit++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } + + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +#define put_short(s, w) { \ + put_byte(s, (uch)((w) & 0xff)); \ + put_byte(s, (uch)((ush)(w) >> 8)); \ +} + +#define send_bits(s, value, length) \ +{ int len = length;\ + if (s->bi_valid > (int)Buf_size - len) {\ + int val = (int)value;\ + s->bi_buf |= (ush)val << s->bi_valid;\ + put_short(s, s->bi_buf);\ + s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\ + s->bi_valid += len - Buf_size;\ + } else {\ + s->bi_buf |= (ush)(value) << s->bi_valid;\ + s->bi_valid += len;\ + }\ +} + + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +static void compress_block( deflate_state *s, const ct_data *ltree, const ct_data *dtree ) +{ + unsigned dist; /* distance of matched string */ + int lc; /* match length or unmatched char (if dist == 0) */ + unsigned lx = 0; /* running index in l_buf */ + unsigned code; /* the code to send */ + int extra; /* number of extra bits to send */ + + if (s->last_lit != 0) do { + dist = s->d_buf[lx]; + lc = s->l_buf[lx++]; + if (dist == 0) { + send_code(s, lc, ltree); /* send a literal byte */ + Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code+LITERALS+1, ltree); /* send the length code */ + extra = extra_lbits[code]; + if (extra != 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra != 0) { + dist -= (unsigned)base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, + "pendingBuf overflow"); + + } while (lx < s->last_lit); + + send_code(s, END_BLOCK, ltree); +} + +/* =========================================================================== + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * "black list" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * "gray list" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). + * IN assertion: the fields Freq of dyn_ltree are set. + */ +static int detect_data_type( deflate_state *s ) +{ + /* black_mask is the bit mask of black-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + unsigned long black_mask = 0xf3ffc07fUL; + int n; + + /* Check for non-textual ("black-listed") bytes. */ + for (n = 0; n <= 31; n++, black_mask >>= 1) + if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0)) + return Z_BINARY; + + /* Check for textual ("white-listed") bytes. */ + if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 + || s->dyn_ltree[13].Freq != 0) + return Z_TEXT; + for (n = 32; n < LITERALS; n++) + if (s->dyn_ltree[n].Freq != 0) + return Z_TEXT; + + /* There are no "black-listed" or "white-listed" bytes: + * this stream either is empty or has tolerated ("gray-listed") bytes only. + */ + return Z_BINARY; +} + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +static unsigned bi_reverse( unsigned code, int len ) +{ + register unsigned res = 0; + do { + res |= code & 1; + code >>= 1, res <<= 1; + } while (--len > 0); + return res >> 1; +} + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +static void bi_flush( deflate_state *s ) +{ + if (s->bi_valid == 16) { + put_short(s, s->bi_buf); + s->bi_buf = 0; + s->bi_valid = 0; + } else if (s->bi_valid >= 8) { + put_byte(s, (Byte)s->bi_buf); + s->bi_buf >>= 8; + s->bi_valid -= 8; + } +} + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +static void bi_windup( deflate_state *s ) +{ + if (s->bi_valid > 8) { + put_short(s, s->bi_buf); + } else if (s->bi_valid > 0) { + put_byte(s, (Byte)s->bi_buf); + } + s->bi_buf = 0; + s->bi_valid = 0; +#ifdef ZLIB_DEBUG + s->bits_sent = (s->bits_sent+7) & ~7; +#endif +} + +/* =========================================================================== + * Initialize a new block. + */ +static void init_block( deflate_state *s ) +{ + int n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; + for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; + for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; + + s->dyn_ltree[END_BLOCK].Freq = 1; + s->opt_len = s->static_len = 0L; + s->last_lit = s->matches = 0; +} + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +static void _tr_init( deflate_state *s ) +{ + s->l_desc.dyn_tree = s->dyn_ltree; + s->l_desc.stat_desc = &static_l_desc; + + s->d_desc.dyn_tree = s->dyn_dtree; + s->d_desc.stat_desc = &static_d_desc; + + s->bl_desc.dyn_tree = s->bl_tree; + s->bl_desc.stat_desc = &static_bl_desc; + + s->bi_buf = 0; + s->bi_valid = 0; +#ifdef ZLIB_DEBUG + s->compressed_len = 0L; + s->bits_sent = 0L; +#endif + + /* Initialize the first block of the first file: */ + init_block(s); +} + +#define SMALLEST 1 +/* Index within the heap array of least frequent node in the Huffman tree */ + + +/* =========================================================================== + * Remove the smallest element from the heap and recreate the heap with + * one less element. Updates heap and heap_len. + */ +#define pqremove(s, tree, top) \ +{\ + top = s->heap[SMALLEST]; \ + s->heap[SMALLEST] = s->heap[s->heap_len--]; \ + pqdownheap(s, tree, SMALLEST); \ +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +#define smaller(tree, n, m, depth) \ + (tree[n].Freq < tree[m].Freq || \ + (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m])) + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +static void pqdownheap( deflate_state *s, ct_data *tree, int k ) +{ + int v = s->heap[k]; + int j = k << 1; /* left son of k */ + while (j <= s->heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s->heap_len && + smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s->heap[j], s->depth)) break; + + /* Exchange v with the smallest son */ + s->heap[k] = s->heap[j]; k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s->heap[k] = v; +} + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +static void gen_bitlen( deflate_state *s, tree_desc *desc ) +{ + ct_data *tree = desc->dyn_tree; + int max_code = desc->max_code; + const ct_data *stree = desc->stat_desc->static_tree; + const intf *extra = desc->stat_desc->extra_bits; + int base = desc->stat_desc->extra_base; + int max_length = desc->stat_desc->max_length; + int h; /* heap index */ + int n, m; /* iterate over the tree elements */ + int bits; /* bit length */ + int xbits; /* extra bits */ + ush f; /* frequency */ + int overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0; + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ + + for (h = s->heap_max+1; h < HEAP_SIZE; h++) { + n = s->heap[h]; + bits = tree[tree[n].Dad].Len + 1; + if (bits > max_length) bits = max_length, overflow++; + tree[n].Len = (ush)bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) continue; /* not a leaf node */ + + s->bl_count[bits]++; + xbits = 0; + if (n >= base) xbits = extra[n-base]; + f = tree[n].Freq; + s->opt_len += (ulg)f * (unsigned)(bits + xbits); + if (stree) s->static_len += (ulg)f * (unsigned)(stree[n].Len + xbits); + } + if (overflow == 0) return; + + Tracev((stderr,"\nbit length overflow\n")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length-1; + while (s->bl_count[bits] == 0) bits--; + s->bl_count[bits]--; /* move one leaf down the tree */ + s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ + s->bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits != 0; bits--) { + n = s->bl_count[bits]; + while (n != 0) { + m = s->heap[--h]; + if (m > max_code) continue; + if ((unsigned) tree[m].Len != (unsigned) bits) { + Tracev((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s->opt_len += ((ulg)bits - tree[m].Len) * tree[m].Freq; + tree[m].Len = (ush)bits; + } + n--; + } + } +} + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +static void gen_codes( ct_data *tree, int max_code, ushf *bl_count ) +{ + ush next_code[MAX_BITS+1]; /* next code value for each bit length */ + unsigned code = 0; /* running code value */ + int bits; /* bit index */ + int n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + code = (code + bl_count[bits-1]) << 1; + next_code[bits] = (ush)code; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + Assert (code + bl_count[MAX_BITS]-1 == (1<dyn_tree; + const ct_data *stree = desc->stat_desc->static_tree; + int elems = desc->stat_desc->elems; + int n, m; /* iterate over heap elements */ + int max_code = -1; /* largest code with non zero frequency */ + int node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + s->heap_len = 0, s->heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n].Freq != 0) { + s->heap[++(s->heap_len)] = max_code = n; + s->depth[n] = 0; + } else { + tree[n].Len = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s->heap_len < 2) { + node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0); + tree[node].Freq = 1; + s->depth[node] = 0; + s->opt_len--; if (stree) s->static_len -= stree[node].Len; + /* node is 0 or 1 so it does not have extra bits */ + } + desc->max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + pqremove(s, tree, n); /* n = node of least frequency */ + m = s->heap[SMALLEST]; /* m = node of next least frequency */ + + s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */ + s->heap[--(s->heap_max)] = m; + + /* Create a new node father of n and m */ + tree[node].Freq = tree[n].Freq + tree[m].Freq; + s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ? + s->depth[n] : s->depth[m]) + 1); + tree[n].Dad = tree[m].Dad = (ush)node; +#ifdef DUMP_BL_TREE + if (tree == s->bl_tree) { + fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)", + node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); + } +#endif + /* and insert the new node in the heap */ + s->heap[SMALLEST] = node++; + pqdownheap(s, tree, SMALLEST); + + } while (s->heap_len >= 2); + + s->heap[--(s->heap_max)] = s->heap[SMALLEST]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, (tree_desc *)desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes ((ct_data *)tree, max_code, s->bl_count); +} + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +static void scan_tree( deflate_state *s, ct_data *tree, int max_code ) +{ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + if (nextlen == 0) max_count = 138, min_count = 3; + tree[max_code+1].Len = (ush)0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n+1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + s->bl_tree[curlen].Freq += count; + } else if (curlen != 0) { + if (curlen != prevlen) s->bl_tree[curlen].Freq++; + s->bl_tree[REP_3_6].Freq++; + } else if (count <= 10) { + s->bl_tree[REPZ_3_10].Freq++; + } else { + s->bl_tree[REPZ_11_138].Freq++; + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +static void send_tree( deflate_state *s, ct_data *tree, int max_code ) +{ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ /* guard already set */ + if (nextlen == 0) max_count = 138, min_count = 3; + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n+1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + do { send_code(s, curlen, s->bl_tree); } while (--count != 0); + + } else if (curlen != 0) { + if (curlen != prevlen) { + send_code(s, curlen, s->bl_tree); count--; + } + Assert(count >= 3 && count <= 6, " 3_6?"); + send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); + + } else { + send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +static int build_bl_tree( deflate_state *s ) +{ + int max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code); + scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, (tree_desc *)(&(s->bl_desc))); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) { + if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; + } + /* Update opt_len to include the bit length tree and counts */ + s->opt_len += 3*((ulg)max_blindex+1) + 5+5+4; + Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + s->opt_len, s->static_len)); + + return max_blindex; +} + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +static void send_all_trees( deflate_state *s, int lcodes, int dcodes, int blcodes ) +{ + int rank; /* index in bl_order */ + + Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + "too many codes"); + Tracev((stderr, "\nbl counts: ")); + send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes-1, 5); + send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); + } + Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ + Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ + Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +} + +/* =========================================================================== + * Send a stored block + */ +static void _tr_stored_block( deflate_state *s, charf *buf, ulg stored_len, int last ) +{ + send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */ + bi_windup(s); /* align on byte boundary */ + put_short(s, (ush)stored_len); + put_short(s, (ush)~stored_len); + zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len); + s->pending += stored_len; +#ifdef ZLIB_DEBUG + s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; + s->compressed_len += (stored_len + 4) << 3; + s->bits_sent += 2*16; + s->bits_sent += stored_len<<3; +#endif +} + +/* =========================================================================== + * Flush the bits in the bit buffer to pending output (leaves at most 7 bits) + */ +static void _tr_flush_bits( deflate_state *s ) +{ + bi_flush(s); +} + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + */ +static void _tr_align( deflate_state *s ) +{ + send_bits(s, STATIC_TREES<<1, 3); + send_code(s, END_BLOCK, static_ltree); +#ifdef ZLIB_DEBUG + s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ +#endif + bi_flush(s); +} + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and write out the encoded block. + */ +static void _tr_flush_block( deflate_state *s, charf *buf, ulg stored_len, int last ) +{ + ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + int max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s->level > 0) { + + /* Check if the file is binary or text */ + if (s->strm->data_type == Z_UNKNOWN) + s->strm->data_type = detect_data_type(s); + + /* Construct the literal and distance trees */ + build_tree(s, (tree_desc *)(&(s->l_desc))); + Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + + build_tree(s, (tree_desc *)(&(s->d_desc))); + Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ + opt_lenb = (s->opt_len+3+7)>>3; + static_lenb = (s->static_len+3+7)>>3; + + Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + s->last_lit)); + + if (static_lenb <= opt_lenb) opt_lenb = static_lenb; + + } else { + Assert(buf != (char*)0, "lost buf"); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + +#ifdef FORCE_STORED + if (buf != (char*)0) { /* force stored block */ +#else + if (stored_len+4 <= opt_lenb && buf != (char*)0) { + /* 4: two words for the lengths */ +#endif + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, last); + +#ifdef FORCE_STATIC + } else if (static_lenb >= 0) { /* force static trees */ +#else + } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) { +#endif + send_bits(s, (STATIC_TREES<<1)+last, 3); + compress_block(s, (const ct_data *)static_ltree, + (const ct_data *)static_dtree); +#ifdef ZLIB_DEBUG + s->compressed_len += 3 + s->static_len; +#endif + } else { + send_bits(s, (DYN_TREES<<1)+last, 3); + send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, + max_blindex+1); + compress_block(s, (const ct_data *)s->dyn_ltree, + (const ct_data *)s->dyn_dtree); +#ifdef ZLIB_DEBUG + s->compressed_len += 3 + s->opt_len; +#endif + } + Assert (s->compressed_len == s->bits_sent, "bad compressed size"); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (last) { + bi_windup(s); +#ifdef ZLIB_DEBUG + s->compressed_len += 7; /* align on byte boundary */ +#endif + } + Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, + s->compressed_len-7*last)); +} + +const char deflate_copyright[] = + " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* =========================================================================== + * Function prototypes. + */ +typedef enum { + need_more, /* block not completed, need more input or more output */ + block_done, /* block flush performed */ + finish_started, /* finish started, need only more output at next deflate */ + finish_done /* finish done, accept no more input or output */ +} block_state; + +typedef block_state (*compress_func)(deflate_state *s, int flush); +/* Compression function. Returns the block state after the call. */ + +static int deflateReset(z_streamp strm); +static block_state deflate_stored(deflate_state *s, int flush); +static block_state deflate_fast(deflate_state *s, int flush); +static block_state deflate_slow(deflate_state *s, int flush); +static block_state deflate_rle(deflate_state *s, int flush); +static block_state deflate_huff(deflate_state *s, int flush); +static void lm_init(deflate_state *s); + +/* =========================================================================== + * Local data + */ + +#define NIL 0 +/* Tail of hash chains */ + +#ifndef TOO_FAR +# define TOO_FAR 4096 +#endif +/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +typedef struct config_s { + ush good_length; /* reduce lazy search above this match length */ + ush max_lazy; /* do not perform lazy search above this match length */ + ush nice_length; /* quit search above this match length */ + ush max_chain; + compress_func func; +} config; + +static const config configuration_table[10] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}, /* max speed, no lazy matches */ +/* 2 */ {4, 5, 16, 8, deflate_fast}, +/* 3 */ {4, 6, 32, 32, deflate_fast}, + +/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */ +/* 5 */ {8, 16, 32, 32, deflate_slow}, +/* 6 */ {8, 16, 128, 128, deflate_slow}, +/* 7 */ {8, 32, 128, 256, deflate_slow}, +/* 8 */ {32, 128, 258, 1024, deflate_slow}, +/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */ + +/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 + * For deflate_fast() (levels <= 3) good is ignored and lazy has a different + * meaning. + */ + +/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */ +#define RANK(f) (((f) * 2) - ((f) > 4 ? 9 : 0)) + +/* =========================================================================== + * Update a hash value with the given input byte + * IN assertion: all calls to UPDATE_HASH are made with consecutive input + * characters, so that a running hash key can be computed from the previous + * key instead of complete recalculation each time. + */ +#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) + + +/* =========================================================================== + * Insert string str in the dictionary and set match_head to the previous head + * of the hash chain (the most recent string with same hash key). Return + * the previous length of the hash chain. + * If this file is compiled with -DFASTEST, the compression level is forced + * to 1, and no hash chains are maintained. + * IN assertion: all calls to INSERT_STRING are made with consecutive input + * characters and the first MIN_MATCH bytes of str are valid (except for + * the last MIN_MATCH-1 bytes of the input file). + */ +#ifdef FASTEST +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#else +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#endif + +/* =========================================================================== + * Initialize the hash table (avoiding 64K overflow for 16 bit systems). + * prev[] will be initialized on the fly. + */ +#define CLEAR_HASH(s) \ + s->head[s->hash_size-1] = NIL; \ + zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); + +/* =========================================================================== + * Slide the hash table when sliding the window down (could be avoided with 32 + * bit values at the expense of memory usage). We slide even when level == 0 to + * keep the hash table consistent if we switch back to level > 0 later. + */ +static void slide_hash( deflate_state *s ) +{ + unsigned n, m; + Posf *p; + uInt wsize = s->w_size; + + n = s->hash_size; + p = &s->head[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m - wsize : NIL); + } while (--n); + n = wsize; +#ifndef FASTEST + p = &s->prev[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m - wsize : NIL); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); +#endif +} + +/* ========================================================================= */ +int deflateInit( z_streamp strm, int level ) +{ + return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); + /* To do: ignore strm->next_in if we use it as window */ +} + +/* ========================================================================= */ +int deflateInit2( z_streamp strm, int level, int method, int windowBits, int memLevel, int strategy ) +{ + deflate_state *s; + int wrap = 1; + ushf *overlay; + /* We overlay pending_buf and d_buf+l_buf. This works since the average + * output size for (length,distance) codes is <= 24 bits. + */ + + strm->msg = Z_NULL; +#ifdef FASTEST + if (level != 0) level = 1; +#else + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#endif + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } +#ifdef GZIP + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } +#endif + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_FIXED || (windowBits == 8 && wrap != 1)) { + return Z_STREAM_ERROR; + } + if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */ + s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state)); + if (s == Z_NULL) return Z_MEM_ERROR; + strm->state = (struct internal_state FAR *)s; + s->strm = strm; + s->status = INIT_STATE; /* to pass state test in deflateReset() */ + + s->wrap = wrap; + s->gzhead = Z_NULL; + s->w_bits = (uInt)windowBits; + s->w_size = 1 << s->w_bits; + s->w_mask = s->w_size - 1; + + s->hash_bits = (uInt)memLevel + 7; + s->hash_size = 1 << s->hash_bits; + s->hash_mask = s->hash_size - 1; + s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); + + s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); + s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); + s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); + + s->high_water = 0; /* nothing written to s->window yet */ + + s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + s->pending_buf = (uchf *) overlay; + s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); + + if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || + s->pending_buf == Z_NULL) { + s->status = FINISH_STATE; + strm->msg = ERR_MSG(Z_MEM_ERROR); + deflateEnd (strm); + return Z_MEM_ERROR; + } + s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + + s->level = level; + s->strategy = strategy; + s->method = (Byte)method; + + return deflateReset(strm); +} + +/* ========================================================================= + * Check for a valid deflate stream state. Return 0 if ok, 1 if not. + */ +static int deflateStateCheck( z_streamp strm ) +{ + deflate_state *s; + if (strm == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) + return 1; + s = strm->state; + if (s == Z_NULL || s->strm != strm || (s->status != INIT_STATE && +#ifdef GZIP + s->status != GZIP_STATE && +#endif + s->status != EXTRA_STATE && + s->status != NAME_STATE && + s->status != COMMENT_STATE && + s->status != HCRC_STATE && + s->status != BUSY_STATE && + s->status != FINISH_STATE)) + return 1; + return 0; +} + +/* ========================================================================= */ +static int deflateResetKeep( z_streamp strm ) +{ + deflate_state *s; + + if (deflateStateCheck(strm)) { + return Z_STREAM_ERROR; + } + + strm->total_in = strm->total_out = 0; + strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */ + strm->data_type = Z_UNKNOWN; + + s = (deflate_state *)strm->state; + s->pending = 0; + s->pending_out = s->pending_buf; + + if (s->wrap < 0) { + s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */ + } + s->status = +#ifdef GZIP + s->wrap == 2 ? GZIP_STATE : +#endif + s->wrap ? INIT_STATE : BUSY_STATE; + strm->adler = +#ifdef GZIP + s->wrap == 2 ? crc32(0L, Z_NULL, 0) : +#endif + adler32(0L, Z_NULL, 0); + s->last_flush = Z_NO_FLUSH; + + _tr_init(s); + + return Z_OK; +} + +/* ========================================================================= */ +static int deflateReset( z_streamp strm ) +{ + int ret; + + ret = deflateResetKeep(strm); + if (ret == Z_OK) + lm_init(strm->state); + return ret; +} + +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +static void putShortMSB( deflate_state *s, uInt b ) +{ + put_byte(s, (Byte)(b >> 8)); + put_byte(s, (Byte)(b & 0xff)); +} + +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output, except for + * some deflate_stored() output, goes through this function so some + * applications may wish to modify it to avoid allocating a large + * strm->next_out buffer and copying into it. (See also read_buf()). + */ +static void flush_pending( z_streamp strm ) +{ + unsigned len; + deflate_state *s = strm->state; + + _tr_flush_bits(s); + len = s->pending; + if (len > strm->avail_out) len = strm->avail_out; + if (len == 0) return; + + zmemcpy(strm->next_out, s->pending_out, len); + strm->next_out += len; + s->pending_out += len; + strm->total_out += len; + strm->avail_out -= len; + s->pending -= len; + if (s->pending == 0) { + s->pending_out = s->pending_buf; + } +} + +/* =========================================================================== + * Update the header CRC with the bytes s->pending_buf[beg..s->pending - 1]. + */ +#define HCRC_UPDATE(beg) \ + do { \ + if (s->gzhead->hcrc && s->pending > (beg)) \ + strm->adler = crc32(strm->adler, s->pending_buf + (beg), \ + s->pending - (beg)); \ + } while (0) + +/* ========================================================================= */ +int deflate( z_streamp strm, int flush ) +{ + int old_flush; /* value of flush param for previous deflate call */ + deflate_state *s; + + if (deflateStateCheck(strm) || flush > Z_BLOCK || flush < 0) { + return Z_STREAM_ERROR; + } + s = strm->state; + + if (strm->next_out == Z_NULL || + (strm->avail_in != 0 && strm->next_in == Z_NULL) || + (s->status == FINISH_STATE && flush != Z_FINISH)) { + ERR_RETURN(strm, Z_STREAM_ERROR); + } + if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR); + + old_flush = s->last_flush; + s->last_flush = flush; + + /* Flush as much pending output as possible */ + if (s->pending != 0) { + flush_pending(strm); + if (strm->avail_out == 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s->last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) && + flush != Z_FINISH) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s->status == FINISH_STATE && strm->avail_in != 0) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* Write the header */ + if (s->status == INIT_STATE) { + /* zlib header */ + uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; + uInt level_flags; + + if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) + level_flags = 0; + else if (s->level < 6) + level_flags = 1; + else if (s->level == 6) + level_flags = 2; + else + level_flags = 3; + header |= (level_flags << 6); + if (s->strstart != 0) header |= PRESET_DICT; + header += 31 - (header % 31); + + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s->strstart != 0) { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + strm->adler = adler32(0L, Z_NULL, 0); + s->status = BUSY_STATE; + + /* Compression must start with an empty pending buffer */ + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + } +#ifdef GZIP + if (s->status == GZIP_STATE) { + /* gzip header */ + strm->adler = crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (s->gzhead == Z_NULL) { + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); + s->status = BUSY_STATE; + + /* Compression must start with an empty pending buffer */ + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + } + else { + put_byte(s, (s->gzhead->text ? 1 : 0) + + (s->gzhead->hcrc ? 2 : 0) + + (s->gzhead->extra == Z_NULL ? 0 : 4) + + (s->gzhead->name == Z_NULL ? 0 : 8) + + (s->gzhead->comment == Z_NULL ? 0 : 16) + ); + put_byte(s, (Byte)(s->gzhead->time & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff)); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, s->gzhead->os & 0xff); + if (s->gzhead->extra != Z_NULL) { + put_byte(s, s->gzhead->extra_len & 0xff); + put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); + } + if (s->gzhead->hcrc) + strm->adler = crc32(strm->adler, s->pending_buf, + s->pending); + s->gzindex = 0; + s->status = EXTRA_STATE; + } + } + if (s->status == EXTRA_STATE) { + if (s->gzhead->extra != Z_NULL) { + ulg beg = s->pending; /* start of bytes to update crc */ + uInt left = (s->gzhead->extra_len & 0xffff) - s->gzindex; + while (s->pending + left > s->pending_buf_size) { + uInt copy = s->pending_buf_size - s->pending; + zmemcpy(s->pending_buf + s->pending, + s->gzhead->extra + s->gzindex, copy); + s->pending = s->pending_buf_size; + HCRC_UPDATE(beg); + s->gzindex += copy; + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + beg = 0; + left -= copy; + } + zmemcpy(s->pending_buf + s->pending, + s->gzhead->extra + s->gzindex, left); + s->pending += left; + HCRC_UPDATE(beg); + s->gzindex = 0; + } + s->status = NAME_STATE; + } + if (s->status == NAME_STATE) { + if (s->gzhead->name != Z_NULL) { + ulg beg = s->pending; /* start of bytes to update crc */ + int val; + do { + if (s->pending == s->pending_buf_size) { + HCRC_UPDATE(beg); + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + beg = 0; + } + val = s->gzhead->name[s->gzindex++]; + put_byte(s, val); + } while (val != 0); + HCRC_UPDATE(beg); + s->gzindex = 0; + } + s->status = COMMENT_STATE; + } + if (s->status == COMMENT_STATE) { + if (s->gzhead->comment != Z_NULL) { + ulg beg = s->pending; /* start of bytes to update crc */ + int val; + do { + if (s->pending == s->pending_buf_size) { + HCRC_UPDATE(beg); + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + beg = 0; + } + val = s->gzhead->comment[s->gzindex++]; + put_byte(s, val); + } while (val != 0); + HCRC_UPDATE(beg); + } + s->status = HCRC_STATE; + } + if (s->status == HCRC_STATE) { + if (s->gzhead->hcrc) { + if (s->pending + 2 > s->pending_buf_size) { + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + } + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + strm->adler = crc32(0L, Z_NULL, 0); + } + s->status = BUSY_STATE; + + /* Compression must start with an empty pending buffer */ + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + } +#endif + + /* Start a new block or continue the current one. + */ + if (strm->avail_in != 0 || s->lookahead != 0 || + (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { + block_state bstate; + + bstate = s->level == 0 ? deflate_stored(s, flush) : + s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : + s->strategy == Z_RLE ? deflate_rle(s, flush) : + (*(configuration_table[s->level].func))(s, flush); + + if (bstate == finish_started || bstate == finish_done) { + s->status = FINISH_STATE; + } + if (bstate == need_more || bstate == finish_started) { + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate == block_done) { + if (flush == Z_PARTIAL_FLUSH) { + _tr_align(s); + } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ + _tr_stored_block(s, (char*)0, 0L, 0); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush == Z_FULL_FLUSH) { + CLEAR_HASH(s); /* forget history */ + if (s->lookahead == 0) { + s->strstart = 0; + s->block_start = 0L; + s->insert = 0; + } + } + } + flush_pending(strm); + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + + if (flush != Z_FINISH) return Z_OK; + if (s->wrap <= 0) return Z_STREAM_END; + + /* Write the trailer */ +#ifdef GZIP + if (s->wrap == 2) { + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 16) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 24) & 0xff)); + put_byte(s, (Byte)(strm->total_in & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 8) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 16) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 24) & 0xff)); + } + else +#endif + { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */ + return s->pending != 0 ? Z_OK : Z_STREAM_END; +} + +/* ========================================================================= */ +int deflateEnd( z_streamp strm ) +{ + int status; + + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; + + status = strm->state->status; + + /* Deallocate in reverse order of allocations: */ + TRY_FREE(strm, strm->state->pending_buf); + TRY_FREE(strm, strm->state->head); + TRY_FREE(strm, strm->state->prev); + TRY_FREE(strm, strm->state->window); + + ZFREE(strm, strm->state); + strm->state = Z_NULL; + + return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; +} + +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->next_in buffer and copying from it. + * (See also flush_pending()). + */ +static unsigned read_buf( z_streamp strm, Bytef *buf, unsigned size ) +{ + unsigned len = strm->avail_in; + + if (len > size) len = size; + if (len == 0) return 0; + + strm->avail_in -= len; + + zmemcpy(buf, strm->next_in, len); + if (strm->state->wrap == 1) { + strm->adler = adler32(strm->adler, buf, len); + } +#ifdef GZIP + else if (strm->state->wrap == 2) { + strm->adler = crc32(strm->adler, buf, len); + } +#endif + strm->next_in += len; + strm->total_in += len; + + return len; +} + +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +static void lm_init( deflate_state *s ) +{ + s->window_size = (ulg)2L*s->w_size; + + CLEAR_HASH(s); + + /* Set the default configuration parameters: + */ + s->max_lazy_match = configuration_table[s->level].max_lazy; + s->good_match = configuration_table[s->level].good_length; + s->nice_match = configuration_table[s->level].nice_length; + s->max_chain_length = configuration_table[s->level].max_chain; + + s->strstart = 0; + s->block_start = 0L; + s->lookahead = 0; + s->insert = 0; + s->match_length = s->prev_length = MIN_MATCH-1; + s->match_available = 0; + s->ins_h = 0; +} + +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +static uInt longest_match( deflate_state *s, IPos cur_match ) +{ + unsigned chain_length = s->max_chain_length;/* max hash chain length */ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + int best_len = (int)s->prev_length; /* best match length so far */ + int nice_match = s->nice_match; /* stop if match long enough */ + IPos limit = s->strstart > (IPos)MAX_DIST(s) ? + s->strstart - (IPos)MAX_DIST(s) : NIL; + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + Posf *prev = s->prev; + uInt wmask = s->w_mask; + +#ifdef UNALIGNED_OK + /* Compare two bytes at a time. Note: this is not always beneficial. + * Try with and without -DUNALIGNED_OK to check. + */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; + register ush scan_start = *(ushf*)scan; + register ush scan_end = *(ushf*)(scan+best_len-1); +#else + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + register Byte scan_end1 = scan[best_len-1]; + register Byte scan_end = scan[best_len]; +#endif + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + if (s->prev_length >= s->good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if ((uInt)nice_match > s->lookahead) nice_match = (int)s->lookahead; + + Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + do { + Assert(cur_match < s->strstart, "no future"); + match = s->window + cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2. Note that the checks below + * for insufficient lookahead only occur occasionally for performance + * reasons. Therefore uninitialized memory will be accessed, and + * conditional jumps will be made that depend on those values. + * However the length of the match is limited to the lookahead, so + * the output of deflate is not affected by the uninitialized values. + */ +#if (defined(UNALIGNED_OK) && MAX_MATCH == 258) + /* This code assumes sizeof(unsigned short) == 2. Do not use + * UNALIGNED_OK if your compiler uses a different size. + */ + if (*(ushf*)(match+best_len-1) != scan_end || + *(ushf*)match != scan_start) continue; + + /* It is not necessary to compare scan[2] and match[2] since they are + * always equal when the other bytes match, given that the hash keys + * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at + * strstart+3, +5, ... up to strstart+257. We check for insufficient + * lookahead only every 4th comparison; the 128th check will be made + * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is + * necessary to put more guard bytes at the end of the window, or + * to check more often for insufficient lookahead. + */ + Assert(scan[2] == match[2], "scan[2]?"); + scan++, match++; + do { + } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + scan < strend); + /* The funny "do {}" generates better code on most compilers */ + + /* Here, scan <= window+strstart+257 */ + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + if (*scan == *match) scan++; + + len = (MAX_MATCH - 1) - (int)(strend-scan); + scan = strend - (MAX_MATCH-1); + +#else /* UNALIGNED_OK */ + + if (match[best_len] != scan_end || + match[best_len-1] != scan_end1 || + *match != *scan || + *++match != scan[1]) continue; + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match++; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + scan = strend - MAX_MATCH; + +#endif /* UNALIGNED_OK */ + + if (len > best_len) { + s->match_start = cur_match; + best_len = len; + if (len >= nice_match) break; +#ifdef UNALIGNED_OK + scan_end = *(ushf*)(scan+best_len-1); +#else + scan_end1 = scan[best_len-1]; + scan_end = scan[best_len]; +#endif + } + } while ((cur_match = prev[cur_match & wmask]) > limit + && --chain_length != 0); + + if ((uInt)best_len <= s->lookahead) return (uInt)best_len; + return s->lookahead; +} + +#define check_match(s, start, match, length) + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +static void fill_window( deflate_state *s ) +{ + unsigned n; + unsigned more; /* Amount of free space at the end of the window. */ + uInt wsize = s->w_size; + + Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); + + do { + more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); + + /* Deal with !@#$% 64K limit: */ + if (sizeof(int) <= 2) { + if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + more = wsize; + + } else if (more == (unsigned)(-1)) { + /* Very unlikely, but possible on 16 bit machine if + * strstart == 0 && lookahead == 1 (input done a byte at time) + */ + more--; + } + } + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s->strstart >= wsize+MAX_DIST(s)) { + + zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more); + s->match_start -= wsize; + s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ + s->block_start -= (long) wsize; + slide_hash(s); + more += wsize; + } + if (s->strm->avail_in == 0) break; + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + Assert(more >= 2, "more < 2"); + + n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); + s->lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s->lookahead + s->insert >= MIN_MATCH) { + uInt str = s->strstart - s->insert; + s->ins_h = s->window[str]; + UPDATE_HASH(s, s->ins_h, s->window[str + 1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + while (s->insert) { + UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); +#ifndef FASTEST + s->prev[str & s->w_mask] = s->head[s->ins_h]; +#endif + s->head[s->ins_h] = (Pos)str; + str++; + s->insert--; + if (s->lookahead + s->insert < MIN_MATCH) + break; + } + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); + + /* If the WIN_INIT bytes after the end of the current data have never been + * written, then zero those bytes in order to avoid memory check reports of + * the use of uninitialized (or uninitialised as Julian writes) bytes by + * the longest match routines. Update the high water mark for the next + * time through here. WIN_INIT is set to MAX_MATCH since the longest match + * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + */ + if (s->high_water < s->window_size) { + ulg curr = s->strstart + (ulg)(s->lookahead); + ulg init; + + if (s->high_water < curr) { + /* Previous high water mark below current data -- zero WIN_INIT + * bytes or up to end of window, whichever is less. + */ + init = s->window_size - curr; + if (init > WIN_INIT) + init = WIN_INIT; + zmemzero(s->window + curr, (unsigned)init); + s->high_water = curr + init; + } + else if (s->high_water < (ulg)curr + WIN_INIT) { + /* High water mark at or above current data, but below current data + * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up + * to end of window, whichever is less. + */ + init = (ulg)curr + WIN_INIT - s->high_water; + if (init > s->window_size - s->high_water) + init = s->window_size - s->high_water; + zmemzero(s->window + s->high_water, (unsigned)init); + s->high_water += init; + } + } + + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "not enough room for search"); +} + +/* =========================================================================== + * Flush the current block, with given end-of-file flag. + * IN assertion: strstart is set to the end of the current match. + */ +#define FLUSH_BLOCK_ONLY(s, last) { \ + _tr_flush_block(s, (s->block_start >= 0L ? \ + (charf *)&s->window[(unsigned)s->block_start] : \ + (charf *)Z_NULL), \ + (ulg)((long)s->strstart - s->block_start), \ + (last)); \ + s->block_start = s->strstart; \ + flush_pending(s->strm); \ + Tracev((stderr,"[FLUSH]")); \ +} + +/* Same but force premature exit if necessary. */ +#define FLUSH_BLOCK(s, last) { \ + FLUSH_BLOCK_ONLY(s, last); \ + if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \ +} + +/* Maximum stored block length in deflate format (not including header). */ +#define MAX_STORED 65535 + +/* Minimum of a and b. */ +#define MIN(a, b) ((a) > (b) ? (b) : (a)) + +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * + * In case deflateParams() is used to later switch to a non-zero compression + * level, s->matches (otherwise unused when storing) keeps track of the number + * of hash table slides to perform. If s->matches is 1, then one hash table + * slide will be done when switching. If s->matches is 2, the maximum value + * allowed here, then the hash table will be cleared, since two or more slides + * is the same as a clear. + * + * deflate_stored() is written to minimize the number of times an input byte is + * copied. It is most efficient with large input and output buffers, which + * maximizes the opportunites to have a single copy from next_in to next_out. + */ +static block_state deflate_stored( deflate_state *s, int flush ) +{ + /* Smallest worthy block size when not flushing or finishing. By default + * this is 32K. This can be as small as 507 bytes for memLevel == 1. For + * large input and output buffers, the stored block size will be larger. + */ + unsigned min_block = MIN(s->pending_buf_size - 5, s->w_size); + + /* Copy as many min_block or larger stored blocks directly to next_out as + * possible. If flushing, copy the remaining available input to next_out as + * stored blocks, if there is enough space. + */ + unsigned len, left, have, last = 0; + unsigned used = s->strm->avail_in; + do { + /* Set len to the maximum size block that we can copy directly with the + * available input data and output space. Set left to how much of that + * would be copied from what's left in the window. + */ + len = MAX_STORED; /* maximum deflate stored block length */ + have = (s->bi_valid + 42) >> 3; /* number of header bytes */ + if (s->strm->avail_out < have) /* need room for header */ + break; + /* maximum stored block length that will fit in avail_out: */ + have = s->strm->avail_out - have; + left = s->strstart - s->block_start; /* bytes left in window */ + if (len > (ulg)left + s->strm->avail_in) + len = left + s->strm->avail_in; /* limit len to the input */ + if (len > have) + len = have; /* limit len to the output */ + + /* If the stored block would be less than min_block in length, or if + * unable to copy all of the available input when flushing, then try + * copying to the window and the pending buffer instead. Also don't + * write an empty block when flushing -- deflate() does that. + */ + if (len < min_block && ((len == 0 && flush != Z_FINISH) || + flush == Z_NO_FLUSH || + len != left + s->strm->avail_in)) + break; + + /* Make a dummy stored block in pending to get the header bytes, + * including any pending bits. This also updates the debugging counts. + */ + last = flush == Z_FINISH && len == left + s->strm->avail_in ? 1 : 0; + _tr_stored_block(s, (char *)0, 0L, last); + + /* Replace the lengths in the dummy stored block with len. */ + s->pending_buf[s->pending - 4] = len; + s->pending_buf[s->pending - 3] = len >> 8; + s->pending_buf[s->pending - 2] = ~len; + s->pending_buf[s->pending - 1] = ~len >> 8; + + /* Write the stored block header bytes. */ + flush_pending(s->strm); + +#ifdef ZLIB_DEBUG + /* Update debugging counts for the data about to be copied. */ + s->compressed_len += len << 3; + s->bits_sent += len << 3; +#endif + + /* Copy uncompressed bytes from the window to next_out. */ + if (left) { + if (left > len) + left = len; + zmemcpy(s->strm->next_out, s->window + s->block_start, left); + s->strm->next_out += left; + s->strm->avail_out -= left; + s->strm->total_out += left; + s->block_start += left; + len -= left; + } + + /* Copy uncompressed bytes directly from next_in to next_out, updating + * the check value. + */ + if (len) { + read_buf(s->strm, s->strm->next_out, len); + s->strm->next_out += len; + s->strm->avail_out -= len; + s->strm->total_out += len; + } + } while (last == 0); + + /* Update the sliding window with the last s->w_size bytes of the copied + * data, or append all of the copied data to the existing window if less + * than s->w_size bytes were copied. Also update the number of bytes to + * insert in the hash tables, in the event that deflateParams() switches to + * a non-zero compression level. + */ + used -= s->strm->avail_in; /* number of input bytes directly copied */ + if (used) { + /* If any input was used, then no unused input remains in the window, + * therefore s->block_start == s->strstart. + */ + if (used >= s->w_size) { /* supplant the previous history */ + s->matches = 2; /* clear hash */ + zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size); + s->strstart = s->w_size; + } + else { + if (s->window_size - s->strstart <= used) { + /* Slide the window down. */ + s->strstart -= s->w_size; + zmemcpy(s->window, s->window + s->w_size, s->strstart); + if (s->matches < 2) + s->matches++; /* add a pending slide_hash() */ + } + zmemcpy(s->window + s->strstart, s->strm->next_in - used, used); + s->strstart += used; + } + s->block_start = s->strstart; + s->insert += MIN(used, s->w_size - s->insert); + } + if (s->high_water < s->strstart) + s->high_water = s->strstart; + + /* If the last block was written to next_out, then done. */ + if (last) + return finish_done; + + /* If flushing and all input has been consumed, then done. */ + if (flush != Z_NO_FLUSH && flush != Z_FINISH && + s->strm->avail_in == 0 && (long)s->strstart == s->block_start) + return block_done; + + /* Fill the window with any remaining input. */ + have = s->window_size - s->strstart - 1; + if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) { + /* Slide the window down. */ + s->block_start -= s->w_size; + s->strstart -= s->w_size; + zmemcpy(s->window, s->window + s->w_size, s->strstart); + if (s->matches < 2) + s->matches++; /* add a pending slide_hash() */ + have += s->w_size; /* more space now */ + } + if (have > s->strm->avail_in) + have = s->strm->avail_in; + if (have) { + read_buf(s->strm, s->window + s->strstart, have); + s->strstart += have; + } + if (s->high_water < s->strstart) + s->high_water = s->strstart; + + /* There was not enough avail_out to write a complete worthy or flushed + * stored block to next_out. Write a stored block to pending instead, if we + * have enough input for a worthy block, or if flushing and there is enough + * room for the remaining input as a stored block in the pending buffer. + */ + have = (s->bi_valid + 42) >> 3; /* number of header bytes */ + /* maximum stored block length that will fit in pending: */ + have = MIN(s->pending_buf_size - have, MAX_STORED); + min_block = MIN(have, s->w_size); + left = s->strstart - s->block_start; + if (left >= min_block || + ((left || flush == Z_FINISH) && flush != Z_NO_FLUSH && + s->strm->avail_in == 0 && left <= have)) { + len = MIN(left, have); + last = flush == Z_FINISH && s->strm->avail_in == 0 && + len == left ? 1 : 0; + _tr_stored_block(s, (charf *)s->window + s->block_start, len, last); + s->block_start += len; + flush_pending(s->strm); + } + + /* We've done all we can with the available input and output. */ + return last ? finish_started : need_more; +} + +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +static block_state deflate_fast( deflate_state *s, int flush ) +{ + IPos hash_head; /* head of the hash chain */ + int bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = NIL; + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s->match_length = longest_match (s, hash_head); + /* longest_match() sets match_start */ + } + if (s->match_length >= MIN_MATCH) { + check_match(s, s->strstart, s->match_start, s->match_length); + + _tr_tally_dist(s, s->strstart - s->match_start, + s->match_length - MIN_MATCH, bflush); + + s->lookahead -= s->match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ +#ifndef FASTEST + if (s->match_length <= s->max_insert_length && + s->lookahead >= MIN_MATCH) { + s->match_length--; /* string at strstart already in table */ + do { + s->strstart++; + INSERT_STRING(s, s->strstart, hash_head); + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s->match_length != 0); + s->strstart++; + } else +#endif + { + s->strstart += s->match_length; + s->match_length = 0; + s->ins_h = s->window[s->strstart]; + UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->last_lit) + FLUSH_BLOCK(s, 0); + return block_done; +} + +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +static block_state deflate_slow( deflate_state *s, int flush ) +{ + IPos hash_head; /* head of hash chain */ + int bflush; /* set if current block must be flushed */ + + /* Process the input block. */ + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = NIL; + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + */ + s->prev_length = s->match_length, s->prev_match = s->match_start; + s->match_length = MIN_MATCH-1; + + if (hash_head != NIL && s->prev_length < s->max_lazy_match && + s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s->match_length = longest_match (s, hash_head); + /* longest_match() sets match_start */ + + if (s->match_length <= 5 && (s->strategy == Z_FILTERED +#if TOO_FAR <= 32767 + || (s->match_length == MIN_MATCH && + s->strstart - s->match_start > TOO_FAR) +#endif + )) { + + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s->match_length = MIN_MATCH-1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) { + uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + + check_match(s, s->strstart-1, s->prev_match, s->prev_length); + + _tr_tally_dist(s, s->strstart -1 - s->prev_match, + s->prev_length - MIN_MATCH, bflush); + + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + s->lookahead -= s->prev_length-1; + s->prev_length -= 2; + do { + if (++s->strstart <= max_insert) { + INSERT_STRING(s, s->strstart, hash_head); + } + } while (--s->prev_length != 0); + s->match_available = 0; + s->match_length = MIN_MATCH-1; + s->strstart++; + + if (bflush) FLUSH_BLOCK(s, 0); + + } else if (s->match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + if (bflush) { + FLUSH_BLOCK_ONLY(s, 0); + } + s->strstart++; + s->lookahead--; + if (s->strm->avail_out == 0) return need_more; + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s->match_available = 1; + s->strstart++; + s->lookahead--; + } + } + Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s->match_available) { + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + s->match_available = 0; + } + s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->last_lit) + FLUSH_BLOCK(s, 0); + return block_done; +} + +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +static block_state deflate_rle( deflate_state *s, int flush ) +{ + int bflush; /* set if current block must be flushed */ + uInt prev; /* byte at distance one to match */ + Bytef *scan, *strend; /* scan goes up to strend for length of run */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest run, plus one for the unrolled loop. + */ + if (s->lookahead <= MAX_MATCH) { + fill_window(s); + if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* See how many times the previous byte repeats */ + s->match_length = 0; + if (s->lookahead >= MIN_MATCH && s->strstart > 0) { + scan = s->window + s->strstart - 1; + prev = *scan; + if (prev == *++scan && prev == *++scan && prev == *++scan) { + strend = s->window + s->strstart + MAX_MATCH; + do { + } while (prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + scan < strend); + s->match_length = MAX_MATCH - (uInt)(strend - scan); + if (s->match_length > s->lookahead) + s->match_length = s->lookahead; + } + Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + if (s->match_length >= MIN_MATCH) { + check_match(s, s->strstart, s->strstart - 1, s->match_length); + + _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush); + + s->lookahead -= s->match_length; + s->strstart += s->match_length; + s->match_length = 0; + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + s->insert = 0; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->last_lit) + FLUSH_BLOCK(s, 0); + return block_done; +} + +/* =========================================================================== + * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. + * (It will be regenerated if this run of deflate switches away from Huffman.) + */ +static block_state deflate_huff( deflate_state *s, int flush ) +{ + int bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we have a literal to write. */ + if (s->lookahead == 0) { + fill_window(s); + if (s->lookahead == 0) { + if (flush == Z_NO_FLUSH) + return need_more; + break; /* flush the current block */ + } + } + + /* Output a literal byte */ + s->match_length = 0; + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + if (bflush) FLUSH_BLOCK(s, 0); + } + s->insert = 0; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->last_lit) + FLUSH_BLOCK(s, 0); + return block_done; +} diff -Nru wine-development-5.5/dlls/opcservices/zlib.h wine-development-5.6/dlls/opcservices/zlib.h --- wine-development-5.5/dlls/opcservices/zlib.h 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/opcservices/zlib.h 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,162 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + * version 1.2.11, January 15th, 2017 + * + * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * Jean-loup Gailly Mark Adler + * jloup@gzip.org madler@alumni.caltech.edu + */ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "windef.h" + +#undef FAR +#define FAR +#define z_const const + +typedef unsigned char Byte; /* 8 bits */ +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +typedef Byte FAR Bytef; +typedef void FAR *voidpf; + +typedef char FAR charf; +typedef int FAR intf; + +typedef unsigned char uch; +typedef uch FAR uchf; +typedef unsigned short ush; +typedef ush FAR ushf; +typedef unsigned long ulg; + +typedef voidpf (*alloc_func)(voidpf opaque, uInt items, uInt size); +typedef void (*free_func)(voidpf opaque, voidpf address); + +struct internal_state; + +typedef struct z_stream_s { + z_const Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total number of input bytes read so far */ + + Bytef *next_out; /* next output byte will go here */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total number of bytes output so far */ + + z_const char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text + for deflate, or the decoding state for inflate */ + uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +#define Z_TREES 6 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field for deflate() */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define MAX_WBITS 15 /* 32K LZ77 window */ +#define MAX_MEM_LEVEL 9 + +extern int inflateInit(z_streamp strm) DECLSPEC_HIDDEN; +extern int inflateInit2(z_streamp strm, int windowBits) DECLSPEC_HIDDEN; +extern int inflate(z_streamp strm, int flush) DECLSPEC_HIDDEN; +extern int inflateEnd(z_streamp strm) DECLSPEC_HIDDEN; + +extern int deflateInit(z_streamp strm, int level) DECLSPEC_HIDDEN; +extern int deflateInit2(z_streamp strm, int level, int method, int windowBits, int memLevel, int strategy) DECLSPEC_HIDDEN; +extern int deflate(z_streamp strm, int flush) DECLSPEC_HIDDEN; +extern int deflateEnd(z_streamp strm) DECLSPEC_HIDDEN; + +#endif /* ZLIB_H */ diff -Nru wine-development-5.5/dlls/opencl/opencl.c wine-development-5.6/dlls/opencl/opencl.c --- wine-development-5.5/dlls/opencl/opencl.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/opencl/opencl.c 2020-04-10 18:54:32.000000000 +0000 @@ -30,6 +30,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(opencl); +#define CL_SILENCE_DEPRECATION #if defined(HAVE_CL_CL_H) #define CL_USE_DEPRECATED_OPENCL_1_1_APIS #define CL_USE_DEPRECATED_OPENCL_1_2_APIS diff -Nru wine-development-5.5/dlls/qasf/asfreader.c wine-development-5.6/dlls/qasf/asfreader.c --- wine-development-5.5/dlls/qasf/asfreader.c 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/qasf/asfreader.c 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,175 @@ +/* + * WM ASF reader + * + * Copyright 2020 Jactry Zeng for CodeWeavers + * + * 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 "qasf_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(qasf); + +struct asf_reader +{ + struct strmbase_filter filter; + IFileSourceFilter IFileSourceFilter_iface; + + AM_MEDIA_TYPE type; + WCHAR *filename; +}; + +static inline struct asf_reader *impl_reader_from_strmbase_filter(struct strmbase_filter *iface) +{ + return CONTAINING_RECORD(iface, struct asf_reader, filter); +} + +static struct strmbase_pin *asf_reader_get_pin(struct strmbase_filter *iface, unsigned int index) +{ + return NULL; +} + +static void asf_reader_destroy(struct strmbase_filter *iface) +{ + struct asf_reader *filter = impl_reader_from_strmbase_filter(iface); + + free(filter->filename); + FreeMediaType(&filter->type); + + strmbase_filter_cleanup(&filter->filter); + free(filter); +} + +static HRESULT asf_reader_query_interface(struct strmbase_filter *iface, REFIID iid, void **out) +{ + struct asf_reader *filter = impl_reader_from_strmbase_filter(iface); + + if (IsEqualGUID(iid, &IID_IFileSourceFilter)) + { + *out = &filter->IFileSourceFilter_iface; + IUnknown_AddRef((IUnknown *)*out); + return S_OK; + } + + return E_NOINTERFACE; +} + +static struct strmbase_filter_ops filter_ops = +{ + .filter_get_pin = asf_reader_get_pin, + .filter_destroy = asf_reader_destroy, + .filter_query_interface = asf_reader_query_interface, +}; + +static inline struct asf_reader *impl_from_IFileSourceFilter(IFileSourceFilter *iface) +{ + return CONTAINING_RECORD(iface, struct asf_reader, IFileSourceFilter_iface); +} + +static HRESULT WINAPI filesourcefilter_QueryInterface(IFileSourceFilter *iface, REFIID iid, void **out) +{ + struct asf_reader *filter = impl_from_IFileSourceFilter(iface); + + return IBaseFilter_QueryInterface(&filter->filter.IBaseFilter_iface, iid, out); +} + +static ULONG WINAPI filesourcefilter_AddRef(IFileSourceFilter *iface) +{ + struct asf_reader *filter = impl_from_IFileSourceFilter(iface); + + return IBaseFilter_AddRef(&filter->filter.IBaseFilter_iface); +} + +static ULONG WINAPI filesourcefilter_Release(IFileSourceFilter *iface) +{ + struct asf_reader *filter = impl_from_IFileSourceFilter(iface); + + return IBaseFilter_Release(&filter->filter.IBaseFilter_iface); +} + +static HRESULT WINAPI filesourcefilter_Load(IFileSourceFilter *iface, LPCOLESTR filename, const AM_MEDIA_TYPE *type) +{ + struct asf_reader *filter = impl_from_IFileSourceFilter(iface); + + TRACE("filter %p, filename %s, type %p.\n", filter, debugstr_w(filename), type); + strmbase_dump_media_type(type); + + if (!filename) + return E_POINTER; + + if (filter->filename) + return E_FAIL; + + if (!(filter->filename = wcsdup(filename))) + return E_OUTOFMEMORY; + + if (type) + CopyMediaType(&filter->type, type); + + return S_OK; +} + +static HRESULT WINAPI filesourcefilter_GetCurFile(IFileSourceFilter *iface, LPOLESTR *filename, AM_MEDIA_TYPE *type) +{ + struct asf_reader *filter = impl_from_IFileSourceFilter(iface); + + TRACE("filter %p, filename %p, type %p.\n", filter, filename, type); + + if (!filename) + return E_POINTER; + *filename = NULL; + + if (type) + { + type->majortype = filter->type.majortype; + type->subtype = filter->type.subtype; + type->lSampleSize = filter->type.lSampleSize; + type->pUnk = filter->type.pUnk; + type->cbFormat = filter->type.cbFormat; + } + + if (filter->filename) + { + *filename = CoTaskMemAlloc((wcslen(filter->filename) + 1) * sizeof(WCHAR)); + wcscpy(*filename, filter->filename); + } + + return S_OK; +} + +static const IFileSourceFilterVtbl filesourcefilter_vtbl = +{ + filesourcefilter_QueryInterface, + filesourcefilter_AddRef, + filesourcefilter_Release, + filesourcefilter_Load, + filesourcefilter_GetCurFile, +}; + +HRESULT asf_reader_create(IUnknown *outer, IUnknown **out) +{ + struct asf_reader *object; + + if (!(object = calloc(1, sizeof(*object)))) + return E_OUTOFMEMORY; + + strmbase_filter_init(&object->filter, outer, &CLSID_WMAsfReader, &filter_ops); + object->IFileSourceFilter_iface.lpVtbl = &filesourcefilter_vtbl; + + TRACE("Created WM ASF reader %p.\n", object); + *out = &object->filter.IUnknown_inner; + + return S_OK; +} diff -Nru wine-development-5.5/dlls/qasf/dmowrapper.c wine-development-5.6/dlls/qasf/dmowrapper.c --- wine-development-5.5/dlls/qasf/dmowrapper.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/qasf/dmowrapper.c 2020-04-10 18:54:32.000000000 +0000 @@ -32,7 +32,7 @@ { struct strmbase_source pin; struct buffer buffer; - IUnknown *seeking; + struct strmbase_passthrough passthrough; }; struct dmo_wrapper @@ -405,10 +405,15 @@ { struct dmo_wrapper_source *pin = impl_source_from_strmbase_pin(iface); - if (IsEqualGUID(iid, &IID_IMediaSeeking) || IsEqualGUID(iid, &IID_IMediaPosition)) - return IUnknown_QueryInterface(pin->seeking, iid, out); + if (IsEqualGUID(iid, &IID_IMediaPosition)) + *out = &pin->passthrough.IMediaPosition_iface; + else if (IsEqualGUID(iid, &IID_IMediaSeeking)) + *out = &pin->passthrough.IMediaSeeking_iface; + else + return E_NOINTERFACE; - return E_NOINTERFACE; + IUnknown_AddRef((IUnknown *)*out); + return S_OK; } static HRESULT dmo_wrapper_source_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt) @@ -568,20 +573,13 @@ for (i = 0; i < output_count; ++i) { - ISeekingPassThru *passthrough; - swprintf(id, ARRAY_SIZE(id), L"out%u", i); strmbase_source_init(&sources[i].pin, &filter->filter, id, &source_ops); sources[i].buffer.IMediaBuffer_iface.lpVtbl = &buffer_vtbl; - if (FAILED(hr = CoCreateInstance(&CLSID_SeekingPassThru, - (IUnknown *)&sources[i].pin.pin.IPin_iface, CLSCTX_INPROC_SERVER, - &IID_IUnknown, (void **)&sources[i].seeking))) - ERR("Failed to create SeekingPassThru object, hr %#x.\n", hr); - - IUnknown_QueryInterface(sources[i].seeking, &IID_ISeekingPassThru, (void **)&passthrough); - ISeekingPassThru_Init(passthrough, FALSE, &sinks[0].pin.IPin_iface); - ISeekingPassThru_Release(passthrough); + strmbase_passthrough_init(&sources[i].passthrough, (IUnknown *)&sources[i].pin.pin.IPin_iface); + ISeekingPassThru_Init(&sources[i].passthrough.ISeekingPassThru_iface, + FALSE, &sinks[0].pin.IPin_iface); } EnterCriticalSection(&filter->filter.csFilter); @@ -630,7 +628,7 @@ strmbase_sink_cleanup(&filter->sinks[i]); for (i = 0; i < filter->source_count; ++i) { - IUnknown_Release(filter->sources[i].seeking); + strmbase_passthrough_cleanup(&filter->sources[i].passthrough); strmbase_source_cleanup(&filter->sources[i].pin); } free(filter->sinks); diff -Nru wine-development-5.5/dlls/qasf/Makefile.in wine-development-5.6/dlls/qasf/Makefile.in --- wine-development-5.5/dlls/qasf/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/qasf/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,9 +1,10 @@ MODULE = qasf.dll -IMPORTS = strmbase dmoguids strmiids uuid ole32 +IMPORTS = strmbase dmoguids strmiids uuid ole32 oleaut32 EXTRADLLFLAGS = -mno-cygwin C_SRCS = \ + asfreader.c \ dmowrapper.c \ qasf_main.c diff -Nru wine-development-5.5/dlls/qasf/qasf_classes.idl wine-development-5.6/dlls/qasf/qasf_classes.idl --- wine-development-5.5/dlls/qasf/qasf_classes.idl 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/qasf/qasf_classes.idl 2020-04-10 18:54:32.000000000 +0000 @@ -25,3 +25,10 @@ uuid(94297043-bd82-4dfd-b0de-8177739c6d20), ] coclass DMOWrapperFilter {} + +[ + helpstring("WM ASF Reader"), + threading(both), + uuid(187463a0-5bb7-11d3-acbe-0080c75e246e), +] +coclass WMAsfReader {} diff -Nru wine-development-5.5/dlls/qasf/qasf_main.c wine-development-5.6/dlls/qasf/qasf_main.c --- wine-development-5.5/dlls/qasf/qasf_main.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/qasf/qasf_main.c 2020-04-10 18:54:32.000000000 +0000 @@ -98,6 +98,7 @@ class_factory_LockServer, }; +static struct class_factory asf_reader_cf = {{&class_factory_vtbl}, asf_reader_create}; static struct class_factory dmo_wrapper_cf = {{&class_factory_vtbl}, dmo_wrapper_create}; BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved) @@ -116,6 +117,8 @@ if (IsEqualGUID(clsid, &CLSID_DMOWrapperFilter)) return IClassFactory_QueryInterface(&dmo_wrapper_cf.IClassFactory_iface, iid, out); + if (IsEqualGUID(clsid, &CLSID_WMAsfReader)) + return IClassFactory_QueryInterface(&asf_reader_cf.IClassFactory_iface, iid, out); FIXME("%s not available, returning CLASS_E_CLASSNOTAVAILABLE.\n", debugstr_guid(clsid)); return CLASS_E_CLASSNOTAVAILABLE; diff -Nru wine-development-5.5/dlls/qasf/qasf_private.h wine-development-5.6/dlls/qasf/qasf_private.h --- wine-development-5.5/dlls/qasf/qasf_private.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/qasf/qasf_private.h 2020-04-10 18:54:32.000000000 +0000 @@ -29,6 +29,7 @@ #include "wine/debug.h" #include "wine/strmbase.h" +HRESULT asf_reader_create(IUnknown *outer, IUnknown **out) DECLSPEC_HIDDEN; HRESULT dmo_wrapper_create(IUnknown *outer, IUnknown **out) DECLSPEC_HIDDEN; #endif /* QASF_PRIVATE_H */ diff -Nru wine-development-5.5/dlls/qasf/tests/asfreader.c wine-development-5.6/dlls/qasf/tests/asfreader.c --- wine-development-5.5/dlls/qasf/tests/asfreader.c 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/qasf/tests/asfreader.c 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,308 @@ +/* + * WM ASF reader unit tests + * + * Copyright 2019 Zebediah Figura + * Copyright 2020 Jactry Zeng for CodeWeavers + * + * 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 COBJMACROS + +#include "dshow.h" +#include "wine/strmbase.h" +#include "wine/test.h" + +#include "initguid.h" + +static const GUID testguid = {0x22222222, 0x2222, 0x2222, {0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22}}; + +DEFINE_GUID(IID_IWMHeaderInfo, 0x96406bda, 0x2b2b, 0x11d3, 0xb3, 0x6b, 0x00, 0xc0, 0x4f, 0x61, 0x08, 0xff); +DEFINE_GUID(IID_IWMReaderAdvanced, 0x96406bea, 0x2b2b, 0x11d3, 0xb3, 0x6b, 0x00, 0xc0, 0x4f, 0x61, 0x08, 0xff); +DEFINE_GUID(IID_IWMReaderAdvanced2, 0xae14a945, 0xb90c, 0x4d0d, 0x91, 0x27, 0x80, 0xd6, 0x65, 0xf7, 0xd7, 0x3e); + +static IBaseFilter *create_asf_reader(void) +{ + IBaseFilter *filter = NULL; + HRESULT hr; + + hr = CoCreateInstance(&CLSID_WMAsfReader, NULL, CLSCTX_INPROC_SERVER, + &IID_IBaseFilter, (void **)&filter); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + return filter; +} + +static ULONG get_refcount(void *iface) +{ + IUnknown *unknown = iface; + IUnknown_AddRef(unknown); + return IUnknown_Release(unknown); +} + +#define check_interface(a, b, c) check_interface_(__LINE__, a, b, c) +static void check_interface_(unsigned int line, void *iface_ptr, REFIID iid, BOOL supported) +{ + IUnknown *iface = iface_ptr; + HRESULT hr, expected_hr; + IUnknown *unk; + + expected_hr = supported ? S_OK : E_NOINTERFACE; + + hr = IUnknown_QueryInterface(iface, iid, (void **)&unk); + ok_(__FILE__, line)(hr == expected_hr, "Got hr %#x, expected %#x.\n", hr, expected_hr); + if (SUCCEEDED(hr)) + IUnknown_Release(unk); +} + +static void test_interfaces(void) +{ + IBaseFilter *filter = create_asf_reader(); + + check_interface(filter, &IID_IBaseFilter, TRUE); + check_interface(filter, &IID_IMediaFilter, TRUE); + check_interface(filter, &IID_IFileSourceFilter, TRUE); + check_interface(filter, &IID_IPersist, TRUE); + check_interface(filter, &IID_IUnknown, TRUE); + + check_interface(filter, &IID_IAMFilterMiscFlags, FALSE); + check_interface(filter, &IID_IMediaSeeking, FALSE); + check_interface(filter, &IID_IReferenceClock, FALSE); + check_interface(filter, &IID_IQualityControl, FALSE); + todo_wine check_interface(filter, &IID_IServiceProvider, TRUE); + todo_wine check_interface(filter, &IID_IWMHeaderInfo, TRUE); + todo_wine check_interface(filter, &IID_IWMReaderAdvanced, TRUE); + todo_wine check_interface(filter, &IID_IWMReaderAdvanced2, TRUE); + + IBaseFilter_Release(filter); +} + +static const GUID test_iid = {0x33333333}; +static LONG outer_ref = 1; + +static HRESULT WINAPI outer_QueryInterface(IUnknown *iface, REFIID iid, void **out) +{ + if (IsEqualGUID(iid, &IID_IUnknown) + || IsEqualGUID(iid, &IID_IBaseFilter) + || IsEqualGUID(iid, &test_iid)) + { + *out = (IUnknown *)0xdeadbeef; + return S_OK; + } + ok(0, "Unexpected call %s.\n", wine_dbgstr_guid(iid)); + return E_NOINTERFACE; +} + +static ULONG WINAPI outer_AddRef(IUnknown *iface) +{ + return InterlockedIncrement(&outer_ref); +} + +static ULONG WINAPI outer_Release(IUnknown *iface) +{ + return InterlockedDecrement(&outer_ref); +} + +static const IUnknownVtbl outer_vtbl = +{ + outer_QueryInterface, + outer_AddRef, + outer_Release, +}; + +static IUnknown test_outer = {&outer_vtbl}; + +static void test_aggregation(void) +{ + IBaseFilter *filter, *filter2; + IUnknown *unk, *unk2; + HRESULT hr; + ULONG ref; + + filter = (IBaseFilter *)0xdeadbeef; + hr = CoCreateInstance(&CLSID_WMAsfReader, &test_outer, CLSCTX_INPROC_SERVER, + &IID_IBaseFilter, (void **)&filter); + ok(hr == E_NOINTERFACE, "Got hr %#x.\n", hr); + ok(!filter, "Got interface %p.\n", filter); + + hr = CoCreateInstance(&CLSID_WMAsfReader, &test_outer, CLSCTX_INPROC_SERVER, + &IID_IUnknown, (void **)&unk); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(outer_ref == 1, "Got unexpected refcount %d.\n", outer_ref); + ok(unk != &test_outer, "Returned IUnknown should not be outer IUnknown.\n"); + ref = get_refcount(unk); + ok(ref == 1, "Got unexpected refcount %d.\n", ref); + + ref = IUnknown_AddRef(unk); + ok(ref == 2, "Got unexpected refcount %d.\n", ref); + ok(outer_ref == 1, "Got unexpected refcount %d.\n", outer_ref); + + ref = IUnknown_Release(unk); + ok(ref == 1, "Got unexpected refcount %d.\n", ref); + ok(outer_ref == 1, "Got unexpected refcount %d.\n", outer_ref); + + hr = IUnknown_QueryInterface(unk, &IID_IUnknown, (void **)&unk2); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(unk2 == unk, "Got unexpected IUnknown %p.\n", unk2); + IUnknown_Release(unk2); + + hr = IUnknown_QueryInterface(unk, &IID_IBaseFilter, (void **)&filter); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IBaseFilter_QueryInterface(filter, &IID_IUnknown, (void **)&unk2); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(unk2 == (IUnknown *)0xdeadbeef, "Got unexpected IUnknown %p.\n", unk2); + + hr = IBaseFilter_QueryInterface(filter, &IID_IBaseFilter, (void **)&filter2); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(filter2 == (IBaseFilter *)0xdeadbeef, "Got unexpected IBaseFilter %p.\n", filter2); + + hr = IUnknown_QueryInterface(unk, &test_iid, (void **)&unk2); + ok(hr == E_NOINTERFACE, "Got hr %#x.\n", hr); + ok(!unk2, "Got unexpected IUnknown %p.\n", unk2); + + hr = IBaseFilter_QueryInterface(filter, &test_iid, (void **)&unk2); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(unk2 == (IUnknown *)0xdeadbeef, "Got unexpected IUnknown %p.\n", unk2); + + IBaseFilter_Release(filter); + ref = IUnknown_Release(unk); + ok(!ref, "Got unexpected refcount %d.\n", ref); + ok(outer_ref == 1, "Got unexpected refcount %d.\n", outer_ref); +} + +static void test_filesourcefilter(void) +{ + IBaseFilter *filter = create_asf_reader(); + IFileSourceFilter *filesource; + IFilterGraph2 *graph; + IEnumPins *enumpins; + AM_MEDIA_TYPE type; + LPOLESTR olepath; + IPin *pins[4]; + HRESULT hr; + ULONG ref; + BYTE *ptr; + + ref = get_refcount(filter); + ok(ref == 1, "Got unexpected refcount %d.\n", ref); + hr = IBaseFilter_QueryInterface(filter, &IID_IFileSourceFilter, (void **)&filesource); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ref = get_refcount(filesource); + ok(ref == 2, "Got unexpected refcount %d.\n", ref); + ref = get_refcount(filter); + ok(ref == 2, "Got unexpected refcount %d.\n", ref); + + hr = IFileSourceFilter_Load(filesource, NULL, NULL); + ok(hr == E_POINTER, "Got hr %#x.\n", hr); + + olepath = (void *)0xdeadbeef; + memset(&type, 0x22, sizeof(type)); + hr = IFileSourceFilter_GetCurFile(filesource, &olepath, &type); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(!olepath, "Got %s.\n", wine_dbgstr_w(olepath)); + ok(IsEqualGUID(&type.majortype, &MEDIATYPE_NULL), "Got majortype %s.\n", + wine_dbgstr_guid(&type.majortype)); + ok(IsEqualGUID(&type.subtype, &MEDIASUBTYPE_NULL), "Got subtype %s.\n", + wine_dbgstr_guid(&type.subtype)); + ok(type.bFixedSizeSamples == 0x22222222, "Got fixed size %d.\n", type.bFixedSizeSamples); + ok(type.bTemporalCompression == 0x22222222, "Got temporal compression %d.\n", type.bTemporalCompression); + ok(!type.lSampleSize, "Got sample size %u.\n", type.lSampleSize); + ok(IsEqualGUID(&type.formattype, &testguid), "Got format type %s.\n", wine_dbgstr_guid(&type.formattype)); + ok(!type.pUnk, "Got pUnk %p.\n", type.pUnk); + ok(!type.cbFormat, "Got format size %u.\n", type.cbFormat); + memset(&ptr, 0x22, sizeof(ptr)); + ok(type.pbFormat == ptr, "Got format block %p.\n", type.pbFormat); + + hr = IFileSourceFilter_Load(filesource, L"nonexistent.wmv", NULL); + ok(hr == S_OK, "Got hr %#x.\n", hr); + hr = IFileSourceFilter_GetCurFile(filesource, NULL, NULL); + ok(hr == E_POINTER, "Got hr %#x.\n", hr); + + hr = IFileSourceFilter_Load(filesource, L"nonexistent2.wmv", NULL); + ok(hr == E_FAIL, "Got hr %#x.\n", hr); + + olepath = (void *)0xdeadbeef; + memset(&type, 0x22, sizeof(type)); + hr = IFileSourceFilter_GetCurFile(filesource, &olepath, &type); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(!wcscmp(olepath, L"nonexistent.wmv"), "Expected path %s, got %s.\n", + wine_dbgstr_w(L"nonexistent.wmv"), wine_dbgstr_w(olepath)); + ok(IsEqualGUID(&type.majortype, &MEDIATYPE_NULL), "Got majortype %s.\n", + wine_dbgstr_guid(&type.majortype)); + ok(IsEqualGUID(&type.subtype, &MEDIASUBTYPE_NULL), "Got subtype %s.\n", + wine_dbgstr_guid(&type.subtype)); + ok(type.bFixedSizeSamples == 0x22222222, "Got fixed size %d.\n", type.bFixedSizeSamples); + ok(type.bTemporalCompression == 0x22222222, "Got temporal compression %d.\n", type.bTemporalCompression); + ok(!type.lSampleSize, "Got sample size %u.\n", type.lSampleSize); + ok(IsEqualGUID(&type.formattype, &testguid), "Got format type %s.\n", wine_dbgstr_guid(&type.formattype)); + ok(!type.pUnk, "Got pUnk %p.\n", type.pUnk); + ok(!type.cbFormat, "Got format size %u.\n", type.cbFormat); + ok(type.pbFormat == ptr, "Got format block %p.\n", type.pbFormat); + CoTaskMemFree(olepath); + + hr = IBaseFilter_EnumPins(filter, &enumpins); + ok(hr == S_OK, "Got hr %#x.\n", hr); + hr = IEnumPins_Next(enumpins, 1, pins, NULL); + ok(hr == S_FALSE, "Got hr %#x.\n", hr); + IEnumPins_Release(enumpins); + + hr = CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, + &IID_IFilterGraph2, (void **)&graph); + ok(hr == S_OK, "Got hr %#x.\n", hr); + hr = IFilterGraph2_AddFilter(graph, filter, NULL); + todo_wine ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) + || broken(hr == HRESULT_FROM_WIN32(ERROR_MOD_NOT_FOUND)) /* win2008 */, + "Got hr %#x.\n", hr); + + hr = IFileSourceFilter_Load(filesource, L"nonexistent2.wmv", NULL); + ok(hr == E_FAIL, "Got hr %#x.\n", hr); + + olepath = (void *)0xdeadbeef; + memset(&type, 0x22, sizeof(type)); + hr = IFileSourceFilter_GetCurFile(filesource, &olepath, &type); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(!wcscmp(olepath, L"nonexistent.wmv"), "Expected path %s, got %s.\n", + wine_dbgstr_w(L"nonexistent.wmv"), wine_dbgstr_w(olepath)); + ok(IsEqualGUID(&type.majortype, &MEDIATYPE_NULL), "Got majortype %s.\n", + wine_dbgstr_guid(&type.majortype)); + ok(IsEqualGUID(&type.subtype, &MEDIASUBTYPE_NULL), "Got subtype %s.\n", + wine_dbgstr_guid(&type.subtype)); + ok(type.bFixedSizeSamples == 0x22222222, "Got fixed size %d.\n", type.bFixedSizeSamples); + ok(type.bTemporalCompression == 0x22222222, "Got temporal compression %d.\n", type.bTemporalCompression); + ok(!type.lSampleSize, "Got sample size %u.\n", type.lSampleSize); + ok(IsEqualGUID(&type.formattype, &testguid), "Got format type %s.\n", wine_dbgstr_guid(&type.formattype)); + ok(!type.pUnk, "Got pUnk %p.\n", type.pUnk); + ok(!type.cbFormat, "Got format size %u.\n", type.cbFormat); + ok(type.pbFormat == ptr, "Got format block %p.\n", type.pbFormat); + CoTaskMemFree(olepath); + + ref = IFilterGraph2_Release(graph); + ok(!ref, "Got outstanding refcount %d.\n", ref); + IBaseFilter_Release(filter); + ref = IFileSourceFilter_Release(filesource); + ok(!ref, "Got outstanding refcount %d.\n", ref); +} + +START_TEST(asfreader) +{ + CoInitializeEx(NULL, COINIT_MULTITHREADED); + + test_interfaces(); + test_aggregation(); + test_filesourcefilter(); + + CoUninitialize(); +} diff -Nru wine-development-5.5/dlls/qasf/tests/Makefile.in wine-development-5.6/dlls/qasf/tests/Makefile.in --- wine-development-5.5/dlls/qasf/tests/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/qasf/tests/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -2,4 +2,5 @@ IMPORTS = strmbase dmoguids strmiids uuid msdmo ole32 C_SRCS = \ + asfreader.c \ dmowrapper.c diff -Nru wine-development-5.5/dlls/qcap/capturegraph.c wine-development-5.6/dlls/qcap/capturegraph.c --- wine-development-5.5/dlls/qcap/capturegraph.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/qcap/capturegraph.c 2020-04-10 18:54:32.000000000 +0000 @@ -499,83 +499,109 @@ return hr; } -static HRESULT find_unconnected_pin(CaptureGraphImpl *This, - const GUID *pCategory, const GUID *pType, IUnknown *pSource, IPin **out_pin) +static HRESULT find_unconnected_source_from_filter(CaptureGraphImpl *capture_graph, + const GUID *category, const GUID *majortype, IBaseFilter *filter, IPin **ret); + +static HRESULT find_unconnected_source_from_pin(CaptureGraphImpl *capture_graph, + const GUID *category, const GUID *majortype, IPin *pin, IPin **ret) { - int index = 0; - IPin *source_out; + PIN_DIRECTION dir; + PIN_INFO info; HRESULT hr; - BOOL usedSmartTeePreviewPin = FALSE; + IPin *peer; + + IPin_QueryDirection(pin, &dir); + if (dir != PINDIR_OUTPUT) + return VFW_E_INVALID_DIRECTION; + + if (category && (IsEqualGUID(category, &PIN_CATEGORY_CAPTURE) + || IsEqualGUID(category, &PIN_CATEGORY_PREVIEW))) + { + if (FAILED(hr = match_smart_tee_pin(capture_graph, category, majortype, (IUnknown *)pin, &pin))) + return hr; - /* depth-first search the graph for the first unconnected pin that matches - * the given category and type */ - for(;;){ - IPin *nextpin; - - if (pCategory && (IsEqualIID(pCategory, &PIN_CATEGORY_CAPTURE) || IsEqualIID(pCategory, &PIN_CATEGORY_PREVIEW))){ - IBaseFilter *sourceFilter = NULL; - hr = IUnknown_QueryInterface(pSource, &IID_IBaseFilter, (void**)&sourceFilter); - if (SUCCEEDED(hr)) { - hr = match_smart_tee_pin(This, pCategory, pType, pSource, &source_out); - if (hr == VFW_S_NOPREVIEWPIN) - usedSmartTeePreviewPin = TRUE; - IBaseFilter_Release(sourceFilter); - } else { - hr = ICaptureGraphBuilder2_FindPin(&This->ICaptureGraphBuilder2_iface, pSource, PINDIR_OUTPUT, pCategory, pType, FALSE, index, &source_out); - } - if (FAILED(hr)) - return E_INVALIDARG; - } else { - hr = ICaptureGraphBuilder2_FindPin(&This->ICaptureGraphBuilder2_iface, pSource, PINDIR_OUTPUT, pCategory, pType, FALSE, index, &source_out); - if (FAILED(hr)) - return E_INVALIDARG; + if (FAILED(IPin_ConnectedTo(pin, &peer))) + { + *ret = pin; + return S_OK; } + } + else + { + if (FAILED(IPin_ConnectedTo(pin, &peer))) + { + if (!pin_matches(pin, PINDIR_OUTPUT, category, majortype, FALSE)) + return E_FAIL; - hr = IPin_ConnectedTo(source_out, &nextpin); - if(SUCCEEDED(hr)){ - PIN_INFO info; - - IPin_Release(source_out); - - hr = IPin_QueryPinInfo(nextpin, &info); - if(FAILED(hr) || !info.pFilter){ - WARN("QueryPinInfo failed: %08x\n", hr); - return hr; - } - - hr = find_unconnected_pin(This, pCategory, pType, (IUnknown*)info.pFilter, out_pin); - - IBaseFilter_Release(info.pFilter); - - if(SUCCEEDED(hr)) - return hr; - }else{ - *out_pin = source_out; - if(usedSmartTeePreviewPin) - return VFW_S_NOPREVIEWPIN; + IPin_AddRef(*ret = pin); return S_OK; } + IPin_AddRef(pin); + } + + IPin_QueryPinInfo(peer, &info); + hr = find_unconnected_source_from_filter(capture_graph, category, majortype, info.pFilter, ret); + IBaseFilter_Release(info.pFilter); + IPin_Release(peer); + IPin_Release(pin); + return hr; +} + +static HRESULT find_unconnected_source_from_filter(CaptureGraphImpl *capture_graph, + const GUID *category, const GUID *majortype, IBaseFilter *filter, IPin **ret) +{ + IEnumPins *enumpins; + IPin *pin, *peer; + HRESULT hr; + + if (category && (IsEqualGUID(category, &PIN_CATEGORY_CAPTURE) + || IsEqualGUID(category, &PIN_CATEGORY_PREVIEW))) + { + if (FAILED(hr = match_smart_tee_pin(capture_graph, category, majortype, (IUnknown *)filter, &pin))) + return hr; + + if (FAILED(IPin_ConnectedTo(pin, &peer))) + { + *ret = pin; + return hr; + } + + IPin_Release(peer); + IPin_Release(pin); + return E_INVALIDARG; + } - index++; + if (FAILED(hr = IBaseFilter_EnumPins(filter, &enumpins))) + return hr; + + while (IEnumPins_Next(enumpins, 1, &pin, NULL) == S_OK) + { + if (SUCCEEDED(hr = find_unconnected_source_from_pin(capture_graph, category, majortype, pin, ret))) + { + IEnumPins_Release(enumpins); + IPin_Release(pin); + return hr; + } + IPin_Release(pin); } + IEnumPins_Release(enumpins); + + return E_INVALIDARG; } -static HRESULT WINAPI -fnCaptureGraphBuilder2_RenderStream(ICaptureGraphBuilder2 * iface, - const GUID *pCategory, - const GUID *pType, - IUnknown *pSource, - IBaseFilter *pfCompressor, - IBaseFilter *pfRenderer) +static HRESULT WINAPI fnCaptureGraphBuilder2_RenderStream(ICaptureGraphBuilder2 *iface, + const GUID *category, const GUID *majortype, IUnknown *source, + IBaseFilter *pfCompressor, IBaseFilter *pfRenderer) { CaptureGraphImpl *This = impl_from_ICaptureGraphBuilder2(iface); IPin *source_out = NULL, *renderer_in; BOOL rendererNeedsRelease = FALSE; HRESULT hr, return_hr = S_OK; + IBaseFilter *filter; + IPin *pin; - FIXME("(%p/%p)->(%s, %s, %p, %p, %p) semi-stub!\n", This, iface, - debugstr_guid(pCategory), debugstr_guid(pType), - pSource, pfCompressor, pfRenderer); + TRACE("graph %p, category %s, majortype %s, source %p, intermediate %p, sink %p.\n", + This, debugstr_guid(category), debugstr_guid(majortype), source, pfCompressor, pfRenderer); if (!This->mygraph) { @@ -583,12 +609,27 @@ return E_UNEXPECTED; } - if (pCategory && IsEqualIID(pCategory, &PIN_CATEGORY_VBI)) { + if (category && IsEqualGUID(category, &PIN_CATEGORY_VBI)) + { FIXME("Tee/Sink-to-Sink filter not supported\n"); return E_NOTIMPL; } - hr = find_unconnected_pin(This, pCategory, pType, pSource, &source_out); + if (IUnknown_QueryInterface(source, &IID_IPin, (void **)&pin) == S_OK) + { + hr = find_unconnected_source_from_pin(This, category, majortype, pin, &source_out); + IPin_Release(pin); + } + else if (IUnknown_QueryInterface(source, &IID_IBaseFilter, (void **)&filter) == S_OK) + { + hr = find_unconnected_source_from_filter(This, category, majortype, filter, &source_out); + IBaseFilter_Release(filter); + } + else + { + WARN("Source object does not expose IBaseFilter or IPin.\n"); + return E_INVALIDARG; + } if (FAILED(hr)) return hr; return_hr = hr; diff -Nru wine-development-5.5/dlls/qcap/tests/capturegraph.c wine-development-5.6/dlls/qcap/tests/capturegraph.c --- wine-development-5.5/dlls/qcap/tests/capturegraph.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/qcap/tests/capturegraph.c 2020-04-10 18:54:32.000000000 +0000 @@ -35,13 +35,28 @@ static const GUID testiid = {0x11111111}, testtype = {0x22222222}; +struct testsource +{ + struct strmbase_source pin; + IKsPropertySet IKsPropertySet_iface; + GUID category; + BOOL has_iface; +}; + +struct testsink +{ + struct strmbase_sink pin; + BOOL has_iface; +}; + struct testfilter { struct strmbase_filter filter; - struct strmbase_source source, source2; - struct strmbase_sink sink, sink2; - BOOL filter_has_iface, source_has_iface, source2_has_iface, sink_has_iface, sink2_has_iface; - IKsPropertySet IKsPropertySet_iface; + struct testsource source1, source2; + struct testsink sink1, sink2; + BOOL filter_has_iface; + GUID source_type; + const GUID *sink_type; }; static inline struct testfilter *impl_from_strmbase_filter(struct strmbase_filter *iface) @@ -69,21 +84,23 @@ struct testfilter *filter = impl_from_strmbase_filter(iface); if (!index) - return &filter->source.pin; + return &filter->source1.pin.pin; else if (index == 1) - return &filter->sink.pin; + return &filter->sink1.pin.pin; else if (index == 2) - return &filter->source2.pin; + return &filter->source2.pin.pin; else if (index == 3) - return &filter->sink2.pin; + return &filter->sink2.pin.pin; return NULL; } static void testfilter_destroy(struct strmbase_filter *iface) { struct testfilter *filter = impl_from_strmbase_filter(iface); - strmbase_source_cleanup(&filter->source); - strmbase_sink_cleanup(&filter->sink); + strmbase_source_cleanup(&filter->source1.pin); + strmbase_source_cleanup(&filter->source2.pin); + strmbase_sink_cleanup(&filter->sink1.pin); + strmbase_sink_cleanup(&filter->sink2.pin); strmbase_filter_cleanup(&filter->filter); } @@ -94,27 +111,27 @@ .filter_destroy = testfilter_destroy, }; -static struct testfilter *impl_from_IKsPropertySet(IKsPropertySet *iface) +static struct testsource *impl_from_IKsPropertySet(IKsPropertySet *iface) { - return CONTAINING_RECORD(iface, struct testfilter, IKsPropertySet_iface); + return CONTAINING_RECORD(iface, struct testsource, IKsPropertySet_iface); } static HRESULT WINAPI property_set_QueryInterface(IKsPropertySet *iface, REFIID iid, void **out) { - struct testfilter *filter = impl_from_IKsPropertySet(iface); - return IPin_QueryInterface(&filter->source.pin.IPin_iface, iid, out); + struct testsource *pin = impl_from_IKsPropertySet(iface); + return IPin_QueryInterface(&pin->pin.pin.IPin_iface, iid, out); } static ULONG WINAPI property_set_AddRef(IKsPropertySet *iface) { - struct testfilter *filter = impl_from_IKsPropertySet(iface); - return IPin_AddRef(&filter->source.pin.IPin_iface); + struct testsource *pin = impl_from_IKsPropertySet(iface); + return IPin_AddRef(&pin->pin.pin.IPin_iface); } static ULONG WINAPI property_set_Release(IKsPropertySet *iface) { - struct testfilter *filter = impl_from_IKsPropertySet(iface); - return IPin_Release(&filter->source.pin.IPin_iface); + struct testsource *pin = impl_from_IKsPropertySet(iface); + return IPin_Release(&pin->pin.pin.IPin_iface); } static HRESULT WINAPI property_set_Set(IKsPropertySet *iface, REFGUID set, DWORD id, @@ -127,7 +144,9 @@ static HRESULT WINAPI property_set_Get(IKsPropertySet *iface, REFGUID set, DWORD id, void *instance_data, DWORD instance_size, void *property_data, DWORD property_size, DWORD *ret_size) { - if (winetest_debug > 1) trace("Get()\n"); + struct testsource *pin = impl_from_IKsPropertySet(iface); + + if (winetest_debug > 1) trace("%s->Get()\n", debugstr_w(pin->pin.pin.name)); ok(IsEqualGUID(set, &ROPSETID_Pin), "Got set %s.\n", debugstr_guid(set)); ok(id == AMPROPERTY_PIN_CATEGORY, "Got id %#x.\n", id); @@ -135,7 +154,7 @@ ok(!instance_size, "Got instance size %u.\n", instance_size); ok(property_size == sizeof(GUID), "Got property size %u.\n", property_size); ok(!!ret_size, "Expected non-NULL return size.\n"); - memcpy(property_data, &PIN_CATEGORY_CAPTURE, sizeof(GUID)); + memcpy(property_data, &pin->category, sizeof(GUID)); return S_OK; } @@ -155,17 +174,19 @@ property_set_QuerySupported, }; +static struct testsource *impl_source_from_strmbase_pin(struct strmbase_pin *iface) +{ + return CONTAINING_RECORD(iface, struct testsource, pin.pin); +} + static HRESULT testsource_query_interface(struct strmbase_pin *iface, REFIID iid, void **out) { - struct testfilter *filter = impl_from_strmbase_filter(iface->filter); + struct testsource *pin = impl_source_from_strmbase_pin(iface); - if (iface == &filter->source.pin && filter->source_has_iface && IsEqualGUID(iid, &testiid)) - *out = &iface->IPin_iface; - else if (iface == &filter->source2.pin && filter->source2_has_iface && IsEqualGUID(iid, &testiid)) - *out = &iface->IPin_iface; - else if (iface == &filter->source.pin && filter->IKsPropertySet_iface.lpVtbl - && IsEqualGUID(iid, &IID_IKsPropertySet)) - *out = &filter->IKsPropertySet_iface; + if (pin->has_iface && IsEqualGUID(iid, &testiid)) + *out = &pin->pin.pin.IPin_iface; + else if (pin->IKsPropertySet_iface.lpVtbl && IsEqualGUID(iid, &IID_IKsPropertySet)) + *out = &pin->IKsPropertySet_iface; else return E_NOINTERFACE; @@ -180,18 +201,21 @@ static HRESULT testsource_get_media_type(struct strmbase_pin *iface, unsigned int index, AM_MEDIA_TYPE *mt) { + struct testfilter *filter = impl_from_strmbase_filter(iface->filter); + if (!index) { memset(mt, 0, sizeof(*mt)); - mt->majortype = testtype; + mt->majortype = filter->source_type; return S_OK; } return VFW_S_NO_MORE_ITEMS; } -static HRESULT WINAPI testsource_DecideAllocator(struct strmbase_source *iface, - IMemInputPin *input, IMemAllocator **allocator) +static HRESULT WINAPI testsource_DecideBufferSize(struct strmbase_source *iface, + IMemAllocator *allocator, ALLOCATOR_PROPERTIES *props) { + props->cBuffers = props->cbAlign = props->cbBuffer = 1; return S_OK; } @@ -201,21 +225,25 @@ .base.pin_query_accept = testsource_query_accept, .base.pin_get_media_type = testsource_get_media_type, .pfnAttemptConnection = BaseOutputPinImpl_AttemptConnection, - .pfnDecideAllocator = testsource_DecideAllocator, + .pfnDecideAllocator = BaseOutputPinImpl_DecideAllocator, + .pfnDecideBufferSize = testsource_DecideBufferSize, }; +static struct testsink *impl_sink_from_strmbase_pin(struct strmbase_pin *iface) +{ + return CONTAINING_RECORD(iface, struct testsink, pin.pin); +} + static HRESULT testsink_query_interface(struct strmbase_pin *iface, REFIID iid, void **out) { - struct testfilter *filter = impl_from_strmbase_filter(iface->filter); + struct testsink *pin = impl_sink_from_strmbase_pin(iface); ok(!IsEqualGUID(iid, &IID_IKsPropertySet), "Unexpected query for IKsPropertySet.\n"); if (IsEqualGUID(iid, &IID_IMemInputPin)) - *out = &filter->sink.IMemInputPin_iface; - else if (iface == &filter->sink.pin && filter->sink_has_iface && IsEqualGUID(iid, &testiid)) - *out = &iface->IPin_iface; - else if (iface == &filter->sink2.pin && filter->sink2_has_iface && IsEqualGUID(iid, &testiid)) - *out = &iface->IPin_iface; + *out = &pin->pin.IMemInputPin_iface; + else if (pin->has_iface && IsEqualGUID(iid, &testiid)) + *out = &pin->pin.pin.IPin_iface; else return E_NOINTERFACE; @@ -225,6 +253,10 @@ static HRESULT testsink_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt) { + struct testfilter *filter = impl_from_strmbase_filter(iface->filter); + + if (filter->sink_type && !IsEqualGUID(&mt->majortype, filter->sink_type)) + return S_FALSE; return S_OK; } @@ -237,8 +269,8 @@ static void reset_interfaces(struct testfilter *filter) { - filter->filter_has_iface = filter->sink_has_iface = filter->sink2_has_iface = TRUE; - filter->source_has_iface = filter->source2_has_iface = TRUE; + filter->filter_has_iface = filter->sink1.has_iface = filter->sink2.has_iface = TRUE; + filter->source1.has_iface = filter->source2.has_iface = TRUE; } static void testfilter_init(struct testfilter *filter) @@ -246,10 +278,10 @@ static const GUID clsid = {0xabacab}; memset(filter, 0, sizeof(*filter)); strmbase_filter_init(&filter->filter, NULL, &clsid, &testfilter_ops); - strmbase_source_init(&filter->source, &filter->filter, L"source", &testsource_ops); - strmbase_source_init(&filter->source2, &filter->filter, L"source2", &testsource_ops); - strmbase_sink_init(&filter->sink, &filter->filter, L"sink", &testsink_ops, NULL); - strmbase_sink_init(&filter->sink2, &filter->filter, L"sink2", &testsink_ops, NULL); + strmbase_source_init(&filter->source1.pin, &filter->filter, L"source1", &testsource_ops); + strmbase_source_init(&filter->source2.pin, &filter->filter, L"source2", &testsource_ops); + strmbase_sink_init(&filter->sink1.pin, &filter->filter, L"sink1", &testsink_ops, NULL); + strmbase_sink_init(&filter->sink2.pin, &filter->filter, L"sink2", &testsink_ops, NULL); reset_interfaces(filter); } @@ -285,60 +317,60 @@ tests_from_filter2[] = { {&filter2.filter_has_iface, &filter2.filter.IBaseFilter_iface}, - {&filter2.source_has_iface, &filter2.source.pin.IPin_iface}, - {&filter3.sink_has_iface, &filter3.sink.pin.IPin_iface}, + {&filter2.source1.has_iface, &filter2.source1.pin.pin.IPin_iface}, + {&filter3.sink1.has_iface, &filter3.sink1.pin.pin.IPin_iface}, {&filter3.filter_has_iface, &filter3.filter.IBaseFilter_iface}, - {&filter3.source_has_iface, &filter3.source.pin.IPin_iface}, - {&filter3.source2_has_iface, &filter3.source2.pin.IPin_iface}, - {&filter2.source2_has_iface, &filter2.source2.pin.IPin_iface}, - {&filter2.sink_has_iface, &filter2.sink.pin.IPin_iface}, - {&filter1.source_has_iface, &filter1.source.pin.IPin_iface}, + {&filter3.source1.has_iface, &filter3.source1.pin.pin.IPin_iface}, + {&filter3.source2.has_iface, &filter3.source2.pin.pin.IPin_iface}, + {&filter2.source2.has_iface, &filter2.source2.pin.pin.IPin_iface}, + {&filter2.sink1.has_iface, &filter2.sink1.pin.pin.IPin_iface}, + {&filter1.source1.has_iface, &filter1.source1.pin.pin.IPin_iface}, {&filter1.filter_has_iface, &filter1.filter.IBaseFilter_iface}, - {&filter1.sink_has_iface, &filter1.sink.pin.IPin_iface}, - {&filter1.sink2_has_iface, &filter1.sink2.pin.IPin_iface}, - {&filter2.sink2_has_iface, &filter2.sink2.pin.IPin_iface}, + {&filter1.sink1.has_iface, &filter1.sink1.pin.pin.IPin_iface}, + {&filter1.sink2.has_iface, &filter1.sink2.pin.pin.IPin_iface}, + {&filter2.sink2.has_iface, &filter2.sink2.pin.pin.IPin_iface}, }, tests_from_filter1[] = { {&filter1.filter_has_iface, &filter1.filter.IBaseFilter_iface}, - {&filter1.source_has_iface, &filter1.source.pin.IPin_iface}, - {&filter2.sink_has_iface, &filter2.sink.pin.IPin_iface}, + {&filter1.source1.has_iface, &filter1.source1.pin.pin.IPin_iface}, + {&filter2.sink1.has_iface, &filter2.sink1.pin.pin.IPin_iface}, {&filter2.filter_has_iface, &filter2.filter.IBaseFilter_iface}, - {&filter2.source_has_iface, &filter2.source.pin.IPin_iface}, - {&filter3.sink_has_iface, &filter3.sink.pin.IPin_iface}, + {&filter2.source1.has_iface, &filter2.source1.pin.pin.IPin_iface}, + {&filter3.sink1.has_iface, &filter3.sink1.pin.pin.IPin_iface}, {&filter3.filter_has_iface, &filter3.filter.IBaseFilter_iface}, - {&filter3.source_has_iface, &filter3.source.pin.IPin_iface}, - {&filter3.source2_has_iface, &filter3.source2.pin.IPin_iface}, - {&filter2.source2_has_iface, &filter2.source2.pin.IPin_iface}, - {&filter1.source2_has_iface, &filter1.source2.pin.IPin_iface}, - {&filter1.sink_has_iface, &filter1.sink.pin.IPin_iface}, - {&filter1.sink2_has_iface, &filter1.sink2.pin.IPin_iface}, + {&filter3.source1.has_iface, &filter3.source1.pin.pin.IPin_iface}, + {&filter3.source2.has_iface, &filter3.source2.pin.pin.IPin_iface}, + {&filter2.source2.has_iface, &filter2.source2.pin.pin.IPin_iface}, + {&filter1.source2.has_iface, &filter1.source2.pin.pin.IPin_iface}, + {&filter1.sink1.has_iface, &filter1.sink1.pin.pin.IPin_iface}, + {&filter1.sink2.has_iface, &filter1.sink2.pin.pin.IPin_iface}, }, look_upstream_tests[] = { - {&filter2.sink_has_iface, &filter2.sink.pin.IPin_iface}, - {&filter1.source_has_iface, &filter1.source.pin.IPin_iface}, + {&filter2.sink1.has_iface, &filter2.sink1.pin.pin.IPin_iface}, + {&filter1.source1.has_iface, &filter1.source1.pin.pin.IPin_iface}, {&filter1.filter_has_iface, &filter1.filter.IBaseFilter_iface}, - {&filter1.sink_has_iface, &filter1.sink.pin.IPin_iface}, - {&filter1.sink2_has_iface, &filter1.sink2.pin.IPin_iface}, - {&filter2.sink2_has_iface, &filter2.sink2.pin.IPin_iface}, + {&filter1.sink1.has_iface, &filter1.sink1.pin.pin.IPin_iface}, + {&filter1.sink2.has_iface, &filter1.sink2.pin.pin.IPin_iface}, + {&filter2.sink2.has_iface, &filter2.sink2.pin.pin.IPin_iface}, }, look_downstream_tests[] = { - {&filter2.source_has_iface, &filter2.source.pin.IPin_iface}, - {&filter3.sink_has_iface, &filter3.sink.pin.IPin_iface}, + {&filter2.source1.has_iface, &filter2.source1.pin.pin.IPin_iface}, + {&filter3.sink1.has_iface, &filter3.sink1.pin.pin.IPin_iface}, {&filter3.filter_has_iface, &filter3.filter.IBaseFilter_iface}, - {&filter3.source_has_iface, &filter3.source.pin.IPin_iface}, - {&filter3.source2_has_iface, &filter3.source2.pin.IPin_iface}, - {&filter2.source2_has_iface, &filter2.source2.pin.IPin_iface}, + {&filter3.source1.has_iface, &filter3.source1.pin.pin.IPin_iface}, + {&filter3.source2.has_iface, &filter3.source2.pin.pin.IPin_iface}, + {&filter2.source2.has_iface, &filter2.source2.pin.pin.IPin_iface}, }, category_tests[] = { {&filter3.filter_has_iface, &filter3.filter.IBaseFilter_iface}, - {&filter3.source_has_iface, &filter3.source.pin.IPin_iface}, - {&filter3.source2_has_iface, &filter3.source2.pin.IPin_iface}, - {&filter2.sink_has_iface, &filter2.sink.pin.IPin_iface}, - {&filter1.source_has_iface, &filter1.source.pin.IPin_iface}, + {&filter3.source1.has_iface, &filter3.source1.pin.pin.IPin_iface}, + {&filter3.source2.has_iface, &filter3.source2.pin.pin.IPin_iface}, + {&filter2.sink1.has_iface, &filter2.sink1.pin.pin.IPin_iface}, + {&filter1.source1.has_iface, &filter1.source1.pin.pin.IPin_iface}, {&filter1.filter_has_iface, &filter1.filter.IBaseFilter_iface}, - {&filter1.sink_has_iface, &filter1.sink.pin.IPin_iface}, - {&filter1.sink2_has_iface, &filter1.sink2.pin.IPin_iface}, - {&filter2.sink2_has_iface, &filter2.sink2.pin.IPin_iface}, + {&filter1.sink1.has_iface, &filter1.sink1.pin.pin.IPin_iface}, + {&filter1.sink2.has_iface, &filter1.sink2.pin.pin.IPin_iface}, + {&filter2.sink2.has_iface, &filter2.sink2.pin.pin.IPin_iface}, }; CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, &IID_IGraphBuilder, (void **)&graph); @@ -352,9 +384,9 @@ testfilter_init(&filter3); IGraphBuilder_AddFilter(graph, &filter3.filter.IBaseFilter_iface, L"filter3"); - hr = IGraphBuilder_ConnectDirect(graph, &filter1.source.pin.IPin_iface, &filter2.sink.pin.IPin_iface, &mt1); + hr = IGraphBuilder_ConnectDirect(graph, &filter1.source1.pin.pin.IPin_iface, &filter2.sink1.pin.pin.IPin_iface, &mt1); ok(hr == S_OK, "Got hr %#x.\n", hr); - hr = IGraphBuilder_ConnectDirect(graph, &filter2.source.pin.IPin_iface, &filter3.sink.pin.IPin_iface, &mt2); + hr = IGraphBuilder_ConnectDirect(graph, &filter2.source1.pin.pin.IPin_iface, &filter3.sink1.pin.pin.IPin_iface, &mt2); ok(hr == S_OK, "Got hr %#x.\n", hr); /* Test search order without any restrictions applied. */ @@ -446,17 +478,18 @@ &filter2.filter.IBaseFilter_iface, &testiid, (void **)&unk); ok(hr == E_NOINTERFACE, "Got hr %#x.\n", hr); - filter2.IKsPropertySet_iface.lpVtbl = &property_set_vtbl; + filter2.source1.IKsPropertySet_iface.lpVtbl = &property_set_vtbl; + filter2.source1.category = PIN_CATEGORY_CAPTURE; hr = ICaptureGraphBuilder2_FindInterface(capture_graph, &PIN_CATEGORY_CAPTURE, NULL, &filter2.filter.IBaseFilter_iface, &testiid, (void **)&unk); ok(hr == S_OK, "Got hr %#x.\n", hr); - ok(unk == (IUnknown *)&filter2.source.pin.IPin_iface, "Got wrong interface %p.\n", unk); + ok(unk == (IUnknown *)&filter2.source1.pin.pin.IPin_iface, "Got wrong interface %p.\n", unk); IUnknown_Release(unk); - filter2.source_has_iface = FALSE; + filter2.source1.has_iface = FALSE; /* Native returns the filter3 sink next, but suffers from a bug wherein it * releases a reference to the wrong pin. */ - filter3.sink_has_iface = FALSE; + filter3.sink1.has_iface = FALSE; for (i = 0; i < ARRAY_SIZE(category_tests); ++i) { @@ -474,6 +507,8 @@ /* Test with a media type. */ + filter1.source_type = filter2.source_type = testtype; + reset_interfaces(&filter1); reset_interfaces(&filter2); reset_interfaces(&filter3); @@ -496,11 +531,11 @@ hr = ICaptureGraphBuilder2_FindInterface(capture_graph, &PIN_CATEGORY_CAPTURE, &testtype, &filter2.filter.IBaseFilter_iface, &testiid, (void **)&unk); ok(hr == S_OK, "Got hr %#x.\n", hr); - ok(unk == (IUnknown *)&filter2.source.pin.IPin_iface, "Got wrong interface %p.\n", unk); + ok(unk == (IUnknown *)&filter2.source1.pin.pin.IPin_iface, "Got wrong interface %p.\n", unk); IUnknown_Release(unk); - filter2.source_has_iface = FALSE; + filter2.source1.has_iface = FALSE; - filter3.sink_has_iface = FALSE; + filter3.sink1.has_iface = FALSE; for (i = 0; i < ARRAY_SIZE(category_tests); ++i) { @@ -528,11 +563,521 @@ ok(!ref, "Got outstanding refcount %d.\n", ref); } +static void test_find_pin(void) +{ + static const AM_MEDIA_TYPE mt = + { + .majortype = {0x111}, + .subtype = {0x222}, + .formattype = {0x333}, + }; + + ICaptureGraphBuilder2 *capture_graph = create_capture_graph(); + struct testfilter filter1, filter2; + IGraphBuilder *graph; + HRESULT hr; + ULONG ref; + IPin *pin; + + CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, &IID_IGraphBuilder, (void **)&graph); + hr = ICaptureGraphBuilder2_SetFiltergraph(capture_graph, graph); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + testfilter_init(&filter1); + testfilter_init(&filter2); + IGraphBuilder_AddFilter(graph, &filter1.filter.IBaseFilter_iface, L"filter1"); + IGraphBuilder_AddFilter(graph, &filter2.filter.IBaseFilter_iface, L"filter2"); + + hr = IGraphBuilder_ConnectDirect(graph, &filter1.source1.pin.pin.IPin_iface, + &filter2.sink1.pin.pin.IPin_iface, &mt); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = ICaptureGraphBuilder2_FindPin(capture_graph, (IUnknown *)&filter1.filter.IBaseFilter_iface, + PINDIR_INPUT, NULL, NULL, FALSE, 0, &pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(pin == &filter1.sink1.pin.pin.IPin_iface, "Got wrong pin.\n"); + IPin_Release(pin); + + hr = ICaptureGraphBuilder2_FindPin(capture_graph, (IUnknown *)&filter1.filter.IBaseFilter_iface, + PINDIR_INPUT, NULL, NULL, FALSE, 1, &pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(pin == &filter1.sink2.pin.pin.IPin_iface, "Got wrong pin.\n"); + IPin_Release(pin); + + hr = ICaptureGraphBuilder2_FindPin(capture_graph, (IUnknown *)&filter1.filter.IBaseFilter_iface, + PINDIR_INPUT, NULL, NULL, FALSE, 2, &pin); + ok(hr == E_FAIL, "Got hr %#x.\n", hr); + + hr = ICaptureGraphBuilder2_FindPin(capture_graph, (IUnknown *)&filter1.filter.IBaseFilter_iface, + PINDIR_OUTPUT, NULL, NULL, FALSE, 0, &pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(pin == &filter1.source1.pin.pin.IPin_iface, "Got wrong pin.\n"); + IPin_Release(pin); + + hr = ICaptureGraphBuilder2_FindPin(capture_graph, (IUnknown *)&filter1.filter.IBaseFilter_iface, + PINDIR_OUTPUT, NULL, NULL, FALSE, 1, &pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(pin == &filter1.source2.pin.pin.IPin_iface, "Got wrong pin.\n"); + IPin_Release(pin); + + hr = ICaptureGraphBuilder2_FindPin(capture_graph, (IUnknown *)&filter1.filter.IBaseFilter_iface, + PINDIR_OUTPUT, NULL, NULL, FALSE, 2, &pin); + ok(hr == E_FAIL, "Got hr %#x.\n", hr); + + /* Test the unconnected flag. */ + + hr = ICaptureGraphBuilder2_FindPin(capture_graph, (IUnknown *)&filter1.filter.IBaseFilter_iface, + PINDIR_OUTPUT, NULL, NULL, TRUE, 0, &pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(pin == &filter1.source2.pin.pin.IPin_iface, "Got wrong pin.\n"); + IPin_Release(pin); + + hr = ICaptureGraphBuilder2_FindPin(capture_graph, (IUnknown *)&filter1.filter.IBaseFilter_iface, + PINDIR_OUTPUT, NULL, NULL, TRUE, 1, &pin); + ok(hr == E_FAIL, "Got hr %#x.\n", hr); + + /* Test categories. */ + + filter1.source1.IKsPropertySet_iface.lpVtbl = &property_set_vtbl; + filter1.source1.category = PIN_CATEGORY_CAPTURE; + + hr = ICaptureGraphBuilder2_FindPin(capture_graph, (IUnknown *)&filter1.filter.IBaseFilter_iface, + PINDIR_OUTPUT, &PIN_CATEGORY_CAPTURE, NULL, FALSE, 0, &pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(pin == &filter1.source1.pin.pin.IPin_iface, "Got wrong pin.\n"); + IPin_Release(pin); + + hr = ICaptureGraphBuilder2_FindPin(capture_graph, (IUnknown *)&filter1.filter.IBaseFilter_iface, + PINDIR_OUTPUT, &PIN_CATEGORY_CAPTURE, NULL, FALSE, 1, &pin); + ok(hr == E_FAIL, "Got hr %#x.\n", hr); + + ref = ICaptureGraphBuilder2_Release(capture_graph); + ok(!ref, "Got outstanding refcount %d.\n", ref); + ref = IGraphBuilder_Release(graph); + ok(!ref, "Got outstanding refcount %d.\n", ref); + ref = IBaseFilter_Release(&filter1.filter.IBaseFilter_iface); + ok(!ref, "Got outstanding refcount %d.\n", ref); + ref = IBaseFilter_Release(&filter2.filter.IBaseFilter_iface); + ok(!ref, "Got outstanding refcount %d.\n", ref); +} + +static void disconnect_pins(IGraphBuilder *graph, struct testsource *pin) +{ + HRESULT hr; + hr = IGraphBuilder_Disconnect(graph, pin->pin.pin.peer); + ok(hr == S_OK, "Got hr %#x.\n", hr); + hr = IGraphBuilder_Disconnect(graph, &pin->pin.pin.IPin_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); +} + +static void check_smart_tee_pin_(int line, IPin *pin, const WCHAR *name) +{ + PIN_INFO info; + GUID clsid; + + IPin_QueryPinInfo(pin, &info); + ok_(__FILE__, line)(!wcscmp(info.achName, name), "Got name %s.\n", debugstr_w(info.achName)); + IBaseFilter_GetClassID(info.pFilter, &clsid); + ok_(__FILE__, line)(IsEqualGUID(&clsid, &CLSID_SmartTee), "Got CLSID %s.\n", debugstr_guid(&clsid)); + IBaseFilter_Release(info.pFilter); +} +#define check_smart_tee_pin(pin, name) check_smart_tee_pin_(__LINE__, pin, name) + +static void test_render_stream(void) +{ + static const GUID source_type = {0x1111}; + static const GUID sink1_type = {0x8888}; + static const GUID bad_type = {0x4444}; + + ICaptureGraphBuilder2 *capture_graph = create_capture_graph(); + struct testfilter source, transform, sink, identity; + IGraphBuilder *graph; + HRESULT hr; + ULONG ref; + + CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, &IID_IGraphBuilder, (void **)&graph); + hr = ICaptureGraphBuilder2_SetFiltergraph(capture_graph, graph); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + testfilter_init(&source); + testfilter_init(&transform); + testfilter_init(&sink); + testfilter_init(&identity); + IGraphBuilder_AddFilter(graph, &source.filter.IBaseFilter_iface, L"source"); + IGraphBuilder_AddFilter(graph, &transform.filter.IBaseFilter_iface, L"transform"); + IGraphBuilder_AddFilter(graph, &sink.filter.IBaseFilter_iface, L"sink"); + + source.source_type = source_type; + transform.sink_type = &source_type; + transform.source_type = sink1_type; + sink.sink_type = &sink1_type; + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(source.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(!source.source2.pin.pin.peer, "Pin should not be connected.\n"); + ok(!sink.sink2.pin.pin.peer, "Pin should not be connected.\n"); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(source.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + todo_wine ok(source.source2.pin.pin.peer == &transform.sink2.pin.pin.IPin_iface, "Got wrong connection.\n"); + todo_wine ok(transform.source2.pin.pin.peer == &sink.sink2.pin.pin.IPin_iface, "Got wrong connection.\n"); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + todo_wine ok(hr == E_FAIL, "Got hr %#x.\n", hr); + + todo_wine disconnect_pins(graph, &source.source2); + todo_wine disconnect_pins(graph, &transform.source2); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, NULL, + (IUnknown *)&transform.source2.pin.pin.IPin_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(source.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source2.pin.pin.peer == &sink.sink2.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(!source.source2.pin.pin.peer, "Pin should not be connected.\n"); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == E_FAIL, "Got hr %#x.\n", hr); + + disconnect_pins(graph, &transform.source2); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &transform.filter.IBaseFilter_iface); + todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(source.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + todo_wine ok(source.source2.pin.pin.peer == &transform.sink2.pin.pin.IPin_iface, "Got wrong connection.\n"); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(source.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + todo_wine ok(source.source2.pin.pin.peer == &transform.sink2.pin.pin.IPin_iface, "Got wrong connection.\n"); + todo_wine ok(transform.source2.pin.pin.peer == &sink.sink2.pin.pin.IPin_iface, "Got wrong connection.\n"); + todo_wine disconnect_pins(graph, &source.source2); + todo_wine disconnect_pins(graph, &transform.source2); + + /* Test from a source pin. */ + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, NULL, + (IUnknown *)&source.source1.pin.pin.IPin_iface, NULL, &sink.filter.IBaseFilter_iface); + todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(source.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + todo_wine ok(transform.source2.pin.pin.peer == &sink.sink2.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(!source.source2.pin.pin.peer, "Pin should not be connected.\n"); + todo_wine disconnect_pins(graph, &transform.source2); + + /* Only the first eligible source is tried. */ + source.source_type = bad_type; + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == VFW_E_CANNOT_CONNECT, "Got hr %#x.\n", hr); + source.source_type = source_type; + + disconnect_pins(graph, &transform.source1); + disconnect_pins(graph, &source.source1); + + /* Test intermediate filters. */ + + IGraphBuilder_AddFilter(graph, &identity.filter.IBaseFilter_iface, L"identity"); + identity.source_type = source_type; + identity.sink_type = &source_type; + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, + &identity.filter.IBaseFilter_iface, &sink.filter.IBaseFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(source.source1.pin.pin.peer == &identity.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(identity.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + disconnect_pins(graph, &source.source1); + disconnect_pins(graph, &identity.source1); + disconnect_pins(graph, &transform.source1); + + identity.sink_type = &bad_type; + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, + &identity.filter.IBaseFilter_iface, &sink.filter.IBaseFilter_iface); + todo_wine ok(hr == E_FAIL, "Got hr %#x.\n", hr); + ok(!source.source1.pin.pin.peer, "Pin should not be connected.\n"); + ok(!identity.source1.pin.pin.peer, "Pin should not be connected.\n"); + ok(!transform.source1.pin.pin.peer, "Pin should not be connected.\n"); + + identity.source_type = sink1_type; + identity.sink_type = &sink1_type; + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, + &identity.filter.IBaseFilter_iface, &sink.filter.IBaseFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(source.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source1.pin.pin.peer == &identity.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(identity.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + disconnect_pins(graph, &source.source1); + disconnect_pins(graph, &transform.source1); + disconnect_pins(graph, &identity.source1); + + identity.source_type = bad_type; + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, + &identity.filter.IBaseFilter_iface, &sink.filter.IBaseFilter_iface); + ok(hr == VFW_E_CANNOT_CONNECT, "Got hr %#x.\n", hr); + ok(source.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source1.pin.pin.peer == &identity.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(!identity.source1.pin.pin.peer, "Pin should not be connected.\n"); + disconnect_pins(graph, &source.source1); + disconnect_pins(graph, &transform.source1); + + /* Test media types. */ + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, &bad_type, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(!source.source1.pin.pin.peer, "Pin should not be connected.\n"); + ok(!source.source2.pin.pin.peer, "Pin should not be connected.\n"); + ok(!sink.sink1.pin.pin.peer, "Pin should not be connected.\n"); + ok(!sink.sink2.pin.pin.peer, "Pin should not be connected.\n"); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, &sink1_type, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(!source.source1.pin.pin.peer, "Pin should not be connected.\n"); + ok(!source.source2.pin.pin.peer, "Pin should not be connected.\n"); + ok(!sink.sink1.pin.pin.peer, "Pin should not be connected.\n"); + ok(!sink.sink2.pin.pin.peer, "Pin should not be connected.\n"); + + identity.source_type = sink1_type; + identity.sink_type = &sink1_type; + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, &sink1_type, + (IUnknown *)&source.filter.IBaseFilter_iface, + &identity.filter.IBaseFilter_iface, &sink.filter.IBaseFilter_iface); + todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(!source.source1.pin.pin.peer, "Pin should not be connected.\n"); + ok(!source.source2.pin.pin.peer, "Pin should not be connected.\n"); + ok(!sink.sink1.pin.pin.peer, "Pin should not be connected.\n"); + ok(!sink.sink2.pin.pin.peer, "Pin should not be connected.\n"); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, &source_type, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(source.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(!source.source2.pin.pin.peer, "Pin should not be connected.\n"); + ok(!sink.sink2.pin.pin.peer, "Pin should not be connected.\n"); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, &sink1_type, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(source.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source2.pin.pin.peer == &sink.sink2.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(!source.source2.pin.pin.peer, "Pin should not be connected.\n"); + + disconnect_pins(graph, &source.source1); + disconnect_pins(graph, &transform.source1); + disconnect_pins(graph, &transform.source2); + + /* Test categories. */ + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_CC, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + ok(!source.source1.pin.pin.peer, "Pin should not be connected.\n"); + ok(!source.source2.pin.pin.peer, "Pin should not be connected.\n"); + ok(!sink.sink1.pin.pin.peer, "Pin should not be connected.\n"); + ok(!sink.sink2.pin.pin.peer, "Pin should not be connected.\n"); + + source.source1.IKsPropertySet_iface.lpVtbl = &property_set_vtbl; + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_CC, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + ok(!source.source1.pin.pin.peer, "Pin should not be connected.\n"); + ok(!source.source2.pin.pin.peer, "Pin should not be connected.\n"); + ok(!sink.sink1.pin.pin.peer, "Pin should not be connected.\n"); + ok(!sink.sink2.pin.pin.peer, "Pin should not be connected.\n"); + + source.source1.category = PIN_CATEGORY_CC; + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_CC, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(source.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(!source.source2.pin.pin.peer, "Pin should not be connected.\n"); + ok(!sink.sink2.pin.pin.peer, "Pin should not be connected.\n"); + + disconnect_pins(graph, &transform.source1); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_CC, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + ok(source.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(!transform.source1.pin.pin.peer, "Pin should not be connected.\n"); + + transform.source1.IKsPropertySet_iface.lpVtbl = &property_set_vtbl; + transform.source1.category = PIN_CATEGORY_CC; + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_CC, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + todo_wine ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + ok(source.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + todo_wine ok(!transform.source1.pin.pin.peer, "Pin should not be connected.\n"); + todo_wine ok(!sink.sink1.pin.pin.peer, "Pin should not be connected.\n"); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_CC, NULL, + (IUnknown *)&source.source1.pin.pin.IPin_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + + disconnect_pins(graph, &source.source1); + + /* Test the CAPTURE and PREVIEW categories. */ + + source.source1.IKsPropertySet_iface.lpVtbl = transform.source1.IKsPropertySet_iface.lpVtbl = NULL; + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_CAPTURE, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_PREVIEW, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + + source.source1.IKsPropertySet_iface.lpVtbl = &property_set_vtbl; + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_CAPTURE, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_PREVIEW, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + + source.source1.category = PIN_CATEGORY_PREVIEW; + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_CAPTURE, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + ok(!source.source1.pin.pin.peer, "Pin should not be connected.\n"); + todo_wine ok(!sink.sink1.pin.pin.peer, "Pin should not be connected.\n"); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_PREVIEW, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(source.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + disconnect_pins(graph, &transform.source1); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_PREVIEW, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + todo_wine ok(hr == E_FAIL, "Got hr %#x.\n", hr); + todo_wine disconnect_pins(graph, &source.source1); + + source.source1.category = PIN_CATEGORY_CAPTURE; + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_CAPTURE, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + check_smart_tee_pin(source.source1.pin.pin.peer, L"Input"); + check_smart_tee_pin(transform.sink1.pin.pin.peer, L"Capture"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_CAPTURE, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_PREVIEW, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == VFW_S_NOPREVIEWPIN, "Got hr %#x.\n", hr); + check_smart_tee_pin(source.source1.pin.pin.peer, L"Input"); + check_smart_tee_pin(transform.sink1.pin.pin.peer, L"Capture"); + check_smart_tee_pin(transform.sink2.pin.pin.peer, L"Preview"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source2.pin.pin.peer == &sink.sink2.pin.pin.IPin_iface, "Got wrong connection.\n"); + + disconnect_pins(graph, &source.source1); + IGraphBuilder_RemoveFilter(graph, &transform.filter.IBaseFilter_iface); + IGraphBuilder_AddFilter(graph, &transform.filter.IBaseFilter_iface, L"transform"); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_CC, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_PREVIEW, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == VFW_S_NOPREVIEWPIN, "Got hr %#x.\n", hr); + check_smart_tee_pin(source.source1.pin.pin.peer, L"Input"); + check_smart_tee_pin(transform.sink1.pin.pin.peer, L"Preview"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_PREVIEW, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + + disconnect_pins(graph, &source.source1); + IGraphBuilder_RemoveFilter(graph, &transform.filter.IBaseFilter_iface); + IGraphBuilder_AddFilter(graph, &transform.filter.IBaseFilter_iface, L"transform"); + + /* Test from the pin. */ + + source.source1.category = PIN_CATEGORY_CAPTURE; + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_CAPTURE, NULL, + (IUnknown *)&source.source1.pin.pin.IPin_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + check_smart_tee_pin(source.source1.pin.pin.peer, L"Input"); + check_smart_tee_pin(transform.sink1.pin.pin.peer, L"Capture"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + disconnect_pins(graph, &source.source1); + IGraphBuilder_RemoveFilter(graph, &transform.filter.IBaseFilter_iface); + IGraphBuilder_AddFilter(graph, &transform.filter.IBaseFilter_iface, L"transform"); + + /* Test when both CAPTURE and PREVIEW are available. */ + + source.source2.IKsPropertySet_iface.lpVtbl = &property_set_vtbl; + source.source2.category = PIN_CATEGORY_PREVIEW; + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_CAPTURE, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(source.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + disconnect_pins(graph, &source.source1); + disconnect_pins(graph, &transform.source1); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_PREVIEW, NULL, + (IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(source.source2.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + disconnect_pins(graph, &source.source2); + disconnect_pins(graph, &transform.source1); + + hr = ICaptureGraphBuilder2_RenderStream(capture_graph, &PIN_CATEGORY_CAPTURE, NULL, + (IUnknown *)&source.source1.pin.pin.IPin_iface, NULL, &sink.filter.IBaseFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + check_smart_tee_pin(source.source1.pin.pin.peer, L"Input"); + check_smart_tee_pin(transform.sink1.pin.pin.peer, L"Capture"); + ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n"); + disconnect_pins(graph, &source.source1); + disconnect_pins(graph, &transform.source1); + + ref = ICaptureGraphBuilder2_Release(capture_graph); + ok(!ref, "Got outstanding refcount %d.\n", ref); + ref = IGraphBuilder_Release(graph); + ok(!ref, "Got outstanding refcount %d.\n", ref); + ref = IBaseFilter_Release(&source.filter.IBaseFilter_iface); + ok(!ref, "Got outstanding refcount %d.\n", ref); + ref = IBaseFilter_Release(&transform.filter.IBaseFilter_iface); + ok(!ref, "Got outstanding refcount %d.\n", ref); + ref = IBaseFilter_Release(&sink.filter.IBaseFilter_iface); + ok(!ref, "Got outstanding refcount %d.\n", ref); +} + START_TEST(capturegraph) { CoInitializeEx(NULL, COINIT_MULTITHREADED); test_find_interface(); + test_find_pin(); + test_render_stream(); CoUninitialize(); } diff -Nru wine-development-5.5/dlls/qcap/tests/qcap.c wine-development-5.6/dlls/qcap/tests/qcap.c --- wine-development-5.5/dlls/qcap/tests/qcap.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/qcap/tests/qcap.c 2020-04-10 18:54:32.000000000 +0000 @@ -1433,7 +1433,7 @@ pin, &source_filter.IPin_iface); hr = IPin_Connect(avimux_out, &source_filter.IPin_iface, NULL); - todo_wine ok(hr == VFW_E_INVALID_DIRECTION, "Connect returned %x\n", hr); + ok(hr == VFW_E_INVALID_DIRECTION, "Connect returned %x\n", hr); hr = IBaseFilter_JoinFilterGraph(avimux, (IFilterGraph*)&GraphBuilder, NULL); ok(hr == S_OK, "JoinFilterGraph returned %x\n", hr); diff -Nru wine-development-5.5/dlls/qcap/tests/smartteefilter.c wine-development-5.6/dlls/qcap/tests/smartteefilter.c --- wine-development-5.5/dlls/qcap/tests/smartteefilter.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/qcap/tests/smartteefilter.c 2020-04-10 18:54:32.000000000 +0000 @@ -2012,30 +2012,6 @@ return This; } -static SourceFilter* create_audio_SourceFilter(void) -{ - SourceFilter *This = create_SourceFilter(); - if (!This) - return NULL; - This->mediaType.majortype = MEDIATYPE_Audio; - This->mediaType.subtype = MEDIASUBTYPE_PCM; - This->mediaType.bFixedSizeSamples = FALSE; - This->mediaType.bTemporalCompression = FALSE; - This->mediaType.lSampleSize = 0; - This->mediaType.formattype = FORMAT_WaveFormatEx; - This->mediaType.pUnk = NULL; - This->mediaType.cbFormat = sizeof(WAVEFORMATEX); - This->mediaType.pbFormat = (BYTE*) &This->audioInfo; - This->audioInfo.wFormatTag = WAVE_FORMAT_PCM; - This->audioInfo.nChannels = 1; - This->audioInfo.nSamplesPerSec = 8000; - This->audioInfo.nAvgBytesPerSec = 16000; - This->audioInfo.nBlockAlign = 2; - This->audioInfo.wBitsPerSample = 16; - This->audioInfo.cbSize = 0; - return This; -} - static void test_smart_tee_filter_in_graph(IBaseFilter *smartTeeFilter, IPin *inputPin, IPin *capturePin, IPin *previewPin) { @@ -2298,207 +2274,6 @@ ok(!ref, "Got outstanding refcount %d.\n", ref); } -static HRESULT get_connected_filter_classid(IPin *pin, GUID *guid) -{ - IPin *connectedPin = NULL; - PIN_INFO connectedPinInfo; - HRESULT hr = IPin_ConnectedTo(pin, &connectedPin); - ok(SUCCEEDED(hr), "IPin_ConnectedTo() failed, hr=0x%08x\n", hr); - if (FAILED(hr)) - goto end; - hr = IPin_QueryPinInfo(connectedPin, &connectedPinInfo); - ok(SUCCEEDED(hr), "IPin_QueryPinInfo() failed, hr=0x%08x\n", hr); - if (FAILED(hr)) - goto end; - if (connectedPinInfo.pFilter) { - hr = IBaseFilter_GetClassID(connectedPinInfo.pFilter, guid); - ok(SUCCEEDED(hr), "IBaseFilter_GetClassID() failed, hr=0x%08x\n", hr); - IBaseFilter_Release(connectedPinInfo.pFilter); - } -end: - if (connectedPin) - IPin_Release(connectedPin); - return hr; -} - -static void test_audio_preview(ICaptureGraphBuilder2 *captureGraphBuilder, IGraphBuilder *graphBuilder, - SourceFilter *audioSource, IBaseFilter *nullRenderer) -{ - GUID clsid; - HRESULT hr = ICaptureGraphBuilder2_RenderStream(captureGraphBuilder, &PIN_CATEGORY_PREVIEW, &MEDIATYPE_Audio, - (IUnknown*)&audioSource->IBaseFilter_iface, NULL, nullRenderer); - ok(hr == VFW_S_NOPREVIEWPIN, "ICaptureGraphBuilder2_RenderStream() returned hr=0x%08x\n", hr); - hr = get_connected_filter_classid(&audioSource->IPin_iface, &clsid); - if (FAILED(hr)) - return; - ok(IsEqualIID(&clsid, &CLSID_SmartTee), "unexpected connected filter %s\n", - wine_dbgstr_guid(&clsid)); -} - -static void test_audio_capture(ICaptureGraphBuilder2 *captureGraphBuilder, IGraphBuilder *graphBuilder, - SourceFilter *audioSource, IBaseFilter *nullRenderer) -{ - GUID clsid; - HRESULT hr = ICaptureGraphBuilder2_RenderStream(captureGraphBuilder, &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Audio, - (IUnknown*)&audioSource->IBaseFilter_iface, NULL, nullRenderer); - ok(hr == S_OK, "ICaptureGraphBuilder2_RenderStream() returned hr=0x%08x\n", hr); - hr = get_connected_filter_classid(&audioSource->IPin_iface, &clsid); - if (FAILED(hr)) - return; - ok(IsEqualIID(&clsid, &CLSID_SmartTee), "unexpected connected filter %s\n", - wine_dbgstr_guid(&clsid)); -} - -static void test_video_preview(ICaptureGraphBuilder2 *captureGraphBuilder, IGraphBuilder *graphBuilder, - SourceFilter *videoSource, IBaseFilter *nullRenderer) -{ - GUID clsid; - HRESULT hr = ICaptureGraphBuilder2_RenderStream(captureGraphBuilder, &PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, - (IUnknown*)&videoSource->IBaseFilter_iface, NULL, nullRenderer); - ok(hr == VFW_S_NOPREVIEWPIN, "ICaptureGraphBuilder2_RenderStream() failed, hr=0x%08x\n", hr); - hr = get_connected_filter_classid(&videoSource->IPin_iface, &clsid); - if (FAILED(hr)) - return; - ok(IsEqualIID(&clsid, &CLSID_SmartTee), "unexpected connected filter %s\n", - wine_dbgstr_guid(&clsid)); -} - -static void test_video_capture(ICaptureGraphBuilder2 *captureGraphBuilder, IGraphBuilder *graphBuilder, - SourceFilter *videoSource, IBaseFilter *nullRenderer) -{ - GUID clsid; - HRESULT hr = ICaptureGraphBuilder2_RenderStream(captureGraphBuilder, &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, - (IUnknown*)&videoSource->IBaseFilter_iface, NULL, nullRenderer); - ok(hr == S_OK, "ICaptureGraphBuilder2_RenderStream() failed, hr=0x%08x\n", hr); - hr = get_connected_filter_classid(&videoSource->IPin_iface, &clsid); - if (FAILED(hr)) - return; - ok(IsEqualIID(&clsid, &CLSID_SmartTee), "unexpected connected filter %s\n", - wine_dbgstr_guid(&clsid)); -} - -static void test_audio_smart_tee_filter_auto_insertion( - void (*test_function)(ICaptureGraphBuilder2 *cgb, IGraphBuilder *gb, - SourceFilter *audioSource, IBaseFilter *nullRenderer)) -{ - HRESULT hr; - ICaptureGraphBuilder2 *captureGraphBuilder = NULL; - IGraphBuilder *graphBuilder = NULL; - IBaseFilter *nullRenderer = NULL; - SourceFilter *audioSource = NULL; - - hr = CoCreateInstance(&CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER, - &IID_ICaptureGraphBuilder2, (void**)&captureGraphBuilder); - ok(SUCCEEDED(hr), "couldn't create capture graph builder, hr=0x%08x\n", hr); - if (FAILED(hr)) - goto end; - - hr = CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, &IID_IGraphBuilder, - (LPVOID*)&graphBuilder); - ok(SUCCEEDED(hr), "couldn't create graph builder, hr=0x%08x\n", hr); - if (FAILED(hr)) - goto end; - - hr = ICaptureGraphBuilder2_SetFiltergraph(captureGraphBuilder, graphBuilder); - ok(SUCCEEDED(hr), "ICaptureGraphBuilder2_SetFilterGraph() failed, hr=0x%08x\n", hr); - if (FAILED(hr)) - goto end; - - hr = CoCreateInstance(&CLSID_NullRenderer, NULL, CLSCTX_INPROC_SERVER, - &IID_IBaseFilter, (LPVOID*)&nullRenderer); - ok(SUCCEEDED(hr) || - /* Windows 2008: http://stackoverflow.com/questions/29410348/initialize-nullrender-failed-with-error-regdb-e-classnotreg-on-win2008-r2 */ - broken(hr == REGDB_E_CLASSNOTREG), "couldn't create NullRenderer, hr=0x%08x\n", hr); - if (FAILED(hr)) - goto end; - hr = IGraphBuilder_AddFilter(graphBuilder, nullRenderer, NULL); - ok(SUCCEEDED(hr), "IGraphBuilder_AddFilter() failed, hr=0x%08x\n", hr); - if (FAILED(hr)) - goto end; - - audioSource = create_audio_SourceFilter(); - ok(audioSource != NULL, "couldn't create audio source\n"); - if (audioSource == NULL) - goto end; - hr = IGraphBuilder_AddFilter(graphBuilder, &audioSource->IBaseFilter_iface, NULL); - ok(SUCCEEDED(hr), "IGraphBuilder_AddFilter() failed, hr=0x%08x\n", hr); - if (FAILED(hr)) - goto end; - - test_function(captureGraphBuilder, graphBuilder, audioSource, nullRenderer); - -end: - if (nullRenderer) - IBaseFilter_Release(nullRenderer); - if (audioSource) - IBaseFilter_Release(&audioSource->IBaseFilter_iface); - if (captureGraphBuilder) - ICaptureGraphBuilder2_Release(captureGraphBuilder); - if (graphBuilder) - IGraphBuilder_Release(graphBuilder); -} - -static void test_video_smart_tee_filter_auto_insertion( - void (*test_function)(ICaptureGraphBuilder2 *cgb, IGraphBuilder *gb, - SourceFilter *videoSource, IBaseFilter *nullRenderer)) -{ - HRESULT hr; - ICaptureGraphBuilder2 *captureGraphBuilder = NULL; - IGraphBuilder *graphBuilder = NULL; - IBaseFilter *nullRenderer = NULL; - SourceFilter *videoSource = NULL; - - hr = CoCreateInstance(&CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER, - &IID_ICaptureGraphBuilder2, (void**)&captureGraphBuilder); - ok(SUCCEEDED(hr), "couldn't create capture graph builder, hr=0x%08x\n", hr); - if (FAILED(hr)) - goto end; - - hr = CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, &IID_IGraphBuilder, - (LPVOID*)&graphBuilder); - ok(SUCCEEDED(hr), "couldn't create graph builder, hr=0x%08x\n", hr); - if (FAILED(hr)) - goto end; - - hr = ICaptureGraphBuilder2_SetFiltergraph(captureGraphBuilder, graphBuilder); - ok(SUCCEEDED(hr), "ICaptureGraphBuilder2_SetFilterGraph() failed, hr=0x%08x\n", hr); - if (FAILED(hr)) - goto end; - - hr = CoCreateInstance(&CLSID_NullRenderer, NULL, CLSCTX_INPROC_SERVER, - &IID_IBaseFilter, (LPVOID*)&nullRenderer); - ok(SUCCEEDED(hr) || - /* Windows 2008: http://stackoverflow.com/questions/29410348/initialize-nullrender-failed-with-error-regdb-e-classnotreg-on-win2008-r2 */ - broken(hr == REGDB_E_CLASSNOTREG), "couldn't create NullRenderer, hr=0x%08x\n", hr); - if (FAILED(hr)) - goto end; - hr = IGraphBuilder_AddFilter(graphBuilder, nullRenderer, NULL); - ok(SUCCEEDED(hr), "IGraphBuilder_AddFilter() failed, hr=0x%08x\n", hr); - if (FAILED(hr)) - goto end; - - videoSource = create_video_SourceFilter(); - ok(videoSource != NULL, "couldn't create audio source\n"); - if (videoSource == NULL) - goto end; - hr = IGraphBuilder_AddFilter(graphBuilder, &videoSource->IBaseFilter_iface, NULL); - ok(SUCCEEDED(hr), "IGraphBuilder_AddFilter() failed, hr=0x%08x\n", hr); - if (FAILED(hr)) - goto end; - - test_function(captureGraphBuilder, graphBuilder, videoSource, nullRenderer); - -end: - if (nullRenderer) - IBaseFilter_Release(nullRenderer); - if (videoSource) - IBaseFilter_Release(&videoSource->IBaseFilter_iface); - if (captureGraphBuilder) - ICaptureGraphBuilder2_Release(captureGraphBuilder); - if (graphBuilder) - IGraphBuilder_Release(graphBuilder); -} - struct testfilter { struct strmbase_filter filter; @@ -3005,12 +2780,6 @@ test_smart_tee_filter(); - test_audio_smart_tee_filter_auto_insertion(test_audio_preview); - test_audio_smart_tee_filter_auto_insertion(test_audio_capture); - - test_video_smart_tee_filter_auto_insertion(test_video_preview); - test_video_smart_tee_filter_auto_insertion(test_video_capture); - CloseHandle(event); CoUninitialize(); } diff -Nru wine-development-5.5/dlls/qcap/v4l.c wine-development-5.6/dlls/qcap/v4l.c --- wine-development-5.5/dlls/qcap/v4l.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/qcap/v4l.c 2020-04-10 18:54:32.000000000 +0000 @@ -58,7 +58,6 @@ #include "vfwmsgs.h" #include "amvideo.h" #include "wine/debug.h" -#include "wine/library.h" #include "qcap_main.h" #include "capture.h" @@ -81,12 +80,12 @@ if (video_lib) return TRUE; - if (!(video_lib = wine_dlopen(SONAME_LIBV4L2, RTLD_NOW, NULL, 0))) + if (!(video_lib = dlopen(SONAME_LIBV4L2, RTLD_NOW))) return FALSE; - video_open = wine_dlsym(video_lib, "v4l2_open", NULL, 0); - video_close = wine_dlsym(video_lib, "v4l2_close", NULL, 0); - video_ioctl = wine_dlsym(video_lib, "v4l2_ioctl", NULL, 0); - video_read = wine_dlsym(video_lib, "v4l2_read", NULL, 0); + video_open = dlsym(video_lib, "v4l2_open"); + video_close = dlsym(video_lib, "v4l2_close"); + video_ioctl = dlsym(video_lib, "v4l2_ioctl"); + video_read = dlsym(video_lib, "v4l2_read"); return TRUE; #else diff -Nru wine-development-5.5/dlls/qedit/nullrenderer.c wine-development-5.6/dlls/qedit/nullrenderer.c --- wine-development-5.5/dlls/qedit/nullrenderer.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/qedit/nullrenderer.c 2020-04-10 18:54:32.000000000 +0000 @@ -26,14 +26,14 @@ WINE_DEFAULT_DEBUG_CHANNEL(qedit); -typedef struct NullRendererImpl +struct null_renderer { struct strmbase_renderer renderer; -} NullRendererImpl; +}; -static inline NullRendererImpl *impl_from_strmbase_renderer(struct strmbase_renderer *iface) +static struct null_renderer *impl_from_strmbase_renderer(struct strmbase_renderer *iface) { - return CONTAINING_RECORD(iface, NullRendererImpl, renderer); + return CONTAINING_RECORD(iface, struct null_renderer, renderer); } static HRESULT WINAPI NullRenderer_DoRenderSample(struct strmbase_renderer *iface, IMediaSample *sample) @@ -49,10 +49,10 @@ static void null_renderer_destroy(struct strmbase_renderer *iface) { - NullRendererImpl *filter = impl_from_strmbase_renderer(iface); + struct null_renderer *filter = impl_from_strmbase_renderer(iface); strmbase_renderer_cleanup(&filter->renderer); - CoTaskMemFree(filter); + free(filter); } static const struct strmbase_renderer_ops renderer_ops = @@ -64,20 +64,14 @@ HRESULT null_renderer_create(IUnknown *outer, IUnknown **out) { - HRESULT hr; - NullRendererImpl *pNullRenderer; - - *out = NULL; - - pNullRenderer = CoTaskMemAlloc(sizeof(NullRendererImpl)); + struct null_renderer *object; - hr = strmbase_renderer_init(&pNullRenderer->renderer, outer, - &CLSID_NullRenderer, L"In", &renderer_ops); + if (!(object = calloc(1, sizeof(*object)))) + return E_OUTOFMEMORY; - if (FAILED(hr)) - CoTaskMemFree(pNullRenderer); - else - *out = &pNullRenderer->renderer.filter.IUnknown_inner; + strmbase_renderer_init(&object->renderer, outer, &CLSID_NullRenderer, L"In", &renderer_ops); + TRACE("Created null renderer %p.\n", object); + *out = &object->renderer.filter.IUnknown_inner; return S_OK; } diff -Nru wine-development-5.5/dlls/qedit/samplegrabber.c wine-development-5.6/dlls/qedit/samplegrabber.c --- wine-development-5.5/dlls/qedit/samplegrabber.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/qedit/samplegrabber.c 2020-04-10 18:54:32.000000000 +0000 @@ -33,14 +33,13 @@ WINE_DEFAULT_DEBUG_CHANNEL(qedit); -/* Sample Grabber filter implementation */ -typedef struct _SG_Impl { +struct sample_grabber +{ struct strmbase_filter filter; ISampleGrabber ISampleGrabber_iface; struct strmbase_source source; - /* IMediaSeeking and IMediaPosition are implemented by ISeekingPassThru */ - IUnknown *seekthru_unk; + struct strmbase_passthrough passthrough; struct strmbase_sink sink; AM_MEDIA_TYPE filter_mt; @@ -52,7 +51,7 @@ LONG oneShot; LONG bufferLen; void* bufferData; -} SG_Impl; +}; enum { OneShot_None, @@ -60,24 +59,24 @@ OneShot_Past, }; -static inline SG_Impl *impl_from_strmbase_filter(struct strmbase_filter *iface) +static struct sample_grabber *impl_from_strmbase_filter(struct strmbase_filter *iface) { - return CONTAINING_RECORD(iface, SG_Impl, filter); + return CONTAINING_RECORD(iface, struct sample_grabber, filter); } -static inline SG_Impl *impl_from_ISampleGrabber(ISampleGrabber *iface) +static struct sample_grabber *impl_from_ISampleGrabber(ISampleGrabber *iface) { - return CONTAINING_RECORD(iface, SG_Impl, ISampleGrabber_iface); + return CONTAINING_RECORD(iface, struct sample_grabber, ISampleGrabber_iface); } -static inline SG_Impl *impl_from_IMemInputPin(IMemInputPin *iface) +static struct sample_grabber *impl_from_IMemInputPin(IMemInputPin *iface) { - return CONTAINING_RECORD(iface, SG_Impl, IMemInputPin_iface); + return CONTAINING_RECORD(iface, struct sample_grabber, IMemInputPin_iface); } /* Cleanup at end of life */ -static void SampleGrabber_cleanup(SG_Impl *This) +static void SampleGrabber_cleanup(struct sample_grabber *This) { TRACE("(%p)\n", This); if (This->allocator) @@ -86,13 +85,11 @@ ISampleGrabberCB_Release(This->grabberIface); FreeMediaType(&This->filter_mt); CoTaskMemFree(This->bufferData); - if(This->seekthru_unk) - IUnknown_Release(This->seekthru_unk); } static struct strmbase_pin *sample_grabber_get_pin(struct strmbase_filter *iface, unsigned int index) { - SG_Impl *filter = impl_from_strmbase_filter(iface); + struct sample_grabber *filter = impl_from_strmbase_filter(iface); if (index == 0) return &filter->sink.pin; @@ -103,18 +100,19 @@ static void sample_grabber_destroy(struct strmbase_filter *iface) { - SG_Impl *filter = impl_from_strmbase_filter(iface); + struct sample_grabber *filter = impl_from_strmbase_filter(iface); SampleGrabber_cleanup(filter); strmbase_sink_cleanup(&filter->sink); strmbase_source_cleanup(&filter->source); + strmbase_passthrough_cleanup(&filter->passthrough); strmbase_filter_cleanup(&filter->filter); - CoTaskMemFree(filter); + free(filter); } static HRESULT sample_grabber_query_interface(struct strmbase_filter *iface, REFIID iid, void **out) { - SG_Impl *filter = impl_from_strmbase_filter(iface); + struct sample_grabber *filter = impl_from_strmbase_filter(iface); if (IsEqualGUID(iid, &IID_ISampleGrabber)) *out = &filter->ISampleGrabber_iface; @@ -133,7 +131,7 @@ }; /* Helper that buffers data and/or calls installed sample callbacks */ -static void SampleGrabber_callback(SG_Impl *This, IMediaSample *sample) +static void SampleGrabber_callback(struct sample_grabber *This, IMediaSample *sample) { double time = 0.0; REFERENCE_TIME tStart, tEnd; @@ -194,31 +192,31 @@ static HRESULT WINAPI SampleGrabber_ISampleGrabber_QueryInterface(ISampleGrabber *iface, REFIID riid, void **ppv) { - SG_Impl *This = impl_from_ISampleGrabber(iface); - return IUnknown_QueryInterface(This->filter.outer_unk, riid, ppv); + struct sample_grabber *filter = impl_from_ISampleGrabber(iface); + return IUnknown_QueryInterface(filter->filter.outer_unk, riid, ppv); } /* IUnknown */ static ULONG WINAPI SampleGrabber_ISampleGrabber_AddRef(ISampleGrabber *iface) { - SG_Impl *This = impl_from_ISampleGrabber(iface); - return IUnknown_AddRef(This->filter.outer_unk); + struct sample_grabber *filter = impl_from_ISampleGrabber(iface); + return IUnknown_AddRef(filter->filter.outer_unk); } /* IUnknown */ static ULONG WINAPI SampleGrabber_ISampleGrabber_Release(ISampleGrabber *iface) { - SG_Impl *This = impl_from_ISampleGrabber(iface); - return IUnknown_Release(This->filter.outer_unk); + struct sample_grabber *filter = impl_from_ISampleGrabber(iface); + return IUnknown_Release(filter->filter.outer_unk); } /* ISampleGrabber */ static HRESULT WINAPI SampleGrabber_ISampleGrabber_SetOneShot(ISampleGrabber *iface, BOOL oneShot) { - SG_Impl *This = impl_from_ISampleGrabber(iface); + struct sample_grabber *This = impl_from_ISampleGrabber(iface); TRACE("(%p)->(%u)\n", This, oneShot); This->oneShot = oneShot ? OneShot_Wait : OneShot_None; return S_OK; @@ -227,7 +225,7 @@ /* ISampleGrabber */ static HRESULT WINAPI SampleGrabber_ISampleGrabber_SetMediaType(ISampleGrabber *iface, const AM_MEDIA_TYPE *mt) { - SG_Impl *filter = impl_from_ISampleGrabber(iface); + struct sample_grabber *filter = impl_from_ISampleGrabber(iface); TRACE("filter %p, mt %p.\n", filter, mt); strmbase_dump_media_type(mt); @@ -244,7 +242,7 @@ static HRESULT WINAPI SampleGrabber_ISampleGrabber_GetConnectedMediaType(ISampleGrabber *iface, AM_MEDIA_TYPE *mt) { - SG_Impl *filter = impl_from_ISampleGrabber(iface); + struct sample_grabber *filter = impl_from_ISampleGrabber(iface); TRACE("filter %p, mt %p.\n", filter, mt); @@ -262,7 +260,7 @@ static HRESULT WINAPI SampleGrabber_ISampleGrabber_SetBufferSamples(ISampleGrabber *iface, BOOL bufferEm) { - SG_Impl *This = impl_from_ISampleGrabber(iface); + struct sample_grabber *This = impl_from_ISampleGrabber(iface); TRACE("(%p)->(%u)\n", This, bufferEm); EnterCriticalSection(&This->filter.csFilter); if (bufferEm) { @@ -279,7 +277,7 @@ static HRESULT WINAPI SampleGrabber_ISampleGrabber_GetCurrentBuffer(ISampleGrabber *iface, LONG *bufSize, LONG *buffer) { - SG_Impl *This = impl_from_ISampleGrabber(iface); + struct sample_grabber *This = impl_from_ISampleGrabber(iface); HRESULT ret = S_OK; TRACE("(%p)->(%p, %p)\n", This, bufSize, buffer); if (!bufSize) @@ -317,7 +315,7 @@ static HRESULT WINAPI SampleGrabber_ISampleGrabber_SetCallback(ISampleGrabber *iface, ISampleGrabberCB *cb, LONG whichMethod) { - SG_Impl *This = impl_from_ISampleGrabber(iface); + struct sample_grabber *This = impl_from_ISampleGrabber(iface); TRACE("(%p)->(%p, %u)\n", This, cb, whichMethod); if (This->grabberIface) ISampleGrabberCB_Release(This->grabberIface); @@ -330,19 +328,19 @@ static HRESULT WINAPI SampleGrabber_IMemInputPin_QueryInterface(IMemInputPin *iface, REFIID iid, void **out) { - SG_Impl *filter = impl_from_IMemInputPin(iface); + struct sample_grabber *filter = impl_from_IMemInputPin(iface); return IPin_QueryInterface(&filter->sink.pin.IPin_iface, iid, out); } static ULONG WINAPI SampleGrabber_IMemInputPin_AddRef(IMemInputPin *iface) { - SG_Impl *filter = impl_from_IMemInputPin(iface); + struct sample_grabber *filter = impl_from_IMemInputPin(iface); return IPin_AddRef(&filter->sink.pin.IPin_iface); } static ULONG WINAPI SampleGrabber_IMemInputPin_Release(IMemInputPin *iface) { - SG_Impl *filter = impl_from_IMemInputPin(iface); + struct sample_grabber *filter = impl_from_IMemInputPin(iface); return IPin_Release(&filter->sink.pin.IPin_iface); } @@ -350,7 +348,7 @@ static HRESULT WINAPI SampleGrabber_IMemInputPin_GetAllocator(IMemInputPin *iface, IMemAllocator **allocator) { - SG_Impl *This = impl_from_IMemInputPin(iface); + struct sample_grabber *This = impl_from_IMemInputPin(iface); TRACE("(%p)->(%p) allocator = %p\n", This, allocator, This->allocator); if (!allocator) return E_POINTER; @@ -365,7 +363,7 @@ static HRESULT WINAPI SampleGrabber_IMemInputPin_NotifyAllocator(IMemInputPin *iface, IMemAllocator *allocator, BOOL readOnly) { - SG_Impl *This = impl_from_IMemInputPin(iface); + struct sample_grabber *This = impl_from_IMemInputPin(iface); TRACE("(%p)->(%p, %u) allocator = %p\n", This, allocator, readOnly, This->allocator); if (This->allocator == allocator) return S_OK; @@ -381,7 +379,7 @@ static HRESULT WINAPI SampleGrabber_IMemInputPin_GetAllocatorRequirements(IMemInputPin *iface, ALLOCATOR_PROPERTIES *props) { - SG_Impl *This = impl_from_IMemInputPin(iface); + struct sample_grabber *This = impl_from_IMemInputPin(iface); FIXME("(%p)->(%p): semi-stub\n", This, props); if (!props) return E_POINTER; @@ -392,7 +390,7 @@ static HRESULT WINAPI SampleGrabber_IMemInputPin_Receive(IMemInputPin *iface, IMediaSample *sample) { - SG_Impl *This = impl_from_IMemInputPin(iface); + struct sample_grabber *This = impl_from_IMemInputPin(iface); HRESULT hr; TRACE("(%p)->(%p) output = %p, grabber = %p\n", This, sample, This->source.pMemInputPin, This->grabberIface); if (!sample) @@ -414,7 +412,7 @@ static HRESULT WINAPI SampleGrabber_IMemInputPin_ReceiveMultiple(IMemInputPin *iface, IMediaSample **samples, LONG nSamples, LONG *nProcessed) { - SG_Impl *This = impl_from_IMemInputPin(iface); + struct sample_grabber *This = impl_from_IMemInputPin(iface); LONG idx; TRACE("(%p)->(%p, %u, %p) output = %p, grabber = %p\n", This, samples, nSamples, nProcessed, This->source.pMemInputPin, This->grabberIface); if (!samples || !nProcessed) @@ -430,7 +428,7 @@ static HRESULT WINAPI SampleGrabber_IMemInputPin_ReceiveCanBlock(IMemInputPin *iface) { - SG_Impl *This = impl_from_IMemInputPin(iface); + struct sample_grabber *This = impl_from_IMemInputPin(iface); TRACE("(%p)\n", This); return This->source.pMemInputPin ? IMemInputPin_ReceiveCanBlock(This->source.pMemInputPin) : S_OK; } @@ -462,14 +460,14 @@ SampleGrabber_IMemInputPin_ReceiveCanBlock, }; -static inline SG_Impl *impl_from_sink_pin(struct strmbase_pin *iface) +static struct sample_grabber *impl_from_sink_pin(struct strmbase_pin *iface) { - return CONTAINING_RECORD(iface, SG_Impl, sink.pin); + return CONTAINING_RECORD(iface, struct sample_grabber, sink.pin); } static HRESULT sample_grabber_sink_query_interface(struct strmbase_pin *iface, REFIID iid, void **out) { - SG_Impl *filter = impl_from_sink_pin(iface); + struct sample_grabber *filter = impl_from_sink_pin(iface); if (IsEqualGUID(iid, &IID_IMemInputPin)) *out = &filter->IMemInputPin_iface; @@ -480,7 +478,7 @@ return S_OK; } -static BOOL check_filter_mt(SG_Impl *filter, const AM_MEDIA_TYPE *mt) +static BOOL check_filter_mt(struct sample_grabber *filter, const AM_MEDIA_TYPE *mt) { if (IsEqualGUID(&filter->filter_mt.majortype, &GUID_NULL)) return TRUE; @@ -502,7 +500,7 @@ static HRESULT sample_grabber_sink_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt) { - SG_Impl *filter = impl_from_sink_pin(iface); + struct sample_grabber *filter = impl_from_sink_pin(iface); return check_filter_mt(filter, mt) ? S_OK : S_FALSE; } @@ -510,7 +508,7 @@ static HRESULT sample_grabber_sink_get_media_type(struct strmbase_pin *iface, unsigned int index, AM_MEDIA_TYPE *mt) { - SG_Impl *filter = impl_from_sink_pin(iface); + struct sample_grabber *filter = impl_from_sink_pin(iface); IEnumMediaTypes *enummt; AM_MEDIA_TYPE *pmt; HRESULT hr; @@ -541,24 +539,29 @@ .base.pin_get_media_type = sample_grabber_sink_get_media_type, }; -static inline SG_Impl *impl_from_source_pin(struct strmbase_pin *iface) +static struct sample_grabber *impl_from_source_pin(struct strmbase_pin *iface) { - return CONTAINING_RECORD(iface, SG_Impl, source.pin); + return CONTAINING_RECORD(iface, struct sample_grabber, source.pin); } static HRESULT sample_grabber_source_query_interface(struct strmbase_pin *iface, REFIID iid, void **out) { - SG_Impl *filter = impl_from_source_pin(iface); + struct sample_grabber *filter = impl_from_source_pin(iface); - if (IsEqualGUID(iid, &IID_IMediaPosition) || IsEqualGUID(iid, &IID_IMediaSeeking)) - return IUnknown_QueryInterface(filter->seekthru_unk, iid, out); + if (IsEqualGUID(iid, &IID_IMediaPosition)) + *out = &filter->passthrough.IMediaPosition_iface; + else if (IsEqualGUID(iid, &IID_IMediaSeeking)) + *out = &filter->passthrough.IMediaSeeking_iface; else return E_NOINTERFACE; + + IUnknown_AddRef((IUnknown *)*out); + return S_OK; } static HRESULT sample_grabber_source_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt) { - SG_Impl *filter = impl_from_source_pin(iface); + struct sample_grabber *filter = impl_from_source_pin(iface); if (filter->sink.pin.peer && IPin_QueryAccept(filter->sink.pin.peer, mt) != S_OK) return S_FALSE; @@ -569,7 +572,7 @@ static HRESULT sample_grabber_source_get_media_type(struct strmbase_pin *iface, unsigned int index, AM_MEDIA_TYPE *mt) { - SG_Impl *filter = impl_from_source_pin(iface); + struct sample_grabber *filter = impl_from_source_pin(iface); IEnumMediaTypes *enummt; AM_MEDIA_TYPE *pmt; HRESULT hr; @@ -602,7 +605,7 @@ static HRESULT WINAPI sample_grabber_source_DecideAllocator(struct strmbase_source *iface, IMemInputPin *peer, IMemAllocator **allocator) { - SG_Impl *filter = impl_from_source_pin(&iface->pin); + struct sample_grabber *filter = impl_from_source_pin(&iface->pin); const AM_MEDIA_TYPE *mt = &iface->pin.mt; if (!compare_media_types(mt, &filter->sink.pin.mt)) @@ -636,39 +639,27 @@ HRESULT sample_grabber_create(IUnknown *outer, IUnknown **out) { - SG_Impl* obj = NULL; - ISeekingPassThru *passthru; - HRESULT hr; + struct sample_grabber *object; - obj = CoTaskMemAlloc(sizeof(SG_Impl)); - if (NULL == obj) { - *out = NULL; + if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; - } - ZeroMemory(obj, sizeof(SG_Impl)); - strmbase_filter_init(&obj->filter, outer, &CLSID_SampleGrabber, &filter_ops); - obj->ISampleGrabber_iface.lpVtbl = &ISampleGrabber_VTable; - obj->IMemInputPin_iface.lpVtbl = &IMemInputPin_VTable; - - strmbase_sink_init(&obj->sink, &obj->filter, L"In", &sink_ops, NULL); - strmbase_source_init(&obj->source, &obj->filter, L"Out", &source_ops); - - obj->allocator = NULL; - obj->grabberIface = NULL; - obj->grabberMethod = -1; - obj->oneShot = OneShot_None; - obj->bufferLen = -1; - obj->bufferData = NULL; - - hr = CoCreateInstance(&CLSID_SeekingPassThru, &obj->filter.IUnknown_inner, - CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&obj->seekthru_unk); - if(hr) - return hr; - IUnknown_QueryInterface(obj->seekthru_unk, &IID_ISeekingPassThru, (void**)&passthru); - ISeekingPassThru_Init(passthru, FALSE, &obj->sink.pin.IPin_iface); - ISeekingPassThru_Release(passthru); + strmbase_filter_init(&object->filter, outer, &CLSID_SampleGrabber, &filter_ops); + object->ISampleGrabber_iface.lpVtbl = &ISampleGrabber_VTable; + object->IMemInputPin_iface.lpVtbl = &IMemInputPin_VTable; + + strmbase_sink_init(&object->sink, &object->filter, L"In", &sink_ops, NULL); + + strmbase_source_init(&object->source, &object->filter, L"Out", &source_ops); + strmbase_passthrough_init(&object->passthrough, (IUnknown *)&object->source.pin.IPin_iface); + ISeekingPassThru_Init(&object->passthrough.ISeekingPassThru_iface, FALSE, + &object->sink.pin.IPin_iface); + + object->grabberMethod = -1; + object->oneShot = OneShot_None; + object->bufferLen = -1; - *out = &obj->filter.IUnknown_inner; + TRACE("Created sample grabber %p.\n", object); + *out = &object->filter.IUnknown_inner; return S_OK; } diff -Nru wine-development-5.5/dlls/quartz/acmwrapper.c wine-development-5.6/dlls/quartz/acmwrapper.c --- wine-development-5.5/dlls/quartz/acmwrapper.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/quartz/acmwrapper.c 2020-04-10 18:54:32.000000000 +0000 @@ -35,7 +35,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(quartz); -typedef struct ACMWrapperImpl +struct acm_wrapper { struct strmbase_filter filter; CRITICAL_SECTION stream_cs; @@ -43,7 +43,7 @@ struct strmbase_source source; IQualityControl source_IQualityControl_iface; IQualityControl *source_qc_sink; - IUnknown *seeking; + struct strmbase_passthrough passthrough; struct strmbase_sink sink; @@ -53,16 +53,16 @@ LONGLONG lasttime_real; LONGLONG lasttime_sent; -} ACMWrapperImpl; +}; -static inline ACMWrapperImpl *impl_from_strmbase_filter(struct strmbase_filter *iface) +static struct acm_wrapper *impl_from_strmbase_filter(struct strmbase_filter *iface) { - return CONTAINING_RECORD(iface, ACMWrapperImpl, filter); + return CONTAINING_RECORD(iface, struct acm_wrapper, filter); } static HRESULT acm_wrapper_sink_query_interface(struct strmbase_pin *iface, REFIID iid, void **out) { - ACMWrapperImpl *filter = impl_from_strmbase_filter(iface->filter); + struct acm_wrapper *filter = impl_from_strmbase_filter(iface->filter); if (IsEqualGUID(iid, &IID_IMemInputPin)) *out = &filter->sink.IMemInputPin_iface; @@ -80,7 +80,7 @@ static HRESULT WINAPI acm_wrapper_sink_Receive(struct strmbase_sink *iface, IMediaSample *pSample) { - ACMWrapperImpl *This = impl_from_strmbase_filter(iface->pin.filter); + struct acm_wrapper *This = impl_from_strmbase_filter(iface->pin.filter); IMediaSample* pOutSample = NULL; DWORD cbDstStream, cbSrcStream; LPBYTE pbDstStream; @@ -278,7 +278,7 @@ static HRESULT acm_wrapper_sink_connect(struct strmbase_sink *iface, IPin *peer, const AM_MEDIA_TYPE *mt) { - ACMWrapperImpl *filter = impl_from_strmbase_filter(iface->pin.filter); + struct acm_wrapper *filter = impl_from_strmbase_filter(iface->pin.filter); const WAVEFORMATEX *wfx = (WAVEFORMATEX *)mt->pbFormat; HACMSTREAM drv; MMRESULT res; @@ -312,7 +312,7 @@ static void acm_wrapper_sink_disconnect(struct strmbase_sink *iface) { - ACMWrapperImpl *filter = impl_from_strmbase_filter(iface->pin.filter); + struct acm_wrapper *filter = impl_from_strmbase_filter(iface->pin.filter); if (filter->has) acmStreamClose(filter->has, 0); @@ -332,12 +332,12 @@ static HRESULT acm_wrapper_source_query_interface(struct strmbase_pin *iface, REFIID iid, void **out) { - ACMWrapperImpl *filter = impl_from_strmbase_filter(iface->filter); + struct acm_wrapper *filter = impl_from_strmbase_filter(iface->filter); if (IsEqualGUID(iid, &IID_IQualityControl)) *out = &filter->source_IQualityControl_iface; else if (IsEqualGUID(iid, &IID_IMediaSeeking)) - return IUnknown_QueryInterface(filter->seeking, iid, out); + *out = &filter->passthrough.IMediaSeeking_iface; else return E_NOINTERFACE; @@ -347,7 +347,7 @@ static HRESULT acm_wrapper_source_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt) { - ACMWrapperImpl *filter = impl_from_strmbase_filter(iface->filter); + struct acm_wrapper *filter = impl_from_strmbase_filter(iface->filter); if (IsEqualGUID(&mt->majortype, &filter->mt.majortype) && (IsEqualGUID(&mt->subtype, &filter->mt.subtype) @@ -359,7 +359,7 @@ static HRESULT acm_wrapper_source_get_media_type(struct strmbase_pin *iface, unsigned int index, AM_MEDIA_TYPE *mt) { - ACMWrapperImpl *filter = impl_from_strmbase_filter(iface->filter); + struct acm_wrapper *filter = impl_from_strmbase_filter(iface->filter); if (index) return VFW_S_NO_MORE_ITEMS; @@ -370,7 +370,7 @@ static HRESULT WINAPI acm_wrapper_source_DecideBufferSize(struct strmbase_source *iface, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest) { - ACMWrapperImpl *filter = impl_from_strmbase_filter(iface->pin.filter); + struct acm_wrapper *filter = impl_from_strmbase_filter(iface->pin.filter); ALLOCATOR_PROPERTIES actual; if (!ppropInputRequest->cbAlign) @@ -395,34 +395,34 @@ .pfnDecideBufferSize = acm_wrapper_source_DecideBufferSize, }; -static ACMWrapperImpl *impl_from_source_IQualityControl(IQualityControl *iface) +static struct acm_wrapper *impl_from_source_IQualityControl(IQualityControl *iface) { - return CONTAINING_RECORD(iface, ACMWrapperImpl, source_IQualityControl_iface); + return CONTAINING_RECORD(iface, struct acm_wrapper, source_IQualityControl_iface); } static HRESULT WINAPI acm_wrapper_source_qc_QueryInterface(IQualityControl *iface, REFIID iid, void **out) { - ACMWrapperImpl *filter = impl_from_source_IQualityControl(iface); + struct acm_wrapper *filter = impl_from_source_IQualityControl(iface); return IPin_QueryInterface(&filter->source.pin.IPin_iface, iid, out); } static ULONG WINAPI acm_wrapper_source_qc_AddRef(IQualityControl *iface) { - ACMWrapperImpl *filter = impl_from_source_IQualityControl(iface); + struct acm_wrapper *filter = impl_from_source_IQualityControl(iface); return IPin_AddRef(&filter->source.pin.IPin_iface); } static ULONG WINAPI acm_wrapper_source_qc_Release(IQualityControl *iface) { - ACMWrapperImpl *filter = impl_from_source_IQualityControl(iface); + struct acm_wrapper *filter = impl_from_source_IQualityControl(iface); return IPin_Release(&filter->source.pin.IPin_iface); } static HRESULT WINAPI acm_wrapper_source_qc_Notify(IQualityControl *iface, IBaseFilter *sender, Quality q) { - ACMWrapperImpl *filter = impl_from_source_IQualityControl(iface); + struct acm_wrapper *filter = impl_from_source_IQualityControl(iface); IQualityControl *peer; HRESULT hr = S_OK; @@ -443,7 +443,7 @@ static HRESULT WINAPI acm_wrapper_source_qc_SetSink(IQualityControl *iface, IQualityControl *sink) { - ACMWrapperImpl *filter = impl_from_source_IQualityControl(iface); + struct acm_wrapper *filter = impl_from_source_IQualityControl(iface); TRACE("filter %p, sink %p.\n", filter, sink); @@ -463,7 +463,7 @@ static struct strmbase_pin *acm_wrapper_get_pin(struct strmbase_filter *iface, unsigned int index) { - ACMWrapperImpl *filter = impl_from_strmbase_filter(iface); + struct acm_wrapper *filter = impl_from_strmbase_filter(iface); if (index == 0) return &filter->sink.pin; @@ -474,7 +474,7 @@ static void acm_wrapper_destroy(struct strmbase_filter *iface) { - ACMWrapperImpl *filter = impl_from_strmbase_filter(iface); + struct acm_wrapper *filter = impl_from_strmbase_filter(iface); if (filter->sink.pin.peer) IPin_Disconnect(filter->sink.pin.peer); @@ -486,11 +486,11 @@ strmbase_sink_cleanup(&filter->sink); strmbase_source_cleanup(&filter->source); + strmbase_passthrough_cleanup(&filter->passthrough); filter->stream_cs.DebugInfo->Spare[0] = 0; DeleteCriticalSection(&filter->stream_cs); FreeMediaType(&filter->mt); - IUnknown_Release(filter->seeking); strmbase_filter_cleanup(&filter->filter); free(filter); @@ -499,7 +499,7 @@ static HRESULT acm_wrapper_init_stream(struct strmbase_filter *iface) { - ACMWrapperImpl *filter = impl_from_strmbase_filter(iface); + struct acm_wrapper *filter = impl_from_strmbase_filter(iface); BaseOutputPinImpl_Active(&filter->source); return S_OK; @@ -507,7 +507,7 @@ static HRESULT acm_wrapper_cleanup_stream(struct strmbase_filter *iface) { - ACMWrapperImpl *filter = impl_from_strmbase_filter(iface); + struct acm_wrapper *filter = impl_from_strmbase_filter(iface); BaseOutputPinImpl_Inactive(&filter->source); return S_OK; @@ -523,9 +523,7 @@ HRESULT acm_wrapper_create(IUnknown *outer, IUnknown **out) { - ISeekingPassThru *passthrough; - ACMWrapperImpl *object; - HRESULT hr; + struct acm_wrapper *object; if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; @@ -539,21 +537,9 @@ strmbase_source_init(&object->source, &object->filter, L"Out", &source_ops); object->source_IQualityControl_iface.lpVtbl = &source_qc_vtbl; - - if (FAILED(hr = CoCreateInstance(&CLSID_SeekingPassThru, - (IUnknown *)&object->source.pin.IPin_iface, CLSCTX_INPROC_SERVER, - &IID_IUnknown, (void **)&object->seeking))) - { - strmbase_sink_cleanup(&object->sink); - strmbase_source_cleanup(&object->source); - strmbase_filter_cleanup(&object->filter); - free(object); - return hr; - } - - IUnknown_QueryInterface(object->seeking, &IID_ISeekingPassThru, (void **)&passthrough); - ISeekingPassThru_Init(passthrough, FALSE, &object->sink.pin.IPin_iface); - ISeekingPassThru_Release(passthrough); + strmbase_passthrough_init(&object->passthrough, (IUnknown *)&object->source.pin.IPin_iface); + ISeekingPassThru_Init(&object->passthrough.ISeekingPassThru_iface, FALSE, + &object->sink.pin.IPin_iface); object->lasttime_real = object->lasttime_sent = -1; diff -Nru wine-development-5.5/dlls/quartz/avidec.c wine-development-5.6/dlls/quartz/avidec.c --- wine-development-5.5/dlls/quartz/avidec.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/quartz/avidec.c 2020-04-10 18:54:32.000000000 +0000 @@ -36,30 +36,30 @@ WINE_DEFAULT_DEBUG_CHANNEL(quartz); -typedef struct AVIDecImpl +struct avi_decompressor { struct strmbase_filter filter; CRITICAL_SECTION stream_cs; struct strmbase_source source; IQualityControl source_IQualityControl_iface; - IUnknown *seeking; + struct strmbase_passthrough passthrough; struct strmbase_sink sink; HIC hvid; BITMAPINFOHEADER* pBihIn; REFERENCE_TIME late; -} AVIDecImpl; +}; -static AVIDecImpl *impl_from_strmbase_filter(struct strmbase_filter *iface) +static struct avi_decompressor *impl_from_strmbase_filter(struct strmbase_filter *iface) { - return CONTAINING_RECORD(iface, AVIDecImpl, filter); + return CONTAINING_RECORD(iface, struct avi_decompressor, filter); } static HRESULT avi_decompressor_sink_query_interface(struct strmbase_pin *iface, REFIID iid, void **out) { - AVIDecImpl *filter = impl_from_strmbase_filter(iface->filter); + struct avi_decompressor *filter = impl_from_strmbase_filter(iface->filter); if (IsEqualGUID(iid, &IID_IMemInputPin)) *out = &filter->sink.IMemInputPin_iface; @@ -77,14 +77,15 @@ static HRESULT avi_decompressor_sink_end_flush(struct strmbase_sink *iface) { - AVIDecImpl *filter = impl_from_strmbase_filter(iface->pin.filter); + struct avi_decompressor *filter = impl_from_strmbase_filter(iface->pin.filter); filter->late = -1; if (filter->source.pin.peer) return IPin_EndFlush(filter->source.pin.peer); return S_OK; } -static int AVIDec_DropSample(AVIDecImpl *This, REFERENCE_TIME tStart) { +static int AVIDec_DropSample(struct avi_decompressor *This, REFERENCE_TIME tStart) +{ if (This->late < 0) return 0; @@ -98,7 +99,7 @@ static HRESULT WINAPI avi_decompressor_sink_Receive(struct strmbase_sink *iface, IMediaSample *pSample) { - AVIDecImpl *This = impl_from_strmbase_filter(iface->pin.filter); + struct avi_decompressor *This = impl_from_strmbase_filter(iface->pin.filter); VIDEOINFOHEADER *source_format; HRESULT hr; DWORD res; @@ -219,7 +220,7 @@ static HRESULT avi_decompressor_sink_connect(struct strmbase_sink *iface, IPin *peer, const AM_MEDIA_TYPE *pmt) { - AVIDecImpl *This = impl_from_strmbase_filter(iface->pin.filter); + struct avi_decompressor *This = impl_from_strmbase_filter(iface->pin.filter); HRESULT hr = VFW_E_TYPE_NOT_ACCEPTED; /* Check root (GUID w/o FOURCC) */ @@ -273,7 +274,7 @@ static void avi_decompressor_sink_disconnect(struct strmbase_sink *iface) { - AVIDecImpl *filter = impl_from_strmbase_filter(iface->pin.filter); + struct avi_decompressor *filter = impl_from_strmbase_filter(iface->pin.filter); if (filter->hvid) ICClose(filter->hvid); @@ -295,12 +296,12 @@ static HRESULT avi_decompressor_source_query_interface(struct strmbase_pin *iface, REFIID iid, void **out) { - AVIDecImpl *filter = impl_from_strmbase_filter(iface->filter); + struct avi_decompressor *filter = impl_from_strmbase_filter(iface->filter); if (IsEqualGUID(iid, &IID_IQualityControl)) *out = &filter->source_IQualityControl_iface; else if (IsEqualGUID(iid, &IID_IMediaSeeking)) - return IUnknown_QueryInterface(filter->seeking, iid, out); + *out = &filter->passthrough.IMediaSeeking_iface; else return E_NOINTERFACE; @@ -310,7 +311,7 @@ static HRESULT avi_decompressor_source_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt) { - AVIDecImpl *filter = impl_from_strmbase_filter(iface->filter); + struct avi_decompressor *filter = impl_from_strmbase_filter(iface->filter); VIDEOINFOHEADER *sink_format, *format; if (!filter->sink.pin.peer || !IsEqualGUID(&mt->formattype, &FORMAT_VideoInfo)) @@ -346,7 +347,7 @@ {&MEDIASUBTYPE_RGB8, BI_RGB, 8}, }; - AVIDecImpl *filter = impl_from_strmbase_filter(iface->filter); + struct avi_decompressor *filter = impl_from_strmbase_filter(iface->filter); const VIDEOINFOHEADER *sink_format; VIDEOINFO *format; @@ -464,34 +465,34 @@ .pfnDecideBufferSize = avi_decompressor_source_DecideBufferSize, }; -static AVIDecImpl *impl_from_source_IQualityControl(IQualityControl *iface) +static struct avi_decompressor *impl_from_source_IQualityControl(IQualityControl *iface) { - return CONTAINING_RECORD(iface, AVIDecImpl, source_IQualityControl_iface); + return CONTAINING_RECORD(iface, struct avi_decompressor, source_IQualityControl_iface); } -static HRESULT WINAPI acm_wrapper_source_qc_QueryInterface(IQualityControl *iface, +static HRESULT WINAPI avi_decompressor_source_qc_QueryInterface(IQualityControl *iface, REFIID iid, void **out) { - AVIDecImpl *filter = impl_from_source_IQualityControl(iface); + struct avi_decompressor *filter = impl_from_source_IQualityControl(iface); return IPin_QueryInterface(&filter->source.pin.IPin_iface, iid, out); } -static ULONG WINAPI acm_wrapper_source_qc_AddRef(IQualityControl *iface) +static ULONG WINAPI avi_decompressor_source_qc_AddRef(IQualityControl *iface) { - AVIDecImpl *filter = impl_from_source_IQualityControl(iface); + struct avi_decompressor *filter = impl_from_source_IQualityControl(iface); return IPin_AddRef(&filter->source.pin.IPin_iface); } -static ULONG WINAPI acm_wrapper_source_qc_Release(IQualityControl *iface) +static ULONG WINAPI avi_decompressor_source_qc_Release(IQualityControl *iface) { - AVIDecImpl *filter = impl_from_source_IQualityControl(iface); + struct avi_decompressor *filter = impl_from_source_IQualityControl(iface); return IPin_Release(&filter->source.pin.IPin_iface); } -static HRESULT WINAPI acm_wrapper_source_qc_Notify(IQualityControl *iface, +static HRESULT WINAPI avi_decompressor_source_qc_Notify(IQualityControl *iface, IBaseFilter *sender, Quality q) { - AVIDecImpl *filter = impl_from_source_IQualityControl(iface); + struct avi_decompressor *filter = impl_from_source_IQualityControl(iface); TRACE("filter %p, sender %p, type %#x, proportion %u, late %s, timestamp %s.\n", filter, sender, q.Type, q.Proportion, debugstr_time(q.Late), debugstr_time(q.TimeStamp)); @@ -505,9 +506,9 @@ return S_OK; } -static HRESULT WINAPI acm_wrapper_source_qc_SetSink(IQualityControl *iface, IQualityControl *sink) +static HRESULT WINAPI avi_decompressor_source_qc_SetSink(IQualityControl *iface, IQualityControl *sink) { - AVIDecImpl *filter = impl_from_source_IQualityControl(iface); + struct avi_decompressor *filter = impl_from_source_IQualityControl(iface); TRACE("filter %p, sink %p.\n", filter, sink); @@ -516,16 +517,16 @@ static const IQualityControlVtbl source_qc_vtbl = { - acm_wrapper_source_qc_QueryInterface, - acm_wrapper_source_qc_AddRef, - acm_wrapper_source_qc_Release, - acm_wrapper_source_qc_Notify, - acm_wrapper_source_qc_SetSink, + avi_decompressor_source_qc_QueryInterface, + avi_decompressor_source_qc_AddRef, + avi_decompressor_source_qc_Release, + avi_decompressor_source_qc_Notify, + avi_decompressor_source_qc_SetSink, }; static struct strmbase_pin *avi_decompressor_get_pin(struct strmbase_filter *iface, unsigned int index) { - AVIDecImpl *filter = impl_from_strmbase_filter(iface); + struct avi_decompressor *filter = impl_from_strmbase_filter(iface); if (index == 0) return &filter->sink.pin; @@ -536,7 +537,7 @@ static void avi_decompressor_destroy(struct strmbase_filter *iface) { - AVIDecImpl *filter = impl_from_strmbase_filter(iface); + struct avi_decompressor *filter = impl_from_strmbase_filter(iface); if (filter->sink.pin.peer) IPin_Disconnect(filter->sink.pin.peer); @@ -548,10 +549,10 @@ strmbase_sink_cleanup(&filter->sink); strmbase_source_cleanup(&filter->source); + strmbase_passthrough_cleanup(&filter->passthrough); filter->stream_cs.DebugInfo->Spare[0] = 0; DeleteCriticalSection(&filter->stream_cs); - IUnknown_Release(filter->seeking); strmbase_filter_cleanup(&filter->filter); free(filter); @@ -560,7 +561,7 @@ static HRESULT avi_decompressor_init_stream(struct strmbase_filter *iface) { - AVIDecImpl *filter = impl_from_strmbase_filter(iface); + struct avi_decompressor *filter = impl_from_strmbase_filter(iface); VIDEOINFOHEADER *source_format; LRESULT res; @@ -579,7 +580,7 @@ static HRESULT avi_decompressor_cleanup_stream(struct strmbase_filter *iface) { - AVIDecImpl *filter = impl_from_strmbase_filter(iface); + struct avi_decompressor *filter = impl_from_strmbase_filter(iface); LRESULT res; if (filter->hvid && (res = ICDecompressEnd(filter->hvid))) @@ -602,9 +603,7 @@ HRESULT avi_dec_create(IUnknown *outer, IUnknown **out) { - AVIDecImpl *object; - ISeekingPassThru *passthrough; - HRESULT hr; + struct avi_decompressor *object; if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; @@ -618,21 +617,9 @@ strmbase_source_init(&object->source, &object->filter, L"Out", &source_ops); object->source_IQualityControl_iface.lpVtbl = &source_qc_vtbl; - - if (FAILED(hr = CoCreateInstance(&CLSID_SeekingPassThru, - (IUnknown *)&object->source.pin.IPin_iface, CLSCTX_INPROC_SERVER, - &IID_IUnknown, (void **)&object->seeking))) - { - strmbase_sink_cleanup(&object->sink); - strmbase_source_cleanup(&object->source); - strmbase_filter_cleanup(&object->filter); - free(object); - return hr; - } - - IUnknown_QueryInterface(object->seeking, &IID_ISeekingPassThru, (void **)&passthrough); - ISeekingPassThru_Init(passthrough, FALSE, &object->sink.pin.IPin_iface); - ISeekingPassThru_Release(passthrough); + strmbase_passthrough_init(&object->passthrough, (IUnknown *)&object->source.pin.IPin_iface); + ISeekingPassThru_Init(&object->passthrough.ISeekingPassThru_iface, FALSE, + &object->sink.pin.IPin_iface); TRACE("Created AVI decompressor %p.\n", object); *out = &object->filter.IUnknown_inner; diff -Nru wine-development-5.5/dlls/quartz/dsoundrender.c wine-development-5.6/dlls/quartz/dsoundrender.c --- wine-development-5.5/dlls/quartz/dsoundrender.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/quartz/dsoundrender.c 2020-04-10 18:54:32.000000000 +0000 @@ -39,7 +39,7 @@ */ static const REFERENCE_TIME DSoundRenderer_Max_Fill = 150 * 10000; -typedef struct DSoundRenderImpl +struct dsound_render { struct strmbase_renderer renderer; @@ -57,31 +57,33 @@ LONG volume; LONG pan; -} DSoundRenderImpl; +}; -static inline DSoundRenderImpl *impl_from_strmbase_renderer(struct strmbase_renderer *iface) +static struct dsound_render *impl_from_strmbase_renderer(struct strmbase_renderer *iface) { - return CONTAINING_RECORD(iface, DSoundRenderImpl, renderer); + return CONTAINING_RECORD(iface, struct dsound_render, renderer); } -static inline DSoundRenderImpl *impl_from_IBasicAudio(IBasicAudio *iface) +static struct dsound_render *impl_from_IBasicAudio(IBasicAudio *iface) { - return CONTAINING_RECORD(iface, DSoundRenderImpl, IBasicAudio_iface); + return CONTAINING_RECORD(iface, struct dsound_render, IBasicAudio_iface); } -static inline DSoundRenderImpl *impl_from_IAMDirectSound(IAMDirectSound *iface) +static struct dsound_render *impl_from_IAMDirectSound(IAMDirectSound *iface) { - return CONTAINING_RECORD(iface, DSoundRenderImpl, IAMDirectSound_iface); + return CONTAINING_RECORD(iface, struct dsound_render, IAMDirectSound_iface); } -static REFERENCE_TIME time_from_pos(DSoundRenderImpl *This, DWORD pos) { +static REFERENCE_TIME time_from_pos(struct dsound_render *This, DWORD pos) +{ WAVEFORMATEX *wfx = (WAVEFORMATEX *)This->renderer.sink.pin.mt.pbFormat; REFERENCE_TIME ret = 10000000; ret = ret * pos / wfx->nAvgBytesPerSec; return ret; } -static DWORD pos_from_time(DSoundRenderImpl *This, REFERENCE_TIME time) { +static DWORD pos_from_time(struct dsound_render *This, REFERENCE_TIME time) +{ WAVEFORMATEX *wfx = (WAVEFORMATEX *)This->renderer.sink.pin.mt.pbFormat; REFERENCE_TIME ret = time; ret *= wfx->nAvgBytesPerSec; @@ -90,7 +92,8 @@ return ret; } -static void DSoundRender_UpdatePositions(DSoundRenderImpl *This, DWORD *seqwritepos, DWORD *minwritepos) { +static void DSoundRender_UpdatePositions(struct dsound_render *This, DWORD *seqwritepos, DWORD *minwritepos) +{ WAVEFORMATEX *wfx = (WAVEFORMATEX *)This->renderer.sink.pin.mt.pbFormat; BYTE *buf1, *buf2; DWORD size1, size2, playpos, writepos, old_writepos, old_playpos, adv; @@ -127,7 +130,8 @@ *seqwritepos = This->writepos; } -static HRESULT DSoundRender_GetWritePos(DSoundRenderImpl *This, DWORD *ret_writepos, REFERENCE_TIME write_at, DWORD *pfree, DWORD *skip) +static HRESULT DSoundRender_GetWritePos(struct dsound_render *This, + DWORD *ret_writepos, REFERENCE_TIME write_at, DWORD *pfree, DWORD *skip) { WAVEFORMATEX *wfx = (WAVEFORMATEX *)This->renderer.sink.pin.mt.pbFormat; DWORD writepos, min_writepos, playpos; @@ -206,7 +210,7 @@ return S_OK; } -static HRESULT DSoundRender_HandleEndOfStream(DSoundRenderImpl *This) +static HRESULT DSoundRender_HandleEndOfStream(struct dsound_render *This) { while (This->renderer.filter.state == State_Running) { @@ -225,7 +229,8 @@ return S_OK; } -static HRESULT DSoundRender_SendSampleData(DSoundRenderImpl* This, REFERENCE_TIME tStart, REFERENCE_TIME tStop, const BYTE *data, DWORD size) +static HRESULT DSoundRender_SendSampleData(struct dsound_render *This, + REFERENCE_TIME tStart, REFERENCE_TIME tStop, const BYTE *data, DWORD size) { HRESULT hr; @@ -286,7 +291,7 @@ static HRESULT WINAPI DSoundRender_PrepareReceive(struct strmbase_renderer *iface, IMediaSample *pSample) { - DSoundRenderImpl *This = impl_from_strmbase_renderer(iface); + struct dsound_render *This = impl_from_strmbase_renderer(iface); HRESULT hr; AM_MEDIA_TYPE *amt; @@ -321,7 +326,7 @@ static HRESULT WINAPI DSoundRender_DoRenderSample(struct strmbase_renderer *iface, IMediaSample *pSample) { - DSoundRenderImpl *This = impl_from_strmbase_renderer(iface); + struct dsound_render *This = impl_from_strmbase_renderer(iface); LPBYTE pbSrcStream = NULL; LONG cbSrcStream = 0; REFERENCE_TIME tStart, tStop; @@ -389,7 +394,7 @@ static void dsound_render_stop_stream(struct strmbase_renderer *iface) { - DSoundRenderImpl *This = impl_from_strmbase_renderer(iface); + struct dsound_render *This = impl_from_strmbase_renderer(iface); TRACE("(%p/%p)->()\n", This, iface); @@ -399,7 +404,7 @@ static void dsound_render_start_stream(struct strmbase_renderer *iface) { - DSoundRenderImpl *This = impl_from_strmbase_renderer(iface); + struct dsound_render *This = impl_from_strmbase_renderer(iface); TRACE("(%p)\n", This); @@ -411,7 +416,7 @@ static HRESULT dsound_render_connect(struct strmbase_renderer *iface, const AM_MEDIA_TYPE *mt) { - DSoundRenderImpl *This = impl_from_strmbase_renderer(iface); + struct dsound_render *This = impl_from_strmbase_renderer(iface); const WAVEFORMATEX *format = (WAVEFORMATEX *)mt->pbFormat; HRESULT hr = S_OK; DSBUFFERDESC buf_desc; @@ -454,7 +459,7 @@ static HRESULT WINAPI DSoundRender_BreakConnect(struct strmbase_renderer *iface) { - DSoundRenderImpl *This = impl_from_strmbase_renderer(iface); + struct dsound_render *This = impl_from_strmbase_renderer(iface); TRACE("(%p)->()\n", iface); @@ -467,13 +472,13 @@ static HRESULT WINAPI DSoundRender_EndOfStream(struct strmbase_renderer *iface) { - DSoundRenderImpl *This = impl_from_strmbase_renderer(iface); + struct dsound_render *This = impl_from_strmbase_renderer(iface); return DSoundRender_HandleEndOfStream(This); } static HRESULT WINAPI DSoundRender_EndFlush(struct strmbase_renderer *iface) { - DSoundRenderImpl *This = impl_from_strmbase_renderer(iface); + struct dsound_render *This = impl_from_strmbase_renderer(iface); if (This->dsbuffer) { @@ -492,7 +497,7 @@ static void dsound_render_destroy(struct strmbase_renderer *iface) { - DSoundRenderImpl *filter = impl_from_strmbase_renderer(iface); + struct dsound_render *filter = impl_from_strmbase_renderer(iface); if (filter->dsbuffer) IDirectSoundBuffer_Release(filter->dsbuffer); @@ -502,14 +507,14 @@ filter->dsound = NULL; strmbase_renderer_cleanup(&filter->renderer); - CoTaskMemFree(filter); + free(filter); InterlockedDecrement(&object_locks); } static HRESULT dsound_render_query_interface(struct strmbase_renderer *iface, REFIID iid, void **out) { - DSoundRenderImpl *filter = impl_from_strmbase_renderer(iface); + struct dsound_render *filter = impl_from_strmbase_renderer(iface); if (IsEqualGUID(iid, &IID_IBasicAudio)) *out = &filter->IBasicAudio_iface; @@ -544,7 +549,7 @@ static HRESULT WINAPI Basicaudio_QueryInterface(IBasicAudio *iface, REFIID riid, LPVOID*ppvObj) { - DSoundRenderImpl *This = impl_from_IBasicAudio(iface); + struct dsound_render *This = impl_from_IBasicAudio(iface); TRACE("(%p/%p)->(%s, %p)\n", This, iface, debugstr_guid(riid), ppvObj); @@ -552,7 +557,7 @@ } static ULONG WINAPI Basicaudio_AddRef(IBasicAudio *iface) { - DSoundRenderImpl *This = impl_from_IBasicAudio(iface); + struct dsound_render *This = impl_from_IBasicAudio(iface); TRACE("(%p/%p)->()\n", This, iface); @@ -560,7 +565,7 @@ } static ULONG WINAPI Basicaudio_Release(IBasicAudio *iface) { - DSoundRenderImpl *This = impl_from_IBasicAudio(iface); + struct dsound_render *This = impl_from_IBasicAudio(iface); TRACE("(%p/%p)->()\n", This, iface); @@ -617,7 +622,7 @@ static HRESULT WINAPI Basicaudio_put_Volume(IBasicAudio *iface, LONG lVolume) { - DSoundRenderImpl *This = impl_from_IBasicAudio(iface); + struct dsound_render *This = impl_from_IBasicAudio(iface); TRACE("(%p/%p)->(%d)\n", This, iface, lVolume); @@ -635,7 +640,7 @@ static HRESULT WINAPI Basicaudio_get_Volume(IBasicAudio *iface, LONG *plVolume) { - DSoundRenderImpl *This = impl_from_IBasicAudio(iface); + struct dsound_render *This = impl_from_IBasicAudio(iface); TRACE("(%p/%p)->(%p)\n", This, iface, plVolume); @@ -648,7 +653,7 @@ static HRESULT WINAPI Basicaudio_put_Balance(IBasicAudio *iface, LONG lBalance) { - DSoundRenderImpl *This = impl_from_IBasicAudio(iface); + struct dsound_render *This = impl_from_IBasicAudio(iface); TRACE("(%p/%p)->(%d)\n", This, iface, lBalance); @@ -666,7 +671,7 @@ static HRESULT WINAPI Basicaudio_get_Balance(IBasicAudio *iface, LONG *plBalance) { - DSoundRenderImpl *This = impl_from_IBasicAudio(iface); + struct dsound_render *This = impl_from_IBasicAudio(iface); TRACE("(%p/%p)->(%p)\n", This, iface, plBalance); @@ -697,7 +702,7 @@ REFIID riid, LPVOID*ppvObj) { - DSoundRenderImpl *This = impl_from_IAMDirectSound(iface); + struct dsound_render *This = impl_from_IAMDirectSound(iface); TRACE("(%p/%p)->(%s, %p)\n", This, iface, debugstr_guid(riid), ppvObj); @@ -706,7 +711,7 @@ static ULONG WINAPI AMDirectSound_AddRef(IAMDirectSound *iface) { - DSoundRenderImpl *This = impl_from_IAMDirectSound(iface); + struct dsound_render *This = impl_from_IAMDirectSound(iface); TRACE("(%p/%p)->()\n", This, iface); @@ -715,7 +720,7 @@ static ULONG WINAPI AMDirectSound_Release(IAMDirectSound *iface) { - DSoundRenderImpl *This = impl_from_IAMDirectSound(iface); + struct dsound_render *This = impl_from_IAMDirectSound(iface); TRACE("(%p/%p)->()\n", This, iface); @@ -725,7 +730,7 @@ /*** IAMDirectSound methods ***/ static HRESULT WINAPI AMDirectSound_GetDirectSoundInterface(IAMDirectSound *iface, IDirectSound **ds) { - DSoundRenderImpl *This = impl_from_IAMDirectSound(iface); + struct dsound_render *This = impl_from_IAMDirectSound(iface); FIXME("(%p/%p)->(%p): stub\n", This, iface, ds); @@ -734,7 +739,7 @@ static HRESULT WINAPI AMDirectSound_GetPrimaryBufferInterface(IAMDirectSound *iface, IDirectSoundBuffer **buf) { - DSoundRenderImpl *This = impl_from_IAMDirectSound(iface); + struct dsound_render *This = impl_from_IAMDirectSound(iface); FIXME("(%p/%p)->(%p): stub\n", This, iface, buf); @@ -743,7 +748,7 @@ static HRESULT WINAPI AMDirectSound_GetSecondaryBufferInterface(IAMDirectSound *iface, IDirectSoundBuffer **buf) { - DSoundRenderImpl *This = impl_from_IAMDirectSound(iface); + struct dsound_render *This = impl_from_IAMDirectSound(iface); FIXME("(%p/%p)->(%p): stub\n", This, iface, buf); @@ -752,7 +757,7 @@ static HRESULT WINAPI AMDirectSound_ReleaseDirectSoundInterface(IAMDirectSound *iface, IDirectSound *ds) { - DSoundRenderImpl *This = impl_from_IAMDirectSound(iface); + struct dsound_render *This = impl_from_IAMDirectSound(iface); FIXME("(%p/%p)->(%p): stub\n", This, iface, ds); @@ -761,7 +766,7 @@ static HRESULT WINAPI AMDirectSound_ReleasePrimaryBufferInterface(IAMDirectSound *iface, IDirectSoundBuffer *buf) { - DSoundRenderImpl *This = impl_from_IAMDirectSound(iface); + struct dsound_render *This = impl_from_IAMDirectSound(iface); FIXME("(%p/%p)->(%p): stub\n", This, iface, buf); @@ -770,7 +775,7 @@ static HRESULT WINAPI AMDirectSound_ReleaseSecondaryBufferInterface(IAMDirectSound *iface, IDirectSoundBuffer *buf) { - DSoundRenderImpl *This = impl_from_IAMDirectSound(iface); + struct dsound_render *This = impl_from_IAMDirectSound(iface); FIXME("(%p/%p)->(%p): stub\n", This, iface, buf); @@ -779,7 +784,7 @@ static HRESULT WINAPI AMDirectSound_SetFocusWindow(IAMDirectSound *iface, HWND hwnd, BOOL bgaudible) { - DSoundRenderImpl *This = impl_from_IAMDirectSound(iface); + struct dsound_render *This = impl_from_IAMDirectSound(iface); FIXME("(%p/%p)->(%p,%d): stub\n", This, iface, hwnd, bgaudible); @@ -788,7 +793,7 @@ static HRESULT WINAPI AMDirectSound_GetFocusWindow(IAMDirectSound *iface, HWND *hwnd, BOOL *bgaudible) { - DSoundRenderImpl *This = impl_from_IAMDirectSound(iface); + struct dsound_render *This = impl_from_IAMDirectSound(iface); FIXME("(%p/%p)->(%p,%p): stub\n", This, iface, hwnd, bgaudible); @@ -817,25 +822,20 @@ .dwFlags = DSBCAPS_PRIMARYBUFFER, }; + struct dsound_render *object; IDirectSoundBuffer *buffer; - DSoundRenderImpl *object; HRESULT hr; - if (!(object = CoTaskMemAlloc(sizeof(*object)))) + if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; - memset(object, 0, sizeof(*object)); - if (FAILED(hr = strmbase_renderer_init(&object->renderer, outer, - &CLSID_DSoundRender, L"Audio Input pin (rendered)", &renderer_ops))) - { - CoTaskMemFree(object); - return hr; - } + strmbase_renderer_init(&object->renderer, outer, + &CLSID_DSoundRender, L"Audio Input pin (rendered)", &renderer_ops); if (FAILED(hr = system_clock_create(&object->renderer.filter.IUnknown_inner, &object->system_clock))) { strmbase_renderer_cleanup(&object->renderer); - CoTaskMemFree(object); + free(object); return hr; } @@ -846,7 +846,7 @@ { IUnknown_Release(object->system_clock); strmbase_renderer_cleanup(&object->renderer); - CoTaskMemFree(object); + free(object); return hr; } @@ -856,7 +856,7 @@ IDirectSound8_Release(object->dsound); IUnknown_Release(object->system_clock); strmbase_renderer_cleanup(&object->renderer); - CoTaskMemFree(object); + free(object); return hr; } diff -Nru wine-development-5.5/dlls/quartz/filesource.c wine-development-5.6/dlls/quartz/filesource.c --- wine-development-5.5/dlls/quartz/filesource.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/quartz/filesource.c 2020-04-10 18:54:32.000000000 +0000 @@ -53,7 +53,7 @@ OVERLAPPED ovl; }; -typedef struct AsyncReader +struct async_reader { struct strmbase_filter filter; IFileSourceFilter IFileSourceFilter_iface; @@ -63,25 +63,24 @@ LPOLESTR pszFileName; AM_MEDIA_TYPE mt; - ALLOCATOR_PROPERTIES allocProps; HANDLE file, port, io_thread; CRITICAL_SECTION sample_cs; BOOL flushing; struct request *requests; unsigned int max_requests; CONDITION_VARIABLE sample_cv; -} AsyncReader; +}; static const struct strmbase_source_ops source_ops; -static inline AsyncReader *impl_from_strmbase_filter(struct strmbase_filter *iface) +static inline struct async_reader *impl_from_strmbase_filter(struct strmbase_filter *iface) { - return CONTAINING_RECORD(iface, AsyncReader, filter); + return CONTAINING_RECORD(iface, struct async_reader, filter); } -static inline AsyncReader *impl_from_IFileSourceFilter(IFileSourceFilter *iface) +static inline struct async_reader *impl_from_IFileSourceFilter(IFileSourceFilter *iface) { - return CONTAINING_RECORD(iface, AsyncReader, IFileSourceFilter_iface); + return CONTAINING_RECORD(iface, struct async_reader, IFileSourceFilter_iface); } static const IFileSourceFilterVtbl FileSource_Vtbl; @@ -311,7 +310,7 @@ static struct strmbase_pin *async_reader_get_pin(struct strmbase_filter *iface, unsigned int index) { - AsyncReader *filter = impl_from_strmbase_filter(iface); + struct async_reader *filter = impl_from_strmbase_filter(iface); if (!index && filter->pszFileName) return &filter->source.pin; @@ -320,7 +319,7 @@ static void async_reader_destroy(struct strmbase_filter *iface) { - AsyncReader *filter = impl_from_strmbase_filter(iface); + struct async_reader *filter = impl_from_strmbase_filter(iface); if (filter->pszFileName) { @@ -359,7 +358,7 @@ static HRESULT async_reader_query_interface(struct strmbase_filter *iface, REFIID iid, void **out) { - AsyncReader *filter = impl_from_strmbase_filter(iface); + struct async_reader *filter = impl_from_strmbase_filter(iface); if (IsEqualGUID(iid, &IID_IFileSourceFilter)) { @@ -380,7 +379,7 @@ static DWORD CALLBACK io_thread(void *arg) { - AsyncReader *filter = arg; + struct async_reader *filter = arg; struct request *req; OVERLAPPED *ovl; ULONG_PTR key; @@ -416,7 +415,7 @@ HRESULT async_reader_create(IUnknown *outer, IUnknown **out) { - AsyncReader *object; + struct async_reader *object; if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; @@ -439,29 +438,26 @@ static HRESULT WINAPI FileSource_QueryInterface(IFileSourceFilter * iface, REFIID riid, LPVOID * ppv) { - AsyncReader *This = impl_from_IFileSourceFilter(iface); - - return IBaseFilter_QueryInterface(&This->filter.IBaseFilter_iface, riid, ppv); + struct async_reader *filter = impl_from_IFileSourceFilter(iface); + return IBaseFilter_QueryInterface(&filter->filter.IBaseFilter_iface, riid, ppv); } static ULONG WINAPI FileSource_AddRef(IFileSourceFilter * iface) { - AsyncReader *This = impl_from_IFileSourceFilter(iface); - - return IBaseFilter_AddRef(&This->filter.IBaseFilter_iface); + struct async_reader *filter = impl_from_IFileSourceFilter(iface); + return IBaseFilter_AddRef(&filter->filter.IBaseFilter_iface); } static ULONG WINAPI FileSource_Release(IFileSourceFilter * iface) { - AsyncReader *This = impl_from_IFileSourceFilter(iface); - - return IBaseFilter_Release(&This->filter.IBaseFilter_iface); + struct async_reader *filter = impl_from_IFileSourceFilter(iface); + return IBaseFilter_Release(&filter->filter.IBaseFilter_iface); } static HRESULT WINAPI FileSource_Load(IFileSourceFilter * iface, LPCOLESTR pszFileName, const AM_MEDIA_TYPE * pmt) { + struct async_reader *This = impl_from_IFileSourceFilter(iface); HANDLE hFile; - AsyncReader *This = impl_from_IFileSourceFilter(iface); TRACE("%p->(%s, %p)\n", This, debugstr_w(pszFileName), pmt); strmbase_dump_media_type(pmt); @@ -514,7 +510,7 @@ static HRESULT WINAPI FileSource_GetCurFile(IFileSourceFilter *iface, LPOLESTR *ppszFileName, AM_MEDIA_TYPE *mt) { - AsyncReader *This = impl_from_IFileSourceFilter(iface); + struct async_reader *This = impl_from_IFileSourceFilter(iface); TRACE("filter %p, filename %p, mt %p.\n", This, ppszFileName, mt); @@ -548,24 +544,19 @@ FileSource_GetCurFile }; -static inline AsyncReader *impl_from_strmbase_pin(struct strmbase_pin *iface) -{ - return CONTAINING_RECORD(iface, AsyncReader, source.pin); -} - -static inline AsyncReader *impl_from_strmbase_source(struct strmbase_source *iface) +static inline struct async_reader *impl_from_strmbase_pin(struct strmbase_pin *iface) { - return CONTAINING_RECORD(iface, AsyncReader, source); + return CONTAINING_RECORD(iface, struct async_reader, source.pin); } -static inline AsyncReader *impl_from_IAsyncReader(IAsyncReader *iface) +static inline struct async_reader *impl_from_IAsyncReader(IAsyncReader *iface) { - return CONTAINING_RECORD(iface, AsyncReader, IAsyncReader_iface); + return CONTAINING_RECORD(iface, struct async_reader, IAsyncReader_iface); } static HRESULT source_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt) { - AsyncReader *filter = impl_from_strmbase_pin(iface); + struct async_reader *filter = impl_from_strmbase_pin(iface); if (IsEqualGUID(&mt->majortype, &filter->mt.majortype) && (!IsEqualGUID(&mt->subtype, &GUID_NULL) @@ -577,7 +568,7 @@ static HRESULT source_get_media_type(struct strmbase_pin *iface, unsigned int index, AM_MEDIA_TYPE *mt) { - AsyncReader *filter = impl_from_strmbase_pin(iface); + struct async_reader *filter = impl_from_strmbase_pin(iface); if (index > 1) return VFW_S_NO_MORE_ITEMS; @@ -591,7 +582,7 @@ static HRESULT source_query_interface(struct strmbase_pin *iface, REFIID iid, void **out) { - AsyncReader *filter = impl_from_strmbase_pin(iface); + struct async_reader *filter = impl_from_strmbase_pin(iface); if (IsEqualGUID(iid, &IID_IAsyncReader)) *out = &filter->IAsyncReader_iface; @@ -633,56 +624,36 @@ return hr; } -static HRESULT WINAPI FileAsyncReaderPin_DecideBufferSize(struct strmbase_source *iface, - IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest) -{ - AsyncReader *This = impl_from_strmbase_source(iface); - ALLOCATOR_PROPERTIES actual; - - if (ppropInputRequest->cbAlign && ppropInputRequest->cbAlign != This->allocProps.cbAlign) - FIXME("Requested Buffer cbAlign mismatch %i,%i\n",This->allocProps.cbAlign, ppropInputRequest->cbAlign); - if (ppropInputRequest->cbPrefix) - FIXME("Requested Buffer cbPrefix mismatch %i,%i\n",This->allocProps.cbPrefix, ppropInputRequest->cbPrefix); - if (ppropInputRequest->cbBuffer) - FIXME("Requested Buffer cbBuffer mismatch %i,%i\n",This->allocProps.cbBuffer, ppropInputRequest->cbBuffer); - if (ppropInputRequest->cBuffers) - FIXME("Requested Buffer cBuffers mismatch %i,%i\n",This->allocProps.cBuffers, ppropInputRequest->cBuffers); - - return IMemAllocator_SetProperties(pAlloc, &This->allocProps, &actual); -} - static const struct strmbase_source_ops source_ops = { .base.pin_query_accept = source_query_accept, .base.pin_get_media_type = source_get_media_type, .base.pin_query_interface = source_query_interface, .pfnAttemptConnection = FileAsyncReaderPin_AttemptConnection, - .pfnDecideBufferSize = FileAsyncReaderPin_DecideBufferSize, - .pfnDecideAllocator = BaseOutputPinImpl_DecideAllocator, }; static HRESULT WINAPI FileAsyncReader_QueryInterface(IAsyncReader *iface, REFIID iid, void **out) { - AsyncReader *filter = impl_from_IAsyncReader(iface); + struct async_reader *filter = impl_from_IAsyncReader(iface); return IPin_QueryInterface(&filter->source.pin.IPin_iface, iid, out); } static ULONG WINAPI FileAsyncReader_AddRef(IAsyncReader * iface) { - AsyncReader *filter = impl_from_IAsyncReader(iface); + struct async_reader *filter = impl_from_IAsyncReader(iface); return IPin_AddRef(&filter->source.pin.IPin_iface); } static ULONG WINAPI FileAsyncReader_Release(IAsyncReader * iface) { - AsyncReader *filter = impl_from_IAsyncReader(iface); + struct async_reader *filter = impl_from_IAsyncReader(iface); return IPin_Release(&filter->source.pin.IPin_iface); } static HRESULT WINAPI FileAsyncReader_RequestAllocator(IAsyncReader *iface, IMemAllocator *preferred, ALLOCATOR_PROPERTIES *props, IMemAllocator **ret_allocator) { - AsyncReader *filter = impl_from_IAsyncReader(iface); + struct async_reader *filter = impl_from_IAsyncReader(iface); IMemAllocator *allocator; unsigned int i; HRESULT hr; @@ -723,7 +694,6 @@ for (i = 0; i < filter->max_requests; ++i) filter->requests[i].ovl.hEvent = CreateEventW(NULL, TRUE, FALSE, NULL); - filter->allocProps = *props; *ret_allocator = allocator; return S_OK; @@ -731,7 +701,7 @@ static HRESULT WINAPI FileAsyncReader_Request(IAsyncReader *iface, IMediaSample *sample, DWORD_PTR cookie) { - AsyncReader *filter = impl_from_IAsyncReader(iface); + struct async_reader *filter = impl_from_IAsyncReader(iface); REFERENCE_TIME start, end; struct request *req; unsigned int i; @@ -785,7 +755,7 @@ static HRESULT WINAPI FileAsyncReader_WaitForNext(IAsyncReader *iface, DWORD timeout, IMediaSample **sample, DWORD_PTR *cookie) { - AsyncReader *filter = impl_from_IAsyncReader(iface); + struct async_reader *filter = impl_from_IAsyncReader(iface); unsigned int i; TRACE("filter %p, timeout %u, sample %p, cookie %p.\n", filter, timeout, sample, cookie); @@ -855,7 +825,7 @@ static HRESULT WINAPI FileAsyncReader_SyncReadAligned(IAsyncReader *iface, IMediaSample *sample) { - AsyncReader *filter = impl_from_IAsyncReader(iface); + struct async_reader *filter = impl_from_IAsyncReader(iface); REFERENCE_TIME start_time, end_time; DWORD read_len; BYTE *buffer; @@ -891,7 +861,7 @@ static HRESULT WINAPI FileAsyncReader_SyncRead(IAsyncReader *iface, LONGLONG offset, LONG length, BYTE *buffer) { - AsyncReader *filter = impl_from_IAsyncReader(iface); + struct async_reader *filter = impl_from_IAsyncReader(iface); DWORD read_len; HRESULT hr; BOOL ret; @@ -912,7 +882,7 @@ static HRESULT WINAPI FileAsyncReader_Length(IAsyncReader *iface, LONGLONG *total, LONGLONG *available) { - AsyncReader *filter = impl_from_IAsyncReader(iface); + struct async_reader *filter = impl_from_IAsyncReader(iface); DWORD low, high; TRACE("iface %p, total %p, available %p.\n", iface, total, available); @@ -927,7 +897,7 @@ static HRESULT WINAPI FileAsyncReader_BeginFlush(IAsyncReader * iface) { - AsyncReader *filter = impl_from_IAsyncReader(iface); + struct async_reader *filter = impl_from_IAsyncReader(iface); unsigned int i; TRACE("iface %p.\n", iface); @@ -947,7 +917,7 @@ static HRESULT WINAPI FileAsyncReader_EndFlush(IAsyncReader * iface) { - AsyncReader *filter = impl_from_IAsyncReader(iface); + struct async_reader *filter = impl_from_IAsyncReader(iface); TRACE("iface %p.\n", iface); diff -Nru wine-development-5.5/dlls/quartz/filtergraph.c wine-development-5.6/dlls/quartz/filtergraph.c --- wine-development-5.5/dlls/quartz/filtergraph.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/quartz/filtergraph.c 2020-04-10 18:54:32.000000000 +0000 @@ -153,6 +153,7 @@ { struct list entry, sorted_entry; IBaseFilter *filter; + IMediaSeeking *seeking; WCHAR *name; BOOL sorting; }; @@ -593,24 +594,19 @@ return FALSE; } -static BOOL is_renderer(IBaseFilter *filter) +static BOOL is_renderer(struct filter *filter) { IAMFilterMiscFlags *flags; - IMediaSeeking *seeking; BOOL ret = FALSE; - if (SUCCEEDED(IBaseFilter_QueryInterface(filter, &IID_IAMFilterMiscFlags, (void **)&flags))) + if (SUCCEEDED(IBaseFilter_QueryInterface(filter->filter, &IID_IAMFilterMiscFlags, (void **)&flags))) { if (IAMFilterMiscFlags_GetMiscFlags(flags) & AM_FILTER_MISC_FLAGS_IS_RENDERER) ret = TRUE; IAMFilterMiscFlags_Release(flags); } - else if (SUCCEEDED(IBaseFilter_QueryInterface(filter, &IID_IMediaSeeking, (void **)&seeking))) - { - IMediaSeeking_Release(seeking); - if (!has_output_pins(filter)) - ret = TRUE; - } + else if (filter->seeking && !has_output_pins(filter->filter)) + ret = TRUE; return ret; } @@ -675,12 +671,19 @@ } IBaseFilter_AddRef(entry->filter = filter); + + /* The Legend of Heroes: Trails of Cold Steel II destroys its filter when + * its IMediaSeeking interface is released, so cache the interface instead + * of querying for it every time. */ + if (FAILED(IBaseFilter_QueryInterface(filter, &IID_IMediaSeeking, (void **)&entry->seeking))) + entry->seeking = NULL; + list_add_head(&graph->filters, &entry->entry); list_add_head(&graph->sorted_filters, &entry->sorted_entry); entry->sorting = FALSE; ++graph->version; - if (is_renderer(filter)) + if (is_renderer(entry)) ++graph->nRenderers; return duplicate_name ? VFW_S_DUPLICATE_NAME : hr; @@ -755,11 +758,13 @@ hr = IBaseFilter_JoinFilterGraph(pFilter, NULL, NULL); if (SUCCEEDED(hr)) { - if (is_renderer(pFilter)) + if (is_renderer(entry)) --This->nRenderers; IBaseFilter_SetSyncSource(pFilter, NULL); IBaseFilter_Release(pFilter); + if (entry->seeking) + IMediaSeeking_Release(entry->seeking); list_remove(&entry->entry); list_remove(&entry->sorted_entry); CoTaskMemFree(entry->name); @@ -2219,13 +2224,9 @@ LIST_FOR_EACH_ENTRY(filter, &This->filters, struct filter, entry) { - IMediaSeeking *seek = NULL; - - IBaseFilter_QueryInterface(filter->filter, &IID_IMediaSeeking, (void **)&seek); - if (!seek) + if (!filter->seeking) continue; - hr = FoundSeek(This, seek, arg); - IMediaSeeking_Release(seek); + hr = FoundSeek(This, filter->seeking, arg); if (hr_return != E_NOTIMPL) allnotimpl = FALSE; if (hr_return == S_OK || (FAILED(hr) && hr != E_NOTIMPL && SUCCEEDED(hr_return))) @@ -2414,7 +2415,6 @@ { IFilterGraphImpl *graph = impl_from_IMediaSeeking(iface); HRESULT hr = E_NOTIMPL, filter_hr; - IMediaSeeking *seeking; struct filter *filter; LONGLONG filter_stop; @@ -2429,11 +2429,10 @@ LIST_FOR_EACH_ENTRY(filter, &graph->filters, struct filter, entry) { - if (FAILED(IBaseFilter_QueryInterface(filter->filter, &IID_IMediaSeeking, (void **)&seeking))) + if (!filter->seeking) continue; - filter_hr = IMediaSeeking_GetStopPosition(seeking, &filter_stop); - IMediaSeeking_Release(seeking); + filter_hr = IMediaSeeking_GetStopPosition(filter->seeking, &filter_stop); if (SUCCEEDED(filter_hr)) { hr = S_OK; @@ -2507,7 +2506,6 @@ { IFilterGraphImpl *graph = impl_from_IMediaSeeking(iface); HRESULT hr = E_NOTIMPL, filter_hr; - IMediaSeeking *seeking; struct filter *filter; FILTER_STATE state; @@ -2539,12 +2537,11 @@ { LONGLONG current = current_ptr ? *current_ptr : 0, stop = stop_ptr ? *stop_ptr : 0; - if (FAILED(IBaseFilter_QueryInterface(filter->filter, &IID_IMediaSeeking, (void **)&seeking))) + if (!filter->seeking) continue; - filter_hr = IMediaSeeking_SetPositions(seeking, ¤t, + filter_hr = IMediaSeeking_SetPositions(filter->seeking, ¤t, current_flags | AM_SEEKING_ReturnTime, &stop, stop_flags); - IMediaSeeking_Release(seeking); if (SUCCEEDED(filter_hr)) { hr = S_OK; diff -Nru wine-development-5.5/dlls/quartz/quartz_private.h wine-development-5.6/dlls/quartz/quartz_private.h --- wine-development-5.5/dlls/quartz/quartz_private.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/quartz/quartz_private.h 2020-04-10 18:54:32.000000000 +0000 @@ -87,50 +87,32 @@ BOOL get_media_type(const WCHAR *filename, GUID *majortype, GUID *subtype, GUID *source_clsid) DECLSPEC_HIDDEN; -typedef struct tagBaseWindow +struct video_window { - HWND hWnd; - LONG Width; - LONG Height; - - const struct BaseWindowFuncTable* pFuncsTable; -} BaseWindow; - -typedef RECT (WINAPI *BaseWindow_GetDefaultRect)(BaseWindow *This); -typedef BOOL (WINAPI *BaseWindow_OnSize)(BaseWindow *This, LONG Height, LONG Width); - -typedef struct BaseWindowFuncTable -{ - /* Required */ - BaseWindow_GetDefaultRect pfnGetDefaultRect; - /* Optional, WinProc Related */ - BaseWindow_OnSize pfnOnSize; -} BaseWindowFuncTable; - -HRESULT WINAPI BaseWindow_Init(BaseWindow *pBaseWindow, const BaseWindowFuncTable* pFuncsTable) DECLSPEC_HIDDEN; -HRESULT WINAPI BaseWindow_Destroy(BaseWindow *pBaseWindow) DECLSPEC_HIDDEN; - -HRESULT WINAPI BaseWindowImpl_PrepareWindow(BaseWindow *This) DECLSPEC_HIDDEN; -HRESULT WINAPI BaseWindowImpl_DoneWithWindow(BaseWindow *This) DECLSPEC_HIDDEN; - -typedef struct tagBaseControlWindow -{ - BaseWindow baseWindow; IVideoWindow IVideoWindow_iface; + HWND hwnd; BOOL AutoShow; HWND hwndDrain; HWND hwndOwner; struct strmbase_filter *pFilter; struct strmbase_pin *pPin; -} BaseControlWindow; + const struct video_window_ops *ops; +}; -HRESULT video_window_init(BaseControlWindow *window, const IVideoWindowVtbl *vtbl, - struct strmbase_filter *filter, struct strmbase_pin *pin, const BaseWindowFuncTable *func_table) DECLSPEC_HIDDEN; -void video_window_unregister_class(void) DECLSPEC_HIDDEN; -HRESULT WINAPI BaseControlWindow_Destroy(BaseControlWindow *pControlWindow) DECLSPEC_HIDDEN; +struct video_window_ops +{ + /* Required */ + RECT (*get_default_rect)(struct video_window *window); + /* Optional, WinProc Related */ + BOOL (*resize)(struct video_window *window, LONG height, LONG width); +}; -BOOL WINAPI BaseControlWindowImpl_PossiblyEatMessage(BaseWindow *This, UINT uMsg, WPARAM wParam, LPARAM lParam) DECLSPEC_HIDDEN; +void video_window_cleanup(struct video_window *window) DECLSPEC_HIDDEN; +HRESULT video_window_create_window(struct video_window *window) DECLSPEC_HIDDEN; +void video_window_init(struct video_window *window, const IVideoWindowVtbl *vtbl, + struct strmbase_filter *filter, struct strmbase_pin *pin, const struct video_window_ops *ops) DECLSPEC_HIDDEN; +void video_window_unregister_class(void) DECLSPEC_HIDDEN; HRESULT WINAPI BaseControlWindowImpl_QueryInterface(IVideoWindow *iface, REFIID iid, void **out) DECLSPEC_HIDDEN; ULONG WINAPI BaseControlWindowImpl_AddRef(IVideoWindow *iface) DECLSPEC_HIDDEN; @@ -214,8 +196,7 @@ BaseControlVideo_SetTargetRect pfnSetTargetRect; } BaseControlVideoFuncTable; -HRESULT basic_video_init(BaseControlVideo *video, struct strmbase_filter *filter, +void basic_video_init(BaseControlVideo *video, struct strmbase_filter *filter, struct strmbase_pin *pin, const BaseControlVideoFuncTable *func_table) DECLSPEC_HIDDEN; -HRESULT WINAPI BaseControlVideo_Destroy(BaseControlVideo *pControlVideo) DECLSPEC_HIDDEN; #endif /* __QUARTZ_PRIVATE_INCLUDED__ */ diff -Nru wine-development-5.5/dlls/quartz/tests/filtergraph.c wine-development-5.6/dlls/quartz/tests/filtergraph.c --- wine-development-5.5/dlls/quartz/tests/filtergraph.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/quartz/tests/filtergraph.c 2020-04-10 18:54:32.000000000 +0000 @@ -1165,6 +1165,7 @@ ULONG misc_flags; IMediaSeeking IMediaSeeking_iface; + LONG seeking_ref; DWORD seek_caps; BOOL support_testguid; LONGLONG seek_duration, seek_current, seek_stop; @@ -1525,12 +1526,14 @@ static ULONG WINAPI testseek_AddRef(IMediaSeeking *iface) { struct testfilter *filter = impl_from_IMediaSeeking(iface); + InterlockedIncrement(&filter->seeking_ref); return InterlockedIncrement(&filter->ref); } static ULONG WINAPI testseek_Release(IMediaSeeking *iface) { struct testfilter *filter = impl_from_IMediaSeeking(iface); + InterlockedDecrement(&filter->seeking_ref); return InterlockedDecrement(&filter->ref); } @@ -3530,14 +3533,20 @@ hr = check_ec_complete(graph, &filter1.IBaseFilter_iface); ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(filter1.seeking_ref > 0, "Unexpected seeking refcount %d.\n", filter1.seeking_ref); IFilterGraph2_RemoveFilter(graph, &filter1.IBaseFilter_iface); + ok(filter1.seeking_ref == 0, "Unexpected seeking refcount %d.\n", filter1.seeking_ref); + filter1_pin.dir = PINDIR_OUTPUT; IFilterGraph2_AddFilter(graph, &filter1.IBaseFilter_iface, NULL); hr = check_ec_complete(graph, &filter1.IBaseFilter_iface); ok(hr == E_ABORT, "Got hr %#x.\n", hr); + ok(filter1.seeking_ref > 0, "Unexpected seeking refcount %d.\n", filter1.seeking_ref); IFilterGraph2_RemoveFilter(graph, &filter1.IBaseFilter_iface); + ok(filter1.seeking_ref == 0, "Unexpected seeking refcount %d.\n", filter1.seeking_ref); + filter1.IMediaSeeking_iface.lpVtbl = NULL; filter1_pin.dir = PINDIR_INPUT; filter1.pin_count = 1; @@ -3769,6 +3778,8 @@ hr = IMediaSeeking_GetCapabilities(seeking, &caps); ok(hr == S_OK, "Got hr %#x.\n", hr); ok(caps == AM_SEEKING_CanDoSegments, "Got caps %#x.\n", caps); + ok(filter1.seeking_ref > 0, "Unexpected seeking refcount %d.\n", filter1.seeking_ref); + ok(filter2.seeking_ref > 0, "Unexpected seeking refcount %d.\n", filter2.seeking_ref); caps = AM_SEEKING_CanDoSegments | AM_SEEKING_CanGetCurrentPos; hr = IMediaSeeking_CheckCapabilities(seeking, &caps); @@ -4082,10 +4093,16 @@ IMediaFilter_Release(filter); IMediaControl_Release(control); IMediaSeeking_Release(seeking); + + ok(filter1.seeking_ref > 0, "Unexpected seeking refcount %d.\n", filter1.seeking_ref); + ok(filter2.seeking_ref > 0, "Unexpected seeking refcount %d.\n", filter2.seeking_ref); + ref = IFilterGraph2_Release(graph); ok(!ref, "Got outstanding refcount %d.\n", hr); ok(filter1.ref == 1, "Got outstanding refcount %d.\n", filter1.ref); ok(filter2.ref == 1, "Got outstanding refcount %d.\n", filter2.ref); + ok(filter1.seeking_ref == 0, "Unexpected seeking refcount %d.\n", filter1.seeking_ref); + ok(filter2.seeking_ref == 0, "Unexpected seeking refcount %d.\n", filter2.seeking_ref); } static void test_default_sync_source(void) diff -Nru wine-development-5.5/dlls/quartz/video.c wine-development-5.6/dlls/quartz/video.c --- wine-development-5.5/dlls/quartz/video.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/quartz/video.c 2020-04-10 18:54:32.000000000 +0000 @@ -27,11 +27,6 @@ return CONTAINING_RECORD(iface, BaseControlVideo, IBasicVideo_iface); } -HRESULT WINAPI BaseControlVideo_Destroy(BaseControlVideo *pControlVideo) -{ - return S_OK; -} - static HRESULT BaseControlVideoImpl_CheckSourceRect(BaseControlVideo *This, RECT *pSourceRect) { LONG VideoWidth, VideoHeight; @@ -647,13 +642,11 @@ basic_video_IsUsingDefaultDestination }; -HRESULT basic_video_init(BaseControlVideo *video, struct strmbase_filter *filter, +void basic_video_init(BaseControlVideo *video, struct strmbase_filter *filter, struct strmbase_pin *pin, const BaseControlVideoFuncTable *func_table) { video->IBasicVideo_iface.lpVtbl = &basic_video_vtbl; video->pFilter = filter; video->pPin = pin; video->pFuncsTable = func_table; - - return S_OK; } diff -Nru wine-development-5.5/dlls/quartz/videorenderer.c wine-development-5.6/dlls/quartz/videorenderer.c --- wine-development-5.5/dlls/quartz/videorenderer.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/quartz/videorenderer.c 2020-04-10 18:54:32.000000000 +0000 @@ -36,10 +36,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(quartz); -typedef struct VideoRendererImpl +struct video_renderer { struct strmbase_renderer renderer; - BaseControlWindow baseControlWindow; + struct video_window baseControlWindow; BaseControlVideo baseControlVideo; IOverlay IOverlay_iface; @@ -57,34 +57,34 @@ HANDLE run_event; IMediaSample *current_sample; -} VideoRendererImpl; +}; -static inline VideoRendererImpl *impl_from_BaseWindow(BaseWindow *iface) +static inline struct video_renderer *impl_from_video_window(struct video_window *iface) { - return CONTAINING_RECORD(iface, VideoRendererImpl, baseControlWindow.baseWindow); + return CONTAINING_RECORD(iface, struct video_renderer, baseControlWindow); } -static inline VideoRendererImpl *impl_from_strmbase_renderer(struct strmbase_renderer *iface) +static inline struct video_renderer *impl_from_strmbase_renderer(struct strmbase_renderer *iface) { - return CONTAINING_RECORD(iface, VideoRendererImpl, renderer); + return CONTAINING_RECORD(iface, struct video_renderer, renderer); } -static inline VideoRendererImpl *impl_from_IVideoWindow(IVideoWindow *iface) +static inline struct video_renderer *impl_from_IVideoWindow(IVideoWindow *iface) { - return CONTAINING_RECORD(iface, VideoRendererImpl, baseControlWindow.IVideoWindow_iface); + return CONTAINING_RECORD(iface, struct video_renderer, baseControlWindow.IVideoWindow_iface); } -static inline VideoRendererImpl *impl_from_BaseControlVideo(BaseControlVideo *iface) +static inline struct video_renderer *impl_from_BaseControlVideo(BaseControlVideo *iface) { - return CONTAINING_RECORD(iface, VideoRendererImpl, baseControlVideo); + return CONTAINING_RECORD(iface, struct video_renderer, baseControlVideo); } -static void VideoRenderer_AutoShowWindow(VideoRendererImpl *This) +static void VideoRenderer_AutoShowWindow(struct video_renderer *This) { if (!This->init && (!This->WindowPos.right || !This->WindowPos.top)) { - DWORD style = GetWindowLongW(This->baseControlWindow.baseWindow.hWnd, GWL_STYLE); - DWORD style_ex = GetWindowLongW(This->baseControlWindow.baseWindow.hWnd, GWL_EXSTYLE); + DWORD style = GetWindowLongW(This->baseControlWindow.hwnd, GWL_STYLE); + DWORD style_ex = GetWindowLongW(This->baseControlWindow.hwnd, GWL_EXSTYLE); if (!This->WindowPos.right) { @@ -116,20 +116,20 @@ AdjustWindowRectEx(&This->WindowPos, style, FALSE, style_ex); TRACE("WindowPos: %s\n", wine_dbgstr_rect(&This->WindowPos)); - SetWindowPos(This->baseControlWindow.baseWindow.hWnd, NULL, + SetWindowPos(This->baseControlWindow.hwnd, NULL, This->WindowPos.left, This->WindowPos.top, This->WindowPos.right - This->WindowPos.left, This->WindowPos.bottom - This->WindowPos.top, SWP_NOZORDER|SWP_NOMOVE|SWP_DEFERERASE); - GetClientRect(This->baseControlWindow.baseWindow.hWnd, &This->DestRect); + GetClientRect(This->baseControlWindow.hwnd, &This->DestRect); } else if (!This->init) This->DestRect = This->WindowPos; This->init = TRUE; if (This->baseControlWindow.AutoShow) - ShowWindow(This->baseControlWindow.baseWindow.hWnd, SW_SHOW); + ShowWindow(This->baseControlWindow.hwnd, SW_SHOW); } static HRESULT WINAPI VideoRenderer_ShouldDrawSampleNow(struct strmbase_renderer *filter, @@ -143,7 +143,7 @@ static HRESULT WINAPI VideoRenderer_DoRenderSample(struct strmbase_renderer *iface, IMediaSample *pSample) { - VideoRendererImpl *filter = impl_from_strmbase_renderer(iface); + struct video_renderer *filter = impl_from_strmbase_renderer(iface); const AM_MEDIA_TYPE *mt = &filter->renderer.sink.pin.mt; LPBYTE pbSrcStream = NULL; BITMAPINFOHEADER *bih; @@ -164,7 +164,7 @@ else bih = &((VIDEOINFOHEADER2 *)mt->pbFormat)->bmiHeader; - dc = GetDC(filter->baseControlWindow.baseWindow.hWnd); + dc = GetDC(filter->baseControlWindow.hwnd); StretchDIBits(dc, filter->DestRect.left, filter->DestRect.top, filter->DestRect.right - filter->DestRect.left, filter->DestRect.bottom - filter->DestRect.top, @@ -172,7 +172,7 @@ filter->SourceRect.right - filter->SourceRect.left, filter->SourceRect.bottom - filter->SourceRect.top, pbSrcStream, (BITMAPINFO *)bih, DIB_RGB_COLORS, SRCCOPY); - ReleaseDC(filter->baseControlWindow.baseWindow.hWnd, dc); + ReleaseDC(filter->baseControlWindow.hwnd, dc); if (filter->renderer.filter.state == State_Paused) { @@ -192,7 +192,7 @@ static HRESULT WINAPI VideoRenderer_CheckMediaType(struct strmbase_renderer *iface, const AM_MEDIA_TYPE *pmt) { - VideoRendererImpl *This = impl_from_strmbase_renderer(iface); + struct video_renderer *This = impl_from_strmbase_renderer(iface); if (!IsEqualIID(&pmt->majortype, &MEDIATYPE_Video)) return S_FALSE; @@ -241,20 +241,19 @@ static void video_renderer_destroy(struct strmbase_renderer *iface) { - VideoRendererImpl *filter = impl_from_strmbase_renderer(iface); + struct video_renderer *filter = impl_from_strmbase_renderer(iface); - BaseControlWindow_Destroy(&filter->baseControlWindow); - BaseControlVideo_Destroy(&filter->baseControlVideo); + video_window_cleanup(&filter->baseControlWindow); CloseHandle(filter->run_event); strmbase_renderer_cleanup(&filter->renderer); - CoTaskMemFree(filter); + free(filter); InterlockedDecrement(&object_locks); } static HRESULT video_renderer_query_interface(struct strmbase_renderer *iface, REFIID iid, void **out) { - VideoRendererImpl *filter = impl_from_strmbase_renderer(iface); + struct video_renderer *filter = impl_from_strmbase_renderer(iface); if (IsEqualGUID(iid, &IID_IBasicVideo)) *out = &filter->baseControlVideo.IBasicVideo_iface; @@ -269,7 +268,7 @@ static HRESULT video_renderer_pin_query_interface(struct strmbase_renderer *iface, REFIID iid, void **out) { - VideoRendererImpl *filter = impl_from_strmbase_renderer(iface); + struct video_renderer *filter = impl_from_strmbase_renderer(iface); if (IsEqualGUID(iid, &IID_IOverlay)) *out = &filter->IOverlay_iface; @@ -282,34 +281,34 @@ static void video_renderer_start_stream(struct strmbase_renderer *iface) { - VideoRendererImpl *filter = impl_from_strmbase_renderer(iface); + struct video_renderer *filter = impl_from_strmbase_renderer(iface); SetEvent(filter->run_event); } static void video_renderer_stop_stream(struct strmbase_renderer *iface) { - VideoRendererImpl *This = impl_from_strmbase_renderer(iface); + struct video_renderer *This = impl_from_strmbase_renderer(iface); TRACE("(%p)->()\n", This); if (This->baseControlWindow.AutoShow) /* Black it out */ - RedrawWindow(This->baseControlWindow.baseWindow.hWnd, NULL, NULL, RDW_INVALIDATE|RDW_ERASE); + RedrawWindow(This->baseControlWindow.hwnd, NULL, NULL, RDW_INVALIDATE | RDW_ERASE); ResetEvent(This->run_event); } static void video_renderer_init_stream(struct strmbase_renderer *iface) { - VideoRendererImpl *filter = impl_from_strmbase_renderer(iface); + struct video_renderer *filter = impl_from_strmbase_renderer(iface); VideoRenderer_AutoShowWindow(filter); } -static RECT WINAPI VideoRenderer_GetDefaultRect(BaseWindow *iface) +static RECT video_renderer_get_default_rect(struct video_window *iface) { - VideoRendererImpl *This = impl_from_BaseWindow(iface); + struct video_renderer *This = impl_from_video_window(iface); static RECT defRect; SetRect(&defRect, 0, 0, This->VideoWidth, This->VideoHeight); @@ -317,12 +316,12 @@ return defRect; } -static BOOL WINAPI VideoRenderer_OnSize(BaseWindow *iface, LONG Width, LONG Height) +static BOOL video_renderer_resize(struct video_window *iface, LONG Width, LONG Height) { - VideoRendererImpl *This = impl_from_BaseWindow(iface); + struct video_renderer *This = impl_from_video_window(iface); TRACE("WM_SIZE %d %d\n", Width, Height); - GetClientRect(iface->hWnd, &This->DestRect); + GetClientRect(iface->hwnd, &This->DestRect); TRACE("WM_SIZING: DestRect=(%d,%d),(%d,%d)\n", This->DestRect.left, This->DestRect.top, @@ -345,21 +344,22 @@ .renderer_pin_query_interface = video_renderer_pin_query_interface, }; -static const BaseWindowFuncTable renderer_BaseWindowFuncTable = { - VideoRenderer_GetDefaultRect, - VideoRenderer_OnSize +static const struct video_window_ops window_ops = +{ + .get_default_rect = video_renderer_get_default_rect, + .resize = video_renderer_resize, }; static HRESULT WINAPI VideoRenderer_GetSourceRect(BaseControlVideo* iface, RECT *pSourceRect) { - VideoRendererImpl *This = impl_from_BaseControlVideo(iface); + struct video_renderer *This = impl_from_BaseControlVideo(iface); CopyRect(pSourceRect,&This->SourceRect); return S_OK; } static HRESULT WINAPI VideoRenderer_GetStaticImage(BaseControlVideo *iface, LONG *size, LONG *image) { - VideoRendererImpl *filter = impl_from_BaseControlVideo(iface); + struct video_renderer *filter = impl_from_BaseControlVideo(iface); const AM_MEDIA_TYPE *mt = &filter->renderer.sink.pin.mt; const BITMAPINFOHEADER *bih; size_t image_size; @@ -410,14 +410,14 @@ static HRESULT WINAPI VideoRenderer_GetTargetRect(BaseControlVideo* iface, RECT *pTargetRect) { - VideoRendererImpl *This = impl_from_BaseControlVideo(iface); + struct video_renderer *This = impl_from_BaseControlVideo(iface); CopyRect(pTargetRect,&This->DestRect); return S_OK; } static VIDEOINFOHEADER* WINAPI VideoRenderer_GetVideoFormat(BaseControlVideo* iface) { - VideoRendererImpl *This = impl_from_BaseControlVideo(iface); + struct video_renderer *This = impl_from_BaseControlVideo(iface); AM_MEDIA_TYPE *pmt; TRACE("(%p/%p)\n", This, iface); @@ -439,7 +439,7 @@ static HRESULT WINAPI VideoRenderer_IsDefaultSourceRect(BaseControlVideo* iface) { - VideoRendererImpl *This = impl_from_BaseControlVideo(iface); + struct video_renderer *This = impl_from_BaseControlVideo(iface); FIXME("(%p/%p)->(): stub !!!\n", This, iface); return S_OK; @@ -447,7 +447,7 @@ static HRESULT WINAPI VideoRenderer_IsDefaultTargetRect(BaseControlVideo* iface) { - VideoRendererImpl *This = impl_from_BaseControlVideo(iface); + struct video_renderer *This = impl_from_BaseControlVideo(iface); FIXME("(%p/%p)->(): stub !!!\n", This, iface); return S_OK; @@ -455,7 +455,7 @@ static HRESULT WINAPI VideoRenderer_SetDefaultSourceRect(BaseControlVideo* iface) { - VideoRendererImpl *This = impl_from_BaseControlVideo(iface); + struct video_renderer *This = impl_from_BaseControlVideo(iface); SetRect(&This->SourceRect, 0, 0, This->VideoWidth, This->VideoHeight); @@ -464,10 +464,10 @@ static HRESULT WINAPI VideoRenderer_SetDefaultTargetRect(BaseControlVideo* iface) { - VideoRendererImpl *This = impl_from_BaseControlVideo(iface); + struct video_renderer *This = impl_from_BaseControlVideo(iface); RECT rect; - if (!GetClientRect(This->baseControlWindow.baseWindow.hWnd, &rect)) + if (!GetClientRect(This->baseControlWindow.hwnd, &rect)) return E_FAIL; SetRect(&This->DestRect, 0, 0, rect.right, rect.bottom); @@ -477,14 +477,14 @@ static HRESULT WINAPI VideoRenderer_SetSourceRect(BaseControlVideo* iface, RECT *pSourceRect) { - VideoRendererImpl *This = impl_from_BaseControlVideo(iface); + struct video_renderer *This = impl_from_BaseControlVideo(iface); CopyRect(&This->SourceRect,pSourceRect); return S_OK; } static HRESULT WINAPI VideoRenderer_SetTargetRect(BaseControlVideo* iface, RECT *pTargetRect) { - VideoRendererImpl *This = impl_from_BaseControlVideo(iface); + struct video_renderer *This = impl_from_BaseControlVideo(iface); CopyRect(&This->DestRect,pTargetRect); return S_OK; } @@ -505,7 +505,7 @@ static HRESULT WINAPI VideoWindow_get_FullScreenMode(IVideoWindow *iface, LONG *FullScreenMode) { - VideoRendererImpl *This = impl_from_IVideoWindow(iface); + struct video_renderer *This = impl_from_IVideoWindow(iface); TRACE("(%p/%p)->(%p): %d\n", This, iface, FullScreenMode, This->FullScreenMode); @@ -517,30 +517,34 @@ return S_OK; } -static HRESULT WINAPI VideoWindow_put_FullScreenMode(IVideoWindow *iface, - LONG FullScreenMode) +static HRESULT WINAPI VideoWindow_put_FullScreenMode(IVideoWindow *iface, LONG fullscreen) { - VideoRendererImpl *This = impl_from_IVideoWindow(iface); + struct video_renderer *filter = impl_from_IVideoWindow(iface); - FIXME("(%p/%p)->(%d): stub !!!\n", This, iface, FullScreenMode); + FIXME("filter %p, fullscreen %d.\n", filter, fullscreen); - if (FullScreenMode) { - This->saved_style = GetWindowLongW(This->baseControlWindow.baseWindow.hWnd, GWL_STYLE); - ShowWindow(This->baseControlWindow.baseWindow.hWnd, SW_HIDE); - SetParent(This->baseControlWindow.baseWindow.hWnd, 0); - SetWindowLongW(This->baseControlWindow.baseWindow.hWnd, GWL_STYLE, WS_POPUP); - SetWindowPos(This->baseControlWindow.baseWindow.hWnd,HWND_TOP,0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),SWP_SHOWWINDOW); - GetWindowRect(This->baseControlWindow.baseWindow.hWnd, &This->DestRect); - This->WindowPos = This->DestRect; - } else { - ShowWindow(This->baseControlWindow.baseWindow.hWnd, SW_HIDE); - SetParent(This->baseControlWindow.baseWindow.hWnd, This->baseControlWindow.hwndOwner); - SetWindowLongW(This->baseControlWindow.baseWindow.hWnd, GWL_STYLE, This->saved_style); - GetClientRect(This->baseControlWindow.baseWindow.hWnd, &This->DestRect); - SetWindowPos(This->baseControlWindow.baseWindow.hWnd,0,This->DestRect.left,This->DestRect.top,This->DestRect.right,This->DestRect.bottom,SWP_NOZORDER|SWP_SHOWWINDOW); - This->WindowPos = This->DestRect; + if (fullscreen) + { + filter->saved_style = GetWindowLongW(filter->baseControlWindow.hwnd, GWL_STYLE); + ShowWindow(filter->baseControlWindow.hwnd, SW_HIDE); + SetParent(filter->baseControlWindow.hwnd, NULL); + SetWindowLongW(filter->baseControlWindow.hwnd, GWL_STYLE, WS_POPUP); + SetWindowPos(filter->baseControlWindow.hwnd, HWND_TOP, 0, 0, + GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), SWP_SHOWWINDOW); + GetWindowRect(filter->baseControlWindow.hwnd, &filter->DestRect); + filter->WindowPos = filter->DestRect; + } + else + { + ShowWindow(filter->baseControlWindow.hwnd, SW_HIDE); + SetParent(filter->baseControlWindow.hwnd, filter->baseControlWindow.hwndOwner); + SetWindowLongW(filter->baseControlWindow.hwnd, GWL_STYLE, filter->saved_style); + GetClientRect(filter->baseControlWindow.hwnd, &filter->DestRect); + SetWindowPos(filter->baseControlWindow.hwnd, 0, filter->DestRect.left, filter->DestRect.top, + filter->DestRect.right, filter->DestRect.bottom, SWP_NOZORDER | SWP_SHOWWINDOW); + filter->WindowPos = filter->DestRect; } - This->FullScreenMode = FullScreenMode; + filter->FullScreenMode = fullscreen; return S_OK; } @@ -595,26 +599,26 @@ BaseControlWindowImpl_IsCursorHidden }; -static inline VideoRendererImpl *impl_from_IOverlay(IOverlay *iface) +static inline struct video_renderer *impl_from_IOverlay(IOverlay *iface) { - return CONTAINING_RECORD(iface, VideoRendererImpl, IOverlay_iface); + return CONTAINING_RECORD(iface, struct video_renderer, IOverlay_iface); } static HRESULT WINAPI overlay_QueryInterface(IOverlay *iface, REFIID iid, void **out) { - VideoRendererImpl *filter = impl_from_IOverlay(iface); + struct video_renderer *filter = impl_from_IOverlay(iface); return IPin_QueryInterface(&filter->renderer.sink.pin.IPin_iface, iid, out); } static ULONG WINAPI overlay_AddRef(IOverlay *iface) { - VideoRendererImpl *filter = impl_from_IOverlay(iface); + struct video_renderer *filter = impl_from_IOverlay(iface); return IPin_AddRef(&filter->renderer.sink.pin.IPin_iface); } static ULONG WINAPI overlay_Release(IOverlay *iface) { - VideoRendererImpl *filter = impl_from_IOverlay(iface); + struct video_renderer *filter = impl_from_IOverlay(iface); return IPin_Release(&filter->renderer.sink.pin.IPin_iface); } @@ -650,11 +654,11 @@ static HRESULT WINAPI overlay_GetWindowHandle(IOverlay *iface, HWND *window) { - VideoRendererImpl *filter = impl_from_IOverlay(iface); + struct video_renderer *filter = impl_from_IOverlay(iface); TRACE("filter %p, window %p.\n", filter, window); - *window = filter->baseControlWindow.baseWindow.hWnd; + *window = filter->baseControlWindow.hwnd; return S_OK; } @@ -701,50 +705,33 @@ HRESULT video_renderer_create(IUnknown *outer, IUnknown **out) { + struct video_renderer *object; HRESULT hr; - VideoRendererImpl * pVideoRenderer; - - *out = NULL; - - pVideoRenderer = CoTaskMemAlloc(sizeof(VideoRendererImpl)); - - pVideoRenderer->init = FALSE; - ZeroMemory(&pVideoRenderer->SourceRect, sizeof(RECT)); - ZeroMemory(&pVideoRenderer->DestRect, sizeof(RECT)); - ZeroMemory(&pVideoRenderer->WindowPos, sizeof(RECT)); - pVideoRenderer->FullScreenMode = OAFALSE; - pVideoRenderer->IOverlay_iface.lpVtbl = &overlay_vtbl; - - hr = strmbase_renderer_init(&pVideoRenderer->renderer, outer, - &CLSID_VideoRenderer, L"In", &renderer_ops); - - if (FAILED(hr)) - goto fail; + if (!(object = calloc(1, sizeof(*object)))) + return E_OUTOFMEMORY; - hr = video_window_init(&pVideoRenderer->baseControlWindow, &IVideoWindow_VTable, - &pVideoRenderer->renderer.filter, &pVideoRenderer->renderer.sink.pin, - &renderer_BaseWindowFuncTable); - if (FAILED(hr)) - goto fail; + strmbase_renderer_init(&object->renderer, outer, &CLSID_VideoRenderer, L"In", &renderer_ops); + object->IOverlay_iface.lpVtbl = &overlay_vtbl; - hr = basic_video_init(&pVideoRenderer->baseControlVideo, &pVideoRenderer->renderer.filter, - &pVideoRenderer->renderer.sink.pin, &renderer_BaseControlVideoFuncTable); - if (FAILED(hr)) - goto fail; + video_window_init(&object->baseControlWindow, &IVideoWindow_VTable, + &object->renderer.filter, &object->renderer.sink.pin, &window_ops); + basic_video_init(&object->baseControlVideo, &object->renderer.filter, + &object->renderer.sink.pin, &renderer_BaseControlVideoFuncTable); - if (FAILED(hr = BaseWindowImpl_PrepareWindow(&pVideoRenderer->baseControlWindow.baseWindow))) - goto fail; + if (FAILED(hr = video_window_create_window(&object->baseControlWindow))) + { + video_window_cleanup(&object->baseControlWindow); + strmbase_renderer_cleanup(&object->renderer); + free(object); + return hr; + } - pVideoRenderer->run_event = CreateEventW(NULL, TRUE, FALSE, NULL); + object->run_event = CreateEventW(NULL, TRUE, FALSE, NULL); - *out = &pVideoRenderer->renderer.filter.IUnknown_inner; + TRACE("Created video renderer %p.\n", object); + *out = &object->renderer.filter.IUnknown_inner; return S_OK; - -fail: - strmbase_renderer_cleanup(&pVideoRenderer->renderer); - CoTaskMemFree(pVideoRenderer); - return hr; } HRESULT video_renderer_default_create(IUnknown *outer, IUnknown **out) diff -Nru wine-development-5.5/dlls/quartz/vmr9.c wine-development-5.6/dlls/quartz/vmr9.c --- wine-development-5.5/dlls/quartz/vmr9.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/quartz/vmr9.c 2020-04-10 18:54:32.000000000 +0000 @@ -42,7 +42,7 @@ struct quartz_vmr { struct strmbase_renderer renderer; - BaseControlWindow baseControlWindow; + struct video_window baseControlWindow; BaseControlVideo baseControlVideo; IAMCertifiedOutputProtection IAMCertifiedOutputProtection_iface; @@ -91,9 +91,9 @@ HANDLE run_event; }; -static inline struct quartz_vmr *impl_from_BaseWindow(BaseWindow *wnd) +static inline struct quartz_vmr *impl_from_video_window(struct video_window *iface) { - return CONTAINING_RECORD(wnd, struct quartz_vmr, baseControlWindow.baseWindow); + return CONTAINING_RECORD(iface, struct quartz_vmr, baseControlWindow); } static inline struct quartz_vmr *impl_from_BaseControlVideo(BaseControlVideo *cvid) @@ -151,7 +151,7 @@ return CONTAINING_RECORD(iface, struct quartz_vmr, IVMRWindowlessControl9_iface); } -typedef struct +struct default_presenter { IVMRImagePresenter9 IVMRImagePresenter9_iface; IVMRSurfaceAllocatorEx9 IVMRSurfaceAllocatorEx9_iface; @@ -170,16 +170,16 @@ struct quartz_vmr* pVMR9; IVMRSurfaceAllocatorNotify9 *SurfaceAllocatorNotify; -} VMR9DefaultAllocatorPresenterImpl; +}; -static inline VMR9DefaultAllocatorPresenterImpl *impl_from_IVMRImagePresenter9( IVMRImagePresenter9 *iface) +static inline struct default_presenter *impl_from_IVMRImagePresenter9(IVMRImagePresenter9 *iface) { - return CONTAINING_RECORD(iface, VMR9DefaultAllocatorPresenterImpl, IVMRImagePresenter9_iface); + return CONTAINING_RECORD(iface, struct default_presenter, IVMRImagePresenter9_iface); } -static inline VMR9DefaultAllocatorPresenterImpl *impl_from_IVMRSurfaceAllocatorEx9( IVMRSurfaceAllocatorEx9 *iface) +static inline struct default_presenter *impl_from_IVMRSurfaceAllocatorEx9(IVMRSurfaceAllocatorEx9 *iface) { - return CONTAINING_RECORD(iface, VMR9DefaultAllocatorPresenterImpl, IVMRSurfaceAllocatorEx9_iface); + return CONTAINING_RECORD(iface, struct default_presenter, IVMRSurfaceAllocatorEx9_iface); } static HRESULT VMR9DefaultAllocatorPresenterImpl_create(struct quartz_vmr *parent, LPVOID * ppv); @@ -412,7 +412,7 @@ }; TRACE("Initializing in mode %u, our window %p, clipping window %p.\n", - filter->mode, filter->baseControlWindow.baseWindow.hWnd, filter->hWndClippingWindow); + filter->mode, filter->baseControlWindow.hwnd, filter->hWndClippingWindow); if (filter->num_surfaces) return S_OK; @@ -487,14 +487,14 @@ if (This->renderer.sink.pin.peer) VMR9_maybe_init(This, TRUE, &This->renderer.sink.pin.mt); IVMRImagePresenter9_StartPresenting(This->presenter, This->cookie); - SetWindowPos(This->baseControlWindow.baseWindow.hWnd, NULL, + SetWindowPos(This->baseControlWindow.hwnd, NULL, This->source_rect.left, This->source_rect.top, This->source_rect.right - This->source_rect.left, This->source_rect.bottom - This->source_rect.top, SWP_NOZORDER|SWP_NOMOVE|SWP_DEFERERASE); - ShowWindow(This->baseControlWindow.baseWindow.hWnd, SW_SHOW); - GetClientRect(This->baseControlWindow.baseWindow.hWnd, &This->target_rect); + ShowWindow(This->baseControlWindow.hwnd, SW_SHOW); + GetClientRect(This->baseControlWindow.hwnd, &This->target_rect); SetEvent(This->run_event); } @@ -579,7 +579,7 @@ { struct quartz_vmr *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface); - BaseControlWindow_Destroy(&filter->baseControlWindow); + video_window_cleanup(&filter->baseControlWindow); if (filter->allocator) IVMRSurfaceAllocatorEx9_Release(filter->allocator); @@ -595,9 +595,8 @@ CloseHandle(filter->run_event); FreeLibrary(filter->hD3d9); - BaseControlWindow_Destroy(&filter->baseControlWindow); strmbase_renderer_cleanup(&filter->renderer); - CoTaskMemFree(filter); + free(filter); InterlockedDecrement(&object_locks); } @@ -664,9 +663,9 @@ .renderer_pin_query_interface = vmr_pin_query_interface, }; -static RECT WINAPI VMR9_GetDefaultRect(BaseWindow *This) +static RECT vmr_get_default_rect(struct video_window *This) { - struct quartz_vmr* pVMR9 = impl_from_BaseWindow(This); + struct quartz_vmr *pVMR9 = impl_from_video_window(This); static RECT defRect; SetRect(&defRect, 0, 0, pVMR9->VideoWidth, pVMR9->VideoHeight); @@ -674,12 +673,12 @@ return defRect; } -static BOOL WINAPI VMR9_OnSize(BaseWindow *This, LONG Width, LONG Height) +static BOOL vmr_resize(struct video_window *This, LONG Width, LONG Height) { - struct quartz_vmr* pVMR9 = impl_from_BaseWindow(This); + struct quartz_vmr *pVMR9 = impl_from_video_window(This); TRACE("WM_SIZE %d %d\n", Width, Height); - GetClientRect(This->hWnd, &pVMR9->target_rect); + GetClientRect(This->hwnd, &pVMR9->target_rect); TRACE("WM_SIZING: DestRect=(%d,%d),(%d,%d)\n", pVMR9->target_rect.left, pVMR9->target_rect.top, @@ -689,9 +688,10 @@ return TRUE; } -static const BaseWindowFuncTable renderer_BaseWindowFuncTable = { - VMR9_GetDefaultRect, - VMR9_OnSize, +static const struct video_window_ops window_ops = +{ + .get_default_rect = vmr_get_default_rect, + .resize = vmr_resize, }; static HRESULT WINAPI VMR9_GetSourceRect(BaseControlVideo* This, RECT *pSourceRect) @@ -827,7 +827,7 @@ RECT rect; struct quartz_vmr* pVMR9 = impl_from_BaseControlVideo(This); - if (!GetClientRect(pVMR9->baseControlWindow.baseWindow.hWnd, &rect)) + if (!GetClientRect(pVMR9->baseControlWindow.hwnd, &rect)) return E_FAIL; SetRect(&pVMR9->target_rect, 0, 0, rect.right, rect.bottom); @@ -1601,7 +1601,7 @@ { This->target_rect = *dest; FIXME("Output rectangle: %s.\n", wine_dbgstr_rect(dest)); - SetWindowPos(This->baseControlWindow.baseWindow.hWnd, NULL, + SetWindowPos(This->baseControlWindow.hwnd, NULL, dest->left, dest->top, dest->right - dest->left, dest->bottom-dest->top, SWP_NOACTIVATE | SWP_NOCOPYBITS | SWP_NOOWNERZORDER | SWP_NOREDRAW); } @@ -1802,7 +1802,7 @@ { This->target_rect = *dest; FIXME("Output rectangle: %s.\n", wine_dbgstr_rect(dest)); - SetWindowPos(This->baseControlWindow.baseWindow.hWnd, NULL, + SetWindowPos(This->baseControlWindow.hwnd, NULL, dest->left, dest->top, dest->right - dest->left, dest->bottom - dest->top, SWP_NOACTIVATE | SWP_NOCOPYBITS | SWP_NOOWNERZORDER | SWP_NOREDRAW); } @@ -1866,7 +1866,7 @@ FIXME("(%p/%p)->(...) semi-stub\n", iface, This); EnterCriticalSection(&This->renderer.filter.csFilter); - if (hwnd != This->hWndClippingWindow && hwnd != This->baseControlWindow.baseWindow.hWnd) + if (hwnd != This->hWndClippingWindow && hwnd != This->baseControlWindow.hwnd) { ERR("Not handling changing windows yet!!!\n"); LeaveCriticalSection(&This->renderer.filter.csFilter); @@ -1881,7 +1881,7 @@ } /* Windowless extension */ - hr = IDirect3DDevice9_Present(This->allocator_d3d9_dev, NULL, NULL, This->baseControlWindow.baseWindow.hWnd, NULL); + hr = IDirect3DDevice9_Present(This->allocator_d3d9_dev, NULL, NULL, This->baseControlWindow.hwnd, NULL); LeaveCriticalSection(&This->renderer.filter.csFilter); return hr; @@ -2244,7 +2244,7 @@ TRACE("filter %p, window %p.\n", filter, window); - *window = filter->baseControlWindow.baseWindow.hWnd; + *window = filter->baseControlWindow.hwnd; return S_OK; } @@ -2291,72 +2291,53 @@ static HRESULT vmr_create(IUnknown *outer, IUnknown **out, const CLSID *clsid) { + struct quartz_vmr *object; HRESULT hr; - struct quartz_vmr* pVMR; - - *out = NULL; - pVMR = CoTaskMemAlloc(sizeof(struct quartz_vmr)); + if (!(object = calloc(1, sizeof(*object)))) + return E_OUTOFMEMORY; - pVMR->hD3d9 = LoadLibraryA("d3d9.dll"); - if (!pVMR->hD3d9 ) + object->hD3d9 = LoadLibraryA("d3d9.dll"); + if (!object->hD3d9) { WARN("Could not load d3d9.dll\n"); - CoTaskMemFree(pVMR); + free(object); return VFW_E_DDRAW_CAPS_NOT_SUITABLE; } - pVMR->IAMCertifiedOutputProtection_iface.lpVtbl = &IAMCertifiedOutputProtection_Vtbl; - pVMR->IAMFilterMiscFlags_iface.lpVtbl = &IAMFilterMiscFlags_Vtbl; - - pVMR->mode = 0; - pVMR->allocator_d3d9_dev = NULL; - pVMR->allocator_mon= NULL; - pVMR->num_surfaces = pVMR->cur_surface = 0; - pVMR->allocator = NULL; - pVMR->presenter = NULL; - pVMR->hWndClippingWindow = NULL; - pVMR->IVMRFilterConfig_iface.lpVtbl = &VMR7_FilterConfig_Vtbl; - pVMR->IVMRFilterConfig9_iface.lpVtbl = &VMR9_FilterConfig_Vtbl; - pVMR->IVMRMonitorConfig_iface.lpVtbl = &VMR7_MonitorConfig_Vtbl; - pVMR->IVMRMonitorConfig9_iface.lpVtbl = &VMR9_MonitorConfig_Vtbl; - pVMR->IVMRSurfaceAllocatorNotify_iface.lpVtbl = &VMR7_SurfaceAllocatorNotify_Vtbl; - pVMR->IVMRSurfaceAllocatorNotify9_iface.lpVtbl = &VMR9_SurfaceAllocatorNotify_Vtbl; - pVMR->IVMRWindowlessControl_iface.lpVtbl = &VMR7_WindowlessControl_Vtbl; - pVMR->IVMRWindowlessControl9_iface.lpVtbl = &VMR9_WindowlessControl_Vtbl; - pVMR->IOverlay_iface.lpVtbl = &overlay_vtbl; - - hr = strmbase_renderer_init(&pVMR->renderer, outer, clsid, L"VMR Input0", &renderer_ops); - if (FAILED(hr)) - goto fail; - - hr = video_window_init(&pVMR->baseControlWindow, &IVideoWindow_VTable, - &pVMR->renderer.filter, &pVMR->renderer.sink.pin, &renderer_BaseWindowFuncTable); - if (FAILED(hr)) - goto fail; - - if (FAILED(hr = BaseWindowImpl_PrepareWindow(&pVMR->baseControlWindow.baseWindow))) - goto fail; - - hr = basic_video_init(&pVMR->baseControlVideo, &pVMR->renderer.filter, - &pVMR->renderer.sink.pin, &renderer_BaseControlVideoFuncTable); - if (FAILED(hr)) - goto fail; + strmbase_renderer_init(&object->renderer, outer, clsid, L"VMR Input0", &renderer_ops); + object->IAMCertifiedOutputProtection_iface.lpVtbl = &IAMCertifiedOutputProtection_Vtbl; + object->IAMFilterMiscFlags_iface.lpVtbl = &IAMFilterMiscFlags_Vtbl; + object->IVMRFilterConfig_iface.lpVtbl = &VMR7_FilterConfig_Vtbl; + object->IVMRFilterConfig9_iface.lpVtbl = &VMR9_FilterConfig_Vtbl; + object->IVMRMonitorConfig_iface.lpVtbl = &VMR7_MonitorConfig_Vtbl; + object->IVMRMonitorConfig9_iface.lpVtbl = &VMR9_MonitorConfig_Vtbl; + object->IVMRSurfaceAllocatorNotify_iface.lpVtbl = &VMR7_SurfaceAllocatorNotify_Vtbl; + object->IVMRSurfaceAllocatorNotify9_iface.lpVtbl = &VMR9_SurfaceAllocatorNotify_Vtbl; + object->IVMRWindowlessControl_iface.lpVtbl = &VMR7_WindowlessControl_Vtbl; + object->IVMRWindowlessControl9_iface.lpVtbl = &VMR9_WindowlessControl_Vtbl; + object->IOverlay_iface.lpVtbl = &overlay_vtbl; + + video_window_init(&object->baseControlWindow, &IVideoWindow_VTable, + &object->renderer.filter, &object->renderer.sink.pin, &window_ops); + + if (FAILED(hr = video_window_create_window(&object->baseControlWindow))) + { + video_window_cleanup(&object->baseControlWindow); + strmbase_renderer_cleanup(&object->renderer); + FreeLibrary(object->hD3d9); + free(object); + return hr; + } - pVMR->run_event = CreateEventW(NULL, TRUE, FALSE, NULL); + basic_video_init(&object->baseControlVideo, &object->renderer.filter, + &object->renderer.sink.pin, &renderer_BaseControlVideoFuncTable); - *out = &pVMR->renderer.filter.IUnknown_inner; - ZeroMemory(&pVMR->source_rect, sizeof(RECT)); - ZeroMemory(&pVMR->target_rect, sizeof(RECT)); - TRACE("Created at %p\n", pVMR); - return hr; + object->run_event = CreateEventW(NULL, TRUE, FALSE, NULL); -fail: - BaseWindowImpl_DoneWithWindow(&pVMR->baseControlWindow.baseWindow); - strmbase_renderer_cleanup(&pVMR->renderer); - FreeLibrary(pVMR->hD3d9); - CoTaskMemFree(pVMR); - return hr; + TRACE("Created VMR %p.\n", object); + *out = &object->renderer.filter.IUnknown_inner; + return S_OK; } HRESULT vmr7_create(IUnknown *outer, IUnknown **out) @@ -2372,7 +2353,8 @@ static HRESULT WINAPI VMR9_ImagePresenter_QueryInterface(IVMRImagePresenter9 *iface, REFIID riid, void **ppv) { - VMR9DefaultAllocatorPresenterImpl *This = impl_from_IVMRImagePresenter9(iface); + struct default_presenter *This = impl_from_IVMRImagePresenter9(iface); + TRACE("(%p/%p)->(%s, %p)\n", This, iface, qzdebugstr_guid(riid), ppv); *ppv = NULL; @@ -2395,7 +2377,7 @@ static ULONG WINAPI VMR9_ImagePresenter_AddRef(IVMRImagePresenter9 *iface) { - VMR9DefaultAllocatorPresenterImpl *This = impl_from_IVMRImagePresenter9(iface); + struct default_presenter *This = impl_from_IVMRImagePresenter9(iface); ULONG refCount = InterlockedIncrement(&This->refCount); TRACE("(%p)->() AddRef from %d\n", iface, refCount - 1); @@ -2405,7 +2387,7 @@ static ULONG WINAPI VMR9_ImagePresenter_Release(IVMRImagePresenter9 *iface) { - VMR9DefaultAllocatorPresenterImpl *This = impl_from_IVMRImagePresenter9(iface); + struct default_presenter *This = impl_from_IVMRImagePresenter9(iface); ULONG refCount = InterlockedDecrement(&This->refCount); TRACE("(%p)->() Release from %d\n", iface, refCount + 1); @@ -2425,7 +2407,7 @@ IDirect3DSurface9_Release(surface); } - CoTaskMemFree(This->d3d9_surfaces); + free(This->d3d9_surfaces); This->d3d9_surfaces = NULL; This->num_surfaces = 0; if (This->d3d9_vertex) @@ -2433,7 +2415,7 @@ IDirect3DVertexBuffer9_Release(This->d3d9_vertex); This->d3d9_vertex = NULL; } - CoTaskMemFree(This); + free(This); return 0; } return refCount; @@ -2441,7 +2423,7 @@ static HRESULT WINAPI VMR9_ImagePresenter_StartPresenting(IVMRImagePresenter9 *iface, DWORD_PTR id) { - VMR9DefaultAllocatorPresenterImpl *This = impl_from_IVMRImagePresenter9(iface); + struct default_presenter *This = impl_from_IVMRImagePresenter9(iface); TRACE("(%p/%p/%p)->(...) stub\n", iface, This,This->pVMR9); return S_OK; @@ -2449,7 +2431,7 @@ static HRESULT WINAPI VMR9_ImagePresenter_StopPresenting(IVMRImagePresenter9 *iface, DWORD_PTR id) { - VMR9DefaultAllocatorPresenterImpl *This = impl_from_IVMRImagePresenter9(iface); + struct default_presenter *This = impl_from_IVMRImagePresenter9(iface); TRACE("(%p/%p/%p)->(...) stub\n", iface, This,This->pVMR9); return S_OK; @@ -2458,7 +2440,7 @@ #define USED_FVF (D3DFVF_XYZRHW | D3DFVF_TEX1) struct VERTEX { float x, y, z, rhw, u, v; }; -static HRESULT VMR9_ImagePresenter_PresentTexture(VMR9DefaultAllocatorPresenterImpl *This, IDirect3DSurface9 *surface) +static HRESULT VMR9_ImagePresenter_PresentTexture(struct default_presenter *This, IDirect3DSurface9 *surface) { IDirect3DTexture9 *texture = NULL; HRESULT hr; @@ -2501,7 +2483,7 @@ return S_OK; } -static HRESULT VMR9_ImagePresenter_PresentOffscreenSurface(VMR9DefaultAllocatorPresenterImpl *This, IDirect3DSurface9 *surface) +static HRESULT VMR9_ImagePresenter_PresentOffscreenSurface(struct default_presenter *This, IDirect3DSurface9 *surface) { HRESULT hr; IDirect3DSurface9 *target = NULL; @@ -2528,13 +2510,13 @@ static HRESULT WINAPI VMR9_ImagePresenter_PresentImage(IVMRImagePresenter9 *iface, DWORD_PTR id, VMR9PresentationInfo *info) { - VMR9DefaultAllocatorPresenterImpl *This = impl_from_IVMRImagePresenter9(iface); + struct default_presenter *This = impl_from_IVMRImagePresenter9(iface); HRESULT hr; RECT output; BOOL render = FALSE; TRACE("(%p/%p/%p)->(...) stub\n", iface, This, This->pVMR9); - GetWindowRect(This->pVMR9->baseControlWindow.baseWindow.hWnd, &output); + GetWindowRect(This->pVMR9->baseControlWindow.hwnd, &output); TRACE("Output rectangle: %s\n", wine_dbgstr_rect(&output)); /* This might happen if we don't have active focus (eg on a different virtual desktop) */ @@ -2559,7 +2541,7 @@ hr = IDirect3DDevice9_EndScene(This->d3d9_dev); if (render && SUCCEEDED(hr)) { - hr = IDirect3DDevice9_Present(This->d3d9_dev, NULL, NULL, This->pVMR9->baseControlWindow.baseWindow.hWnd, NULL); + hr = IDirect3DDevice9_Present(This->d3d9_dev, NULL, NULL, This->pVMR9->baseControlWindow.hwnd, NULL); if (FAILED(hr)) FIXME("Presenting image: %08x\n", hr); } @@ -2579,26 +2561,26 @@ static HRESULT WINAPI VMR9_SurfaceAllocator_QueryInterface(IVMRSurfaceAllocatorEx9 *iface, REFIID riid, LPVOID * ppv) { - VMR9DefaultAllocatorPresenterImpl *This = impl_from_IVMRSurfaceAllocatorEx9(iface); + struct default_presenter *This = impl_from_IVMRSurfaceAllocatorEx9(iface); return VMR9_ImagePresenter_QueryInterface(&This->IVMRImagePresenter9_iface, riid, ppv); } static ULONG WINAPI VMR9_SurfaceAllocator_AddRef(IVMRSurfaceAllocatorEx9 *iface) { - VMR9DefaultAllocatorPresenterImpl *This = impl_from_IVMRSurfaceAllocatorEx9(iface); + struct default_presenter *This = impl_from_IVMRSurfaceAllocatorEx9(iface); return VMR9_ImagePresenter_AddRef(&This->IVMRImagePresenter9_iface); } static ULONG WINAPI VMR9_SurfaceAllocator_Release(IVMRSurfaceAllocatorEx9 *iface) { - VMR9DefaultAllocatorPresenterImpl *This = impl_from_IVMRSurfaceAllocatorEx9(iface); + struct default_presenter *This = impl_from_IVMRSurfaceAllocatorEx9(iface); return VMR9_ImagePresenter_Release(&This->IVMRImagePresenter9_iface); } -static HRESULT VMR9_SurfaceAllocator_SetAllocationSettings(VMR9DefaultAllocatorPresenterImpl *This, VMR9AllocationInfo *allocinfo) +static HRESULT VMR9_SurfaceAllocator_SetAllocationSettings(struct default_presenter *This, VMR9AllocationInfo *allocinfo) { D3DCAPS9 caps; UINT width, height; @@ -2674,7 +2656,7 @@ return d3d9_adapter; } -static BOOL CreateRenderingWindow(VMR9DefaultAllocatorPresenterImpl *This, VMR9AllocationInfo *info, DWORD *numbuffers) +static BOOL CreateRenderingWindow(struct default_presenter *This, VMR9AllocationInfo *info, DWORD *numbuffers) { D3DPRESENT_PARAMETERS d3dpp; DWORD d3d9_adapter; @@ -2683,12 +2665,12 @@ TRACE("(%p)->()\n", This); /* Obtain a monitor and d3d9 device */ - d3d9_adapter = d3d9_adapter_from_hwnd(This->d3d9_ptr, This->pVMR9->baseControlWindow.baseWindow.hWnd, &This->hMon); + d3d9_adapter = d3d9_adapter_from_hwnd(This->d3d9_ptr, This->pVMR9->baseControlWindow.hwnd, &This->hMon); /* Now try to create the d3d9 device */ ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed = TRUE; - d3dpp.hDeviceWindow = This->pVMR9->baseControlWindow.baseWindow.hWnd; + d3dpp.hDeviceWindow = This->pVMR9->baseControlWindow.hwnd; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferHeight = This->pVMR9->target_rect.bottom - This->pVMR9->target_rect.top; d3dpp.BackBufferWidth = This->pVMR9->target_rect.right - This->pVMR9->target_rect.left; @@ -2701,8 +2683,8 @@ } IVMRSurfaceAllocatorNotify9_SetD3DDevice(This->SurfaceAllocatorNotify, This->d3d9_dev, This->hMon); - This->d3d9_surfaces = CoTaskMemAlloc(*numbuffers * sizeof(IDirect3DSurface9 *)); - ZeroMemory(This->d3d9_surfaces, *numbuffers * sizeof(IDirect3DSurface9 *)); + if (!(This->d3d9_surfaces = calloc(*numbuffers, sizeof(IDirect3DSurface9 *)))) + return FALSE; hr = VMR9_SurfaceAllocator_SetAllocationSettings(This, info); if (FAILED(hr)) @@ -2728,7 +2710,7 @@ static HRESULT WINAPI VMR9_SurfaceAllocator_InitializeDevice(IVMRSurfaceAllocatorEx9 *iface, DWORD_PTR id, VMR9AllocationInfo *allocinfo, DWORD *numbuffers) { - VMR9DefaultAllocatorPresenterImpl *This = impl_from_IVMRSurfaceAllocatorEx9(iface); + struct default_presenter *This = impl_from_IVMRSurfaceAllocatorEx9(iface); if (This->pVMR9->mode != VMR9Mode_Windowed && !This->pVMR9->hWndClippingWindow) { @@ -2755,7 +2737,7 @@ } /* Recreate all surfaces (If allocated as D3DPOOL_DEFAULT) and survive! */ -static HRESULT VMR9_SurfaceAllocator_UpdateDeviceReset(VMR9DefaultAllocatorPresenterImpl *This) +static HRESULT VMR9_SurfaceAllocator_UpdateDeviceReset(struct default_presenter *This) { struct VERTEX t_vert[4]; UINT width, height; @@ -2787,16 +2769,20 @@ /* Now try to create the d3d9 device */ ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed = TRUE; - d3dpp.hDeviceWindow = This->pVMR9->baseControlWindow.baseWindow.hWnd; + d3dpp.hDeviceWindow = This->pVMR9->baseControlWindow.hwnd; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; if (This->d3d9_dev) IDirect3DDevice9_Release(This->d3d9_dev); This->d3d9_dev = NULL; - hr = IDirect3D9_CreateDevice(This->d3d9_ptr, d3d9_adapter_from_hwnd(This->d3d9_ptr, This->pVMR9->baseControlWindow.baseWindow.hWnd, &This->hMon), D3DDEVTYPE_HAL, NULL, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &This->d3d9_dev); + hr = IDirect3D9_CreateDevice(This->d3d9_ptr, d3d9_adapter_from_hwnd(This->d3d9_ptr, + This->pVMR9->baseControlWindow.hwnd, &This->hMon), D3DDEVTYPE_HAL, NULL, + D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &This->d3d9_dev); if (FAILED(hr)) { - hr = IDirect3D9_CreateDevice(This->d3d9_ptr, d3d9_adapter_from_hwnd(This->d3d9_ptr, This->pVMR9->baseControlWindow.baseWindow.hWnd, &This->hMon), D3DDEVTYPE_HAL, NULL, D3DCREATE_MIXED_VERTEXPROCESSING, &d3dpp, &This->d3d9_dev); + hr = IDirect3D9_CreateDevice(This->d3d9_ptr, d3d9_adapter_from_hwnd(This->d3d9_ptr, + This->pVMR9->baseControlWindow.hwnd, &This->hMon), D3DDEVTYPE_HAL, NULL, + D3DCREATE_MIXED_VERTEXPROCESSING, &d3dpp, &This->d3d9_dev); if (FAILED(hr)) { ERR("--> Creating device: %08x\n", hr); @@ -2860,7 +2846,7 @@ static HRESULT WINAPI VMR9_SurfaceAllocator_GetSurface(IVMRSurfaceAllocatorEx9 *iface, DWORD_PTR id, DWORD surfaceindex, DWORD flags, IDirect3DSurface9 **surface) { - VMR9DefaultAllocatorPresenterImpl *This = impl_from_IVMRSurfaceAllocatorEx9(iface); + struct default_presenter *This = impl_from_IVMRSurfaceAllocatorEx9(iface); /* Update everything first, this is needed because the surface might be destroyed in the reset */ if (!This->d3d9_dev) @@ -2884,7 +2870,7 @@ static HRESULT WINAPI VMR9_SurfaceAllocator_AdviseNotify(IVMRSurfaceAllocatorEx9 *iface, IVMRSurfaceAllocatorNotify9 *allocnotify) { - VMR9DefaultAllocatorPresenterImpl *This = impl_from_IVMRSurfaceAllocatorEx9(iface); + struct default_presenter *This = impl_from_IVMRSurfaceAllocatorEx9(iface); TRACE("(%p/%p)->(...)\n", iface, This); @@ -2917,19 +2903,18 @@ static HRESULT VMR9DefaultAllocatorPresenterImpl_create(struct quartz_vmr *parent, LPVOID * ppv) { + struct default_presenter *object; HRESULT hr = S_OK; int i; - VMR9DefaultAllocatorPresenterImpl* This; - This = CoTaskMemAlloc(sizeof(VMR9DefaultAllocatorPresenterImpl)); - if (!This) + if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; - This->d3d9_ptr = init_d3d9(parent->hD3d9); - if (!This->d3d9_ptr) + object->d3d9_ptr = init_d3d9(parent->hD3d9); + if (!object->d3d9_ptr) { WARN("Could not initialize d3d9.dll\n"); - CoTaskMemFree(This); + free(object); return VFW_E_DDRAW_CAPS_NOT_SUITABLE; } @@ -2938,7 +2923,7 @@ { D3DDISPLAYMODE mode; - hr = IDirect3D9_EnumAdapterModes(This->d3d9_ptr, i++, D3DFMT_X8R8G8B8, 0, &mode); + hr = IDirect3D9_EnumAdapterModes(object->d3d9_ptr, i++, D3DFMT_X8R8G8B8, 0, &mode); if (hr == D3DERR_INVALIDCALL) break; /* out of adapters */ } while (FAILED(hr)); if (FAILED(hr)) @@ -2946,24 +2931,18 @@ if (hr == D3DERR_NOTAVAILABLE) { ERR("Format not supported\n"); - IDirect3D9_Release(This->d3d9_ptr); - CoTaskMemFree(This); + IDirect3D9_Release(object->d3d9_ptr); + free(object); return VFW_E_DDRAW_CAPS_NOT_SUITABLE; } - This->IVMRImagePresenter9_iface.lpVtbl = &VMR9_ImagePresenter; - This->IVMRSurfaceAllocatorEx9_iface.lpVtbl = &VMR9_SurfaceAllocator; + object->IVMRImagePresenter9_iface.lpVtbl = &VMR9_ImagePresenter; + object->IVMRSurfaceAllocatorEx9_iface.lpVtbl = &VMR9_SurfaceAllocator; - This->refCount = 1; - This->pVMR9 = parent; - This->d3d9_surfaces = NULL; - This->d3d9_dev = NULL; - This->hMon = 0; - This->d3d9_vertex = NULL; - This->num_surfaces = 0; - This->SurfaceAllocatorNotify = NULL; - This->reset = FALSE; + object->refCount = 1; + object->pVMR9 = parent; - *ppv = &This->IVMRImagePresenter9_iface; + TRACE("Created default presenter %p.\n", object); + *ppv = &object->IVMRImagePresenter9_iface; return S_OK; } diff -Nru wine-development-5.5/dlls/quartz/window.c wine-development-5.6/dlls/quartz/window.c --- wine-development-5.5/dlls/quartz/window.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/quartz/window.c 2020-04-10 18:54:32.000000000 +0000 @@ -24,22 +24,16 @@ static const WCHAR class_name[] = L"wine_quartz_window"; -static inline BaseControlWindow *impl_from_IVideoWindow( IVideoWindow *iface) +static inline struct video_window *impl_from_IVideoWindow(IVideoWindow *iface) { - return CONTAINING_RECORD(iface, BaseControlWindow, IVideoWindow_iface); -} - -static inline BaseControlWindow *impl_from_BaseWindow(BaseWindow *iface) -{ - return CONTAINING_RECORD(iface, BaseControlWindow, baseWindow); + return CONTAINING_RECORD(iface, struct video_window, IVideoWindow_iface); } static LRESULT CALLBACK WndProcW(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { - BaseWindow* This = (BaseWindow*)GetWindowLongPtrW(hwnd, 0); - BaseControlWindow *window = impl_from_BaseWindow(This); + struct video_window *window = (struct video_window *)GetWindowLongPtrW(hwnd, 0); - if (!This) + if (!window) return DefWindowProcW(hwnd, message, wparam, lparam); switch (message) @@ -74,42 +68,19 @@ } break; case WM_SIZE: - if (This->pFuncsTable->pfnOnSize) - return This->pFuncsTable->pfnOnSize(This, LOWORD(lparam), HIWORD(lparam)); - - This->Width = LOWORD(lparam); - This->Height = HIWORD(lparam); + if (window->ops->resize) + return window->ops->resize(window, LOWORD(lparam), HIWORD(lparam)); } return DefWindowProcW(hwnd, message, wparam, lparam); } -HRESULT WINAPI BaseWindow_Init(BaseWindow *pBaseWindow, const BaseWindowFuncTable* pFuncsTable) -{ - if (!pFuncsTable) - return E_INVALIDARG; - - ZeroMemory(pBaseWindow,sizeof(BaseWindow)); - pBaseWindow->pFuncsTable = pFuncsTable; - - return S_OK; -} - -HRESULT WINAPI BaseWindow_Destroy(BaseWindow *This) -{ - if (This->hWnd) - BaseWindowImpl_DoneWithWindow(This); - - HeapFree(GetProcessHeap(), 0, This); - return S_OK; -} - -HRESULT WINAPI BaseWindowImpl_PrepareWindow(BaseWindow *This) +HRESULT video_window_create_window(struct video_window *window) { WNDCLASSW winclass = {0}; winclass.lpfnWndProc = WndProcW; - winclass.cbWndExtra = sizeof(BaseWindow*); + winclass.cbWndExtra = sizeof(window); winclass.hbrBackground = GetStockObject(BLACK_BRUSH); winclass.lpszClassName = class_name; if (!RegisterClassW(&winclass) && GetLastError() != ERROR_CLASS_ALREADY_EXISTS) @@ -118,79 +89,35 @@ return E_FAIL; } - This->hWnd = CreateWindowExW(0, class_name, L"ActiveMovie Window", + if (!(window->hwnd = CreateWindowExW(0, class_name, L"ActiveMovie Window", WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, - NULL, NULL, NULL, NULL); - - if (!This->hWnd) + NULL, NULL, NULL, NULL))) { ERR("Unable to create window\n"); return E_FAIL; } - SetWindowLongPtrW(This->hWnd, 0, (LONG_PTR)This); + SetWindowLongPtrW(window->hwnd, 0, (LONG_PTR)window); return S_OK; } -HRESULT WINAPI BaseWindowImpl_DoneWithWindow(BaseWindow *This) -{ - if (!This->hWnd) - return S_OK; - - /* Media Player Classic deadlocks if WM_PARENTNOTIFY is sent, so clear - * the child style first. Just like Windows, we don't actually unparent - * the window, to prevent extra focus events from being generated since - * it would become top-level for a brief period before being destroyed. */ - SetWindowLongW(This->hWnd, GWL_STYLE, GetWindowLongW(This->hWnd, GWL_STYLE) & ~WS_CHILD); - - SendMessageW(This->hWnd, WM_CLOSE, 0, 0); - This->hWnd = NULL; - - return S_OK; -} - -HRESULT video_window_init(BaseControlWindow *pControlWindow, - const IVideoWindowVtbl *lpVtbl, struct strmbase_filter *owner, - struct strmbase_pin *pPin, const BaseWindowFuncTable *pFuncsTable) -{ - HRESULT hr; - - hr = BaseWindow_Init(&pControlWindow->baseWindow, pFuncsTable); - if (SUCCEEDED(hr)) - { - pControlWindow->IVideoWindow_iface.lpVtbl = lpVtbl; - pControlWindow->AutoShow = OATRUE; - pControlWindow->hwndDrain = NULL; - pControlWindow->hwndOwner = NULL; - pControlWindow->pFilter = owner; - pControlWindow->pPin = pPin; - } - return hr; -} - -HRESULT WINAPI BaseControlWindow_Destroy(BaseControlWindow *pControlWindow) -{ - BaseWindowImpl_DoneWithWindow(&pControlWindow->baseWindow); - return S_OK; -} - HRESULT WINAPI BaseControlWindowImpl_QueryInterface(IVideoWindow *iface, REFIID iid, void **out) { - BaseControlWindow *window = impl_from_IVideoWindow(iface); + struct video_window *window = impl_from_IVideoWindow(iface); return IUnknown_QueryInterface(window->pFilter->outer_unk, iid, out); } ULONG WINAPI BaseControlWindowImpl_AddRef(IVideoWindow *iface) { - BaseControlWindow *window = impl_from_IVideoWindow(iface); + struct video_window *window = impl_from_IVideoWindow(iface); return IUnknown_AddRef(window->pFilter->outer_unk); } ULONG WINAPI BaseControlWindowImpl_Release(IVideoWindow *iface) { - BaseControlWindow *window = impl_from_IVideoWindow(iface); + struct video_window *window = impl_from_IVideoWindow(iface); return IUnknown_Release(window->pFilter->outer_unk); } @@ -242,13 +169,13 @@ return hr; } -HRESULT WINAPI BaseControlWindowImpl_put_Caption(IVideoWindow *iface, BSTR strCaption) +HRESULT WINAPI BaseControlWindowImpl_put_Caption(IVideoWindow *iface, BSTR caption) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *window = impl_from_IVideoWindow(iface); - TRACE("(%p/%p)->(%s (%p))\n", This, iface, debugstr_w(strCaption), strCaption); + TRACE("window %p, caption %s.\n", window, debugstr_w(caption)); - if (!SetWindowTextW(This->baseWindow.hWnd, strCaption)) + if (!SetWindowTextW(window->hwnd, caption)) return E_FAIL; return S_OK; @@ -256,7 +183,7 @@ HRESULT WINAPI BaseControlWindowImpl_get_Caption(IVideoWindow *iface, BSTR *caption) { - BaseControlWindow *window = impl_from_IVideoWindow(iface); + struct video_window *window = impl_from_IVideoWindow(iface); WCHAR *str; int len; @@ -264,72 +191,65 @@ *caption = NULL; - len = GetWindowTextLengthW(window->baseWindow.hWnd) + 1; + len = GetWindowTextLengthW(window->hwnd) + 1; if (!(str = heap_alloc(len * sizeof(WCHAR)))) return E_OUTOFMEMORY; - GetWindowTextW(window->baseWindow.hWnd, str, len); + GetWindowTextW(window->hwnd, str, len); *caption = SysAllocString(str); heap_free(str); return *caption ? S_OK : E_OUTOFMEMORY; } -HRESULT WINAPI BaseControlWindowImpl_put_WindowStyle(IVideoWindow *iface, LONG WindowStyle) +HRESULT WINAPI BaseControlWindowImpl_put_WindowStyle(IVideoWindow *iface, LONG style) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); - LONG old; - - old = GetWindowLongW(This->baseWindow.hWnd, GWL_STYLE); + struct video_window *window = impl_from_IVideoWindow(iface); - TRACE("(%p/%p)->(%x -> %x)\n", This, iface, old, WindowStyle); + TRACE("window %p, style %#x.\n", window, style); - if (WindowStyle & (WS_DISABLED|WS_HSCROLL|WS_MAXIMIZE|WS_MINIMIZE|WS_VSCROLL)) + if (style & (WS_DISABLED|WS_HSCROLL|WS_MAXIMIZE|WS_MINIMIZE|WS_VSCROLL)) return E_INVALIDARG; - SetWindowLongW(This->baseWindow.hWnd, GWL_STYLE, WindowStyle); - SetWindowPos(This->baseWindow.hWnd, 0, 0, 0, 0, 0, + SetWindowLongW(window->hwnd, GWL_STYLE, style); + SetWindowPos(window->hwnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED); - return S_OK; } HRESULT WINAPI BaseControlWindowImpl_get_WindowStyle(IVideoWindow *iface, LONG *style) { - BaseControlWindow *window = impl_from_IVideoWindow(iface); + struct video_window *window = impl_from_IVideoWindow(iface); TRACE("window %p, style %p.\n", window, style); - *style = GetWindowLongW(window->baseWindow.hWnd, GWL_STYLE); - + *style = GetWindowLongW(window->hwnd, GWL_STYLE); return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_put_WindowStyleEx(IVideoWindow *iface, LONG WindowStyleEx) +HRESULT WINAPI BaseControlWindowImpl_put_WindowStyleEx(IVideoWindow *iface, LONG style) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *window = impl_from_IVideoWindow(iface); - TRACE("(%p/%p)->(%d)\n", This, iface, WindowStyleEx); + TRACE("window %p, style %#x.\n", window, style); - if (!SetWindowLongW(This->baseWindow.hWnd, GWL_EXSTYLE, WindowStyleEx)) + if (!SetWindowLongW(window->hwnd, GWL_EXSTYLE, style)) return E_FAIL; - return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_get_WindowStyleEx(IVideoWindow *iface, LONG *WindowStyleEx) +HRESULT WINAPI BaseControlWindowImpl_get_WindowStyleEx(IVideoWindow *iface, LONG *style) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); - - TRACE("(%p/%p)->(%p)\n", This, iface, WindowStyleEx); + struct video_window *window = impl_from_IVideoWindow(iface); - *WindowStyleEx = GetWindowLongW(This->baseWindow.hWnd, GWL_EXSTYLE); + TRACE("window %p, style %p.\n", window, style); + *style = GetWindowLongW(window->hwnd, GWL_EXSTYLE); return S_OK; } HRESULT WINAPI BaseControlWindowImpl_put_AutoShow(IVideoWindow *iface, LONG AutoShow) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *This = impl_from_IVideoWindow(iface); TRACE("(%p/%p)->(%d)\n", This, iface, AutoShow); @@ -340,7 +260,7 @@ HRESULT WINAPI BaseControlWindowImpl_get_AutoShow(IVideoWindow *iface, LONG *AutoShow) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *This = impl_from_IVideoWindow(iface); TRACE("(%p/%p)->(%p)\n", This, iface, AutoShow); @@ -349,23 +269,24 @@ return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_put_WindowState(IVideoWindow *iface, LONG WindowState) +HRESULT WINAPI BaseControlWindowImpl_put_WindowState(IVideoWindow *iface, LONG state) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *window = impl_from_IVideoWindow(iface); + + TRACE("window %p, state %#x.\n", window, state); - TRACE("(%p/%p)->(%d)\n", This, iface, WindowState); - ShowWindow(This->baseWindow.hWnd, WindowState); + ShowWindow(window->hwnd, state); return S_OK; } HRESULT WINAPI BaseControlWindowImpl_get_WindowState(IVideoWindow *iface, LONG *state) { - BaseControlWindow *window = impl_from_IVideoWindow(iface); + struct video_window *window = impl_from_IVideoWindow(iface); DWORD style; TRACE("window %p, state %p.\n", window, state); - style = GetWindowLongPtrW(window->baseWindow.hWnd, GWL_STYLE); + style = GetWindowLongPtrW(window->hwnd, GWL_STYLE); if (!(style & WS_VISIBLE)) *state = SW_HIDE; else if (style & WS_MINIMIZE) @@ -380,7 +301,7 @@ HRESULT WINAPI BaseControlWindowImpl_put_BackgroundPalette(IVideoWindow *iface, LONG BackgroundPalette) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *This = impl_from_IVideoWindow(iface); FIXME("(%p/%p)->(%d): stub !!!\n", This, iface, BackgroundPalette); @@ -389,147 +310,145 @@ HRESULT WINAPI BaseControlWindowImpl_get_BackgroundPalette(IVideoWindow *iface, LONG *pBackgroundPalette) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *This = impl_from_IVideoWindow(iface); FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, pBackgroundPalette); return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_put_Visible(IVideoWindow *iface, LONG Visible) +HRESULT WINAPI BaseControlWindowImpl_put_Visible(IVideoWindow *iface, LONG visible) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *window = impl_from_IVideoWindow(iface); - TRACE("(%p/%p)->(%d)\n", This, iface, Visible); - - ShowWindow(This->baseWindow.hWnd, Visible ? SW_SHOW : SW_HIDE); + TRACE("window %p, visible %d.\n", window, visible); + ShowWindow(window->hwnd, visible ? SW_SHOW : SW_HIDE); return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_get_Visible(IVideoWindow *iface, LONG *pVisible) +HRESULT WINAPI BaseControlWindowImpl_get_Visible(IVideoWindow *iface, LONG *visible) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); - - TRACE("(%p/%p)->(%p)\n", This, iface, pVisible); + struct video_window *window = impl_from_IVideoWindow(iface); - *pVisible = IsWindowVisible(This->baseWindow.hWnd) ? OATRUE : OAFALSE; + TRACE("window %p, visible %p.\n", window, visible); + *visible = IsWindowVisible(window->hwnd) ? OATRUE : OAFALSE; return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_put_Left(IVideoWindow *iface, LONG Left) +HRESULT WINAPI BaseControlWindowImpl_put_Left(IVideoWindow *iface, LONG left) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); - RECT WindowPos; + struct video_window *window = impl_from_IVideoWindow(iface); + RECT rect; - TRACE("(%p/%p)->(%d)\n", This, iface, Left); + TRACE("window %p, left %d.\n", window, left); - GetWindowRect(This->baseWindow.hWnd, &WindowPos); - if (!SetWindowPos(This->baseWindow.hWnd, NULL, Left, WindowPos.top, 0, 0, + GetWindowRect(window->hwnd, &rect); + if (!SetWindowPos(window->hwnd, NULL, left, rect.top, 0, 0, SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE)) return E_FAIL; return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_get_Left(IVideoWindow *iface, LONG *pLeft) +HRESULT WINAPI BaseControlWindowImpl_get_Left(IVideoWindow *iface, LONG *left) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); - RECT WindowPos; + struct video_window *window = impl_from_IVideoWindow(iface); + RECT rect; - TRACE("(%p/%p)->(%p)\n", This, iface, pLeft); - GetWindowRect(This->baseWindow.hWnd, &WindowPos); - - *pLeft = WindowPos.left; + TRACE("window %p, left %p.\n", window, left); + GetWindowRect(window->hwnd, &rect); + *left = rect.left; return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_put_Width(IVideoWindow *iface, LONG Width) +HRESULT WINAPI BaseControlWindowImpl_put_Width(IVideoWindow *iface, LONG width) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *window = impl_from_IVideoWindow(iface); + RECT rect; - TRACE("(%p/%p)->(%d)\n", This, iface, Width); + TRACE("window %p, width %d.\n", window, width); - if (!SetWindowPos(This->baseWindow.hWnd, NULL, 0, 0, Width, This->baseWindow.Height, + GetWindowRect(window->hwnd, &rect); + if (!SetWindowPos(window->hwnd, NULL, 0, 0, width, rect.bottom - rect.top, SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE)) return E_FAIL; - This->baseWindow.Width = Width; - return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_get_Width(IVideoWindow *iface, LONG *pWidth) +HRESULT WINAPI BaseControlWindowImpl_get_Width(IVideoWindow *iface, LONG *width) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *window = impl_from_IVideoWindow(iface); + RECT rect; - TRACE("(%p/%p)->(%p)\n", This, iface, pWidth); - - *pWidth = This->baseWindow.Width; + TRACE("window %p, width %p.\n", window, width); + GetWindowRect(window->hwnd, &rect); + *width = rect.right - rect.left; return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_put_Top(IVideoWindow *iface, LONG Top) +HRESULT WINAPI BaseControlWindowImpl_put_Top(IVideoWindow *iface, LONG top) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); - RECT WindowPos; + struct video_window *window = impl_from_IVideoWindow(iface); + RECT rect; - TRACE("(%p/%p)->(%d)\n", This, iface, Top); - GetWindowRect(This->baseWindow.hWnd, &WindowPos); + TRACE("window %p, top %d.\n", window, top); - if (!SetWindowPos(This->baseWindow.hWnd, NULL, WindowPos.left, Top, 0, 0, + GetWindowRect(window->hwnd, &rect); + if (!SetWindowPos(window->hwnd, NULL, rect.left, top, 0, 0, SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE)) return E_FAIL; return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_get_Top(IVideoWindow *iface, LONG *pTop) +HRESULT WINAPI BaseControlWindowImpl_get_Top(IVideoWindow *iface, LONG *top) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); - RECT WindowPos; - - TRACE("(%p/%p)->(%p)\n", This, iface, pTop); - GetWindowRect(This->baseWindow.hWnd, &WindowPos); + struct video_window *window = impl_from_IVideoWindow(iface); + RECT rect; - *pTop = WindowPos.top; + TRACE("window %p, top %p.\n", window, top); + GetWindowRect(window->hwnd, &rect); + *top = rect.top; return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_put_Height(IVideoWindow *iface, LONG Height) +HRESULT WINAPI BaseControlWindowImpl_put_Height(IVideoWindow *iface, LONG height) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *window = impl_from_IVideoWindow(iface); + RECT rect; - TRACE("(%p/%p)->(%d)\n", This, iface, Height); + TRACE("window %p, height %d.\n", window, height); - if (!SetWindowPos(This->baseWindow.hWnd, NULL, 0, 0, This->baseWindow.Width, - Height, SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE)) + GetWindowRect(window->hwnd, &rect); + if (!SetWindowPos(window->hwnd, NULL, 0, 0, rect.right - rect.left, + height, SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE)) return E_FAIL; - This->baseWindow.Height = Height; - return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_get_Height(IVideoWindow *iface, LONG *pHeight) +HRESULT WINAPI BaseControlWindowImpl_get_Height(IVideoWindow *iface, LONG *height) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); - - TRACE("(%p/%p)->(%p)\n", This, iface, pHeight); + struct video_window *window = impl_from_IVideoWindow(iface); + RECT rect; - *pHeight = This->baseWindow.Height; + TRACE("window %p, height %p.\n", window, height); + GetWindowRect(window->hwnd, &rect); + *height = rect.bottom - rect.top; return S_OK; } HRESULT WINAPI BaseControlWindowImpl_put_Owner(IVideoWindow *iface, OAHWND owner) { - BaseControlWindow *window = impl_from_IVideoWindow(iface); - HWND hwnd = window->baseWindow.hWnd; + struct video_window *window = impl_from_IVideoWindow(iface); + HWND hwnd = window->hwnd; TRACE("window %p, owner %#lx.\n", window, owner); @@ -548,7 +467,7 @@ HRESULT WINAPI BaseControlWindowImpl_get_Owner(IVideoWindow *iface, OAHWND *Owner) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *This = impl_from_IVideoWindow(iface); TRACE("(%p/%p)->(%p)\n", This, iface, Owner); @@ -559,7 +478,7 @@ HRESULT WINAPI BaseControlWindowImpl_put_MessageDrain(IVideoWindow *iface, OAHWND Drain) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *This = impl_from_IVideoWindow(iface); TRACE("(%p/%p)->(%08x)\n", This, iface, (DWORD) Drain); @@ -570,7 +489,7 @@ HRESULT WINAPI BaseControlWindowImpl_get_MessageDrain(IVideoWindow *iface, OAHWND *Drain) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *This = impl_from_IVideoWindow(iface); TRACE("(%p/%p)->(%p)\n", This, iface, Drain); @@ -581,7 +500,7 @@ HRESULT WINAPI BaseControlWindowImpl_get_BorderColor(IVideoWindow *iface, LONG *Color) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *This = impl_from_IVideoWindow(iface); FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, Color); @@ -590,7 +509,7 @@ HRESULT WINAPI BaseControlWindowImpl_put_BorderColor(IVideoWindow *iface, LONG Color) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *This = impl_from_IVideoWindow(iface); FIXME("(%p/%p)->(%d): stub !!!\n", This, iface, Color); @@ -612,7 +531,7 @@ HRESULT WINAPI BaseControlWindowImpl_SetWindowForeground(IVideoWindow *iface, LONG focus) { - BaseControlWindow *window = impl_from_IVideoWindow(iface); + struct video_window *window = impl_from_IVideoWindow(iface); UINT flags = SWP_NOMOVE | SWP_NOSIZE; TRACE("window %p, focus %d.\n", window, focus); @@ -625,46 +544,43 @@ if (!focus) flags |= SWP_NOACTIVATE; - SetWindowPos(window->baseWindow.hWnd, HWND_TOP, 0, 0, 0, 0, flags); + SetWindowPos(window->hwnd, HWND_TOP, 0, 0, 0, 0, flags); return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_SetWindowPosition(IVideoWindow *iface, LONG Left, LONG Top, LONG Width, LONG Height) +HRESULT WINAPI BaseControlWindowImpl_SetWindowPosition(IVideoWindow *iface, + LONG left, LONG top, LONG width, LONG height) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *window = impl_from_IVideoWindow(iface); - TRACE("(%p/%p)->(%d, %d, %d, %d)\n", This, iface, Left, Top, Width, Height); + TRACE("window %p, left %d, top %d, width %d, height %d.\n", window, left, top, width, height); - if (!SetWindowPos(This->baseWindow.hWnd, NULL, Left, Top, Width, Height, SWP_NOACTIVATE | SWP_NOZORDER)) + if (!SetWindowPos(window->hwnd, NULL, left, top, width, height, SWP_NOACTIVATE | SWP_NOZORDER)) return E_FAIL; - - This->baseWindow.Width = Width; - This->baseWindow.Height = Height; - return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_GetWindowPosition(IVideoWindow *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight) +HRESULT WINAPI BaseControlWindowImpl_GetWindowPosition(IVideoWindow *iface, + LONG *left, LONG *top, LONG *width, LONG *height) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); - RECT WindowPos; + struct video_window *window = impl_from_IVideoWindow(iface); + RECT rect; - TRACE("(%p/%p)->(%p, %p, %p, %p)\n", This, iface, pLeft, pTop, pWidth, pHeight); - GetWindowRect(This->baseWindow.hWnd, &WindowPos); - - *pLeft = WindowPos.left; - *pTop = WindowPos.top; - *pWidth = This->baseWindow.Width; - *pHeight = This->baseWindow.Height; + TRACE("window %p, left %p, top %p, width %p, height %p.\n", window, left, top, width, height); + GetWindowRect(window->hwnd, &rect); + *left = rect.left; + *top = rect.top; + *width = rect.right - rect.left; + *height = rect.bottom - rect.top; return S_OK; } HRESULT WINAPI BaseControlWindowImpl_NotifyOwnerMessage(IVideoWindow *iface, OAHWND hwnd, LONG message, LONG_PTR wparam, LONG_PTR lparam) { - BaseControlWindow *window = impl_from_IVideoWindow(iface); + struct video_window *window = impl_from_IVideoWindow(iface); TRACE("window %p, hwnd %#lx, message %#x, wparam %#lx, lparam %#lx.\n", window, hwnd, message, wparam, lparam); @@ -680,44 +596,42 @@ case WM_PALETTEISCHANGING: case WM_QUERYNEWPALETTE: case WM_SYSCOLORCHANGE: - SendMessageW(window->baseWindow.hWnd, message, wparam, lparam); + SendMessageW(window->hwnd, message, wparam, lparam); break; } return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_GetMinIdealImageSize(IVideoWindow *iface, LONG *pWidth, LONG *pHeight) +HRESULT WINAPI BaseControlWindowImpl_GetMinIdealImageSize(IVideoWindow *iface, LONG *width, LONG *height) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); - RECT defaultRect; - - TRACE("(%p/%p)->(%p, %p)\n", This, iface, pWidth, pHeight); - defaultRect = This->baseWindow.pFuncsTable->pfnGetDefaultRect(&This->baseWindow); + struct video_window *window = impl_from_IVideoWindow(iface); + RECT rect; - *pWidth = defaultRect.right - defaultRect.left; - *pHeight = defaultRect.bottom - defaultRect.top; + TRACE("window %p, width %p, height %p.\n", window, width, height); + rect = window->ops->get_default_rect(window); + *width = rect.right - rect.left; + *height = rect.bottom - rect.top; return S_OK; } -HRESULT WINAPI BaseControlWindowImpl_GetMaxIdealImageSize(IVideoWindow *iface, LONG *pWidth, LONG *pHeight) +HRESULT WINAPI BaseControlWindowImpl_GetMaxIdealImageSize(IVideoWindow *iface, LONG *width, LONG *height) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); - RECT defaultRect; + struct video_window *window = impl_from_IVideoWindow(iface); + RECT rect; - TRACE("(%p/%p)->(%p, %p)\n", This, iface, pWidth, pHeight); - defaultRect = This->baseWindow.pFuncsTable->pfnGetDefaultRect(&This->baseWindow); - - *pWidth = defaultRect.right - defaultRect.left; - *pHeight = defaultRect.bottom - defaultRect.top; + TRACE("window %p, width %p, height %p.\n", window, width, height); + rect = window->ops->get_default_rect(window); + *width = rect.right - rect.left; + *height = rect.bottom - rect.top; return S_OK; } HRESULT WINAPI BaseControlWindowImpl_GetRestorePosition(IVideoWindow *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *This = impl_from_IVideoWindow(iface); FIXME("(%p/%p)->(%p, %p, %p, %p): stub !!!\n", This, iface, pLeft, pTop, pWidth, pHeight); @@ -726,7 +640,7 @@ HRESULT WINAPI BaseControlWindowImpl_HideCursor(IVideoWindow *iface, LONG HideCursor) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *This = impl_from_IVideoWindow(iface); FIXME("(%p/%p)->(%d): stub !!!\n", This, iface, HideCursor); @@ -735,7 +649,7 @@ HRESULT WINAPI BaseControlWindowImpl_IsCursorHidden(IVideoWindow *iface, LONG *CursorHidden) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + struct video_window *This = impl_from_IVideoWindow(iface); FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, CursorHidden); @@ -747,3 +661,29 @@ if (!UnregisterClassW(class_name, NULL) && GetLastError() != ERROR_CLASS_DOES_NOT_EXIST) ERR("Failed to unregister class, error %u.\n", GetLastError()); } + +void video_window_init(struct video_window *window, const IVideoWindowVtbl *vtbl, + struct strmbase_filter *owner, struct strmbase_pin *pin, const struct video_window_ops *ops) +{ + memset(window, 0, sizeof(*window)); + window->ops = ops; + window->IVideoWindow_iface.lpVtbl = vtbl; + window->AutoShow = OATRUE; + window->pFilter = owner; + window->pPin = pin; +} + +void video_window_cleanup(struct video_window *window) +{ + if (window->hwnd) + { + /* Media Player Classic deadlocks if WM_PARENTNOTIFY is sent, so clear + * the child style first. Just like Windows, we don't actually unparent + * the window, to prevent extra focus events from being generated since + * it would become top-level for a brief period before being destroyed. */ + SetWindowLongW(window->hwnd, GWL_STYLE, GetWindowLongW(window->hwnd, GWL_STYLE) & ~WS_CHILD); + + SendMessageW(window->hwnd, WM_CLOSE, 0, 0); + window->hwnd = NULL; + } +} diff -Nru wine-development-5.5/dlls/riched20/richole.c wine-development-5.6/dlls/riched20/richole.c --- wine-development-5.5/dlls/riched20/richole.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/riched20/richole.c 2020-04-10 18:54:32.000000000 +0000 @@ -2048,7 +2048,7 @@ { ITextRangeImpl *This = impl_from_ITextRange(me); - FIXME("(%p)->(%d %d): stub\n", This, anchor, active); + TRACE("(%p)->(%d %d)\n", This, anchor, active); if (!This->child.reole) return CO_E_RELEASED; diff -Nru wine-development-5.5/dlls/rpcrt4/ndr_stubless.c wine-development-5.6/dlls/rpcrt4/ndr_stubless.c --- wine-development-5.5/dlls/rpcrt4/ndr_stubless.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/rpcrt4/ndr_stubless.c 2020-04-10 18:54:32.000000000 +0000 @@ -210,6 +210,12 @@ pStubMsg->MaxCount = 0; size *= pStubMsg->MaxCount; break; + case FC_NON_ENCAPSULATED_UNION: + { + DWORD offset = *(const WORD *)(pFormat + 6 + pStubMsg->CorrDespIncrement); + size = *(const WORD *)(pFormat + 8 + pStubMsg->CorrDespIncrement + offset); + break; + } default: FIXME("Unhandled type %02x\n", *pFormat); /* fallthrough */ @@ -1608,7 +1614,7 @@ RPC_STATUS status; /* Later NDR language versions probably won't be backwards compatible */ - if (pStubDesc->Version > 0x50002) + if (pStubDesc->Version > 0x60001) { FIXME("Incompatible stub description version: 0x%x\n", pStubDesc->Version); RpcRaiseException(RPC_X_WRONG_STUB_VERSION); @@ -2204,3 +2210,126 @@ return S_OK; } + +static const RPC_SYNTAX_IDENTIFIER ndr_syntax_id = + {{0x8a885d04, 0x1ceb, 0x11c9, {0x9f, 0xe8, 0x08, 0x00, 0x2b, 0x10, 0x48, 0x60}}, {2, 0}}; + +LONG_PTR CDECL DECLSPEC_HIDDEN ndr64_client_call( MIDL_STUBLESS_PROXY_INFO *info, + ULONG proc, void *retval, void **stack_top, void **fpu_stack ) +{ + ULONG_PTR i; + + TRACE("info %p, proc %u, retval %p, stack_top %p, fpu_stack %p\n", + info, proc, retval, stack_top, fpu_stack); + + for (i = 0; i < info->nCount; ++i) + { + const MIDL_SYNTAX_INFO *syntax_info = &info->pSyntaxInfo[i]; + const RPC_SYNTAX_IDENTIFIER *id = &syntax_info->TransferSyntax; + + TRACE("Found syntax %s, version %u.%u.\n", debugstr_guid(&id->SyntaxGUID), + id->SyntaxVersion.MajorVersion, id->SyntaxVersion.MinorVersion); + if (!memcmp(id, &ndr_syntax_id, sizeof(RPC_SYNTAX_IDENTIFIER))) + { + if (retval) + FIXME("Complex return types are not supported.\n"); + + return ndr_client_call( info->pStubDesc, + syntax_info->ProcString + syntax_info->FmtStringOffset[proc], stack_top, fpu_stack ); + } + } + + FIXME("NDR64 syntax is not supported.\n"); + return 0; +} + +#ifdef __x86_64__ + +__ASM_GLOBAL_FUNC( NdrClientCall3, + "movq %r9,0x20(%rsp)\n\t" + "leaq 0x20(%rsp),%r9\n\t" + "pushq $0\n\t" + "subq $0x20,%rsp\n\t" + __ASM_CFI(".cfi_adjust_cfa_offset 0x28\n\t") + "call " __ASM_NAME("ndr64_client_call") "\n\t" + "addq $0x28,%rsp\n\t" + __ASM_CFI(".cfi_adjust_cfa_offset -0x28\n\t") + "ret" ); + +#elif defined(_WIN64) + +/*********************************************************************** + * NdrClientCall3 [RPCRT4.@] + */ +CLIENT_CALL_RETURN WINAPIV NdrClientCall3( MIDL_STUBLESS_PROXY_INFO *info, ULONG proc, void *retval, ... ) +{ + __ms_va_list args; + LONG_PTR ret; + + __ms_va_start( args, retval ); + ret = ndr64_client_call( info, proc, retval, va_arg( args, void ** ), NULL ); + __ms_va_end( args ); + return *(CLIENT_CALL_RETURN *)&ret; +} + +#endif + +LONG_PTR CDECL DECLSPEC_HIDDEN ndr64_async_client_call( MIDL_STUBLESS_PROXY_INFO *info, + ULONG proc, void *retval, void **stack_top, void **fpu_stack ) +{ + ULONG_PTR i; + + TRACE("info %p, proc %u, retval %p, stack_top %p, fpu_stack %p\n", + info, proc, retval, stack_top, fpu_stack); + + for (i = 0; i < info->nCount; ++i) + { + const MIDL_SYNTAX_INFO *syntax_info = &info->pSyntaxInfo[i]; + const RPC_SYNTAX_IDENTIFIER *id = &syntax_info->TransferSyntax; + + TRACE("Found syntax %s, version %u.%u.\n", debugstr_guid(&id->SyntaxGUID), + id->SyntaxVersion.MajorVersion, id->SyntaxVersion.MinorVersion); + if (!memcmp(id, &ndr_syntax_id, sizeof(RPC_SYNTAX_IDENTIFIER))) + { + if (retval) + FIXME("Complex return types are not supported.\n"); + + return ndr_async_client_call( info->pStubDesc, + syntax_info->ProcString + syntax_info->FmtStringOffset[proc], stack_top ); + } + } + + FIXME("NDR64 syntax is not supported.\n"); + return 0; +} + +#ifdef __x86_64__ + +__ASM_GLOBAL_FUNC( Ndr64AsyncClientCall, + "movq %r9,0x20(%rsp)\n\t" + "leaq 0x20(%rsp),%r9\n\t" + "pushq $0\n\t" + "subq $0x20,%rsp\n\t" + __ASM_CFI(".cfi_adjust_cfa_offset 0x28\n\t") + "call " __ASM_NAME("ndr64_async_client_call") "\n\t" + "addq $0x28,%rsp\n\t" + __ASM_CFI(".cfi_adjust_cfa_offset -0x28\n\t") + "ret" ); + +#elif defined(_WIN64) + +/*********************************************************************** + * Ndr64AsyncClientCall [RPCRT4.@] + */ +CLIENT_CALL_RETURN WINAPIV Ndr64AsyncClientCall( MIDL_STUBLESS_PROXY_INFO *info, ULONG proc, void *retval, ... ) +{ + __ms_va_list args; + LONG_PTR ret; + + __ms_va_start( args, retval ); + ret = ndr64_async_client_call( info, proc, retval, va_arg( args, void ** ), NULL ); + __ms_va_end( args ); + return *(CLIENT_CALL_RETURN *)&ret; +} + +#endif diff -Nru wine-development-5.5/dlls/rpcrt4/rpcrt4.spec wine-development-5.6/dlls/rpcrt4/rpcrt4.spec --- wine-development-5.5/dlls/rpcrt4/rpcrt4.spec 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/rpcrt4/rpcrt4.spec 2020-04-10 18:54:32.000000000 +0000 @@ -115,6 +115,7 @@ @ stdcall NDRSContextUnmarshall(ptr long) @ stdcall NDRSContextUnmarshallEx(ptr ptr long) @ stub NDRcopy +@ varargs -arch=win64 Ndr64AsyncClientCall(ptr long ptr) @ stdcall NdrAllocate(ptr long) @ varargs NdrAsyncClientCall(ptr ptr) @ stdcall NdrAsyncServerCall(ptr) @@ -128,6 +129,7 @@ @ stdcall NdrClearOutParameters(ptr ptr ptr) @ varargs NdrClientCall2(ptr ptr) @ varargs -arch=i386 NdrClientCall(ptr ptr) NdrClientCall2 +@ varargs -arch=win64 NdrClientCall3(ptr long ptr) @ stdcall NdrClientContextMarshall(ptr ptr long) @ stdcall NdrClientContextUnmarshall(ptr ptr ptr) @ stub NdrClientInitialize diff -Nru wine-development-5.5/dlls/rtworkq/queue.c wine-development-5.6/dlls/rtworkq/queue.c --- wine-development-5.5/dlls/rtworkq/queue.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/rtworkq/queue.c 2020-04-10 18:54:32.000000000 +0000 @@ -1471,3 +1471,74 @@ desc.target_queue = target_queue; return alloc_user_queue(&desc, queue); } + +HRESULT WINAPI RtwqJoinWorkQueue(DWORD queue, HANDLE hFile, HANDLE *cookie) +{ + FIXME("%#x, %p, %p.\n", queue, hFile, cookie); + + return E_NOTIMPL; +} + +HRESULT WINAPI RtwqUnjoinWorkQueue(DWORD queue, HANDLE cookie) +{ + FIXME("%#x, %p.\n", queue, cookie); + + return E_NOTIMPL; +} + +HRESULT WINAPI RtwqGetWorkQueueMMCSSClass(DWORD queue, WCHAR *class, DWORD *length) +{ + FIXME("%#x, %p, %p.\n", queue, class, length); + + return E_NOTIMPL; +} + +HRESULT WINAPI RtwqGetWorkQueueMMCSSTaskId(DWORD queue, DWORD *taskid) +{ + FIXME("%#x, %p.\n", queue, taskid); + + return E_NOTIMPL; +} + +HRESULT WINAPI RtwqGetWorkQueueMMCSSPriority(DWORD queue, LONG *priority) +{ + FIXME("%#x, %p.\n", queue, priority); + + return E_NOTIMPL; +} + +HRESULT WINAPI RtwqRegisterPlatformWithMMCSS(const WCHAR *class, DWORD *taskid, LONG priority) +{ + FIXME("%s, %p, %d.\n", debugstr_w(class), taskid, priority); + + return E_NOTIMPL; +} + +HRESULT WINAPI RtwqUnregisterPlatformFromMMCSS(void) +{ + FIXME("\n"); + + return E_NOTIMPL; +} + +HRESULT WINAPI RtwqBeginRegisterWorkQueueWithMMCSS(DWORD queue, const WCHAR *class, DWORD taskid, LONG priority, + IRtwqAsyncCallback *callback, IUnknown *state) +{ + FIXME("%#x, %s, %u, %d, %p, %p.\n", queue, debugstr_w(class), taskid, priority, callback, state); + + return E_NOTIMPL; +} + +HRESULT WINAPI RtwqRegisterPlatformEvents(IRtwqPlatformEvents *events) +{ + FIXME("%p.\n", events); + + return E_NOTIMPL; +} + +HRESULT WINAPI RtwqUnregisterPlatformEvents(IRtwqPlatformEvents *events) +{ + FIXME("%p.\n", events); + + return E_NOTIMPL; +} diff -Nru wine-development-5.5/dlls/rtworkq/rtworkq.spec wine-development-5.6/dlls/rtworkq/rtworkq.spec --- wine-development-5.5/dlls/rtworkq/rtworkq.spec 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/rtworkq/rtworkq.spec 2020-04-10 18:54:32.000000000 +0000 @@ -1,7 +1,7 @@ @ stdcall RtwqAddPeriodicCallback(ptr ptr ptr) @ stdcall RtwqAllocateSerialWorkQueue(long ptr) @ stdcall RtwqAllocateWorkQueue(long ptr) -@ stub RtwqBeginRegisterWorkQueueWithMMCSS +@ stdcall RtwqBeginRegisterWorkQueueWithMMCSS(long wstr long long ptr ptr) @ stub RtwqBeginUnregisterWorkQueueWithMMCSS @ stdcall RtwqCancelDeadline(long) @ stub RtwqCancelMultipleWaitingWorkItem @@ -10,19 +10,19 @@ @ stub RtwqEndRegisterWorkQueueWithMMCSS @ stub RtwqEndUnregisterWorkQueueWithMMCSS @ stub RtwqGetPlatform -@ stub RtwqGetWorkQueueMMCSSClass -@ stub RtwqGetWorkQueueMMCSSPriority -@ stub RtwqGetWorkQueueMMCSSTaskId +@ stdcall RtwqGetWorkQueueMMCSSClass(long ptr ptr) +@ stdcall RtwqGetWorkQueueMMCSSPriority(long ptr) +@ stdcall RtwqGetWorkQueueMMCSSTaskId(long ptr) @ stdcall RtwqInvokeCallback(ptr) -@ stub RtwqJoinWorkQueue +@ stdcall RtwqJoinWorkQueue(long long ptr) @ stdcall RtwqLockPlatform() @ stdcall RtwqLockSharedWorkQueue(wstr long ptr ptr) @ stdcall RtwqLockWorkQueue(long) @ stub RtwqPutMultipleWaitingWorkItem @ stdcall RtwqPutWaitingWorkItem(long long ptr ptr) @ stdcall RtwqPutWorkItem(long long ptr) -@ stub RtwqRegisterPlatformEvents -@ stub RtwqRegisterPlatformWithMMCSS +@ stdcall RtwqRegisterPlatformEvents(ptr) +@ stdcall RtwqRegisterPlatformWithMMCSS(wstr ptr long) @ stdcall RtwqRemovePeriodicCallback(long) @ stdcall RtwqScheduleWorkItem(ptr int64 ptr) @ stdcall RtwqSetDeadline(long int64 ptr) @@ -30,8 +30,8 @@ @ stdcall RtwqSetLongRunning(long long) @ stdcall RtwqShutdown() @ stdcall RtwqStartup() -@ stub RtwqUnjoinWorkQueue +@ stdcall RtwqUnjoinWorkQueue(long long) @ stdcall RtwqUnlockPlatform() @ stdcall RtwqUnlockWorkQueue(long) -@ stub RtwqUnregisterPlatformEvents -@ stub RtwqUnregisterPlatformFromMMCSS +@ stdcall RtwqUnregisterPlatformEvents(ptr) +@ stdcall RtwqUnregisterPlatformFromMMCSS() diff -Nru wine-development-5.5/dlls/sane.ds/sane_main.c wine-development-5.6/dlls/sane.ds/sane_main.c --- wine-development-5.5/dlls/sane.ds/sane_main.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/sane.ds/sane_main.c 2020-04-10 18:54:32.000000000 +0000 @@ -26,7 +26,6 @@ #include "sane_i.h" #include "wine/debug.h" -#include "wine/library.h" WINE_DEFAULT_DEBUG_CHANNEL(twain); @@ -59,22 +58,22 @@ static void close_libsane(void *h) { if (h) - wine_dlclose(h, NULL, 0); + dlclose(h); } static void *open_libsane(void) { void *h; - h = wine_dlopen(SONAME_LIBSANE, RTLD_GLOBAL | RTLD_NOW, NULL, 0); + h = dlopen(SONAME_LIBSANE, RTLD_GLOBAL | RTLD_NOW); if (!h) { - WARN("dlopen(%s) failed\n", SONAME_LIBSANE); + WARN("failed to load %s; %s\n", SONAME_LIBSANE, dlerror()); return NULL; } #define LOAD_FUNCPTR(f) \ - if((p##f = wine_dlsym(h, #f, NULL, 0)) == NULL) { \ + if((p##f = dlsym(h, #f)) == NULL) { \ close_libsane(h); \ ERR("Could not dlsym %s\n", #f); \ return NULL; \ diff -Nru wine-development-5.5/dlls/secur32/schannel.c wine-development-5.6/dlls/secur32/schannel.c --- wine-development-5.5/dlls/secur32/schannel.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/secur32/schannel.c 2020-04-10 18:54:32.000000000 +0000 @@ -786,6 +786,8 @@ struct schan_credentials *cred; SIZE_T expected_size = ~0UL; SECURITY_STATUS ret; + SecBuffer *buffer; + int idx; TRACE("%p %p %s 0x%08x %d %d %p %d %p %p %p %p\n", phCredential, phContext, debugstr_w(pszTargetName), fContextReq, Reserved1, TargetDataRep, pInput, @@ -842,6 +844,13 @@ heap_free( target ); } } + + if (pInput && (idx = schan_find_sec_buffer_idx(pInput, 0, SECBUFFER_APPLICATION_PROTOCOLS)) != -1) + { + buffer = &pInput->pBuffers[idx]; + schan_imp_set_application_protocols(ctx->session, buffer->pvBuffer, buffer->cbBuffer); + } + phNewContext->dwLower = handle; phNewContext->dwUpper = 0; } @@ -849,8 +858,6 @@ { SIZE_T record_size = 0; unsigned char *ptr; - SecBuffer *buffer; - int idx; if (!pInput) return SEC_E_INCOMPLETE_MESSAGE; @@ -1003,6 +1010,7 @@ PCtxtHandle context_handle, ULONG attribute, PVOID buffer) { struct schan_context *ctx; + SECURITY_STATUS status; TRACE("context_handle %p, attribute %#x, buffer %p\n", context_handle, attribute, buffer); @@ -1015,7 +1023,7 @@ case SECPKG_ATTR_STREAM_SIZES: { SecPkgContext_ConnectionInfo info; - SECURITY_STATUS status = schan_imp_get_connection_info(ctx->session, &info); + status = schan_imp_get_connection_info(ctx->session, &info); if (status == SEC_E_OK) { SecPkgContext_StreamSizes *stream_sizes = buffer; @@ -1039,7 +1047,7 @@ case SECPKG_ATTR_KEY_INFO: { SecPkgContext_ConnectionInfo conn_info; - SECURITY_STATUS status = schan_imp_get_connection_info(ctx->session, &conn_info); + status = schan_imp_get_connection_info(ctx->session, &conn_info); if (status == SEC_E_OK) { SecPkgContext_KeyInfoW *info = buffer; @@ -1054,7 +1062,6 @@ case SECPKG_ATTR_REMOTE_CERT_CONTEXT: { PCCERT_CONTEXT *cert = buffer; - SECURITY_STATUS status; status = ensure_remote_cert(ctx); if(status != SEC_E_OK) @@ -1075,7 +1082,6 @@ ALG_ID hash_alg = CALG_SHA_256; BYTE hash[1024]; DWORD hash_size; - SECURITY_STATUS status; char *p; BOOL r; @@ -1109,6 +1115,11 @@ memcpy(p, hash, hash_size); return SEC_E_OK; } + case SECPKG_ATTR_APPLICATION_PROTOCOL: + { + SecPkgContext_ApplicationProtocol *protocol = buffer; + return schan_imp_get_application_protocol(ctx->session, protocol); + } default: FIXME("Unhandled attribute %#x\n", attribute); @@ -1143,6 +1154,8 @@ return schan_QueryContextAttributesW(context_handle, attribute, buffer); case SECPKG_ATTR_ENDPOINT_BINDINGS: return schan_QueryContextAttributesW(context_handle, attribute, buffer); + case SECPKG_ATTR_APPLICATION_PROTOCOL: + return schan_QueryContextAttributesW(context_handle, attribute, buffer); default: FIXME("Unhandled attribute %#x\n", attribute); diff -Nru wine-development-5.5/dlls/secur32/schannel_gnutls.c wine-development-5.6/dlls/secur32/schannel_gnutls.c --- wine-development-5.5/dlls/secur32/schannel_gnutls.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/secur32/schannel_gnutls.c 2020-04-10 18:54:32.000000000 +0000 @@ -40,7 +40,6 @@ #include "secur32_priv.h" #include "wine/debug.h" -#include "wine/library.h" #include "wine/unicode.h" #if defined(SONAME_LIBGNUTLS) && !defined(HAVE_SECURITY_SECURITY_H) @@ -51,6 +50,11 @@ /* Not present in gnutls version < 2.9.10. */ static int (*pgnutls_cipher_get_block_size)(gnutls_cipher_algorithm_t); +/* Not present in gnutls version < 3.2.0. */ +static int (*pgnutls_alpn_get_selected_protocol)(gnutls_session_t, gnutls_datum_t *); +static int (*pgnutls_alpn_set_protocols)(gnutls_session_t, const gnutls_datum_t *, + unsigned, unsigned int); + /* Not present in gnutls version < 3.3.0. */ static int (*pgnutls_privkey_import_rsa_raw)(gnutls_privkey_t, const gnutls_datum_t *, const gnutls_datum_t *, const gnutls_datum_t *, @@ -115,6 +119,10 @@ #define GNUTLS_KX_ECDHE_PSK 14 #endif +#if GNUTLS_VERSION_MAJOR < 3 || (GNUTLS_VERSION_MAJOR == 3 && GNUTLS_VERSION_MINOR < 5) +#define GNUTLS_ALPN_SERVER_PRECEDENCE (1<<1) +#endif + static int compat_cipher_get_block_size(gnutls_cipher_algorithm_t cipher) { switch(cipher) { @@ -154,6 +162,19 @@ return GNUTLS_E_UNKNOWN_PK_ALGORITHM; } +static int compat_gnutls_alpn_get_selected_protocol(gnutls_session_t session, gnutls_datum_t *protocol) +{ + FIXME("\n"); + return GNUTLS_E_INVALID_REQUEST; +} + +static int compat_gnutls_alpn_set_protocols(gnutls_session_t session, const gnutls_datum_t *protocols, + unsigned size, unsigned int flags) +{ + FIXME("\n"); + return GNUTLS_E_INVALID_REQUEST; +} + static ssize_t schan_pull_adapter(gnutls_transport_ptr_t transport, void *buff, size_t buff_len) { @@ -586,6 +607,11 @@ return SEC_I_CONTINUE_NEEDED; } + else if (ret == GNUTLS_E_REHANDSHAKE) + { + TRACE("Rehandshake requested\n"); + return SEC_I_RENEGOTIATE; + } else { pgnutls_perror(ret); @@ -595,6 +621,86 @@ return SEC_E_OK; } +static unsigned int parse_alpn_protocol_list(unsigned char *buffer, unsigned int buflen, gnutls_datum_t *list) +{ + unsigned int len, offset = 0, count = 0; + + while (buflen) + { + len = buffer[offset++]; + buflen--; + if (!len || len > buflen) return 0; + if (list) + { + list[count].data = &buffer[offset]; + list[count].size = len; + } + buflen -= len; + offset += len; + count++; + } + + return count; +} + +void schan_imp_set_application_protocols(schan_imp_session session, unsigned char *buffer, unsigned int buflen) +{ + gnutls_session_t s = (gnutls_session_t)session; + unsigned int extension_len, extension, count = 0, offset = 0; + unsigned short list_len; + gnutls_datum_t *protocols; + int ret; + + if (sizeof(extension_len) > buflen) return; + extension_len = *(unsigned int *)&buffer[offset]; + offset += sizeof(extension_len); + + if (offset + sizeof(extension) > buflen) return; + extension = *(unsigned int *)&buffer[offset]; + if (extension != SecApplicationProtocolNegotiationExt_ALPN) + { + FIXME("extension %u not supported\n", extension); + return; + } + offset += sizeof(extension); + + if (offset + sizeof(list_len) > buflen) return; + list_len = *(unsigned short *)&buffer[offset]; + offset += sizeof(list_len); + + if (offset + list_len > buflen) return; + count = parse_alpn_protocol_list(&buffer[offset], list_len, NULL); + if (!count || !(protocols = heap_alloc(count * sizeof(*protocols)))) return; + + parse_alpn_protocol_list(&buffer[offset], list_len, protocols); + if ((ret = pgnutls_alpn_set_protocols(s, protocols, count, GNUTLS_ALPN_SERVER_PRECEDENCE) < 0)) + { + pgnutls_perror(ret); + } + + heap_free(protocols); +} + +SECURITY_STATUS schan_imp_get_application_protocol(schan_imp_session session, + SecPkgContext_ApplicationProtocol *protocol) +{ + gnutls_session_t s = (gnutls_session_t)session; + gnutls_datum_t selected; + + memset(protocol, 0, sizeof(*protocol)); + if (pgnutls_alpn_get_selected_protocol(s, &selected) < 0) return SEC_E_OK; + + if (selected.size <= sizeof(protocol->ProtocolId)) + { + protocol->ProtoNegoStatus = SecApplicationProtocolNegotiationStatus_Success; + protocol->ProtoNegoExt = SecApplicationProtocolNegotiationExt_ALPN; + protocol->ProtocolIdSize = selected.size; + memcpy(protocol->ProtocolId, selected.data, selected.size); + TRACE("returning %s\n", debugstr_an((const char *)selected.data, selected.size)); + } + return SEC_E_OK; +} + static WCHAR *get_key_container_path(const CERT_CONTEXT *ctx) { static const WCHAR rsabaseW[] = @@ -873,7 +979,7 @@ { int ret; - libgnutls_handle = wine_dlopen(SONAME_LIBGNUTLS, RTLD_NOW, NULL, 0); + libgnutls_handle = dlopen(SONAME_LIBGNUTLS, RTLD_NOW); if (!libgnutls_handle) { ERR_(winediag)("Failed to load libgnutls, secure connections will not be available.\n"); @@ -881,7 +987,7 @@ } #define LOAD_FUNCPTR(f) \ - if (!(p##f = wine_dlsym(libgnutls_handle, #f, NULL, 0))) \ + if (!(p##f = dlsym(libgnutls_handle, #f))) \ { \ ERR("Failed to load %s\n", #f); \ goto fail; \ @@ -926,17 +1032,27 @@ LOAD_FUNCPTR(gnutls_x509_privkey_deinit) #undef LOAD_FUNCPTR - if (!(pgnutls_cipher_get_block_size = wine_dlsym(libgnutls_handle, "gnutls_cipher_get_block_size", NULL, 0))) + if (!(pgnutls_cipher_get_block_size = dlsym(libgnutls_handle, "gnutls_cipher_get_block_size"))) { WARN("gnutls_cipher_get_block_size not found\n"); pgnutls_cipher_get_block_size = compat_cipher_get_block_size; } - if (!(pgnutls_privkey_export_x509 = wine_dlsym(libgnutls_handle, "gnutls_privkey_export_x509", NULL, 0))) + if (!(pgnutls_alpn_set_protocols = dlsym(libgnutls_handle, "gnutls_alpn_set_protocols"))) + { + WARN("gnutls_alpn_set_protocols not found\n"); + pgnutls_alpn_set_protocols = compat_gnutls_alpn_set_protocols; + } + if (!(pgnutls_alpn_get_selected_protocol = dlsym(libgnutls_handle, "gnutls_alpn_get_selected_protocol"))) + { + WARN("gnutls_alpn_get_selected_protocol not found\n"); + pgnutls_alpn_get_selected_protocol = compat_gnutls_alpn_get_selected_protocol; + } + if (!(pgnutls_privkey_export_x509 = dlsym(libgnutls_handle, "gnutls_privkey_export_x509"))) { WARN("gnutls_privkey_export_x509 not found\n"); pgnutls_privkey_export_x509 = compat_gnutls_privkey_export_x509; } - if (!(pgnutls_privkey_import_rsa_raw = wine_dlsym(libgnutls_handle, "gnutls_privkey_import_rsa_raw", NULL, 0))) + if (!(pgnutls_privkey_import_rsa_raw = dlsym(libgnutls_handle, "gnutls_privkey_import_rsa_raw"))) { WARN("gnutls_privkey_import_rsa_raw not found\n"); pgnutls_privkey_import_rsa_raw = compat_gnutls_privkey_import_rsa_raw; @@ -959,7 +1075,7 @@ return TRUE; fail: - wine_dlclose(libgnutls_handle, NULL, 0); + dlclose(libgnutls_handle); libgnutls_handle = NULL; return FALSE; } @@ -967,7 +1083,7 @@ void schan_imp_deinit(void) { pgnutls_global_deinit(); - wine_dlclose(libgnutls_handle, NULL, 0); + dlclose(libgnutls_handle); libgnutls_handle = NULL; } diff -Nru wine-development-5.5/dlls/secur32/schannel_macosx.c wine-development-5.6/dlls/secur32/schannel_macosx.c --- wine-development-5.5/dlls/secur32/schannel_macosx.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/secur32/schannel_macosx.c 2020-04-10 18:54:32.000000000 +0000 @@ -38,7 +38,6 @@ #include "schannel.h" #include "secur32_priv.h" #include "wine/debug.h" -#include "wine/library.h" #ifdef HAVE_SECURITY_SECURITY_H diff -Nru wine-development-5.5/dlls/secur32/secur32_priv.h wine-development-5.6/dlls/secur32/secur32_priv.h --- wine-development-5.5/dlls/secur32/secur32_priv.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/secur32/secur32_priv.h 2020-04-10 18:54:32.000000000 +0000 @@ -248,6 +248,8 @@ extern DWORD schan_imp_enabled_protocols(void) DECLSPEC_HIDDEN; extern BOOL schan_imp_init(void) DECLSPEC_HIDDEN; extern void schan_imp_deinit(void) DECLSPEC_HIDDEN; - +extern void schan_imp_set_application_protocols(schan_imp_session, unsigned char *, unsigned int) DECLSPEC_HIDDEN; +extern SECURITY_STATUS schan_imp_get_application_protocol(schan_imp_session, + SecPkgContext_ApplicationProtocol *) DECLSPEC_HIDDEN; #endif /* ndef __SECUR32_PRIV_H__ */ diff -Nru wine-development-5.5/dlls/secur32/tests/schannel.c wine-development-5.6/dlls/secur32/tests/schannel.c --- wine-development-5.5/dlls/secur32/tests/schannel.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/secur32/tests/schannel.c 2020-04-10 18:54:32.000000000 +0000 @@ -670,14 +670,41 @@ FreeCredentialsHandle(&cred_handle); } +static SOCKET create_ssl_socket( const char *hostname ) +{ + struct hostent *host; + struct sockaddr_in addr; + SOCKET sock; + + if (!(host = gethostbyname(hostname))) + { + skip("Can't resolve \"%s\"\n", hostname); + return -1; + } + + addr.sin_family = host->h_addrtype; + addr.sin_addr = *(struct in_addr *)host->h_addr_list[0]; + addr.sin_port = htons(443); + if ((sock = socket(host->h_addrtype, SOCK_STREAM, 0)) == -1) + { + skip("Can't create socket\n"); + return 1; + } + + if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == -1) + { + skip("Can't connect to \"%s\"\n", hostname); + closesocket(sock); + return -1; + } + + return sock; +} + static void test_communication(void) { int ret; - - WSADATA wsa_data; SOCKET sock; - struct hostent *host; - struct sockaddr_in addr; SECURITY_STATUS status; ULONG attrs; @@ -705,36 +732,7 @@ } /* Create a socket and connect to test.winehq.org */ - ret = WSAStartup(0x0202, &wsa_data); - if (ret) - { - skip("Can't init winsock 2.2\n"); - return; - } - - host = gethostbyname("test.winehq.org"); - if (!host) - { - skip("Can't resolve test.winehq.org\n"); - return; - } - - addr.sin_family = host->h_addrtype; - addr.sin_addr = *(struct in_addr *)host->h_addr_list[0]; - addr.sin_port = htons(443); - sock = socket(host->h_addrtype, SOCK_STREAM, 0); - if (sock == SOCKET_ERROR) - { - skip("Can't create socket\n"); - return; - } - - ret = connect(sock, (struct sockaddr *)&addr, sizeof(addr)); - if (ret == SOCKET_ERROR) - { - skip("Can't connect to test.winehq.org\n"); - return; - } + if ((sock = create_ssl_socket( "test.winehq.org" )) == -1) return; /* Create client credentials */ init_cred(&cred); @@ -952,7 +950,7 @@ status = pQueryContextAttributesA(&context, SECPKG_ATTR_STREAM_SIZES, &sizes); ok(status == SEC_E_OK, "QueryContextAttributesW(SECPKG_ATTR_STREAM_SIZES) failed: %08x\n", status); - status = QueryContextAttributesA(&context, SECPKG_ATTR_NEGOTIATION_INFO, &info); + status = pQueryContextAttributesA(&context, SECPKG_ATTR_NEGOTIATION_INFO, &info); ok(status == SEC_E_UNSUPPORTED_FUNCTION, "QueryContextAttributesA returned %08x\n", status); reset_buffers(&buffers[0]); @@ -1037,12 +1035,142 @@ closesocket(sock); } +static void test_application_protocol_negotiation(void) +{ + int ret; + SOCKET sock; + SECURITY_STATUS status; + ULONG attrs; + SCHANNEL_CRED cred; + CredHandle cred_handle; + CtxtHandle context; + SecPkgContext_ApplicationProtocol protocol; + SecBufferDesc buffers[3]; + SecBuffer *buf; + unsigned buf_size = 8192; + unsigned char *alpn_buffer; + unsigned int *extension_len; + unsigned short *list_len; + int list_start_index, offset = 0; + + if (!pQueryContextAttributesA) + { + win_skip("Required secur32 functions not available\n"); + return; + } + + if ((sock = create_ssl_socket( "test.winehq.org" )) == -1) return; + + init_cred(&cred); + cred.grbitEnabledProtocols = SP_PROT_TLS1_CLIENT; + cred.dwFlags = SCH_CRED_NO_DEFAULT_CREDS|SCH_CRED_MANUAL_CRED_VALIDATION; + + status = AcquireCredentialsHandleA(NULL, (SEC_CHAR *)UNISP_NAME_A, SECPKG_CRED_OUTBOUND, NULL, + &cred, NULL, NULL, &cred_handle, NULL); + ok(status == SEC_E_OK, "got %08x\n", status); + if (status != SEC_E_OK) return; + + init_buffers(&buffers[0], 4, buf_size); + init_buffers(&buffers[1], 4, buf_size); + init_buffers(&buffers[2], 1, 128); + + alpn_buffer = buffers[2].pBuffers[0].pvBuffer; + extension_len = (unsigned int *)&alpn_buffer[offset]; + offset += sizeof(*extension_len); + *(unsigned int *)&alpn_buffer[offset] = SecApplicationProtocolNegotiationExt_ALPN; + offset += sizeof(unsigned int); + list_len = (unsigned short *)&alpn_buffer[offset]; + offset += sizeof(*list_len); + list_start_index = offset; + + alpn_buffer[offset++] = sizeof("http/1.1") - 1; + memcpy(&alpn_buffer[offset], "http/1.1", sizeof("http/1.1") - 1); + offset += sizeof("http/1.1") - 1; + alpn_buffer[offset++] = sizeof("h2") - 1; + memcpy(&alpn_buffer[offset], "h2", sizeof("h2") - 1); + offset += sizeof("h2") - 1; + + *list_len = offset - list_start_index; + *extension_len = *list_len + sizeof(*extension_len) + sizeof(*list_len); + + buffers[2].pBuffers[0].BufferType = SECBUFFER_APPLICATION_PROTOCOLS; + buffers[2].pBuffers[0].cbBuffer = offset; + + buffers[0].pBuffers[0].BufferType = SECBUFFER_TOKEN; + status = InitializeSecurityContextA(&cred_handle, NULL, (SEC_CHAR *)"localhost", + ISC_REQ_CONFIDENTIALITY|ISC_REQ_STREAM, 0, 0, &buffers[2], 0, &context, &buffers[0], &attrs, NULL); + ok(status == SEC_I_CONTINUE_NEEDED, "got %08x\n", status); + + buf = &buffers[0].pBuffers[0]; + send(sock, buf->pvBuffer, buf->cbBuffer, 0); + buf->cbBuffer = buf_size; + + buf = &buffers[1].pBuffers[0]; + buf->cbBuffer = buf_size; + ret = receive_data(sock, buf); + if (ret == -1) + return; + + buffers[1].pBuffers[0].BufferType = SECBUFFER_TOKEN; + status = InitializeSecurityContextA(&cred_handle, &context, (SEC_CHAR *)"localhost", + ISC_REQ_CONFIDENTIALITY|ISC_REQ_STREAM|ISC_REQ_USE_SUPPLIED_CREDS, 0, 0, &buffers[1], 0, NULL, + &buffers[0], &attrs, NULL); + buffers[1].pBuffers[0].cbBuffer = buf_size; + while (status == SEC_I_CONTINUE_NEEDED) + { + buf = &buffers[0].pBuffers[0]; + send(sock, buf->pvBuffer, buf->cbBuffer, 0); + buf->cbBuffer = buf_size; + + buf = &buffers[1].pBuffers[0]; + ret = receive_data(sock, buf); + if (ret == -1) + return; + + buf->BufferType = SECBUFFER_TOKEN; + status = InitializeSecurityContextA(&cred_handle, &context, (SEC_CHAR *)"localhost", + ISC_REQ_USE_SUPPLIED_CREDS, 0, 0, &buffers[1], 0, NULL, &buffers[0], &attrs, NULL); + buffers[1].pBuffers[0].cbBuffer = buf_size; + } + + ok (status == SEC_E_OK || broken(status == SEC_E_ILLEGAL_MESSAGE) /* winxp */, "got %08x\n", status); + if (status != SEC_E_OK) + { + skip("Handshake failed\n"); + return; + } + + memset(&protocol, 0, sizeof(protocol)); + status = pQueryContextAttributesA(&context, SECPKG_ATTR_APPLICATION_PROTOCOL, &protocol); + ok(status == SEC_E_OK || broken(status == SEC_E_UNSUPPORTED_FUNCTION) /* win2k8 */, "got %08x\n", status); + if (status == SEC_E_OK) + { + ok(protocol.ProtoNegoStatus == SecApplicationProtocolNegotiationStatus_Success, "got %u\n", protocol.ProtoNegoStatus); + ok(protocol.ProtoNegoExt == SecApplicationProtocolNegotiationExt_ALPN, "got %u\n", protocol.ProtoNegoExt); + ok(protocol.ProtocolIdSize == 8, "got %u\n", protocol.ProtocolIdSize); + ok(!memcmp(protocol.ProtocolId, "http/1.1", 8), "wrong protocol id\n"); + } + + DeleteSecurityContext(&context); + FreeCredentialsHandle(&cred_handle); + + free_buffers(&buffers[0]); + free_buffers(&buffers[1]); + free_buffers(&buffers[2]); + + closesocket(sock); +} + START_TEST(schannel) { + WSADATA wsa_data; pQueryContextAttributesA = (void*)GetProcAddress(GetModuleHandleA("secur32.dll"), "QueryContextAttributesA"); + WSAStartup(0x0202, &wsa_data); + test_cread_attrs(); testAcquireSecurityContext(); test_InitializeSecurityContext(); test_communication(); + test_application_protocol_negotiation(); } diff -Nru wine-development-5.5/dlls/setupx.dll16/Makefile.in wine-development-5.6/dlls/setupx.dll16/Makefile.in --- wine-development-5.5/dlls/setupx.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/setupx.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,7 +1,7 @@ MODULE = setupx.dll16 IMPORTS = setupapi user32 advapi32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,setupapi.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,setupapi.dll C_SRCS = \ devinst16.c \ diff -Nru wine-development-5.5/dlls/shell.dll16/Makefile.in wine-development-5.6/dlls/shell.dll16/Makefile.in --- wine-development-5.5/dlls/shell.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/shell.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,7 +1,7 @@ MODULE = shell.dll16 IMPORTS = shell32 user32 gdi32 advapi32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,shell32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,shell32.dll C_SRCS = shell.c diff -Nru wine-development-5.5/dlls/sound.drv16/Makefile.in wine-development-5.6/dlls/sound.drv16/Makefile.in --- wine-development-5.5/dlls/sound.drv16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/sound.drv16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,4 +1,4 @@ MODULE = sound.drv16 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,winmm.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,winmm.dll C_SRCS = sound.c diff -Nru wine-development-5.5/dlls/storage.dll16/Makefile.in wine-development-5.6/dlls/storage.dll16/Makefile.in --- wine-development-5.5/dlls/storage.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/storage.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = storage.dll16 IMPORTS = uuid ole32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,ole32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll C_SRCS = storage.c diff -Nru wine-development-5.5/dlls/stress.dll16/Makefile.in wine-development-5.6/dlls/stress.dll16/Makefile.in --- wine-development-5.5/dlls/stress.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/stress.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,4 +1,4 @@ MODULE = stress.dll16 -EXTRADLLFLAGS = -m16 -mno-cygwin +EXTRADLLFLAGS = -m16 C_SRCS = stress.c diff -Nru wine-development-5.5/dlls/strmbase/pin.c wine-development-5.6/dlls/strmbase/pin.c --- wine-development-5.5/dlls/strmbase/pin.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/strmbase/pin.c 2020-04-10 18:54:32.000000000 +0000 @@ -447,6 +447,7 @@ struct strmbase_source *pin = impl_source_from_IPin(iface); AM_MEDIA_TYPE candidate, *candidate_ptr; IEnumMediaTypes *enummt; + PIN_DIRECTION dir; unsigned int i; ULONG count; HRESULT hr; @@ -458,10 +459,12 @@ if (!peer) return E_POINTER; - /* If we try to connect to ourselves, we will definitely deadlock. - * There are other cases where we could deadlock too, but this - * catches the obvious case */ - assert(peer != iface); + IPin_QueryDirection(peer, &dir); + if (dir != PINDIR_INPUT) + { + WARN("Attempt to connect to another source pin, returning VFW_E_INVALID_DIRECTION.\n"); + return VFW_E_INVALID_DIRECTION; + } EnterCriticalSection(&pin->pin.filter->csFilter); diff -Nru wine-development-5.5/dlls/strmbase/renderer.c wine-development-5.6/dlls/strmbase/renderer.c --- wine-development-5.5/dlls/strmbase/renderer.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/strmbase/renderer.c 2020-04-10 18:54:32.000000000 +0000 @@ -388,7 +388,7 @@ return hr; } -HRESULT WINAPI strmbase_renderer_init(struct strmbase_renderer *filter, IUnknown *outer, +void strmbase_renderer_init(struct strmbase_renderer *filter, IUnknown *outer, const CLSID *clsid, const WCHAR *sink_name, const struct strmbase_renderer_ops *ops) { memset(filter, 0, sizeof(*filter)); @@ -408,6 +408,4 @@ QualityControlImpl_Create(&filter->sink.pin, &filter->qcimpl); filter->qcimpl->IQualityControl_iface.lpVtbl = &Renderer_QualityControl_Vtbl; - - return S_OK; } diff -Nru wine-development-5.5/dlls/system.drv16/Makefile.in wine-development-5.6/dlls/system.drv16/Makefile.in --- wine-development-5.5/dlls/system.drv16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/system.drv16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,4 +1,4 @@ MODULE = system.drv16 -EXTRADLLFLAGS = -m16 -mno-cygwin +EXTRADLLFLAGS = -m16 C_SRCS = system.c diff -Nru wine-development-5.5/dlls/toolhelp.dll16/Makefile.in wine-development-5.6/dlls/toolhelp.dll16/Makefile.in --- wine-development-5.5/dlls/toolhelp.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/toolhelp.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,4 +1,4 @@ MODULE = toolhelp.dll16 -EXTRADLLFLAGS = -m16 -mno-cygwin +EXTRADLLFLAGS = -m16 C_SRCS = toolhelp.c diff -Nru wine-development-5.5/dlls/twain.dll16/Makefile.in wine-development-5.6/dlls/twain.dll16/Makefile.in --- wine-development-5.5/dlls/twain.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/twain.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,4 +1,4 @@ MODULE = twain.dll16 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,twain_32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,twain_32.dll C_SRCS = twain.c diff -Nru wine-development-5.5/dlls/typelib.dll16/Makefile.in wine-development-5.6/dlls/typelib.dll16/Makefile.in --- wine-development-5.5/dlls/typelib.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/typelib.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = typelib.dll16 IMPORTS = oleaut32 advapi32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,oleaut32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,oleaut32.dll C_SRCS = typelib.c diff -Nru wine-development-5.5/dlls/tzres/tzres.rc wine-development-5.6/dlls/tzres/tzres.rc --- wine-development-5.5/dlls/tzres/tzres.rc 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/tzres/tzres.rc 2020-04-10 18:54:32.000000000 +0000 @@ -56,6 +56,8 @@ 48721 "Bangladesh Daylight Time" 56576 "Belarus Standard Time" 56577 "Belarus Daylight Time" + 51968 "Bougainville Standard Time" + 51969 "Bougainville Daylight Time" 25712 "Canada Central Standard Time" 25713 "Canada Central Daylight Time" 2000 "Cape Verde Standard Time" @@ -80,6 +82,8 @@ 17457 "Central Daylight Time" 32800 "Central Standard Time (Mexico)" 32801 "Central Daylight Time (Mexico)" + 62304 "Chatham Islands Standard Time" + 62305 "Chatham Islands Daylight Time" 160 "China Standard Time" 161 "China Daylight Time" 50384 "Dateline Standard Time" @@ -134,6 +138,8 @@ 16769 "Line Islands Daylight Time" 8832 "Magadan Standard Time" 8833 "Magadan Daylight Time" + 20736 "Marquesas Standard Time" + 20737 "Marquesas Daylight Time" 60896 "Mauritius Standard Time" 60897 "Mauritius Daylight Time" 15968 "Middle East Standard Time" diff -Nru wine-development-5.5/dlls/ucrtbase/ucrtbase.spec wine-development-5.6/dlls/ucrtbase/ucrtbase.spec --- wine-development-5.5/dlls/ucrtbase/ucrtbase.spec 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ucrtbase/ucrtbase.spec 2020-04-10 18:54:32.000000000 +0000 @@ -814,7 +814,7 @@ @ stub _o___stdio_common_vfprintf_p @ stub _o___stdio_common_vfprintf_s @ stub _o___stdio_common_vfscanf -@ stub _o___stdio_common_vfwprintf +@ cdecl _o___stdio_common_vfwprintf(int64 ptr wstr ptr ptr) MSVCRT__stdio_common_vfwprintf @ stub _o___stdio_common_vfwprintf_p @ stub _o___stdio_common_vfwprintf_s @ stub _o___stdio_common_vfwscanf @@ -824,7 +824,7 @@ @ stub _o___stdio_common_vsprintf_p @ cdecl _o___stdio_common_vsprintf_s(int64 ptr long str ptr ptr) MSVCRT__stdio_common_vsprintf_s @ stub _o___stdio_common_vsscanf -@ stub _o___stdio_common_vswprintf +@ cdecl _o___stdio_common_vswprintf(int64 ptr long wstr ptr ptr) MSVCRT__stdio_common_vswprintf @ stub _o___stdio_common_vswprintf_p @ stub _o___stdio_common_vswprintf_s @ stub _o___stdio_common_vswscanf diff -Nru wine-development-5.5/dlls/user32/cursoricon.c wine-development-5.6/dlls/user32/cursoricon.c --- wine-development-5.5/dlls/user32/cursoricon.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/user32/cursoricon.c 2020-04-10 18:54:32.000000000 +0000 @@ -48,7 +48,6 @@ #include "wine/list.h" #include "wine/unicode.h" #include "wine/debug.h" -#include "wine/library.h" WINE_DEFAULT_DEBUG_CHANNEL(cursor); WINE_DECLARE_DEBUG_CHANNEL(icon); @@ -148,13 +147,13 @@ static BOOL WINAPI load_libpng( INIT_ONCE *once, void *param, void **context ) { - if (!(libpng_handle = wine_dlopen(SONAME_LIBPNG, RTLD_NOW, NULL, 0))) + if (!(libpng_handle = dlopen( SONAME_LIBPNG, RTLD_NOW ))) { WARN( "failed to load %s\n", SONAME_LIBPNG ); return TRUE; } #define LOAD_FUNCPTR(f) \ - if ((p##f = wine_dlsym(libpng_handle, #f, NULL, 0)) == NULL) \ + if ((p##f = dlsym(libpng_handle, #f)) == NULL) \ { \ WARN( "%s not found in %s\n", #f, SONAME_LIBPNG ); \ libpng_handle = NULL; \ diff -Nru wine-development-5.5/dlls/user32/rawinput.c wine-development-5.6/dlls/user32/rawinput.c --- wine-development-5.5/dlls/user32/rawinput.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/user32/rawinput.c 2020-04-10 18:54:32.000000000 +0000 @@ -37,27 +37,30 @@ #include "user_private.h" +#include "initguid.h" +#include "ntddmou.h" + WINE_DEFAULT_DEBUG_CHANNEL(rawinput); -struct hid_device +struct device { WCHAR *path; HANDLE file; - RID_DEVICE_INFO_HID info; + RID_DEVICE_INFO info; PHIDP_PREPARSED_DATA data; }; -static struct hid_device *hid_devices; -static unsigned int hid_devices_count, hid_devices_max; +static struct device *rawinput_devices; +static unsigned int rawinput_devices_count, rawinput_devices_max; -static CRITICAL_SECTION hid_devices_cs; -static CRITICAL_SECTION_DEBUG hid_devices_cs_debug = +static CRITICAL_SECTION rawinput_devices_cs; +static CRITICAL_SECTION_DEBUG rawinput_devices_cs_debug = { - 0, 0, &hid_devices_cs, - { &hid_devices_cs_debug.ProcessLocksList, &hid_devices_cs_debug.ProcessLocksList }, - 0, 0, { (DWORD_PTR)(__FILE__ ": hid_devices_cs") } + 0, 0, &rawinput_devices_cs, + { &rawinput_devices_cs_debug.ProcessLocksList, &rawinput_devices_cs_debug.ProcessLocksList }, + 0, 0, { (DWORD_PTR)(__FILE__ ": rawinput_devices_cs") } }; -static CRITICAL_SECTION hid_devices_cs = { &hid_devices_cs_debug, -1, 0, 0, 0, 0 }; +static CRITICAL_SECTION rawinput_devices_cs = { &rawinput_devices_cs_debug, -1, 0, 0, 0, 0 }; static BOOL array_reserve(void **elements, unsigned int *capacity, unsigned int count, unsigned int size) { @@ -86,10 +89,10 @@ return TRUE; } -static struct hid_device *add_device(HDEVINFO set, SP_DEVICE_INTERFACE_DATA *iface) +static struct device *add_device(HDEVINFO set, SP_DEVICE_INTERFACE_DATA *iface) { SP_DEVICE_INTERFACE_DETAIL_DATA_W *detail; - struct hid_device *device; + struct device *device; HANDLE file; WCHAR *path; DWORD size; @@ -127,7 +130,8 @@ return NULL; } - if (!array_reserve((void **)&hid_devices, &hid_devices_max, hid_devices_count + 1, sizeof(*hid_devices))) + if (!array_reserve((void **)&rawinput_devices, &rawinput_devices_max, + rawinput_devices_count + 1, sizeof(*rawinput_devices))) { ERR("Failed to allocate memory.\n"); CloseHandle(file); @@ -135,19 +139,20 @@ return NULL; } - device = &hid_devices[hid_devices_count++]; + device = &rawinput_devices[rawinput_devices_count++]; device->path = path; device->file = file; + device->info.cbSize = sizeof(RID_DEVICE_INFO); return device; } -static void find_hid_devices(void) +static void find_devices(void) { static ULONGLONG last_check; SP_DEVICE_INTERFACE_DATA iface = { sizeof(iface) }; - struct hid_device *device; + struct device *device; HIDD_ATTRIBUTES attr; HIDP_CAPS caps; GUID hid_guid; @@ -160,18 +165,18 @@ HidD_GetHidGuid(&hid_guid); - set = SetupDiGetClassDevsW(&hid_guid, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT); - - EnterCriticalSection(&hid_devices_cs); + EnterCriticalSection(&rawinput_devices_cs); /* destroy previous list */ - for (idx = 0; idx < hid_devices_count; ++idx) + for (idx = 0; idx < rawinput_devices_count; ++idx) { - CloseHandle(hid_devices[idx].file); - heap_free(hid_devices[idx].path); + CloseHandle(rawinput_devices[idx].file); + heap_free(rawinput_devices[idx].path); } + rawinput_devices_count = 0; + + set = SetupDiGetClassDevsW(&hid_guid, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT); - hid_devices_count = 0; for (idx = 0; SetupDiEnumDeviceInterfaces(set, NULL, &hid_guid, idx, &iface); ++idx) { if (!(device = add_device(set, &iface))) @@ -180,9 +185,11 @@ attr.Size = sizeof(HIDD_ATTRIBUTES); if (!HidD_GetAttributes(device->file, &attr)) WARN("Failed to get attributes.\n"); - device->info.dwVendorId = attr.VendorID; - device->info.dwProductId = attr.ProductID; - device->info.dwVersionNumber = attr.VersionNumber; + + device->info.dwType = RIM_TYPEHID; + device->info.u.hid.dwVendorId = attr.VendorID; + device->info.u.hid.dwProductId = attr.ProductID; + device->info.u.hid.dwVersionNumber = attr.VersionNumber; if (!HidD_GetPreparsedData(device->file, &device->data)) WARN("Failed to get preparsed data.\n"); @@ -190,12 +197,28 @@ if (!HidP_GetCaps(device->data, &caps)) WARN("Failed to get caps.\n"); - device->info.usUsagePage = caps.UsagePage; - device->info.usUsage = caps.Usage; + device->info.u.hid.usUsagePage = caps.UsagePage; + device->info.u.hid.usUsage = caps.Usage; + } + + SetupDiDestroyDeviceInfoList(set); + + set = SetupDiGetClassDevsW(&GUID_DEVINTERFACE_MOUSE, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT); + + for (idx = 0; SetupDiEnumDeviceInterfaces(set, NULL, &GUID_DEVINTERFACE_MOUSE, idx, &iface); ++idx) + { + static const RID_DEVICE_INFO_MOUSE mouse_info = {1, 5, 0, FALSE}; + + if (!(device = add_device(set, &iface))) + continue; + + device->info.dwType = RIM_TYPEMOUSE; + device->info.u.mouse = mouse_info; } - LeaveCriticalSection(&hid_devices_cs); SetupDiDestroyDeviceInfoList(set); + + LeaveCriticalSection(&rawinput_devices_cs); } /*********************************************************************** @@ -219,18 +242,18 @@ return ~0U; } - find_hid_devices(); + find_devices(); if (!devices) { - *device_count = 2 + hid_devices_count; + *device_count = 2 + rawinput_devices_count; return 0; } - if (*device_count < 2 + hid_devices_count) + if (*device_count < 2 + rawinput_devices_count) { SetLastError(ERROR_INSUFFICIENT_BUFFER); - *device_count = 2 + hid_devices_count; + *device_count = 2 + rawinput_devices_count; return ~0U; } @@ -239,13 +262,13 @@ devices[1].hDevice = WINE_KEYBOARD_HANDLE; devices[1].dwType = RIM_TYPEKEYBOARD; - for (i = 0; i < hid_devices_count; ++i) + for (i = 0; i < rawinput_devices_count; ++i) { - devices[2 + i].hDevice = &hid_devices[i]; - devices[2 + i].dwType = RIM_TYPEHID; + devices[2 + i].hDevice = &rawinput_devices[i]; + devices[2 + i].dwType = rawinput_devices[i].info.dwType; } - return 2 + hid_devices_count; + return 2 + rawinput_devices_count; } /*********************************************************************** @@ -398,7 +421,7 @@ /*********************************************************************** * GetRawInputDeviceInfoW (USER32.@) */ -UINT WINAPI GetRawInputDeviceInfoW(HANDLE device, UINT command, void *data, UINT *data_size) +UINT WINAPI GetRawInputDeviceInfoW(HANDLE handle, UINT command, void *data, UINT *data_size) { /* FIXME: Most of this is made up. */ static const WCHAR keyboard_name[] = {'\\','\\','?','\\','W','I','N','E','_','K','E','Y','B','O','A','R','D',0}; @@ -407,12 +430,12 @@ static const RID_DEVICE_INFO_MOUSE mouse_info = {1, 5, 0, FALSE}; RID_DEVICE_INFO info; - struct hid_device *hid_device = device; + struct device *device = handle; const void *to_copy; UINT to_copy_bytes, avail_bytes; - TRACE("device %p, command %#x, data %p, data_size %p.\n", - device, command, data, data_size); + TRACE("handle %p, command %#x, data %p, data_size %p.\n", + handle, command, data, data_size); if (!data_size) return ~0U; @@ -427,20 +450,20 @@ case RIDI_DEVICENAME: /* for RIDI_DEVICENAME, data_size is in characters, not bytes */ avail_bytes = *data_size * sizeof(WCHAR); - if (device == WINE_MOUSE_HANDLE) + if (handle == WINE_MOUSE_HANDLE) { *data_size = ARRAY_SIZE(mouse_name); to_copy = mouse_name; } - else if (device == WINE_KEYBOARD_HANDLE) + else if (handle == WINE_KEYBOARD_HANDLE) { *data_size = ARRAY_SIZE(keyboard_name); to_copy = keyboard_name; } else { - *data_size = strlenW(hid_device->path) + 1; - to_copy = hid_device->path; + *data_size = strlenW(device->path) + 1; + to_copy = device->path; } to_copy_bytes = *data_size * sizeof(WCHAR); break; @@ -448,20 +471,19 @@ case RIDI_DEVICEINFO: avail_bytes = *data_size; info.cbSize = sizeof(info); - if (device == WINE_MOUSE_HANDLE) + if (handle == WINE_MOUSE_HANDLE) { info.dwType = RIM_TYPEMOUSE; info.u.mouse = mouse_info; } - else if (device == WINE_KEYBOARD_HANDLE) + else if (handle == WINE_KEYBOARD_HANDLE) { info.dwType = RIM_TYPEKEYBOARD; info.u.keyboard = keyboard_info; } else { - info.dwType = RIM_TYPEHID; - info.u.hid = hid_device->info; + info = device->info; } to_copy_bytes = sizeof(info); *data_size = to_copy_bytes; @@ -470,8 +492,7 @@ case RIDI_PREPARSEDDATA: avail_bytes = *data_size; - if (device == WINE_MOUSE_HANDLE || - device == WINE_KEYBOARD_HANDLE) + if (handle == WINE_MOUSE_HANDLE || handle == WINE_KEYBOARD_HANDLE) { to_copy_bytes = 0; *data_size = 0; @@ -479,9 +500,9 @@ } else { - to_copy_bytes = ((WINE_HIDP_PREPARSED_DATA*)hid_device->data)->dwSize; + to_copy_bytes = ((WINE_HIDP_PREPARSED_DATA*)device->data)->dwSize; *data_size = to_copy_bytes; - to_copy = hid_device->data; + to_copy = device->data; } break; diff -Nru wine-development-5.5/dlls/user32/tests/cursoricon.c wine-development-5.6/dlls/user32/tests/cursoricon.c --- wine-development-5.5/dlls/user32/tests/cursoricon.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/user32/tests/cursoricon.c 2020-04-10 18:54:32.000000000 +0000 @@ -2332,7 +2332,7 @@ ok( pGetCursorInfo( &info ), "GetCursorInfo failed\n" ); /* global cursor doesn't change since we don't have a window */ ok( info.hCursor == global_cursor || broken(info.hCursor != cursor), /* win9x */ - "wrong info cursor %p/%p\n", info.hCursor, global_cursor ); + "expected global cursor %p\n", global_cursor ); } thread = CreateThread( NULL, 0, set_cursor_thread, 0, 0, &id ); WaitForSingleObject( thread, 1000 ); @@ -2364,7 +2364,7 @@ info.cbSize = sizeof(info); ok( pGetCursorInfo( &info ), "GetCursorInfo failed\n" ); ok( info.hCursor == global_cursor || broken(info.hCursor != cursor), /* win9x */ - "wrong info cursor %p/%p\n", info.hCursor, global_cursor ); + "expected global cursor %p\n", global_cursor ); } SetCursor( old_cursor ); DestroyCursor( cursor ); @@ -2381,7 +2381,7 @@ info.cbSize = sizeof(info); ok( pGetCursorInfo( &info ), "GetCursorInfo failed\n" ); ok( info.hCursor == global_cursor || broken(info.hCursor != cursor), /* win9x */ - "wrong info cursor %p/%p\n", info.hCursor, global_cursor ); + "expected global cursor %p\n", global_cursor ); } } diff -Nru wine-development-5.5/dlls/user32/tests/input.c wine-development-5.6/dlls/user32/tests/input.c --- wine-development-5.5/dlls/user32/tests/input.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/user32/tests/input.c 2020-04-10 18:54:32.000000000 +0000 @@ -1686,7 +1686,7 @@ * understand that; so use the \\?\ prefix instead */ name[1] = '\\'; file = CreateFileW(name, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); - todo_wine_if(info.dwType != RIM_TYPEHID) + todo_wine_if(i == 0 || i == 1) ok(file != INVALID_HANDLE_VALUE, "Failed to open %s, error %u\n", wine_dbgstr_w(name), GetLastError()); sz = 0; @@ -1716,8 +1716,7 @@ { /* succeeds on hardware, fails in some VMs */ br = HidD_GetPreparsedData(file, &preparsed); - todo_wine - ok(br == TRUE || broken(br == FALSE), "HidD_GetPreparsedData failed\n"); + ok(br == TRUE || broken(br == FALSE), "HidD_GetPreparsedData failed\n"); } if (br) diff -Nru wine-development-5.5/dlls/user.exe16/Makefile.in wine-development-5.6/dlls/user.exe16/Makefile.in --- wine-development-5.5/dlls/user.exe16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/user.exe16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ MODULE = user.exe16 IMPORTS = mpr user32 gdi32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,user32.dll,--heap,65520 +EXTRADLLFLAGS = -m16 -Wb,--main-module,user32.dll,--heap,65520 C_SRCS = \ bidi.c \ diff -Nru wine-development-5.5/dlls/vbscript/interp.c wine-development-5.6/dlls/vbscript/interp.c --- wine-development-5.5/dlls/vbscript/interp.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/vbscript/interp.c 2020-04-10 18:54:32.000000000 +0000 @@ -188,7 +188,9 @@ return S_OK; } - if(ctx->func->code_ctx->named_item && ctx->func->code_ctx->named_item->disp) { + if(ctx->func->code_ctx->named_item && ctx->func->code_ctx->named_item->disp && + !(ctx->func->code_ctx->named_item->flags & SCRIPTITEM_CODEONLY)) + { hres = disp_get_id(ctx->func->code_ctx->named_item->disp, name, invoke_type, TRUE, &id); if(SUCCEEDED(hres)) { ref->type = REF_DISP; diff -Nru wine-development-5.5/dlls/vbscript/Makefile.in wine-development-5.6/dlls/vbscript/Makefile.in --- wine-development-5.5/dlls/vbscript/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/vbscript/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = vbscript.dll -IMPORTS = oleaut32 ole32 user32 ucrtbase +IMPORTS = oleaut32 ole32 user32 EXTRADLLFLAGS = -mno-cygwin diff -Nru wine-development-5.5/dlls/vbscript/tests/vbscript.c wine-development-5.6/dlls/vbscript/tests/vbscript.c --- wine-development-5.5/dlls/vbscript/tests/vbscript.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/vbscript/tests/vbscript.c 2020-04-10 18:54:32.000000000 +0000 @@ -98,6 +98,7 @@ DEFINE_EXPECT(OnScriptError); DEFINE_EXPECT(GetIDsOfNames); DEFINE_EXPECT(GetIDsOfNames_visible); +DEFINE_EXPECT(GetIDsOfNames_persistent); DEFINE_EXPECT(GetItemInfo_global); DEFINE_EXPECT(GetItemInfo_global_code); DEFINE_EXPECT(GetItemInfo_visible); @@ -232,6 +233,15 @@ return DISP_E_UNKNOWNNAME; } +static HRESULT WINAPI persistent_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *names, UINT name_cnt, + LCID lcid, DISPID *ids) +{ + ok(name_cnt == 1, "name_cnt = %u\n", name_cnt); + + CHECK_EXPECT2(GetIDsOfNames_persistent); + return DISP_E_UNKNOWNNAME; +} + static HRESULT WINAPI Dispatch_Invoke(IDispatch *iface, DISPID id, REFIID riid, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei, UINT *err) { @@ -297,7 +307,7 @@ persistent_Release, Dispatch_GetTypeInfoCount, Dispatch_GetTypeInfo, - Dispatch_GetIDsOfNames, + persistent_GetIDsOfNames, Dispatch_Invoke }; @@ -2040,6 +2050,13 @@ SET_EXPECT(OnEnterScript); SET_EXPECT(OnLeaveScript); + hres = IActiveScriptParse_ParseScriptText(parse, L"dim abc\ntestVar_global = 5\n", L"visibleCodeItem", NULL, NULL, 0, 0, 0, NULL, NULL); + ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres); + CHECK_CALLED(OnEnterScript); + CHECK_CALLED(OnLeaveScript); + + SET_EXPECT(OnEnterScript); + SET_EXPECT(OnLeaveScript); hres = IActiveScriptParse_ParseScriptText(parse, L"set global_me = me\n", L"globalItem", NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL); ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres); CHECK_CALLED(OnEnterScript); @@ -2162,6 +2179,18 @@ IDispatchEx_Release(script_disp2); IDispatchEx_Release(script_disp); + script_disp = get_script_dispatch(script, L"persistent"); + SET_EXPECT(OnEnterScript); + SET_EXPECT(OnLeaveScript); + hres = IActiveScriptParse_ParseScriptText(parse, L"me", L"persistent", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL); + ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres); + ok(V_VT(&var) == VT_DISPATCH && V_DISPATCH(&var) == (IDispatch*)script_disp, + "Unexpected 'me': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var)); + VariantClear(&var); + CHECK_CALLED(OnEnterScript); + CHECK_CALLED(OnLeaveScript); + IDispatchEx_Release(script_disp); + SET_EXPECT(OnEnterScript); SET_EXPECT(OnLeaveScript); hres = IActiveScriptParse_ParseScriptText(parse, L"x = 13\n", L"persistent", NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL); @@ -2218,11 +2247,13 @@ SET_EXPECT(OnStateChange_CONNECTED); SET_EXPECT_MULTI(OnEnterScript, 5); SET_EXPECT_MULTI(OnLeaveScript, 5); + SET_EXPECT(GetIDsOfNames_persistent); hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED); ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres); CHECK_CALLED(OnStateChange_CONNECTED); CHECK_CALLED_MULTI(OnEnterScript, 5); CHECK_CALLED_MULTI(OnLeaveScript, 5); + CHECK_CALLED(GetIDsOfNames_persistent); test_state(script, SCRIPTSTATE_CONNECTED); script_disp2 = get_script_dispatch(script, L"persistent"); @@ -2237,6 +2268,38 @@ CHECK_CALLED(OnEnterScript); CHECK_CALLED(OnLeaveScript); + /* This object is set to named item when persistent items are re-initialized, even for CODEONLY items */ + SET_EXPECT(OnEnterScript); + SET_EXPECT(OnLeaveScript); + hres = IActiveScriptParse_ParseScriptText(parse, L"me", L"persistent", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL); + ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres); + ok(V_VT(&var) == VT_DISPATCH && V_DISPATCH(&var) == &persistent_named_item, + "Unexpected 'me': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var)); + VariantClear(&var); + CHECK_CALLED(OnEnterScript); + CHECK_CALLED(OnLeaveScript); + + /* Lookups also query named items */ + SET_EXPECT(OnEnterScript); + SET_EXPECT(OnLeaveScript); + SET_EXPECT(GetIDsOfNames_persistent); + hres = IActiveScriptParse_ParseScriptText(parse, L"abc123 = 10\n", L"persistent", NULL, NULL, 0, 0, 0, NULL, NULL); + ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres); + CHECK_CALLED(OnEnterScript); + CHECK_CALLED(OnLeaveScript); + CHECK_CALLED(GetIDsOfNames_persistent); + + SET_EXPECT(OnEnterScript); + SET_EXPECT(OnLeaveScript); + SET_EXPECT(GetIDsOfNames_persistent); + SET_EXPECT(OnScriptError); + hres = IActiveScriptParse_ParseScriptText(parse, L"testCall\n", L"persistent", NULL, NULL, 0, 0, 0, NULL, NULL); + ok(FAILED(hres), "ParseScriptText returned: %08x\n", hres); + CHECK_CALLED(OnEnterScript); + CHECK_CALLED(OnLeaveScript); + CHECK_CALLED(GetIDsOfNames_persistent); + CHECK_CALLED(OnScriptError); + script_disp = get_script_dispatch(script, NULL); for (i = 0; i < ARRAY_SIZE(global_idents); i++) { diff -Nru wine-development-5.5/dlls/vbscript/vbscript.c wine-development-5.6/dlls/vbscript/vbscript.c --- wine-development-5.5/dlls/vbscript/vbscript.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/vbscript/vbscript.c 2020-04-10 18:54:32.000000000 +0000 @@ -579,6 +579,9 @@ hres = retrieve_named_item_disp(pass, item); if(FAILED(hres)) return hres; } + + /* For some reason, CODEONLY flag is lost in re-initialized scripts */ + item->flags &= ~SCRIPTITEM_CODEONLY; } hres = create_script_disp(This->ctx, &This->ctx->script_obj); diff -Nru wine-development-5.5/dlls/vcruntime140/Makefile.in wine-development-5.6/dlls/vcruntime140/Makefile.in --- wine-development-5.5/dlls/vcruntime140/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/vcruntime140/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,4 @@ MODULE = vcruntime140.dll -IMPORTS = ucrtbase EXTRADLLFLAGS = -mno-cygwin diff -Nru wine-development-5.5/dlls/ver.dll16/Makefile.in wine-development-5.6/dlls/ver.dll16/Makefile.in --- wine-development-5.5/dlls/ver.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/ver.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ MODULE = ver.dll16 IMPORTS = version lz32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,version.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,version.dll C_SRCS = version.c diff -Nru wine-development-5.5/dlls/w32sys.dll16/Makefile.in wine-development-5.6/dlls/w32sys.dll16/Makefile.in --- wine-development-5.5/dlls/w32sys.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/w32sys.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,4 +1,4 @@ MODULE = w32sys.dll16 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,w32skrnl.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,w32skrnl.dll C_SRCS = w32sys.c diff -Nru wine-development-5.5/dlls/win32s16.dll16/Makefile.in wine-development-5.6/dlls/win32s16.dll16/Makefile.in --- wine-development-5.5/dlls/win32s16.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/win32s16.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,4 +1,4 @@ MODULE = win32s16.dll16 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,w32skrnl.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,w32skrnl.dll C_SRCS = win32s16.c diff -Nru wine-development-5.5/dlls/win87em.dll16/Makefile.in wine-development-5.6/dlls/win87em.dll16/Makefile.in --- wine-development-5.5/dlls/win87em.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/win87em.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,4 +1,4 @@ MODULE = win87em.dll16 -EXTRADLLFLAGS = -m16 -mno-cygwin +EXTRADLLFLAGS = -m16 C_SRCS = win87em.c diff -Nru wine-development-5.5/dlls/winaspi.dll16/Makefile.in wine-development-5.6/dlls/winaspi.dll16/Makefile.in --- wine-development-5.5/dlls/winaspi.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winaspi.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = winaspi.dll16 IMPORTS = wnaspi32 advapi32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,wnaspi32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,wnaspi32.dll C_SRCS = winaspi.c diff -Nru wine-development-5.5/dlls/windebug.dll16/Makefile.in wine-development-5.6/dlls/windebug.dll16/Makefile.in --- wine-development-5.5/dlls/windebug.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/windebug.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,4 +1,4 @@ MODULE = windebug.dll16 -EXTRADLLFLAGS = -m16 -mno-cygwin +EXTRADLLFLAGS = -m16 C_SRCS = windebug.c diff -Nru wine-development-5.5/dlls/windowscodecs/icnsformat.c wine-development-5.6/dlls/windowscodecs/icnsformat.c --- wine-development-5.5/dlls/windowscodecs/icnsformat.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/windowscodecs/icnsformat.c 2020-04-10 18:54:32.000000000 +0000 @@ -86,7 +86,6 @@ #include "wincodecs_private.h" #include "wine/debug.h" -#include "wine/library.h" WINE_DEFAULT_DEBUG_CHANNEL(wincodecs); diff -Nru wine-development-5.5/dlls/windowscodecs/jpegformat.c wine-development-5.6/dlls/windowscodecs/jpegformat.c --- wine-development-5.5/dlls/windowscodecs/jpegformat.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/windowscodecs/jpegformat.c 2020-04-10 18:54:32.000000000 +0000 @@ -52,7 +52,6 @@ #include "wine/heap.h" #include "wine/debug.h" -#include "wine/library.h" WINE_DEFAULT_DEBUG_CHANNEL(wincodecs); @@ -86,10 +85,10 @@ static void *load_libjpeg(void) { - if((libjpeg_handle = wine_dlopen(SONAME_LIBJPEG, RTLD_NOW, NULL, 0)) != NULL) { + if((libjpeg_handle = dlopen(SONAME_LIBJPEG, RTLD_NOW)) != NULL) { #define LOAD_FUNCPTR(f) \ - if((p##f = wine_dlsym(libjpeg_handle, #f, NULL, 0)) == NULL) { \ + if((p##f = dlsym(libjpeg_handle, #f)) == NULL) { \ libjpeg_handle = NULL; \ return NULL; \ } diff -Nru wine-development-5.5/dlls/windowscodecs/pngformat.c wine-development-5.6/dlls/windowscodecs/pngformat.c --- wine-development-5.5/dlls/windowscodecs/pngformat.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/windowscodecs/pngformat.c 2020-04-10 18:54:32.000000000 +0000 @@ -36,7 +36,6 @@ #include "wincodecs_private.h" #include "wine/debug.h" -#include "wine/library.h" WINE_DEFAULT_DEBUG_CHANNEL(wincodecs); @@ -360,10 +359,10 @@ EnterCriticalSection(&init_png_cs); - if(!libpng_handle && (libpng_handle = wine_dlopen(SONAME_LIBPNG, RTLD_NOW, NULL, 0)) != NULL) { + if(!libpng_handle && (libpng_handle = dlopen(SONAME_LIBPNG, RTLD_NOW)) != NULL) { #define LOAD_FUNCPTR(f) \ - if((p##f = wine_dlsym(libpng_handle, #f, NULL, 0)) == NULL) { \ + if((p##f = dlsym(libpng_handle, #f)) == NULL) { \ libpng_handle = NULL; \ LeaveCriticalSection(&init_png_cs); \ return NULL; \ diff -Nru wine-development-5.5/dlls/windowscodecs/tgaformat.c wine-development-5.6/dlls/windowscodecs/tgaformat.c --- wine-development-5.5/dlls/windowscodecs/tgaformat.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/windowscodecs/tgaformat.c 2020-04-10 18:54:32.000000000 +0000 @@ -30,7 +30,6 @@ #include "wincodecs_private.h" #include "wine/debug.h" -#include "wine/library.h" WINE_DEFAULT_DEBUG_CHANNEL(wincodecs); diff -Nru wine-development-5.5/dlls/windowscodecs/tiffformat.c wine-development-5.6/dlls/windowscodecs/tiffformat.c --- wine-development-5.5/dlls/windowscodecs/tiffformat.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/windowscodecs/tiffformat.c 2020-04-10 18:54:32.000000000 +0000 @@ -37,7 +37,6 @@ #include "wincodecs_private.h" #include "wine/debug.h" -#include "wine/library.h" WINE_DEFAULT_DEBUG_CHANNEL(wincodecs); @@ -90,13 +89,13 @@ EnterCriticalSection(&init_tiff_cs); if (!libtiff_handle && - (libtiff_handle = wine_dlopen(SONAME_LIBTIFF, RTLD_NOW, NULL, 0)) != NULL) + (libtiff_handle = dlopen(SONAME_LIBTIFF, RTLD_NOW)) != NULL) { void * (*pTIFFSetWarningHandler)(void *); void * (*pTIFFSetWarningHandlerExt)(void *); #define LOAD_FUNCPTR(f) \ - if((p##f = wine_dlsym(libtiff_handle, #f, NULL, 0)) == NULL) { \ + if((p##f = dlsym(libtiff_handle, #f)) == NULL) { \ ERR("failed to load symbol %s\n", #f); \ libtiff_handle = NULL; \ LeaveCriticalSection(&init_tiff_cs); \ @@ -117,9 +116,9 @@ LOAD_FUNCPTR(TIFFWriteScanline); #undef LOAD_FUNCPTR - if ((pTIFFSetWarningHandler = wine_dlsym(libtiff_handle, "TIFFSetWarningHandler", NULL, 0))) + if ((pTIFFSetWarningHandler = dlsym(libtiff_handle, "TIFFSetWarningHandler"))) pTIFFSetWarningHandler(NULL); - if ((pTIFFSetWarningHandlerExt = wine_dlsym(libtiff_handle, "TIFFSetWarningHandlerExt", NULL, 0))) + if ((pTIFFSetWarningHandlerExt = dlsym(libtiff_handle, "TIFFSetWarningHandlerExt"))) pTIFFSetWarningHandlerExt(NULL); } diff -Nru wine-development-5.5/dlls/wineandroid.drv/device.c wine-development-5.6/dlls/wineandroid.drv/device.c --- wine-development-5.5/dlls/wineandroid.drv/device.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wineandroid.drv/device.c 2020-04-10 18:54:32.000000000 +0000 @@ -39,7 +39,6 @@ #include "ddk/wdm.h" #include "android.h" #include "wine/server.h" -#include "wine/library.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(android); @@ -255,14 +254,14 @@ #ifdef __i386__ /* the Java VM uses %fs/%gs for its own purposes, so we need to wrap the calls */ static WORD orig_fs, java_fs; -static inline void wrap_java_call(void) { wine_set_fs( java_fs ); } -static inline void unwrap_java_call(void) { wine_set_fs( orig_fs ); } +static inline void wrap_java_call(void) { __asm__( "mov %0,%%fs" :: "r" (java_fs) ); } +static inline void unwrap_java_call(void) { __asm__( "mov %0,%%fs" :: "r" (orig_fs) ); } static inline void init_java_thread( JavaVM *java_vm ) { - orig_fs = wine_get_fs(); + __asm__( "mov %%fs,%0" : "=r" (orig_fs) ); (*java_vm)->AttachCurrentThread( java_vm, &jni_env, 0 ); - java_fs = wine_get_fs(); - wine_set_fs( orig_fs ); + __asm__( "mov %%fs,%0" : "=r" (java_fs) ); + __asm__( "mov %0,%%fs" :: "r" (orig_fs) ); } #elif defined(__x86_64__) diff -Nru wine-development-5.5/dlls/wineandroid.drv/init.c wine-development-5.6/dlls/wineandroid.drv/init.c --- wine-development-5.5/dlls/wineandroid.drv/init.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wineandroid.drv/init.c 2020-04-10 18:54:32.000000000 +0000 @@ -32,7 +32,6 @@ #include "winreg.h" #include "android.h" #include "wine/server.h" -#include "wine/library.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(android); @@ -444,7 +443,7 @@ #define DECL_FUNCPTR(f) typeof(f) * p##f = NULL #define LOAD_FUNCPTR(lib, func) do { \ - if ((p##func = wine_dlsym( lib, #func, NULL, 0 )) == NULL) \ + if ((p##func = dlsym( lib, #func )) == NULL) \ { ERR( "can't find symbol %s\n", #func); return; } \ } while(0) @@ -567,9 +566,8 @@ const struct hw_module_t *module; int ret; void *libhardware; - char error[256]; - if ((libhardware = wine_dlopen( "libhardware.so", RTLD_GLOBAL, error, sizeof(error) ))) + if ((libhardware = dlopen( "libhardware.so", RTLD_GLOBAL ))) { LOAD_FUNCPTR( libhardware, hw_get_module ); } @@ -578,9 +576,9 @@ /* Android >= N disallows loading libhardware, so we load libandroid (which imports * libhardware), and then we can find libhardware in the list of loaded libraries. */ - if (!wine_dlopen( "libandroid.so", RTLD_GLOBAL, error, sizeof(error) )) + if (!dlopen( "libandroid.so", RTLD_GLOBAL )) { - ERR( "failed to load libandroid.so: %s\n", error ); + ERR( "failed to load libandroid.so: %s\n", dlerror() ); return; } dl_iterate_phdr( enum_libs, 0 ); @@ -603,16 +601,15 @@ static void load_android_libs(void) { void *libandroid, *liblog; - char error[1024]; - if (!(libandroid = wine_dlopen( "libandroid.so", RTLD_GLOBAL, error, sizeof(error) ))) + if (!(libandroid = dlopen( "libandroid.so", RTLD_GLOBAL ))) { - ERR( "failed to load libandroid.so: %s\n", error ); + ERR( "failed to load libandroid.so: %s\n", dlerror() ); return; } - if (!(liblog = wine_dlopen( "liblog.so", RTLD_GLOBAL, error, sizeof(error) ))) + if (!(liblog = dlopen( "liblog.so", RTLD_GLOBAL ))) { - ERR( "failed to load liblog.so: %s\n", error ); + ERR( "failed to load liblog.so: %s\n", dlerror() ); return; } LOAD_FUNCPTR( liblog, __android_log_print ); @@ -635,7 +632,8 @@ if ((java_vm = wine_get_java_vm())) /* running under Java */ { #ifdef __i386__ - WORD old_fs = wine_get_fs(); + WORD old_fs; + __asm__( "mov %%fs,%0" : "=r" (old_fs) ); #endif load_android_libs(); (*java_vm)->AttachCurrentThread( java_vm, &jni_env, 0 ); @@ -643,7 +641,8 @@ (*jni_env)->RegisterNatives( jni_env, class, methods, ARRAY_SIZE( methods )); (*jni_env)->DeleteLocalRef( jni_env, class ); #ifdef __i386__ - wine_set_fs( old_fs ); /* the Java VM hijacks %fs for its own purposes, restore it */ + /* the Java VM hijacks %fs for its own purposes, restore it */ + __asm__( "mov %0,%%fs" :: "r" (old_fs) ); #endif } return TRUE; diff -Nru wine-development-5.5/dlls/wineandroid.drv/mmdevdrv.c wine-development-5.6/dlls/wineandroid.drv/mmdevdrv.c --- wine-development-5.5/dlls/wineandroid.drv/mmdevdrv.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wineandroid.drv/mmdevdrv.c 2020-04-10 18:54:32.000000000 +0000 @@ -46,7 +46,6 @@ #include "wine/debug.h" #include "wine/unicode.h" #include "wine/list.h" -#include "wine/library.h" #include "ole2.h" #include "mmdeviceapi.h" @@ -237,7 +236,7 @@ } #define LOAD_FUNCPTR(lib, func) do { \ - if ((p##func = wine_dlsym( lib, #func, NULL, 0 )) == NULL) \ + if ((p##func = dlsym( lib, #func )) == NULL) \ { ERR( "can't find symbol %s\n", #func); return FALSE; } \ } while(0) @@ -246,11 +245,10 @@ static BOOL WINAPI load_opensles( INIT_ONCE *once, void *param, void **context ) { void *libopensles; - char error[1024]; - if (!(libopensles = wine_dlopen( "libOpenSLES.so", RTLD_GLOBAL, error, sizeof(error) ))) + if (!(libopensles = dlopen( "libOpenSLES.so", RTLD_GLOBAL ))) { - ERR( "failed to load libOpenSLES.so: %s\n", error ); + ERR( "failed to load libOpenSLES.so: %s\n", dlerror() ); return FALSE; } LOAD_FUNCPTR( libopensles, slCreateEngine ); diff -Nru wine-development-5.5/dlls/wineandroid.drv/opengl.c wine-development-5.6/dlls/wineandroid.drv/opengl.c --- wine-development-5.5/dlls/wineandroid.drv/opengl.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wineandroid.drv/opengl.c 2020-04-10 18:54:32.000000000 +0000 @@ -42,7 +42,6 @@ #include "wine/wgl.h" #undef GLAPIENTRY #include "wine/wgl_driver.h" -#include "wine/library.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(android); @@ -655,11 +654,11 @@ /* load standard functions and extensions exported from the OpenGL library */ -#define USE_GL_FUNC(func) if ((ptr = wine_dlsym( opengl_handle, #func, NULL, 0 ))) egl_funcs.gl.p_##func = ptr; +#define USE_GL_FUNC(func) if ((ptr = dlsym( opengl_handle, #func ))) egl_funcs.gl.p_##func = ptr; ALL_WGL_FUNCS #undef USE_GL_FUNC -#define LOAD_FUNCPTR(func) egl_funcs.ext.p_##func = wine_dlsym( opengl_handle, #func, NULL, 0 ) +#define LOAD_FUNCPTR(func) egl_funcs.ext.p_##func = dlsym( opengl_handle, #func ) LOAD_FUNCPTR( glActiveShaderProgram ); LOAD_FUNCPTR( glActiveTexture ); LOAD_FUNCPTR( glAttachShader ); @@ -949,24 +948,23 @@ static int retval = -1; EGLConfig *configs; EGLint major, minor, count, i, pass; - char buffer[200]; if (retval != -1) return retval; retval = 0; - if (!(egl_handle = wine_dlopen( SONAME_LIBEGL, RTLD_NOW|RTLD_GLOBAL, buffer, sizeof(buffer) ))) + if (!(egl_handle = dlopen( SONAME_LIBEGL, RTLD_NOW|RTLD_GLOBAL ))) { - ERR( "failed to load %s: %s\n", SONAME_LIBEGL, buffer ); + ERR( "failed to load %s: %s\n", SONAME_LIBEGL, dlerror() ); return FALSE; } - if (!(opengl_handle = wine_dlopen( SONAME_LIBGLESV2, RTLD_NOW|RTLD_GLOBAL, buffer, sizeof(buffer) ))) + if (!(opengl_handle = dlopen( SONAME_LIBGLESV2, RTLD_NOW|RTLD_GLOBAL ))) { - ERR( "failed to load %s: %s\n", SONAME_LIBGLESV2, buffer ); + ERR( "failed to load %s: %s\n", SONAME_LIBGLESV2, dlerror() ); return FALSE; } #define LOAD_FUNCPTR(func) do { \ - if (!(p_##func = wine_dlsym( egl_handle, #func, NULL, 0 ))) \ + if (!(p_##func = dlsym( egl_handle, #func ))) \ { ERR( "can't find symbol %s\n", #func); return FALSE; } \ } while(0) LOAD_FUNCPTR( eglCreateContext ); diff -Nru wine-development-5.5/dlls/winebus.sys/bus_sdl.c wine-development-5.6/dlls/winebus.sys/bus_sdl.c --- wine-development-5.5/dlls/winebus.sys/bus_sdl.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winebus.sys/bus_sdl.c 2020-04-10 18:54:32.000000000 +0000 @@ -42,7 +42,6 @@ #include "winternl.h" #include "ddk/wdm.h" #include "ddk/hidtypes.h" -#include "wine/library.h" #include "wine/debug.h" #include "wine/unicode.h" #include "hidusage.h" @@ -1101,7 +1100,7 @@ WaitForSingleObject(deviceloop_handle, INFINITE); CloseHandle(deviceloop_handle); - wine_dlclose(sdl_handle, NULL, 0); + dlclose(sdl_handle); } NTSTATUS sdl_driver_init(void) @@ -1114,12 +1113,12 @@ if (sdl_handle == NULL) { - sdl_handle = wine_dlopen(SONAME_LIBSDL2, RTLD_NOW, NULL, 0); + sdl_handle = dlopen(SONAME_LIBSDL2, RTLD_NOW); if (!sdl_handle) { WARN("could not load %s\n", SONAME_LIBSDL2); return STATUS_UNSUCCESSFUL; } -#define LOAD_FUNCPTR(f) if((p##f = wine_dlsym(sdl_handle, #f, NULL, 0)) == NULL){WARN("Can't find symbol %s\n", #f); goto sym_not_found;} +#define LOAD_FUNCPTR(f) if((p##f = dlsym(sdl_handle, #f)) == NULL){WARN("Can't find symbol %s\n", #f); goto sym_not_found;} LOAD_FUNCPTR(SDL_GetError); LOAD_FUNCPTR(SDL_Init); LOAD_FUNCPTR(SDL_JoystickClose); @@ -1159,9 +1158,9 @@ LOAD_FUNCPTR(SDL_RegisterEvents); LOAD_FUNCPTR(SDL_PushEvent); #undef LOAD_FUNCPTR - pSDL_JoystickGetProduct = wine_dlsym(sdl_handle, "SDL_JoystickGetProduct", NULL, 0); - pSDL_JoystickGetProductVersion = wine_dlsym(sdl_handle, "SDL_JoystickGetProductVersion", NULL, 0); - pSDL_JoystickGetVendor = wine_dlsym(sdl_handle, "SDL_JoystickGetVendor", NULL, 0); + pSDL_JoystickGetProduct = dlsym(sdl_handle, "SDL_JoystickGetProduct"); + pSDL_JoystickGetProductVersion = dlsym(sdl_handle, "SDL_JoystickGetProductVersion"); + pSDL_JoystickGetVendor = dlsym(sdl_handle, "SDL_JoystickGetVendor"); } map_controllers = check_bus_option(&controller_mode, 1); @@ -1189,7 +1188,7 @@ CloseHandle(events[1]); sym_not_found: - wine_dlclose(sdl_handle, NULL, 0); + dlclose(sdl_handle); sdl_handle = NULL; return STATUS_UNSUCCESSFUL; } diff -Nru wine-development-5.5/dlls/winecrt0/exe_entry.c wine-development-5.6/dlls/winecrt0/exe_entry.c --- wine-development-5.5/dlls/winecrt0/exe_entry.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winecrt0/exe_entry.c 2020-04-10 18:54:32.000000000 +0000 @@ -25,43 +25,83 @@ #include #include "windef.h" #include "winbase.h" -#include "winnls.h" #include "winternl.h" -#include "wine/library.h" #include "crt0_private.h" extern int __cdecl main( int argc, char *argv[] ); -static char **build_argv( WCHAR **wargv ) +static char **build_argv( const char *src, int *ret_argc ) { - int argc; - char *p, **argv; - DWORD total = 0; - - for (argc = 0; wargv[argc]; argc++) - total += WideCharToMultiByte( CP_ACP, 0, wargv[argc], -1, NULL, 0, NULL, NULL ); + char **argv, *arg, *dst; + int argc, in_quotes = 0, bcount = 0, len = strlen(src) + 1; - argv = HeapAlloc( GetProcessHeap(), 0, total + (argc + 1) * sizeof(*argv) ); - p = (char *)(argv + argc + 1); - for (argc = 0; wargv[argc]; argc++) + argc = 2 + len / 2; + argv = HeapAlloc( GetProcessHeap(), 0, argc * sizeof(*argv) + len ); + arg = dst = (char *)(argv + argc); + argc = 0; + while (*src) { - DWORD reslen = WideCharToMultiByte( CP_ACP, 0, wargv[argc], -1, p, total, NULL, NULL ); - argv[argc] = p; - p += reslen; - total -= reslen; + if ((*src == ' ' || *src == '\t') && !in_quotes) + { + /* skip the remaining spaces */ + while (*src == ' ' || *src == '\t') src++; + if (!*src) break; + /* close the argument and copy it */ + *dst++ = 0; + argv[argc++] = arg; + /* start with a new argument */ + arg = dst; + bcount = 0; + } + else if (*src == '\\') + { + *dst++ = *src++; + bcount++; + } + else if (*src == '"') + { + if ((bcount & 1) == 0) + { + /* Preceded by an even number of '\', this is half that + * number of '\', plus a '"' which we discard. + */ + dst -= bcount / 2; + src++; + if (in_quotes && *src == '"') *dst++ = *src++; + else in_quotes = !in_quotes; + } + else + { + /* Preceded by an odd number of '\', this is half that + * number of '\' followed by a '"' + */ + dst -= bcount / 2 + 1; + *dst++ = *src++; + } + bcount = 0; + } + else /* a regular character */ + { + *dst++ = *src++; + bcount = 0; + } } + *dst = 0; + argv[argc++] = arg; argv[argc] = NULL; + *ret_argc = argc; return argv; } DWORD WINAPI DECLSPEC_HIDDEN __wine_spec_exe_entry( PEB *peb ) { + int argc; BOOL needs_init = (__wine_spec_init_state != CONSTRUCTORS_DONE); - char **argv = build_argv( __wine_main_wargv ); + char **argv = build_argv( GetCommandLineA(), &argc ); DWORD ret; - if (needs_init) _init( __wine_main_argc, argv, NULL ); - ret = main( __wine_main_argc, argv ); + if (needs_init) _init( argc, argv, NULL ); + ret = main( argc, argv ); if (needs_init) _fini(); ExitProcess( ret ); } diff -Nru wine-development-5.5/dlls/winecrt0/exe_wentry.c wine-development-5.6/dlls/winecrt0/exe_wentry.c --- wine-development-5.5/dlls/winecrt0/exe_wentry.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winecrt0/exe_wentry.c 2020-04-10 18:54:32.000000000 +0000 @@ -26,18 +26,82 @@ #include "windef.h" #include "winbase.h" #include "winternl.h" -#include "wine/library.h" #include "crt0_private.h" extern int __cdecl wmain( int argc, WCHAR *argv[] ); +static WCHAR **build_argv( const WCHAR *src, int *ret_argc ) +{ + WCHAR **argv, *arg, *dst; + int argc, in_quotes = 0, bcount = 0, len = lstrlenW(src) + 1; + + argc = 2 + len / 2; + argv = HeapAlloc( GetProcessHeap(), 0, argc * sizeof(*argv) + len * sizeof(WCHAR) ); + arg = dst = (WCHAR *)(argv + argc); + argc = 0; + while (*src) + { + if ((*src == ' ' || *src == '\t') && !in_quotes) + { + /* skip the remaining spaces */ + while (*src == ' ' || *src == '\t') src++; + if (!*src) break; + /* close the argument and copy it */ + *dst++ = 0; + argv[argc++] = arg; + /* start with a new argument */ + arg = dst; + bcount = 0; + } + else if (*src == '\\') + { + *dst++ = *src++; + bcount++; + } + else if (*src == '"') + { + if ((bcount & 1) == 0) + { + /* Preceded by an even number of '\', this is half that + * number of '\', plus a '"' which we discard. + */ + dst -= bcount / 2; + src++; + if (in_quotes && *src == '"') *dst++ = *src++; + else in_quotes = !in_quotes; + } + else + { + /* Preceded by an odd number of '\', this is half that + * number of '\' followed by a '"' + */ + dst -= bcount / 2 + 1; + *dst++ = *src++; + } + bcount = 0; + } + else /* a regular character */ + { + *dst++ = *src++; + bcount = 0; + } + } + *dst = 0; + argv[argc++] = arg; + argv[argc] = NULL; + *ret_argc = argc; + return argv; +} + DWORD WINAPI DECLSPEC_HIDDEN __wine_spec_exe_wentry( PEB *peb ) { + int argc; BOOL needs_init = (__wine_spec_init_state != CONSTRUCTORS_DONE); + WCHAR **argv = build_argv( GetCommandLineW(), &argc ); DWORD ret; if (needs_init) _init( 0, NULL, NULL ); - ret = wmain( __wine_main_argc, __wine_main_wargv ); + ret = wmain( argc, argv ); if (needs_init) _fini(); ExitProcess( ret ); } diff -Nru wine-development-5.5/dlls/wined3d/adapter_gl.c wine-development-5.6/dlls/wined3d/adapter_gl.c --- wine-development-5.5/dlls/wined3d/adapter_gl.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wined3d/adapter_gl.c 2020-04-10 18:54:32.000000000 +0000 @@ -53,6 +53,8 @@ {"GL_APPLE_fence", APPLE_FENCE }, {"GL_APPLE_float_pixels", APPLE_FLOAT_PIXELS }, {"GL_APPLE_flush_buffer_range", APPLE_FLUSH_BUFFER_RANGE }, + {"GL_APPLE_flush_render", APPLE_FLUSH_RENDER }, + {"GL_APPLE_rgb_422", APPLE_RGB_422 }, {"GL_APPLE_ycbcr_422", APPLE_YCBCR_422 }, /* ARB */ @@ -1225,7 +1227,8 @@ * is specific to the Mac OS X window management, and GL_APPLE_ycbcr_422 is QuickTime specific. So * the chance that other implementations support them is rather small since Win32 QuickTime uses * DirectDraw, not OpenGL. */ - if (gl_info->supported[APPLE_FENCE] && gl_info->supported[APPLE_YCBCR_422]) + if (gl_info->supported[APPLE_FLUSH_RENDER] + && (gl_info->supported[APPLE_YCBCR_422] || gl_info->supported[APPLE_RGB_422])) return GL_VENDOR_APPLE; if (strstr(gl_vendor_string, "NVIDIA")) diff -Nru wine-development-5.5/dlls/wined3d/buffer.c wine-development-5.6/dlls/wined3d/buffer.c --- wine-development-5.5/dlls/wined3d/buffer.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wined3d/buffer.c 2020-04-10 18:54:32.000000000 +0000 @@ -1198,6 +1198,9 @@ struct wined3d_context *context; DWORD dst_location; + TRACE("dst_buffer %p, dst_offset %u, src_buffer %p, src_offset %u, size %u.\n", + dst_buffer, dst_offset, src_buffer, src_offset, size); + buffer_mark_used(dst_buffer); buffer_mark_used(src_buffer); @@ -1492,6 +1495,9 @@ const struct wined3d_gl_info *gl_info = context_gl->gl_info; const struct wined3d_range *range; + TRACE("buffer %p, context %p, data %p, data_offset %u, range_count %u, ranges %p.\n", + buffer, context, data, data_offset, range_count, ranges); + wined3d_buffer_gl_bind(buffer_gl, context_gl); while (range_count--) @@ -1512,6 +1518,9 @@ const struct wined3d_gl_info *gl_info = context_gl->gl_info; const struct wined3d_range *range; + TRACE("buffer %p, context %p, data %p, data_offset %u, range_count %u, ranges %p.\n", + buffer, context, data, data_offset, range_count, ranges); + wined3d_buffer_gl_bind(buffer_gl, context_gl); while (range_count--) diff -Nru wine-development-5.5/dlls/wined3d/context.c wine-development-5.6/dlls/wined3d/context.c --- wine-development-5.5/dlls/wined3d/context.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wined3d/context.c 2020-04-10 18:54:32.000000000 +0000 @@ -5132,9 +5132,17 @@ unsigned int i, idx_size = 0; const void *idx_data = NULL; + TRACE("device %p, state %p, parameters %p.\n", device, state, parameters); + if (!parameters->indirect && !parameters->u.direct.index_count) return; + if (!parameters->indirect) + TRACE("base_vertex_idx %d, start_idx %u, index_count %u, start_instance %u, instance_count %u.\n", + parameters->u.direct.base_vertex_idx, parameters->u.direct.start_idx, + parameters->u.direct.index_count, parameters->u.direct.start_instance, + parameters->u.direct.instance_count); + if (!(rtv = fb->render_targets[0])) rtv = fb->depth_stencil; @@ -5367,6 +5375,8 @@ wined3d_fence_issue(context->buffer_fences[i], device); context_release(context); + + TRACE("Draw completed.\n"); } void wined3d_context_gl_unload_tex_coords(const struct wined3d_context_gl *context_gl) diff -Nru wine-development-5.5/dlls/wined3d/device.c wine-development-5.6/dlls/wined3d/device.c --- wine-development-5.5/dlls/wined3d/device.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wined3d/device.c 2020-04-10 18:54:32.000000000 +0000 @@ -4910,9 +4910,7 @@ { unsigned int texture_level = sub_resource_idx % texture->level_count; unsigned int cursor_width, cursor_height; - struct wined3d_display_mode mode; struct wined3d_map_desc map_desc; - HRESULT hr; TRACE("device %p, x_hotspot %u, y_hotspot %u, texture %p, sub_resource_idx %u.\n", device, x_hotspot, y_hotspot, texture, sub_resource_idx); @@ -4934,23 +4932,15 @@ return WINED3DERR_INVALIDCALL; } - if (FAILED(hr = wined3d_output_get_display_mode(&device->adapter->outputs[0], &mode, NULL))) - { - ERR("Failed to get display mode, hr %#x.\n", hr); - return WINED3DERR_INVALIDCALL; - } - + /* Cursor width and height must all be powers of two */ cursor_width = wined3d_texture_get_level_width(texture, texture_level); cursor_height = wined3d_texture_get_level_height(texture, texture_level); - if (cursor_width > mode.width || cursor_height > mode.height) + if ((cursor_width & (cursor_width - 1)) || (cursor_height & (cursor_height - 1))) { - WARN("Texture %p, sub-resource %u dimensions are %ux%u, but screen dimensions are %ux%u.\n", - texture, sub_resource_idx, cursor_width, cursor_height, mode.width, mode.height); + WARN("Cursor size %ux%u are not all powers of two.\n", cursor_width, cursor_height); return WINED3DERR_INVALIDCALL; } - /* TODO: MSDN: Cursor sizes must be a power of 2 */ - /* Do not store the surface's pointer because the application may * release it after setting the cursor image. Windows doesn't * addref the set surface, so we can't do this either without diff -Nru wine-development-5.5/dlls/wined3d/directx.c wine-development-5.6/dlls/wined3d/directx.c --- wine-development-5.5/dlls/wined3d/directx.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wined3d/directx.c 2020-04-10 18:54:32.000000000 +0000 @@ -1260,7 +1260,6 @@ const struct wined3d_display_mode *mode) { DEVMODEW new_mode, current_mode; - RECT clip_rc; LONG ret; enum wined3d_format_id new_format_id; @@ -1341,10 +1340,6 @@ /* Store the new values. */ output->screen_format = new_format_id; - /* And finally clip mouse to our screen. */ - SetRect(&clip_rc, 0, 0, new_mode.dmPelsWidth, new_mode.dmPelsHeight); - ClipCursor(&clip_rc); - return WINED3D_OK; } diff -Nru wine-development-5.5/dlls/wined3d/query.c wine-development-5.6/dlls/wined3d/query.c --- wine-development-5.5/dlls/wined3d/query.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wined3d/query.c 2020-04-10 18:54:32.000000000 +0000 @@ -456,9 +456,6 @@ TRACE("query %p, data %p, data_size %u, flags %#x.\n", query, data, data_size, flags); - if (flags) - WARN("Ignoring flags %#x.\n", flags); - if (query->state == QUERY_BUILDING) { WARN("Query is building, returning S_FALSE.\n"); diff -Nru wine-development-5.5/dlls/wined3d/swapchain.c wine-development-5.6/dlls/wined3d/swapchain.c --- wine-development-5.5/dlls/wined3d/swapchain.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wined3d/swapchain.c 2020-04-10 18:54:32.000000000 +0000 @@ -1067,7 +1067,6 @@ if (!output || FAILED(wined3d_output_set_display_mode(output, &swapchain->state.original_mode))) ERR("Failed to restore display mode.\n"); - ClipCursor(NULL); } if (swapchain->back_buffers) diff -Nru wine-development-5.5/dlls/wined3d/utils.c wine-development-5.6/dlls/wined3d/utils.c --- wine-development-5.5/dlls/wined3d/utils.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wined3d/utils.c 2020-04-10 18:54:32.000000000 +0000 @@ -3262,16 +3262,19 @@ return TRUE; } -static BOOL color_match(DWORD c1, DWORD c2, BYTE max_diff) +static BOOL compare_uint(unsigned int x, unsigned int y, unsigned int max_diff) { - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - c1 >>= 8; c2 >>= 8; - if (abs((c1 & 0xff) - (c2 & 0xff)) > max_diff) return FALSE; - return TRUE; + unsigned int diff = x > y ? x - y : y - x; + + return diff <= max_diff; +} + +static BOOL compare_colour(DWORD c1, DWORD c2, BYTE max_diff) +{ + return compare_uint(c1 & 0xff, c2 & 0xff, max_diff) + && compare_uint((c1 >> 8) & 0xff, (c2 >> 8) & 0xff, max_diff) + && compare_uint((c1 >> 16) & 0xff, (c2 >> 16) & 0xff, max_diff) + && compare_uint((c1 >> 24) & 0xff, (c2 >> 24) & 0xff, max_diff); } /* A context is provided by the caller */ @@ -3345,8 +3348,8 @@ gl_info->gl_ops.gl.p_glBindTexture(GL_TEXTURE_2D, buffer); memset(readback, 0x7f, sizeof(readback)); gl_info->gl_ops.gl.p_glGetTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, readback); - if (color_match(readback[6], 0xffffffff, 5) || color_match(readback[6], 0x00000000, 5) - || color_match(readback[9], 0xffffffff, 5) || color_match(readback[9], 0x00000000, 5)) + if (compare_colour(readback[6], 0xffffffff, 5) || compare_colour(readback[6], 0x00000000, 5) + || compare_colour(readback[9], 0xffffffff, 5) || compare_colour(readback[9], 0x00000000, 5)) { TRACE("Read back colors 0x%08x and 0x%08x close to unfiltered color, assuming no filtering\n", readback[6], readback[9]); diff -Nru wine-development-5.5/dlls/wined3d/wined3d_gl.h wine-development-5.6/dlls/wined3d/wined3d_gl.h --- wine-development-5.5/dlls/wined3d/wined3d_gl.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wined3d/wined3d_gl.h 2020-04-10 18:54:32.000000000 +0000 @@ -37,6 +37,8 @@ APPLE_FENCE, APPLE_FLOAT_PIXELS, APPLE_FLUSH_BUFFER_RANGE, + APPLE_FLUSH_RENDER, + APPLE_RGB_422, APPLE_YCBCR_422, /* ARB */ ARB_BASE_INSTANCE, diff -Nru wine-development-5.5/dlls/winegstreamer/gstdemux.c wine-development-5.6/dlls/winegstreamer/gstdemux.c --- wine-development-5.5/dlls/winegstreamer/gstdemux.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winegstreamer/gstdemux.c 2020-04-10 18:54:32.000000000 +0000 @@ -387,6 +387,10 @@ unsigned int i; GstCaps *caps; + if (!IsEqualGUID(&mt->formattype, &FORMAT_VideoInfo) + || mt->cbFormat < sizeof(VIDEOINFOHEADER) || !mt->pbFormat) + return NULL; + for (i = 0; i < ARRAY_SIZE(format_map); ++i) { if (IsEqualGUID(&mt->subtype, format_map[i].subtype)) @@ -425,6 +429,10 @@ GstAudioFormat format = GST_AUDIO_FORMAT_UNKNOWN; GstAudioInfo info; + if (!IsEqualGUID(&mt->formattype, &FORMAT_WaveFormatEx) + || mt->cbFormat < sizeof(WAVEFORMATEX) || !mt->pbFormat) + return NULL; + if (IsEqualGUID(&mt->subtype, &MEDIASUBTYPE_PCM)) format = gst_audio_format_build_integer(wfx->wBitsPerSample != 8, G_LITTLE_ENDIAN, wfx->wBitsPerSample, wfx->wBitsPerSample); diff -Nru wine-development-5.5/dlls/winemac.drv/cocoa_opengl.m wine-development-5.6/dlls/winemac.drv/cocoa_opengl.m --- wine-development-5.5/dlls/winemac.drv/cocoa_opengl.m 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winemac.drv/cocoa_opengl.m 2020-04-10 18:54:32.000000000 +0000 @@ -18,6 +18,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#define GL_SILENCE_DEPRECATION #include #import "cocoa_opengl.h" diff -Nru wine-development-5.5/dlls/winemac.drv/opengl.c wine-development-5.6/dlls/winemac.drv/opengl.c --- wine-development-5.5/dlls/winemac.drv/opengl.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winemac.drv/opengl.c 2020-04-10 18:54:32.000000000 +0000 @@ -27,11 +27,11 @@ #include "winuser.h" #include "winternl.h" #include "winnt.h" -#include "wine/library.h" #include "wine/debug.h" #include "wine/wgl.h" #include "wine/wgl_driver.h" +#define GL_SILENCE_DEPRECATION #define __gl_h_ #define __gltypes_h_ #include @@ -4246,7 +4246,6 @@ { static BOOL init_done = FALSE; unsigned int i; - char buffer[200]; if (init_done) return (opengl_handle != NULL); init_done = TRUE; @@ -4260,17 +4259,17 @@ return FALSE; } - opengl_handle = wine_dlopen("/System/Library/Frameworks/OpenGL.framework/OpenGL", RTLD_LAZY|RTLD_LOCAL|RTLD_NOLOAD, buffer, sizeof(buffer)); + opengl_handle = dlopen("/System/Library/Frameworks/OpenGL.framework/OpenGL", RTLD_LAZY|RTLD_LOCAL|RTLD_NOLOAD); if (!opengl_handle) { - ERR("Failed to load OpenGL: %s\n", buffer); + ERR("Failed to load OpenGL: %s\n", dlerror()); ERR("OpenGL support is disabled.\n"); return FALSE; } for (i = 0; i < ARRAY_SIZE(opengl_func_names); i++) { - if (!(((void **)&opengl_funcs.gl)[i] = wine_dlsym(opengl_handle, opengl_func_names[i], NULL, 0))) + if (!(((void **)&opengl_funcs.gl)[i] = dlsym(opengl_handle, opengl_func_names[i]))) { ERR("%s not found in OpenGL, disabling.\n", opengl_func_names[i]); goto failed; @@ -4295,12 +4294,12 @@ /* redirect some OpenGL extension functions */ #define REDIRECT(func) \ - do { if ((p##func = wine_dlsym(opengl_handle, #func, NULL, 0))) { opengl_funcs.ext.p_##func = macdrv_##func; } } while(0) + do { if ((p##func = dlsym(opengl_handle, #func))) { opengl_funcs.ext.p_##func = macdrv_##func; } } while(0) REDIRECT(glCopyColorTable); #undef REDIRECT if (gluCheckExtension((GLubyte*)"GL_APPLE_flush_render", (GLubyte*)gl_info.glExtensions)) - pglFlushRenderAPPLE = wine_dlsym(opengl_handle, "glFlushRenderAPPLE", NULL, 0); + pglFlushRenderAPPLE = dlsym(opengl_handle, "glFlushRenderAPPLE"); load_extensions(); if (!init_pixel_formats()) @@ -4309,7 +4308,7 @@ return TRUE; failed: - wine_dlclose(opengl_handle, NULL, 0); + dlclose(opengl_handle); opengl_handle = NULL; return FALSE; } @@ -4478,7 +4477,7 @@ void *ret; if (!strncmp(proc, "wgl", 3)) return NULL; - ret = wine_dlsym(opengl_handle, proc, NULL, 0); + ret = dlsym(opengl_handle, proc); if (ret) { if (TRACE_ON(wgl)) diff -Nru wine-development-5.5/dlls/winemac.drv/vulkan.c wine-development-5.6/dlls/winemac.drv/vulkan.c --- wine-development-5.5/dlls/winemac.drv/vulkan.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winemac.drv/vulkan.c 2020-04-10 18:54:32.000000000 +0000 @@ -33,7 +33,6 @@ #include "wine/debug.h" #include "wine/heap.h" -#include "wine/library.h" #define VK_NO_PROTOTYPES #define WINE_VK_HOST @@ -86,7 +85,9 @@ static VkResult (*pvkEnumerateInstanceExtensionProperties)(const char *, uint32_t *, VkExtensionProperties *); static void * (*pvkGetDeviceProcAddr)(VkDevice, const char *); static void * (*pvkGetInstanceProcAddr)(VkInstance, const char *); +static VkResult (*pvkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *, VkSurfaceCapabilities2KHR *); static VkResult (*pvkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice, VkSurfaceKHR, VkSurfaceCapabilitiesKHR *); +static VkResult (*pvkGetPhysicalDeviceSurfaceFormats2KHR)(VkPhysicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *, uint32_t *, VkSurfaceFormat2KHR *); static VkResult (*pvkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice, VkSurfaceKHR, uint32_t *, VkSurfaceFormatKHR *); static VkResult (*pvkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice, VkSurfaceKHR, uint32_t *, VkPresentModeKHR *); static VkResult (*pvkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice, uint32_t, VkSurfaceKHR, VkBool32 *); @@ -105,13 +106,13 @@ static BOOL WINAPI wine_vk_init(INIT_ONCE *once, void *param, void **context) { - if (!(vulkan_handle = wine_dlopen(SONAME_LIBMOLTENVK, RTLD_NOW, NULL, 0))) + if (!(vulkan_handle = dlopen(SONAME_LIBMOLTENVK, RTLD_NOW))) { ERR("Failed to load %s\n", SONAME_LIBMOLTENVK); return TRUE; } -#define LOAD_FUNCPTR(f) if ((p##f = wine_dlsym(vulkan_handle, #f, NULL, 0)) == NULL) goto fail; +#define LOAD_FUNCPTR(f) if ((p##f = dlsym(vulkan_handle, #f)) == NULL) goto fail; LOAD_FUNCPTR(vkCreateInstance) LOAD_FUNCPTR(vkCreateSwapchainKHR) LOAD_FUNCPTR(vkCreateMacOSSurfaceMVK) @@ -122,7 +123,9 @@ LOAD_FUNCPTR(vkEnumerateInstanceExtensionProperties) LOAD_FUNCPTR(vkGetDeviceProcAddr) LOAD_FUNCPTR(vkGetInstanceProcAddr) + LOAD_FUNCPTR(vkGetPhysicalDeviceSurfaceCapabilities2KHR) LOAD_FUNCPTR(vkGetPhysicalDeviceSurfaceCapabilitiesKHR) + LOAD_FUNCPTR(vkGetPhysicalDeviceSurfaceFormats2KHR) LOAD_FUNCPTR(vkGetPhysicalDeviceSurfaceFormatsKHR) LOAD_FUNCPTR(vkGetPhysicalDeviceSurfacePresentModesKHR) LOAD_FUNCPTR(vkGetPhysicalDeviceSurfaceSupportKHR) @@ -133,7 +136,7 @@ return TRUE; fail: - wine_dlclose(vulkan_handle, NULL, 0); + dlclose(vulkan_handle); vulkan_handle = NULL; return TRUE; } @@ -441,6 +444,19 @@ return pvkGetInstanceProcAddr(instance, name); } +static VkResult macdrv_vkGetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice phys_dev, + const VkPhysicalDeviceSurfaceInfo2KHR *surface_info, VkSurfaceCapabilities2KHR *capabilities) +{ + VkPhysicalDeviceSurfaceInfo2KHR surface_info_host; + + TRACE("%p, %p, %p\n", phys_dev, surface_info, capabilities); + + surface_info_host = *surface_info; + surface_info_host.surface = surface_from_handle(surface_info->surface)->surface; + + return pvkGetPhysicalDeviceSurfaceCapabilities2KHR(phys_dev, &surface_info_host, capabilities); +} + static VkResult macdrv_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice phys_dev, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR *capabilities) { @@ -452,6 +468,19 @@ capabilities); } +static VkResult macdrv_vkGetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice phys_dev, + const VkPhysicalDeviceSurfaceInfo2KHR *surface_info, uint32_t *count, VkSurfaceFormat2KHR *formats) +{ + VkPhysicalDeviceSurfaceInfo2KHR surface_info_host; + + TRACE("%p, %p, %p, %p\n", phys_dev, surface_info, count, formats); + + surface_info_host = *surface_info; + surface_info_host.surface = surface_from_handle(surface_info->surface)->surface; + + return pvkGetPhysicalDeviceSurfaceFormats2KHR(phys_dev, &surface_info_host, count, formats); +} + static VkResult macdrv_vkGetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice phys_dev, VkSurfaceKHR surface, uint32_t *count, VkSurfaceFormatKHR *formats) { @@ -542,7 +571,9 @@ macdrv_vkGetDeviceProcAddr, macdrv_vkGetInstanceProcAddr, NULL, + macdrv_vkGetPhysicalDeviceSurfaceCapabilities2KHR, macdrv_vkGetPhysicalDeviceSurfaceCapabilitiesKHR, + macdrv_vkGetPhysicalDeviceSurfaceFormats2KHR, macdrv_vkGetPhysicalDeviceSurfaceFormatsKHR, macdrv_vkGetPhysicalDeviceSurfacePresentModesKHR, macdrv_vkGetPhysicalDeviceSurfaceSupportKHR, diff -Nru wine-development-5.5/dlls/wineps16.drv16/Makefile.in wine-development-5.6/dlls/wineps16.drv16/Makefile.in --- wine-development-5.5/dlls/wineps16.drv16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wineps16.drv16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = wineps16.drv16 IMPORTS = winspool -EXTRADLLFLAGS = -m16 -mno-cygwin +EXTRADLLFLAGS = -m16 C_SRCS = driver.c diff -Nru wine-development-5.5/dlls/winevulkan/Makefile.in wine-development-5.6/dlls/winevulkan/Makefile.in --- wine-development-5.5/dlls/winevulkan/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winevulkan/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,9 +1,9 @@ MODULE = winevulkan.dll IMPORTLIB = winevulkan -IMPORTS = user32 gdi32 +IMPORTS = user32 gdi32 advapi32 C_SRCS = \ vulkan.c \ vulkan_thunks.c -RC_SRCS = version.rc +RC_SRCS = winevulkan.rc diff -Nru wine-development-5.5/dlls/winevulkan/make_vulkan wine-development-5.6/dlls/winevulkan/make_vulkan --- wine-development-5.5/dlls/winevulkan/make_vulkan 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winevulkan/make_vulkan 2020-04-10 18:54:32.000000000 +0000 @@ -71,6 +71,7 @@ WINE_VULKAN_H = "../../include/wine/vulkan.h" WINE_VULKAN_DRIVER_H = "../../include/wine/vulkan_driver.h" WINE_VULKAN_LOADER_SPEC = "../vulkan-1/vulkan-1.spec" +WINE_VULKAN_JSON = "winevulkan.json" WINE_VULKAN_SPEC = "winevulkan.spec" WINE_VULKAN_THUNKS_C = "vulkan_thunks.c" WINE_VULKAN_THUNKS_H = "vulkan_thunks.h" @@ -95,7 +96,6 @@ "VK_EXT_validation_features", "VK_EXT_validation_flags", "VK_KHR_display", # Needs WSI work. - "VK_KHR_get_surface_capabilities2", "VK_KHR_surface_protected_capabilities", # Device extensions @@ -138,7 +138,7 @@ # Functions part of our winevulkan graphics driver interface. # DRIVER_VERSION should be bumped on any change to driver interface # in FUNCTION_OVERRIDES -DRIVER_VERSION = 7 +DRIVER_VERSION = 8 # Table of functions for which we have a special implementation. # These are regular device / instance functions for which we need @@ -185,6 +185,10 @@ "vkGetPhysicalDeviceSurfaceFormatsKHR" : {"dispatch" : True, "driver" : True, "thunk" : True}, "vkGetPhysicalDeviceSurfacePresentModesKHR" : {"dispatch" : True, "driver" : True, "thunk" : True}, + # VK_KHR_get_surface_capabilities2 + "vkGetPhysicalDeviceSurfaceCapabilities2KHR" : {"dispatch" : True, "driver" : True, "thunk" : True}, + "vkGetPhysicalDeviceSurfaceFormats2KHR" : {"dispatch" : True, "driver" : True, "thunk" : True}, + # VK_KHR_win32_surface "vkCreateWin32SurfaceKHR" : {"dispatch" : True, "driver" : True, "thunk" : True}, "vkGetPhysicalDeviceWin32PresentationSupportKHR" : {"dispatch" : True, "driver" : True, "thunk" : True}, @@ -2526,6 +2530,9 @@ else: f.write("@ stub {0}\n".format(func.name)) + f.write("@ stdcall -private DllRegisterServer()\n") + f.write("@ stdcall -private DllUnregisterServer()\n") + def generate_vulkan_loader_spec(self, f): self._generate_copyright(f, spec_file=True) @@ -3033,6 +3040,15 @@ self.handles = sorted(handles, key=lambda handle: handle.name) self.structs = sorted(structs, key=lambda struct: struct.name) +def generate_vulkan_json(f): + f.write("{\n") + f.write(" \"file_format_version\": \"1.0.0\",\n") + f.write(" \"ICD\": {\n") + f.write(" \"library_path\": \".\\\\winevulkan.dll\",\n") + f.write(" \"api_version\": \"{0}\"\n".format(VK_XML_VERSION)) + f.write(" }\n") + f.write("}\n") + def set_working_directory(): path = os.path.abspath(__file__) path = os.path.dirname(path) @@ -3074,6 +3090,9 @@ with open(WINE_VULKAN_THUNKS_C, "w") as f: generator.generate_thunks_c(f, "wine_") + with open(WINE_VULKAN_JSON, "w") as f: + generate_vulkan_json(f) + with open(WINE_VULKAN_SPEC, "w") as f: generator.generate_vulkan_spec(f) diff -Nru wine-development-5.5/dlls/winevulkan/version.rc wine-development-5.6/dlls/winevulkan/version.rc --- wine-development-5.5/dlls/winevulkan/version.rc 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winevulkan/version.rc 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -/* - * Copyright 2017 Roderick Colenbrander - * - * 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" /* Needed to get PACKAGE_VERSION */ - -#define WINE_FILEDESCRIPTION_STR "Wine Vulkan ICD" -#define WINE_FILENAME_STR "winevulkan.dll" -#define WINE_FILEVERSION_STR PACKAGE_VERSION -#define WINE_PRODUCTVERSION_STR PACKAGE_VERSION -#define WINE_PRODUCTNAME_STR "Wine Vulkan" - -#include "wine/wine_common_ver.rc" diff -Nru wine-development-5.5/dlls/winevulkan/vulkan.c wine-development-5.6/dlls/winevulkan/vulkan.c --- wine-development-5.5/dlls/winevulkan/vulkan.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winevulkan/vulkan.c 2020-04-10 18:54:32.000000000 +0000 @@ -21,6 +21,7 @@ #include "windef.h" #include "winbase.h" +#include "winreg.h" #include "winuser.h" #include "vulkan_private.h" @@ -50,6 +51,7 @@ static void *wine_vk_get_global_proc_addr(const char *name); +static HINSTANCE hinstance; static const struct vulkan_funcs *vk_funcs; static VkResult (*p_vkEnumerateInstanceVersion)(uint32_t *version); @@ -1268,6 +1270,7 @@ switch (reason) { case DLL_PROCESS_ATTACH: + hinstance = hinst; DisableThreadLibraryCalls(hinst); return wine_vk_init(); } @@ -1307,3 +1310,63 @@ { return vk_funcs->p_vkGetInstanceProcAddr(instance, name); } + + +static const WCHAR winevulkan_json_resW[] = {'w','i','n','e','v','u','l','k','a','n','_','j','s','o','n',0}; +static const WCHAR winevulkan_json_pathW[] = {'\\','w','i','n','e','v','u','l','k','a','n','.','j','s','o','n',0}; +static const WCHAR vulkan_driversW[] = {'S','o','f','t','w','a','r','e','\\','K','h','r','o','n','o','s','\\', + 'V','u','l','k','a','n','\\','D','r','i','v','e','r','s',0}; + +HRESULT WINAPI DllRegisterServer(void) +{ + WCHAR json_path[MAX_PATH]; + HRSRC rsrc; + const char *data; + DWORD datalen, written, zero = 0; + HANDLE file; + HKEY key; + + /* Create the JSON manifest and registry key to register this ICD with the official Vulkan loader. */ + TRACE("\n"); + rsrc = FindResourceW(hinstance, winevulkan_json_resW, (const WCHAR *)RT_RCDATA); + data = LockResource(LoadResource(hinstance, rsrc)); + datalen = SizeofResource(hinstance, rsrc); + + GetSystemDirectoryW(json_path, ARRAY_SIZE(json_path)); + lstrcatW(json_path, winevulkan_json_pathW); + file = CreateFileW(json_path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + if (file == INVALID_HANDLE_VALUE) + { + ERR("Unable to create JSON manifest.\n"); + return E_UNEXPECTED; + } + WriteFile(file, data, datalen, &written, NULL); + CloseHandle(file); + + if (!RegCreateKeyExW(HKEY_LOCAL_MACHINE, vulkan_driversW, 0, NULL, 0, KEY_SET_VALUE, NULL, &key, NULL)) + { + RegSetValueExW(key, json_path, 0, REG_DWORD, (const BYTE *)&zero, sizeof(zero)); + RegCloseKey(key); + } + return S_OK; +} + +HRESULT WINAPI DllUnregisterServer(void) +{ + WCHAR json_path[MAX_PATH]; + HKEY key; + + /* Remove the JSON manifest and registry key */ + TRACE("\n"); + GetSystemDirectoryW(json_path, ARRAY_SIZE(json_path)); + lstrcatW(json_path, winevulkan_json_pathW); + DeleteFileW(json_path); + + if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, vulkan_driversW, 0, KEY_SET_VALUE, &key) == ERROR_SUCCESS) + { + RegDeleteValueW(key, json_path); + RegCloseKey(key); + } + + return S_OK; +} diff -Nru wine-development-5.5/dlls/winevulkan/winevulkan.rc wine-development-5.6/dlls/winevulkan/winevulkan.rc --- wine-development-5.5/dlls/winevulkan/winevulkan.rc 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/winevulkan/winevulkan.rc 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,31 @@ +/* Wine Vulkan resources + * + * Copyright 2017 Roderick Colenbrander + * + * 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" /* Needed to get PACKAGE_VERSION */ + +#define WINE_FILEDESCRIPTION_STR "Wine Vulkan ICD" +#define WINE_FILENAME_STR "winevulkan.dll" +#define WINE_FILEVERSION_STR PACKAGE_VERSION +#define WINE_PRODUCTVERSION_STR PACKAGE_VERSION +#define WINE_PRODUCTNAME_STR "Wine Vulkan" + +#include "wine/wine_common_ver.rc" + +/* @makedep: winevulkan.json */ +winevulkan_json RCDATA winevulkan.json diff -Nru wine-development-5.5/dlls/winex11.drv/clipboard.c wine-development-5.6/dlls/winex11.drv/clipboard.c --- wine-development-5.5/dlls/winex11.drv/clipboard.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winex11.drv/clipboard.c 2020-04-10 18:54:32.000000000 +0000 @@ -87,7 +87,6 @@ #include "shlobj.h" #include "shellapi.h" #include "shlwapi.h" -#include "wine/library.h" #include "wine/list.h" #include "wine/debug.h" #include "wine/unicode.h" @@ -1986,14 +1985,14 @@ int major = 3, minor = 0; void *handle; - handle = wine_dlopen(SONAME_LIBXFIXES, RTLD_NOW, NULL, 0); + handle = dlopen(SONAME_LIBXFIXES, RTLD_NOW); if (!handle) return; - pXFixesQueryExtension = wine_dlsym(handle, "XFixesQueryExtension", NULL, 0); + pXFixesQueryExtension = dlsym(handle, "XFixesQueryExtension"); if (!pXFixesQueryExtension) return; - pXFixesQueryVersion = wine_dlsym(handle, "XFixesQueryVersion", NULL, 0); + pXFixesQueryVersion = dlsym(handle, "XFixesQueryVersion"); if (!pXFixesQueryVersion) return; - pXFixesSelectSelectionInput = wine_dlsym(handle, "XFixesSelectSelectionInput", NULL, 0); + pXFixesSelectSelectionInput = dlsym(handle, "XFixesSelectSelectionInput"); if (!pXFixesSelectSelectionInput) return; if (!pXFixesQueryExtension(clipboard_display, &event_base, &error_base)) diff -Nru wine-development-5.5/dlls/winex11.drv/mouse.c wine-development-5.6/dlls/winex11.drv/mouse.c --- wine-development-5.5/dlls/winex11.drv/mouse.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winex11.drv/mouse.c 2020-04-10 18:54:32.000000000 +0000 @@ -51,7 +51,6 @@ #include "x11drv.h" #include "wine/server.h" -#include "wine/library.h" #include "wine/unicode.h" #include "wine/debug.h" @@ -151,14 +150,13 @@ void X11DRV_Xcursor_Init(void) { #ifdef SONAME_LIBXCURSOR - xcursor_handle = wine_dlopen(SONAME_LIBXCURSOR, RTLD_NOW, NULL, 0); - if (!xcursor_handle) /* wine_dlopen failed. */ + xcursor_handle = dlopen(SONAME_LIBXCURSOR, RTLD_NOW); + if (!xcursor_handle) { WARN("Xcursor failed to load. Using fallback code.\n"); return; } -#define LOAD_FUNCPTR(f) \ - p##f = wine_dlsym(xcursor_handle, #f, NULL, 0) +#define LOAD_FUNCPTR(f) p##f = dlsym(xcursor_handle, #f) LOAD_FUNCPTR(XcursorImageCreate); LOAD_FUNCPTR(XcursorImageDestroy); @@ -1868,7 +1866,7 @@ { #if defined(SONAME_LIBXI) && defined(HAVE_X11_EXTENSIONS_XINPUT2_H) int event, error; - void *libxi_handle = wine_dlopen( SONAME_LIBXI, RTLD_NOW, NULL, 0 ); + void *libxi_handle = dlopen( SONAME_LIBXI, RTLD_NOW ); if (!libxi_handle) { @@ -1876,7 +1874,7 @@ return; } #define LOAD_FUNCPTR(f) \ - if (!(p##f = wine_dlsym( libxi_handle, #f, NULL, 0))) \ + if (!(p##f = dlsym( libxi_handle, #f))) \ { \ WARN("Failed to load %s.\n", #f); \ return; \ diff -Nru wine-development-5.5/dlls/winex11.drv/opengl.c wine-development-5.6/dlls/winex11.drv/opengl.c --- wine-development-5.5/dlls/winex11.drv/opengl.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winex11.drv/opengl.c 2020-04-10 18:54:32.000000000 +0000 @@ -40,7 +40,6 @@ #include "x11drv.h" #include "xcomposite.h" #include "winternl.h" -#include "wine/library.h" #include "wine/debug.h" #ifdef SONAME_LIBGL @@ -440,12 +439,14 @@ vis = pglXChooseVisual(gdi_display, screen, attribList); if (vis) { #ifdef __i386__ - WORD old_fs = wine_get_fs(); + WORD old_fs, new_fs; + __asm__( "mov %%fs,%0" : "=r" (old_fs) ); /* Create a GLX Context. Without one we can't query GL information */ ctx = pglXCreateContext(gdi_display, vis, None, GL_TRUE); - if (wine_get_fs() != old_fs) + __asm__( "mov %%fs,%0" : "=r" (new_fs) ); + __asm__( "mov %0,%%fs" :: "r" (old_fs) ); + if (old_fs != new_fs) { - wine_set_fs( old_fs ); ERR( "%%fs register corrupted, probably broken ATI driver, disabling OpenGL.\n" ); ERR( "You need to set the \"UseFastTls\" option to \"2\" in your X config file.\n" ); goto done; @@ -543,23 +544,22 @@ static BOOL WINAPI init_opengl( INIT_ONCE *once, void *param, void **context ) { - char buffer[200]; int error_base, event_base; unsigned int i; /* No need to load any other libraries as according to the ABI, libGL should be self-sufficient and include all dependencies */ - opengl_handle = wine_dlopen(SONAME_LIBGL, RTLD_NOW|RTLD_GLOBAL, buffer, sizeof(buffer)); + opengl_handle = dlopen( SONAME_LIBGL, RTLD_NOW | RTLD_GLOBAL ); if (opengl_handle == NULL) { - ERR( "Failed to load libGL: %s\n", buffer ); + ERR( "Failed to load libGL: %s\n", dlerror() ); ERR( "OpenGL support is disabled.\n"); return TRUE; } for (i = 0; i < ARRAY_SIZE( opengl_func_names ); i++) { - if (!(((void **)&opengl_funcs.gl)[i] = wine_dlsym( opengl_handle, opengl_func_names[i], NULL, 0 ))) + if (!(((void **)&opengl_funcs.gl)[i] = dlsym( opengl_handle, opengl_func_names[i] ))) { ERR( "%s not found in libGL, disabling OpenGL.\n", opengl_func_names[i] ); goto failed; @@ -574,7 +574,7 @@ REDIRECT( glGetString ); #undef REDIRECT - pglXGetProcAddressARB = wine_dlsym(opengl_handle, "glXGetProcAddressARB", NULL, 0); + pglXGetProcAddressARB = dlsym(opengl_handle, "glXGetProcAddressARB"); if (pglXGetProcAddressARB == NULL) { ERR("Could not find glXGetProcAddressARB in libGL, disabling OpenGL.\n"); goto failed; @@ -725,7 +725,7 @@ return TRUE; failed: - wine_dlclose(opengl_handle, NULL, 0); + dlclose(opengl_handle); opengl_handle = NULL; return TRUE; } diff -Nru wine-development-5.5/dlls/winex11.drv/vulkan.c wine-development-5.6/dlls/winex11.drv/vulkan.c --- wine-development-5.5/dlls/winex11.drv/vulkan.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winex11.drv/vulkan.c 2020-04-10 18:54:32.000000000 +0000 @@ -31,7 +31,6 @@ #include "wine/debug.h" #include "wine/heap.h" -#include "wine/library.h" #include "x11drv.h" #define VK_NO_PROTOTYPES @@ -85,7 +84,9 @@ static void * (*pvkGetDeviceProcAddr)(VkDevice, const char *); static void * (*pvkGetInstanceProcAddr)(VkInstance, const char *); static VkResult (*pvkGetPhysicalDevicePresentRectanglesKHR)(VkPhysicalDevice, VkSurfaceKHR, uint32_t *, VkRect2D *); +static VkResult (*pvkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *, VkSurfaceCapabilities2KHR *); static VkResult (*pvkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice, VkSurfaceKHR, VkSurfaceCapabilitiesKHR *); +static VkResult (*pvkGetPhysicalDeviceSurfaceFormats2KHR)(VkPhysicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *, uint32_t *, VkSurfaceFormat2KHR *); static VkResult (*pvkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice, VkSurfaceKHR, uint32_t *, VkSurfaceFormatKHR *); static VkResult (*pvkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice, VkSurfaceKHR, uint32_t *, VkPresentModeKHR *); static VkResult (*pvkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice, uint32_t, VkSurfaceKHR, VkBool32 *); @@ -105,32 +106,34 @@ static BOOL WINAPI wine_vk_init(INIT_ONCE *once, void *param, void **context) { - if (!(vulkan_handle = wine_dlopen(SONAME_LIBVULKAN, RTLD_NOW, NULL, 0))) + if (!(vulkan_handle = dlopen(SONAME_LIBVULKAN, RTLD_NOW))) { ERR("Failed to load %s.\n", SONAME_LIBVULKAN); return TRUE; } -#define LOAD_FUNCPTR(f) if (!(p##f = wine_dlsym(vulkan_handle, #f, NULL, 0))) goto fail; -#define LOAD_OPTIONAL_FUNCPTR(f) p##f = wine_dlsym(vulkan_handle, #f, NULL, 0); - LOAD_FUNCPTR(vkCreateInstance) - LOAD_FUNCPTR(vkCreateSwapchainKHR) - LOAD_FUNCPTR(vkCreateXlibSurfaceKHR) - LOAD_FUNCPTR(vkDestroyInstance) - LOAD_FUNCPTR(vkDestroySurfaceKHR) - LOAD_FUNCPTR(vkDestroySwapchainKHR) - LOAD_FUNCPTR(vkEnumerateInstanceExtensionProperties) - LOAD_FUNCPTR(vkGetDeviceProcAddr) - LOAD_FUNCPTR(vkGetInstanceProcAddr) - LOAD_FUNCPTR(vkGetPhysicalDeviceSurfaceCapabilitiesKHR) - LOAD_FUNCPTR(vkGetPhysicalDeviceSurfaceFormatsKHR) - LOAD_FUNCPTR(vkGetPhysicalDeviceSurfacePresentModesKHR) - LOAD_FUNCPTR(vkGetPhysicalDeviceSurfaceSupportKHR) - LOAD_FUNCPTR(vkGetPhysicalDeviceXlibPresentationSupportKHR) - LOAD_FUNCPTR(vkGetSwapchainImagesKHR) - LOAD_FUNCPTR(vkQueuePresentKHR) - LOAD_OPTIONAL_FUNCPTR(vkGetDeviceGroupSurfacePresentModesKHR) - LOAD_OPTIONAL_FUNCPTR(vkGetPhysicalDevicePresentRectanglesKHR) +#define LOAD_FUNCPTR(f) if (!(p##f = dlsym(vulkan_handle, #f))) goto fail +#define LOAD_OPTIONAL_FUNCPTR(f) p##f = dlsym(vulkan_handle, #f) + LOAD_FUNCPTR(vkCreateInstance); + LOAD_FUNCPTR(vkCreateSwapchainKHR); + LOAD_FUNCPTR(vkCreateXlibSurfaceKHR); + LOAD_FUNCPTR(vkDestroyInstance); + LOAD_FUNCPTR(vkDestroySurfaceKHR); + LOAD_FUNCPTR(vkDestroySwapchainKHR); + LOAD_FUNCPTR(vkEnumerateInstanceExtensionProperties); + LOAD_FUNCPTR(vkGetDeviceProcAddr); + LOAD_FUNCPTR(vkGetInstanceProcAddr); + LOAD_OPTIONAL_FUNCPTR(vkGetPhysicalDeviceSurfaceCapabilities2KHR); + LOAD_FUNCPTR(vkGetPhysicalDeviceSurfaceCapabilitiesKHR); + LOAD_OPTIONAL_FUNCPTR(vkGetPhysicalDeviceSurfaceFormats2KHR); + LOAD_FUNCPTR(vkGetPhysicalDeviceSurfaceFormatsKHR); + LOAD_FUNCPTR(vkGetPhysicalDeviceSurfacePresentModesKHR); + LOAD_FUNCPTR(vkGetPhysicalDeviceSurfaceSupportKHR); + LOAD_FUNCPTR(vkGetPhysicalDeviceXlibPresentationSupportKHR); + LOAD_FUNCPTR(vkGetSwapchainImagesKHR); + LOAD_FUNCPTR(vkQueuePresentKHR); + LOAD_OPTIONAL_FUNCPTR(vkGetDeviceGroupSurfacePresentModesKHR); + LOAD_OPTIONAL_FUNCPTR(vkGetPhysicalDevicePresentRectanglesKHR); #undef LOAD_FUNCPTR #undef LOAD_OPTIONAL_FUNCPTR @@ -139,7 +142,7 @@ return TRUE; fail: - wine_dlclose(vulkan_handle, NULL, 0); + dlclose(vulkan_handle); vulkan_handle = NULL; return TRUE; } @@ -456,6 +459,25 @@ return pvkGetPhysicalDevicePresentRectanglesKHR(phys_dev, x11_surface->surface, count, rects); } +static VkResult X11DRV_vkGetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice phys_dev, + const VkPhysicalDeviceSurfaceInfo2KHR *surface_info, VkSurfaceCapabilities2KHR *capabilities) +{ + VkPhysicalDeviceSurfaceInfo2KHR surface_info_host; + TRACE("%p, %p, %p\n", phys_dev, surface_info, capabilities); + + surface_info_host = *surface_info; + surface_info_host.surface = surface_from_handle(surface_info->surface)->surface; + + if (pvkGetPhysicalDeviceSurfaceCapabilities2KHR) + return pvkGetPhysicalDeviceSurfaceCapabilities2KHR(phys_dev, &surface_info_host, capabilities); + + /* Until the loader version exporting this function is common, emulate it using the older non-2 version. */ + if (surface_info->pNext || capabilities->pNext) + FIXME("Emulating vkGetPhysicalDeviceSurfaceCapabilities2KHR with vkGetPhysicalDeviceSurfaceCapabilitiesKHR, pNext is ignored.\n"); + + return pvkGetPhysicalDeviceSurfaceCapabilitiesKHR(phys_dev, surface_info_host.surface, &capabilities->surfaceCapabilities); +} + static VkResult X11DRV_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice phys_dev, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR *capabilities) { @@ -466,6 +488,41 @@ return pvkGetPhysicalDeviceSurfaceCapabilitiesKHR(phys_dev, x11_surface->surface, capabilities); } +static VkResult X11DRV_vkGetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice phys_dev, + const VkPhysicalDeviceSurfaceInfo2KHR *surface_info, uint32_t *count, VkSurfaceFormat2KHR *formats) +{ + VkPhysicalDeviceSurfaceInfo2KHR surface_info_host = *surface_info; + VkSurfaceFormatKHR *formats_host; + uint32_t i; + VkResult result; + TRACE("%p, %p, %p, %p\n", phys_dev, surface_info, count, formats); + + surface_info_host = *surface_info; + surface_info_host.surface = surface_from_handle(surface_info->surface)->surface; + + if (pvkGetPhysicalDeviceSurfaceFormats2KHR) + return pvkGetPhysicalDeviceSurfaceFormats2KHR(phys_dev, &surface_info_host, count, formats); + + /* Until the loader version exporting this function is common, emulate it using the older non-2 version. */ + if (surface_info->pNext) + FIXME("Emulating vkGetPhysicalDeviceSurfaceFormats2KHR with vkGetPhysicalDeviceSurfaceFormatsKHR, pNext is ignored.\n"); + + if (!formats) + return pvkGetPhysicalDeviceSurfaceFormatsKHR(phys_dev, surface_info_host.surface, count, NULL); + + formats_host = heap_calloc(*count, sizeof(*formats_host)); + if (!formats_host) return VK_ERROR_OUT_OF_HOST_MEMORY; + result = pvkGetPhysicalDeviceSurfaceFormatsKHR(phys_dev, surface_info_host.surface, count, formats_host); + if (result == VK_SUCCESS || result == VK_INCOMPLETE) + { + for (i = 0; i < *count; i++) + formats[i].surfaceFormat = formats_host[i]; + } + + heap_free(formats_host); + return result; +} + static VkResult X11DRV_vkGetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice phys_dev, VkSurfaceKHR surface, uint32_t *count, VkSurfaceFormatKHR *formats) { @@ -557,7 +614,9 @@ X11DRV_vkGetDeviceProcAddr, X11DRV_vkGetInstanceProcAddr, X11DRV_vkGetPhysicalDevicePresentRectanglesKHR, + X11DRV_vkGetPhysicalDeviceSurfaceCapabilities2KHR, X11DRV_vkGetPhysicalDeviceSurfaceCapabilitiesKHR, + X11DRV_vkGetPhysicalDeviceSurfaceFormats2KHR, X11DRV_vkGetPhysicalDeviceSurfaceFormatsKHR, X11DRV_vkGetPhysicalDeviceSurfacePresentModesKHR, X11DRV_vkGetPhysicalDeviceSurfaceSupportKHR, diff -Nru wine-development-5.5/dlls/winex11.drv/wintab.c wine-development-5.6/dlls/winex11.drv/wintab.c --- wine-development-5.5/dlls/winex11.drv/wintab.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winex11.drv/wintab.c 2020-04-10 18:54:32.000000000 +0000 @@ -28,7 +28,6 @@ #include "winbase.h" #include "winnls.h" #include "x11drv.h" -#include "wine/library.h" #include "wine/unicode.h" #include "wine/debug.h" #include "wintab.h" @@ -327,18 +326,18 @@ static INT X11DRV_XInput_Init(void) { - xinput_handle = wine_dlopen(SONAME_LIBXI, RTLD_NOW, NULL, 0); + xinput_handle = dlopen(SONAME_LIBXI, RTLD_NOW); if (xinput_handle) { -#define LOAD_FUNCPTR(f) if((p##f = wine_dlsym(xinput_handle, #f, NULL, 0)) == NULL) goto sym_not_found; - LOAD_FUNCPTR(XListInputDevices) - LOAD_FUNCPTR(XFreeDeviceList) - LOAD_FUNCPTR(XOpenDevice) - LOAD_FUNCPTR(XGetDeviceButtonMapping) - LOAD_FUNCPTR(XCloseDevice) - LOAD_FUNCPTR(XSelectExtensionEvent) - LOAD_FUNCPTR(XQueryDeviceState) - LOAD_FUNCPTR(XFreeDeviceState) +#define LOAD_FUNCPTR(f) if((p##f = dlsym(xinput_handle, #f)) == NULL) goto sym_not_found + LOAD_FUNCPTR(XListInputDevices); + LOAD_FUNCPTR(XFreeDeviceList); + LOAD_FUNCPTR(XOpenDevice); + LOAD_FUNCPTR(XGetDeviceButtonMapping); + LOAD_FUNCPTR(XCloseDevice); + LOAD_FUNCPTR(XSelectExtensionEvent); + LOAD_FUNCPTR(XQueryDeviceState); + LOAD_FUNCPTR(XFreeDeviceState); #undef LOAD_FUNCPTR return 1; } diff -Nru wine-development-5.5/dlls/winex11.drv/x11drv_main.c wine-development-5.6/dlls/winex11.drv/x11drv_main.c --- wine-development-5.5/dlls/winex11.drv/x11drv_main.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winex11.drv/x11drv_main.c 2020-04-10 18:54:32.000000000 +0000 @@ -53,7 +53,6 @@ #include "wine/server.h" #include "wine/unicode.h" #include "wine/debug.h" -#include "wine/library.h" #include "wine/list.h" #include "wine/heap.h" @@ -461,7 +460,7 @@ static void X11DRV_XComposite_Init(void) { - void *xcomposite_handle = wine_dlopen(SONAME_LIBXCOMPOSITE, RTLD_NOW, NULL, 0); + void *xcomposite_handle = dlopen(SONAME_LIBXCOMPOSITE, RTLD_NOW); if (!xcomposite_handle) { TRACE("Unable to open %s, XComposite disabled\n", SONAME_LIBXCOMPOSITE); @@ -470,23 +469,22 @@ } #define LOAD_FUNCPTR(f) \ - if((p##f = wine_dlsym(xcomposite_handle, #f, NULL, 0)) == NULL) \ - goto sym_not_found; - LOAD_FUNCPTR(XCompositeQueryExtension) - LOAD_FUNCPTR(XCompositeQueryVersion) - LOAD_FUNCPTR(XCompositeVersion) - LOAD_FUNCPTR(XCompositeRedirectWindow) - LOAD_FUNCPTR(XCompositeRedirectSubwindows) - LOAD_FUNCPTR(XCompositeUnredirectWindow) - LOAD_FUNCPTR(XCompositeUnredirectSubwindows) - LOAD_FUNCPTR(XCompositeCreateRegionFromBorderClip) - LOAD_FUNCPTR(XCompositeNameWindowPixmap) + if((p##f = dlsym(xcomposite_handle, #f)) == NULL) goto sym_not_found + LOAD_FUNCPTR(XCompositeQueryExtension); + LOAD_FUNCPTR(XCompositeQueryVersion); + LOAD_FUNCPTR(XCompositeVersion); + LOAD_FUNCPTR(XCompositeRedirectWindow); + LOAD_FUNCPTR(XCompositeRedirectSubwindows); + LOAD_FUNCPTR(XCompositeUnredirectWindow); + LOAD_FUNCPTR(XCompositeUnredirectSubwindows); + LOAD_FUNCPTR(XCompositeCreateRegionFromBorderClip); + LOAD_FUNCPTR(XCompositeNameWindowPixmap); #undef LOAD_FUNCPTR if(!pXCompositeQueryExtension(gdi_display, &xcomp_event_base, &xcomp_error_base)) { TRACE("XComposite extension could not be queried; disabled\n"); - wine_dlclose(xcomposite_handle, NULL, 0); + dlclose(xcomposite_handle); xcomposite_handle = NULL; usexcomposite = FALSE; return; @@ -496,7 +494,7 @@ sym_not_found: TRACE("Unable to load function pointers from %s, XComposite disabled\n", SONAME_LIBXCOMPOSITE); - wine_dlclose(xcomposite_handle, NULL, 0); + dlclose(xcomposite_handle); xcomposite_handle = NULL; usexcomposite = FALSE; } @@ -560,19 +558,18 @@ */ static BOOL process_attach(void) { - char error[1024]; Display *display; - void *libx11 = wine_dlopen( SONAME_LIBX11, RTLD_NOW|RTLD_GLOBAL, error, sizeof(error) ); + void *libx11 = dlopen( SONAME_LIBX11, RTLD_NOW|RTLD_GLOBAL ); if (!libx11) { - ERR( "failed to load %s: %s\n", SONAME_LIBX11, error ); + ERR( "failed to load %s: %s\n", SONAME_LIBX11, dlerror() ); return FALSE; } - pXGetEventData = wine_dlsym( libx11, "XGetEventData", NULL, 0 ); - pXFreeEventData = wine_dlsym( libx11, "XFreeEventData", NULL, 0 ); + pXGetEventData = dlsym( libx11, "XGetEventData" ); + pXFreeEventData = dlsym( libx11, "XFreeEventData" ); #ifdef SONAME_LIBXEXT - wine_dlopen( SONAME_LIBXEXT, RTLD_NOW|RTLD_GLOBAL, NULL, 0 ); + dlopen( SONAME_LIBXEXT, RTLD_NOW|RTLD_GLOBAL ); #endif setup_options(); diff -Nru wine-development-5.5/dlls/winex11.drv/xinerama.c wine-development-5.6/dlls/winex11.drv/xinerama.c --- wine-development-5.5/dlls/winex11.drv/xinerama.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winex11.drv/xinerama.c 2020-04-10 18:54:32.000000000 +0000 @@ -27,7 +27,6 @@ #ifdef HAVE_X11_EXTENSIONS_XINERAMA_H #include #endif -#include "wine/library.h" #include "x11drv.h" #include "wine/debug.h" #include "wine/heap.h" @@ -86,14 +85,14 @@ { void *handle; - if (!(handle = wine_dlopen(SONAME_LIBXINERAMA, RTLD_NOW, NULL, 0))) + if (!(handle = dlopen(SONAME_LIBXINERAMA, RTLD_NOW))) { WARN( "failed to open %s\n", SONAME_LIBXINERAMA ); return; } - pXineramaQueryExtension = wine_dlsym( handle, "XineramaQueryExtension", NULL, 0 ); + pXineramaQueryExtension = dlsym( handle, "XineramaQueryExtension" ); if (!pXineramaQueryExtension) WARN( "XineramaQueryScreens not found\n" ); - pXineramaQueryScreens = wine_dlsym( handle, "XineramaQueryScreens", NULL, 0 ); + pXineramaQueryScreens = dlsym( handle, "XineramaQueryScreens" ); if (!pXineramaQueryScreens) WARN( "XineramaQueryScreens not found\n" ); } diff -Nru wine-development-5.5/dlls/winex11.drv/xrandr.c wine-development-5.6/dlls/winex11.drv/xrandr.c --- wine-development-5.5/dlls/winex11.drv/xrandr.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winex11.drv/xrandr.c 2020-04-10 18:54:32.000000000 +0000 @@ -36,7 +36,6 @@ #include "x11drv.h" #include "wine/heap.h" -#include "wine/library.h" #include "wine/unicode.h" static void *xrandr_handle; @@ -60,6 +59,7 @@ MAKE_FUNCPTR(XRRGetCrtcInfo) MAKE_FUNCPTR(XRRGetOutputInfo) MAKE_FUNCPTR(XRRGetScreenResources) +MAKE_FUNCPTR(XRRGetScreenSizeRange) MAKE_FUNCPTR(XRRSetCrtcConfig) MAKE_FUNCPTR(XRRSetScreenSize) static typeof(XRRGetScreenResources) *pXRRGetScreenResourcesCurrent; @@ -87,45 +87,45 @@ { int r = 0; - if (wine_dlopen(SONAME_LIBXRENDER, RTLD_NOW|RTLD_GLOBAL, NULL, 0) && - (xrandr_handle = wine_dlopen(SONAME_LIBXRANDR, RTLD_NOW, NULL, 0))) + if (dlopen(SONAME_LIBXRENDER, RTLD_NOW|RTLD_GLOBAL) && + (xrandr_handle = dlopen(SONAME_LIBXRANDR, RTLD_NOW))) { #define LOAD_FUNCPTR(f) \ - if((p##f = wine_dlsym(xrandr_handle, #f, NULL, 0)) == NULL) \ - goto sym_not_found; + if((p##f = dlsym(xrandr_handle, #f)) == NULL) goto sym_not_found - LOAD_FUNCPTR(XRRConfigCurrentConfiguration) - LOAD_FUNCPTR(XRRConfigCurrentRate) - LOAD_FUNCPTR(XRRFreeScreenConfigInfo) - LOAD_FUNCPTR(XRRGetScreenInfo) - LOAD_FUNCPTR(XRRQueryExtension) - LOAD_FUNCPTR(XRRQueryVersion) - LOAD_FUNCPTR(XRRRates) - LOAD_FUNCPTR(XRRSetScreenConfig) - LOAD_FUNCPTR(XRRSetScreenConfigAndRate) - LOAD_FUNCPTR(XRRSizes) + LOAD_FUNCPTR(XRRConfigCurrentConfiguration); + LOAD_FUNCPTR(XRRConfigCurrentRate); + LOAD_FUNCPTR(XRRFreeScreenConfigInfo); + LOAD_FUNCPTR(XRRGetScreenInfo); + LOAD_FUNCPTR(XRRQueryExtension); + LOAD_FUNCPTR(XRRQueryVersion); + LOAD_FUNCPTR(XRRRates); + LOAD_FUNCPTR(XRRSetScreenConfig); + LOAD_FUNCPTR(XRRSetScreenConfigAndRate); + LOAD_FUNCPTR(XRRSizes); r = 1; #ifdef HAVE_XRRGETSCREENRESOURCES - LOAD_FUNCPTR(XRRFreeCrtcInfo) - LOAD_FUNCPTR(XRRFreeOutputInfo) - LOAD_FUNCPTR(XRRFreeScreenResources) - LOAD_FUNCPTR(XRRGetCrtcInfo) - LOAD_FUNCPTR(XRRGetOutputInfo) - LOAD_FUNCPTR(XRRGetScreenResources) - LOAD_FUNCPTR(XRRSetCrtcConfig) - LOAD_FUNCPTR(XRRSetScreenSize) + LOAD_FUNCPTR(XRRFreeCrtcInfo); + LOAD_FUNCPTR(XRRFreeOutputInfo); + LOAD_FUNCPTR(XRRFreeScreenResources); + LOAD_FUNCPTR(XRRGetCrtcInfo); + LOAD_FUNCPTR(XRRGetOutputInfo); + LOAD_FUNCPTR(XRRGetScreenResources); + LOAD_FUNCPTR(XRRGetScreenSizeRange); + LOAD_FUNCPTR(XRRSetCrtcConfig); + LOAD_FUNCPTR(XRRSetScreenSize); r = 2; #endif #ifdef HAVE_XRRGETPROVIDERRESOURCES - LOAD_FUNCPTR(XRRSelectInput) - LOAD_FUNCPTR(XRRGetOutputPrimary) - LOAD_FUNCPTR(XRRGetProviderResources) - LOAD_FUNCPTR(XRRFreeProviderResources) - LOAD_FUNCPTR(XRRGetProviderInfo) - LOAD_FUNCPTR(XRRFreeProviderInfo) + LOAD_FUNCPTR(XRRSelectInput); + LOAD_FUNCPTR(XRRGetOutputPrimary); + LOAD_FUNCPTR(XRRGetProviderResources); + LOAD_FUNCPTR(XRRFreeProviderResources); + LOAD_FUNCPTR(XRRGetProviderInfo); + LOAD_FUNCPTR(XRRFreeProviderInfo); r = 4; #endif @@ -361,9 +361,13 @@ static void get_screen_size( XRRScreenResources *resources, unsigned int *width, unsigned int *height ) { + int min_width = 0, min_height = 0, max_width, max_height; XRRCrtcInfo *crtc_info; int i; - *width = *height = 0; + + pXRRGetScreenSizeRange( gdi_display, root_window, &min_width, &min_height, &max_width, &max_height ); + *width = min_width; + *height = min_height; for (i = 0; i < resources->ncrtc; ++i) { @@ -1114,7 +1118,7 @@ if (ret >= 2 && (major > 1 || (major == 1 && minor >= 2))) { if (major > 1 || (major == 1 && minor >= 3)) - pXRRGetScreenResourcesCurrent = wine_dlsym( xrandr_handle, "XRRGetScreenResourcesCurrent", NULL, 0 ); + pXRRGetScreenResourcesCurrent = dlsym( xrandr_handle, "XRRGetScreenResourcesCurrent" ); if (!pXRRGetScreenResourcesCurrent) pXRRGetScreenResourcesCurrent = pXRRGetScreenResources; } diff -Nru wine-development-5.5/dlls/winex11.drv/xrender.c wine-development-5.6/dlls/winex11.drv/xrender.c --- wine-development-5.5/dlls/winex11.drv/xrender.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winex11.drv/xrender.c 2020-04-10 18:54:32.000000000 +0000 @@ -34,7 +34,6 @@ #include "winbase.h" #include "x11drv.h" #include "winternl.h" -#include "wine/library.h" #include "wine/unicode.h" #include "wine/debug.h" @@ -326,10 +325,10 @@ int event_base, i; if (!client_side_with_render) return NULL; - if (!(xrender_handle = wine_dlopen(SONAME_LIBXRENDER, RTLD_NOW, NULL, 0))) return NULL; + if (!(xrender_handle = dlopen(SONAME_LIBXRENDER, RTLD_NOW))) return NULL; -#define LOAD_FUNCPTR(f) if((p##f = wine_dlsym(xrender_handle, #f, NULL, 0)) == NULL) return NULL -#define LOAD_OPTIONAL_FUNCPTR(f) p##f = wine_dlsym(xrender_handle, #f, NULL, 0) +#define LOAD_FUNCPTR(f) if((p##f = dlsym(xrender_handle, #f)) == NULL) return NULL +#define LOAD_OPTIONAL_FUNCPTR(f) p##f = dlsym(xrender_handle, #f) LOAD_FUNCPTR(XRenderAddGlyphs); LOAD_FUNCPTR(XRenderChangePicture); LOAD_FUNCPTR(XRenderComposite); diff -Nru wine-development-5.5/dlls/winex11.drv/xvidmode.c wine-development-5.6/dlls/winex11.drv/xvidmode.c --- wine-development-5.5/dlls/winex11.drv/xvidmode.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winex11.drv/xvidmode.c 2020-04-10 18:54:32.000000000 +0000 @@ -38,7 +38,6 @@ #include "wingdi.h" #include "wine/debug.h" #include "wine/heap.h" -#include "wine/library.h" WINE_DEFAULT_DEBUG_CHANNEL(xvidmode); @@ -160,7 +159,7 @@ if (xf86vm_major) return; /* already initialized? */ - xvidmode_handle = wine_dlopen(SONAME_LIBXXF86VM, RTLD_NOW, NULL, 0); + xvidmode_handle = dlopen(SONAME_LIBXXF86VM, RTLD_NOW); if (!xvidmode_handle) { TRACE("Unable to open %s, XVidMode disabled\n", SONAME_LIBXXF86VM); @@ -169,23 +168,22 @@ } #define LOAD_FUNCPTR(f) \ - if((p##f = wine_dlsym(xvidmode_handle, #f, NULL, 0)) == NULL) \ - goto sym_not_found; - LOAD_FUNCPTR(XF86VidModeGetAllModeLines) - LOAD_FUNCPTR(XF86VidModeGetModeLine) - LOAD_FUNCPTR(XF86VidModeLockModeSwitch) - LOAD_FUNCPTR(XF86VidModeQueryExtension) - LOAD_FUNCPTR(XF86VidModeQueryVersion) - LOAD_FUNCPTR(XF86VidModeSetViewPort) - LOAD_FUNCPTR(XF86VidModeSwitchToMode) + if((p##f = dlsym(xvidmode_handle, #f)) == NULL) goto sym_not_found + LOAD_FUNCPTR(XF86VidModeGetAllModeLines); + LOAD_FUNCPTR(XF86VidModeGetModeLine); + LOAD_FUNCPTR(XF86VidModeLockModeSwitch); + LOAD_FUNCPTR(XF86VidModeQueryExtension); + LOAD_FUNCPTR(XF86VidModeQueryVersion); + LOAD_FUNCPTR(XF86VidModeSetViewPort); + LOAD_FUNCPTR(XF86VidModeSwitchToMode); #ifdef X_XF86VidModeSetGamma - LOAD_FUNCPTR(XF86VidModeGetGamma) - LOAD_FUNCPTR(XF86VidModeSetGamma) + LOAD_FUNCPTR(XF86VidModeGetGamma); + LOAD_FUNCPTR(XF86VidModeSetGamma); #endif #ifdef X_XF86VidModeSetGammaRamp - LOAD_FUNCPTR(XF86VidModeGetGammaRamp) - LOAD_FUNCPTR(XF86VidModeGetGammaRampSize) - LOAD_FUNCPTR(XF86VidModeSetGammaRamp) + LOAD_FUNCPTR(XF86VidModeGetGammaRamp); + LOAD_FUNCPTR(XF86VidModeGetGammaRampSize); + LOAD_FUNCPTR(XF86VidModeSetGammaRamp); #endif #undef LOAD_FUNCPTR @@ -242,7 +240,7 @@ sym_not_found: TRACE("Unable to load function pointers from %s, XVidMode disabled\n", SONAME_LIBXXF86VM); - wine_dlclose(xvidmode_handle, NULL, 0); + dlclose(xvidmode_handle); xvidmode_handle = NULL; usexvidmode = FALSE; } diff -Nru wine-development-5.5/dlls/wing.dll16/Makefile.in wine-development-5.6/dlls/wing.dll16/Makefile.in --- wine-development-5.5/dlls/wing.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wing.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = wing.dll16 IMPORTS = gdi32 -EXTRADLLFLAGS = -m16 -mno-cygwin +EXTRADLLFLAGS = -m16 C_SRCS = wing.c diff -Nru wine-development-5.5/dlls/winhttp/cookie.c wine-development-5.6/dlls/winhttp/cookie.c --- wine-development-5.5/dlls/winhttp/cookie.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winhttp/cookie.c 2020-04-10 18:54:32.000000000 +0000 @@ -319,10 +319,11 @@ return ret; } -BOOL add_cookie_headers( struct request *request ) +DWORD add_cookie_headers( struct request *request ) { struct list *domain_cursor; struct session *session = request->connect->session; + DWORD ret = ERROR_SUCCESS; EnterCriticalSection( &session->cs ); @@ -351,7 +352,7 @@ if (!(header = heap_alloc( (len + 1) * sizeof(WCHAR) ))) { LeaveCriticalSection( &session->cs ); - return FALSE; + return ERROR_OUTOFMEMORY; } memcpy( header, cookieW, len_cookie * sizeof(WCHAR) ); @@ -363,8 +364,8 @@ } TRACE("%s\n", debugstr_w(header)); - add_request_headers( request, header, len, - WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON ); + ret = add_request_headers( request, header, len, + WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON ); heap_free( header ); } } @@ -372,5 +373,5 @@ } LeaveCriticalSection( &session->cs ); - return TRUE; + return ret; } diff -Nru wine-development-5.5/dlls/winhttp/net.c wine-development-5.6/dlls/winhttp/net.c --- wine-development-5.5/dlls/winhttp/net.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winhttp/net.c 2020-04-10 18:54:32.000000000 +0000 @@ -176,23 +176,24 @@ ioctlsocket( conn->socket, FIONBIO, &state ); } -struct netconn *netconn_create( struct hostdata *host, const struct sockaddr_storage *sockaddr, int timeout ) +DWORD netconn_create( struct hostdata *host, const struct sockaddr_storage *sockaddr, int timeout, + struct netconn **ret_conn ) { struct netconn *conn; unsigned int addr_len; - BOOL ret = FALSE; + DWORD ret; winsock_init(); - conn = heap_alloc_zero(sizeof(*conn)); - if (!conn) return NULL; + if (!(conn = heap_alloc_zero( sizeof(*conn) ))) return ERROR_OUTOFMEMORY; conn->host = host; conn->sockaddr = *sockaddr; if ((conn->socket = socket( sockaddr->ss_family, SOCK_STREAM, 0 )) == -1) { - WARN("unable to create socket (%u)\n", WSAGetLastError()); - heap_free(conn); - return NULL; + ret = WSAGetLastError(); + WARN("unable to create socket (%u)\n", ret); + heap_free( conn ); + return ret; } switch (conn->sockaddr.ss_family) @@ -206,16 +207,16 @@ default: ERR( "unhandled family %u\n", conn->sockaddr.ss_family ); heap_free( conn ); - return NULL; + return ERROR_INVALID_PARAMETER; } if (timeout > 0) set_blocking( conn, FALSE ); - if (!connect( conn->socket, (const struct sockaddr *)&conn->sockaddr, addr_len )) ret = TRUE; + if (!connect( conn->socket, (const struct sockaddr *)&conn->sockaddr, addr_len )) ret = ERROR_SUCCESS; else { - DWORD err = WSAGetLastError(); - if (err == WSAEWOULDBLOCK || err == WSAEINPROGRESS) + ret = WSAGetLastError(); + if (ret == WSAEWOULDBLOCK || ret == WSAEINPROGRESS) { FD_SET set; TIMEVAL timeval = { 0, timeout * 1000 }; @@ -223,21 +224,23 @@ FD_ZERO( &set ); FD_SET( conn->socket, &set ); - if ((res = select( conn->socket + 1, NULL, &set, NULL, &timeval )) > 0) ret = TRUE; - else if (!res) SetLastError( ERROR_WINHTTP_TIMEOUT ); + if ((res = select( conn->socket + 1, NULL, &set, NULL, &timeval )) > 0) ret = ERROR_SUCCESS; + else if (!res) ret = ERROR_WINHTTP_TIMEOUT; } } if (timeout > 0) set_blocking( conn, TRUE ); - if (!ret) + if (ret) { - WARN("unable to connect to host (%u)\n", GetLastError()); + WARN("unable to connect to host (%u)\n", ret); closesocket( conn->socket ); heap_free( conn ); - return NULL; + return ret; } - return conn; + + *ret_conn = conn; + return ERROR_SUCCESS; } void netconn_close( struct netconn *conn ) @@ -254,8 +257,8 @@ heap_free(conn); } -BOOL netconn_secure_connect( struct netconn *conn, WCHAR *hostname, DWORD security_flags, CredHandle *cred_handle, - BOOL check_revocation) +DWORD netconn_secure_connect( struct netconn *conn, WCHAR *hostname, DWORD security_flags, CredHandle *cred_handle, + BOOL check_revocation ) { SecBuffer out_buf = {0, SECBUFFER_TOKEN, NULL}, in_bufs[2] = {{0, SECBUFFER_TOKEN}, {0, SECBUFFER_EMPTY}}; SecBufferDesc out_desc = {SECBUFFER_VERSION, 1, &out_buf}, in_desc = {SECBUFFER_VERSION, 2, in_bufs}; @@ -271,9 +274,7 @@ const DWORD isc_req_flags = ISC_REQ_ALLOCATE_MEMORY|ISC_REQ_USE_SESSION_KEY|ISC_REQ_CONFIDENTIALITY |ISC_REQ_SEQUENCE_DETECT|ISC_REQ_REPLAY_DETECT|ISC_REQ_MANUAL_CRED_VALIDATION; - read_buf = heap_alloc(read_buf_size); - if(!read_buf) - return FALSE; + if (!(read_buf = heap_alloc( read_buf_size ))) return ERROR_OUTOFMEMORY; status = InitializeSecurityContextW(cred_handle, NULL, hostname, isc_req_flags, 0, 0, NULL, 0, &ctx, &out_desc, &attrs, NULL); @@ -364,7 +365,7 @@ conn->ssl_buf = heap_alloc(conn->ssl_sizes.cbHeader + conn->ssl_sizes.cbMaximumMessage + conn->ssl_sizes.cbTrailer); if(!conn->ssl_buf) { - res = GetLastError(); + res = ERROR_OUTOFMEMORY; break; } } @@ -377,18 +378,17 @@ heap_free(conn->ssl_buf); conn->ssl_buf = NULL; DeleteSecurityContext(&ctx); - SetLastError(res ? res : ERROR_WINHTTP_SECURE_CHANNEL_ERROR); - return FALSE; + return ERROR_WINHTTP_SECURE_CHANNEL_ERROR; } TRACE("established SSL connection\n"); conn->secure = TRUE; conn->ssl_ctx = ctx; - return TRUE; + return ERROR_SUCCESS; } -static BOOL send_ssl_chunk(struct netconn *conn, const void *msg, size_t size) +static DWORD send_ssl_chunk( struct netconn *conn, const void *msg, size_t size ) { SecBuffer bufs[4] = { {conn->ssl_sizes.cbHeader, SECBUFFER_STREAM_HEADER, conn->ssl_buf}, @@ -399,46 +399,50 @@ SecBufferDesc buf_desc = {SECBUFFER_VERSION, ARRAY_SIZE(bufs), bufs}; SECURITY_STATUS res; - memcpy(bufs[1].pvBuffer, msg, size); - res = EncryptMessage(&conn->ssl_ctx, 0, &buf_desc, 0); - if(res != SEC_E_OK) { - WARN("EncryptMessage failed\n"); - return FALSE; + memcpy( bufs[1].pvBuffer, msg, size ); + if ((res = EncryptMessage(&conn->ssl_ctx, 0, &buf_desc, 0)) != SEC_E_OK) + { + WARN("EncryptMessage failed: %08x\n", res); + return res; } - if(sock_send(conn->socket, conn->ssl_buf, bufs[0].cbBuffer+bufs[1].cbBuffer+bufs[2].cbBuffer, 0) < 1) { + if (sock_send( conn->socket, conn->ssl_buf, bufs[0].cbBuffer + bufs[1].cbBuffer + bufs[2].cbBuffer, 0 ) < 1) + { WARN("send failed\n"); - return FALSE; + return WSAGetLastError(); } - return TRUE; + return ERROR_SUCCESS; } -BOOL netconn_send( struct netconn *conn, const void *msg, size_t len, int *sent ) +DWORD netconn_send( struct netconn *conn, const void *msg, size_t len, int *sent ) { if (conn->secure) { const BYTE *ptr = msg; size_t chunk_size; + DWORD res; *sent = 0; - - while(len) { - chunk_size = min(len, conn->ssl_sizes.cbMaximumMessage); - if(!send_ssl_chunk(conn, ptr, chunk_size)) - return FALSE; + while (len) + { + chunk_size = min( len, conn->ssl_sizes.cbMaximumMessage ); + if ((res = send_ssl_chunk( conn, ptr, chunk_size ))) + return res; *sent += chunk_size; ptr += chunk_size; len -= chunk_size; } - return TRUE; + return ERROR_SUCCESS; } - return ((*sent = sock_send( conn->socket, msg, len, 0 )) != -1); + + if ((*sent = sock_send( conn->socket, msg, len, 0 )) < 0) return WSAGetLastError(); + return ERROR_SUCCESS; } -static BOOL read_ssl_chunk(struct netconn *conn, void *buf, SIZE_T buf_size, SIZE_T *ret_size, BOOL *eof) +static DWORD read_ssl_chunk( struct netconn *conn, void *buf, SIZE_T buf_size, SIZE_T *ret_size, BOOL *eof ) { const SIZE_T ssl_buf_size = conn->ssl_sizes.cbHeader+conn->ssl_sizes.cbMaximumMessage+conn->ssl_sizes.cbTrailer; SecBuffer bufs[4]; @@ -456,13 +460,13 @@ heap_free(conn->extra_buf); conn->extra_buf = NULL; }else { - buf_len = sock_recv(conn->socket, conn->ssl_buf+conn->extra_len, ssl_buf_size-conn->extra_len, 0); - if(buf_len < 0) - return FALSE; + if ((buf_len = sock_recv( conn->socket, conn->ssl_buf + conn->extra_len, ssl_buf_size - conn->extra_len, 0)) < 0) + return WSAGetLastError(); - if(!buf_len) { + if (!buf_len) + { *eof = TRUE; - return TRUE; + return ERROR_SUCCESS; } } @@ -475,28 +479,34 @@ bufs[0].cbBuffer = buf_len; bufs[0].pvBuffer = conn->ssl_buf; - res = DecryptMessage(&conn->ssl_ctx, &buf_desc, 0, NULL); - switch(res) { + switch ((res = DecryptMessage( &conn->ssl_ctx, &buf_desc, 0, NULL ))) + { case SEC_E_OK: break; + + case SEC_I_RENEGOTIATE: + TRACE("renegotiate\n"); + return ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED; + case SEC_I_CONTEXT_EXPIRED: TRACE("context expired\n"); *eof = TRUE; - return TRUE; + return ERROR_SUCCESS; + case SEC_E_INCOMPLETE_MESSAGE: assert(buf_len < ssl_buf_size); - size = sock_recv(conn->socket, conn->ssl_buf+buf_len, ssl_buf_size-buf_len, 0); - if(size < 1) - return FALSE; + if ((size = sock_recv( conn->socket, conn->ssl_buf + buf_len, ssl_buf_size - buf_len, 0 )) < 1) + return SEC_E_INCOMPLETE_MESSAGE; buf_len += size; continue; + default: WARN("failed: %08x\n", res); - return FALSE; + return res; } - } while(res != SEC_E_OK); + } while (res != SEC_E_OK); for(i = 0; i < ARRAY_SIZE(bufs); i++) { if(bufs[i].BufferType == SECBUFFER_DATA) { @@ -506,7 +516,7 @@ assert(!conn->peek_len); conn->peek_msg_mem = conn->peek_msg = heap_alloc(bufs[i].cbBuffer - size); if(!conn->peek_msg) - return FALSE; + return ERROR_OUTOFMEMORY; conn->peek_len = bufs[i].cbBuffer-size; memcpy(conn->peek_msg, (char*)bufs[i].pvBuffer+size, conn->peek_len); } @@ -519,25 +529,26 @@ if(bufs[i].BufferType == SECBUFFER_EXTRA) { conn->extra_buf = heap_alloc(bufs[i].cbBuffer); if(!conn->extra_buf) - return FALSE; + return ERROR_OUTOFMEMORY; conn->extra_len = bufs[i].cbBuffer; memcpy(conn->extra_buf, bufs[i].pvBuffer, conn->extra_len); } } - return TRUE; + return ERROR_SUCCESS; } -BOOL netconn_recv( struct netconn *conn, void *buf, size_t len, int flags, int *recvd ) +DWORD netconn_recv( struct netconn *conn, void *buf, size_t len, int flags, int *recvd ) { *recvd = 0; - if (!len) return TRUE; + if (!len) return ERROR_SUCCESS; if (conn->secure) { - SIZE_T size, cread; - BOOL res, eof; + SIZE_T size; + DWORD res; + BOOL eof; if (conn->peek_msg) { @@ -553,32 +564,35 @@ conn->peek_msg = NULL; } /* check if we have enough data from the peek buffer */ - if (!(flags & MSG_WAITALL) || *recvd == len) return TRUE; + if (!(flags & MSG_WAITALL) || *recvd == len) return ERROR_SUCCESS; } size = *recvd; - do { - res = read_ssl_chunk(conn, (BYTE*)buf+size, len-size, &cread, &eof); - if(!res) { - WARN("read_ssl_chunk failed\n"); - if(!size) - return FALSE; + do + { + SIZE_T cread = 0; + if ((res = read_ssl_chunk( conn, (BYTE *)buf + size, len - size, &cread, &eof ))) + { + WARN("read_ssl_chunk failed: %u\n", res); + if (!size) return res; break; } - - if(eof) { + if (eof) + { TRACE("EOF\n"); break; } - size += cread; - }while(!size || ((flags & MSG_WAITALL) && size < len)); + + } while (!size || ((flags & MSG_WAITALL) && size < len)); TRACE("received %ld bytes\n", size); *recvd = size; - return TRUE; + return ERROR_SUCCESS; } - return ((*recvd = sock_recv( conn->socket, buf, len, flags )) != -1); + + if ((*recvd = sock_recv( conn->socket, buf, len, flags )) < 0) return WSAGetLastError(); + return ERROR_SUCCESS; } ULONG netconn_query_data_available( struct netconn *conn ) @@ -666,7 +680,7 @@ SetEvent( async->done ); } -BOOL netconn_resolve( WCHAR *hostname, INTERNET_PORT port, struct sockaddr_storage *addr, int timeout ) +DWORD netconn_resolve( WCHAR *hostname, INTERNET_PORT port, struct sockaddr_storage *addr, int timeout ) { DWORD ret; @@ -678,23 +692,18 @@ async.hostname = hostname; async.port = port; async.addr = addr; - if (!(async.done = CreateEventW( NULL, FALSE, FALSE, NULL ))) return FALSE; + if (!(async.done = CreateEventW( NULL, FALSE, FALSE, NULL ))) return GetLastError(); if (!TrySubmitThreadpoolCallback( resolve_proc, &async, NULL )) { CloseHandle( async.done ); - return FALSE; + return GetLastError(); } if (WaitForSingleObject( async.done, timeout ) != WAIT_OBJECT_0) ret = ERROR_WINHTTP_TIMEOUT; else ret = async.result; CloseHandle( async.done ); } - if (ret) - { - SetLastError( ret ); - return FALSE; - } - return TRUE; + return ret; } const void *netconn_get_certificate( struct netconn *conn ) diff -Nru wine-development-5.5/dlls/winhttp/request.c wine-development-5.6/dlls/winhttp/request.c --- wine-development-5.5/dlls/winhttp/request.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winhttp/request.c 2020-04-10 18:54:32.000000000 +0000 @@ -173,18 +173,18 @@ } } -static BOOL queue_task( struct task_header *task ) +static DWORD queue_task( struct task_header *task ) { struct request *request = task->request; if (!request->task_wait) { - if (!(request->task_wait = CreateEventW( NULL, FALSE, FALSE, NULL ))) return FALSE; + if (!(request->task_wait = CreateEventW( NULL, FALSE, FALSE, NULL ))) return ERROR_OUTOFMEMORY; if (!(request->task_cancel = CreateEventW( NULL, FALSE, FALSE, NULL ))) { CloseHandle( request->task_wait ); request->task_wait = NULL; - return FALSE; + return ERROR_OUTOFMEMORY; } if (!TrySubmitThreadpoolCallback( task_proc, request, NULL )) { @@ -192,7 +192,7 @@ request->task_wait = NULL; CloseHandle( request->task_cancel ); request->task_cancel = NULL; - return FALSE; + return GetLastError(); } request->task_proc_running = TRUE; InitializeCriticalSection( &request->task_cs ); @@ -205,7 +205,7 @@ LeaveCriticalSection( &request->task_cs ); SetEvent( request->task_wait ); - return TRUE; + return ERROR_SUCCESS; } static void free_header( struct header *header ) @@ -307,7 +307,7 @@ return index; } -static BOOL insert_header( struct request *request, struct header *header ) +static DWORD insert_header( struct request *request, struct header *header ) { DWORD count = request->num_headers + 1; struct header *hdrs; @@ -316,20 +316,19 @@ hdrs = heap_realloc_zero( request->headers, sizeof(struct header) * count ); else hdrs = heap_alloc_zero( sizeof(struct header) ); - if (!hdrs) return FALSE; + if (!hdrs) return ERROR_OUTOFMEMORY; request->headers = hdrs; request->headers[count - 1].field = strdupW( header->field ); request->headers[count - 1].value = strdupW( header->value ); request->headers[count - 1].is_request = header->is_request; request->num_headers = count; - return TRUE; + return ERROR_SUCCESS; } -static BOOL delete_header( struct request *request, DWORD index ) +static void delete_header( struct request *request, DWORD index ) { - if (!request->num_headers) return FALSE; - if (index >= request->num_headers) return FALSE; + if (!request->num_headers || index >= request->num_headers) return; request->num_headers--; heap_free( request->headers[index].field ); @@ -338,10 +337,9 @@ memmove( &request->headers[index], &request->headers[index + 1], (request->num_headers - index) * sizeof(struct header) ); memset( &request->headers[request->num_headers], 0, sizeof(struct header) ); - return TRUE; } -BOOL process_header( struct request *request, const WCHAR *field, const WCHAR *value, DWORD flags, BOOL request_only ) +DWORD process_header( struct request *request, const WCHAR *field, const WCHAR *value, DWORD flags, BOOL request_only ) { int index; struct header hdr; @@ -350,7 +348,7 @@ if ((index = get_header_index( request, field, 0, request_only )) >= 0) { - if (flags & WINHTTP_ADDREQ_FLAG_ADD_IF_NEW) return FALSE; + if (flags & WINHTTP_ADDREQ_FLAG_ADD_IF_NEW) return ERROR_WINHTTP_HEADER_ALREADY_EXISTS; } if (flags & WINHTTP_ADDREQ_FLAG_REPLACE) @@ -358,13 +356,9 @@ if (index >= 0) { delete_header( request, index ); - if (!value || !value[0]) return TRUE; - } - else if (!(flags & WINHTTP_ADDREQ_FLAG_ADD)) - { - SetLastError( ERROR_WINHTTP_HEADER_NOT_FOUND ); - return FALSE; + if (!value || !value[0]) return ERROR_SUCCESS; } + else if (!(flags & WINHTTP_ADDREQ_FLAG_ADD)) return ERROR_WINHTTP_HEADER_NOT_FOUND; hdr.field = (LPWSTR)field; hdr.value = (LPWSTR)value; @@ -385,14 +379,14 @@ len_value = lstrlenW( value ); len = len_orig + len_value + 2; - if (!(tmp = heap_realloc( header->value, (len + 1) * sizeof(WCHAR) ))) return FALSE; + if (!(tmp = heap_realloc( header->value, (len + 1) * sizeof(WCHAR) ))) return ERROR_OUTOFMEMORY; header->value = tmp; header->value[len_orig++] = (flags & WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA) ? ',' : ';'; header->value[len_orig++] = ' '; memcpy( &header->value[len_orig], value, len_value * sizeof(WCHAR) ); header->value[len] = 0; - return TRUE; + return ERROR_SUCCESS; } else { @@ -403,18 +397,18 @@ } } - return TRUE; + return ERROR_SUCCESS; } -BOOL add_request_headers( struct request *request, const WCHAR *headers, DWORD len, DWORD flags ) +DWORD add_request_headers( struct request *request, const WCHAR *headers, DWORD len, DWORD flags ) { - BOOL ret = FALSE; + DWORD ret = ERROR_WINHTTP_INVALID_HEADER; WCHAR *buffer, *p, *q; struct header *header; if (len == ~0u) len = lstrlenW( headers ); - if (!len) return TRUE; - if (!(buffer = heap_alloc( (len + 1) * sizeof(WCHAR) ))) return FALSE; + if (!len) return ERROR_SUCCESS; + if (!(buffer = heap_alloc( (len + 1) * sizeof(WCHAR) ))) return ERROR_OUTOFMEMORY; memcpy( buffer, headers, len * sizeof(WCHAR) ); buffer[len] = 0; @@ -444,7 +438,7 @@ free_header( header ); } p = q; - } while (ret); + } while (!ret); heap_free( buffer ); return ret; @@ -455,7 +449,7 @@ */ BOOL WINAPI WinHttpAddRequestHeaders( HINTERNET hrequest, LPCWSTR headers, DWORD len, DWORD flags ) { - BOOL ret; + DWORD ret; struct request *request; TRACE("%p, %s, %u, 0x%08x\n", hrequest, debugstr_wn(headers, len), len, flags); @@ -480,8 +474,8 @@ ret = add_request_headers( request, headers, len, flags ); release_object( &request->hdr ); - if (ret) SetLastError( ERROR_SUCCESS ); - return ret; + SetLastError( ret ); + return !ret; } static WCHAR *build_absolute_request_path( struct request *request, const WCHAR **path ) @@ -556,13 +550,13 @@ #define QUERY_MODIFIER_MASK (WINHTTP_QUERY_FLAG_REQUEST_HEADERS | WINHTTP_QUERY_FLAG_SYSTEMTIME | WINHTTP_QUERY_FLAG_NUMBER) -static BOOL query_headers( struct request *request, DWORD level, const WCHAR *name, void *buffer, DWORD *buflen, - DWORD *index ) +static DWORD query_headers( struct request *request, DWORD level, const WCHAR *name, void *buffer, DWORD *buflen, + DWORD *index ) { struct header *header = NULL; - BOOL request_only, ret = FALSE; + BOOL request_only; int requested_index, header_index = -1; - DWORD attr, len; + DWORD attr, len, ret = ERROR_WINHTTP_HEADER_NOT_FOUND; request_only = level & WINHTTP_QUERY_FLAG_REQUEST_HEADERS; requested_index = index ? *index : 0; @@ -584,11 +578,10 @@ else headers = request->raw_headers; - if (!(p = headers)) return FALSE; + if (!(p = headers)) return ERROR_OUTOFMEMORY; for (len = 0; *p; p++) if (*p != '\r') len++; - if (!buffer || len * sizeof(WCHAR) > *buflen) - SetLastError( ERROR_INSUFFICIENT_BUFFER ); + if (!buffer || len * sizeof(WCHAR) > *buflen) ret = ERROR_INSUFFICIENT_BUFFER; else { for (p = headers, q = buffer; *p; p++, q++) @@ -602,7 +595,7 @@ } TRACE("returning data: %s\n", debugstr_wn(buffer, len)); if (len) len--; - ret = TRUE; + ret = ERROR_SUCCESS; } *buflen = len * sizeof(WCHAR); if (request_only) heap_free( headers ); @@ -617,18 +610,18 @@ else headers = request->raw_headers; - if (!headers) return FALSE; + if (!headers) return ERROR_OUTOFMEMORY; len = lstrlenW( headers ) * sizeof(WCHAR); if (!buffer || len + sizeof(WCHAR) > *buflen) { len += sizeof(WCHAR); - SetLastError( ERROR_INSUFFICIENT_BUFFER ); + ret = ERROR_INSUFFICIENT_BUFFER; } else { memcpy( buffer, headers, len + sizeof(WCHAR) ); TRACE("returning data: %s\n", debugstr_wn(buffer, len / sizeof(WCHAR))); - ret = TRUE; + ret = ERROR_SUCCESS; } *buflen = len; if (request_only) heap_free( headers ); @@ -639,13 +632,13 @@ if (!buffer || len + sizeof(WCHAR) > *buflen) { len += sizeof(WCHAR); - SetLastError( ERROR_INSUFFICIENT_BUFFER ); + ret = ERROR_INSUFFICIENT_BUFFER; } else { lstrcpyW( buffer, request->version ); TRACE("returning string: %s\n", debugstr_w(buffer)); - ret = TRUE; + ret = ERROR_SUCCESS; } *buflen = len; return ret; @@ -655,13 +648,13 @@ if (!buffer || len + sizeof(WCHAR) > *buflen) { len += sizeof(WCHAR); - SetLastError( ERROR_INSUFFICIENT_BUFFER ); + ret = ERROR_INSUFFICIENT_BUFFER; } else { lstrcpyW( buffer, request->status_text ); TRACE("returning string: %s\n", debugstr_w(buffer)); - ret = TRUE; + ret = ERROR_SUCCESS; } *buflen = len; return ret; @@ -671,28 +664,23 @@ if (!buffer || len + sizeof(WCHAR) > *buflen) { len += sizeof(WCHAR); - SetLastError( ERROR_INSUFFICIENT_BUFFER ); + ret = ERROR_INSUFFICIENT_BUFFER; } else { lstrcpyW( buffer, request->verb ); TRACE("returning string: %s\n", debugstr_w(buffer)); - ret = TRUE; + ret = ERROR_SUCCESS; } *buflen = len; return ret; default: - if (attr >= ARRAY_SIZE(attribute_table)) - { - SetLastError( ERROR_INVALID_PARAMETER ); - return FALSE; - } + if (attr >= ARRAY_SIZE(attribute_table)) return ERROR_INVALID_PARAMETER; if (!attribute_table[attr]) { FIXME("attribute %u not implemented\n", attr); - SetLastError( ERROR_WINHTTP_HEADER_NOT_FOUND ); - return FALSE; + return ERROR_WINHTTP_HEADER_NOT_FOUND; } TRACE("attribute %s\n", debugstr_w(attribute_table[attr])); header_index = get_header_index( request, attribute_table[attr], requested_index, request_only ); @@ -703,38 +691,29 @@ { header = &request->headers[header_index]; } - if (!header || (request_only && !header->is_request)) - { - SetLastError( ERROR_WINHTTP_HEADER_NOT_FOUND ); - return FALSE; - } + if (!header || (request_only && !header->is_request)) return ERROR_WINHTTP_HEADER_NOT_FOUND; if (level & WINHTTP_QUERY_FLAG_NUMBER) { - if (!buffer || sizeof(int) > *buflen) - { - SetLastError( ERROR_INSUFFICIENT_BUFFER ); - } + if (!buffer || sizeof(int) > *buflen) ret = ERROR_INSUFFICIENT_BUFFER; else { int *number = buffer; *number = wcstol( header->value, NULL, 10 ); TRACE("returning number: %d\n", *number); - ret = TRUE; + ret = ERROR_SUCCESS; } *buflen = sizeof(int); } else if (level & WINHTTP_QUERY_FLAG_SYSTEMTIME) { SYSTEMTIME *st = buffer; - if (!buffer || sizeof(SYSTEMTIME) > *buflen) - { - SetLastError( ERROR_INSUFFICIENT_BUFFER ); - } - else if ((ret = WinHttpTimeToSystemTime( header->value, st ))) + if (!buffer || sizeof(SYSTEMTIME) > *buflen) ret = ERROR_INSUFFICIENT_BUFFER; + else if (WinHttpTimeToSystemTime( header->value, st )) { TRACE("returning time: %04d/%02d/%02d - %d - %02d:%02d:%02d.%02d\n", st->wYear, st->wMonth, st->wDay, st->wDayOfWeek, st->wHour, st->wMinute, st->wSecond, st->wMilliseconds); + ret = ERROR_SUCCESS; } *buflen = sizeof(SYSTEMTIME); } @@ -744,17 +723,17 @@ if (!buffer || len + sizeof(WCHAR) > *buflen) { len += sizeof(WCHAR); - SetLastError( ERROR_INSUFFICIENT_BUFFER ); + ret = ERROR_INSUFFICIENT_BUFFER; } else { lstrcpyW( buffer, header->value ); TRACE("returning string: %s\n", debugstr_w(buffer)); - ret = TRUE; + ret = ERROR_SUCCESS; } *buflen = len; } - if (ret && index) *index += 1; + if (!ret && index) *index += 1; return ret; } @@ -763,7 +742,7 @@ */ BOOL WINAPI WinHttpQueryHeaders( HINTERNET hrequest, DWORD level, LPCWSTR name, LPVOID buffer, LPDWORD buflen, LPDWORD index ) { - BOOL ret; + DWORD ret; struct request *request; TRACE("%p, 0x%08x, %s, %p, %p, %p\n", hrequest, level, debugstr_w(name), buffer, buflen, index); @@ -783,8 +762,8 @@ ret = query_headers( request, level, name, buffer, buflen, index ); release_object( &request->hdr ); - if (ret) SetLastError( ERROR_SUCCESS ); - return ret; + SetLastError( ret ); + return !ret; } static const struct @@ -822,10 +801,9 @@ return 0; } -static BOOL query_auth_schemes( struct request *request, DWORD level, DWORD *supported, DWORD *first ) +static DWORD query_auth_schemes( struct request *request, DWORD level, DWORD *supported, DWORD *first ) { - DWORD index = 0, supported_schemes = 0, first_scheme = 0; - BOOL ret = FALSE; + DWORD ret, index = 0, supported_schemes = 0, first_scheme = 0; for (;;) { @@ -833,14 +811,18 @@ DWORD size, scheme; size = 0; - query_headers( request, level, NULL, NULL, &size, &index ); - if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) break; + ret = query_headers( request, level, NULL, NULL, &size, &index ); + if (ret != ERROR_INSUFFICIENT_BUFFER) + { + if (index) ret = ERROR_SUCCESS; + break; + } - if (!(buffer = heap_alloc( size ))) return FALSE; - if (!query_headers( request, level, NULL, buffer, &size, &index )) + if (!(buffer = heap_alloc( size ))) return ERROR_OUTOFMEMORY; + if ((ret = query_headers( request, level, NULL, buffer, &size, &index ))) { heap_free( buffer ); - return FALSE; + return ret; } scheme = auth_scheme_from_header( buffer ); heap_free( buffer ); @@ -848,11 +830,9 @@ if (!first_scheme) first_scheme = scheme; supported_schemes |= scheme; - - ret = TRUE; } - if (ret) + if (!ret) { *supported = supported_schemes; *first = first_scheme; @@ -865,7 +845,7 @@ */ BOOL WINAPI WinHttpQueryAuthSchemes( HINTERNET hrequest, LPDWORD supported, LPDWORD first, LPDWORD target ) { - BOOL ret = FALSE; + DWORD ret; struct request *request; TRACE("%p, %p, %p, %p\n", hrequest, supported, first, target); @@ -889,21 +869,19 @@ } - if (query_auth_schemes( request, WINHTTP_QUERY_WWW_AUTHENTICATE, supported, first )) + if (!(ret = query_auth_schemes( request, WINHTTP_QUERY_WWW_AUTHENTICATE, supported, first ))) { *target = WINHTTP_AUTH_TARGET_SERVER; - ret = TRUE; } - else if (query_auth_schemes( request, WINHTTP_QUERY_PROXY_AUTHENTICATE, supported, first )) + else if (!(ret = query_auth_schemes( request, WINHTTP_QUERY_PROXY_AUTHENTICATE, supported, first ))) { *target = WINHTTP_AUTH_TARGET_PROXY; - ret = TRUE; } - else SetLastError( ERROR_INVALID_OPERATION ); + else ret = ERROR_INVALID_OPERATION; release_object( &request->hdr ); - if (ret) SetLastError( ERROR_SUCCESS ); - return ret; + SetLastError( ret ); + return !ret; } static UINT encode_base64( const char *bin, unsigned int len, WCHAR *base64 ) @@ -1056,7 +1034,7 @@ for (;;) { size = len; - if (!query_headers( request, level, NULL, buffer, &size, &index )) return FALSE; + if (query_headers( request, level, NULL, buffer, &size, &index )) return FALSE; if (auth_scheme_from_header( buffer ) == scheme) break; } return TRUE; @@ -1286,7 +1264,7 @@ encode_base64( authinfo->data, authinfo->data_len, auth_reply + len_scheme + 1 ); flags = WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE; - ret = process_header( request, auth_target, auth_reply, flags, TRUE ); + ret = !process_header( request, auth_target, auth_reply, flags, TRUE ); heap_free( auth_reply ); return ret; } @@ -1335,24 +1313,24 @@ return ret; } -static BOOL read_reply( struct request *request ); +static DWORD read_reply( struct request *request ); -static BOOL secure_proxy_connect( struct request *request ) +static DWORD secure_proxy_connect( struct request *request ) { WCHAR *str; char *strA; int len, bytes_sent; - BOOL ret; + DWORD ret; - if (!(str = build_proxy_connect_string( request ))) return FALSE; + if (!(str = build_proxy_connect_string( request ))) return ERROR_OUTOFMEMORY; strA = strdupWA( str ); heap_free( str ); - if (!strA) return FALSE; + if (!strA) return ERROR_OUTOFMEMORY; len = strlen( strA ); ret = netconn_send( request->netconn, strA, len, &bytes_sent ); heap_free( strA ); - if (ret) ret = read_reply( request ); + if (!ret) ret = read_reply( request ); return ret; } @@ -1476,11 +1454,11 @@ return ret; } -static BOOL ensure_cred_handle( struct request *request ) +static DWORD ensure_cred_handle( struct request *request ) { SECURITY_STATUS status = SEC_E_OK; - if (request->cred_handle_initialized) return TRUE; + if (request->cred_handle_initialized) return ERROR_SUCCESS; if (!request->cred_handle_initialized) { @@ -1502,12 +1480,12 @@ if (status != SEC_E_OK) { WARN( "AcquireCredentialsHandleW failed: 0x%08x\n", status ); - return FALSE; + return status; } - return TRUE; + return ERROR_SUCCESS; } -static BOOL open_connection( struct request *request ) +static DWORD open_connection( struct request *request ) { BOOL is_secure = request->hdr.flags & WINHTTP_FLAG_SECURE; struct hostdata *host = NULL, *iter; @@ -1515,7 +1493,7 @@ struct connect *connect; WCHAR *addressW = NULL; INTERNET_PORT port; - DWORD len; + DWORD ret, len; if (request->netconn) goto done; @@ -1556,7 +1534,7 @@ LeaveCriticalSection( &connection_pool_cs ); - if (!host) return FALSE; + if (!host) return ERROR_OUTOFMEMORY; for (;;) { @@ -1586,17 +1564,17 @@ len = lstrlenW( host->hostname ) + 1; send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME, host->hostname, len ); - if (!netconn_resolve( host->hostname, port, &connect->sockaddr, request->resolve_timeout )) + if ((ret = netconn_resolve( host->hostname, port, &connect->sockaddr, request->resolve_timeout ))) { release_host( host ); - return FALSE; + return ret; } connect->resolved = TRUE; if (!(addressW = addr_to_str( &connect->sockaddr ))) { release_host( host ); - return FALSE; + return ERROR_OUTOFMEMORY; } len = lstrlenW( addressW ) + 1; send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED, addressW, len ); @@ -1607,18 +1585,18 @@ if (!addressW && !(addressW = addr_to_str( &connect->sockaddr ))) { release_host( host ); - return FALSE; + return ERROR_OUTOFMEMORY; } TRACE("connecting to %s:%u\n", debugstr_w(addressW), port); send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER, addressW, 0 ); - if (!(netconn = netconn_create( host, &connect->sockaddr, request->connect_timeout ))) + if ((ret = netconn_create( host, &connect->sockaddr, request->connect_timeout, &netconn ))) { heap_free( addressW ); release_host( host ); - return FALSE; + return ret; } netconn_set_timeout( netconn, TRUE, request->send_timeout ); netconn_set_timeout( netconn, FALSE, request->receive_response_timeout ); @@ -1627,29 +1605,28 @@ if (is_secure) { - if (connect->session->proxy_server && - wcsicmp( connect->hostname, connect->servername )) + if (connect->session->proxy_server && wcsicmp( connect->hostname, connect->servername )) { - if (!secure_proxy_connect( request )) + if ((ret = secure_proxy_connect( request ))) { request->netconn = NULL; heap_free( addressW ); netconn_close( netconn ); - return FALSE; + return ret; } } CertFreeCertificateContext( request->server_cert ); request->server_cert = NULL; - if (!ensure_cred_handle( request ) || - !netconn_secure_connect( netconn, connect->hostname, request->security_flags, - &request->cred_handle, request->check_revocation )) + if ((ret = ensure_cred_handle( request )) || + (ret = netconn_secure_connect( netconn, connect->hostname, request->security_flags, + &request->cred_handle, request->check_revocation ))) { request->netconn = NULL; heap_free( addressW ); netconn_close( netconn ); - return FALSE; + return ret; } } @@ -1668,7 +1645,7 @@ { heap_free( addressW ); netconn_close( netconn ); - return FALSE; + return ERROR_WINHTTP_SECURE_FAILURE; } done: @@ -1677,7 +1654,7 @@ request->read_chunked_size = ~0u; request->read_chunked_eof = FALSE; heap_free( addressW ); - return TRUE; + return ERROR_SUCCESS; } void close_connection( struct request *request ) @@ -1690,10 +1667,9 @@ send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED, 0, 0 ); } -static BOOL add_host_header( struct request *request, DWORD modifier ) +static DWORD add_host_header( struct request *request, DWORD modifier ) { - BOOL ret; - DWORD len; + DWORD ret, len; WCHAR *host; struct connect *connect = request->connect; INTERNET_PORT port; @@ -1705,7 +1681,7 @@ return process_header( request, L"Host", connect->hostname, modifier, TRUE ); } len = lstrlenW( connect->hostname ) + 7; /* sizeof(":65335") */ - if (!(host = heap_alloc( len * sizeof(WCHAR) ))) return FALSE; + if (!(host = heap_alloc( len * sizeof(WCHAR) ))) return ERROR_OUTOFMEMORY; swprintf( host, len, L"%s:%u", connect->hostname, port ); ret = process_header( request, L"Host", host, modifier, TRUE ); heap_free( host ); @@ -1734,12 +1710,12 @@ } /* read some more data into the read buffer */ -static BOOL read_more_data( struct request *request, int maxlen, BOOL notify ) +static DWORD read_more_data( struct request *request, int maxlen, BOOL notify ) { int len; - BOOL ret; + DWORD ret; - if (request->read_chunked_eof) return FALSE; + if (request->read_chunked_eof) return ERROR_INSUFFICIENT_BUFFER; if (request->read_size && request->read_pos) { @@ -1761,8 +1737,9 @@ } /* discard data contents until we reach end of line */ -static BOOL discard_eol( struct request *request, BOOL notify ) +static DWORD discard_eol( struct request *request, BOOL notify ) { + DWORD ret; do { char *eol = memchr( request->read_buf + request->read_pos, '\n', request->read_size ); @@ -1772,22 +1749,22 @@ break; } request->read_pos = request->read_size = 0; /* discard everything */ - if (!read_more_data( request, -1, notify )) return FALSE; + if ((ret = read_more_data( request, -1, notify ))) return ret; } while (request->read_size); - return TRUE; + return ERROR_SUCCESS; } /* read the size of the next chunk */ -static BOOL start_next_chunk( struct request *request, BOOL notify ) +static DWORD start_next_chunk( struct request *request, BOOL notify ) { - DWORD chunk_size = 0; + DWORD ret, chunk_size = 0; assert(!request->read_chunked_size || request->read_chunked_size == ~0u); - if (request->read_chunked_eof) return FALSE; + if (request->read_chunked_eof) return ERROR_INSUFFICIENT_BUFFER; /* read terminator for the previous chunk */ - if (!request->read_chunked_size && !discard_eol( request, notify )) return FALSE; + if (!request->read_chunked_size && (ret = discard_eol( request, notify ))) return ret; for (;;) { @@ -1811,26 +1788,27 @@ } remove_data( request, 1 ); } - if (!read_more_data( request, -1, notify )) return FALSE; + if ((ret = read_more_data( request, -1, notify ))) return ret; if (!request->read_size) { request->content_length = request->content_read = 0; request->read_chunked_size = 0; - return TRUE; + return ERROR_SUCCESS; } } } -static BOOL refill_buffer( struct request *request, BOOL notify ) +static DWORD refill_buffer( struct request *request, BOOL notify ) { int len = sizeof(request->read_buf); + DWORD ret; if (request->read_chunked) { - if (request->read_chunked_eof) return FALSE; + if (request->read_chunked_eof) return ERROR_INSUFFICIENT_BUFFER; if (request->read_chunked_size == ~0u || !request->read_chunked_size) { - if (!start_next_chunk( request, notify )) return FALSE; + if ((ret = start_next_chunk( request, notify ))) return ret; } len = min( len, request->read_chunked_size ); } @@ -1839,10 +1817,10 @@ len = min( len, request->content_length - request->content_read ); } - if (len <= request->read_size) return TRUE; - if (!read_more_data( request, len, notify )) return FALSE; + if (len <= request->read_size) return ERROR_SUCCESS; + if ((ret = read_more_data( request, len, notify ))) return ret; if (!request->read_size) request->content_length = request->content_read = 0; - return TRUE; + return ERROR_SUCCESS; } static void finished_reading( struct request *request ) @@ -1854,8 +1832,8 @@ if (!request->netconn) return; if (request->hdr.disable_flags & WINHTTP_DISABLE_KEEP_ALIVE) close = TRUE; - else if (query_headers( request, WINHTTP_QUERY_CONNECTION, NULL, connection, &size, NULL ) || - query_headers( request, WINHTTP_QUERY_PROXY_CONNECTION, NULL, connection, &size, NULL )) + else if (!query_headers( request, WINHTTP_QUERY_CONNECTION, NULL, connection, &size, NULL ) || + !query_headers( request, WINHTTP_QUERY_PROXY_CONNECTION, NULL, connection, &size, NULL )) { if (!wcsicmp( connection, L"close" )) close = TRUE; } @@ -1886,10 +1864,10 @@ return (request->content_length == request->content_read); } -static BOOL read_data( struct request *request, void *buffer, DWORD size, DWORD *read, BOOL async ) +static DWORD read_data( struct request *request, void *buffer, DWORD size, DWORD *read, BOOL async ) { int count, bytes_read = 0; - BOOL ret = TRUE; + DWORD ret = ERROR_SUCCESS; if (end_of_read_data( request )) goto done; @@ -1897,7 +1875,7 @@ { if (!(count = get_available_data( request ))) { - if (!(ret = refill_buffer( request, async ))) goto done; + if ((ret = refill_buffer( request, async ))) goto done; if (!(count = get_available_data( request ))) goto done; } count = min( count, size ); @@ -1915,17 +1893,17 @@ TRACE( "retrieved %u bytes (%u/%u)\n", bytes_read, request->content_read, request->content_length ); if (async) { - if (ret) send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_READ_COMPLETE, buffer, bytes_read ); + if (!ret) send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_READ_COMPLETE, buffer, bytes_read ); else { WINHTTP_ASYNC_RESULT result; result.dwResult = API_READ_DATA; - result.dwError = GetLastError(); + result.dwError = ret; send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_REQUEST_ERROR, &result, sizeof(result) ); } } - if (ret && read) *read = bytes_read; + if (!ret && read) *read = bytes_read; if (end_of_read_data( request )) finished_reading( request ); return ret; } @@ -1945,7 +1923,7 @@ if (bytes_total >= bytes_left) return; size = min( sizeof(buffer), bytes_left - bytes_total ); } - if (!read_data( request, buffer, size, &bytes_read, FALSE ) || !bytes_read) return; + if (read_data( request, buffer, size, &bytes_read, FALSE ) || !bytes_read) return; bytes_total += bytes_read; } } @@ -2120,15 +2098,14 @@ return ret; } -static BOOL send_request( struct request *request, const WCHAR *headers, DWORD headers_len, void *optional, - DWORD optional_len, DWORD total_len, DWORD_PTR context, BOOL async ) +static DWORD send_request( struct request *request, const WCHAR *headers, DWORD headers_len, void *optional, + DWORD optional_len, DWORD total_len, DWORD_PTR context, BOOL async ) { - BOOL ret = FALSE; struct connect *connect = request->connect; struct session *session = connect->session; char *wire_req; int bytes_sent; - DWORD len; + DWORD ret, len; clear_response_headers( request ); drain_content( request ); @@ -2157,32 +2134,37 @@ process_header( request, L"Pragma", L"no-cache", WINHTTP_ADDREQ_FLAG_ADD_IF_NEW, TRUE ); process_header( request, L"Cache-Control", L"no-cache", WINHTTP_ADDREQ_FLAG_ADD_IF_NEW, TRUE ); } - if (headers && !add_request_headers( request, headers, headers_len, WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE )) + if (headers && (ret = add_request_headers( request, headers, headers_len, + WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE ))) { - TRACE("failed to add request headers\n"); - return FALSE; + TRACE("failed to add request headers: %u\n", ret); + return ret; } - if (!(request->hdr.disable_flags & WINHTTP_DISABLE_COOKIES) && !add_cookie_headers( request )) + if (!(request->hdr.disable_flags & WINHTTP_DISABLE_COOKIES) && (ret = add_cookie_headers( request ))) { - WARN("failed to add cookie headers\n"); - return FALSE; + WARN("failed to add cookie headers: %u\n", ret); + return ret; } if (context) request->hdr.context = context; - if (!(ret = open_connection( request ))) goto end; - if (!(wire_req = build_wire_request( request, &len ))) goto end; + if ((ret = open_connection( request ))) goto end; + if (!(wire_req = build_wire_request( request, &len ))) + { + ret = ERROR_OUTOFMEMORY; + goto end; + } TRACE("full request: %s\n", debugstr_a(wire_req)); send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST, NULL, 0 ); ret = netconn_send( request->netconn, wire_req, len, &bytes_sent ); heap_free( wire_req ); - if (!ret) goto end; + if (ret) goto end; if (optional_len) { - if (!netconn_send( request->netconn, optional, optional_len, &bytes_sent )) goto end; + if ((ret = netconn_send( request->netconn, optional, optional_len, &bytes_sent ))) goto end; request->optional = optional; request->optional_len = optional_len; len += optional_len; @@ -2192,12 +2174,12 @@ end: if (async) { - if (ret) send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE, NULL, 0 ); + if (!ret) send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE, NULL, 0 ); else { WINHTTP_ASYNC_RESULT result; result.dwResult = API_SEND_REQUEST; - result.dwError = GetLastError(); + result.dwError = ret; send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_REQUEST_ERROR, &result, sizeof(result) ); } } @@ -2217,7 +2199,7 @@ BOOL WINAPI WinHttpSendRequest( HINTERNET hrequest, LPCWSTR headers, DWORD headers_len, LPVOID optional, DWORD optional_len, DWORD total_len, DWORD_PTR context ) { - BOOL ret; + DWORD ret; struct request *request; TRACE("%p, %s, %u, %p, %u, %u, %lx\n", hrequest, debugstr_wn(headers, headers_len), headers_len, optional, @@ -2258,19 +2240,18 @@ ret = send_request( request, headers, headers_len, optional, optional_len, total_len, context, FALSE ); release_object( &request->hdr ); - if (ret) SetLastError( ERROR_SUCCESS ); - return ret; + SetLastError( ret ); + return !ret; } -static BOOL set_credentials( struct request *request, DWORD target, DWORD scheme_flag, const WCHAR *username, - const WCHAR *password ) +static DWORD set_credentials( struct request *request, DWORD target, DWORD scheme_flag, const WCHAR *username, + const WCHAR *password ) { enum auth_scheme scheme = scheme_from_flag( scheme_flag ); if (scheme == SCHEME_INVALID || ((scheme == SCHEME_BASIC || scheme == SCHEME_DIGEST) && (!username || !password))) { - SetLastError( ERROR_INVALID_PARAMETER ); - return FALSE; + return ERROR_INVALID_PARAMETER; } switch (target) { @@ -2278,29 +2259,29 @@ { heap_free( request->creds[TARGET_SERVER][scheme].username ); if (!username) request->creds[TARGET_SERVER][scheme].username = NULL; - else if (!(request->creds[TARGET_SERVER][scheme].username = strdupW( username ))) return FALSE; + else if (!(request->creds[TARGET_SERVER][scheme].username = strdupW( username ))) return ERROR_OUTOFMEMORY; heap_free( request->creds[TARGET_SERVER][scheme].password ); if (!password) request->creds[TARGET_SERVER][scheme].password = NULL; - else if (!(request->creds[TARGET_SERVER][scheme].password = strdupW( password ))) return FALSE; + else if (!(request->creds[TARGET_SERVER][scheme].password = strdupW( password ))) return ERROR_OUTOFMEMORY; break; } case WINHTTP_AUTH_TARGET_PROXY: { heap_free( request->creds[TARGET_PROXY][scheme].username ); if (!username) request->creds[TARGET_PROXY][scheme].username = NULL; - else if (!(request->creds[TARGET_PROXY][scheme].username = strdupW( username ))) return FALSE; + else if (!(request->creds[TARGET_PROXY][scheme].username = strdupW( username ))) return ERROR_OUTOFMEMORY; heap_free( request->creds[TARGET_PROXY][scheme].password ); if (!password) request->creds[TARGET_PROXY][scheme].password = NULL; - else if (!(request->creds[TARGET_PROXY][scheme].password = strdupW( password ))) return FALSE; + else if (!(request->creds[TARGET_PROXY][scheme].password = strdupW( password ))) return ERROR_OUTOFMEMORY; break; } default: WARN("unknown target %u\n", target); - return FALSE; + return ERROR_INVALID_PARAMETER; } - return TRUE; + return ERROR_SUCCESS; } /*********************************************************************** @@ -2309,7 +2290,7 @@ BOOL WINAPI WinHttpSetCredentials( HINTERNET hrequest, DWORD target, DWORD scheme, LPCWSTR username, LPCWSTR password, LPVOID params ) { - BOOL ret; + DWORD ret; struct request *request; TRACE("%p, %x, 0x%08x, %s, %p, %p\n", hrequest, target, scheme, debugstr_w(username), password, params); @@ -2329,13 +2310,13 @@ ret = set_credentials( request, target, scheme, username, password ); release_object( &request->hdr ); - if (ret) SetLastError( ERROR_SUCCESS ); - return ret; + SetLastError( ret ); + return !ret; } -static BOOL handle_authorization( struct request *request, DWORD status ) +static DWORD handle_authorization( struct request *request, DWORD status ) { - DWORD i, schemes, first, level, target; + DWORD ret, i, schemes, first, level, target; switch (status) { @@ -2350,24 +2331,24 @@ break; default: - WARN("unhandled status %u\n", status); - return FALSE; + ERR("unhandled status %u\n", status); + return ERROR_WINHTTP_INTERNAL_ERROR; } - if (!query_auth_schemes( request, level, &schemes, &first )) return FALSE; - if (do_authorization( request, target, first )) return TRUE; + if ((ret = query_auth_schemes( request, level, &schemes, &first ))) return ret; + if (do_authorization( request, target, first )) return ERROR_SUCCESS; schemes &= ~first; for (i = 0; i < ARRAY_SIZE( auth_schemes ); i++) { if (!(schemes & auth_schemes[i].scheme)) continue; - if (do_authorization( request, target, auth_schemes[i].scheme )) return TRUE; + if (do_authorization( request, target, auth_schemes[i].scheme )) return ERROR_SUCCESS; } - return FALSE; + return ERROR_WINHTTP_LOGIN_FAILURE; } /* set the request content length based on the headers */ -static DWORD set_content_length( struct request *request, DWORD status ) +static void set_content_length( struct request *request, DWORD status ) { WCHAR encoding[20]; DWORD buflen = sizeof(request->content_length); @@ -2376,12 +2357,12 @@ request->content_length = 0; else { - if (!query_headers( request, WINHTTP_QUERY_CONTENT_LENGTH|WINHTTP_QUERY_FLAG_NUMBER, - NULL, &request->content_length, &buflen, NULL )) + if (query_headers( request, WINHTTP_QUERY_CONTENT_LENGTH|WINHTTP_QUERY_FLAG_NUMBER, + NULL, &request->content_length, &buflen, NULL )) request->content_length = ~0u; buflen = sizeof(encoding); - if (query_headers( request, WINHTTP_QUERY_TRANSFER_ENCODING, NULL, encoding, &buflen, NULL ) && + if (!query_headers( request, WINHTTP_QUERY_TRANSFER_ENCODING, NULL, encoding, &buflen, NULL ) && !wcsicmp( encoding, L"chunked" )) { request->content_length = ~0u; @@ -2391,12 +2372,12 @@ } } request->content_read = 0; - return request->content_length; } -static BOOL read_line( struct request *request, char *buffer, DWORD *len ) +static DWORD read_line( struct request *request, char *buffer, DWORD *len ) { int count, bytes_read, pos = 0; + DWORD ret; for (;;) { @@ -2414,12 +2395,12 @@ remove_data( request, bytes_read ); if (eol) break; - if (!read_more_data( request, -1, TRUE )) return FALSE; + if ((ret = read_more_data( request, -1, TRUE ))) return ret; if (!request->read_size) { *len = 0; TRACE("returning empty string\n"); - return FALSE; + return ERROR_WINHTTP_INVALID_SERVER_RESPONSE; } } if (pos < *len) @@ -2429,32 +2410,32 @@ } buffer[*len - 1] = 0; TRACE("returning %s\n", debugstr_a(buffer)); - return TRUE; + return ERROR_SUCCESS; } #define MAX_REPLY_LEN 1460 #define INITIAL_HEADER_BUFFER_LEN 512 -static BOOL read_reply( struct request *request ) +static DWORD read_reply( struct request *request ) { char buffer[MAX_REPLY_LEN]; - DWORD buflen, len, offset, crlf_len = 2; /* lstrlenW(crlf) */ + DWORD ret, buflen, len, offset, crlf_len = 2; /* lstrlenW(crlf) */ char *status_code, *status_text; WCHAR *versionW, *status_textW, *raw_headers; WCHAR status_codeW[4]; /* sizeof("nnn") */ - if (!request->netconn) return FALSE; + if (!request->netconn) return ERROR_WINHTTP_INCORRECT_HANDLE_STATE; do { buflen = MAX_REPLY_LEN; - if (!read_line( request, buffer, &buflen )) return FALSE; + if ((ret = read_line( request, buffer, &buflen ))) return ret; /* first line should look like 'HTTP/1.x nnn OK' where nnn is the status code */ - if (!(status_code = strchr( buffer, ' ' ))) return FALSE; + if (!(status_code = strchr( buffer, ' ' ))) return ERROR_WINHTTP_INVALID_SERVER_RESPONSE; status_code++; - if (!(status_text = strchr( status_code, ' ' ))) return FALSE; - if ((len = status_text - status_code) != sizeof("nnn") - 1) return FALSE; + if (!(status_text = strchr( status_code, ' ' ))) return ERROR_WINHTTP_INVALID_SERVER_RESPONSE; + if ((len = status_text - status_code) != sizeof("nnn") - 1) return ERROR_WINHTTP_INVALID_SERVER_RESPONSE; status_text++; TRACE("version [%s] status code [%s] status text [%s]\n", @@ -2467,12 +2448,11 @@ /* we rely on the fact that the protocol is ascii */ MultiByteToWideChar( CP_ACP, 0, status_code, len, status_codeW, len ); status_codeW[len] = 0; - if (!(process_header( request, L"Status", status_codeW, - WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE, FALSE ))) - return FALSE; + if ((ret = process_header( request, L"Status", status_codeW, + WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE, FALSE ))) return ret; len = status_code - buffer; - if (!(versionW = heap_alloc( len * sizeof(WCHAR) ))) return FALSE; + if (!(versionW = heap_alloc( len * sizeof(WCHAR) ))) return ERROR_OUTOFMEMORY; MultiByteToWideChar( CP_ACP, 0, buffer, len - 1, versionW, len -1 ); versionW[len - 1] = 0; @@ -2480,14 +2460,14 @@ request->version = versionW; len = buflen - (status_text - buffer); - if (!(status_textW = heap_alloc( len * sizeof(WCHAR) ))) return FALSE; + if (!(status_textW = heap_alloc( len * sizeof(WCHAR) ))) return ERROR_OUTOFMEMORY; MultiByteToWideChar( CP_ACP, 0, status_text, len, status_textW, len ); heap_free( request->status_text ); request->status_text = status_textW; len = max( buflen + crlf_len, INITIAL_HEADER_BUFFER_LEN ); - if (!(raw_headers = heap_alloc( len * sizeof(WCHAR) ))) return FALSE; + if (!(raw_headers = heap_alloc( len * sizeof(WCHAR) ))) return ERROR_OUTOFMEMORY; MultiByteToWideChar( CP_ACP, 0, buffer, buflen, raw_headers, buflen ); memcpy( raw_headers + buflen - 1, L"\r\n", sizeof(L"\r\n") ); @@ -2500,14 +2480,14 @@ struct header *header; buflen = MAX_REPLY_LEN; - if (!read_line( request, buffer, &buflen )) return TRUE; + if (read_line( request, buffer, &buflen )) return ERROR_SUCCESS; if (!*buffer) buflen = 1; while (len - offset < buflen + crlf_len) { WCHAR *tmp; len *= 2; - if (!(tmp = heap_realloc( raw_headers, len * sizeof(WCHAR) ))) return FALSE; + if (!(tmp = heap_realloc( raw_headers, len * sizeof(WCHAR) ))) return ERROR_OUTOFMEMORY; request->raw_headers = raw_headers = tmp; } if (!*buffer) @@ -2518,7 +2498,7 @@ MultiByteToWideChar( CP_ACP, 0, buffer, buflen, raw_headers + offset, buflen ); if (!(header = parse_header( raw_headers + offset ))) break; - if (!(process_header( request, header->field, header->value, WINHTTP_ADDREQ_FLAG_ADD, FALSE ))) + if ((ret = process_header( request, header->field, header->value, WINHTTP_ADDREQ_FLAG_ADD, FALSE ))) { free_header( header ); break; @@ -2529,7 +2509,7 @@ } TRACE("raw headers: %s\n", debugstr_w(raw_headers)); - return TRUE; + return ret; } static void record_cookies( struct request *request ) @@ -2546,31 +2526,34 @@ } } -static WCHAR *get_redirect_url( struct request *request, DWORD *len ) +static DWORD get_redirect_url( struct request *request, WCHAR **ret_url, DWORD *ret_len ) { - DWORD size; - WCHAR *ret; + DWORD size, ret; + WCHAR *url; - query_headers( request, WINHTTP_QUERY_LOCATION, NULL, NULL, &size, NULL ); - if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) return NULL; - if (!(ret = heap_alloc( size ))) return NULL; - *len = size / sizeof(WCHAR) - 1; - if (query_headers( request, WINHTTP_QUERY_LOCATION, NULL, ret, &size, NULL )) return ret; - heap_free( ret ); - return NULL; + ret = query_headers( request, WINHTTP_QUERY_LOCATION, NULL, NULL, &size, NULL ); + if (ret != ERROR_INSUFFICIENT_BUFFER) return ret; + if (!(url = heap_alloc( size ))) return ERROR_OUTOFMEMORY; + if ((ret = query_headers( request, WINHTTP_QUERY_LOCATION, NULL, url, &size, NULL ))) + { + heap_free( url ); + return ret; + } + *ret_url = url; + *ret_len = size / sizeof(WCHAR); + return ERROR_SUCCESS; } -static BOOL handle_redirect( struct request *request, DWORD status ) +static DWORD handle_redirect( struct request *request, DWORD status ) { - BOOL ret = FALSE; - DWORD len, len_loc; + DWORD ret, len, len_loc = 0; URL_COMPONENTS uc; struct connect *connect = request->connect; INTERNET_PORT port; - WCHAR *hostname = NULL, *location; + WCHAR *hostname = NULL, *location = NULL; int index; - if (!(location = get_redirect_url( request, &len_loc ))) return FALSE; + if ((ret = get_redirect_url( request, &location, &len_loc ))) return ret; memset( &uc, 0, sizeof(uc) ); uc.dwStructSize = sizeof(uc); @@ -2580,6 +2563,7 @@ { WCHAR *path, *p; + ret = ERROR_OUTOFMEMORY; if (location[0] == '/') { if (!(path = heap_alloc( (len_loc + 1) * sizeof(WCHAR) ))) goto end; @@ -2605,7 +2589,11 @@ { if (uc.nScheme == INTERNET_SCHEME_HTTP && request->hdr.flags & WINHTTP_FLAG_SECURE) { - if (request->hdr.redirect_policy == WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP) goto end; + if (request->hdr.redirect_policy == WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP) + { + ret = ERROR_WINHTTP_REDIRECT_FAILED; + goto end; + } TRACE("redirect from secure page to non-secure page\n"); request->hdr.flags &= ~WINHTTP_FLAG_SECURE; } @@ -2618,7 +2606,11 @@ send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_REDIRECT, location, len_loc + 1 ); len = uc.dwHostNameLength; - if (!(hostname = heap_alloc( (len + 1) * sizeof(WCHAR) ))) goto end; + if (!(hostname = heap_alloc( (len + 1) * sizeof(WCHAR) ))) + { + ret = ERROR_OUTOFMEMORY; + goto end; + } memcpy( hostname, uc.lpszHostName, len * sizeof(WCHAR) ); hostname[len] = 0; @@ -2628,7 +2620,11 @@ heap_free( connect->hostname ); connect->hostname = hostname; connect->hostport = port; - if (!(ret = set_server_for_hostname( connect, hostname, port ))) goto end; + if (!set_server_for_hostname( connect, hostname, port )) + { + ret = ERROR_OUTOFMEMORY; + goto end; + } netconn_close( request->netconn ); request->netconn = NULL; @@ -2638,8 +2634,8 @@ } else heap_free( hostname ); - if (!(ret = add_host_header( request, WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE ))) goto end; - if (!(ret = open_connection( request ))) goto end; + if ((ret = add_host_header( request, WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE ))) goto end; + if ((ret = open_connection( request ))) goto end; heap_free( request->path ); request->path = NULL; @@ -2664,7 +2660,6 @@ request->optional = NULL; request->optional_len = 0; } - ret = TRUE; end: heap_free( location ); @@ -2678,7 +2673,7 @@ DWORD len = ARRAY_SIZE(buf); if (!(request->connect->session->passport_flags & WINHTTP_ENABLE_PASSPORT_AUTH) || - !query_headers( request, WINHTTP_QUERY_WWW_AUTHENTICATE, NULL, buf, &len, NULL )) return FALSE; + query_headers( request, WINHTTP_QUERY_WWW_AUTHENTICATE, NULL, buf, &len, NULL )) return FALSE; if (!wcsnicmp( buf, passportW, ARRAY_SIZE(passportW) ) && (buf[ARRAY_SIZE(passportW)] == ' ' || !buf[ARRAY_SIZE(passportW)])) return TRUE; @@ -2686,13 +2681,13 @@ return FALSE; } -static BOOL handle_passport_redirect( struct request *request ) +static DWORD handle_passport_redirect( struct request *request ) { - DWORD flags = WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE; + DWORD ret, flags = WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE; int i, len = lstrlenW( request->raw_headers ); WCHAR *p = request->raw_headers; - if (!process_header( request, L"Status", L"401", flags, FALSE )) return FALSE; + if ((ret = process_header( request, L"Status", L"401", flags, FALSE ))) return ret; for (i = 0; i < len; i++) { @@ -2703,31 +2698,23 @@ break; } } - return TRUE; + return ERROR_SUCCESS; } -static BOOL receive_response( struct request *request, BOOL async ) +static DWORD receive_response( struct request *request, BOOL async ) { - BOOL ret; - DWORD size, query, status; + DWORD ret, size, query, status; - if (!request->netconn) - { - SetLastError( ERROR_WINHTTP_INCORRECT_HANDLE_STATE ); - return FALSE; - } + if (!request->netconn) return ERROR_WINHTTP_INCORRECT_HANDLE_STATE; netconn_set_timeout( request->netconn, FALSE, request->receive_response_timeout ); for (;;) { - if (!(ret = read_reply( request ))) - { - SetLastError( ERROR_WINHTTP_INVALID_SERVER_RESPONSE ); - break; - } + if ((ret = read_reply( request ))) break; + size = sizeof(DWORD); query = WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER; - if (!(ret = query_headers( request, query, NULL, &status, &size, NULL ))) break; + if ((ret = query_headers( request, query, NULL, &status, &size, NULL ))) break; set_content_length( request, status ); @@ -2742,19 +2729,19 @@ if (request->hdr.disable_flags & WINHTTP_DISABLE_REDIRECTS || request->hdr.redirect_policy == WINHTTP_OPTION_REDIRECT_POLICY_NEVER) break; - if (!(ret = handle_redirect( request, status ))) break; + if ((ret = handle_redirect( request, status ))) break; /* recurse synchronously */ - if ((ret = send_request( request, NULL, 0, request->optional, request->optional_len, 0, 0, FALSE ))) continue; + if (!(ret = send_request( request, NULL, 0, request->optional, request->optional_len, 0, 0, FALSE ))) continue; } else if (status == HTTP_STATUS_DENIED || status == HTTP_STATUS_PROXY_AUTH_REQ) { if (request->hdr.disable_flags & WINHTTP_DISABLE_AUTHENTICATION) break; - if (!handle_authorization( request, status )) break; + if ((ret = handle_authorization( request, status ))) break; /* recurse synchronously */ - if ((ret = send_request( request, NULL, 0, request->optional, request->optional_len, 0, 0, FALSE ))) continue; + if (!(ret = send_request( request, NULL, 0, request->optional, request->optional_len, 0, 0, FALSE ))) continue; } break; } @@ -2764,12 +2751,12 @@ if (async) { - if (ret) send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE, NULL, 0 ); + if (!ret) send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE, NULL, 0 ); else { WINHTTP_ASYNC_RESULT result; result.dwResult = API_RECEIVE_RESPONSE; - result.dwError = GetLastError(); + result.dwError = ret; send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_REQUEST_ERROR, &result, sizeof(result) ); } } @@ -2787,7 +2774,7 @@ */ BOOL WINAPI WinHttpReceiveResponse( HINTERNET hrequest, LPVOID reserved ) { - BOOL ret; + DWORD ret; struct request *request; TRACE("%p, %p\n", hrequest, reserved); @@ -2819,14 +2806,13 @@ ret = receive_response( request, FALSE ); release_object( &request->hdr ); - if (ret) SetLastError( ERROR_SUCCESS ); - return ret; + SetLastError( ret ); + return !ret; } -static BOOL query_data_available( struct request *request, DWORD *available, BOOL async ) +static DWORD query_data_available( struct request *request, DWORD *available, BOOL async ) { - DWORD count = 0; - BOOL ret = TRUE; + DWORD ret = ERROR_SUCCESS, count = 0; if (end_of_read_data( request )) goto done; @@ -2834,7 +2820,7 @@ if (!request->read_chunked && request->netconn) count += netconn_query_data_available( request->netconn ); if (!count) { - if (!(ret = refill_buffer( request, async ))) goto done; + if ((ret = refill_buffer( request, async ))) goto done; count = get_available_data( request ); if (!request->read_chunked && request->netconn) count += netconn_query_data_available( request->netconn ); } @@ -2843,17 +2829,17 @@ TRACE("%u bytes available\n", count); if (async) { - if (ret) send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE, &count, sizeof(count) ); + if (!ret) send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE, &count, sizeof(count) ); else { WINHTTP_ASYNC_RESULT result; result.dwResult = API_QUERY_DATA_AVAILABLE; - result.dwError = GetLastError(); + result.dwError = ret; send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_REQUEST_ERROR, &result, sizeof(result) ); } } - if (ret && available) *available = count; + if (!ret && available) *available = count; return ret; } @@ -2868,7 +2854,7 @@ */ BOOL WINAPI WinHttpQueryDataAvailable( HINTERNET hrequest, LPDWORD available ) { - BOOL ret; + DWORD ret; struct request *request; TRACE("%p, %p\n", hrequest, available); @@ -2901,8 +2887,8 @@ ret = query_data_available( request, available, FALSE ); release_object( &request->hdr ); - if (ret) SetLastError( ERROR_SUCCESS ); - return ret; + SetLastError( ret ); + return !ret; } static void task_read_data( struct task_header *task ) @@ -2916,7 +2902,7 @@ */ BOOL WINAPI WinHttpReadData( HINTERNET hrequest, LPVOID buffer, DWORD to_read, LPDWORD read ) { - BOOL ret; + DWORD ret; struct request *request; TRACE("%p, %p, %d, %p\n", hrequest, buffer, to_read, read); @@ -2951,29 +2937,29 @@ ret = read_data( request, buffer, to_read, read, FALSE ); release_object( &request->hdr ); - if (ret) SetLastError( ERROR_SUCCESS ); - return ret; + SetLastError( ret ); + return !ret; } -static BOOL write_data( struct request *request, const void *buffer, DWORD to_write, DWORD *written, BOOL async ) +static DWORD write_data( struct request *request, const void *buffer, DWORD to_write, DWORD *written, BOOL async ) { - BOOL ret; + DWORD ret; int num_bytes; ret = netconn_send( request->netconn, buffer, to_write, &num_bytes ); if (async) { - if (ret) send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE, &num_bytes, sizeof(num_bytes) ); + if (!ret) send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE, &num_bytes, sizeof(num_bytes) ); else { WINHTTP_ASYNC_RESULT result; result.dwResult = API_WRITE_DATA; - result.dwError = GetLastError(); + result.dwError = ret; send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_REQUEST_ERROR, &result, sizeof(result) ); } } - if (ret && written) *written = num_bytes; + if (!ret && written) *written = num_bytes; return ret; } @@ -2988,7 +2974,7 @@ */ BOOL WINAPI WinHttpWriteData( HINTERNET hrequest, LPCVOID buffer, DWORD to_write, LPDWORD written ) { - BOOL ret; + DWORD ret; struct request *request; TRACE("%p, %p, %d, %p\n", hrequest, buffer, to_write, written); @@ -3023,8 +3009,8 @@ ret = write_data( request, buffer, to_write, written, FALSE ); release_object( &request->hdr ); - if (ret) SetLastError( ERROR_SUCCESS ); - return ret; + SetLastError( ret ); + return !ret; } enum request_state diff -Nru wine-development-5.5/dlls/winhttp/session.c wine-development-5.6/dlls/winhttp/session.c --- wine-development-5.5/dlls/winhttp/session.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winhttp/session.c 2020-04-10 18:54:32.000000000 +0000 @@ -1063,7 +1063,7 @@ if (!types) return TRUE; while (*types) { - if (!process_header( request, L"Accept", *types, flags, TRUE )) return FALSE; + if (process_header( request, L"Accept", *types, flags, TRUE )) return FALSE; types++; } return TRUE; diff -Nru wine-development-5.5/dlls/winhttp/winhttp_private.h wine-development-5.6/dlls/winhttp/winhttp_private.h --- wine-development-5.5/dlls/winhttp/winhttp_private.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winhttp/winhttp_private.h 2020-04-10 18:54:32.000000000 +0000 @@ -256,27 +256,27 @@ void close_connection( struct request * ) DECLSPEC_HIDDEN; void netconn_close( struct netconn * ) DECLSPEC_HIDDEN; -struct netconn *netconn_create( struct hostdata *, const struct sockaddr_storage *, int ) DECLSPEC_HIDDEN; +DWORD netconn_create( struct hostdata *, const struct sockaddr_storage *, int, struct netconn ** ) DECLSPEC_HIDDEN; void netconn_unload( void ) DECLSPEC_HIDDEN; ULONG netconn_query_data_available( struct netconn * ) DECLSPEC_HIDDEN; -BOOL netconn_recv( struct netconn *, void *, size_t, int, int * ) DECLSPEC_HIDDEN; -BOOL netconn_resolve( WCHAR *, INTERNET_PORT, struct sockaddr_storage *, int ) DECLSPEC_HIDDEN; -BOOL netconn_secure_connect( struct netconn *, WCHAR *, DWORD, CredHandle *, BOOL ) DECLSPEC_HIDDEN; -BOOL netconn_send( struct netconn *, const void *, size_t, int * ) DECLSPEC_HIDDEN; +DWORD netconn_recv( struct netconn *, void *, size_t, int, int * ) DECLSPEC_HIDDEN; +DWORD netconn_resolve( WCHAR *, INTERNET_PORT, struct sockaddr_storage *, int ) DECLSPEC_HIDDEN; +DWORD netconn_secure_connect( struct netconn *, WCHAR *, DWORD, CredHandle *, BOOL ) DECLSPEC_HIDDEN; +DWORD netconn_send( struct netconn *, const void *, size_t, int * ) DECLSPEC_HIDDEN; DWORD netconn_set_timeout( struct netconn *, BOOL, int ) DECLSPEC_HIDDEN; BOOL netconn_is_alive( struct netconn * ) DECLSPEC_HIDDEN; const void *netconn_get_certificate( struct netconn * ) DECLSPEC_HIDDEN; int netconn_get_cipher_strength( struct netconn * ) DECLSPEC_HIDDEN; BOOL set_cookies( struct request *, const WCHAR * ) DECLSPEC_HIDDEN; -BOOL add_cookie_headers( struct request * ) DECLSPEC_HIDDEN; -BOOL add_request_headers( struct request *, const WCHAR *, DWORD, DWORD ) DECLSPEC_HIDDEN; +DWORD add_cookie_headers( struct request * ) DECLSPEC_HIDDEN; +DWORD add_request_headers( struct request *, const WCHAR *, DWORD, DWORD ) DECLSPEC_HIDDEN; void destroy_cookies( struct session * ) DECLSPEC_HIDDEN; BOOL set_server_for_hostname( struct connect *, const WCHAR *, INTERNET_PORT ) DECLSPEC_HIDDEN; void destroy_authinfo( struct authinfo * ) DECLSPEC_HIDDEN; void release_host( struct hostdata * ) DECLSPEC_HIDDEN; -BOOL process_header( struct request *, const WCHAR *, const WCHAR *, DWORD, BOOL ) DECLSPEC_HIDDEN; +DWORD process_header( struct request *, const WCHAR *, const WCHAR *, DWORD, BOOL ) DECLSPEC_HIDDEN; extern HRESULT WinHttpRequest_create( void ** ) DECLSPEC_HIDDEN; void release_typelib( void ) DECLSPEC_HIDDEN; diff -Nru wine-development-5.5/dlls/wininet/inflate.c wine-development-5.6/dlls/wininet/inflate.c --- wine-development-5.5/dlls/wininet/inflate.c 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/wininet/inflate.c 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,1916 @@ +/* inflate.c -- zlib decompression + * + * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * Jean-loup Gailly Mark Adler + * jloup@gzip.org madler@alumni.caltech.edu + */ + +#include +#include +#include +#include +#include "winternl.h" +#include "zlib.h" + +#define DEF_WBITS MAX_WBITS +#define zmemcpy memcpy +#define zmemzero(dest, len) memset(dest, 0, len) + +#define Assert(cond,msg) +#define Trace(x) +#define Tracev(x) +#define Tracevv(x) +#define Tracecv(c,x) + +#define GUNZIP + +#define ZALLOC(strm, items, size) \ + (*((strm)->zalloc))((strm)->opaque, (items), (size)) +#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) +#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} + +/* Reverse the bytes in a 32-bit value */ +#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ + (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) + +#define BASE 65521U /* largest prime smaller than 65536 */ +#define NMAX 5552 +/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ + +#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;} +#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); +#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); +#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); +#define DO16(buf) DO8(buf,0); DO8(buf,8); + +#define MOD(a) a %= BASE +#define MOD28(a) a %= BASE +#define MOD63(a) a %= BASE + +static uLong adler32( uLong adler, const Bytef *buf, uInt len ) +{ + unsigned long sum2; + unsigned n; + + /* split Adler-32 into component sums */ + sum2 = (adler >> 16) & 0xffff; + adler &= 0xffff; + + /* in case user likes doing a byte at a time, keep it fast */ + if (len == 1) { + adler += buf[0]; + if (adler >= BASE) + adler -= BASE; + sum2 += adler; + if (sum2 >= BASE) + sum2 -= BASE; + return adler | (sum2 << 16); + } + + /* initial Adler-32 value (deferred check for len == 1 speed) */ + if (buf == Z_NULL) + return 1L; + + /* in case short lengths are provided, keep it somewhat fast */ + if (len < 16) { + while (len--) { + adler += *buf++; + sum2 += adler; + } + if (adler >= BASE) + adler -= BASE; + MOD28(sum2); /* only added so many BASE's */ + return adler | (sum2 << 16); + } + + /* do length NMAX blocks -- requires just one modulo operation */ + while (len >= NMAX) { + len -= NMAX; + n = NMAX / 16; /* NMAX is divisible by 16 */ + do { + DO16(buf); /* 16 sums unrolled */ + buf += 16; + } while (--n); + MOD(adler); + MOD(sum2); + } + + /* do remaining bytes (less than NMAX, still just one modulo) */ + if (len) { /* avoid modulos if none remaining */ + while (len >= 16) { + len -= 16; + DO16(buf); + buf += 16; + } + while (len--) { + adler += *buf++; + sum2 += adler; + } + MOD(adler); + MOD(sum2); + } + + /* return recombined sums */ + return adler | (sum2 << 16); +} + +typedef struct { + unsigned char op; /* operation, extra bits, table bits */ + unsigned char bits; /* bits in this part of the code */ + unsigned short val; /* offset in table or code value */ +} code; + +#define ENOUGH_LENS 852 +#define ENOUGH_DISTS 592 +#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS) + +/* Type of code to build for inflate_table() */ +typedef enum { + CODES, + LENS, + DISTS +} codetype; + +/* Possible inflate modes between inflate() calls */ +typedef enum { + HEAD = 16180, /* i: waiting for magic header */ + FLAGS, /* i: waiting for method and flags (gzip) */ + TIME, /* i: waiting for modification time (gzip) */ + OS, /* i: waiting for extra flags and operating system (gzip) */ + EXLEN, /* i: waiting for extra length (gzip) */ + EXTRA, /* i: waiting for extra bytes (gzip) */ + NAME, /* i: waiting for end of file name (gzip) */ + COMMENT, /* i: waiting for end of comment (gzip) */ + HCRC, /* i: waiting for header crc (gzip) */ + DICTID, /* i: waiting for dictionary check value */ + DICT, /* waiting for inflateSetDictionary() call */ + TYPE, /* i: waiting for type bits, including last-flag bit */ + TYPEDO, /* i: same, but skip check to exit inflate on new block */ + STORED, /* i: waiting for stored size (length and complement) */ + COPY_, /* i/o: same as COPY below, but only first time in */ + COPY, /* i/o: waiting for input or output to copy stored block */ + TABLE, /* i: waiting for dynamic block table lengths */ + LENLENS, /* i: waiting for code length code lengths */ + CODELENS, /* i: waiting for length/lit and distance code lengths */ + LEN_, /* i: same as LEN below, but only first time in */ + LEN, /* i: waiting for length/lit/eob code */ + LENEXT, /* i: waiting for length extra bits */ + DIST, /* i: waiting for distance code */ + DISTEXT, /* i: waiting for distance extra bits */ + MATCH, /* o: waiting for output space to copy string */ + LIT, /* o: waiting for output space to write literal */ + CHECK, /* i: waiting for 32-bit check value */ + LENGTH, /* i: waiting for 32-bit length (gzip) */ + DONE, /* finished check, done -- remain here until reset */ + BAD, /* got a data error -- remain here until reset */ + MEM, /* got an inflate() memory error -- remain here until reset */ + SYNC /* looking for synchronization bytes to restart inflate() */ +} inflate_mode; + +/* State maintained between inflate() calls -- approximately 7K bytes, not + including the allocated sliding window, which is up to 32K bytes. */ +struct inflate_state { + z_streamp strm; /* pointer back to this zlib stream */ + inflate_mode mode; /* current inflate mode */ + int last; /* true if processing last block */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip, + bit 2 true to validate check value */ + int havedict; /* true if dictionary provided */ + int flags; /* gzip header method and flags (0 if zlib) */ + unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ + unsigned long check; /* protected copy of check value */ + unsigned long total; /* protected copy of output count */ + gz_headerp head; /* where to save gzip header information */ + /* sliding window */ + unsigned wbits; /* log base 2 of requested window size */ + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned wnext; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if needed */ + /* bit accumulator */ + unsigned long hold; /* input bit accumulator */ + unsigned bits; /* number of bits in "in" */ + /* for string and stored block copying */ + unsigned length; /* literal or length of data to copy */ + unsigned offset; /* distance back to copy string from */ + /* for table and code decoding */ + unsigned extra; /* extra bits needed */ + /* fixed and dynamic code tables */ + code const FAR *lencode; /* starting table for length/literal codes */ + code const FAR *distcode; /* starting table for distance codes */ + unsigned lenbits; /* index bits for lencode */ + unsigned distbits; /* index bits for distcode */ + /* dynamic table building */ + unsigned ncode; /* number of code length code lengths */ + unsigned nlen; /* number of length code lengths */ + unsigned ndist; /* number of distance code lengths */ + unsigned have; /* number of code lengths in lens[] */ + code FAR *next; /* next available space in codes[] */ + unsigned short lens[320]; /* temporary storage for code lengths */ + unsigned short work[288]; /* work area for code table building */ + code codes[ENOUGH]; /* space for code tables */ + int sane; /* if false, allow invalid distance too far */ + int back; /* bits back of last unprocessed length/lit */ + unsigned was; /* initial length of match */ +}; + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state->mode == LEN + strm->avail_in >= 6 + strm->avail_out >= 258 + start >= strm->avail_out + state->bits < 8 + + On return, state->mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm->avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm->avail_out >= 258 for each loop to avoid checking for + output space. + */ +static void inflate_fast( z_streamp strm, unsigned start ) +{ + struct inflate_state FAR *state; + z_const unsigned char FAR *in; /* local strm->next_in */ + z_const unsigned char FAR *last; /* have enough input while in < last */ + unsigned char FAR *out; /* local strm->next_out */ + unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ + unsigned char FAR *end; /* while out < end, enough space available */ +#ifdef INFLATE_STRICT + unsigned dmax; /* maximum distance from zlib header */ +#endif + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned wnext; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ + unsigned long hold; /* local strm->hold */ + unsigned bits; /* local strm->bits */ + code const FAR *lcode; /* local strm->lencode */ + code const FAR *dcode; /* local strm->distcode */ + unsigned lmask; /* mask for first level of length codes */ + unsigned dmask; /* mask for first level of distance codes */ + code here; /* retrieved table entry */ + unsigned op; /* code bits, operation, extra bits, or */ + /* window position, window bytes to copy */ + unsigned len; /* match length, unused bytes */ + unsigned dist; /* match distance */ + unsigned char FAR *from; /* where to copy match from */ + + /* copy state to local variables */ + state = (struct inflate_state FAR *)strm->state; + in = strm->next_in; + last = in + (strm->avail_in - 5); + out = strm->next_out; + beg = out - (start - strm->avail_out); + end = out + (strm->avail_out - 257); +#ifdef INFLATE_STRICT + dmax = state->dmax; +#endif + wsize = state->wsize; + whave = state->whave; + wnext = state->wnext; + window = state->window; + hold = state->hold; + bits = state->bits; + lcode = state->lencode; + dcode = state->distcode; + lmask = (1U << state->lenbits) - 1; + dmask = (1U << state->distbits) - 1; + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + do { + if (bits < 15) { + hold += (unsigned long)(*in++) << bits; + bits += 8; + hold += (unsigned long)(*in++) << bits; + bits += 8; + } + here = lcode[hold & lmask]; + dolen: + op = (unsigned)(here.bits); + hold >>= op; + bits -= op; + op = (unsigned)(here.op); + if (op == 0) { /* literal */ + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", here.val)); + *out++ = (unsigned char)(here.val); + } + else if (op & 16) { /* length base */ + len = (unsigned)(here.val); + op &= 15; /* number of extra bits */ + if (op) { + if (bits < op) { + hold += (unsigned long)(*in++) << bits; + bits += 8; + } + len += (unsigned)hold & ((1U << op) - 1); + hold >>= op; + bits -= op; + } + Tracevv((stderr, "inflate: length %u\n", len)); + if (bits < 15) { + hold += (unsigned long)(*in++) << bits; + bits += 8; + hold += (unsigned long)(*in++) << bits; + bits += 8; + } + here = dcode[hold & dmask]; + dodist: + op = (unsigned)(here.bits); + hold >>= op; + bits -= op; + op = (unsigned)(here.op); + if (op & 16) { /* distance base */ + dist = (unsigned)(here.val); + op &= 15; /* number of extra bits */ + if (bits < op) { + hold += (unsigned long)(*in++) << bits; + bits += 8; + if (bits < op) { + hold += (unsigned long)(*in++) << bits; + bits += 8; + } + } + dist += (unsigned)hold & ((1U << op) - 1); +#ifdef INFLATE_STRICT + if (dist > dmax) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#endif + hold >>= op; + bits -= op; + Tracevv((stderr, "inflate: distance %u\n", dist)); + op = (unsigned)(out - beg); /* max distance in output */ + if (dist > op) { /* see if copy from window */ + op = dist - op; /* distance back in window */ + if (op > whave) { + if (state->sane) { + strm->msg = + (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + if (len <= op - whave) { + do { + *out++ = 0; + } while (--len); + continue; + } + len -= op - whave; + do { + *out++ = 0; + } while (--op > whave); + if (op == 0) { + from = out - dist; + do { + *out++ = *from++; + } while (--len); + continue; + } +#endif + } + from = window; + if (wnext == 0) { /* very common case */ + from += wsize - op; + if (op < len) { /* some from window */ + len -= op; + do { + *out++ = *from++; + } while (--op); + from = out - dist; /* rest from output */ + } + } + else if (wnext < op) { /* wrap around window */ + from += wsize + wnext - op; + op -= wnext; + if (op < len) { /* some from end of window */ + len -= op; + do { + *out++ = *from++; + } while (--op); + from = window; + if (wnext < len) { /* some from start of window */ + op = wnext; + len -= op; + do { + *out++ = *from++; + } while (--op); + from = out - dist; /* rest from output */ + } + } + } + else { /* contiguous in window */ + from += wnext - op; + if (op < len) { /* some from window */ + len -= op; + do { + *out++ = *from++; + } while (--op); + from = out - dist; /* rest from output */ + } + } + while (len > 2) { + *out++ = *from++; + *out++ = *from++; + *out++ = *from++; + len -= 3; + } + if (len) { + *out++ = *from++; + if (len > 1) + *out++ = *from++; + } + } + else { + from = out - dist; /* copy direct from output */ + do { /* minimum length is three */ + *out++ = *from++; + *out++ = *from++; + *out++ = *from++; + len -= 3; + } while (len > 2); + if (len) { + *out++ = *from++; + if (len > 1) + *out++ = *from++; + } + } + } + else if ((op & 64) == 0) { /* 2nd level distance code */ + here = dcode[here.val + (hold & ((1U << op) - 1))]; + goto dodist; + } + else { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + } + else if ((op & 64) == 0) { /* 2nd level length code */ + here = lcode[here.val + (hold & ((1U << op) - 1))]; + goto dolen; + } + else if (op & 32) { /* end-of-block */ + Tracevv((stderr, "inflate: end of block\n")); + state->mode = TYPE; + break; + } + else { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + } while (in < last && out < end); + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + len = bits >> 3; + in -= len; + bits -= len << 3; + hold &= (1U << bits) - 1; + + /* update state and return */ + strm->next_in = in; + strm->next_out = out; + strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last)); + strm->avail_out = (unsigned)(out < end ? + 257 + (end - out) : 257 - (out - end)); + state->hold = hold; + state->bits = bits; + return; +} + +#define MAXBITS 15 + +static int inflate_table( codetype type, unsigned short FAR *lens, unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work ) +{ + unsigned len; /* a code's length in bits */ + unsigned sym; /* index of code symbols */ + unsigned min, max; /* minimum and maximum code lengths */ + unsigned root; /* number of index bits for root table */ + unsigned curr; /* number of index bits for current table */ + unsigned drop; /* code bits to drop for sub-table */ + int left; /* number of prefix codes available */ + unsigned used; /* code entries in table used */ + unsigned huff; /* Huffman code */ + unsigned incr; /* for incrementing code, index */ + unsigned fill; /* index for replicating entries */ + unsigned low; /* low bits for current root entry */ + unsigned mask; /* mask for low root bits */ + code here; /* table entry for duplication */ + code FAR *next; /* next available space in table */ + const unsigned short FAR *base; /* base value table to use */ + const unsigned short FAR *extra; /* extra bits table to use */ + unsigned match; /* use base and extra for symbol >= match */ + unsigned short count[MAXBITS+1]; /* number of codes of each length */ + unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ + static const unsigned short lbase[31] = { /* Length codes 257..285 base */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; + static const unsigned short lext[31] = { /* Length codes 257..285 extra */ + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202}; + static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577, 0, 0}; + static const unsigned short dext[32] = { /* Distance codes 0..29 extra */ + 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, + 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, + 28, 28, 29, 29, 64, 64}; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for (len = 0; len <= MAXBITS; len++) + count[len] = 0; + for (sym = 0; sym < codes; sym++) + count[lens[sym]]++; + + /* bound code lengths, force root to be within code lengths */ + root = *bits; + for (max = MAXBITS; max >= 1; max--) + if (count[max] != 0) break; + if (root > max) root = max; + if (max == 0) { /* no symbols to code at all */ + here.op = (unsigned char)64; /* invalid code marker */ + here.bits = (unsigned char)1; + here.val = (unsigned short)0; + *(*table)++ = here; /* make a table to force an error */ + *(*table)++ = here; + *bits = 1; + return 0; /* no symbols, but wait for decoding to report error */ + } + for (min = 1; min < max; min++) + if (count[min] != 0) break; + if (root < min) root = min; + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) return -1; /* over-subscribed */ + } + if (left > 0 && (type == CODES || max != 1)) + return -1; /* incomplete set */ + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) + offs[len + 1] = offs[len] + count[len]; + + /* sort symbols by length, by symbol order within each length */ + for (sym = 0; sym < codes; sym++) + if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym; + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftrees.h + for more information. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + switch (type) { + case CODES: + base = extra = work; /* dummy value--not used */ + match = 20; + break; + case LENS: + base = lbase; + extra = lext; + match = 257; + break; + default: /* DISTS */ + base = dbase; + extra = dext; + match = 0; + } + + /* initialize state for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = *table; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = (unsigned)(-1); /* trigger new sub-table when len > root */ + used = 1U << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if ((type == LENS && used > ENOUGH_LENS) || + (type == DISTS && used > ENOUGH_DISTS)) + return 1; + + /* process all codes and make table entries */ + for (;;) { + /* create table entry */ + here.bits = (unsigned char)(len - drop); + if (work[sym] + 1U < match) { + here.op = (unsigned char)0; + here.val = work[sym]; + } + else if (work[sym] >= match) { + here.op = (unsigned char)(extra[work[sym] - match]); + here.val = base[work[sym] - match]; + } + else { + here.op = (unsigned char)(32 + 64); /* end of block */ + here.val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1U << (len - drop); + fill = 1U << curr; + min = fill; /* save offset to next table */ + do { + fill -= incr; + next[(huff >> drop) + fill] = here; + } while (fill != 0); + + /* backwards increment the len-bit code huff */ + incr = 1U << (len - 1); + while (huff & incr) + incr >>= 1; + if (incr != 0) { + huff &= incr - 1; + huff += incr; + } + else + huff = 0; + + /* go to next symbol, update count, len */ + sym++; + if (--(count[len]) == 0) { + if (len == max) break; + len = lens[work[sym]]; + } + + /* create new sub-table if needed */ + if (len > root && (huff & mask) != low) { + /* if first time, transition to sub-tables */ + if (drop == 0) + drop = root; + + /* increment past last table */ + next += min; /* here min is 1 << curr */ + + /* determine length of next table */ + curr = len - drop; + left = (int)(1 << curr); + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) break; + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1U << curr; + if ((type == LENS && used > ENOUGH_LENS) || + (type == DISTS && used > ENOUGH_DISTS)) + return 1; + + /* point entry in root table to sub-table */ + low = huff & mask; + (*table)[low].op = (unsigned char)curr; + (*table)[low].bits = (unsigned char)root; + (*table)[low].val = (unsigned short)(next - *table); + } + } + + /* fill in remaining table entry if code is incomplete (guaranteed to have + at most one remaining entry, since if the code is incomplete, the + maximum code length that was allowed to get this far is one bit) */ + if (huff != 0) { + here.op = (unsigned char)64; /* invalid code marker */ + here.bits = (unsigned char)(len - drop); + here.val = (unsigned short)0; + next[huff] = here; + } + + /* set return parameters */ + *table += used; + *bits = root; + return 0; +} + +static int inflateStateCheck( z_streamp strm ) +{ + struct inflate_state FAR *state; + if (strm == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) + return 1; + state = (struct inflate_state FAR *)strm->state; + if (state == Z_NULL || state->strm != strm || + state->mode < HEAD || state->mode > SYNC) + return 1; + return 0; +} + +static int inflateResetKeep( z_streamp strm ) +{ + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + strm->total_in = strm->total_out = state->total = 0; + strm->msg = Z_NULL; + if (state->wrap) /* to support ill-conceived Java test suite */ + strm->adler = state->wrap & 1; + state->mode = HEAD; + state->last = 0; + state->havedict = 0; + state->dmax = 32768U; + state->head = Z_NULL; + state->hold = 0; + state->bits = 0; + state->lencode = state->distcode = state->next = state->codes; + state->sane = 1; + state->back = -1; + Tracev((stderr, "inflate: reset\n")); + return Z_OK; +} + +static int inflateReset( z_streamp strm ) +{ + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + state->wsize = 0; + state->whave = 0; + state->wnext = 0; + return inflateResetKeep(strm); +} + +static int inflateReset2( z_streamp strm, int windowBits ) +{ + int wrap; + struct inflate_state FAR *state; + + /* get the state */ + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + + /* extract wrap request from windowBits parameter */ + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } + else { + wrap = (windowBits >> 4) + 5; +#ifdef GUNZIP + if (windowBits < 48) + windowBits &= 15; +#endif + } + + /* set number of window bits, free window if different */ + if (windowBits && (windowBits < 8 || windowBits > 15)) + return Z_STREAM_ERROR; + if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) { + ZFREE(strm, state->window); + state->window = Z_NULL; + } + + /* update state and reset the rest of it */ + state->wrap = wrap; + state->wbits = (unsigned)windowBits; + return inflateReset(strm); +} + +int inflateInit2( z_streamp strm, int windowBits ) +{ + int ret; + struct inflate_state FAR *state; + + strm->msg = Z_NULL; /* in case we return an error */ + state = (struct inflate_state FAR *) + ZALLOC(strm, 1, sizeof(struct inflate_state)); + if (state == Z_NULL) return Z_MEM_ERROR; + Tracev((stderr, "inflate: allocated\n")); + strm->state = (struct internal_state FAR *)state; + state->strm = strm; + state->window = Z_NULL; + state->mode = HEAD; /* to pass state test in inflateReset2() */ + ret = inflateReset2(strm, windowBits); + if (ret != Z_OK) { + ZFREE(strm, state); + strm->state = Z_NULL; + } + return ret; +} + +int inflateInit( z_streamp strm ) +{ + return inflateInit2(strm, DEF_WBITS); +} + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +static void fixedtables( struct inflate_state FAR *state ) +{ + static const code lenfix[512] = { + {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, + {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, + {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, + {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, + {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, + {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, + {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, + {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, + {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, + {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, + {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, + {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, + {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, + {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, + {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, + {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, + {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, + {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, + {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, + {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, + {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, + {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, + {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, + {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, + {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, + {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, + {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, + {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, + {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, + {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, + {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, + {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, + {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, + {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, + {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, + {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, + {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, + {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, + {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, + {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, + {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, + {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, + {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, + {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, + {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, + {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, + {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, + {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, + {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, + {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, + {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, + {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, + {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, + {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, + {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, + {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, + {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, + {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, + {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, + {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, + {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, + {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, + {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, + {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, + {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, + {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, + {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, + {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, + {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, + {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, + {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, + {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, + {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, + {0,9,255} + }; + + static const code distfix[32] = { + {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, + {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, + {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, + {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, + {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, + {22,5,193},{64,5,0} + }; + + state->lencode = lenfix; + state->lenbits = 9; + state->distcode = distfix; + state->distbits = 5; +} + +/* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called + when a window is already in use, or when output has been written during this + inflate call, but the end of the deflate stream has not been reached yet. + It is also called to create a window for dictionary data when a dictionary + is loaded. + + Providing output buffers larger than 32K to inflate() should provide a speed + advantage, since only the last 32K of output is copied to the sliding window + upon return from inflate(), and since all distances after the first 32K of + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ +static int updatewindow( z_streamp strm, const Bytef *end, unsigned copy ) +{ + struct inflate_state FAR *state; + unsigned dist; + + state = (struct inflate_state FAR *)strm->state; + + /* if it hasn't been done already, allocate space for the window */ + if (state->window == Z_NULL) { + state->window = (unsigned char FAR *) + ZALLOC(strm, 1U << state->wbits, + sizeof(unsigned char)); + if (state->window == Z_NULL) return 1; + } + + /* if window not in use yet, initialize */ + if (state->wsize == 0) { + state->wsize = 1U << state->wbits; + state->wnext = 0; + state->whave = 0; + } + + /* copy state->wsize or less output bytes into the circular window */ + if (copy >= state->wsize) { + zmemcpy(state->window, end - state->wsize, state->wsize); + state->wnext = 0; + state->whave = state->wsize; + } + else { + dist = state->wsize - state->wnext; + if (dist > copy) dist = copy; + zmemcpy(state->window + state->wnext, end - copy, dist); + copy -= dist; + if (copy) { + zmemcpy(state->window, end - copy, copy); + state->wnext = copy; + state->whave = state->wsize; + } + else { + state->wnext += dist; + if (state->wnext == state->wsize) state->wnext = 0; + if (state->whave < state->wsize) state->whave += dist; + } + } + return 0; +} + +/* Macros for inflate(): */ + +#define crc32(crc,buf,len) RtlComputeCrc32(crc,buf,len) + +/* check function to use adler32() for zlib or crc32() for gzip */ +#ifdef GUNZIP +# define UPDATE(check, buf, len) \ + (state->flags ? crc32(check, buf, len) : adler32(check, buf, len)) +#else +# define UPDATE(check, buf, len) adler32(check, buf, len) +#endif + +/* check macros for header crc */ +#ifdef GUNZIP +# define CRC2(check, word) \ + do { \ + hbuf[0] = (unsigned char)(word); \ + hbuf[1] = (unsigned char)((word) >> 8); \ + check = crc32(check, hbuf, 2); \ + } while (0) + +# define CRC4(check, word) \ + do { \ + hbuf[0] = (unsigned char)(word); \ + hbuf[1] = (unsigned char)((word) >> 8); \ + hbuf[2] = (unsigned char)((word) >> 16); \ + hbuf[3] = (unsigned char)((word) >> 24); \ + check = crc32(check, hbuf, 4); \ + } while (0) +#endif + +/* Load registers with state in inflate() for speed */ +#define LOAD() \ + do { \ + put = strm->next_out; \ + left = strm->avail_out; \ + next = strm->next_in; \ + have = strm->avail_in; \ + hold = state->hold; \ + bits = state->bits; \ + } while (0) + +/* Restore state from registers in inflate() */ +#define RESTORE() \ + do { \ + strm->next_out = put; \ + strm->avail_out = left; \ + strm->next_in = next; \ + strm->avail_in = have; \ + state->hold = hold; \ + state->bits = bits; \ + } while (0) + +/* Clear the input bit accumulator */ +#define INITBITS() \ + do { \ + hold = 0; \ + bits = 0; \ + } while (0) + +/* Get a byte of input into the bit accumulator, or return from inflate() + if there is no input available. */ +#define PULLBYTE() \ + do { \ + if (have == 0) goto inf_leave; \ + have--; \ + hold += (unsigned long)(*next++) << bits; \ + bits += 8; \ + } while (0) + +/* Assure that there are at least n bits in the bit accumulator. If there is + not enough available input to do that, then return from inflate(). */ +#define NEEDBITS(n) \ + do { \ + while (bits < (unsigned)(n)) \ + PULLBYTE(); \ + } while (0) + +/* Return the low n bits of the bit accumulator (n < 16) */ +#define BITS(n) \ + ((unsigned)hold & ((1U << (n)) - 1)) + +/* Remove n bits from the bit accumulator */ +#define DROPBITS(n) \ + do { \ + hold >>= (n); \ + bits -= (unsigned)(n); \ + } while (0) + +/* Remove zero to seven bits as needed to go to a byte boundary */ +#define BYTEBITS() \ + do { \ + hold >>= bits & 7; \ + bits -= bits & 7; \ + } while (0) + +/* + inflate() uses a state machine to process as much input data and generate as + much output data as possible before returning. The state machine is + structured roughly as follows: + + for (;;) switch (state) { + ... + case STATEn: + if (not enough input data or output space to make progress) + return; + ... make progress ... + state = STATEm; + break; + ... + } + + so when inflate() is called again, the same case is attempted again, and + if the appropriate resources are provided, the machine proceeds to the + next state. The NEEDBITS() macro is usually the way the state evaluates + whether it can proceed or should return. NEEDBITS() does the return if + the requested bits are not available. The typical use of the BITS macros + is: + + NEEDBITS(n); + ... do something with BITS(n) ... + DROPBITS(n); + + where NEEDBITS(n) either returns from inflate() if there isn't enough + input left to load n bits into the accumulator, or it continues. BITS(n) + gives the low n bits in the accumulator. When done, DROPBITS(n) drops + the low n bits off the accumulator. INITBITS() clears the accumulator + and sets the number of available bits to zero. BYTEBITS() discards just + enough bits to put the accumulator on a byte boundary. After BYTEBITS() + and a NEEDBITS(8), then BITS(8) would return the next byte in the stream. + + NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return + if there is no input available. The decoding of variable length codes uses + PULLBYTE() directly in order to pull just enough bytes to decode the next + code, and no more. + + Some states loop until they get enough input, making sure that enough + state information is maintained to continue the loop where it left off + if NEEDBITS() returns in the loop. For example, want, need, and keep + would all have to actually be part of the saved state in case NEEDBITS() + returns: + + case STATEw: + while (want < need) { + NEEDBITS(n); + keep[want++] = BITS(n); + DROPBITS(n); + } + state = STATEx; + case STATEx: + + As shown above, if the next state is also the next case, then the break + is omitted. + + A state may also return if there is not enough output space available to + complete that state. Those states are copying stored data, writing a + literal byte, and copying a matching string. + + When returning, a "goto inf_leave" is used to update the total counters, + update the check value, and determine whether any progress has been made + during that inflate() call in order to return the proper return code. + Progress is defined as a change in either strm->avail_in or strm->avail_out. + When there is a window, goto inf_leave will update the window with the last + output written. If a goto inf_leave occurs in the middle of decompression + and there is no window currently, goto inf_leave will create one and copy + output to the window for the next call of inflate(). + + In this implementation, the flush parameter of inflate() only affects the + return code (per zlib.h). inflate() always writes as much as possible to + strm->next_out, given the space available and the provided input--the effect + documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers + the allocation of and copying into a sliding window until necessary, which + provides the effect documented in zlib.h for Z_FINISH when the entire input + stream available. So the only thing the flush parameter actually does is: + when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it + will return Z_BUF_ERROR if it has not reached the end of the stream. + */ + +int inflate( z_streamp strm, int flush ) +{ + struct inflate_state FAR *state; + z_const unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ + unsigned have, left; /* available input and output */ + unsigned long hold; /* bit buffer */ + unsigned bits; /* bits in bit buffer */ + unsigned in, out; /* save starting available input and output */ + unsigned copy; /* number of stored or match bytes to copy */ + unsigned char FAR *from; /* where to copy match bytes from */ + code here; /* current decoding table entry */ + code last; /* parent table entry */ + unsigned len; /* length to copy for repeats, bits to drop */ + int ret; /* return code */ +#ifdef GUNZIP + unsigned char hbuf[4]; /* buffer for gzip header crc calculation */ +#endif + static const unsigned short order[19] = /* permutation of code lengths */ + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + if (inflateStateCheck(strm) || strm->next_out == Z_NULL || + (strm->next_in == Z_NULL && strm->avail_in != 0)) + return Z_STREAM_ERROR; + + state = (struct inflate_state FAR *)strm->state; + if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */ + LOAD(); + in = have; + out = left; + ret = Z_OK; + for (;;) + switch (state->mode) { + case HEAD: + if (state->wrap == 0) { + state->mode = TYPEDO; + break; + } + NEEDBITS(16); +#ifdef GUNZIP + if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */ + if (state->wbits == 0) + state->wbits = 15; + state->check = crc32(0L, Z_NULL, 0); + CRC2(state->check, hold); + INITBITS(); + state->mode = FLAGS; + break; + } + state->flags = 0; /* expect zlib header */ + if (state->head != Z_NULL) + state->head->done = -1; + if (!(state->wrap & 1) || /* check if zlib header allowed */ +#else + if ( +#endif + ((BITS(8) << 8) + (hold >> 8)) % 31) { + strm->msg = (char *)"incorrect header check"; + state->mode = BAD; + break; + } + if (BITS(4) != Z_DEFLATED) { + strm->msg = (char *)"unknown compression method"; + state->mode = BAD; + break; + } + DROPBITS(4); + len = BITS(4) + 8; + if (state->wbits == 0) + state->wbits = len; + if (len > 15 || len > state->wbits) { + strm->msg = (char *)"invalid window size"; + state->mode = BAD; + break; + } + state->dmax = 1U << len; + Tracev((stderr, "inflate: zlib header ok\n")); + strm->adler = state->check = adler32(0L, Z_NULL, 0); + state->mode = hold & 0x200 ? DICTID : TYPE; + INITBITS(); + break; +#ifdef GUNZIP + case FLAGS: + NEEDBITS(16); + state->flags = (int)(hold); + if ((state->flags & 0xff) != Z_DEFLATED) { + strm->msg = (char *)"unknown compression method"; + state->mode = BAD; + break; + } + if (state->flags & 0xe000) { + strm->msg = (char *)"unknown header flags set"; + state->mode = BAD; + break; + } + if (state->head != Z_NULL) + state->head->text = (int)((hold >> 8) & 1); + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC2(state->check, hold); + INITBITS(); + state->mode = TIME; + case TIME: + NEEDBITS(32); + if (state->head != Z_NULL) + state->head->time = hold; + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC4(state->check, hold); + INITBITS(); + state->mode = OS; + case OS: + NEEDBITS(16); + if (state->head != Z_NULL) { + state->head->xflags = (int)(hold & 0xff); + state->head->os = (int)(hold >> 8); + } + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC2(state->check, hold); + INITBITS(); + state->mode = EXLEN; + case EXLEN: + if (state->flags & 0x0400) { + NEEDBITS(16); + state->length = (unsigned)(hold); + if (state->head != Z_NULL) + state->head->extra_len = (unsigned)hold; + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC2(state->check, hold); + INITBITS(); + } + else if (state->head != Z_NULL) + state->head->extra = Z_NULL; + state->mode = EXTRA; + case EXTRA: + if (state->flags & 0x0400) { + copy = state->length; + if (copy > have) copy = have; + if (copy) { + if (state->head != Z_NULL && + state->head->extra != Z_NULL) { + len = state->head->extra_len - state->length; + zmemcpy(state->head->extra + len, next, + len + copy > state->head->extra_max ? + state->head->extra_max - len : copy); + } + if ((state->flags & 0x0200) && (state->wrap & 4)) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + state->length -= copy; + } + if (state->length) goto inf_leave; + } + state->length = 0; + state->mode = NAME; + case NAME: + if (state->flags & 0x0800) { + if (have == 0) goto inf_leave; + copy = 0; + do { + len = (unsigned)(next[copy++]); + if (state->head != Z_NULL && + state->head->name != Z_NULL && + state->length < state->head->name_max) + state->head->name[state->length++] = (Bytef)len; + } while (len && copy < have); + if ((state->flags & 0x0200) && (state->wrap & 4)) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + if (len) goto inf_leave; + } + else if (state->head != Z_NULL) + state->head->name = Z_NULL; + state->length = 0; + state->mode = COMMENT; + case COMMENT: + if (state->flags & 0x1000) { + if (have == 0) goto inf_leave; + copy = 0; + do { + len = (unsigned)(next[copy++]); + if (state->head != Z_NULL && + state->head->comment != Z_NULL && + state->length < state->head->comm_max) + state->head->comment[state->length++] = (Bytef)len; + } while (len && copy < have); + if ((state->flags & 0x0200) && (state->wrap & 4)) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + if (len) goto inf_leave; + } + else if (state->head != Z_NULL) + state->head->comment = Z_NULL; + state->mode = HCRC; + case HCRC: + if (state->flags & 0x0200) { + NEEDBITS(16); + if ((state->wrap & 4) && hold != (state->check & 0xffff)) { + strm->msg = (char *)"header crc mismatch"; + state->mode = BAD; + break; + } + INITBITS(); + } + if (state->head != Z_NULL) { + state->head->hcrc = (int)((state->flags >> 9) & 1); + state->head->done = 1; + } + strm->adler = state->check = crc32(0L, Z_NULL, 0); + state->mode = TYPE; + break; +#endif + case DICTID: + NEEDBITS(32); + strm->adler = state->check = ZSWAP32(hold); + INITBITS(); + state->mode = DICT; + case DICT: + if (state->havedict == 0) { + RESTORE(); + return Z_NEED_DICT; + } + strm->adler = state->check = adler32(0L, Z_NULL, 0); + state->mode = TYPE; + case TYPE: + if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; + case TYPEDO: + if (state->last) { + BYTEBITS(); + state->mode = CHECK; + break; + } + NEEDBITS(3); + state->last = BITS(1); + DROPBITS(1); + switch (BITS(2)) { + case 0: /* stored block */ + Tracev((stderr, "inflate: stored block%s\n", + state->last ? " (last)" : "")); + state->mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + Tracev((stderr, "inflate: fixed codes block%s\n", + state->last ? " (last)" : "")); + state->mode = LEN_; /* decode codes */ + if (flush == Z_TREES) { + DROPBITS(2); + goto inf_leave; + } + break; + case 2: /* dynamic block */ + Tracev((stderr, "inflate: dynamic codes block%s\n", + state->last ? " (last)" : "")); + state->mode = TABLE; + break; + case 3: + strm->msg = (char *)"invalid block type"; + state->mode = BAD; + } + DROPBITS(2); + break; + case STORED: + BYTEBITS(); /* go to byte boundary */ + NEEDBITS(32); + if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { + strm->msg = (char *)"invalid stored block lengths"; + state->mode = BAD; + break; + } + state->length = (unsigned)hold & 0xffff; + Tracev((stderr, "inflate: stored length %u\n", + state->length)); + INITBITS(); + state->mode = COPY_; + if (flush == Z_TREES) goto inf_leave; + case COPY_: + state->mode = COPY; + case COPY: + copy = state->length; + if (copy) { + if (copy > have) copy = have; + if (copy > left) copy = left; + if (copy == 0) goto inf_leave; + zmemcpy(put, next, copy); + have -= copy; + next += copy; + left -= copy; + put += copy; + state->length -= copy; + break; + } + Tracev((stderr, "inflate: stored end\n")); + state->mode = TYPE; + break; + case TABLE: + NEEDBITS(14); + state->nlen = BITS(5) + 257; + DROPBITS(5); + state->ndist = BITS(5) + 1; + DROPBITS(5); + state->ncode = BITS(4) + 4; + DROPBITS(4); +#ifndef PKZIP_BUG_WORKAROUND + if (state->nlen > 286 || state->ndist > 30) { + strm->msg = (char *)"too many length or distance symbols"; + state->mode = BAD; + break; + } +#endif + Tracev((stderr, "inflate: table sizes ok\n")); + state->have = 0; + state->mode = LENLENS; + case LENLENS: + while (state->have < state->ncode) { + NEEDBITS(3); + state->lens[order[state->have++]] = (unsigned short)BITS(3); + DROPBITS(3); + } + while (state->have < 19) + state->lens[order[state->have++]] = 0; + state->next = state->codes; + state->lencode = (const code FAR *)(state->next); + state->lenbits = 7; + ret = inflate_table(CODES, state->lens, 19, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid code lengths set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: code lengths ok\n")); + state->have = 0; + state->mode = CODELENS; + case CODELENS: + while (state->have < state->nlen + state->ndist) { + for (;;) { + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if (here.val < 16) { + DROPBITS(here.bits); + state->lens[state->have++] = here.val; + } + else { + if (here.val == 16) { + NEEDBITS(here.bits + 2); + DROPBITS(here.bits); + if (state->have == 0) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + len = state->lens[state->have - 1]; + copy = 3 + BITS(2); + DROPBITS(2); + } + else if (here.val == 17) { + NEEDBITS(here.bits + 3); + DROPBITS(here.bits); + len = 0; + copy = 3 + BITS(3); + DROPBITS(3); + } + else { + NEEDBITS(here.bits + 7); + DROPBITS(here.bits); + len = 0; + copy = 11 + BITS(7); + DROPBITS(7); + } + if (state->have + copy > state->nlen + state->ndist) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + while (copy--) + state->lens[state->have++] = (unsigned short)len; + } + } + + /* handle error breaks in while */ + if (state->mode == BAD) break; + + /* check for end-of-block code (better have one) */ + if (state->lens[256] == 0) { + strm->msg = (char *)"invalid code -- missing end-of-block"; + state->mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ + state->next = state->codes; + state->lencode = (const code FAR *)(state->next); + state->lenbits = 9; + ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid literal/lengths set"; + state->mode = BAD; + break; + } + state->distcode = (const code FAR *)(state->next); + state->distbits = 6; + ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, + &(state->next), &(state->distbits), state->work); + if (ret) { + strm->msg = (char *)"invalid distances set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: codes ok\n")); + state->mode = LEN_; + if (flush == Z_TREES) goto inf_leave; + case LEN_: + state->mode = LEN; + case LEN: + if (have >= 6 && left >= 258) { + RESTORE(); + inflate_fast(strm, out); + LOAD(); + if (state->mode == TYPE) + state->back = -1; + break; + } + state->back = 0; + for (;;) { + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if (here.op && (here.op & 0xf0) == 0) { + last = here; + for (;;) { + here = state->lencode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + here.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + state->back += last.bits; + } + DROPBITS(here.bits); + state->back += here.bits; + state->length = (unsigned)here.val; + if ((int)(here.op) == 0) { + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", here.val)); + state->mode = LIT; + break; + } + if (here.op & 32) { + Tracevv((stderr, "inflate: end of block\n")); + state->back = -1; + state->mode = TYPE; + break; + } + if (here.op & 64) { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + state->extra = (unsigned)(here.op) & 15; + state->mode = LENEXT; + case LENEXT: + if (state->extra) { + NEEDBITS(state->extra); + state->length += BITS(state->extra); + DROPBITS(state->extra); + state->back += state->extra; + } + Tracevv((stderr, "inflate: length %u\n", state->length)); + state->was = state->length; + state->mode = DIST; + case DIST: + for (;;) { + here = state->distcode[BITS(state->distbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if ((here.op & 0xf0) == 0) { + last = here; + for (;;) { + here = state->distcode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + here.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + state->back += last.bits; + } + DROPBITS(here.bits); + state->back += here.bits; + if (here.op & 64) { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + state->offset = (unsigned)here.val; + state->extra = (unsigned)(here.op) & 15; + state->mode = DISTEXT; + case DISTEXT: + if (state->extra) { + NEEDBITS(state->extra); + state->offset += BITS(state->extra); + DROPBITS(state->extra); + state->back += state->extra; + } +#ifdef INFLATE_STRICT + if (state->offset > state->dmax) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#endif + Tracevv((stderr, "inflate: distance %u\n", state->offset)); + state->mode = MATCH; + case MATCH: + if (left == 0) goto inf_leave; + copy = out - left; + if (state->offset > copy) { /* copy from window */ + copy = state->offset - copy; + if (copy > state->whave) { + if (state->sane) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + Trace((stderr, "inflate.c too far\n")); + copy -= state->whave; + if (copy > state->length) copy = state->length; + if (copy > left) copy = left; + left -= copy; + state->length -= copy; + do { + *put++ = 0; + } while (--copy); + if (state->length == 0) state->mode = LEN; + break; +#endif + } + if (copy > state->wnext) { + copy -= state->wnext; + from = state->window + (state->wsize - copy); + } + else + from = state->window + (state->wnext - copy); + if (copy > state->length) copy = state->length; + } + else { /* copy from output */ + from = put - state->offset; + copy = state->length; + } + if (copy > left) copy = left; + left -= copy; + state->length -= copy; + do { + *put++ = *from++; + } while (--copy); + if (state->length == 0) state->mode = LEN; + break; + case LIT: + if (left == 0) goto inf_leave; + *put++ = (unsigned char)(state->length); + left--; + state->mode = LEN; + break; + case CHECK: + if (state->wrap) { + NEEDBITS(32); + out -= left; + strm->total_out += out; + state->total += out; + if ((state->wrap & 4) && out) + strm->adler = state->check = + UPDATE(state->check, put - out, out); + out = left; + if ((state->wrap & 4) && ( +#ifdef GUNZIP + state->flags ? hold : +#endif + ZSWAP32(hold)) != state->check) { + strm->msg = (char *)"incorrect data check"; + state->mode = BAD; + break; + } + INITBITS(); + Tracev((stderr, "inflate: check matches trailer\n")); + } +#ifdef GUNZIP + state->mode = LENGTH; + case LENGTH: + if (state->wrap && state->flags) { + NEEDBITS(32); + if (hold != (state->total & 0xffffffffUL)) { + strm->msg = (char *)"incorrect length check"; + state->mode = BAD; + break; + } + INITBITS(); + Tracev((stderr, "inflate: length matches trailer\n")); + } +#endif + state->mode = DONE; + case DONE: + ret = Z_STREAM_END; + goto inf_leave; + case BAD: + ret = Z_DATA_ERROR; + goto inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + default: + return Z_STREAM_ERROR; + } + + /* + Return from inflate(), updating the total counts and the check value. + If there was no progress during the inflate() call, return a buffer + error. Call updatewindow() to create and/or update the window state. + Note: a memory error from inflate() is non-recoverable. + */ + inf_leave: + RESTORE(); + if (state->wsize || (out != strm->avail_out && state->mode < BAD && + (state->mode < CHECK || flush != Z_FINISH))) + if (updatewindow(strm, strm->next_out, out - strm->avail_out)) { + state->mode = MEM; + return Z_MEM_ERROR; + } + in -= strm->avail_in; + out -= strm->avail_out; + strm->total_in += in; + strm->total_out += out; + state->total += out; + if ((state->wrap & 4) && out) + strm->adler = state->check = + UPDATE(state->check, strm->next_out - out, out); + strm->data_type = (int)state->bits + (state->last ? 64 : 0) + + (state->mode == TYPE ? 128 : 0) + + (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0); + if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) + ret = Z_BUF_ERROR; + return ret; +} + +int inflateEnd(z_streamp strm) +{ + struct inflate_state FAR *state; + if (inflateStateCheck(strm)) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (state->window != Z_NULL) ZFREE(strm, state->window); + ZFREE(strm, strm->state); + strm->state = Z_NULL; + Tracev((stderr, "inflate: end\n")); + return Z_OK; +} diff -Nru wine-development-5.5/dlls/wininet/zlib.h wine-development-5.6/dlls/wininet/zlib.h --- wine-development-5.5/dlls/wininet/zlib.h 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/dlls/wininet/zlib.h 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,162 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + * version 1.2.11, January 15th, 2017 + * + * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * Jean-loup Gailly Mark Adler + * jloup@gzip.org madler@alumni.caltech.edu + */ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "windef.h" + +#undef FAR +#define FAR +#define z_const const + +typedef unsigned char Byte; /* 8 bits */ +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +typedef Byte FAR Bytef; +typedef void FAR *voidpf; + +typedef char FAR charf; +typedef int FAR intf; + +typedef unsigned char uch; +typedef uch FAR uchf; +typedef unsigned short ush; +typedef ush FAR ushf; +typedef unsigned long ulg; + +typedef voidpf (*alloc_func)(voidpf opaque, uInt items, uInt size); +typedef void (*free_func)(voidpf opaque, voidpf address); + +struct internal_state; + +typedef struct z_stream_s { + z_const Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total number of input bytes read so far */ + + Bytef *next_out; /* next output byte will go here */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total number of bytes output so far */ + + z_const char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text + for deflate, or the decoding state for inflate */ + uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +#define Z_TREES 6 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field for deflate() */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define MAX_WBITS 15 /* 32K LZ77 window */ +#define MAX_MEM_LEVEL 9 + +extern int inflateInit(z_streamp strm) DECLSPEC_HIDDEN; +extern int inflateInit2(z_streamp strm, int windowBits) DECLSPEC_HIDDEN; +extern int inflate(z_streamp strm, int flush) DECLSPEC_HIDDEN; +extern int inflateEnd(z_streamp strm) DECLSPEC_HIDDEN; + +extern int deflateInit(z_streamp strm, int level) DECLSPEC_HIDDEN; +extern int deflateInit2(z_streamp strm, int level, int method, int windowBits, int memLevel, int strategy) DECLSPEC_HIDDEN; +extern int deflate(z_streamp strm, int flush) DECLSPEC_HIDDEN; +extern int deflateEnd(z_streamp strm) DECLSPEC_HIDDEN; + +#endif /* ZLIB_H */ diff -Nru wine-development-5.5/dlls/winmm/mmio.c wine-development-5.6/dlls/winmm/mmio.c --- wine-development-5.5/dlls/winmm/mmio.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winmm/mmio.c 2020-04-10 18:54:32.000000000 +0000 @@ -48,6 +48,40 @@ static WINE_MMIO *MMIOList; +/* From kernel32 */ +static HANDLE create_file_OF( LPCSTR path, INT mode ) +{ + DWORD access, sharing, creation; + + if (mode & OF_CREATE) + { + creation = CREATE_ALWAYS; + access = GENERIC_READ | GENERIC_WRITE; + } + else + { + creation = OPEN_EXISTING; + switch(mode & 0x03) + { + case OF_READ: access = GENERIC_READ; break; + case OF_WRITE: access = GENERIC_WRITE; break; + case OF_READWRITE: access = GENERIC_READ | GENERIC_WRITE; break; + default: access = 0; break; + } + } + + switch(mode & 0x70) + { + case OF_SHARE_EXCLUSIVE: sharing = 0; break; + case OF_SHARE_DENY_WRITE: sharing = FILE_SHARE_READ; break; + case OF_SHARE_DENY_READ: sharing = FILE_SHARE_WRITE; break; + case OF_SHARE_DENY_NONE: + case OF_SHARE_COMPAT: + default: sharing = FILE_SHARE_READ | FILE_SHARE_WRITE; break; + } + return CreateFileA( path, access, sharing, NULL, creation, FILE_ATTRIBUTE_NORMAL, 0 ); +} + /************************************************************************** * mmioDosIOProc [internal] */ @@ -76,9 +110,14 @@ /* if filename NULL, assume open file handle in adwInfo[0] */ if (szFileName) { - OFSTRUCT ofs; - lpmmioinfo->adwInfo[0] = OpenFile(szFileName, &ofs, lpmmioinfo->dwFlags & 0xFFFF); - } + HANDLE file; + + file = create_file_OF( szFileName, lpmmioinfo->dwFlags ); + if (file != INVALID_HANDLE_VALUE) + lpmmioinfo->adwInfo[0] = HandleToLong(file); + else + lpmmioinfo->adwInfo[0] = HFILE_ERROR; + } if (lpmmioinfo->adwInfo[0] == HFILE_ERROR) ret = MMIOERR_FILENOTFOUND; } diff -Nru wine-development-5.5/dlls/winmm/tests/mmio.c wine-development-5.6/dlls/winmm/tests/mmio.c --- wine-development-5.5/dlls/winmm/tests/mmio.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winmm/tests/mmio.c 2020-04-10 18:54:32.000000000 +0000 @@ -471,6 +471,58 @@ mmioClose(hmmio, 0); } +static void test_mmioOpen_create(void) +{ + HMMIO hmmio; + HANDLE handle; + WCHAR cwd[MAX_PATH], temp_dir[MAX_PATH]; + /* According to docs, filename must be no more than 128 bytes, but it will + * actually allow longer than that. */ + WCHAR filename[] = L"very_long_filename_" + L"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + L"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + L"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; + + GetCurrentDirectoryW(ARRAY_SIZE(cwd), cwd); + GetTempPathW(ARRAY_SIZE(temp_dir), temp_dir); + SetCurrentDirectoryW(temp_dir); + + DeleteFileW(filename); + + /* open with MMIO_DENYNONE */ + hmmio = mmioOpenW(filename, NULL, MMIO_CREATE | MMIO_WRITE | MMIO_DENYNONE); + ok(hmmio != NULL, "mmioOpen failed\n"); + + /* MMIO_DENYNONE lets us open it here, too */ + handle = CreateFileW(filename, GENERIC_READ, + FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + ok(handle != INVALID_HANDLE_VALUE, "Couldn't open non-exclusive file\n"); + CloseHandle(handle); + + mmioClose(hmmio, 0); + + DeleteFileW(filename); + + /* open with MMIO_EXCLUSIVE */ + hmmio = mmioOpenW(filename, NULL, MMIO_CREATE | MMIO_WRITE | MMIO_EXCLUSIVE); + ok(hmmio != NULL, "mmioOpen failed\n"); + + /* should fail due to MMIO_EXCLUSIVE */ + handle = CreateFileW(filename, GENERIC_READ, + FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + ok(handle == INVALID_HANDLE_VALUE, "Opening exclusive file should have failed\n"); + if(handle != INVALID_HANDLE_VALUE) + CloseHandle(handle); + + mmioClose(hmmio, 0); + + DeleteFileW(filename); + + SetCurrentDirectoryW(cwd); +} + static void test_mmioSetBuffer(char *fname) { char buf[256]; @@ -1016,6 +1068,7 @@ test_mmioDescend(fname); test_mmioOpen(NULL); test_mmioOpen(fname); + test_mmioOpen_create(); test_mmioSetBuffer(NULL); test_mmioSetBuffer(fname); test_mmioOpen_fourcc(); diff -Nru wine-development-5.5/dlls/winnls.dll16/Makefile.in wine-development-5.6/dlls/winnls.dll16/Makefile.in --- wine-development-5.5/dlls/winnls.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winnls.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = winnls.dll16 IMPORTS = winnls32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,winnls32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,winnls32.dll C_SRCS = winnls.c diff -Nru wine-development-5.5/dlls/winsock.dll16/Makefile.in wine-development-5.6/dlls/winsock.dll16/Makefile.in --- wine-development-5.5/dlls/winsock.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winsock.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,6 +1,6 @@ MODULE = winsock.dll16 IMPORTS = ws2_32 DELAYIMPORTS = user32 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,ws2_32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,ws2_32.dll C_SRCS = socket.c diff -Nru wine-development-5.5/dlls/winspool.drv/info.c wine-development-5.6/dlls/winspool.drv/info.c --- wine-development-5.5/dlls/winspool.drv/info.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/winspool.drv/info.c 2020-04-10 18:54:32.000000000 +0000 @@ -107,7 +107,6 @@ #define NONAMELESSSTRUCT #define NONAMELESSUNION -#include "wine/library.h" #include "windef.h" #include "winbase.h" #include "winuser.h" @@ -887,13 +886,13 @@ static void load_cups(void) { - cupshandle = wine_dlopen( SONAME_LIBCUPS, RTLD_NOW, NULL, 0 ); + cupshandle = dlopen( SONAME_LIBCUPS, RTLD_NOW ); if (!cupshandle) return; TRACE("%p: %s loaded\n", cupshandle, SONAME_LIBCUPS); #define DO_FUNC(x) \ - p##x = wine_dlsym( cupshandle, #x, NULL, 0 ); \ + p##x = dlsym( cupshandle, #x ); \ if (!p##x) \ { \ ERR("failed to load symbol %s\n", #x); \ @@ -902,7 +901,7 @@ } CUPS_FUNCS; #undef DO_FUNC -#define DO_FUNC(x) p##x = wine_dlsym( cupshandle, #x, NULL, 0 ) +#define DO_FUNC(x) p##x = dlsym( cupshandle, #x ) CUPS_OPT_FUNCS; #undef DO_FUNC } diff -Nru wine-development-5.5/dlls/wintab.dll16/Makefile.in wine-development-5.6/dlls/wintab.dll16/Makefile.in --- wine-development-5.5/dlls/wintab.dll16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wintab.dll16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,4 +1,4 @@ MODULE = wintab.dll16 -EXTRADLLFLAGS = -m16 -mno-cygwin -Wb,--main-module,wintab32.dll +EXTRADLLFLAGS = -m16 -Wb,--main-module,wintab32.dll C_SRCS = wintab.c diff -Nru wine-development-5.5/dlls/wldap32/add.c wine-development-5.6/dlls/wldap32/add.c --- wine-development-5.5/dlls/wldap32/add.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/add.c 2020-04-10 18:54:32.000000000 +0000 @@ -120,7 +120,7 @@ if (!attrsU) goto exit; } - ret = ldap_add_ext( ld, dn ? dnU : "", attrs ? attrsU : nullattrs, NULL, NULL, &msg ); + ret = ldap_add_ext( ld->ld, dn ? dnU : "", attrs ? attrsU : nullattrs, NULL, NULL, &msg ); if (ret == LDAP_SUCCESS) ret = msg; @@ -242,7 +242,7 @@ if (!clientctrlsU) goto exit; } - ret = map_error( ldap_add_ext( ld, dn ? dnU : "", attrs ? attrsU : nullattrs, serverctrlsU, + ret = map_error( ldap_add_ext( ld->ld, dn ? dnU : "", attrs ? attrsU : nullattrs, serverctrlsU, clientctrlsU, message ? (int *)message : &dummy )); exit: @@ -359,7 +359,7 @@ if (!clientctrlsU) goto exit; } - ret = map_error( ldap_add_ext_s( ld, dn ? dnU : "", attrs ? attrsU : nullattrs, + ret = map_error( ldap_add_ext_s( ld->ld, dn ? dnU : "", attrs ? attrsU : nullattrs, serverctrlsU, clientctrlsU )); exit: @@ -446,7 +446,7 @@ if (!attrsU) goto exit; } - ret = map_error( ldap_add_ext_s( ld, dn ? dnU : "", attrs ? attrsU : nullattrs, NULL, NULL )); + ret = map_error( ldap_add_ext_s( ld->ld, dn ? dnU : "", attrs ? attrsU : nullattrs, NULL, NULL )); exit: strfreeU( dnU ); diff -Nru wine-development-5.5/dlls/wldap32/bind.c wine-development-5.6/dlls/wldap32/bind.c --- wine-development-5.5/dlls/wldap32/bind.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/bind.c 2020-04-10 18:54:32.000000000 +0000 @@ -123,7 +123,7 @@ pwd.bv_val = credU; } - ret = ldap_sasl_bind( ld, dnU, LDAP_SASL_SIMPLE, &pwd, NULL, NULL, &msg ); + ret = ldap_sasl_bind( ld->ld, dnU, LDAP_SASL_SIMPLE, &pwd, NULL, NULL, &msg ); if (ret == LDAP_SUCCESS) ret = msg; @@ -179,7 +179,7 @@ return ret; } -#ifdef HAVE_LDAP_H +#ifdef HAVE_LDAP static int sasl_interact( LDAP *ld, unsigned flags, void *defaults, void *interact ) { @@ -219,7 +219,7 @@ #endif /* HAVE_SASL_SASL_H */ } -#endif /* HAVE_LDAP_H */ +#endif /* HAVE_LDAP */ /*********************************************************************** * ldap_bind_sW (WLDAP32.@) @@ -265,7 +265,7 @@ pwd.bv_val = credU; } - ret = map_error( ldap_sasl_bind_s( ld, dnU, LDAP_SASL_SIMPLE, &pwd, NULL, NULL, NULL )); + ret = map_error( ldap_sasl_bind_s( ld->ld, dnU, LDAP_SASL_SIMPLE, &pwd, NULL, NULL, NULL )); } else if (method == WLDAP32_LDAP_AUTH_NEGOTIATE) { @@ -292,7 +292,7 @@ idU.Password = (unsigned char *)strnWtoU( id->Password, id->PasswordLength, &idU.PasswordLength ); } - ret = map_error( ldap_sasl_interactive_bind_s( ld, + ret = map_error( ldap_sasl_interactive_bind_s( ld->ld, NULL /* server will ignore DN anyway */, NULL /* query supportedSASLMechanisms */, NULL, NULL, LDAP_SASL_QUIET, sasl_interact, &idU )); @@ -429,7 +429,7 @@ credU.bv_len = cred->bv_len; credU.bv_val = cred->bv_val; - ret = map_error( ldap_sasl_bind( ld, dnU, mechanismU, &credU, + ret = map_error( ldap_sasl_bind( ld->ld, dnU, mechanismU, &credU, serverctrlsU, clientctrlsU, message )); exit: @@ -549,7 +549,7 @@ credU.bv_len = cred->bv_len; credU.bv_val = cred->bv_val; - ret = map_error( ldap_sasl_bind_s( ld, dnU, mechanismU, &credU, + ret = map_error( ldap_sasl_bind_s( ld->ld, dnU, mechanismU, &credU, serverctrlsU, clientctrlsU, (struct berval **)serverdata )); exit: @@ -641,7 +641,7 @@ pwd.bv_val = passwdU; } - ret = ldap_sasl_bind( ld, dnU, LDAP_SASL_SIMPLE, &pwd, NULL, NULL, &msg ); + ret = ldap_sasl_bind( ld->ld, dnU, LDAP_SASL_SIMPLE, &pwd, NULL, NULL, &msg ); if (ret == LDAP_SUCCESS) ret = msg; @@ -734,7 +734,7 @@ pwd.bv_val = passwdU; } - ret = map_error( ldap_sasl_bind_s( ld, dnU, LDAP_SASL_SIMPLE, &pwd, NULL, NULL, NULL )); + ret = map_error( ldap_sasl_bind_s( ld->ld, dnU, LDAP_SASL_SIMPLE, &pwd, NULL, NULL, NULL )); exit: strfreeU( dnU ); @@ -764,7 +764,12 @@ TRACE( "(%p)\n", ld ); if (ld) - ret = map_error( ldap_unbind_ext( ld, NULL, NULL )); + { + ret = map_error( ldap_unbind_ext( ld->ld, NULL, NULL )); + if ( ld->ld_server_ctrls ) + ldap_value_free_len( ld->ld_server_ctrls ); + heap_free( ld ); + } else ret = WLDAP32_LDAP_PARAM_ERROR; @@ -792,7 +797,12 @@ TRACE( "(%p)\n", ld ); if (ld) - ret = map_error( ldap_unbind_ext_s( ld, NULL, NULL )); + { + ret = map_error( ldap_unbind_ext_s( ld->ld, NULL, NULL )); + if ( ld->ld_server_ctrls ) + ldap_value_free_len( ld->ld_server_ctrls ); + heap_free( ld ); + } else ret = WLDAP32_LDAP_PARAM_ERROR; diff -Nru wine-development-5.5/dlls/wldap32/compare.c wine-development-5.6/dlls/wldap32/compare.c --- wine-development-5.5/dlls/wldap32/compare.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/compare.c 2020-04-10 18:54:32.000000000 +0000 @@ -126,7 +126,7 @@ val.bv_val = valueU; } - ret = ldap_compare_ext( ld, dn ? dnU : "", attrU, &val, NULL, NULL, &msg ); + ret = ldap_compare_ext( ld->ld, dn ? dnU : "", attrU, &val, NULL, NULL, &msg ); if (ret == LDAP_SUCCESS) ret = msg; @@ -268,7 +268,7 @@ if (!clientctrlsU) goto exit; } - ret = map_error( ldap_compare_ext( ld, dn ? dnU : "", attrU, data ? (struct berval *)data : &val, + ret = map_error( ldap_compare_ext( ld->ld, dn ? dnU : "", attrU, data ? (struct berval *)data : &val, serverctrlsU, clientctrlsU, (int *)message )); exit: @@ -404,7 +404,7 @@ if (!clientctrlsU) goto exit; } - ret = map_error( ldap_compare_ext_s( ld, dn ? dnU : "", attr ? attrU : "", + ret = map_error( ldap_compare_ext_s( ld->ld, dn ? dnU : "", attr ? attrU : "", data ? (struct berval *)data : &val, serverctrlsU, clientctrlsU )); @@ -506,7 +506,7 @@ val.bv_val = valueU; } - ret = map_error( ldap_compare_ext_s( ld, dn ? dnU : "", attr ? attrU : "", &val, NULL, NULL )); + ret = map_error( ldap_compare_ext_s( ld->ld, dn ? dnU : "", attr ? attrU : "", &val, NULL, NULL )); exit: strfreeU( dnU ); diff -Nru wine-development-5.5/dlls/wldap32/control.c wine-development-5.6/dlls/wldap32/control.c --- wine-development-5.5/dlls/wldap32/control.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/control.c 2020-04-10 18:54:32.000000000 +0000 @@ -189,7 +189,7 @@ sortkeyU = sortkeyarrayWtoU( sortkey ); if (!sortkeyU) return WLDAP32_LDAP_NO_MEMORY; - ret = map_error( ldap_create_sort_control( ld, sortkeyU, critical, &controlU )); + ret = map_error( ldap_create_sort_control( ld->ld, sortkeyU, critical, &controlU )); *control = controlUtoW( controlU ); if (!*control) ret = WLDAP32_LDAP_NO_MEMORY; @@ -263,7 +263,7 @@ if (!ld || !control) return ~0u; - ret = map_error( ldap_create_vlv_control( ld, (LDAPVLVInfo *)info, &controlU )); + ret = map_error( ldap_create_vlv_control( ld->ld, (LDAPVLVInfo *)info, &controlU )); if (ret == WLDAP32_LDAP_SUCCESS) { diff -Nru wine-development-5.5/dlls/wldap32/delete.c wine-development-5.6/dlls/wldap32/delete.c --- wine-development-5.5/dlls/wldap32/delete.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/delete.c 2020-04-10 18:54:32.000000000 +0000 @@ -99,7 +99,7 @@ if (!dnU) return WLDAP32_LDAP_NO_MEMORY; } - ret = ldap_delete_ext( ld, dn ? dnU : "", NULL, NULL, &msg ); + ret = ldap_delete_ext( ld->ld, dn ? dnU : "", NULL, NULL, &msg ); if (ret == LDAP_SUCCESS) ret = msg; @@ -206,7 +206,7 @@ if (!clientctrlsU) goto exit; } - ret = map_error( ldap_delete_ext( ld, dn ? dnU : "", serverctrlsU, clientctrlsU, + ret = map_error( ldap_delete_ext( ld->ld, dn ? dnU : "", serverctrlsU, clientctrlsU, message ? (int *)message : &dummy )); exit: @@ -305,7 +305,7 @@ if (!clientctrlsU) goto exit; } - ret = map_error( ldap_delete_ext_s( ld, dn ? dnU : "", serverctrlsU, clientctrlsU )); + ret = map_error( ldap_delete_ext_s( ld->ld, dn ? dnU : "", serverctrlsU, clientctrlsU )); exit: strfreeU( dnU ); @@ -371,7 +371,7 @@ if (!dnU) return WLDAP32_LDAP_NO_MEMORY; } - ret = map_error( ldap_delete_ext_s( ld, dn ? dnU : "", NULL, NULL )); + ret = map_error( ldap_delete_ext_s( ld->ld, dn ? dnU : "", NULL, NULL )); strfreeU( dnU ); #endif diff -Nru wine-development-5.5/dlls/wldap32/dn.c wine-development-5.6/dlls/wldap32/dn.c --- wine-development-5.5/dlls/wldap32/dn.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/dn.c 2020-04-10 18:54:32.000000000 +0000 @@ -214,7 +214,7 @@ if (!ld || !entry) return NULL; - retU = ldap_get_dn( ld, entry ); + retU = ldap_get_dn( ld->ld, entry ); ret = strUtoW( retU ); ldap_memfree( retU ); diff -Nru wine-development-5.5/dlls/wldap32/error.c wine-development-5.6/dlls/wldap32/error.c --- wine-development-5.5/dlls/wldap32/error.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/error.c 2020-04-10 18:54:32.000000000 +0000 @@ -159,7 +159,7 @@ if (!ld || !res) return ~0u; - ret = ldap_parse_result( ld, res, &error, NULL, NULL, NULL, NULL, free ); + ret = ldap_parse_result( ld->ld, res, &error, NULL, NULL, NULL, NULL, free ); if (ret == LDAP_SUCCESS) ret = error; diff -Nru wine-development-5.5/dlls/wldap32/extended.c wine-development-5.6/dlls/wldap32/extended.c --- wine-development-5.5/dlls/wldap32/extended.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/extended.c 2020-04-10 18:54:32.000000000 +0000 @@ -158,7 +158,7 @@ if (!clientctrlsU) goto exit; } - ret = map_error( ldap_extended_operation( ld, oid ? oidU : "", (struct berval *)data, + ret = map_error( ldap_extended_operation( ld->ld, oid ? oidU : "", (struct berval *)data, serverctrlsU, clientctrlsU, (int *)message )); exit: @@ -275,7 +275,7 @@ if (!clientctrlsU) goto exit; } - ret = map_error( ldap_extended_operation_s( ld, oid ? oidU : "", (struct berval *)data, serverctrlsU, + ret = map_error( ldap_extended_operation_s( ld->ld, oid ? oidU : "", (struct berval *)data, serverctrlsU, clientctrlsU, &retoidU, (struct berval **)retdata )); if (retoid && retoidU) { diff -Nru wine-development-5.5/dlls/wldap32/init.c wine-development-5.6/dlls/wldap32/init.c --- wine-development-5.5/dlls/wldap32/init.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/init.c 2020-04-10 18:54:32.000000000 +0000 @@ -205,12 +205,19 @@ WINE_DEFAULT_DEBUG_CHANNEL(wldap32); #ifdef HAVE_LDAP -static LDAP *create_context( const char *url ) +static WLDAP32_LDAP *create_context( const char *url ) { - LDAP *ld; + WLDAP32_LDAP *ld; int version = LDAP_VERSION3; - if (ldap_initialize( &ld, url ) != LDAP_SUCCESS) return NULL; - ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); + + ld = heap_alloc_zero( sizeof( *ld )); + if (!ld) return NULL; + if (ldap_initialize( &ld->ld, url ) != LDAP_SUCCESS) + { + heap_free( ld ); + return NULL; + } + ldap_set_option( ld->ld, LDAP_OPT_PROTOCOL_VERSION, &version ); return ld; } #endif @@ -268,7 +275,7 @@ WLDAP32_LDAP * CDECL cldap_openW( PWCHAR hostname, ULONG portnumber ) { #ifdef HAVE_LDAP - LDAP *ld = NULL; + WLDAP32_LDAP *ld = NULL; char *hostnameU = NULL, *url = NULL; TRACE( "(%s, %d)\n", debugstr_w(hostname), portnumber ); @@ -377,7 +384,7 @@ WLDAP32_LDAP * CDECL ldap_initW( const PWCHAR hostname, ULONG portnumber ) { #ifdef HAVE_LDAP - LDAP *ld = NULL; + WLDAP32_LDAP *ld = NULL; char *hostnameU = NULL, *url = NULL; TRACE( "(%s, %d)\n", debugstr_w(hostname), portnumber ); @@ -459,7 +466,7 @@ WLDAP32_LDAP * CDECL ldap_openW( PWCHAR hostname, ULONG portnumber ) { #ifdef HAVE_LDAP - LDAP *ld = NULL; + WLDAP32_LDAP *ld = NULL; char *hostnameU = NULL, *url = NULL; TRACE( "(%s, %d)\n", debugstr_w(hostname), portnumber ); @@ -562,7 +569,7 @@ url = urlify_hostnames( "ldap://", hostnameU, portnumber ); if (!url) goto exit; - ldap_initialize( &ld, url ); + ldap_initialize( &ld->ld, url ); exit: strfreeU( hostnameU ); @@ -652,7 +659,7 @@ if (!clientctrlsU) goto exit; } - ret = map_error( ldap_start_tls_s( ld, serverctrlsU, clientctrlsU )); + ret = map_error( ldap_start_tls_s( ld->ld, serverctrlsU, clientctrlsU )); exit: controlarrayfreeU( serverctrlsU ); diff -Nru wine-development-5.5/dlls/wldap32/misc.c wine-development-5.6/dlls/wldap32/misc.c --- wine-development-5.5/dlls/wldap32/misc.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/misc.c 2020-04-10 18:54:32.000000000 +0000 @@ -58,7 +58,7 @@ TRACE( "(%p, 0x%08x)\n", ld, msgid ); if (!ld) return ~0u; - ret = map_error( ldap_abandon_ext( ld, msgid, NULL, NULL )); + ret = map_error( ldap_abandon_ext( ld->ld, msgid, NULL, NULL )); #endif return ret; @@ -161,7 +161,7 @@ TRACE( "(%p, %p)\n", ld, res ); if (!ld) return ~0u; - ret = ldap_count_entries( ld, res ); + ret = ldap_count_entries( ld->ld, res ); #endif return ret; @@ -188,7 +188,7 @@ TRACE( "(%p, %p)\n", ld, res ); if (!ld) return 0; - ret = ldap_count_references( ld, res ); + ret = ldap_count_references( ld->ld, res ); #endif return ret; @@ -333,7 +333,7 @@ TRACE( "(%p, %p, %p)\n", ld, entry, ptr ); if (!ld || !entry) return NULL; - retU = ldap_first_attribute( ld, entry, ptr ); + retU = ldap_first_attribute( ld->ld, entry, ptr ); ret = strUtoW( retU ); ldap_memfree( retU ); @@ -365,7 +365,7 @@ TRACE( "(%p, %p)\n", ld, res ); if (!ld || !res) return NULL; - return ldap_first_entry( ld, res ); + return ldap_first_entry( ld->ld, res ); #else return NULL; @@ -392,7 +392,7 @@ TRACE( "(%p, %p)\n", ld, res ); if (!ld) return NULL; - return ldap_first_reference( ld, res ); + return ldap_first_reference( ld->ld, res ); #else return NULL; @@ -496,7 +496,7 @@ TRACE( "(%p, %p, %p)\n", ld, entry, ptr ); if (!ld || !entry || !ptr) return NULL; - retU = ldap_next_attribute( ld, entry, ptr ); + retU = ldap_next_attribute( ld->ld, entry, ptr ); ret = strUtoW( retU ); ldap_memfree( retU ); @@ -528,7 +528,7 @@ TRACE( "(%p, %p)\n", ld, entry ); if (!ld || !entry) return NULL; - return ldap_next_entry( ld, entry ); + return ldap_next_entry( ld->ld, entry ); #else return NULL; @@ -558,7 +558,7 @@ TRACE( "(%p, %p)\n", ld, entry ); if (!ld || !entry) return NULL; - return ldap_next_reference( ld, entry ); + return ldap_next_reference( ld->ld, entry ); #else return NULL; @@ -610,7 +610,7 @@ TRACE( "(%p, 0x%08x, 0x%08x, %p, %p)\n", ld, msgid, all, timeout, res ); if (!ld || !res || msgid == ~0u) return ~0u; - ret = ldap_result( ld, msgid, all, (struct timeval *)timeout, res ); + ret = ldap_result( ld->ld, msgid, all, (struct timeval *)timeout, res ); #endif return ret; diff -Nru wine-development-5.5/dlls/wldap32/modify.c wine-development-5.6/dlls/wldap32/modify.c --- wine-development-5.5/dlls/wldap32/modify.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/modify.c 2020-04-10 18:54:32.000000000 +0000 @@ -120,7 +120,7 @@ if (!modsU) goto exit; } - ret = ldap_modify_ext( ld, dn ? dnU : "", mods ? modsU : nullmods, + ret = ldap_modify_ext( ld->ld, dn ? dnU : "", mods ? modsU : nullmods, NULL, NULL, &msg ); if (ret == LDAP_SUCCESS) @@ -243,7 +243,7 @@ if (!clientctrlsU) goto exit; } - ret = map_error( ldap_modify_ext( ld, dn ? dnU : "", mods ? modsU : nullmods, serverctrlsU, + ret = map_error( ldap_modify_ext( ld->ld, dn ? dnU : "", mods ? modsU : nullmods, serverctrlsU, clientctrlsU, message ? (int *)message : &dummy )); exit: @@ -360,7 +360,7 @@ if (!clientctrlsU) goto exit; } - ret = map_error( ldap_modify_ext_s( ld, dn ? dnU : "", mods ? modsU : nullmods, + ret = map_error( ldap_modify_ext_s( ld->ld, dn ? dnU : "", mods ? modsU : nullmods, serverctrlsU, clientctrlsU )); exit: @@ -447,7 +447,7 @@ if (!modsU) goto exit; } - ret = map_error( ldap_modify_ext_s( ld, dn ? dnU : "", mods ? modsU : nullmods, NULL, NULL )); + ret = map_error( ldap_modify_ext_s( ld->ld, dn ? dnU : "", mods ? modsU : nullmods, NULL, NULL )); exit: strfreeU( dnU ); diff -Nru wine-development-5.5/dlls/wldap32/modrdn.c wine-development-5.6/dlls/wldap32/modrdn.c --- wine-development-5.5/dlls/wldap32/modrdn.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/modrdn.c 2020-04-10 18:54:32.000000000 +0000 @@ -113,7 +113,7 @@ newdnU = strWtoU( newdn ); if (!newdnU) goto exit; - ret = ldap_rename( ld, dn ? dnU : "", newdnU, NULL, 1, NULL, NULL, &msg ); + ret = ldap_rename( ld->ld, dn ? dnU : "", newdnU, NULL, 1, NULL, NULL, &msg ); if (ret == LDAP_SUCCESS) ret = msg; @@ -204,7 +204,7 @@ newdnU = strWtoU( newdn ); if (!newdnU) goto exit; - ret = ldap_rename( ld, dn ? dnU : "", newdnU, NULL, delete, NULL, NULL, &msg ); + ret = ldap_rename( ld->ld, dn ? dnU : "", newdnU, NULL, delete, NULL, NULL, &msg ); if (ret == LDAP_SUCCESS) ret = msg; @@ -289,7 +289,7 @@ newdnU = strWtoU( newdn ); if (!newdnU) goto exit; - ret = map_error( ldap_rename_s( ld, dn ? dnU : "", newdnU, NULL, delete, NULL, NULL )); + ret = map_error( ldap_rename_s( ld->ld, dn ? dnU : "", newdnU, NULL, delete, NULL, NULL )); exit: strfreeU( dnU ); @@ -368,7 +368,7 @@ newdnU = strWtoU( newdn ); if (!newdnU) goto exit; - ret = map_error( ldap_rename_s( ld, dn ? dnU : "", newdnU, NULL, 1, NULL, NULL )); + ret = map_error( ldap_rename_s( ld->ld, dn ? dnU : "", newdnU, NULL, 1, NULL, NULL )); exit: strfreeU( dnU ); diff -Nru wine-development-5.5/dlls/wldap32/option.c wine-development-5.6/dlls/wldap32/option.c --- wine-development-5.5/dlls/wldap32/option.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/option.c 2020-04-10 18:54:32.000000000 +0000 @@ -206,7 +206,7 @@ if (!featureU.ldapaif_name) return WLDAP32_LDAP_NO_MEMORY; - ret = map_error( ldap_get_option( ld, option, &featureU )); + ret = map_error( ldap_get_option( ld->ld, option, &featureU )); featureW->ldapaif_version = featureU.ldapaif_version; strfreeU( featureU.ldapaif_name ); @@ -220,7 +220,7 @@ memset( &infoU, 0, sizeof(LDAPAPIInfo) ); infoU.ldapai_info_version = infoW->ldapai_info_version; - ret = map_error( ldap_get_option( ld, option, &infoU )); + ret = map_error( ldap_get_option( ld->ld, option, &infoU )); infoW->ldapai_api_version = infoU.ldapai_api_version; infoW->ldapai_protocol_version = infoU.ldapai_protocol_version; @@ -253,7 +253,7 @@ case WLDAP32_LDAP_OPT_REFERRALS: case WLDAP32_LDAP_OPT_SIZELIMIT: case WLDAP32_LDAP_OPT_TIMELIMIT: - return map_error( ldap_get_option( ld, option, value )); + return map_error( ldap_get_option( ld->ld, option, value )); case WLDAP32_LDAP_OPT_CACHE_ENABLE: case WLDAP32_LDAP_OPT_CACHE_FN_PTRS: @@ -398,6 +398,63 @@ return ret; } +#ifdef HAVE_LDAP + +static BOOL query_supported_server_ctrls( WLDAP32_LDAP *ld ) +{ + char *attrs[] = { (char *)"supportedControl", NULL }; + LDAPMessage *res, *entry; + + if ( ld->ld_server_ctrls ) return TRUE; + + if (ldap_search_ext_s( ld->ld, (char *)"", LDAP_SCOPE_BASE, (char *)"(objectClass=*)", attrs, FALSE, + NULL, NULL, NULL, 0, &res ) != LDAP_SUCCESS) + return FALSE; + + entry = ldap_first_entry( ld->ld, res ); + if (entry) + { + ULONG count, i; + + ld->ld_server_ctrls = ldap_get_values_len( ld->ld, entry, attrs[0] ); + count = ldap_count_values_len( ld->ld_server_ctrls ); + for (i = 0; i < count; i++) + TRACE("%u: %s\n", i, debugstr_an( ld->ld_server_ctrls[i]->bv_val, ld->ld_server_ctrls[i]->bv_len )); + } + + ldap_msgfree( res ); + + return ld->ld_server_ctrls != NULL; +} + +static BOOL is_supported_server_ctrls( WLDAP32_LDAP *ld, LDAPControl **ctrls ) +{ + ULONG user_count, server_count, i, n, supported = 0; + + if (!query_supported_server_ctrls( ld )) + return TRUE; /* can't verify, let the server handle it on next query */ + + user_count = controlarraylenU( ctrls ); + server_count = ldap_count_values_len( ld->ld_server_ctrls ); + + for (n = 0; n < user_count; n++) + { + TRACE("looking for %s\n", debugstr_a(ctrls[n]->ldctl_oid)); + + for (i = 0; i < server_count; i++) + { + if (!strncmp( ctrls[n]->ldctl_oid, ld->ld_server_ctrls[i]->bv_val, ld->ld_server_ctrls[i]->bv_len)) + { + supported++; + break; + } + } + } + + return supported == user_count; +} +#endif + /*********************************************************************** * ldap_set_optionW (WLDAP32.@) * @@ -433,7 +490,10 @@ ctrlsU = controlarrayWtoU( value ); if (!ctrlsU) return WLDAP32_LDAP_NO_MEMORY; - ret = map_error( ldap_set_option( ld, option, ctrlsU )); + if (!is_supported_server_ctrls( ld, ctrlsU )) + ret = WLDAP32_LDAP_PARAM_ERROR; + else + ret = map_error( ldap_set_option( ld->ld, option, ctrlsU )); controlarrayfreeU( ctrlsU ); return ret; } @@ -444,7 +504,7 @@ case WLDAP32_LDAP_OPT_REFERRALS: case WLDAP32_LDAP_OPT_SIZELIMIT: case WLDAP32_LDAP_OPT_TIMELIMIT: - return map_error( ldap_set_option( ld, option, value )); + return map_error( ldap_set_option( ld->ld, option, value )); case WLDAP32_LDAP_OPT_CACHE_ENABLE: case WLDAP32_LDAP_OPT_CACHE_FN_PTRS: diff -Nru wine-development-5.5/dlls/wldap32/parse.c wine-development-5.6/dlls/wldap32/parse.c --- wine-development-5.5/dlls/wldap32/parse.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/parse.c 2020-04-10 18:54:32.000000000 +0000 @@ -99,7 +99,7 @@ if (!ld) return WLDAP32_LDAP_PARAM_ERROR; if (!result) return WLDAP32_LDAP_NO_RESULTS_RETURNED; - ret = map_error( ldap_parse_extended_result( ld, result, &oidU, (struct berval **)data, free ) ); + ret = map_error( ldap_parse_extended_result( ld->ld, result, &oidU, (struct berval **)data, free ) ); if (oid) { *oid = strUtoW( oidU ); @@ -163,8 +163,8 @@ TRACE( "(%p, %p, %p)\n", ld, message, referrals ); if (!ld) return ~0u; - - ret = map_error( ldap_parse_reference( ld, message, &referralsU, NULL, 0 )); + + ret = map_error( ldap_parse_reference( ld->ld, message, &referralsU, NULL, 0 )); *referrals = strarrayUtoW( referralsU ); ldap_memfree( referralsU ); @@ -249,7 +249,7 @@ if (!ld) return WLDAP32_LDAP_PARAM_ERROR; - ret = map_error( ldap_parse_result( ld, result, (int *)retcode, &matchedU, &errorU, + ret = map_error( ldap_parse_result( ld->ld, result, (int *)retcode, &matchedU, &errorU, &referralsU, &serverctrlsU, free )); if (matched) *matched = strUtoW( matchedU ); @@ -339,7 +339,7 @@ if (!controlU) return WLDAP32_LDAP_NO_MEMORY; #ifdef HAVE_LDAP_PARSE_SORT_CONTROL - if (!(ret = ldap_parse_sort_control( ld, controlU, &res, &attrU ))) + if (!(ret = ldap_parse_sort_control( ld->ld, controlU, &res, &attrU ))) { *result = res; *attr = strUtoW( attrU ); @@ -355,7 +355,7 @@ controlarrayfreeU( controlU ); return WLDAP32_LDAP_CONTROL_NOT_FOUND; } - if (!(ret = ldap_parse_sortresponse_control( ld, sortcontrol, &res, &attrU ))) + if (!(ret = ldap_parse_sortresponse_control( ld->ld, sortcontrol, &res, &attrU ))) { *result = res; *attr = strUtoW( attrU ); @@ -443,7 +443,7 @@ if (!controlU) return WLDAP32_LDAP_NO_MEMORY; #ifdef HAVE_LDAP_PARSE_VLV_CONTROL - if (!(ret = ldap_parse_vlv_control( ld, controlU, &pos, &count, + if (!(ret = ldap_parse_vlv_control( ld->ld, controlU, &pos, &count, (struct berval **)context, errcode ))) { *targetpos = pos; @@ -460,7 +460,7 @@ controlarrayfreeU( controlU ); return WLDAP32_LDAP_CONTROL_NOT_FOUND; } - if (!(ret = ldap_parse_vlvresponse_control( ld, vlvcontrol, &pos, &count, + if (!(ret = ldap_parse_vlvresponse_control( ld->ld, vlvcontrol, &pos, &count, (struct berval **)context, errcode ))) { *targetpos = pos; diff -Nru wine-development-5.5/dlls/wldap32/rename.c wine-development-5.6/dlls/wldap32/rename.c --- wine-development-5.5/dlls/wldap32/rename.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/rename.c 2020-04-10 18:54:32.000000000 +0000 @@ -157,7 +157,7 @@ if (!clientctrlsU) goto exit; } - ret = map_error( ldap_rename( ld, dn ? dnU : "", newrdn ? newrdnU : "", newparentU, + ret = map_error( ldap_rename( ld->ld, dn ? dnU : "", newrdn ? newrdnU : "", newparentU, delete, serverctrlsU, clientctrlsU, (int *)message )); exit: @@ -283,7 +283,7 @@ if (!clientctrlsU) goto exit; } - ret = map_error( ldap_rename_s( ld, dn ? dnU : "", newrdn ? newrdnU : "", newparentU, + ret = map_error( ldap_rename_s( ld->ld, dn ? dnU : "", newrdn ? newrdnU : "", newparentU, delete, serverctrlsU, clientctrlsU )); exit: diff -Nru wine-development-5.5/dlls/wldap32/search.c wine-development-5.6/dlls/wldap32/search.c --- wine-development-5.5/dlls/wldap32/search.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/search.c 2020-04-10 18:54:32.000000000 +0000 @@ -132,7 +132,7 @@ if (!attrsU) goto exit; } - ret = ldap_search_ext( ld, baseU, scope, filterU, attrsU, attrsonly, + ret = ldap_search_ext( ld->ld, baseU, scope, filterU, attrsU, attrsonly, NULL, NULL, NULL, 0, &msg ); if (ret == LDAP_SUCCESS) @@ -281,7 +281,7 @@ tvp = &tv; } - ret = map_error( ldap_search_ext( ld, baseU, scope, filterU, attrsU, attrsonly, + ret = map_error( ldap_search_ext( ld->ld, baseU, scope, filterU, attrsU, attrsonly, serverctrlsU, clientctrlsU, tvp, sizelimit, (int *)message )); exit: @@ -416,7 +416,7 @@ if (!clientctrlsU) goto exit; } - ret = map_error( ldap_search_ext_s( ld, baseU, scope, filterU, attrsU, attrsonly, + ret = map_error( ldap_search_ext_s( ld->ld, baseU, scope, filterU, attrsU, attrsonly, serverctrlsU, clientctrlsU, (struct timeval *)timeout, sizelimit, res )); @@ -523,7 +523,7 @@ if (!attrsU) goto exit; } - ret = map_error( ldap_search_ext_s( ld, baseU, scope, filterU, attrsU, attrsonly, + ret = map_error( ldap_search_ext_s( ld->ld, baseU, scope, filterU, attrsU, attrsonly, NULL, NULL, NULL, 0, res )); exit: @@ -633,7 +633,7 @@ if (!attrsU) goto exit; } - ret = map_error( ldap_search_ext_s( ld, baseU, scope, filterU, attrsU, attrsonly, + ret = map_error( ldap_search_ext_s( ld->ld, baseU, scope, filterU, attrsU, attrsonly, NULL, NULL, (struct timeval *)timeout, 0, res )); exit: diff -Nru wine-development-5.5/dlls/wldap32/tests/parse.c wine-development-5.6/dlls/wldap32/tests/parse.c --- wine-development-5.5/dlls/wldap32/tests/parse.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/tests/parse.c 2020-04-10 18:54:32.000000000 +0000 @@ -31,6 +31,10 @@ #define LDAP_AUTH_SIMPLE 0x80 #endif +#ifndef LDAP_OPT_SERVER_CONTROLS +#define LDAP_OPT_SERVER_CONTROLS 0x0012 +#endif + static void test_ldap_parse_sort_control( LDAP *ld ) { ULONG ret, result; @@ -164,10 +168,55 @@ ldap_unbind( ld ); } +static void test_ldap_server_control( void ) +{ + /* SEQUENCE { INTEGER :: 0x07 } */ + static char mask_ber[5] = {0x30,0x03,0x02,0x01,0x07}; + LDAP *ld; + ULONG ret; + int version; + LDAPControlW *ctrls[2], mask; + LDAPMessage *res; + + ld = ldap_initA( (char *)"ldap.forumsys.com", 389 ); + ok( ld != NULL, "ldap_init failed\n" ); + + version = LDAP_VERSION3; + ret = ldap_set_optionW( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); + if (ret == LDAP_SERVER_DOWN || ret == LDAP_UNAVAILABLE) + { + skip( "test server can't be reached\n" ); + ldap_unbind( ld ); + return; + } + + ret = ldap_connect( ld, NULL ); + ok( !ret, "ldap_connect failed 0x%08x\n", ret ); + + /* test setting a not supported server control */ + mask.ldctl_oid = (WCHAR *)L"1.2.840.113556.1.4.801"; + mask.ldctl_iscritical = TRUE; + mask.ldctl_value.bv_val = mask_ber; + mask.ldctl_value.bv_len = sizeof(mask_ber); + ctrls[0] = &mask; + ctrls[1] = NULL; + ret = ldap_set_optionW(ld, LDAP_OPT_SERVER_CONTROLS, ctrls); + ok( ret == LDAP_PARAM_ERROR, "ldap_set_optionW should fail: 0x%x\n", ret ); + + res = NULL; + ret = ldap_search_sA( ld, (char *)"OU=scientists,DC=example,DC=com", LDAP_SCOPE_BASE, (char *)"(objectclass=*)", NULL, FALSE, &res ); + ok( !ret, "ldap_search_sA failed 0x%x\n", ret ); + ok( res != NULL, "expected res != NULL\n" ); + + ldap_msgfree( res ); + ldap_unbind( ld ); +} + START_TEST (parse) { LDAP *ld; + test_ldap_server_control(); test_ldap_bind_sA(); ld = ldap_initA((char *)"ldap.itd.umich.edu", 389 ); diff -Nru wine-development-5.5/dlls/wldap32/value.c wine-development-5.6/dlls/wldap32/value.c --- wine-development-5.5/dlls/wldap32/value.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/value.c 2020-04-10 18:54:32.000000000 +0000 @@ -228,7 +228,7 @@ attrU = strWtoU( attr ); if (!attrU) return NULL; - bv = ldap_get_values_len( ld, entry, attrU ); + bv = ldap_get_values_len( ld->ld, entry, attrU ); if (bv) { retU = bv2str_array( bv ); @@ -305,7 +305,7 @@ attrU = strWtoU( attr ); if (!attrU) return NULL; - ret = ldap_get_values_len( ld, message, attrU ); + ret = ldap_get_values_len( ld->ld, message, attrU ); strfreeU( attrU ); return (struct WLDAP32_berval **)ret; diff -Nru wine-development-5.5/dlls/wldap32/winldap_private.h wine-development-5.6/dlls/wldap32/winldap_private.h --- wine-development-5.5/dlls/wldap32/winldap_private.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/dlls/wldap32/winldap_private.h 2020-04-10 18:54:32.000000000 +0000 @@ -103,8 +103,11 @@ #define WLDAP32_LDAP_AUTH_NEGOTIATE 0x486 -typedef struct ldap +typedef struct wldap32 { +#ifdef HAVE_LDAP + LDAP *ld; +#endif struct { UINT_PTR sb_sd; @@ -128,6 +131,7 @@ ULONG ld_cldaptimeout; ULONG ld_refhoplimit; ULONG ld_options; + struct berval **ld_server_ctrls; } WLDAP32_LDAP, *WLDAP32_PLDAP; typedef struct ldapmodA { diff -Nru wine-development-5.5/include/audioclient.idl wine-development-5.6/include/audioclient.idl --- wine-development-5.5/include/audioclient.idl 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/audioclient.idl 2020-04-10 18:54:32.000000000 +0000 @@ -191,7 +191,7 @@ [ local, pointer_default(unique), - uuid("f6e4c0a0-46d9-4fb9-be21-57a3ef2b626c"), + uuid("f6e4c0a0-46d9-4fb8-be21-57a3ef2b626c"), object, ] interface IAudioClockAdjustment : IUnknown diff -Nru wine-development-5.5/include/codecapi.h wine-development-5.6/include/codecapi.h --- wine-development-5.5/include/codecapi.h 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/include/codecapi.h 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,56 @@ +/* + * Copyright 2020 Derek Lesho + * + * 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 __CODECAPI_H +#define __CODECAPI_H + +enum eAVEncH264VProfile +{ + eAVEncH264VProfile_unknown = 0, + eAVEncH264VProfile_Simple = 66, + eAVEncH264VProfile_Base = 66, + eAVEncH264VProfile_Main = 77, + eAVEncH264VProfile_High = 100, + eAVEncH264VProfile_422 = 122, + eAVEncH264VProfile_High10 = 110, + eAVEncH264VProfile_444 = 244, + eAVEncH264VProfile_Extended = 88, +}; + +enum eAVEncH264VLevel +{ + eAVEncH264VLevel1 = 10, + eAVEncH264VLevel1_b = 11, + eAVEncH264VLevel1_1 = 11, + eAVEncH264VLevel1_2 = 12, + eAVEncH264VLevel1_3 = 13, + eAVEncH264VLevel2 = 20, + eAVEncH264VLevel2_1 = 21, + eAVEncH264VLevel2_2 = 22, + eAVEncH264VLevel3 = 30, + eAVEncH264VLevel3_1 = 31, + eAVEncH264VLevel3_2 = 32, + eAVEncH264VLevel4 = 40, + eAVEncH264VLevel4_1 = 41, + eAVEncH264VLevel4_2 = 42, + eAVEncH264VLevel5 = 50, + eAVEncH264VLevel5_1 = 51, + eAVEncH264VLevel5_2 = 52 +}; + +#endif /* __CODECAPI_H */ diff -Nru wine-development-5.5/include/ddk/mountmgr.h wine-development-5.6/include/ddk/mountmgr.h --- wine-development-5.5/include/ddk/mountmgr.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/ddk/mountmgr.h 2020-04-10 18:54:32.000000000 +0000 @@ -52,13 +52,26 @@ #define IOCTL_MOUNTMGR_DEFINE_UNIX_DRIVE CTL_CODE(MOUNTMGRCONTROLTYPE, 32, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_MOUNTMGR_QUERY_UNIX_DRIVE CTL_CODE(MOUNTMGRCONTROLTYPE, 33, METHOD_BUFFERED, FILE_READ_ACCESS) +enum mountmgr_fs_type +{ + MOUNTMGR_FS_TYPE_NTFS, + MOUNTMGR_FS_TYPE_FAT, + MOUNTMGR_FS_TYPE_FAT32, + MOUNTMGR_FS_TYPE_ISO9660, + MOUNTMGR_FS_TYPE_UDF, +}; + struct mountmgr_unix_drive { - ULONG size; - ULONG type; - WCHAR letter; - USHORT mount_point_offset; - USHORT device_offset; + ULONG size; + ULONG type; + ULONG fs_type; + DWORD serial; + ULONGLONG unix_dev; + WCHAR letter; + USHORT mount_point_offset; + USHORT device_offset; + USHORT label_offset; }; #define IOCTL_MOUNTMGR_QUERY_DHCP_REQUEST_PARAMS CTL_CODE(MOUNTMGRCONTROLTYPE, 64, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) @@ -82,6 +95,8 @@ struct mountmgr_dhcp_request_param params[1]; }; +#define IOCTL_MOUNTMGR_QUERY_SYMBOL_FILE CTL_CODE(MOUNTMGRCONTROLTYPE, 80, METHOD_BUFFERED, FILE_READ_ACCESS) + #endif typedef struct _MOUNTMGR_CREATE_POINT_INPUT diff -Nru wine-development-5.5/include/dsclient.h wine-development-5.6/include/dsclient.h --- wine-development-5.5/include/dsclient.h 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/include/dsclient.h 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,61 @@ +/* + * Copyright 2020 Dmitry Timoshkov + * + * 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 __DSCLIENT_H_ +#define __DSCLIENT_H_ + +DEFINE_GUID(CLSID_DsDisplaySpecifier,0x1ab4a8c0,0x6a0b,0x11d2,0xad,0x49,0x00,0xc0,0x4f,0xa3,0x1a,0x86); +#define IID_IDsDisplaySpecifier CLSID_DsDisplaySpecifier + +#define DSECAF_NOTLISTED 0x00000001 + +typedef HRESULT (CALLBACK *LPDSENUMATTRIBUTES)(LPARAM, LPCWSTR, LPCWSTR, DWORD); + +#define DSCCIF_HASWIZARDDIALOG 0x00000001 +#define DSCCIF_HASWIZARDPRIMARYPAGE 0x00000002 + +typedef struct +{ + DWORD dwFlags; + CLSID clsidWizardDialog; + CLSID clsidWizardPrimaryPage; + DWORD cWizardExtensions; + CLSID aWizardExtensions[1]; +} DSCLASSCREATIONINFO, *LPDSCLASSCREATIONINFO; + +#undef INTERFACE +#define INTERFACE IDsDisplaySpecifier +DECLARE_INTERFACE_IID_(IDsDisplaySpecifier, IUnknown, "1ab4a8c0-6a0b-11d2-ad49-00c04fa31a86") +{ + STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **obj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + STDMETHOD(SetServer)(THIS_ LPCWSTR server, LPCWSTR user, LPCWSTR password, DWORD flags) PURE; + STDMETHOD(SetLanguageID)(THIS_ LANGID lang) PURE; + STDMETHOD(GetDisplaySpecifier)(THIS_ LPCWSTR object, REFIID iid, void **obj) PURE; + STDMETHOD(GetIconLocation)(THIS_ LPCWSTR object, DWORD flags, LPWSTR buffer, INT size, INT *id) PURE; + STDMETHOD_(HICON,GetIcon)(THIS_ LPCWSTR object, DWORD flags, INT cx, INT cy) PURE; + STDMETHOD(GetFriendlyClassName)(THIS_ LPCWSTR object, LPWSTR buffer, INT size) PURE; + STDMETHOD(GetFriendlyAttributeName)(THIS_ LPCWSTR object, LPCWSTR name, LPWSTR buffer, UINT size) PURE; + STDMETHOD_(BOOL,IsClassContainer)(THIS_ LPCWSTR object, LPCWSTR path, DWORD flags) PURE; + STDMETHOD(GetClassCreationInfo)(THIS_ LPCWSTR object, LPDSCLASSCREATIONINFO *info) PURE; + STDMETHOD(EnumClassAttributes)(THIS_ LPCWSTR object, LPDSENUMATTRIBUTES cb, LPARAM param) PURE; + STDMETHOD_(ADSTYPE,GetAttributeADsType)(THIS_ LPCWSTR name) PURE; +}; + +#endif /* __DSCLIENT_H_ */ diff -Nru wine-development-5.5/include/guiddef.h wine-development-5.6/include/guiddef.h --- wine-development-5.5/include/guiddef.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/guiddef.h 2020-04-10 18:54:32.000000000 +0000 @@ -145,14 +145,14 @@ #define REFCLSID const CLSID & #define REFIID const IID & #define REFFMTID const FMTID & -#else /* !defined(__cplusplus) */ +#else #define REFGUID const GUID* __MIDL_CONST #define REFCLSID const CLSID* __MIDL_CONST #define REFIID const IID* __MIDL_CONST #define REFFMTID const FMTID* __MIDL_CONST -#endif /* !defined(__cplusplus) */ +#endif -#if defined(__cplusplus) && !defined(CINTERFACE) +#ifdef __cplusplus #define IsEqualGUID(rguid1, rguid2) (!memcmp(&(rguid1), &(rguid2), sizeof(GUID))) inline int InlineIsEqualGUID(REFGUID rguid1, REFGUID rguid2) { @@ -161,16 +161,16 @@ ((ULONG *)&rguid1)[2] == ((ULONG *)&rguid2)[2] && ((ULONG *)&rguid1)[3] == ((ULONG *)&rguid2)[3]); } -#else /* defined(__cplusplus) && !defined(CINTERFACE) */ +#else #define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID))) #define InlineIsEqualGUID(rguid1, rguid2) \ (((ULONG *)rguid1)[0] == ((ULONG *)rguid2)[0] && \ ((ULONG *)rguid1)[1] == ((ULONG *)rguid2)[1] && \ ((ULONG *)rguid1)[2] == ((ULONG *)rguid2)[2] && \ ((ULONG *)rguid1)[3] == ((ULONG *)rguid2)[3]) -#endif /* defined(__cplusplus) && !defined(CINTERFACE) */ +#endif -#if defined(__cplusplus) && !defined(CINTERFACE) +#ifdef __cplusplus #include inline bool operator==(const GUID& guidOne, const GUID& guidOther) { diff -Nru wine-development-5.5/include/iads.idl wine-development-5.6/include/iads.idl --- wine-development-5.5/include/iads.idl 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/iads.idl 2020-04-10 18:54:32.000000000 +0000 @@ -344,6 +344,55 @@ HANDLE hReserved; } ADS_SEARCH_COLUMN, *PADS_SEARCH_COLUMN; +typedef struct _ads_object_info +{ + LPWSTR pszRDN; + LPWSTR pszObjectDN; + LPWSTR pszParentDN; + LPWSTR pszSchemaDN; + LPWSTR pszClassName; +} ADS_OBJECT_INFO, *PADS_OBJECT_INFO; + +typedef struct _ads_attr_info +{ + LPWSTR pszAttrName; + DWORD dwControlCode; + ADSTYPE dwADsType; + PADSVALUE pADsValues; + DWORD dwNumValues; +} ADS_ATTR_INFO, *PADS_ATTR_INFO; + +typedef enum +{ + ADS_SECURITY_INFO_OWNER = 0x1, + ADS_SECURITY_INFO_GROUP = 0x2, + ADS_SECURITY_INFO_DACL = 0x4, + ADS_SECURITY_INFO_SACL = 0x8 +} ADS_SECURITY_INFO_ENUM; + +typedef enum +{ + ADS_SETTYPE_FULL = 1, + ADS_SETTYPE_PROVIDER = 2, + ADS_SETTYPE_SERVER = 3, + ADS_SETTYPE_DN = 4 +} ADS_SETTYPE_ENUM; + +typedef enum +{ + ADS_FORMAT_WINDOWS = 1, + ADS_FORMAT_WINDOWS_NO_SERVER = 2, + ADS_FORMAT_WINDOWS_DN = 3, + ADS_FORMAT_WINDOWS_PARENT = 4, + ADS_FORMAT_X500 = 5, + ADS_FORMAT_X500_NO_SERVER = 6, + ADS_FORMAT_X500_DN = 7, + ADS_FORMAT_X500_PARENT = 8, + ADS_FORMAT_SERVER = 9, + ADS_FORMAT_PROVIDER = 10, + ADS_FORMAT_LEAF = 11 +} ADS_FORMAT_ENUM; + /***************************************************************************** * IADsContainer interface */ @@ -800,6 +849,23 @@ } /***************************************************************************** + * IDirectoryObject interface + */ +[ + odl, + local, + uuid(e798de2c-22e4-11d0-84fe-00c04fd8d503) +] +interface IDirectoryObject : IUnknown +{ + HRESULT GetObjectInformation(PADS_OBJECT_INFO *info); + HRESULT GetObjectAttributes(LPWSTR *names, DWORD count, PADS_ATTR_INFO *attrs, DWORD *count_returned); + HRESULT SetObjectAttributes(PADS_ATTR_INFO attrs, DWORD count, DWORD *count_set); + HRESULT CreateDSObject(LPWSTR name, PADS_ATTR_INFO attrs, DWORD count, IDispatch **obj); + HRESULT DeleteDSObject(LPWSTR name); +} + +/***************************************************************************** * IID_IADsOpenDSObject interface */ [ @@ -814,6 +880,30 @@ } /***************************************************************************** + * IADsPathname interface + */ +[ + odl, + uuid(d592aed4-f420-11d0-a36e-00c04fb950dc), + dual, + oleautomation +] +interface IADsPathname : IDispatch +{ + HRESULT Set(BSTR path, long type); + HRESULT SetDisplayType(long type); + HRESULT Retrieve(long type, BSTR *path); + HRESULT GetNumElements(long *count); + HRESULT GetElement(long index, BSTR *element); + HRESULT AddLeafElement(BSTR element); + HRESULT RemoveLeafElement(void); + HRESULT CopyPath(IDispatch **path); + HRESULT GetEscapedElement(long reserved, BSTR element, BSTR *str); + HRESULT get_EscapedMode(long *mode); + HRESULT put_EscapedMode(long mode); +} + +/***************************************************************************** * IADsADSystemInfo interface */ [ diff -Nru wine-development-5.5/include/Makefile.in wine-development-5.6/include/Makefile.in --- wine-development-5.5/include/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -61,6 +61,7 @@ cmdbas.idl \ cmdtxt.idl \ cmnquery.idl \ + codecapi.h \ colinf.idl \ colordlg.h \ comcat.idl \ @@ -231,6 +232,7 @@ dplobby8.h \ dpnathlp.h \ drmexternals.idl \ + dsclient.h \ dsconf.h \ dsgetdc.h \ dshow.h \ @@ -627,6 +629,7 @@ slpublic.h \ snmp.h \ softpub.h \ + spatialaudioclient.idl \ sperror.h \ sql.h \ sqlext.h \ diff -Nru wine-development-5.5/include/mfapi.h wine-development-5.6/include/mfapi.h --- wine-development-5.5/include/mfapi.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/mfapi.h 2020-04-10 18:54:32.000000000 +0000 @@ -488,6 +488,8 @@ HRESULT WINAPI MFAllocateWorkQueueEx(MFASYNC_WORKQUEUE_TYPE queue_type, DWORD *queue); HRESULT WINAPI MFBeginCreateFile(MF_FILE_ACCESSMODE access_mode, MF_FILE_OPENMODE open_mode, MF_FILE_FLAGS flags, const WCHAR *path, IMFAsyncCallback *callback, IUnknown *state, IUnknown **cancel_cookie); +HRESULT WINAPI MFBeginRegisterWorkQueueWithMMCSSEx(DWORD queue, const WCHAR *usage_class, DWORD taskid, LONG priority, + IMFAsyncCallback *callback, IUnknown *state); HRESULT WINAPI MFCalculateImageSize(REFGUID subtype, UINT32 width, UINT32 height, UINT32 *size); HRESULT WINAPI MFCancelCreateFile(IUnknown *cancel_cookie); HRESULT WINAPI MFCancelWorkItem(MFWORKITEM_KEY key); @@ -518,6 +520,9 @@ HRESULT WINAPI MFGetStrideForBitmapInfoHeader(DWORD format, DWORD width, LONG *stride); HRESULT WINAPI MFGetPlaneSize(DWORD format, DWORD width, DWORD height, DWORD *size); HRESULT WINAPI MFGetTimerPeriodicity(DWORD *periodicity); +HRESULT WINAPI MFGetWorkQueueMMCSSClass(DWORD queue, WCHAR *class, DWORD *length); +HRESULT WINAPI MFGetWorkQueueMMCSSPriority(DWORD queue, LONG *priority); +HRESULT WINAPI MFGetWorkQueueMMCSSTaskId(DWORD queue, DWORD *taskid); HRESULT WINAPI MFTEnum(GUID category, UINT32 flags, MFT_REGISTER_TYPE_INFO *input_type, MFT_REGISTER_TYPE_INFO *output_type, IMFAttributes *attributes, CLSID **pclsids, UINT32 *pcount); @@ -527,6 +532,7 @@ const MFT_REGISTER_TYPE_INFO *output_type, IMFActivate ***activate, UINT32 *pcount); HRESULT WINAPI MFInitAttributesFromBlob(IMFAttributes *attributes, const UINT8 *buffer, UINT size); +HRESULT WINAPI MFInitMediaTypeFromWaveFormatEx(IMFMediaType *mediatype, const WAVEFORMATEX *format, UINT32 size); HRESULT WINAPI MFInvokeCallback(IMFAsyncResult *result); HRESULT WINAPI MFLockPlatform(void); HRESULT WINAPI MFPutWorkItem(DWORD queue, IMFAsyncCallback *callback, IUnknown *state); @@ -535,6 +541,7 @@ HRESULT WINAPI MFPutWorkItemEx2(DWORD queue, LONG priority, IMFAsyncResult *result); HRESULT WINAPI MFRegisterLocalByteStreamHandler(const WCHAR *extension, const WCHAR *mime, IMFActivate *activate); HRESULT WINAPI MFRegisterLocalSchemeHandler(const WCHAR *scheme, IMFActivate *activate); +HRESULT WINAPI MFRegisterPlatformWithMMCSS(const WCHAR *usage_class, DWORD *taskid, LONG priority); HRESULT WINAPI MFScheduleWorkItem(IMFAsyncCallback *callback, IUnknown *state, INT64 timeout, MFWORKITEM_KEY *key); HRESULT WINAPI MFScheduleWorkItemEx(IMFAsyncResult *result, INT64 timeout, MFWORKITEM_KEY *key); HRESULT WINAPI MFTRegister(CLSID clsid, GUID category, LPWSTR name, UINT32 flags, UINT32 cinput, @@ -551,6 +558,7 @@ HRESULT WINAPI MFStartup(ULONG version, DWORD flags); HRESULT WINAPI MFUnlockPlatform(void); HRESULT WINAPI MFUnlockWorkQueue(DWORD queue); +HRESULT WINAPI MFUnregisterPlatformFromMMCSS(void); HRESULT WINAPI MFTUnregister(CLSID clsid); HRESULT WINAPI MFTUnregisterLocal(IClassFactory *factory); HRESULT WINAPI MFTUnregisterLocalByCLSID(CLSID clsid); diff -Nru wine-development-5.5/include/mfidl.idl wine-development-5.6/include/mfidl.idl --- wine-development-5.5/include/mfidl.idl 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/mfidl.idl 2020-04-10 18:54:32.000000000 +0000 @@ -956,6 +956,54 @@ MF_RESOLUTION_WRITE = 0x00020000, }; +[ + object, + uuid(089edf13-cf71-4338-8d13-9e569dbdc319), +] +interface IMFSimpleAudioVolume : IUnknown +{ + HRESULT SetMasterVolume([in] float level); + HRESULT GetMasterVolume([out] float *level); + HRESULT SetMute([in] BOOL mute); + HRESULT GetMute([out] BOOL *mute); +} + +[ + object, + uuid(76b1bbdb-4ec8-4f36-b106-70a9316df593), +] +interface IMFAudioStreamVolume : IUnknown +{ + HRESULT GetChannelCount([out] UINT32 *count); + HRESULT SetChannelVolume( + [in] UINT32 index, + [in] const float level); + HRESULT GetChannelVolume( + [in] UINT32 index, + [out] float *level); + HRESULT SetAllVolumes( + [in] UINT32 count, + [in, size_is(count)] const float *volumes); + HRESULT GetAllVolumes( + [in] UINT32 count, + [out, size_is(count)] float *volumes); +} + +[ + object, + uuid(a0638c2b-6465-4395-9ae7-a321a9fd2856), + local +] +interface IMFAudioPolicy : IUnknown +{ + HRESULT SetGroupingParam([in] REFGUID param); + HRESULT GetGroupingParam([out] GUID *param); + HRESULT SetDisplayName([in] LPCWSTR name); + HRESULT GetDisplayName([out] LPWSTR *name); + HRESULT SetIconPath([in] LPCWSTR path); + HRESULT GetIconPath([out] LPWSTR *path); +} + cpp_quote("#ifdef __cplusplus") cpp_quote("static inline HRESULT MFSetAttributeSize(IMFAttributes *attributes, REFGUID key, UINT32 width, UINT32 height)") cpp_quote("{") @@ -967,6 +1015,10 @@ cpp_quote("}") cpp_quote("#endif") +cpp_quote("#define MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS_CROSSPROCESS 0x00000001") +cpp_quote("#define MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS_NOPERSIST 0x00000002") +cpp_quote("#define MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS_DONT_ALLOW_FORMAT_CHANGES 0x00000004") + cpp_quote("EXTERN_GUID(MF_ACTIVATE_MFT_LOCKED, 0xc1f6093c, 0x7f65, 0x4fbd, 0x9e, 0x39, 0x5f, 0xae, 0xc3, 0xc4, 0xfb, 0xd7);") cpp_quote("EXTERN_GUID(MF_SD_LANGUAGE, 0x00af2180, 0xbdc2, 0x423c, 0xab, 0xca, 0xf5, 0x03, 0x59, 0x3b, 0xc1, 0x21);") @@ -1052,6 +1104,10 @@ cpp_quote("EXTERN_GUID(MF_RATE_CONTROL_SERVICE, 0x866fa297, 0xb802, 0x4bf8, 0x9d, 0xc9, 0x5e, 0x3b, 0x6a, 0x9f, 0x53, 0xc9);") cpp_quote("EXTERN_GUID(MF_LOCAL_MFT_REGISTRATION_SERVICE, 0xddf5cf9c, 0x4506, 0x45aa, 0xab, 0xf0, 0x6d, 0x5d, 0x94, 0xdd, 0x1b, 0x4a);") cpp_quote("EXTERN_C const GUID MF_SCRUBBING_SERVICE;") +cpp_quote("EXTERN_GUID(MR_POLICY_VOLUME_SERVICE, 0x1abaa2ac, 0x9d3b, 0x47c6, 0xab, 0x48, 0xc5, 0x95, 0x06, 0xde, 0x78, 0x4d);") +cpp_quote("EXTERN_GUID(MR_CAPTURE_POLICY_VOLUME_SERVICE, 0x24030acd, 0x107a, 0x4265, 0x97, 0x5c, 0x41, 0x4e, 0x33, 0xe6, 0x5f, 0x2a);") +cpp_quote("EXTERN_GUID(MR_STREAM_VOLUME_SERVICE, 0xf8b5fa2f, 0x32ef, 0x46f5, 0xb1, 0x72, 0x13, 0x21, 0x21, 0x2f, 0xb2, 0xc4);") +cpp_quote("EXTERN_GUID(MR_AUDIO_POLICY_SERVICE, 0x911fd737, 0x6775, 0x4ab0, 0xa6, 0x14, 0x29, 0x78, 0x62, 0xfd, 0xac, 0x88);") cpp_quote("EXTERN_GUID(MF_SAMPLEGRABBERSINK_SAMPLE_TIME_OFFSET, 0x62e3d776, 0x8100, 0x4e03, 0xa6, 0xe8, 0xbd, 0x38, 0x57, 0xac, 0x9c, 0x47);") cpp_quote("EXTERN_GUID(MF_SAMPLEGRABBERSINK_IGNORE_CLOCK, 0x0efda2c0, 0x2b69, 0x4e2e, 0xab, 0x8d, 0x46, 0xdc, 0xbf, 0xf7, 0xd2, 0x5d);") @@ -1065,4 +1121,10 @@ cpp_quote("EXTERN_GUID(MF_SESSION_APPROX_EVENT_OCCURRENCE_TIME, 0x190e852f, 0x6238, 0x42d1, 0xb5, 0xaf, 0x69, 0xea, 0x33, 0x8e, 0xf8, 0x50);") cpp_quote("EXTERN_GUID(MF_PMP_SERVER_CONTEXT, 0x2f00c910, 0xd2cf, 0x4278, 0x8b, 0x6a, 0xd0, 0x77, 0xfa, 0xc3, 0xa2, 0x5f);") +cpp_quote("EXTERN_GUID(MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS, 0xede4b5e0, 0xf805, 0x4d6c, 0x99, 0xb3, 0xdb, 0x01, 0xbf, 0x95, 0xdf, 0xab);") +cpp_quote("EXTERN_GUID(MF_AUDIO_RENDERER_ATTRIBUTE_SESSION_ID, 0xede4b5e3, 0xf805, 0x4d6c, 0x99, 0xb3, 0xdb, 0x01, 0xbf, 0x95, 0xdf, 0xab);") +cpp_quote("EXTERN_GUID(MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID, 0xb10aaec3, 0xef71, 0x4cc3, 0xb8, 0x73, 0x05, 0xa9, 0xa0, 0x8b, 0x9f, 0x8e);") +cpp_quote("EXTERN_GUID(MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE, 0x6ba644ff, 0x27c5, 0x4d02, 0x98, 0x87, 0xc2, 0x86, 0x19, 0xfd, 0xb9, 0x1b);") +cpp_quote("EXTERN_GUID(MF_AUDIO_RENDERER_ATTRIBUTE_STREAM_CATEGORY, 0xa9770471, 0x92ec, 0x4df4, 0x94, 0xfe, 0x81, 0xc3, 0x6f, 0x0c, 0x3a, 0x7a);") + cpp_quote("EXTERN_GUID(CLSID_VideoProcessorMFT, 0x88753b26, 0x5b24, 0x49bd, 0xb2, 0xe7, 0xc, 0x44, 0x5c, 0x78, 0xc9, 0x82);") diff -Nru wine-development-5.5/include/msvcrt/corecrt_startup.h wine-development-5.6/include/msvcrt/corecrt_startup.h --- wine-development-5.5/include/msvcrt/corecrt_startup.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/msvcrt/corecrt_startup.h 2020-04-10 18:54:32.000000000 +0000 @@ -32,7 +32,10 @@ _PVFV *_end; } _onexit_table_t; +#ifndef _CRT_ONEXIT_T_DEFINED +#define _CRT_ONEXIT_T_DEFINED typedef int (__cdecl *_onexit_t)(void); +#endif struct _exception; typedef int (__cdecl *_UserMathErrorFunctionPointer)(struct _exception *); diff -Nru wine-development-5.5/include/msvcrt/stdlib.h wine-development-5.6/include/msvcrt/stdlib.h --- wine-development-5.5/include/msvcrt/stdlib.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/msvcrt/stdlib.h 2020-04-10 18:54:32.000000000 +0000 @@ -136,7 +136,10 @@ errno_t __cdecl _set_doserrno(int); errno_t __cdecl _set_errno(int); +#ifndef _CRT_ONEXIT_T_DEFINED +#define _CRT_ONEXIT_T_DEFINED typedef int (__cdecl *_onexit_t)(void); +#endif int __cdecl _atodbl(_CRT_DOUBLE*,char*); diff -Nru wine-development-5.5/include/rpcndr.h wine-development-5.6/include/rpcndr.h --- wine-development-5.5/include/rpcndr.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/rpcndr.h 2020-04-10 18:54:32.000000000 +0000 @@ -664,12 +664,16 @@ NdrUserMarshalSimpleTypeConvert( ULONG *pFlags, unsigned char *pBuffer, unsigned char FormatChar ); CLIENT_CALL_RETURN RPC_VAR_ENTRY + NdrClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... ); +CLIENT_CALL_RETURN RPC_VAR_ENTRY NdrClientCall2( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... ); CLIENT_CALL_RETURN RPC_VAR_ENTRY - NdrClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... ); + NdrClientCall3( MIDL_STUBLESS_PROXY_INFO *info, ULONG proc, void *retval, ... ); CLIENT_CALL_RETURN RPC_VAR_ENTRY NdrAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... ); CLIENT_CALL_RETURN RPC_VAR_ENTRY + Ndr64AsyncClientCall( MIDL_STUBLESS_PROXY_INFO *info, ULONG proc, void *retval, ... ); +CLIENT_CALL_RETURN RPC_VAR_ENTRY NdrDcomAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... ); RPCRTAPI void RPC_ENTRY diff -Nru wine-development-5.5/include/rtworkq.idl wine-development-5.6/include/rtworkq.idl --- wine-development-5.5/include/rtworkq.idl 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/rtworkq.idl 2020-04-10 18:54:32.000000000 +0000 @@ -52,6 +52,18 @@ HRESULT Invoke([in] IRtwqAsyncResult *result); } +[ + object, + uuid(63d9255a-7ff1-4b61-8faf-ed6460dacf2b), + local +] +interface IRtwqPlatformEvents : IUnknown +{ + HRESULT InitializationComplete(void); + HRESULT ShutdownStart(void); + HRESULT ShutdownComplete(void); +} + cpp_quote("#define RTWQ_E_ERROR(x) ((HRESULT)(0xc00d0000L+x))") cpp_quote("#define RTWQ_E_BUFFERTOOSMALL RTWQ_E_ERROR(14001)") cpp_quote("#define RTWQ_E_NOT_INITIALIZED RTWQ_E_ERROR(14006)") @@ -80,15 +92,22 @@ cpp_quote("HRESULT WINAPI RtwqAddPeriodicCallback(RTWQPERIODICCALLBACK callback, IUnknown *context, DWORD *key);") cpp_quote("HRESULT WINAPI RtwqAllocateSerialWorkQueue(DWORD target_queue, DWORD *queue);") cpp_quote("HRESULT WINAPI RtwqAllocateWorkQueue(RTWQ_WORKQUEUE_TYPE queue_type, DWORD *queue);") +cpp_quote("HRESULT WINAPI RtwqBeginRegisterWorkQueueWithMMCSS(DWORD queue, const WCHAR *class, DWORD taskid, LONG priority, IRtwqAsyncCallback *callback, IUnknown *state);") cpp_quote("HRESULT WINAPI RtwqCancelDeadline(HANDLE request);") cpp_quote("HRESULT WINAPI RtwqCancelWorkItem(RTWQWORKITEM_KEY key);") cpp_quote("HRESULT WINAPI RtwqCreateAsyncResult(IUnknown *object, IRtwqAsyncCallback *callback, IUnknown *state, IRtwqAsyncResult **result);") +cpp_quote("HRESULT WINAPI RtwqGetWorkQueueMMCSSClass(DWORD queue, WCHAR *class, DWORD *length);") +cpp_quote("HRESULT WINAPI RtwqGetWorkQueueMMCSSPriority(DWORD queue, LONG *priority);") +cpp_quote("HRESULT WINAPI RtwqGetWorkQueueMMCSSTaskId(DWORD queue, DWORD *taskid);") cpp_quote("HRESULT WINAPI RtwqInvokeCallback(IRtwqAsyncResult *result);") +cpp_quote("HRESULT WINAPI RtwqJoinWorkQueue(DWORD queue, HANDLE hFile, HANDLE *cookie);") cpp_quote("HRESULT WINAPI RtwqLockPlatform(void);") cpp_quote("HRESULT WINAPI RtwqLockSharedWorkQueue(const WCHAR *usageclass, LONG priority, DWORD *taskid, DWORD *queue);") cpp_quote("HRESULT WINAPI RtwqLockWorkQueue(DWORD queue);") cpp_quote("HRESULT WINAPI RtwqPutWaitingWorkItem(HANDLE event, LONG priority, IRtwqAsyncResult *result, RTWQWORKITEM_KEY *key);") cpp_quote("HRESULT WINAPI RtwqPutWorkItem(DWORD queue, LONG priority, IRtwqAsyncResult *result);") +cpp_quote("HRESULT WINAPI RtwqRegisterPlatformEvents(IRtwqPlatformEvents *events);") +cpp_quote("HRESULT WINAPI RtwqRegisterPlatformWithMMCSS(const WCHAR *class, DWORD *taskid, LONG priority);") cpp_quote("HRESULT WINAPI RtwqRemovePeriodicCallback(DWORD key);") cpp_quote("HRESULT WINAPI RtwqScheduleWorkItem(IRtwqAsyncResult *result, INT64 timeout, RTWQWORKITEM_KEY *key);") cpp_quote("HRESULT WINAPI RtwqSetDeadline(DWORD queue_id, LONGLONG deadline, HANDLE *request);") @@ -96,5 +115,8 @@ cpp_quote("HRESULT WINAPI RtwqSetLongRunning(DWORD queue_id, BOOL enable);") cpp_quote("HRESULT WINAPI RtwqShutdown(void);") cpp_quote("HRESULT WINAPI RtwqStartup(void);") +cpp_quote("HRESULT WINAPI RtwqUnjoinWorkQueue(DWORD queue, HANDLE cookie);") cpp_quote("HRESULT WINAPI RtwqUnlockPlatform(void);") cpp_quote("HRESULT WINAPI RtwqUnlockWorkQueue(DWORD queue);") +cpp_quote("HRESULT WINAPI RtwqUnregisterPlatformEvents(IRtwqPlatformEvents *events);") +cpp_quote("HRESULT WINAPI RtwqUnregisterPlatformFromMMCSS(void);") diff -Nru wine-development-5.5/include/spatialaudioclient.idl wine-development-5.6/include/spatialaudioclient.idl --- wine-development-5.5/include/spatialaudioclient.idl 1970-01-01 00:00:00.000000000 +0000 +++ wine-development-5.6/include/spatialaudioclient.idl 2020-04-10 18:54:32.000000000 +0000 @@ -0,0 +1,100 @@ +/* + * Copyright 2020 Nikolay Sivov for CodeWeavers + * + * 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 + */ + +import "unknwn.idl"; +import "audioclient.idl"; +import "propsys.idl"; + +typedef [v1_enum] enum AudioObjectType +{ + AudioObjectType_None = 0, + AudioObjectType_Dynamic = 0x00000001, + AudioObjectType_FrontLeft = 0x00000002, + AudioObjectType_FrontRight = 0x00000004, + AudioObjectType_FrontCenter = 0x00000008, + AudioObjectType_LowFrequency = 0x00000010, + AudioObjectType_SideLeft = 0x00000020, + AudioObjectType_SideRight = 0x00000040, + AudioObjectType_BackLeft = 0x00000080, + AudioObjectType_BackRight = 0x00000100, + AudioObjectType_TopFrontLeft = 0x00000200, + AudioObjectType_TopFrontRight = 0x00000400, + AudioObjectType_TopBackLeft = 0x00000800, + AudioObjectType_TopBackRight = 0x00001000, + AudioObjectType_BottomFrontLeft = 0x00002000, + AudioObjectType_BottomFrontRight = 0x00004000, + AudioObjectType_BottomBackLeft = 0x00008000, + AudioObjectType_BottomBackRight = 0x00010000, + AudioObjectType_BackCenter = 0x00020000, +} AudioObjectType; + +[ + object, + uuid(dcdaa858-895a-4a22-a5eb-67bda506096d), + pointer_default(unique), + local +] +interface IAudioFormatEnumerator : IUnknown +{ + HRESULT GetCount( + [out] UINT32 *count); + + HRESULT GetFormat( + [in] UINT32 index, + [out] WAVEFORMATEX **format); +} + +[ + object, + uuid(bbf8e066-aaaa-49be-9a4d-fd2a858ea27f), + pointer_default(unique), + local +] +interface ISpatialAudioClient : IUnknown +{ + HRESULT GetStaticObjectPosition( + [in] AudioObjectType type, + [out] float *x, + [out] float *y, + [out] float *z); + + HRESULT GetNativeStaticObjectTypeMask( + [out] AudioObjectType *mask); + + HRESULT GetMaxDynamicObjectCount( + [out] UINT32 *value); + + HRESULT GetSupportedAudioObjectFormatEnumerator( + [out] IAudioFormatEnumerator **enumerator); + + HRESULT GetMaxFrameCount( + [in] WAVEFORMATEX const *format, + [out] UINT32 *count); + + HRESULT IsAudioObjectFormatSupported( + [in] WAVEFORMATEX const *format); + + HRESULT IsSpatialAudioStreamAvailable( + [in] REFIID stream_uuid, + [in] PROPVARIANT const *info); + + HRESULT ActivateSpatialAudioStream( + [in] PROPVARIANT const *params, + [in] REFIID riid, + [out, iid_is(riid)] void **stream); +} diff -Nru wine-development-5.5/include/sspi.h wine-development-5.6/include/sspi.h --- wine-development-5.5/include/sspi.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/sspi.h 2020-04-10 18:54:32.000000000 +0000 @@ -201,6 +201,7 @@ #define SECBUFFER_MECHLIST_SIGNATURE 12 #define SECBUFFER_TARGET 13 #define SECBUFFER_CHANNEL_BINDINGS 14 +#define SECBUFFER_APPLICATION_PROTOCOLS 18 #define SECBUFFER_ATTRMASK 0xf0000000 #define SECBUFFER_READONLY 0x80000000 @@ -497,6 +498,7 @@ #define SECPKG_ATTR_NEGO_PKG_INFO 31 #define SECPKG_ATTR_NEGO_STATUS 32 #define SECPKG_ATTR_CONTEXT_DELETED 33 +#define SECPKG_ATTR_APPLICATION_PROTOCOL 35 #define SECPKG_ATTR_SUBJECT_SECURITY_ATTRIBUTES 128 #define SECPKG_ATTR_NEGO_INFO_FLAG_NO_KERBEROS 0x1 @@ -712,6 +714,30 @@ SEC_CHANNEL_BINDINGS *Bindings; } SecPkgContext_Bindings, *PSecPkgContext_Bindings; +typedef enum _SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS +{ + SecApplicationProtocolNegotiationStatus_None, + SecApplicationProtocolNegotiationStatus_Success, + SecApplicationProtocolNegotiationStatus_SelectedClientOnly +} SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS, *PSEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS; + +typedef enum _SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT +{ + SecApplicationProtocolNegotiationExt_None, + SecApplicationProtocolNegotiationExt_NPN, + SecApplicationProtocolNegotiationExt_ALPN +} SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT, *PSEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT; + +#define MAX_PROTOCOL_ID_SIZE 0xff + +typedef struct _SecPkgContext_ApplicationProtocol +{ + SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS ProtoNegoStatus; + SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT ProtoNegoExt; + unsigned char ProtocolIdSize; + unsigned char ProtocolId[MAX_PROTOCOL_ID_SIZE]; +} SecPkgContext_ApplicationProtocol, *PSecPkgContext_ApplicationProtocol; + SECURITY_STATUS SEC_ENTRY ImpersonateSecurityContext(PCtxtHandle phContext); typedef SECURITY_STATUS (SEC_ENTRY *IMPERSONATE_SECURITY_CONTEXT_FN) diff -Nru wine-development-5.5/include/wine/library.h wine-development-5.6/include/wine/library.h --- wine-development-5.5/include/wine/library.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/wine/library.h 2020-04-10 18:54:32.000000000 +0000 @@ -54,16 +54,8 @@ /* dll loading */ typedef void (*load_dll_callback_t)( void *, const char * ); - -extern void *wine_dlopen( const char *filename, int flag, char *error, size_t errorsize ); -extern void *wine_dlsym( void *handle, const char *symbol, char *error, size_t errorsize ); -extern int wine_dlclose( void *handle, char *error, size_t errorsize ); extern void wine_dll_set_callback( load_dll_callback_t load ); extern const char *wine_dll_enum_load_path( unsigned int index ); - -extern int __wine_main_argc; -extern char **__wine_main_argv; -extern WCHAR **__wine_main_wargv; extern void __wine_dll_register( const IMAGE_NT_HEADERS *header, const char *filename ); extern void wine_init( int argc, char *argv[], char *error, int error_size ); @@ -76,116 +68,6 @@ extern int wine_mmap_enum_reserved_areas( int (*enum_func)(void *base, size_t size, void *arg), void *arg, int top_down ); -#ifdef __i386__ - -/* LDT management */ - -extern void wine_ldt_init_locking( void (*lock_func)(void), void (*unlock_func)(void) ); -extern void wine_ldt_get_entry( unsigned short sel, LDT_ENTRY *entry ); -extern int wine_ldt_set_entry( unsigned short sel, const LDT_ENTRY *entry ); -extern int wine_ldt_is_system( unsigned short sel ); -extern void *wine_ldt_get_ptr( unsigned short sel, unsigned long offset ); -extern unsigned short wine_ldt_alloc_entries( int count ); -extern unsigned short wine_ldt_realloc_entries( unsigned short sel, int oldcount, int newcount ); -extern void wine_ldt_free_entries( unsigned short sel, int count ); -extern unsigned short wine_ldt_alloc_fs(void); -extern void wine_ldt_init_fs( unsigned short sel, const LDT_ENTRY *entry ); -extern void wine_ldt_free_fs( unsigned short sel ); - -/* the local copy of the LDT */ -extern struct __wine_ldt_copy -{ - void *base[8192]; /* base address or 0 if entry is free */ - unsigned long limit[8192]; /* limit in bytes or 0 if entry is free */ - unsigned char flags[8192]; /* flags (defined below) */ -} wine_ldt_copy; - -#define WINE_LDT_FLAGS_DATA 0x13 /* Data segment */ -#define WINE_LDT_FLAGS_STACK 0x17 /* Stack segment */ -#define WINE_LDT_FLAGS_CODE 0x1b /* Code segment */ -#define WINE_LDT_FLAGS_TYPE_MASK 0x1f /* Mask for segment type */ -#define WINE_LDT_FLAGS_32BIT 0x40 /* Segment is 32-bit (code or stack) */ -#define WINE_LDT_FLAGS_ALLOCATED 0x80 /* Segment is allocated (no longer free) */ - -/* helper functions to manipulate the LDT_ENTRY structure */ -static inline void wine_ldt_set_base( LDT_ENTRY *ent, const void *base ) -{ - ent->BaseLow = (WORD)(ULONG_PTR)base; - ent->HighWord.Bits.BaseMid = (BYTE)((ULONG_PTR)base >> 16); - ent->HighWord.Bits.BaseHi = (BYTE)((ULONG_PTR)base >> 24); -} -static inline void wine_ldt_set_limit( LDT_ENTRY *ent, unsigned int limit ) -{ - if ((ent->HighWord.Bits.Granularity = (limit >= 0x100000))) limit >>= 12; - ent->LimitLow = (WORD)limit; - ent->HighWord.Bits.LimitHi = (limit >> 16); -} -static inline void *wine_ldt_get_base( const LDT_ENTRY *ent ) -{ - return (void *)(ent->BaseLow | - (ULONG_PTR)ent->HighWord.Bits.BaseMid << 16 | - (ULONG_PTR)ent->HighWord.Bits.BaseHi << 24); -} -static inline unsigned int wine_ldt_get_limit( const LDT_ENTRY *ent ) -{ - unsigned int limit = ent->LimitLow | (ent->HighWord.Bits.LimitHi << 16); - if (ent->HighWord.Bits.Granularity) limit = (limit << 12) | 0xfff; - return limit; -} -static inline void wine_ldt_set_flags( LDT_ENTRY *ent, unsigned char flags ) -{ - ent->HighWord.Bits.Dpl = 3; - ent->HighWord.Bits.Pres = 1; - ent->HighWord.Bits.Type = flags; - ent->HighWord.Bits.Sys = 0; - ent->HighWord.Bits.Reserved_0 = 0; - ent->HighWord.Bits.Default_Big = (flags & WINE_LDT_FLAGS_32BIT) != 0; -} -static inline unsigned char wine_ldt_get_flags( const LDT_ENTRY *ent ) -{ - unsigned char ret = ent->HighWord.Bits.Type; - if (ent->HighWord.Bits.Default_Big) ret |= WINE_LDT_FLAGS_32BIT; - return ret; -} -static inline int wine_ldt_is_empty( const LDT_ENTRY *ent ) -{ - const DWORD *dw = (const DWORD *)ent; - return (dw[0] | dw[1]) == 0; -} - -/* segment register access */ - -# if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2))) -# define __DEFINE_GET_SEG(seg) \ - static FORCEINLINE unsigned short wine_get_##seg(void) \ - { unsigned short res; __asm__ __volatile__("movw %%" #seg ",%w0" : "=r"(res)); return res; } -# define __DEFINE_SET_SEG(seg) \ - static FORCEINLINE void wine_set_##seg(int val) \ - { __asm__("movw %w0,%%" #seg : : "r" (val)); } -# elif defined(_MSC_VER) -# define __DEFINE_GET_SEG(seg) \ - static inline unsigned short wine_get_##seg(void) \ - { unsigned short res; __asm { mov res, seg } return res; } -# define __DEFINE_SET_SEG(seg) \ - static inline void wine_set_##seg(unsigned short val) { __asm { mov seg, val } } -# else /* __GNUC__ || _MSC_VER */ -# define __DEFINE_GET_SEG(seg) extern unsigned short wine_get_##seg(void); -# define __DEFINE_SET_SEG(seg) extern void wine_set_##seg(unsigned int); -# endif /* __GNUC__ || _MSC_VER */ - -__DEFINE_GET_SEG(cs) -__DEFINE_GET_SEG(ds) -__DEFINE_GET_SEG(es) -__DEFINE_GET_SEG(fs) -__DEFINE_GET_SEG(gs) -__DEFINE_GET_SEG(ss) -__DEFINE_SET_SEG(fs) -__DEFINE_SET_SEG(gs) -#undef __DEFINE_GET_SEG -#undef __DEFINE_SET_SEG - -#endif /* __i386__ */ - #ifdef __cplusplus } #endif diff -Nru wine-development-5.5/include/wine/port.h wine-development-5.6/include/wine/port.h --- wine-development-5.5/include/wine/port.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/wine/port.h 2020-04-10 18:54:32.000000000 +0000 @@ -55,6 +55,11 @@ #define mkdir(path,mode) mkdir(path) +static inline void *dlopen(const char *name, int flags) { return NULL; } +static inline void *dlsym(void *handle, const char *name) { return NULL; } +static inline int dlclose(void *handle) { return 0; } +static inline const char *dlerror(void) { return "No dlopen support on Windows"; } + #ifdef _MSC_VER #define ftruncate chsize diff -Nru wine-development-5.5/include/wine/strmbase.h wine-development-5.6/include/wine/strmbase.h --- wine-development-5.5/include/wine/strmbase.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/wine/strmbase.h 2020-04-10 18:54:32.000000000 +0000 @@ -327,6 +327,6 @@ HRESULT WINAPI BaseRendererImpl_Receive(struct strmbase_renderer *filter, IMediaSample *sample); -HRESULT WINAPI strmbase_renderer_init(struct strmbase_renderer *filter, IUnknown *outer, +void strmbase_renderer_init(struct strmbase_renderer *filter, IUnknown *outer, const CLSID *clsid, const WCHAR *sink_name, const struct strmbase_renderer_ops *ops); void strmbase_renderer_cleanup(struct strmbase_renderer *filter); diff -Nru wine-development-5.5/include/winerror.h wine-development-5.6/include/winerror.h --- wine-development-5.5/include/winerror.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/winerror.h 2020-04-10 18:54:32.000000000 +0000 @@ -3169,10 +3169,6 @@ #define SEC_E_MESSAGE_ALTERED _HRESULT_TYPEDEF_(0x8009030F) #define SEC_E_OUT_OF_SEQUENCE _HRESULT_TYPEDEF_(0x80090310) #define SEC_E_NO_AUTHENTICATING_AUTHORITY _HRESULT_TYPEDEF_(0x80090311) -#define SEC_I_CONTINUE_NEEDED _HRESULT_TYPEDEF_(0x00090312) -#define SEC_I_COMPLETE_NEEDED _HRESULT_TYPEDEF_(0x00090313) -#define SEC_I_COMPLETE_AND_CONTINUE _HRESULT_TYPEDEF_(0x00090314) -#define SEC_I_CONTEXT_EXPIRED _HRESULT_TYPEDEF_(0x00090317) #define SEC_E_BAD_PKGID _HRESULT_TYPEDEF_(0x80090316) #define SEC_E_CONTEXT_EXPIRED _HRESULT_TYPEDEF_(0x80090317) #define SEC_E_INCOMPLETE_MESSAGE _HRESULT_TYPEDEF_(0x80090318) @@ -3222,21 +3218,27 @@ #define SEC_E_ISSUING_CA_UNTRUSTED_KDC _HRESULT_TYPEDEF_(0x80090359) #define SEC_E_KDC_CERT_EXPIRED _HRESULT_TYPEDEF_(0x8009035A) #define SEC_E_KDC_CERT_REVOKED _HRESULT_TYPEDEF_(0x8009035B) -#define SEC_I_SIGNATURE_NEEDED _HRESULT_TYPEDEF_(0x0009035C) #define SEC_E_INVALID_PARAMETER _HRESULT_TYPEDEF_(0x8009035D) #define SEC_E_DELEGATION_POLICY _HRESULT_TYPEDEF_(0x8009035E) #define SEC_E_POLICY_NLTM_ONLY _HRESULT_TYPEDEF_(0x8009035F) -#define SEC_I_NO_RENEGOTIATION _HRESULT_TYPEDEF_(0x00090360) #define SEC_E_NO_CONTEXT _HRESULT_TYPEDEF_(0x80090361) #define SEC_E_PKU2U_CERT_FAILURE _HRESULT_TYPEDEF_(0x80090362) #define SEC_E_MUTUAL_AUTH_FAILED _HRESULT_TYPEDEF_(0x80090363) -#define SEC_I_MESSAGE_FRAGMENT _HRESULT_TYPEDEF_(0x00090364) #define SEC_E_ONLY_HTTPS_ALLOWED _HRESULT_TYPEDEF_(0x80090365) -#define SEC_I_CONTINUE_NEEDED_MESSAGE_OK _HRESULT_TYPEDEF_(0x00090366) #define SEC_E_APPLICATION_PROTOCOL_MISMATCH _HRESULT_TYPEDEF_(0x80090367) -#define SEC_I_ASYNC_CALL_PENDING _HRESULT_TYPEDEF_(0x00090368) #define SEC_E_INVALID_UPN_NAME _HRESULT_TYPEDEF_(0x80090369) +#define SEC_I_CONTINUE_NEEDED _HRESULT_TYPEDEF_(0x00090312) +#define SEC_I_COMPLETE_NEEDED _HRESULT_TYPEDEF_(0x00090313) +#define SEC_I_COMPLETE_AND_CONTINUE _HRESULT_TYPEDEF_(0x00090314) +#define SEC_I_CONTEXT_EXPIRED _HRESULT_TYPEDEF_(0x00090317) +#define SEC_I_RENEGOTIATE _HRESULT_TYPEDEF_(0x00090321) +#define SEC_I_SIGNATURE_NEEDED _HRESULT_TYPEDEF_(0x0009035C) +#define SEC_I_NO_RENEGOTIATION _HRESULT_TYPEDEF_(0x00090360) +#define SEC_I_MESSAGE_FRAGMENT _HRESULT_TYPEDEF_(0x00090364) +#define SEC_I_CONTINUE_NEEDED_MESSAGE_OK _HRESULT_TYPEDEF_(0x00090366) +#define SEC_I_ASYNC_CALL_PENDING _HRESULT_TYPEDEF_(0x00090368) + #define CRYPT_E_MSG_ERROR _HRESULT_TYPEDEF_(0x80091001) #define CRYPT_E_UNKNOWN_ALGO _HRESULT_TYPEDEF_(0x80091002) #define CRYPT_E_OID_FORMAT _HRESULT_TYPEDEF_(0x80091003) diff -Nru wine-development-5.5/include/winldap.h wine-development-5.6/include/winldap.h --- wine-development-5.5/include/winldap.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/winldap.h 2020-04-10 18:54:32.000000000 +0000 @@ -104,6 +104,8 @@ #define LDAP_SCOPE_ONELEVEL 0x01 #define LDAP_SCOPE_SUBTREE 0x02 +#define LBER_USE_DER 0x01 + typedef struct berelement { PCHAR opaque; diff -Nru wine-development-5.5/include/winnt.h wine-development-5.6/include/winnt.h --- wine-development-5.5/include/winnt.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/winnt.h 2020-04-10 18:54:32.000000000 +0000 @@ -5080,7 +5080,10 @@ #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE 0xf #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE 0x10 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE 0x11 -#define ACCESS_MAX_MS_V5_ACE_TYPE 0x11 +#define SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE 0x12 +#define SYSTEM_SCOPED_POLICY_ID_ACE_TYPE 0x13 +#define SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE 0x14 +#define ACCESS_MAX_MS_V5_ACE_TYPE 0x14 /* inherit AceFlags */ #define OBJECT_INHERIT_ACE 0x01 diff -Nru wine-development-5.5/include/winternl.h wine-development-5.6/include/winternl.h --- wine-development-5.5/include/winternl.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/include/winternl.h 2020-04-10 18:54:32.000000000 +0000 @@ -2585,7 +2585,7 @@ NTSYSAPI NTSTATUS WINAPI NtSetInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetIntervalProfile(ULONG,KPROFILE_SOURCE); NTSYSAPI NTSTATUS WINAPI NtSetIoCompletion(HANDLE,ULONG_PTR,ULONG_PTR,NTSTATUS,SIZE_T); -NTSYSAPI NTSTATUS WINAPI NtSetLdtEntries(ULONG,ULONG,ULONG,ULONG,ULONG,ULONG); +NTSYSAPI NTSTATUS WINAPI NtSetLdtEntries(ULONG,LDT_ENTRY,ULONG,LDT_ENTRY); NTSYSAPI NTSTATUS WINAPI NtSetLowEventPair(HANDLE); NTSYSAPI NTSTATUS WINAPI NtSetLowWaitHighEventPair(HANDLE); NTSYSAPI NTSTATUS WINAPI NtSetLowWaitHighThread(VOID); diff -Nru wine-development-5.5/libs/port/stubs.c wine-development-5.6/libs/port/stubs.c --- wine-development-5.5/libs/port/stubs.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/libs/port/stubs.c 2020-04-10 18:54:32.000000000 +0000 @@ -56,26 +56,4 @@ return NULL; } -void *wine_dlopen( const char *filename, int flag, char *error, size_t errorsize ) -{ - if (error) - { - static const char msg[] = "no dlopen support on Windows"; - size_t len = min( errorsize, sizeof(msg) ); - memcpy( error, msg, len ); - error[len - 1] = 0; - } - return NULL; -} - -void *wine_dlsym( void *handle, const char *symbol, char *error, size_t errorsize ) -{ - return NULL; -} - -int wine_dlclose( void *handle, char *error, size_t errorsize ) -{ - return 0; -} - #endif /* _WIN32 */ diff -Nru wine-development-5.5/libs/wine/ldt.c wine-development-5.6/libs/wine/ldt.c --- wine-development-5.5/libs/wine/ldt.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/libs/wine/ldt.c 2020-04-10 18:54:32.000000000 +0000 @@ -31,11 +31,36 @@ #include "windef.h" #include "winbase.h" -#include "wine/library.h" #include "wine/asm.h" #ifdef __i386__ +#ifdef __ASM_OBSOLETE + +/* the local copy of the LDT */ +struct __wine_ldt_copy +{ + void *base[8192]; /* base address or 0 if entry is free */ + unsigned long limit[8192]; /* limit in bytes or 0 if entry is free */ + unsigned char flags[8192]; /* flags (defined below) */ +} wine_ldt_copy_obsolete = { { 0, 0, 0 } }; + +#define WINE_LDT_FLAGS_32BIT 0x40 /* Segment is 32-bit (code or stack) */ +#define WINE_LDT_FLAGS_ALLOCATED 0x80 /* Segment is allocated (no longer free) */ + +static inline void *wine_ldt_get_base( const LDT_ENTRY *ent ) +{ + return (void *)(ent->BaseLow | + (ULONG_PTR)ent->HighWord.Bits.BaseMid << 16 | + (ULONG_PTR)ent->HighWord.Bits.BaseHi << 24); +} +static inline unsigned int wine_ldt_get_limit( const LDT_ENTRY *ent ) +{ + unsigned int limit = ent->LimitLow | (ent->HighWord.Bits.LimitHi << 16); + if (ent->HighWord.Bits.Granularity) limit = (limit << 12) | 0xfff; + return limit; +} + #ifdef __linux__ #ifdef HAVE_SYS_SYSCALL_H @@ -102,13 +127,6 @@ #include #endif -/* local copy of the LDT */ -#ifdef __APPLE__ -struct __wine_ldt_copy wine_ldt_copy = { { 0, 0, 0 } }; -#else -struct __wine_ldt_copy wine_ldt_copy; -#endif - static const LDT_ENTRY null_entry; /* all-zeros, used to clear LDT entries */ #define LDT_FIRST_ENTRY 512 @@ -128,7 +146,7 @@ * * Set the LDT locking/unlocking functions. */ -void wine_ldt_init_locking( void (*lock_func)(void), void (*unlock_func)(void) ) +void wine_ldt_init_locking_obsolete( void (*lock_func)(void), void (*unlock_func)(void) ) { lock_ldt = lock_func; unlock_ldt = unlock_func; @@ -140,7 +158,7 @@ * * Retrieve an LDT entry. Return a null entry if selector is not allocated. */ -void wine_ldt_get_entry( unsigned short sel, LDT_ENTRY *entry ) +void wine_ldt_get_entry_obsolete( unsigned short sel, LDT_ENTRY *entry ) { int index = sel >> 3; @@ -150,11 +168,23 @@ return; } lock_ldt(); - if (wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_ALLOCATED) + if (wine_ldt_copy_obsolete.flags[index] & WINE_LDT_FLAGS_ALLOCATED) { - wine_ldt_set_base( entry, wine_ldt_copy.base[index] ); - wine_ldt_set_limit( entry, wine_ldt_copy.limit[index] ); - wine_ldt_set_flags( entry, wine_ldt_copy.flags[index] ); + ULONG_PTR base = (ULONG_PTR)wine_ldt_copy_obsolete.base[index]; + ULONG limit = wine_ldt_copy_obsolete.limit[index]; + + entry->BaseLow = (WORD)base; + entry->HighWord.Bits.BaseMid = (BYTE)(base >> 16); + entry->HighWord.Bits.BaseHi = (BYTE)(base >> 24); + if ((entry->HighWord.Bits.Granularity = (limit >= 0x100000))) limit >>= 12; + entry->LimitLow = (WORD)limit; + entry->HighWord.Bits.LimitHi = (limit >> 16); + entry->HighWord.Bits.Dpl = 3; + entry->HighWord.Bits.Pres = 1; + entry->HighWord.Bits.Type = wine_ldt_copy_obsolete.flags[index]; + entry->HighWord.Bits.Sys = 0; + entry->HighWord.Bits.Reserved_0 = 0; + entry->HighWord.Bits.Default_Big = !!(wine_ldt_copy_obsolete.flags[index] & WINE_LDT_FLAGS_32BIT); } else *entry = null_entry; unlock_ldt(); @@ -219,11 +249,11 @@ if (ret >= 0) { - wine_ldt_copy.base[index] = wine_ldt_get_base(entry); - wine_ldt_copy.limit[index] = wine_ldt_get_limit(entry); - wine_ldt_copy.flags[index] = (entry->HighWord.Bits.Type | + wine_ldt_copy_obsolete.base[index] = wine_ldt_get_base(entry); + wine_ldt_copy_obsolete.limit[index] = wine_ldt_get_limit(entry); + wine_ldt_copy_obsolete.flags[index] = (entry->HighWord.Bits.Type | (entry->HighWord.Bits.Default_Big ? WINE_LDT_FLAGS_32BIT : 0) | - (wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_ALLOCATED)); + (wine_ldt_copy_obsolete.flags[index] & WINE_LDT_FLAGS_ALLOCATED)); } return ret; } @@ -234,7 +264,7 @@ * * Set an LDT entry. */ -int wine_ldt_set_entry( unsigned short sel, const LDT_ENTRY *entry ) +int wine_ldt_set_entry_obsolete( unsigned short sel, const LDT_ENTRY *entry ) { int ret; @@ -250,7 +280,7 @@ * * Check if the selector is a system selector (i.e. not managed by Wine). */ -int wine_ldt_is_system( unsigned short sel ) +int wine_ldt_is_system_obsolete( unsigned short sel ) { return is_gdt_sel(sel) || ((sel >> 3) < LDT_FIRST_ENTRY); } @@ -262,7 +292,7 @@ * Convert a segment:offset pair to a linear pointer. * Note: we don't lock the LDT since this has to be fast. */ -void *wine_ldt_get_ptr( unsigned short sel, unsigned long offset ) +void *wine_ldt_get_ptr_obsolete( unsigned short sel, unsigned long offset ) { int index; @@ -270,8 +300,8 @@ return (void *)offset; if ((index = (sel >> 3)) < LDT_FIRST_ENTRY) /* system selector */ return (void *)offset; - if (!(wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_32BIT)) offset &= 0xffff; - return (char *)wine_ldt_copy.base[index] + offset; + if (!(wine_ldt_copy_obsolete.flags[index] & WINE_LDT_FLAGS_32BIT)) offset &= 0xffff; + return (char *)wine_ldt_copy_obsolete.base[index] + offset; } @@ -281,7 +311,7 @@ * Allocate a number of consecutive ldt entries, without setting the LDT contents. * Return a selector for the first entry. */ -unsigned short wine_ldt_alloc_entries( int count ) +unsigned short wine_ldt_alloc_entries_obsolete( int count ) { int i, index, size = 0; @@ -289,13 +319,13 @@ lock_ldt(); for (i = LDT_FIRST_ENTRY; i < LDT_SIZE; i++) { - if (wine_ldt_copy.flags[i] & WINE_LDT_FLAGS_ALLOCATED) size = 0; + if (wine_ldt_copy_obsolete.flags[i] & WINE_LDT_FLAGS_ALLOCATED) size = 0; else if (++size >= count) /* found a large enough block */ { index = i - size + 1; /* mark selectors as allocated */ - for (i = 0; i < count; i++) wine_ldt_copy.flags[index + i] |= WINE_LDT_FLAGS_ALLOCATED; + for (i = 0; i < count; i++) wine_ldt_copy_obsolete.flags[index + i] |= WINE_LDT_FLAGS_ALLOCATED; unlock_ldt(); return (index << 3) | 7; } @@ -305,13 +335,15 @@ } +void wine_ldt_free_entries_obsolete( unsigned short sel, int count ); + /*********************************************************************** * wine_ldt_realloc_entries * * Reallocate a number of consecutive ldt entries, without changing the LDT contents. * Return a selector for the first entry. */ -unsigned short wine_ldt_realloc_entries( unsigned short sel, int oldcount, int newcount ) +unsigned short wine_ldt_realloc_entries_obsolete( unsigned short sel, int oldcount, int newcount ) { int i; @@ -324,23 +356,23 @@ if (index + newcount > LDT_SIZE) i = oldcount; else for (i = oldcount; i < newcount; i++) - if (wine_ldt_copy.flags[index+i] & WINE_LDT_FLAGS_ALLOCATED) break; + if (wine_ldt_copy_obsolete.flags[index+i] & WINE_LDT_FLAGS_ALLOCATED) break; if (i < newcount) /* they are not free */ { - wine_ldt_free_entries( sel, oldcount ); - sel = wine_ldt_alloc_entries( newcount ); + wine_ldt_free_entries_obsolete( sel, oldcount ); + sel = wine_ldt_alloc_entries_obsolete( newcount ); } else /* mark the selectors as allocated */ { for (i = oldcount; i < newcount; i++) - wine_ldt_copy.flags[index+i] |= WINE_LDT_FLAGS_ALLOCATED; + wine_ldt_copy_obsolete.flags[index+i] |= WINE_LDT_FLAGS_ALLOCATED; } unlock_ldt(); } else if (oldcount > newcount) /* we need to remove selectors */ { - wine_ldt_free_entries( sel + (newcount << 3), newcount - oldcount ); + wine_ldt_free_entries_obsolete( sel + (newcount << 3), newcount - oldcount ); } return sel; } @@ -351,7 +383,7 @@ * * Free a number of consecutive ldt entries and clear their contents. */ -void wine_ldt_free_entries( unsigned short sel, int count ) +void wine_ldt_free_entries_obsolete( unsigned short sel, int count ) { int index; @@ -359,7 +391,7 @@ for (index = sel >> 3; count > 0; count--, index++) { internal_set_entry( sel, &null_entry ); - wine_ldt_copy.flags[index] = 0; + wine_ldt_copy_obsolete.flags[index] = 0; } unlock_ldt(); } @@ -373,7 +405,7 @@ * Allocate an LDT entry for a %fs selector, reusing a global * GDT selector if possible. Return the selector value. */ -unsigned short wine_ldt_alloc_fs(void) +unsigned short wine_ldt_alloc_fs_obsolete(void) { if (global_fs_sel == -1) { @@ -382,7 +414,7 @@ int ret; /* the preloader may have allocated it already */ - global_fs_sel = wine_get_fs(); + __asm__( "mov %%fs,%0" : "=r" (global_fs_sel) ); if (global_fs_sel && is_gdt_sel(global_fs_sel)) return global_fs_sel; memset( &ldt_info, 0, sizeof(ldt_info) ); @@ -400,7 +432,7 @@ #endif } if (global_fs_sel > 0) return global_fs_sel; - return wine_ldt_alloc_entries( 1 ); + return wine_ldt_alloc_entries_obsolete( 1 ); } @@ -412,7 +444,7 @@ * * Note: this runs in the context of the new thread, so cannot acquire locks. */ -void wine_ldt_init_fs( unsigned short sel, const LDT_ENTRY *entry ) +void wine_ldt_init_fs_obsolete( unsigned short sel, const LDT_ENTRY *entry ) { if ((sel & ~3) == (global_fs_sel & ~3)) { @@ -431,7 +463,7 @@ { internal_set_entry( sel, entry ); } - wine_set_fs( sel ); + __asm__( "mov %0,%%fs" :: "r" (sel) ); } @@ -440,30 +472,57 @@ * * Free a %fs selector returned by wine_ldt_alloc_fs. */ -void wine_ldt_free_fs( unsigned short sel ) +void wine_ldt_free_fs_obsolete( unsigned short sel ) { + WORD fs; + if (is_gdt_sel(sel)) return; /* nothing to do */ - if (!((wine_get_fs() ^ sel) & ~3)) + __asm__( "mov %%fs,%0" : "=r" (fs) ); + if (!((fs ^ sel) & ~3)) { /* FIXME: if freeing current %fs we cannot acquire locks */ - wine_set_fs( 0 ); + __asm__( "mov %0,%%fs" :: "r" (0) ); internal_set_entry( sel, &null_entry ); - wine_ldt_copy.flags[sel >> 3] = 0; + wine_ldt_copy_obsolete.flags[sel >> 3] = 0; } - else wine_ldt_free_entries( sel, 1 ); + else wine_ldt_free_entries_obsolete( sel, 1 ); } /*********************************************************************** * selector access functions */ -__ASM_GLOBAL_FUNC( wine_get_cs, "movw %cs,%ax\n\tret" ) -__ASM_GLOBAL_FUNC( wine_get_ds, "movw %ds,%ax\n\tret" ) -__ASM_GLOBAL_FUNC( wine_get_es, "movw %es,%ax\n\tret" ) -__ASM_GLOBAL_FUNC( wine_get_fs, "movw %fs,%ax\n\tret" ) -__ASM_GLOBAL_FUNC( wine_get_gs, "movw %gs,%ax\n\tret" ) -__ASM_GLOBAL_FUNC( wine_get_ss, "movw %ss,%ax\n\tret" ) -__ASM_GLOBAL_FUNC( wine_set_fs, "movl 4(%esp),%eax\n\tmovw %ax,%fs\n\tret" ) -__ASM_GLOBAL_FUNC( wine_set_gs, "movl 4(%esp),%eax\n\tmovw %ax,%gs\n\tret" ) +__ASM_GLOBAL_FUNC( wine_get_cs_obsolete, "movw %cs,%ax\n\tret" ) +__ASM_GLOBAL_FUNC( wine_get_ds_obsolete, "movw %ds,%ax\n\tret" ) +__ASM_GLOBAL_FUNC( wine_get_es_obsolete, "movw %es,%ax\n\tret" ) +__ASM_GLOBAL_FUNC( wine_get_fs_obsolete, "movw %fs,%ax\n\tret" ) +__ASM_GLOBAL_FUNC( wine_get_gs_obsolete, "movw %gs,%ax\n\tret" ) +__ASM_GLOBAL_FUNC( wine_get_ss_obsolete, "movw %ss,%ax\n\tret" ) +__ASM_GLOBAL_FUNC( wine_set_fs_obsolete, "movl 4(%esp),%eax\n\tmovw %ax,%fs\n\tret" ) +__ASM_GLOBAL_FUNC( wine_set_gs_obsolete, "movl 4(%esp),%eax\n\tmovw %ax,%gs\n\tret" ) + + +__ASM_OBSOLETE(wine_ldt_alloc_entries); +__ASM_OBSOLETE(wine_ldt_alloc_fs); +__ASM_OBSOLETE(wine_ldt_copy); +__ASM_OBSOLETE(wine_ldt_free_entries); +__ASM_OBSOLETE(wine_ldt_free_fs); +__ASM_OBSOLETE(wine_ldt_get_entry); +__ASM_OBSOLETE(wine_ldt_get_ptr); +__ASM_OBSOLETE(wine_ldt_init_fs); +__ASM_OBSOLETE(wine_ldt_init_locking); +__ASM_OBSOLETE(wine_ldt_is_system); +__ASM_OBSOLETE(wine_ldt_realloc_entries); +__ASM_OBSOLETE(wine_ldt_set_entry); +__ASM_OBSOLETE(wine_get_cs); +__ASM_OBSOLETE(wine_get_ds); +__ASM_OBSOLETE(wine_get_es); +__ASM_OBSOLETE(wine_get_fs); +__ASM_OBSOLETE(wine_get_gs); +__ASM_OBSOLETE(wine_get_ss); +__ASM_OBSOLETE(wine_set_fs); +__ASM_OBSOLETE(wine_set_gs); + +#endif /* __ASM_OBSOLETE */ #endif /* __i386__ */ diff -Nru wine-development-5.5/libs/wine/loader.c wine-development-5.6/libs/wine/loader.c --- wine-development-5.5/libs/wine/loader.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/libs/wine/loader.c 2020-04-10 18:54:32.000000000 +0000 @@ -508,6 +508,128 @@ #ifdef __ASM_OBSOLETE +/* + * These functions provide wrappers around dlopen() and associated + * functions. They work around a bug in glibc 2.1.x where calling + * a dl*() function after a previous dl*() function has failed + * without a dlerror() call between the two will cause a crash. + * They all take a pointer to a buffer that + * will receive the error description (from dlerror()). This + * parameter may be NULL if the error description is not required. + */ + +#ifndef RTLD_FIRST +#define RTLD_FIRST 0 +#endif + +/*********************************************************************** + * wine_dlopen + */ +void *wine_dlopen_obsolete( const char *filename, int flag, char *error, size_t errorsize ) +{ + void *ret; + const char *s; + +#ifdef __APPLE__ + /* the Mac OS loader pretends to be able to load PE files, so avoid them here */ + unsigned char magic[2]; + int fd = open( filename, O_RDONLY ); + if (fd != -1) + { + if (pread( fd, magic, 2, 0 ) == 2 && magic[0] == 'M' && magic[1] == 'Z') + { + if (error && errorsize) + { + static const char msg[] = "MZ format"; + size_t len = min( errorsize, sizeof(msg) ); + memcpy( error, msg, len ); + error[len - 1] = 0; + } + close( fd ); + return NULL; + } + close( fd ); + } +#endif + dlerror(); dlerror(); +#ifdef __sun + if (strchr( filename, ':' )) + { + char path[PATH_MAX]; + /* Solaris' brain damaged dlopen() treats ':' as a path separator */ + realpath( filename, path ); + ret = dlopen( path, flag | RTLD_FIRST ); + } + else +#endif + ret = dlopen( filename, flag | RTLD_FIRST ); + s = dlerror(); + if (error && errorsize) + { + if (s) + { + size_t len = strlen(s); + if (len >= errorsize) len = errorsize - 1; + memcpy( error, s, len ); + error[len] = 0; + } + else error[0] = 0; + } + dlerror(); + return ret; +} + +/*********************************************************************** + * wine_dlsym + */ +void *wine_dlsym_obsolete( void *handle, const char *symbol, char *error, size_t errorsize ) +{ + void *ret; + const char *s; + dlerror(); dlerror(); + ret = dlsym( handle, symbol ); + s = dlerror(); + if (error && errorsize) + { + if (s) + { + size_t len = strlen(s); + if (len >= errorsize) len = errorsize - 1; + memcpy( error, s, len ); + error[len] = 0; + } + else error[0] = 0; + } + dlerror(); + return ret; +} + +/*********************************************************************** + * wine_dlclose + */ +int wine_dlclose_obsolete( void *handle, char *error, size_t errorsize ) +{ + int ret; + const char *s; + dlerror(); dlerror(); + ret = dlclose( handle ); + s = dlerror(); + if (error && errorsize) + { + if (s) + { + size_t len = strlen(s); + if (len >= errorsize) len = errorsize - 1; + memcpy( error, s, len ); + error[len] = 0; + } + else error[0] = 0; + } + dlerror(); + return ret; +} + + /* check if the library is the correct architecture */ /* only returns false for a valid library of the wrong arch */ static int check_library_arch( int fd ) @@ -570,7 +692,7 @@ *exists = 0; for (path = first_dll_path( name, 0, &context ); path; path = next_dll_path( &context )) { - if (!test_only && (ret = wine_dlopen( path, RTLD_NOW, error, errorsize ))) break; + if (!test_only && (ret = wine_dlopen_obsolete( path, RTLD_NOW, error, errorsize ))) break; if ((*exists = file_exists( path ))) break; /* exists but cannot be loaded, return the error */ } free_dll_path( &context ); @@ -616,7 +738,7 @@ void wine_dll_unload_obsolete( void *handle ) { if (handle != (void *)1) - wine_dlclose( handle, NULL, 0 ); + wine_dlclose_obsolete( handle, NULL, 0 ); } @@ -664,6 +786,9 @@ return ret; } +__ASM_OBSOLETE(wine_dlopen); +__ASM_OBSOLETE(wine_dlsym); +__ASM_OBSOLETE(wine_dlclose); __ASM_OBSOLETE(wine_dll_get_owner); __ASM_OBSOLETE(wine_dll_load); __ASM_OBSOLETE(wine_dll_load_main_exe); @@ -923,10 +1048,11 @@ #ifdef __i386__ { - unsigned short java_fs = wine_get_fs(); - wine_set_fs( 0 ); + unsigned short java_fs; + __asm__( "mov %%fs,%0" : "=r" (java_fs) ); + __asm__( "mov %0,%%fs" :: "r" (0) ); wine_init( argc, argv, error, sizeof(error) ); - wine_set_fs( java_fs ); + __asm__( "mov %0,%%fs" :: "r" (java_fs) ); } #else wine_init( argc, argv, error, sizeof(error) ); @@ -982,7 +1108,7 @@ for (path = first_dll_path( "ntdll.dll", 0, &context ); path; path = next_dll_path( &context )) { - if ((ntdll = wine_dlopen( path, RTLD_NOW, error, error_size ))) + if ((ntdll = dlopen( path, RTLD_NOW ))) { /* if we didn't use the default dll dir, remove it from the search path */ if (default_dlldir[0] && context.index < nb_dll_paths + 2) nb_dll_paths--; @@ -991,133 +1117,24 @@ } free_dll_path( &context ); - if (!ntdll) return; - if (!(init_func = wine_dlsym( ntdll, "__wine_process_init", error, error_size ))) return; -#ifdef __APPLE__ - apple_main_thread( init_func ); -#else - init_func(); -#endif -} - - -/* - * These functions provide wrappers around dlopen() and associated - * functions. They work around a bug in glibc 2.1.x where calling - * a dl*() function after a previous dl*() function has failed - * without a dlerror() call between the two will cause a crash. - * They all take a pointer to a buffer that - * will receive the error description (from dlerror()). This - * parameter may be NULL if the error description is not required. - */ - -#ifndef RTLD_FIRST -#define RTLD_FIRST 0 -#endif - -/*********************************************************************** - * wine_dlopen - */ -void *wine_dlopen( const char *filename, int flag, char *error, size_t errorsize ) -{ - void *ret; - const char *s; - -#ifdef __APPLE__ - /* the Mac OS loader pretends to be able to load PE files, so avoid them here */ - unsigned char magic[2]; - int fd = open( filename, O_RDONLY ); - if (fd != -1) + if (!ntdll || !(init_func = dlsym( ntdll, "__wine_process_init" ))) { - if (pread( fd, magic, 2, 0 ) == 2 && magic[0] == 'M' && magic[1] == 'Z') + if (error && error_size) { - if (error && errorsize) + const char *s = dlerror(); + if (s) { - static const char msg[] = "MZ format"; - size_t len = min( errorsize, sizeof(msg) ); - memcpy( error, msg, len ); - error[len - 1] = 0; + size_t len = min( strlen(s), error_size - 1 ); + memcpy( error, s, len ); + error[len] = 0; } - close( fd ); - return NULL; + else error[0] = 0; } - close( fd ); - } -#endif - dlerror(); dlerror(); -#ifdef __sun - if (strchr( filename, ':' )) - { - char path[PATH_MAX]; - /* Solaris' brain damaged dlopen() treats ':' as a path separator */ - realpath( filename, path ); - ret = dlopen( path, flag | RTLD_FIRST ); + return; } - else +#ifdef __APPLE__ + apple_main_thread( init_func ); +#else + init_func(); #endif - ret = dlopen( filename, flag | RTLD_FIRST ); - s = dlerror(); - if (error && errorsize) - { - if (s) - { - size_t len = strlen(s); - if (len >= errorsize) len = errorsize - 1; - memcpy( error, s, len ); - error[len] = 0; - } - else error[0] = 0; - } - dlerror(); - return ret; -} - -/*********************************************************************** - * wine_dlsym - */ -void *wine_dlsym( void *handle, const char *symbol, char *error, size_t errorsize ) -{ - void *ret; - const char *s; - dlerror(); dlerror(); - ret = dlsym( handle, symbol ); - s = dlerror(); - if (error && errorsize) - { - if (s) - { - size_t len = strlen(s); - if (len >= errorsize) len = errorsize - 1; - memcpy( error, s, len ); - error[len] = 0; - } - else error[0] = 0; - } - dlerror(); - return ret; -} - -/*********************************************************************** - * wine_dlclose - */ -int wine_dlclose( void *handle, char *error, size_t errorsize ) -{ - int ret; - const char *s; - dlerror(); dlerror(); - ret = dlclose( handle ); - s = dlerror(); - if (error && errorsize) - { - if (s) - { - size_t len = strlen(s); - if (len >= errorsize) len = errorsize - 1; - memcpy( error, s, len ); - error[len] = 0; - } - else error[0] = 0; - } - dlerror(); - return ret; } diff -Nru wine-development-5.5/libs/wine/Makefile.in wine-development-5.6/libs/wine/Makefile.in --- wine-development-5.5/libs/wine/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/libs/wine/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,4 +1,4 @@ -EXTRALIBS = $(DL_LIBS) $(COREFOUNDATION_LIBS) $(CORESERVICES_LIBS) $(I386_LIBS) +EXTRALIBS = $(COREFOUNDATION_LIBS) $(CORESERVICES_LIBS) $(I386_LIBS) C_SRCS = \ c_037.c \ diff -Nru wine-development-5.5/libs/wine/wine.map wine-development-5.6/libs/wine/wine.map --- wine-development-5.5/libs/wine/wine.map 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/libs/wine/wine.map 2020-04-10 18:54:32.000000000 +0000 @@ -9,45 +9,22 @@ wine_anon_mmap; wine_casemap_lower; wine_casemap_upper; - wine_dlclose; wine_dll_enum_load_path; wine_dll_set_callback; - wine_dlopen; - wine_dlsym; wine_exec_wine_binary; wine_get_build_dir; wine_get_build_id; wine_get_config_dir; - wine_get_cs; wine_get_data_dir; - wine_get_ds; - wine_get_es; - wine_get_fs; - wine_get_gs; wine_get_server_dir; - wine_get_ss; wine_get_user_name; wine_get_version; wine_init; wine_init_argv0_path; - wine_ldt_alloc_entries; - wine_ldt_alloc_fs; - wine_ldt_copy; - wine_ldt_free_entries; - wine_ldt_free_fs; - wine_ldt_get_entry; - wine_ldt_get_ptr; - wine_ldt_init_fs; - wine_ldt_init_locking; - wine_ldt_is_system; - wine_ldt_realloc_entries; - wine_ldt_set_entry; wine_mmap_add_reserved_area; wine_mmap_enum_reserved_areas; wine_mmap_is_in_reserved_area; wine_mmap_remove_reserved_area; - wine_set_fs; - wine_set_gs; wine_wctype_table; /* the following functions are obsolete and only exported for backwards compatibility */ @@ -108,15 +85,38 @@ wine_dbg_sprintf; wine_dbgstr_an; wine_dbgstr_wn; + wine_dlclose; wine_dll_get_owner; wine_dll_load; wine_dll_load_main_exe; wine_dll_unload; + wine_dlopen; + wine_dlsym; wine_fold_string; + wine_get_cs; + wine_get_ds; + wine_get_es; + wine_get_fs; + wine_get_gs; wine_get_sortkey; + wine_get_ss; wine_is_dbcs_leadbyte; + wine_ldt_alloc_entries; + wine_ldt_alloc_fs; + wine_ldt_copy; + wine_ldt_free_entries; + wine_ldt_free_fs; + wine_ldt_get_entry; + wine_ldt_get_ptr; + wine_ldt_init_fs; + wine_ldt_init_locking; + wine_ldt_is_system; + wine_ldt_realloc_entries; + wine_ldt_set_entry; wine_pthread_get_functions; wine_pthread_set_functions; + wine_set_fs; + wine_set_gs; wine_switch_to_stack; wine_utf8_mbstowcs; wine_utf8_wcstombs; diff -Nru wine-development-5.5/libs/wpp/preproc.c wine-development-5.6/libs/wpp/preproc.c --- wine-development-5.5/libs/wpp/preproc.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/libs/wpp/preproc.c 2020-04-10 18:54:32.000000000 +0000 @@ -692,7 +692,7 @@ { va_list ap; va_start(ap, s); - generic_msg(s, "Error", ppy_text, ap); + generic_msg(s, "error", ppy_text, ap); va_end(ap); exit(1); } @@ -701,7 +701,7 @@ { va_list ap; va_start(ap, s); - generic_msg(s, "Warning", ppy_text, ap); + generic_msg(s, "warning", ppy_text, ap); va_end(ap); return 0; } diff -Nru wine-development-5.5/loader/wine.inf.in wine-development-5.6/loader/wine.inf.in --- wine-development-5.5/loader/wine.inf.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/loader/wine.inf.in 2020-04-10 18:54:32.000000000 +0000 @@ -2570,6 +2570,7 @@ 11,,windowscodecs.dll,1 11,,winegstreamer.dll,1 11,,wineqtdecoder.dll,1 +11,,winevulkan.dll,1 11,,wintrust.dll,1 11,,iexplore.exe,1 @@ -2826,6 +2827,17 @@ HKLM,%CurrentVersionNT%\Time Zones\Belarus Standard Time,"MUI_Std",,"@tzres.dll,-56576" HKLM,%CurrentVersionNT%\Time Zones\Belarus Standard Time,"Std",,"Belarus Standard Time" HKLM,%CurrentVersionNT%\Time Zones\Belarus Standard Time,"TZI",1,4c,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKLM,%CurrentVersionNT%\Time Zones\Bougainville Standard Time,"Display",,"Pacific/Bougainville" +HKLM,%CurrentVersionNT%\Time Zones\Bougainville Standard Time,"Dlt",,"Bougainville Daylight Time" +HKLM,%CurrentVersionNT%\Time Zones\Bougainville Standard Time,"MUI_Dlt",,"@tzres.dll,-51969" +HKLM,%CurrentVersionNT%\Time Zones\Bougainville Standard Time,"MUI_Std",,"@tzres.dll,-51968" +HKLM,%CurrentVersionNT%\Time Zones\Bougainville Standard Time,"Std",,"Bougainville Standard Time" +HKLM,%CurrentVersionNT%\Time Zones\Bougainville Standard Time,"TZI",1,6c,fd,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKLM,%CurrentVersionNT%\Time Zones\Bougainville Standard Time\Dynamic DST,"2013",1,a8,fd,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKLM,%CurrentVersionNT%\Time Zones\Bougainville Standard Time\Dynamic DST,"2014",1,a8,fd,ff,ff,00,00,00,00,c4,ff,ff,ff,00,00,01,00,03,00,01,00,00,00,00,00,00,00,00,00,00,00,0c,00,00,00,05,00,02,00,00,00,00,00,00,00 +HKLM,%CurrentVersionNT%\Time Zones\Bougainville Standard Time\Dynamic DST,"2015",1,6c,fd,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKLM,%CurrentVersionNT%\Time Zones\Bougainville Standard Time\Dynamic DST,"FirstEntry",0x10001,"2013" +HKLM,%CurrentVersionNT%\Time Zones\Bougainville Standard Time\Dynamic DST,"LastEntry",0x10001,"2015" HKLM,%CurrentVersionNT%\Time Zones\Canada Central Standard Time,"Display",,"America/Regina" HKLM,%CurrentVersionNT%\Time Zones\Canada Central Standard Time,"Dlt",,"Canada Central Daylight Time" HKLM,%CurrentVersionNT%\Time Zones\Canada Central Standard Time,"MUI_Dlt",,"@tzres.dll,-25713" @@ -2909,6 +2921,17 @@ HKLM,%CurrentVersionNT%\Time Zones\Central Standard Time (Mexico),"MUI_Std",,"@tzres.dll,-32800" HKLM,%CurrentVersionNT%\Time Zones\Central Standard Time (Mexico),"Std",,"Central Standard Time (Mexico)" HKLM,%CurrentVersionNT%\Time Zones\Central Standard Time (Mexico),"TZI",1,68,01,00,00,00,00,00,00,c4,ff,ff,ff,00,00,0a,00,00,00,05,00,02,00,00,00,00,00,00,00,00,00,04,00,00,00,01,00,02,00,00,00,00,00,00,00 +HKLM,%CurrentVersionNT%\Time Zones\Chatham Islands Standard Time,"Display",,"Pacific/Chatham" +HKLM,%CurrentVersionNT%\Time Zones\Chatham Islands Standard Time,"Dlt",,"Chatham Islands Daylight Time" +HKLM,%CurrentVersionNT%\Time Zones\Chatham Islands Standard Time,"MUI_Dlt",,"@tzres.dll,-62305" +HKLM,%CurrentVersionNT%\Time Zones\Chatham Islands Standard Time,"MUI_Std",,"@tzres.dll,-62304" +HKLM,%CurrentVersionNT%\Time Zones\Chatham Islands Standard Time,"Std",,"Chatham Islands Standard Time" +HKLM,%CurrentVersionNT%\Time Zones\Chatham Islands Standard Time,"TZI",1,03,fd,ff,ff,00,00,00,00,c4,ff,ff,ff,00,00,04,00,00,00,01,00,03,00,2d,00,00,00,00,00,00,00,09,00,00,00,05,00,02,00,2d,00,00,00,00,00 +HKLM,%CurrentVersionNT%\Time Zones\Chatham Islands Standard Time\Dynamic DST,"2006",1,03,fd,ff,ff,00,00,00,00,c4,ff,ff,ff,00,00,03,00,00,00,03,00,03,00,2d,00,00,00,00,00,00,00,0a,00,00,00,01,00,02,00,2d,00,00,00,00,00 +HKLM,%CurrentVersionNT%\Time Zones\Chatham Islands Standard Time\Dynamic DST,"2007",1,03,fd,ff,ff,00,00,00,00,c4,ff,ff,ff,00,00,03,00,00,00,03,00,03,00,2d,00,00,00,00,00,00,00,09,00,00,00,05,00,02,00,2d,00,00,00,00,00 +HKLM,%CurrentVersionNT%\Time Zones\Chatham Islands Standard Time\Dynamic DST,"2008",1,03,fd,ff,ff,00,00,00,00,c4,ff,ff,ff,00,00,04,00,00,00,01,00,03,00,2d,00,00,00,00,00,00,00,09,00,00,00,05,00,02,00,2d,00,00,00,00,00 +HKLM,%CurrentVersionNT%\Time Zones\Chatham Islands Standard Time\Dynamic DST,"FirstEntry",0x10001,"2006" +HKLM,%CurrentVersionNT%\Time Zones\Chatham Islands Standard Time\Dynamic DST,"LastEntry",0x10001,"2008" HKLM,%CurrentVersionNT%\Time Zones\China Standard Time,"Display",,"Asia/Shanghai" HKLM,%CurrentVersionNT%\Time Zones\China Standard Time,"Dlt",,"China Daylight Time" HKLM,%CurrentVersionNT%\Time Zones\China Standard Time,"MUI_Dlt",,"@tzres.dll,-161" @@ -3236,6 +3259,12 @@ HKLM,%CurrentVersionNT%\Time Zones\Magadan Standard Time,"MUI_Std",,"@tzres.dll,-8832" HKLM,%CurrentVersionNT%\Time Zones\Magadan Standard Time,"Std",,"Magadan Standard Time" HKLM,%CurrentVersionNT%\Time Zones\Magadan Standard Time,"TZI",1,a8,fd,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKLM,%CurrentVersionNT%\Time Zones\Marquesas Standard Time,"Display",,"Pacific/Marquesas" +HKLM,%CurrentVersionNT%\Time Zones\Marquesas Standard Time,"Dlt",,"Marquesas Daylight Time" +HKLM,%CurrentVersionNT%\Time Zones\Marquesas Standard Time,"MUI_Dlt",,"@tzres.dll,-20737" +HKLM,%CurrentVersionNT%\Time Zones\Marquesas Standard Time,"MUI_Std",,"@tzres.dll,-20736" +HKLM,%CurrentVersionNT%\Time Zones\Marquesas Standard Time,"Std",,"Marquesas Standard Time" +HKLM,%CurrentVersionNT%\Time Zones\Marquesas Standard Time,"TZI",1,3a,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 HKLM,%CurrentVersionNT%\Time Zones\Mauritius Standard Time,"Display",,"Indian/Mauritius" HKLM,%CurrentVersionNT%\Time Zones\Mauritius Standard Time,"Dlt",,"Mauritius Daylight Time" HKLM,%CurrentVersionNT%\Time Zones\Mauritius Standard Time,"MUI_Dlt",,"@tzres.dll,-60897" diff -Nru wine-development-5.5/MAINTAINERS wine-development-5.6/MAINTAINERS --- wine-development-5.5/MAINTAINERS 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/MAINTAINERS 2020-04-10 18:54:32.000000000 +0000 @@ -103,14 +103,16 @@ F: dlls/dpwsockx/ DirectShow +M: Zebediah Figura P: Andrew Eikum F: dlls/amstream/ F: dlls/mciqtz32/ +F: dlls/qasf/ F: dlls/qcap/ F: dlls/qedit/ F: dlls/quartz/ F: dlls/strmbase/ -F: dlls/winegstreamer/ +F: dlls/winegstreamer/gstdemux.c F: dlls/wineqtdecoder/ DirectWrite @@ -139,6 +141,11 @@ F: dlls/hidclass.sys/ F: dlls/winehid.sys/ +HTTP server +M: Zebediah Figura +F: dlls/httpapi/ +F: dlls/http.sys/ + Input methods M: Aric Stewart F: dlls/imm32/ @@ -162,6 +169,7 @@ MSI installers M: Hans Leidekker +P: Zebediah Figura F: dlls/msi/ Netstat @@ -205,6 +213,12 @@ P: Huw Davies F: dlls/oleaut32/typelib.c +Plug and Play +P: Zebediah Figura +F: dlls/newdev/ +F: dlls/ntoskrnl.exe/pnp.c +F: dlls/setupapi/devinst.c + Postscript Driver M: Huw Davies F: dlls/wineps.drv/ @@ -222,6 +236,7 @@ RPC Runtime P: Huw Davies +P: Zebediah Figura F: dlls/rpcrt4 F: tools/widl @@ -313,5 +328,6 @@ Staging Branch M: Alistair Leslie-Hughes P: Zebediah Figura +P: Paul Gofman P: Erich E. Hoover W: https://wine-staging.com/ diff -Nru wine-development-5.5/po/ar.po wine-development-5.6/po/ar.po --- wine-development-5.5/po/ar.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/ar.po 2020-04-10 18:54:32.000000000 +0000 @@ -45,8 +45,8 @@ msgid "&Modify..." msgstr "&تعديل..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&إزالة" @@ -65,7 +65,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -146,8 +146,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -183,7 +183,7 @@ "computer." msgstr "نتيح لك إمكانية تثبيت برمجية جديدة ، أو حذف برمجية موجودة من حاسبك." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "التطبيقات" @@ -584,7 +584,7 @@ msgid "Font St&yle:" msgstr "نم&ط الخط:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "ال&حجم:" @@ -600,7 +600,7 @@ msgid "&Underline" msgstr "تسطي&ر" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "اللو&ن:" @@ -774,7 +774,7 @@ msgid "C&ollate" msgstr "قارن" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "ال&حجم:" @@ -2253,7 +2253,7 @@ msgid "&File name:" msgstr "ا&سم الملف:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "استعر&ض..." @@ -3020,7 +3020,7 @@ msgid "Player" msgstr "المشغل" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "الجهاز" @@ -3577,7 +3577,7 @@ msgid "Joysticks" msgstr "مقابض اللعب" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "مع&طل" @@ -3842,6 +3842,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "واين" @@ -7467,7 +7468,7 @@ msgid "Hyperlink Information" msgstr "معلومات الوصلة العليا" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "الن&وع:" @@ -9015,7 +9016,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9512,7 +9513,7 @@ msgid "&Open:" msgstr "ا&فتح:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "ا&ستعرض..." @@ -9615,7 +9616,7 @@ msgid "Date deleted" msgstr "تاريخ الحذف" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "سطح المكتب" @@ -9955,7 +9956,7 @@ msgid "Trash" msgstr "المحذوفات" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "خطأ" @@ -9988,137 +9989,137 @@ msgid "Select Source" msgstr "مجلد جديد" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "التاريخ و الوقت" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "التاريخ و الوقت" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "وسط اوروبي" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "وسط اوروبي" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "وسط اوروبي" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "وسط اوروبي" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "الشريط ال&افتراضي" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10130,35 +10131,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10170,67 +10171,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10242,11 +10243,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10258,97 +10259,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "الشريط ال&افتراضي" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "التاريخ و الوقت" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "الشريط ال&افتراضي" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10360,27 +10373,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10392,67 +10405,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10464,19 +10477,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10496,35 +10509,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10536,27 +10549,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10568,19 +10581,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10592,29 +10605,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "التاريخ و الوقت" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10626,35 +10639,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "التاريخ و الوقت" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "التاريخ و الوقت" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10670,11 +10695,11 @@ msgid "Aleutian Daylight Time" msgstr "التاريخ و الوقت" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10686,137 +10711,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "التاريخ و الوقت" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "التاريخ و الوقت" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "التاريخ و الوقت" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "التاريخ و الوقت" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "الشريط ال&افتراضي" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11997,7 +12034,7 @@ msgid "Digi&tal" msgstr "ر&قمية" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "ال&خط..." @@ -16053,7 +16090,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "يجري تحديث إعدادات واين في %s ، يرجى الانتظار..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -16064,23 +16101,23 @@ "الإصدارة 2.1 او أحدث من رخصة غنّو العمومية المنشورة بواسطة منظمة البرمجيات " "الحرة ، ترجمه أعضاء من فريق عيون العرب و مجتمع لينكس العربي." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "معلومات تسجيل وندوز" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "ال&مالك:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "المن&ظمة:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "إعدادات التطبيق" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -16090,57 +16127,57 @@ "بألسنة المكتبات و الرّسوميّات وذلك للسماح بتغييرات واسعة النّطاق تتعلق بتطبيق " "معين." -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy #| msgid "&Add application..." msgid "Add appli&cation..." msgstr "أ&ضف تطبيقًا..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "أزل تطبيقًا" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "إصدارة الوندو&ز:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "إعدادات النّافذة" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "التقا&ط آلي للفأرة في وضع ملء الشاشة" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "السّماح لمدير النّواف&ذ بتأطيرها" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "السّماح لمدير النّوا&فذ بالتّحكم بها" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "محاكاة سطح المكتب افترا&ضي" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "حجم س&طح المكتب:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "دقة الشّاشة" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "هذا مثالٌ نصيٌّ باستخدام عشر نقاط من الخط تاهوما" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "المكتبات المسيطرة" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -16150,60 +16187,60 @@ "المضمّنة ( المصممّة بواسطة واين ) أو المكتبات الاصلية ( الموفّرة بواسطة تطبيق " "أو مأخوذة من وندوز ) " -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "إعداد سي&طرة مكتباتية جديد:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "السيط&رات الحالية:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "ت&حرير..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "تحرير السيطرة" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "المكتبة المستعملة" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "الم&ضمّنة (المبنية بواسطة واين)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "الأ&صليّة (المأخوذة من وندوز)" -#: winecfg.rc:211 +#: winecfg.rc:210 #, fuzzy #| msgid "Bui<in then Native" msgid "Buil&tin then Native" msgstr "المضمّنة ثمّ الأصليّة" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "الأصليّة ثمّ المضمّنة" -#: winecfg.rc:220 +#: winecfg.rc:219 #, fuzzy msgid "Select Drive Letter" msgstr "اختر ال&كل\tCtrl+A" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy #| msgid "Wine configuration" msgid "Drive configuration" msgstr "إعدادات واين" -#: winecfg.rc:233 +#: winecfg.rc:232 #, fuzzy #| msgid "" #| "Failed to connect to the mount manager, the drive configuration cannot be " @@ -16213,221 +16250,221 @@ "edited." msgstr "فشل الاتّصال بمدير المحرّكات ، لا يمكن تحريرالاعدادات" -#: winecfg.rc:236 +#: winecfg.rc:235 #, fuzzy #| msgid "&Add..." msgid "A&dd..." msgstr "أ&ضف..." -#: winecfg.rc:238 +#: winecfg.rc:237 #, fuzzy #| msgid "Autodetect" msgid "Aut&odetect" msgstr "تحديد تلقائي" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "الم&سار:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 #, fuzzy #| msgid "Show &Advanced" msgid "Show Advan&ced" msgstr "الخيارات المتقدمة" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "الج&هاز:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "است&عراض..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "الاس&م:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "المس&لسل:" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy #| msgid "Show &dot files" msgid "&Show dot files" msgstr "أظهر الملفات المخفيّة" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "معالج المحركات" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "الافتراضيات" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "جهاز الإخراج:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "جهاز الإخراج الصوتي:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "جهاز الإدخال:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "جهاز الإدخال الصوتي:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "ا&ختبار الصوت" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy #| msgid "Wine configuration" msgid "Speaker configuration" msgstr "إعدادات واين" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "العرض" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "السّم&ة:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "ت&ثبيت سمة..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "العن&صر:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "اللو&ن:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "الم&جلدات" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "موص&ول إلى:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "المكتبات" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "المحرّكات" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "اختر دليلًا متوافقًا مع طريقة يونكس من فضلك." -#: winecfg.rc:37 +#: winecfg.rc:36 #, fuzzy #| msgid "Hide &Advanced" msgid "Hide Advan&ced" msgstr "أخفِ الخيارات المت&قدمة" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(بدون سمة)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "الرّسوميات" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "تفاعلات سطح المكتب" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "الصوتيات" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "معلوماتٌ حول" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "إعدادات واين" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "ملفات السمات (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "اختر ملف سمة" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "المجلد" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "موصول إلى" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "إعدادات واين لـ %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "المحرك المختار: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(لا شيء)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "فشل اختبار الصوت !" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(الاعداد الافتراضي)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 #, fuzzy #| msgid "graphic" msgid "Quadraphonic" msgstr "رسومي" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -16435,67 +16472,67 @@ "التغييرات على خيار المكتبة المستعملة لهذا النوع من المكتبات.\n" "غير مستحسن ، هل انت متاكد أنك لا زلت ترغب في ذلك ؟" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "الأصليّة" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "المضمّنة" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "الأصليّة ثم المضمّنة" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "المضمّنة ثم الأصليّة" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "معطّل" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "الإعدادات الافتراضية" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "برامج واين (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "استخدم الإعدادات العالمية" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "اختر ملفًا تطبيقيًا" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "تحديد تلقائي" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "قرص صلب محلّي" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "مشاركة على الشّبكة" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "قرص مرن" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "قرص مدمج" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -16505,11 +16542,11 @@ "\n" "كل محرك يجب أن يقترن بحرف من a إلى z لذلك لا يمكنك إضافة أكثر من 26 محرك." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "محرك النظام" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy #| msgid "" #| "Are you sure you want to delete drive C?\n" @@ -16527,18 +16564,18 @@ "معظم برامج وندوز تحتاج وجود المحرك c و غالبًا ستنهارفي حال عدم وجوده ! إذا " "استمريت لا تنس أن تعيد إنشاءه. " -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "الحرف" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "New Folder" msgid "Target folder" msgstr "مجلد جديد" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16548,127 +16585,127 @@ "\n" "تذكر انه بإمكانك الضغط على زر أضف في لسان المحركات لإضافة محرك.\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "خلفية التحكمات" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "نص التحكمات" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "خلفية القوائم" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "نص القوائم" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "شريط التمرير" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "خلفية الاختيار" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "نص الاختيار" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "خلفية اﻷدوات" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "نص الأدوات" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "خلفية النافذة" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "نص النافذة" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "شريط العنوان المفعل" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "العنوان المفعل" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "شريط العنوان غير المفعل" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "العنوان غير المفعل" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "نص الرسائل" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "مساحة العمل" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "إطار النافذة" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "الحد المفعل" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "الحد غير المفعل" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "ظل التحكمات" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "النص الرّمادي" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "إضاءة التحكمات" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "الظل الغامق للتحكمات" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "إضاءة التحكمات" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "الخلفية البديلة للتحكمات" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "عنصر ساخن" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "تفعيل انحدار شريط العنوان" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "إلغاء تفعيل انحدار شريط العنوان" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "القوائم المضاءة" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "شريط القوائم" diff -Nru wine-development-5.5/po/ast.po wine-development-5.6/po/ast.po --- wine-development-5.5/po/ast.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/ast.po 2020-04-10 18:54:32.000000000 +0000 @@ -46,8 +46,8 @@ msgid "&Modify..." msgstr "&Modificar..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "" @@ -66,7 +66,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -149,8 +149,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -190,7 +190,7 @@ "Permítete instalar software nuevu o desaniciar que que yá tea instaláu nel " "ordenador." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Aplicaciones" @@ -580,7 +580,7 @@ msgid "Font St&yle:" msgstr "" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Tamañu:" @@ -596,7 +596,7 @@ msgid "&Underline" msgstr "" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Color:" @@ -770,7 +770,7 @@ msgid "C&ollate" msgstr "" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Ta&mañu" @@ -2225,7 +2225,7 @@ msgid "&File name:" msgstr "" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "R&estolar..." @@ -2932,7 +2932,7 @@ msgid "Player" msgstr "" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Preséu" @@ -3472,7 +3472,7 @@ msgid "Joysticks" msgstr "Joysticks" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Inhabilitar" @@ -3725,6 +3725,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7284,7 +7285,7 @@ msgid "Hyperlink Information" msgstr "" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "" @@ -8656,7 +8657,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9150,7 +9151,7 @@ msgid "&Open:" msgstr "" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Restolar..." @@ -9239,7 +9240,7 @@ msgid "Date deleted" msgstr "" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Escritoriu" @@ -9567,7 +9568,7 @@ msgid "Trash" msgstr "" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Fallu" @@ -9598,127 +9599,127 @@ msgid "Select Source" msgstr "" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "Hora estándar de China" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "Hora braniega de China" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "Hora estándar d'Asia del Norte" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "Hora braniega d'Asia del Norte" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "Hora estándar de Nepal" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "Hora braniega de Nepal" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "Hora estándar de Cabu Verde" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "Hora braniega de Cabu Verde" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Taipei Standard Time" msgid "Haiti Standard Time" msgstr "Hora estándar de Taipéi" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Taipei Daylight Time" msgid "Haiti Daylight Time" msgstr "Hora braniega de Taipéi" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "Hora estándar de Marruecos" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "Hora braniega de Marruecos" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "Hora estándar d'Europa Central" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "Hora braniega d'Europa Central" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "Hora estándar d'Iran" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "Hora estándar de Namibia" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "Hora braniega de Namibia" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "Hora estándar de GMT" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "Hora braniega de GMT" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "Hora estándar d'Asia Central" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "Hora braniega d'Asia Central" @@ -9730,35 +9731,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "Hora estándar de Newfoundland" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "Hora braniega de Newfoundland" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9770,67 +9771,67 @@ msgid "Azerbaijan Daylight Time" msgstr "Hora braniega d'Azerbaixán" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "Hora estándar de Samoa" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "Hora braniega de Samoa" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "Hora estándar de Kaliningráu" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "Hora braniega de Kaliningráu" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "Hora estándar d'Oriente Mediu" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "Hora estándar de Tokiu" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "Hora braniega de Tokiu" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "Hora estándar de Xordania" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "Hora estándar central" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "Hora braniega central" @@ -9842,11 +9843,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "Hora braniega d'Asia del Noreste" @@ -9858,95 +9859,107 @@ msgid "Argentina Daylight Time" msgstr "Hora braniega d'Arxentina" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "Belarus Standard Time" +msgid "Marquesas Standard Time" +msgstr "Hora estándar de Bielorrusia" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Belarus Daylight Time" +msgid "Marquesas Daylight Time" +msgstr "Hora braniega de Bielorrusia" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "Hora estándar d'Irán" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "Hora braniega d'India" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "Hora estándar de GTB" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "Hora braniega de GTB" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "Hora estándar de Turquía" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "Hora braniega de Turquía" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "Hora estándar de Les Islles Fixi" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "Hora braniega de Les Islles Fixi" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "Hora estándar de Canadá Central" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "Hora braniega de Canadá Central" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "Hora estándar de Taipéi" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "Hora braniega de Taipéi" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "Hora estándar d'Europa del Oeste" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "Hora braniega d'Europa del Oeste" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "Hora estándar de Montevidéu" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "Hora estándar de Paquistán" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "Hora braniega de Paquistán" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -9958,27 +9971,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "Hora braniega oriental" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "Hora estándar central (Méxicu)" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "Hora braniega central (Méxicu)" @@ -9990,67 +10003,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "Hora estándar de Tasmania" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "Hora braniega de Tasmania" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "Hora estándar d'América Central" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "Hora braniega d'América Central" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "Hora estándar de Sudáfrica" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "Hora braniega de Sudáfrica" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "Hora estándar d'Australia Central" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "Hora braniega d'Australia Central" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "Hora estándar de Sri Lanka" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "Hora braniega de Sri Lanka" @@ -10062,19 +10075,19 @@ msgid "Afghanistan Daylight Time" msgstr "Hora braniega d'Afganistán" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "Hora estándar de Yakutsk" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10094,35 +10107,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "Hora estándar de Rusia" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "Hora braniega de Russia" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "Hora estándar de Siria" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "Hora braniega de Siria" @@ -10134,27 +10147,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "Hora estándar d'Ulán Bátor" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "Hora braniega d'Ulán Bátor" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "Hora estándar d'Israel" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10166,19 +10179,19 @@ msgid "Bangladesh Daylight Time" msgstr "Hora braniega de Bangladex" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "Hora estándar d'Asia del Oeste" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "Hora braniega d'Asia del Oeste" @@ -10190,27 +10203,27 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "Hora estándar de Paraguái" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "Hora braniega de Paraguái" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "Hora estándar de Libia" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "Hora braniega de Libia" @@ -10222,35 +10235,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "Hora estándar de Venezuela" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "Hora braniega de Venezuela" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Montevideo Standard Time" +msgid "Bougainville Standard Time" +msgstr "Hora estándar de Montevidéu" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Bangladesh Daylight Time" +msgid "Bougainville Daylight Time" +msgstr "Hora braniega de Bangladex" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "Hora estándar de Nueva Zelanda" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "Hora braniega de Nueva Zelanda" @@ -10266,11 +10291,11 @@ msgid "Aleutian Daylight Time" msgstr "Hora braniega d'Arxentina" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10282,131 +10307,143 @@ msgid "Belarus Daylight Time" msgstr "Hora braniega de Bielorrusia" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "Hora braniega d'Islla de Pascua" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "Hora estándar d'Exiptu" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "Hora braniega d'Exiptu" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "Hora estándar de Vladivostok" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "Hora braniega de Vladivostok" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "Hora estándar de Singapur" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "Hora braniega de Singapur" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "Hora estándar de Corea" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "Hora braniega de Corea" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Central Asia Standard Time" +msgid "Chatham Islands Standard Time" +msgstr "Hora estándar d'Asia Central" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Easter Island Daylight Time" +msgid "Chatham Islands Daylight Time" +msgstr "Hora braniega d'Islla de Pascua" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "Hora braniega d'África del Este" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "Hora braniega de Suramérica del Este" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "Hora estándar d'África del Oeste Central" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "Hora braniega d'África del Oeste Central" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "Hora braniega d'Austrália del Este" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "Hora estándar d'Australia del Oeste" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "Hora braniega d'Australia del Oeste" @@ -11455,7 +11492,7 @@ msgid "Digi&tal" msgstr "Dixi&tal" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "" @@ -14935,7 +14972,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Ta anovándose la configuración de %s, espera..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -14943,339 +14980,339 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organi&zación:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Axustes d'aplicaciones" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." msgstr "" -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "Amestar una apli&cación..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Desaniciar l'aplicación" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "Versión de &Windows:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Axustes de ventanes" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Capturar el &mur automáticamente nes ventanes a pantalla completa" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Permitir que'l xestor de ventanes &decore les ventanes" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Permitir que'l xestor de &ventanes controle les ventanes" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Emular un escritoriu virtual" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "&Tamañu del escritoriu:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Resolución de la pantalla" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Esto ye un testu d'amuesa qu'usa Tahoma a 10 puntos" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "A&mestar" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Editar..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Configuración d'unidaes" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "" -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "" -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Preséu de salida:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Preséu d'entrada:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Altavoces:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Aspeutu" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Estilu:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "" -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "&Elementu:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "C&olor:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "Tribes MIME" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Carpetes" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Biblioteques" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Unidaes" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Audiu" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Configuración de Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Esbilla d'un ficheru d'estilos" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Estéreu" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Monu" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15283,78 +15320,78 @@ "Nun s'aconseya'l cambéu del orde de carga d'esta biblioteca.\n" "¿De xuru que quies facelo?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Programes de Wine (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Discu duru llocal" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Disquete" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15362,143 +15399,143 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Lletra" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Barra de desplazamientu" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Berbesu activu" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "" diff -Nru wine-development-5.5/po/bg.po wine-development-5.6/po/bg.po --- wine-development-5.5/po/bg.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/bg.po 2020-04-10 18:54:32.000000000 +0000 @@ -46,8 +46,8 @@ msgid "&Modify..." msgstr "&Промени" -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "Пре&махни" @@ -67,7 +67,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -154,8 +154,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -193,7 +193,7 @@ "computer." msgstr "" -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Приложения" @@ -594,7 +594,7 @@ msgid "Font St&yle:" msgstr "&Стил:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "Размер:" @@ -610,7 +610,7 @@ msgid "&Underline" msgstr "Под&чертан" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "Цвят:" @@ -786,7 +786,7 @@ msgid "C&ollate" msgstr "Под&реждане" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Size:" @@ -2276,7 +2276,7 @@ msgid "&File name:" msgstr "&Файл" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 #, fuzzy msgid "B&rowse..." msgstr "Избор..." @@ -3008,7 +3008,7 @@ msgid "Player" msgstr "Възпроизведи" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 #, fuzzy msgid "Device" msgstr "De&vice:" @@ -3591,7 +3591,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Забрани" @@ -3853,6 +3853,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 #, fuzzy msgid "Wine" msgstr "Wine Помощ" @@ -7495,7 +7496,7 @@ msgid "Hyperlink Information" msgstr "Информация" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Тип:" @@ -8936,7 +8937,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "" @@ -9441,7 +9442,7 @@ msgid "&Open:" msgstr "" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Избери..." @@ -9539,7 +9540,7 @@ msgid "Date deleted" msgstr "" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 #, fuzzy msgctxt "display name" msgid "Desktop" @@ -9881,7 +9882,7 @@ msgid "Trash" msgstr "" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Грешка" @@ -9917,123 +9918,123 @@ "#-#-#-#-# bg.po (Wine) #-#-#-#-#\n" "&Маркирай всичко" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 msgid "Haiti Standard Time" msgstr "" -#: tzres.rc:117 +#: tzres.rc:121 msgid "Haiti Daylight Time" msgstr "" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10045,35 +10046,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10085,67 +10086,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10157,11 +10158,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10173,95 +10174,103 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +msgid "Marquesas Standard Time" +msgstr "" + +#: tzres.rc:143 +msgid "Marquesas Daylight Time" +msgstr "" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10273,27 +10282,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10305,67 +10314,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10377,19 +10386,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10409,35 +10418,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10449,27 +10458,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10481,19 +10490,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10505,27 +10514,27 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10537,35 +10546,43 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +msgid "Bougainville Standard Time" +msgstr "" + +#: tzres.rc:61 +msgid "Bougainville Daylight Time" +msgstr "" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10577,11 +10594,11 @@ msgid "Aleutian Daylight Time" msgstr "" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10593,131 +10610,139 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +msgid "Chatham Islands Standard Time" +msgstr "" + +#: tzres.rc:87 +msgid "Chatham Islands Daylight Time" +msgstr "" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11771,7 +11796,7 @@ msgid "Digi&tal" msgstr "" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Шрифт..." @@ -15377,7 +15402,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "" -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15385,24 +15410,24 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "Owner:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organization:" -#: winecfg.rc:154 +#: winecfg.rc:153 #, fuzzy msgid "Application settings" msgstr " Настройка на приложенията " -#: winecfg.rc:155 +#: winecfg.rc:154 #, fuzzy msgid "" "Wine can mimic different Windows versions for each application. This tab is " @@ -15414,59 +15439,59 @@ "за да можете да променяте, освен общосистемните, и специфичните за " "приложенията настройки." -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy #| msgid "&Add application..." msgid "Add appli&cation..." msgstr "&Добавяне на приложение..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "Пре&махване на приложение" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Версия на Windows:" -#: winecfg.rc:169 +#: winecfg.rc:168 #, fuzzy msgid "Window settings" msgstr " Настройка на прозорците " -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Управлението на прозорците от мениджъра на прозорци" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "Емулирай виртуален работен плот" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Размер на работния плот:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 #, fuzzy msgid "DLL overrides" msgstr " DLL замени " -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15476,285 +15501,285 @@ "(осигурена от Wine) или собствена (взета от Windows или осигурена от " "приложението)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "Нова библиотечна замяна:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Съществуващи замени:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Редактирай..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Редактиране на замяна" -#: winecfg.rc:208 +#: winecfg.rc:207 #, fuzzy msgid "Load order" msgstr " Ред на зареждане " -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Вградена (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Собствена (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 #, fuzzy #| msgid "Bui<in then Native" msgid "Buil&tin then Native" msgstr "В&градена, после собствена" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Со&бствена, после вградена" -#: winecfg.rc:220 +#: winecfg.rc:219 #, fuzzy msgid "Select Drive Letter" msgstr "Маркирай &всичко" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy #| msgid "Wine configuration" msgid "Drive configuration" msgstr "Настройки на Wine" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 #, fuzzy #| msgid "&Add..." msgid "A&dd..." msgstr "&Добави..." -#: winecfg.rc:238 +#: winecfg.rc:237 #, fuzzy msgid "Aut&odetect" msgstr "&Открий" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Път:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 #, fuzzy #| msgid "Show &Advanced" msgid "Show Advan&ced" msgstr "Покажи допълнителните" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "Из&бери..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Етикет:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "&Номер:" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy #| msgid "Show &dot files" msgid "&Show dot files" msgstr "Показвай файловете, започващи с точка" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy #| msgid "Wine configuration" msgid "Speaker configuration" msgstr "Настройки на Wine" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 #, fuzzy msgid "Appearance" msgstr " Външен вид " -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "Тема:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "Инсталирай тема..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 #, fuzzy msgid "Folders" msgstr "Папка" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "Връзка към:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Библиотеки" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Устройства" -#: winecfg.rc:36 +#: winecfg.rc:35 #, fuzzy msgid "Select the Unix target directory, please." msgstr "Изберете Unix директория" -#: winecfg.rc:37 +#: winecfg.rc:36 #, fuzzy #| msgid "Hide &Advanced" msgid "Hide Advan&ced" msgstr "Скрий допълнителните" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(без тема)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Графика" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Интеграция" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Звук" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Относно" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Настройки на Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Файлове с теми (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Изберете файл с тема" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Папка" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Връзка към" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Настройки на Wine за %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 #, fuzzy msgid "(None)" msgstr "Нищо" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 #, fuzzy msgid "(System default)" msgstr "Системен път" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 #, fuzzy #| msgid "Graphics" msgid "Quadraphonic" msgstr "Графика" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15762,79 +15787,79 @@ "Промяната на реда на зареждане не е препоръчителна.\n" "Сигурни ли сте, че искате да направите това?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Внимание: системна библиотека" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "собствена" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "вградена" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "собствена, вградена" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "вградена, собствена" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "забранена" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 #, fuzzy msgid "Autodetect" msgstr "&Открий" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15842,153 +15867,153 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "Create New Folder" msgid "Target folder" msgstr "Създай нова папка" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 #, fuzzy msgid "Controls Background" msgstr "&Копирай фона" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "" -#: winecfg.rc:102 +#: winecfg.rc:101 #, fuzzy msgid "Menu Background" msgstr "&Копирай фона" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 #, fuzzy msgid "Scrollbar" msgstr "Превърти тук" -#: winecfg.rc:105 +#: winecfg.rc:104 #, fuzzy msgid "Selection Background" msgstr "Постави като &фон на работния плот" -#: winecfg.rc:106 +#: winecfg.rc:105 #, fuzzy msgid "Selection Text" msgstr "Маркирай &всичко" -#: winecfg.rc:107 +#: winecfg.rc:106 #, fuzzy msgid "Tooltip Background" msgstr "&Копирай фона" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 #, fuzzy msgid "Window Background" msgstr "&Копирай фона" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 #, fuzzy msgid "Application Workspace" msgstr "Приложения" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "" diff -Nru wine-development-5.5/po/ca.po wine-development-5.6/po/ca.po --- wine-development-5.5/po/ca.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/ca.po 2020-04-10 18:54:32.000000000 +0000 @@ -49,8 +49,8 @@ msgid "&Modify..." msgstr "&Modifica..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Elimina" @@ -69,7 +69,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -153,8 +153,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -194,7 +194,7 @@ "Us permet instal·lar programari nou, o eliminar programari existent del " "vostre ordinador." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Aplicacions" @@ -588,7 +588,7 @@ msgid "Font St&yle:" msgstr "&Estil de lletra:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Cos:" @@ -604,7 +604,7 @@ msgid "&Underline" msgstr "&Subratllat" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "C&olor:" @@ -776,7 +776,7 @@ msgid "C&ollate" msgstr "C&ompagina" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "&Mida:" @@ -2258,7 +2258,7 @@ msgid "&File name:" msgstr "Nom de &fitxer:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "&Navega..." @@ -3030,7 +3030,7 @@ msgid "Player" msgstr "Reproductor" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Dispositiu" @@ -3577,7 +3577,7 @@ msgid "Joysticks" msgstr "Palanques de control" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Inhabilita" @@ -3836,6 +3836,7 @@ msgstr "DLL de nucli del Wine" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7303,7 +7304,7 @@ msgid "Hyperlink Information" msgstr "Informació d'enllaç" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Tipus:" @@ -8739,7 +8740,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "ppp" @@ -9237,7 +9238,7 @@ msgid "&Open:" msgstr "&Obrir:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Navega..." @@ -9326,7 +9327,7 @@ msgid "Date deleted" msgstr "Data de supressió" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Escriptori" @@ -9676,7 +9677,7 @@ msgid "Trash" msgstr "Paperera" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Error" @@ -9707,127 +9708,127 @@ msgid "Select Source" msgstr "Seleccionar font" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "Hora estàndard de la Xina" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "Hora d'estiu de la Xina" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "Hora estàndard de l'Àsia del Nord" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "Hora d'estiu de l'Àsia del Nord" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "Hora estàndard de Geòrgia" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "Hora d'estiu de Geòrgia" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "Hora estàndard del Nepal" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "Hora d'estiu del Nepal" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "Hora estàndard de Cap Verd" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "Hora d'estiu de Cap Verd" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Hawaiian Standard Time" msgid "Haiti Standard Time" msgstr "Hora estàndard de Hawaii" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Hawaiian Daylight Time" msgid "Haiti Daylight Time" msgstr "Hora d'estiu de Hawaii" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "Hora estàndard de l'Europa Central" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "Hora d'estiu de l'Europa Central" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "Hora estàndard del Marroc" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "Hora d'estiu del Marroc" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "Hora estàndard de l'Europa Central" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "Hora d'estiu de l'Europa Central" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "Hora estàndard d'Iran" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "Hora d'estiu d'Iran" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "Hora estàndard de Namíbia" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "Hora d'estiu de Namíbia" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "Hora estàndard de Tonga" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "Hora d'estiu de Tonga" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "Hora estàndard de les muntanyes (Mèxic)" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "Hora d'estiu de les muntanyes (Mèxic)" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "Hora estàndard GMT" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "Hora d'estiu GMT" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "Hora estàndard de l'Àsia Central" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "Hora d'estiu de l'Àsia Central" @@ -9839,35 +9840,35 @@ msgid "Arabic Daylight Time" msgstr "Hora d'estiu àrab" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "Hora estàndard de Magadan" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "Hora d'estiu de Magadan" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "Hora estàndard de Terranova" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "Hora d'estiu de Terranova" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "Hora estàndard del Pacífic Occidental" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "Hora d'estiu del Pacífic Occidental" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "Hora estàndard del Pacífic" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "Hora d'estiu del Pacífic" @@ -9879,67 +9880,67 @@ msgid "Azerbaijan Daylight Time" msgstr "Hora d'estiu de l'Azerbaidjan" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "Hora estàndard de Samoa" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "Hora d'estiu de Samoa" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "Hora estàndard de Kaliningrad" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "Hora d'estiu de Kaliningrad" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "Hora estàndard del Pacífic (Mèxic)" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "Hora d'estiu del Pacífic (Mèxic)" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "Hora estàndard de l'Orient Mitjà" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "Hora d'estiu de l'Orient Mitjà" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "Hora estàndard de Tokyo" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "Hora d'estiu de Tokyo" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "Hora estàndard de les Illes de la Línia" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "Hora d'estiu de les Illes de la Línia" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "Hora estàndard de Jordània" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "Hora d'estiu de Jordània" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "Hora estàndard central" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "Hora d'estiu central" @@ -9951,11 +9952,11 @@ msgid "Azores Daylight Time" msgstr "Hora d'estiu de les Açores" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "Hora estàndard de l'Àsia del Norest" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "Hora d'estiu de l'Àsia del Norest" @@ -9967,95 +9968,107 @@ msgid "Argentina Daylight Time" msgstr "Hora d'estiu de l'Argentina" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "Mauritius Standard Time" +msgid "Marquesas Standard Time" +msgstr "Hora estàndard de Maurici" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Mauritius Daylight Time" +msgid "Marquesas Daylight Time" +msgstr "Hora d'estiu de Maurici" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "Hora estàndard de Birmània" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "Hora d'estiu de Birmània" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "Temps universal coordinat" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "Hora estàndard de l'Índia" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "Hora d'estiu de l'Índia" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "Hora estàndard GTB" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "Hora d'estiu GTB" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "Hora estàndard de Turquia" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "Hora d'estiu de Turquia" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "Hora estàndard de Fiji" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "Hora d'estiu de Fiji" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "Hora estàndard del Canadà Central" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "Hora d'estiu del Canadà Central" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "Hora estàndard de Taipei" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "Hora d'estiu de Taipei" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "Hora estàndard de l'Europa Occidental" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "Hora d'estiu de l'Europa Occidental" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "Hora estàndard de Montevideo" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "Hora d'estiu de Montevideo" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "Hora estàndard del Pakistan" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "Hora d'estiu del Pakistan" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "Hora estàndard del Caucas" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "Hora d'estiu del Caucas" @@ -10067,27 +10080,27 @@ msgid "AUS Eastern Daylight Time" msgstr "Hora d'estiu oriental AUS" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "Hora estàndard de l'Àsia del Centre-Nord" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "Hora d'estiu de l'Àsia del Centre-Nord" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "Hora estàndard oriental" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "Hora d'estiu oriental" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "Hora estàndard central (Mèxic)" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "Hora d'estiu central (Mèxic)" @@ -10099,67 +10112,67 @@ msgid "Atlantic Daylight Time" msgstr "Hora d'estiu de l'Atlàntic" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "Hora estàndard de les muntanyes" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "Hora d'estiu de les muntanyes" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "Hora estàndard oriental EUA" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "Hora d'estiu oriental EUA" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "Hora estàndard de Tasmània" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "Hora d'estiu de Tasmània" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "Hora estàndard de l'Àmerica Central" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "Hora d'estiu de l'Àmerica Central" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "Hora estàndard de les muntanyes EUA" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "Hora d'estiu de les muntanyes EUA" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "Hora estàndard de l'Àfrica del Sud" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "Hora d'estiu de l'Àfrica del Sud" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "Hora estàndard d'Austràlia Central" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "Hora d'estiu d'Austràlia Central" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "Hora estàndard de Sri Lanka" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "Hora d'estiu de Sri Lanka" @@ -10171,19 +10184,19 @@ msgid "Afghanistan Daylight Time" msgstr "Hora d'estiu de l'Afganistan" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "Hora estàndard de Iakutsk" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "Hora d'estiu de Iakutsk" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "Hora estàndard de l'Àmerica del Sud-est" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "Hora d'estiu de l'Àmerica del Sud-est" @@ -10203,35 +10216,35 @@ msgid "Arabian Daylight Time" msgstr "Hora d'estiu de l'Àrabia" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "Hora estàndard de Rússia" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "Hora d'estiu de Rússia" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "Hora estàndard romànic" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "Hora d'estiu romànic" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "Hora estàndard de Iekaterinburg" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "Hora d'estiu de Iekaterinburg" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "Hora estàndard de Síria" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "Hora d'estiu de Síria" @@ -10243,27 +10256,27 @@ msgid "AUS Central Daylight Time" msgstr "Hora d'estiu central AUS" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "Hora estàndard de Greenwich" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "Hora d'estiu de Greenwich" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "Hora estàndard d'Ulan Bator" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "Hora d'estiu d'Ulan Bator" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "Hora estàndard d'Israel" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "Hora d'estiu d'Israel" @@ -10275,19 +10288,19 @@ msgid "Bangladesh Daylight Time" msgstr "Hora d'estiu de Bangla Desh" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "Hora estàndard del Pacífic de l'Amèrica del Sud" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "Hora d'estiu del Pacífic de l'Amèrica del Sud" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "Hora estàndard de l'Àsia Occidental" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "Hora d'estiu de l'Àsia Occidental" @@ -10299,27 +10312,27 @@ msgid "Alaskan Daylight Time" msgstr "Hora d'estiu d'Alaska" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "Hora estàndard del Paraguai" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "Hora d'estiu del Paraguai" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "Hora estàndard de la línia de canvi de data" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "Hora d'estiu de la línia de canvi de data" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "Hora estàndard de Líbia" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "Hora d'estiu de Líbia" @@ -10331,35 +10344,47 @@ msgid "Bahia Daylight Time" msgstr "Hora d'estiu de Bahia" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "Hora estàndard de Veneçuela" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "Hora d'estiu de Veneçuela" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Mountain Standard Time" +msgid "Bougainville Standard Time" +msgstr "Hora estàndard de les muntanyes" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Mountain Daylight Time" +msgid "Bougainville Daylight Time" +msgstr "Hora d'estiu de les muntanyes" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "Hora estàndard de Hawaii" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "Hora d'estiu de Hawaii" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "Hora estàndard de l'Àsia del Sud-est" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "Hora d'estiu de l'Àsia del Sud-est" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "Hora estàndard de Nova Zelanda" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "Hora d'estiu de Nova Zelanda" @@ -10375,11 +10400,11 @@ msgid "Aleutian Daylight Time" msgstr "Hora d'estiu de l'Argentina" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "Hora estàndard del Brasil Central" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "Hora d'estiu del Brasil Central" @@ -10391,131 +10416,143 @@ msgid "Belarus Daylight Time" msgstr "Hora d'estiu de Bielorússia" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "Hora estàndard de l'Àmerica del Sud-oest" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "Hora d'estiu de l'Àmerica del Sud-oest" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "Hora estàndard de Groenlàndia" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "Hora d'estiu de Groenlàndia" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "Hora estàndard de l'Illa de Pasqua" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "Hora d'estiu de l'Illa de Pasqua" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "Hora estàndard d'Egipte" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "Hora d'estiu d'Egipte" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "Hora estàndard de Maurici" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "Hora d'estiu de Maurici" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "Hora estàndard de Vladivostok" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "Hora d'estiu de Vladivostok" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "Hora estàndard de Singapur" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "Hora d'estiu de Singapur" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "Hora estàndard de Corea" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "Hora d'estiu de Corea" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Easter Island Standard Time" +msgid "Chatham Islands Standard Time" +msgstr "Hora estàndard de l'Illa de Pasqua" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Easter Island Daylight Time" +msgid "Chatham Islands Daylight Time" +msgstr "Hora d'estiu de l'Illa de Pasqua" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "Hora estàndard de l'Àfrica Oriental" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "Hora d'estiu de l'Àfrica Oriental" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "Hora estàndard FLE" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "Hora d'estiu FLE" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "Hora estàndard de l'Àmerica del Sudest" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "Hora d'estiu de l'Àmerica del Sudest" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "Hora estàndard del Pacífic Central" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "Hora d'estiu del Pacífic Central" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "Hora estàndard de l'Àfrica del Centre-Oest" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "Hora d'estiu de l'Àfrica del Centre-Oest" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "Hora estàndard del Pacífic de l'Amèrica del Sud" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "Hora d'estiu del Pacífic de l'Amèrica del Sud" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "Hora estàndard de l'Austràlia Oriental" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "Hora d'estiu de l'Austràlia Oriental" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "Hora estàndard de l'Austràlia Occidental" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "Hora d'estiu de l'Austràlia Occidental" @@ -11717,7 +11754,7 @@ msgid "Digi&tal" msgstr "Digi&tal" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "T&ipus de lletra..." @@ -15562,7 +15599,7 @@ msgstr "" "La configuració del Wine en %s s'està actualitzant, si us plau, espereu..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15574,23 +15611,23 @@ "la Free Software Foundation; o la versió 2.1 de la Llicència, o (a la vostra " "elecció) qualsevulla versió posterior." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Informació de registració de Windows" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Propietari:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "&Organització:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Configuració d'aplicacions" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15601,56 +15638,56 @@ "permetre-us canviar la configuració del sistema o d'una aplicació en " "aquelles pestanyes també." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "A&fegeix aplicació..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Elimina aplicació" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Versió de Windows:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Configuració de finestres" # The translated message must be simplified to fit the available space -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "&Captura automàticament el ratolí en pantalla completa" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Permet que el gestor de finestres &decori les finestres" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Permet que el gestor de finestres &controli les finestres" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Emula un escriptori virtual" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "&Mida d'escriptori:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Resolució de pantalla" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Això és un text de mostra en Tahoma de 10 punts" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "Reemplaçaments DLL" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15659,55 +15696,55 @@ "Es pot especificar que una biblioteca d'enllaç dinàmic sigui o interna " "(proveïda pel Wine) o nativa (treta de Windows o proveïda per l'aplicació)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "Reemplaçament &nou per a la biblioteca:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "A&fegeix" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Reemplaçaments e&xistents:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "E&dita..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Edita reemplaçament" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Ordre de càrrega" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Interna (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Nativa (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "In&terna, després Nativa" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Nati&va, després Interna" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Lletra de la unitat" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Configuració d'unitats" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." @@ -15715,207 +15752,207 @@ "S'ha fallat en connectar al gestor de muntatge; la configuració d'unitat no " "es pot editar." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "A&fegeix..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "Aut&odetecta" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Camí:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "&Vista avançada" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "&Dispositiu:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "&Navega..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Etiqueta:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "&Serial:" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "&Mostra els fitxers de punt" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Diagnòstics de controlador" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Per defecte" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Dispositiu de sortida:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Dispositiu de sortida de veu:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Dispositiu d'entrada:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Dispositiu d'entrada de veu:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Prova el so" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Configuració d'altaveus" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Altaveus:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Aparença" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Tema:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Instal·la tema..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "&Element:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "Co&lor:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "Tipus MIME" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "Gestiona &associacions de fitxer" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Carpetes" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "Enlla&ça a:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Biblioteques" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Unitats" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Seleccioneu el directori de destinació d'Unix, si us plau." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "&Vista bàsica" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Sense tema)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Gràfics" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Integració d'escriptori" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Àudio" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Quant a" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Configuració del Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Fitxer de tema (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Seleccioneu un fitxer de tema" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Carpeta" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Enllaça a" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Configuració del Wine per a %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Controlador seleccionat: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Cap)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "La prova d'àudio ha fallat!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Defecte del sistema)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "Envoltant 5.1" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "Quadrifònic" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Estèreo" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Mono" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15923,67 +15960,67 @@ "No es recomana canviar l'ordre de càrrega d'aquesta biblioteca.\n" "Esteu segur que voleu fer això?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Advertència: biblioteca de sistema" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "nativa" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "interna" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "nativa, interna" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "interna, nativa" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "inhabilitada" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Opcions per defecte" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Programes del Wine (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Utilitza opcions globals" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Seleccionar un fitxer executable" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Autodetecta" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Disc dur local" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Recurs compartit de xarxa" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Disquet" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -15994,11 +16031,11 @@ "Cada unitat ha de tenir una lletra, de la A a la Z, així que no en podeu " "tenir més de 26." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Unitat de sistema" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -16010,16 +16047,16 @@ "La majoria de les aplicacions de Windows esperen que la unitat C existeixi, " "i fallaran desordenadament si no. Si procediu, recordeu recrear-la!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Lletra" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Carpeta de destinació" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16029,127 +16066,127 @@ "\n" "Recordeu fer clic en 'Afegir' en la pestanya Unitats per a crear una!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Controls--Fons" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Controls--Text" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Menú--Fons" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Menú--Text" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Barra de desplaçament" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Selecció--Fons" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Selecció--Text" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Indicador de funció--Fons" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Indicador de funció--Text" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Finestra--Fons" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Finestra--Text" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Títol actiu--Barra" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Títol actiu--Text" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Títol inactiu--Barra" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Títol inactiu--Text" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Text de quadre de missatge" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Espai de treball d'aplicació" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Marca de finestra" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Vora activa" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Vora inactiva" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Controls--Ombra" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Text gris" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Controls--Ressalt" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Controls--Ombra fosca" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Controls--Brillant" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Controls--Fons alternatiu" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Element ressaltat" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Títol actiu--Degradat" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Títol inactiu--Degradat" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Menú--Ressalt" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Menú--Barra" diff -Nru wine-development-5.5/po/cs.po wine-development-5.6/po/cs.po --- wine-development-5.5/po/cs.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/cs.po 2020-04-10 18:54:32.000000000 +0000 @@ -48,8 +48,8 @@ msgid "&Modify..." msgstr "Změnit..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "Odeb&rat" @@ -68,7 +68,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -151,8 +151,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -191,7 +191,7 @@ "Umožňuje instalovat nový software nebo odstranit existující software z " "Vašeho počítače." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Aplikace" @@ -591,7 +591,7 @@ msgid "Font St&yle:" msgstr "St&yl písma:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "Veliko&st:" @@ -607,7 +607,7 @@ msgid "&Underline" msgstr "&Podtržení" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Barva:" @@ -781,7 +781,7 @@ msgid "C&ollate" msgstr "K&ompletovat" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Veli&kost:" @@ -2249,7 +2249,7 @@ msgid "&File name:" msgstr "&Název souboru:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "P&rocházet..." @@ -2969,7 +2969,7 @@ msgid "Player" msgstr "Hráč" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Zařízení" @@ -3526,7 +3526,7 @@ msgid "Joysticks" msgstr "Pákové ovladače" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Zakázat" @@ -3783,6 +3783,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7402,7 +7403,7 @@ msgid "Hyperlink Information" msgstr "Informace o hypertextovém odkazu" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Typ:" @@ -8872,7 +8873,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "bodů na palec (dpi)" @@ -9368,7 +9369,7 @@ msgid "&Open:" msgstr "&Otevřít:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Procházet..." @@ -9457,7 +9458,7 @@ msgid "Date deleted" msgstr "Datum bylo odstraněno" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Plocha" @@ -9802,7 +9803,7 @@ msgid "Trash" msgstr "Koš" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Chyba" @@ -9833,137 +9834,137 @@ msgid "Select Source" msgstr "Vyberte zdroj" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "Datum a čas" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "Datum a čas" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "Středoevropské" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "Středoevropské" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "Středoevropské" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "Středoevropské" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "&Standardní řádek" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9975,35 +9976,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10015,67 +10016,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10087,11 +10088,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10103,97 +10104,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "&Standardní řádek" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "Datum a čas" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "&Standardní řádek" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10205,27 +10218,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10237,67 +10250,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10309,19 +10322,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10341,35 +10354,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10381,27 +10394,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10413,19 +10426,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10437,29 +10450,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "Datum a čas" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10471,35 +10484,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "Datum a čas" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "Datum a čas" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10515,11 +10540,11 @@ msgid "Aleutian Daylight Time" msgstr "Datum a čas" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10531,137 +10556,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "Datum a čas" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "Datum a čas" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "Datum a čas" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "Datum a čas" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "&Standardní řádek" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11813,7 +11850,7 @@ msgid "Digi&tal" msgstr "Digi&tální" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Písmo..." @@ -15532,7 +15569,7 @@ msgstr "" "Konfigurace Wine umístěná v %s je právě aktualizována, prosím čekejte..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15544,23 +15581,23 @@ "publikovaném Free Software Foundation; platná je verze 2.1 zmíněné licence " "nebo (pokud je lépe vyhovující) jakákoli novější verze." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Informace o registraci Windows" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Vlastník:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organi&zace:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Nastavení aplikací" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15570,55 +15607,55 @@ "je provázaná se záložkami Knihovny a Zobrazení a umožňuje změnit nastavení " "celého systému nebo nastavení každé aplikace zvlášť." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "Přid&at aplikaci..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "Odeb&rat aplikaci" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "Verze &Windows:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Nastavení oken" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Automaticky odchytávat &myš v režimu celé obrazovky" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Povolit správci oken &dekorovat okna" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Povolit &správci oken kontrolu nad okny" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Emulace virtuálního desktopu" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "&Velikost desktopu:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Rozlišení obrazovky" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Toto je testovací text - 10 bodů, Tahoma" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "Nastavení DLL" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15627,55 +15664,55 @@ "Můžete vybrat zda budou použity dynamicky linkované knihovny vestavěné ve " "Wine nebo nativní (získané z Windows nebo poskytnuté aplikací)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Nové nastavení pro knihovnu:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "Přid&at" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "&Existující nastavení knihoven:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Upravit..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Úprava nastavení knihovny" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Pořadí nahrávání" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Vestavěná (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Nativní (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "V&estavěná pak nativní" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "N&ativní a pak vestavěná" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Vyberte písmeno disku" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Nastavení jednotek" -#: winecfg.rc:233 +#: winecfg.rc:232 #, fuzzy #| msgid "" #| "Failed to connect to the mount manager, the drive configuration cannot be " @@ -15687,207 +15724,207 @@ "Selhalo připojení k správci přípojných bodů, nelze upravovat konfiguraci " "diskových jednotek." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "Přid&at..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "Aut&odetekce" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Cesta:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "Zobrazit rozšířené &možnosti" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "&Zařízení:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "Procház&et..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "P&opisek:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "&Sériové číslo:" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "Zo&brazit soubory s tečkou na začátku názvu" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Diagnostika ovladače" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Výchozí nastavení" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Výstupní zařízení:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Zařízení hlasového výstupu:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Vstupní zařízení:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Zařízení hlasového vstupu:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "O&testovat zvuk" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Nastavení reproduktorů" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Reproduktory:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Vzhled" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Téma:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Instalovat téma..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "Po&ložka:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "B&arva:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Adresáře" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "&Odkaz do:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Knihovny" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Disky" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Vyberte, prosím, cílový unixový adresář." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "Schovat rozšířené &možnosti" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Bez tématu)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Zobrazení" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Začlenění do pracovní plochy" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Zvuk" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "O programu" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Konfigurace Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Témata vzhledu (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Zvolte soubor tématu vzhledu" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Adresář" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Odkazuje do" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Konfigurace Wine pro %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Zvolený ovladač: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Žádný)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Test zvuku selhal!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Výchozí v systému)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "Surround 5.1" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "Kvadrofonní" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Stereo" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Mono" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15895,67 +15932,67 @@ "Nedoporučuje se měnit pořadí nahrávání této knihovny.\n" "Určitě to chcete udělat?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Varování: systémová knihovna" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "nativní" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "vestavěná" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "nativní, vestavěná" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "vestavěná, nativní" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "zakázat" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Standardní nastavení" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Programy Wine (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Použít všeobecná nastavení" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Vyberte spustitelný soubor" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Autodetekce" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Místní pevný disk" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Síťový disk" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Disketa" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -15966,11 +16003,11 @@ "Každý disk musí mít přiřazeno písmeno od A do Z, takže jich nelze mít více " "než 26." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Systémový disk" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy #| msgid "" #| "Are you sure you want to delete drive C?\n" @@ -15989,16 +16026,16 @@ "případě, že tomu tak není. Pokud smažete disk C, nezapomeňte jej znovu " "vytvořit!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Písmeno" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Cílová složka" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16008,127 +16045,127 @@ "\n" "Klikněte na ‘Přidat...’ v záložce Disky a vytvořte ho!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Pozadí ovládacích prvků" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Písmo ovládacích prvků" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Pozadí menu" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Písmo menu" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Posuvník" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Pozadí výběru" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Písmo výběru" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Pozadí tipu" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Písmo tipu" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Pozadí okna" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Písmo okna" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Pozadí titulku aktivního okna" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Písmo titulku aktivního okna" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Pozadí titulku neaktivního okna" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Písmo titulku neaktivního okna" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Písmo okna zprávy" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Pracovní prostor aplikace" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Písmo okna" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Okraj aktivního okna" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Okraj neaktivního okna" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Stíny ovládacích prvků" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Pošedlý text" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Zvýraznění ovládacích prvků" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Tmavé stíny ovládacích prvků" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Nasvícení ovládacích prvků" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Alternativní pozadí ovládacích prvků" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Prvek pod ukazatelem" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Přechod titulku aktivního okna" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Přechod titulku neaktivního okna" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Zvýraznění v menu" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Lišta menu" diff -Nru wine-development-5.5/po/da.po wine-development-5.6/po/da.po --- wine-development-5.5/po/da.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/da.po 2020-04-10 18:54:32.000000000 +0000 @@ -47,8 +47,8 @@ msgid "&Modify..." msgstr "&Rediger..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Fjern" @@ -67,7 +67,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -149,8 +149,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -200,7 +200,7 @@ "Giver dig mulighed for at installere ny software, eller fjerne eksisterende " "software fra din computer." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Programmer" @@ -599,7 +599,7 @@ msgid "Font St&yle:" msgstr "&Typografi:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Størrelse:" @@ -615,7 +615,7 @@ msgid "&Underline" msgstr "&Understreget" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Farve:" @@ -789,7 +789,7 @@ msgid "C&ollate" msgstr "&hold sammen" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "S&tørrelse:" @@ -2271,7 +2271,7 @@ msgid "&File name:" msgstr "&Filnavn:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "&Gennemse..." @@ -3049,7 +3049,7 @@ msgid "Player" msgstr "Afspiller" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Enhed" @@ -3608,7 +3608,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Deaktiver" @@ -3883,6 +3883,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7510,7 +7511,7 @@ msgid "Hyperlink Information" msgstr "Information om Hyperlink'et" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "T&ype:" @@ -9095,7 +9096,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9593,7 +9594,7 @@ msgid "&Open:" msgstr "&Åbn:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Gennemse..." @@ -9696,7 +9697,7 @@ msgid "Date deleted" msgstr "Dato slettet" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Skrivebord" @@ -10043,7 +10044,7 @@ msgid "Trash" msgstr "Papirkurven" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Fejl" @@ -10076,137 +10077,137 @@ msgid "Select Source" msgstr "Ny mappe" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "Dato og tid" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "Dato og tid" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "Central europæisk" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "Central europæisk" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "Central europæisk" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "Central europæisk" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "&Standardlinje" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10218,35 +10219,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10258,67 +10259,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10330,11 +10331,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10346,97 +10347,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "&Standardlinje" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "Dato og tid" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "&Standardlinje" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10448,27 +10461,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10480,67 +10493,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10552,19 +10565,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10584,35 +10597,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10624,27 +10637,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10656,19 +10669,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10680,29 +10693,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "Dato og tid" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10714,35 +10727,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "Dato og tid" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "Dato og tid" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10758,11 +10783,11 @@ msgid "Aleutian Daylight Time" msgstr "Dato og tid" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10774,137 +10799,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "Dato og tid" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "Dato og tid" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "Dato og tid" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "Dato og tid" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "&Standardlinje" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -12116,7 +12153,7 @@ msgid "Digi&tal" msgstr "&Digital" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Skrifttype..." @@ -16019,7 +16056,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Wine konfigurationen i %s, er ved at blive opdateret, vent venligst..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -16031,23 +16068,23 @@ "publiceret af Free Software Foundation; enten version 2.1, eller (efter dit " "valg) en senere version." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Windows registreringsoplysninger" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "Ejer:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organisation:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Programindstillinger" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -16058,57 +16095,57 @@ "for at ændre indstillinger på hele systemet eller per program i disse " "faneblade." -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy #| msgid "&Add application..." msgid "Add appli&cation..." msgstr "&Tilføj program..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Fjern program" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Windows version:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Vindueindstillinger" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Automatisk fang &musen i vinduer med fuld skærm" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Tillad vindues manageren at &dekorere vinduerne" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Tillad vindues manageren at styre vinduerne" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "Emuler et virtuel &skrivebord" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Skrivebord &størrelse:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Skærmopløsning" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Dette er en eksempel tekst med 10 punkts Tahoma" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL overstyringer" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -16117,59 +16154,59 @@ "Dynamiske Link Biblioteker kan specificeres individuelt for enten indbygget " "(fra Wine) eller indfødt (taget fra Windows eller et program)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Nye overstyringer for bibliotek:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Eksisterende &overstyringer:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Rediger..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Rediger overstyring" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Indlæsningsrækkefølge" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "Ind&bygget (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "Ind&født (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 #, fuzzy #| msgid "Bui<in then Native" msgid "Buil&tin then Native" msgstr "Indb&ygget derefter indfødt" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "I&ndfødt derefter indbygget" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Vælg Drevbogstav" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy #| msgid "Wine configuration" msgid "Drive configuration" msgstr "Wine konfiguration" -#: winecfg.rc:233 +#: winecfg.rc:232 #, fuzzy #| msgid "" #| "Failed to connect to the mount manager, the drive configuration cannot be " @@ -16181,221 +16218,221 @@ "Det lykkedes ikke at forbinde til mount manageren. Drevkonfigurationen kan " "ikke redigeres." -#: winecfg.rc:236 +#: winecfg.rc:235 #, fuzzy #| msgid "&Add..." msgid "A&dd..." msgstr "&Tilføj..." -#: winecfg.rc:238 +#: winecfg.rc:237 #, fuzzy #| msgid "Autodetect" msgid "Aut&odetect" msgstr "Auto&detekter" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Sti:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 #, fuzzy #| msgid "Show &Advanced" msgid "Show Advan&ced" msgstr "Vis &avanceret" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "Enhed:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "G&ennemse..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "Etiket:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "Se&riel:" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy #| msgid "Show &dot files" msgid "&Show dot files" msgstr "Vis &dot filer" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Driver diagnostik" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Standarder" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Output enhed:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Stemme output enhed:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Input enhed:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Stemme input enhed:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Test lyd" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy #| msgid "Wine configuration" msgid "Speaker configuration" msgstr "Wine konfiguration" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Udseende" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Tema:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Installer tema..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "&Element:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "F&arve:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Mapper" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "&Link til:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Biblioteker" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Enheder" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Vælg venligst Unix mappen." -#: winecfg.rc:37 +#: winecfg.rc:36 #, fuzzy #| msgid "Hide &Advanced" msgid "Hide Advan&ced" msgstr "Skjul &avanceret" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Intet tema)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Grafik" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Skrivebord integrering" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Lyd" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Om" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Wine konfiguration" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Tema filer (*.msstyles, *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Vælg en tema fil" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Mappe" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Link til" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Wine konfiguration for %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Valgt driver: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Ingen)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Lyd test fejlede!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(System standard)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 #, fuzzy #| msgid "graphic" msgid "Quadraphonic" msgstr "Grafik" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -16403,67 +16440,67 @@ "At ændre indlæsningsrækkefølge af dette bibliotek er ikke anbefalet.\n" "Er du sikker på at du vil gøre dette?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Advarsel: system bibliotek" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "indfødt" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "indbygget" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "indfødt, indbygget" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "indbygget, indfødt" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "Deaktiveret" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Standard indstillinger" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Wine programmer (*.exe, *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Brug globale indstillinger" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Vælg en programfil" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Auto&detekter" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Lokal harddisk" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Networkresourse" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Diskettedrev" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-Rom" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -16474,11 +16511,11 @@ "Hvert drev skal have et bogstav, fra A til Z, så du kan ikke have mere end " "26." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Systemdrev" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy #| msgid "" #| "Are you sure you want to delete drive C?\n" @@ -16496,18 +16533,18 @@ "De fleste Windows programmer regner med at C drevet eksisterer, og vil gå " "ned hvis det ikke gør. Hvis du forsætter, så husk at lave det igen!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Bogstav" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "New Folder" msgid "Target folder" msgstr "Ny mappe" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16517,127 +16554,127 @@ "\n" "Husk at klikke Tilføj i Drev tabben for lave en!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Kontrol baggrund" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Kontrol tekst" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Menubaggrund" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Menutekst" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Scrollbar" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Markeret baggrund" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Markeret tekst" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Baggrund i værktøjstip" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Tekst i værktøjstip" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "vinduesbaggrund" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "vinduestekst" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Aktiv titellinje" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Aktiv titeltekst" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Inaktiv titellinje" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Inaktiv titeltekst" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Meldingsvinduestekst" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Arbejdsområde i program" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Vinduesramme" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Aktiv kant" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Inaktiv kant" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Kontrol skygge" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Grå tekst" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Markeret controls" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Kontrol mørk skygge" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Kontrol lys" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Baggrund for skiftende controls" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Markeret element" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Gradient for aktiv titellinje" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Gradient for Inaktiv titellinje" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Markeret menu" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Menulinje" diff -Nru wine-development-5.5/po/de.po wine-development-5.6/po/de.po --- wine-development-5.5/po/de.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/de.po 2020-04-10 18:54:32.000000000 +0000 @@ -48,8 +48,8 @@ msgid "&Modify..." msgstr "&Ändern..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Entfernen" @@ -68,7 +68,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -153,8 +153,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -192,7 +192,7 @@ "computer." msgstr "Erlaubt es Ihnen, neue Software hinzuzufügen oder zu entfernen." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Anwendungen" @@ -586,7 +586,7 @@ msgid "Font St&yle:" msgstr "Schrift&stil:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Größe:" @@ -602,7 +602,7 @@ msgid "&Underline" msgstr "&Unterstrichen" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Farbe:" @@ -774,7 +774,7 @@ msgid "C&ollate" msgstr "S&ortieren" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "G&röße:" @@ -2252,7 +2252,7 @@ msgid "&File name:" msgstr "&Dateiname:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "&Wählen..." @@ -3019,7 +3019,7 @@ msgid "Player" msgstr "Player" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Gerät" @@ -3567,7 +3567,7 @@ msgid "Joysticks" msgstr "Joysticks" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Deaktivieren" @@ -3826,6 +3826,7 @@ msgstr "Wine-Kernel-DLL" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7294,7 +7295,7 @@ msgid "Hyperlink Information" msgstr "Hyperlink-Informationen" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Typ:" @@ -8707,7 +8708,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9203,7 +9204,7 @@ msgid "&Open:" msgstr "Ö&ffnen:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Durchsuchen..." @@ -9292,7 +9293,7 @@ msgid "Date deleted" msgstr "Gelöscht am" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Desktop" @@ -9641,7 +9642,7 @@ msgid "Trash" msgstr "Papierkorb" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Fehler" @@ -9672,127 +9673,127 @@ msgid "Select Source" msgstr "Quelle auswählen" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "China Normalzeit" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "China Sommerzeit" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "Nordasien Normalzeit" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "Nordasien Sommerzeit" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "Georgische Normalzeit" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "Georgische Sommerzeit" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "Nepal Normalzeit" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "Nepal Sommerzeit" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "Kap Verde Normalzeit" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "Kap Verde Sommerzeit" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Hawaiian Standard Time" msgid "Haiti Standard Time" msgstr "Hawaii Normalzeit" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Hawaiian Daylight Time" msgid "Haiti Daylight Time" msgstr "Hawaii Sommerzeit" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "Mitteleuropäische Zeit" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "Mitteleuropäische Sommerzeit" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "Marokko Normalzeit" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "Marokko Sommerzeit" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "Mitteleuropäische Zeit" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "Mitteleuropäische Sommerzeit" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "Iran Normalzeit" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "Iran Sommerzeit" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "Namibia Normalzeit" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "Namibia Sommerzeit" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "Tonga Normalzeit" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "Tonga Sommerzeit" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "Mountain Normalzeit (Mexiko)" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "Mountain Sommerzeit (Mexiko)" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "GMT Normalzeit" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "GMT Sommerzeit" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "Zentralasien Normalzeit" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "Zentralasien Sommerzeit" @@ -9804,35 +9805,35 @@ msgid "Arabic Daylight Time" msgstr "Arabische Sommerzeit" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "Magadan Normalzeit" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "Magadan Sommerzeit" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "Neufundland Normalzeit" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "Neufundland Sommerzeit" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "Westpazifische Normalzeit" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "Westpazifische Sommerzeit" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "Pazifische Normalzeit" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "Pazifische Sommerzeit" @@ -9844,67 +9845,67 @@ msgid "Azerbaijan Daylight Time" msgstr "Aserbaidschan Sommerzeit" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "Samoa Normalzeit" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "Samoa Sommerzeit" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "Kaliningrad Normalzeit" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "Kaliningrad Sommerzeit" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "Pazifische Normalzeit (Mexiko)" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "Pazifische Sommerzeit (Mexiko)" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "Mittlerer Osten Normalzeit" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "Mittlerer Osten Sommerzeit" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "Tokyo Normalzeit" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "Tokyo Sommerzeit" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "Linieninseln Normalzeit" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "Linieninseln Sommerzeit" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "Jordanien Normalzeit" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "Jordanien Sommerzeit" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "Central Normalzeit" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "Central Sommerzeit" @@ -9916,11 +9917,11 @@ msgid "Azores Daylight Time" msgstr "Azoren Sommerzeit" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "Ost-Nordasiatische Normalzeit" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "Ost-Nordasiatische Sommerzeit" @@ -9932,95 +9933,107 @@ msgid "Argentina Daylight Time" msgstr "Argentinien Sommerzeit" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "Mauritius Standard Time" +msgid "Marquesas Standard Time" +msgstr "Mauritius Normalzeit" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Mauritius Daylight Time" +msgid "Marquesas Daylight Time" +msgstr "Mauritius Sommerzeit" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "Myanmar Normalzeit" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "Myanmar Sommerzeit" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "Koordinierte Weltzeit" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "Indien Normalzeit" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "Indien Sommerzeit" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "Osteuropäische Zeit" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "Osteuropäische Sommerzeit" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "Türkei Normalzeit" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "Türkei Sommerzeit" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "Fidschi Normalzeit" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "Fidschi Sommerzeit" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "Central Normalzeit (Kanada)" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "Central Sommerzeit (Kanada)" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "Taipeh Normalzeit" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "Taipeh Sommerzeit" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "Mitteleuropäische Zeit" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "Mitteleuropäische Sommerzeit" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "Montevideo Normalzeit" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "Montevideo Sommerzeit" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "Pakistan Normalzeit" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "Pakistan Sommerzeit" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "Kaukasische Normalzeit" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "Kaukasische Sommerzeit" @@ -10032,27 +10045,27 @@ msgid "AUS Eastern Daylight Time" msgstr "Ostaustralische Sommerzeit" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "Nordzentralasien Normalzeit" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "Nordzentralasien Sommerzeit" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "Eastern Normalzeit" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "Eastern Sommerzeit" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "Central Normalzeit (Mexiko)" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "Central Sommerzeit (Mexiko)" @@ -10064,67 +10077,67 @@ msgid "Atlantic Daylight Time" msgstr "Atlantic Sommerzeit" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "Mountain Normalzeit" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "Mountain Sommerzeit" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "US Eastern Normalzeit" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "US Eastern Sommerzeit" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "Tasmanien Normalzeit" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "Tasmanien Sommerzeit" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "Mittelamerikanische Normalzeit" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "Mittelamerikanische Sommerzeit" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "US Mountain Normalzeit" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "US Mountain Sommerzeit" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "Südafrika Normalzeit" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "Südafrika Sommerzeit" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "Zentralaustralische Normalzeit" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "Zentralaustralische Sommerzeit" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "Sri Lanka Normalzeit" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "Sri Lanka Sommerzeit" @@ -10136,19 +10149,19 @@ msgid "Afghanistan Daylight Time" msgstr "Afghanistan Sommerzeit" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "Yakutsk Normalzeit" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "Yakutsk Sommerzeit" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "Östl. Südamerika Normalzeit" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "Östl. Südamerika Sommerzeit" @@ -10168,35 +10181,35 @@ msgid "Arabian Daylight Time" msgstr "Arabische Sommerzeit" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "Russische Normalzeit" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "Russische Sommerzeit" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "Romanische Normalzeit" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "Romanische Sommerzeit" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "Jekaterinburg Normalzeit" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "Jekaterinburg Sommerzeit" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "Syrien Normalzeit" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "Syrien Sommerzeit" @@ -10208,27 +10221,27 @@ msgid "AUS Central Daylight Time" msgstr "Zentralaustralische Sommerzeit" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "Westafrikanische Normalzeit" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "Westafrikanische Sommerzeit" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "Ulan-Bator Normalzeit" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "Ulan-Bator Sommerzeit" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "Israel Normalzeit" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "Israel Sommerzeit" @@ -10240,19 +10253,19 @@ msgid "Bangladesh Daylight Time" msgstr "Bangladesch Sommerzeit" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "Westl. Südamerika Normalzeit" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "Westl. Südamerika Sommerzeit" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "Westasien Normalzeit" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "Westasien Sommerzeit" @@ -10264,27 +10277,27 @@ msgid "Alaskan Daylight Time" msgstr "Alaska Sommerzeit" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "Paraguay Normalzeit" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "Paraguay Sommerzeit" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "Datumsgrenze Normalzeit" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "Datumsgrenze Sommerzeit" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "Libyen Normalzeit" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "Libyen Sommerzeit" @@ -10296,35 +10309,47 @@ msgid "Bahia Daylight Time" msgstr "Bahia Sommerzeit" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "Venezuela Normalzeit" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "Venezuela Sommerzeit" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Mountain Standard Time" +msgid "Bougainville Standard Time" +msgstr "Mountain Normalzeit" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Mountain Daylight Time" +msgid "Bougainville Daylight Time" +msgstr "Mountain Sommerzeit" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "Hawaii Normalzeit" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "Hawaii Sommerzeit" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "Südostasiatische Normalzeit" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "Südostasiatische Sommerzeit" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "Neuseeland Normalzeit" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "Neuseeland Sommerzeit" @@ -10340,11 +10365,11 @@ msgid "Aleutian Daylight Time" msgstr "Argentinien Sommerzeit" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "Zentalbrasilianische Normalzeit" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "Zentalbrasilianische Sommerzeit" @@ -10356,131 +10381,143 @@ msgid "Belarus Daylight Time" msgstr "Belarus Sommerzeit" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "Mittl. Südamerika Normalzeit" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "Mittl. Südamerika Sommerzeit" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "Grönland Normalzeit" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "Grönland Sommerzeit" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "Osterinsel Normalzeit" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "Osterinsel Sommerzeit" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "Ägypten Normalzeit" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "Ägypten Sommerzeit" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "Mauritius Normalzeit" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "Mauritius Sommerzeit" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "Wladiwostok Normalzeit" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "Wladiwostok Sommerzeit" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "Singapur Normalzeit" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "Singapur Sommerzeit" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "Koreanische Normalzeit" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "Koreanische Sommerzeit" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Easter Island Standard Time" +msgid "Chatham Islands Standard Time" +msgstr "Osterinsel Normalzeit" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Easter Island Daylight Time" +msgid "Chatham Islands Daylight Time" +msgstr "Osterinsel Sommerzeit" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "Ostafrikanische Normalzeit" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "Ostafrikanische Sommerzeit" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "Osteuropäische Zeit" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "Osteuropäische Sommerzeit" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "Östl. Südamerika Normalzeit" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "Östl. Südamerika Sommerzeit" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "Zentralpazifische Normalzeit" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "Zentralpazifische Sommerzeit" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "West-Zentralafrika Normalzeit" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "West-Zentralafrika Sommerzeit" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "Chilenische Normalzeit" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "Chilenische Sommerzeit" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "Ostaustralische Normalzeit" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "Ostaustralische Sommerzeit" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "Westaustralische Normalzeit" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "Westaustralische Sommerzeit" @@ -11676,7 +11713,7 @@ msgid "Digi&tal" msgstr "Digi&tal" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "Schrift&art..." @@ -15518,7 +15555,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Die Konfiguration von Wine in %s wird aktualisiert, bitte warten..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15530,23 +15567,23 @@ "veröffentlicht, weiterverteilen und/oder modifizieren; entweder gemäß " "Version 2.1 der Lizenz oder (nach Ihrer Option) jeder späteren Version." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Windows-Registrierungsinformationen" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Eigentümer:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "&Organisation:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Anwendungseinstellungen" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15557,55 +15594,55 @@ "verknüpft, so dass Sie entweder systemweite oder anwendungsabhängige " "Einstellungen in diesen Reitern vornehmen können." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "Anw. &hinzufügen..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "Anw. &entfernen" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Windows-Version:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Fenstereinstellungen" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Im Vollbildmodus automatisch die &Maus einfangen" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Erlaube dem Fenstermanager die Fenster zu &dekorieren" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Erlaube dem Fenstermanager die &Fenster zu kontrollieren" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Emuliere einen virtuellen Bildschirm" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Desktop-&Größe:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Bildschirmauflösung" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Dies ist ein Beispieltext in 10-Punkt-Tahoma" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL-Überschreibungen" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15615,55 +15652,55 @@ "Builtin (gestellt durch Wine) oder Native (von Windows oder durch die " "Anwendung gestellt)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Neue Überschreibung für:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "&Hinzufügen" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Bestehende Über&schreibungen:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Bearbeiten..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Überschreibung bearbeiten" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Ladereihenfolge" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Builtin (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Native (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "Buil&tin dann Native" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Nati&ve dann Builtin" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Laufwerksbuchstaben wählen" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Laufwerkskonfiguration" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." @@ -15671,207 +15708,207 @@ "Fehler beim Verbinden mit dem Mountmanager. Die Laufwerkskonfiguration kann " "nicht bearbeitet werden." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "&Hinzufügen..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "&Automatisch" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Pfad:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "&Erweitert anzeigen" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "Ge&rät:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "Durch&suchen..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Bezeichnung:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "S&erien-Nr.:" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "D&ot-Dateien anzeigen" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Treiberdiagnose" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Standards" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Ausgabegerät:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Sprachausgabegerät:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Eingabegerät:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Spracheingabegerät:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "Sound &testen" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Lautsprecher-Konfiguration" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Lautsprecher:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Darstellung" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Thema:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "Thema &installieren..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "&Element:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "F&arbe:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "MIME-Typen" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "Datei&zuordnungen verwalten" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Ordner" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "&Verknüpfen mit:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Bibliotheken" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Laufwerke" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Bitte wählen Sie das Unix-Zielverzeichnis." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "&Erweitert ausblenden" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Kein Thema)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Grafik" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Desktop-Integration" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Audio" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Über" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Wine-Konfiguration" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Themen-Dateien (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Themen-Datei auswählen" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Shell-Ordner" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Verknüpft mit" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Wine-Konfiguration für %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Ausgewählter Treiber: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Kein)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Audiotest fehlgeschlagen!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Systemstandard)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "5.1 Surround" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "Quadrofon" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Stereo" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Mono" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15879,67 +15916,67 @@ "Das Ändern der Ladereihenfolge dieser Bibliothek wird nicht empfohlen.\n" "Sind Sie sicher, dass Sie dies tun möchten?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Warnung: Systembibliothek" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "Native" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "Builtin" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "Native, Builtin" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "Builtin, Native" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "ausgeschaltet" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Standardeinstellungen" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Wine-Programme (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Globale Einstellung benutzen" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Ausführbares Programm auswählen" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Automatisch" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Lokale Festplatte" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Netzwerkfreigabe" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Diskette" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -15950,11 +15987,11 @@ "Jedes Laufwerk muss einen Buchstaben besitzen, von A bis Z, daher können Sie " "nicht mehr als 26 Laufwerke definieren." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Systemlaufwerk" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15967,16 +16004,16 @@ "werden ohne dieses unsauber abstürzen. Wenn Sie fortfahren, vergessen Sie " "nicht, Laufwerk C neu zu erstellen!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Buchst." -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Zielverzeichnis" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -15987,127 +16024,127 @@ "Vergessen Sie nicht, im Reiter 'Laufwerke' ein solches anzulegen, indem Sie " "auf 'Hinzufügen' klicken!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Steuerelementhintergrund" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Steuerelementtext" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Menühintergrund" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Menütext" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Bildlaufleiste" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Auswahlhintergrund" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Auswahltext" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Tooltip-Hintergrund" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Tooltip-Text" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Fensterhintergrund" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Fenstertext" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Aktive Titelleiste" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Aktiver Titelleistentext" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Inaktive Titelleiste" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Inaktiver Titelleistentext" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Dialogfeldtext" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Anwendungsarbeitsplatz" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Fensterrahmen" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Aktiver Rand" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Inaktiver Rand" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Steuerelementschatten" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Grauer Text" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Steuerelementhervorhebung" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Dunkler Steuerelementschatten" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Steuerelementerhellung" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Alternativer Steuerelementhintergrund" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Aktiv hervorgehobenes Element" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Gradient der aktiven Titelleiste" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Gradient der inaktiven Titelleiste" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Menühervorhebung" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Menüleiste" diff -Nru wine-development-5.5/po/el.po wine-development-5.6/po/el.po --- wine-development-5.5/po/el.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/el.po 2020-04-10 18:54:32.000000000 +0000 @@ -43,8 +43,8 @@ msgid "&Modify..." msgstr "" -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "" @@ -63,7 +63,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -143,8 +143,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -175,7 +175,7 @@ "computer." msgstr "" -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 #, fuzzy msgid "Applications" msgstr "Επιλογές" @@ -574,7 +574,7 @@ msgid "Font St&yle:" msgstr "Στυλ Γρ&αμματοσειράς:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Μέγεθος:" @@ -590,7 +590,7 @@ msgid "&Underline" msgstr "&Υπογράμμιση" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Χρώμα:" @@ -764,7 +764,7 @@ msgid "C&ollate" msgstr "" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Μέγε&θος:" @@ -2231,7 +2231,7 @@ msgid "&File name:" msgstr "&Περιεχόμενα" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "" @@ -2950,7 +2950,7 @@ msgid "Player" msgstr "" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "" @@ -3508,7 +3508,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "" @@ -3766,6 +3766,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "" @@ -7369,7 +7370,7 @@ msgid "Hyperlink Information" msgstr "" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "" @@ -8762,7 +8763,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "" @@ -9261,7 +9262,7 @@ msgid "&Open:" msgstr "" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "" @@ -9356,7 +9357,7 @@ msgid "Date deleted" msgstr "" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 #, fuzzy msgctxt "display name" msgid "Desktop" @@ -9685,7 +9686,7 @@ msgid "Trash" msgstr "" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "" @@ -9717,123 +9718,123 @@ msgid "Select Source" msgstr "Δημιουργία νέου καταλόγου" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 msgid "Haiti Standard Time" msgstr "" -#: tzres.rc:117 +#: tzres.rc:121 msgid "Haiti Daylight Time" msgstr "" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9845,35 +9846,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9885,67 +9886,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -9957,11 +9958,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -9973,95 +9974,103 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +msgid "Marquesas Standard Time" +msgstr "" + +#: tzres.rc:143 +msgid "Marquesas Daylight Time" +msgstr "" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10073,27 +10082,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10105,67 +10114,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10177,19 +10186,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10209,35 +10218,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10249,27 +10258,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10281,19 +10290,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10305,27 +10314,27 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10337,35 +10346,43 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +msgid "Bougainville Standard Time" +msgstr "" + +#: tzres.rc:61 +msgid "Bougainville Daylight Time" +msgstr "" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10377,11 +10394,11 @@ msgid "Aleutian Daylight Time" msgstr "" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10393,131 +10410,139 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +msgid "Chatham Islands Standard Time" +msgstr "" + +#: tzres.rc:87 +msgid "Chatham Islands Daylight Time" +msgstr "" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11562,7 +11587,7 @@ msgid "Digi&tal" msgstr "" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "" @@ -15041,7 +15066,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "" -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15049,432 +15074,432 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 #, fuzzy msgid "Windows registration information" msgstr "Εκτύπωση" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "" -#: winecfg.rc:146 +#: winecfg.rc:145 #, fuzzy msgid "Organi&zation:" msgstr "Επιλογές" -#: winecfg.rc:154 +#: winecfg.rc:153 #, fuzzy msgid "Application settings" msgstr "Επιλογές" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." msgstr "" -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy msgid "Add appli&cation..." msgstr "Επιλογές" -#: winecfg.rc:160 +#: winecfg.rc:159 #, fuzzy msgid "&Remove application" msgstr "Επιλογές" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "" -#: winecfg.rc:175 +#: winecfg.rc:174 #, fuzzy msgid "Desktop &size:" msgstr "Επιφάνεια Εργασίας" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 #, fuzzy msgid "&Edit..." msgstr "Εκτύπωση" -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy msgid "Drive configuration" msgstr "Επιλογές" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "" -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "" -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy msgid "&Show dot files" msgstr "Λεπτομέρειες" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 #, fuzzy msgid "Defaults" msgstr "Προεπιλεγμένος εκτυπωτής; " -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy msgid "Speaker configuration" msgstr "Επιλογές" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "" -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 #, fuzzy msgid "Folders" msgstr "Κατάλογοι Συστήματος" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "" -#: winecfg.rc:44 +#: winecfg.rc:43 #, fuzzy msgid "Wine configuration" msgstr "Επιλογές" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "" -#: winecfg.rc:45 +#: winecfg.rc:44 #, fuzzy msgid "Wine configuration for %s" msgstr "Επιλογές" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 #, fuzzy msgid "(None)" msgstr "Κανένα" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 #, fuzzy msgid "(System default)" msgstr "Κατάλογοι Συστήματος" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" msgstr "" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15482,147 +15507,147 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "Create New Folder" msgid "Target folder" msgstr "Δημιουργία νέου καταλόγου" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "" -#: winecfg.rc:100 +#: winecfg.rc:99 #, fuzzy msgid "Controls Text" msgstr "&Περιεχόμενα" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 #, fuzzy msgid "Application Workspace" msgstr "Επιλογές" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "" diff -Nru wine-development-5.5/po/en.po wine-development-5.6/po/en.po --- wine-development-5.5/po/en.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/en.po 2020-04-10 18:54:32.000000000 +0000 @@ -47,8 +47,8 @@ msgid "&Modify..." msgstr "&Modify..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Remove" @@ -67,7 +67,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -150,8 +150,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -191,7 +191,7 @@ "Allows you to install new software, or remove existing software from your " "computer." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Applications" @@ -585,7 +585,7 @@ msgid "Font St&yle:" msgstr "Font St&yle:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Size:" @@ -601,7 +601,7 @@ msgid "&Underline" msgstr "&Underline" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Colour:" @@ -773,7 +773,7 @@ msgid "C&ollate" msgstr "C&ollate" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Si&ze:" @@ -2250,7 +2250,7 @@ msgid "&File name:" msgstr "&File name:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "B&rowse..." @@ -3013,7 +3013,7 @@ msgid "Player" msgstr "Player" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Device" @@ -3560,7 +3560,7 @@ msgid "Joysticks" msgstr "Joysticks" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Disable" @@ -3817,6 +3817,7 @@ msgstr "Wine kernel DLL" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7276,7 +7277,7 @@ msgid "Hyperlink Information" msgstr "Hyperlink Information" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Type:" @@ -8669,7 +8670,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9165,7 +9166,7 @@ msgid "&Open:" msgstr "&Open:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Browse..." @@ -9254,7 +9255,7 @@ msgid "Date deleted" msgstr "Date deleted" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Desktop" @@ -9597,7 +9598,7 @@ msgid "Trash" msgstr "Trash" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Error" @@ -9628,123 +9629,123 @@ msgid "Select Source" msgstr "Select Source" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "China Standard Time" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "China Daylight Time" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "North Asia Standard Time" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "North Asia Daylight Time" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "Georgian Standard Time" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "Georgian Daylight Time" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "Nepal Standard Time" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "Nepal Daylight Time" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "Cape Verde Standard Time" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "Cape Verde Daylight Time" -#: tzres.rc:116 +#: tzres.rc:120 msgid "Haiti Standard Time" msgstr "Haiti Standard Time" -#: tzres.rc:117 +#: tzres.rc:121 msgid "Haiti Daylight Time" msgstr "Haiti Daylight Time" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "Central European Standard Time" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "Central European Daylight Time" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "Morocco Standard Time" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "Morocco Daylight Time" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "Central Europe Standard Time" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "Central Europe Daylight Time" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "Iran Standard Time" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "Iran Daylight Time" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "Namibia Standard Time" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "Namibia Daylight Time" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "Tonga Standard Time" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "Tonga Daylight Time" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "Mountain Standard Time (Mexico)" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "Mountain Daylight Time (Mexico)" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "GMT Standard Time" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "GMT Daylight Time" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "Central Asia Standard Time" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "Central Asia Daylight Time" @@ -9756,35 +9757,35 @@ msgid "Arabic Daylight Time" msgstr "Arabic Daylight Time" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "Magadan Standard Time" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "Magadan Daylight Time" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "Newfoundland Standard Time" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "Newfoundland Daylight Time" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "West Pacific Standard Time" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "West Pacific Daylight Time" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "Pacific Standard Time" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "Pacific Daylight Time" @@ -9796,67 +9797,67 @@ msgid "Azerbaijan Daylight Time" msgstr "Azerbaijan Daylight Time" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "Samoa Standard Time" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "Samoa Daylight Time" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "Kaliningrad Standard Time" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "Kaliningrad Daylight Time" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "Pacific Standard Time (Mexico)" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "Pacific Daylight Time (Mexico)" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "Middle East Standard Time" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "Middle East Daylight Time" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "Tokyo Standard Time" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "Tokyo Daylight Time" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "Line Islands Standard Time" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "Line Islands Daylight Time" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "Jordan Standard Time" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "Jordan Daylight Time" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "Central Standard Time" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "Central Daylight Time" @@ -9868,11 +9869,11 @@ msgid "Azores Daylight Time" msgstr "Azores Daylight Time" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "North Asia East Standard Time" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "North Asia East Daylight Time" @@ -9884,95 +9885,103 @@ msgid "Argentina Daylight Time" msgstr "Argentina Daylight Time" -#: tzres.rc:150 +#: tzres.rc:142 +msgid "Marquesas Standard Time" +msgstr "Marquesas Standard Time" + +#: tzres.rc:143 +msgid "Marquesas Daylight Time" +msgstr "Marquesas Daylight Time" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "Myanmar Standard Time" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "Myanmar Daylight Time" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "Coordinated Universal Time" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "India Standard Time" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "India Daylight Time" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "GTB Standard Time" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "GTB Daylight Time" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "Turkey Standard Time" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "Turkey Daylight Time" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "Fiji Standard Time" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "Fiji Daylight Time" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "Canada Central Standard Time" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "Canada Central Daylight Time" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "Taipei Standard Time" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "Taipei Daylight Time" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "W. Europe Standard Time" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "W. Europe Daylight Time" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "Montevideo Standard Time" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "Montevideo Daylight Time" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "Pakistan Standard Time" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "Pakistan Daylight Time" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "Caucasus Standard Time" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "Caucasus Daylight Time" @@ -9984,27 +9993,27 @@ msgid "AUS Eastern Daylight Time" msgstr "AUS Eastern Daylight Time" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "N. Central Asia Standard Time" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "N. Central Asia Daylight Time" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "Eastern Standard Time" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "Eastern Daylight Time" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "Central Standard Time (Mexico)" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "Central Daylight Time (Mexico)" @@ -10016,67 +10025,67 @@ msgid "Atlantic Daylight Time" msgstr "Atlantic Daylight Time" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "Mountain Standard Time" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "Mountain Daylight Time" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "US Eastern Standard Time" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "US Eastern Daylight Time" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "Tasmania Standard Time" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "Tasmania Daylight Time" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "Central America Standard Time" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "Central America Daylight Time" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "US Mountain Standard Time" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "US Mountain Daylight Time" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "South Africa Standard Time" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "South Africa Daylight Time" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "Cen. Australia Standard Time" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "Cen. Australia Daylight Time" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "Sri Lanka Standard Time" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "Sri Lanka Daylight Time" @@ -10088,19 +10097,19 @@ msgid "Afghanistan Daylight Time" msgstr "Afghanistan Daylight Time" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "Yakutsk Standard Time" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "Yakutsk Daylight Time" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "SA Eastern Standard Time" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "SA Eastern Daylight Time" @@ -10120,35 +10129,35 @@ msgid "Arabian Daylight Time" msgstr "Arabian Daylight Time" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "Russian Standard Time" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "Russian Daylight Time" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "Romance Standard Time" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "Romance Daylight Time" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "Ekaterinburg Standard Time" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "Ekaterinburg Daylight Time" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "Syria Standard Time" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "Syria Daylight Time" @@ -10160,27 +10169,27 @@ msgid "AUS Central Daylight Time" msgstr "AUS Central Daylight Time" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "Greenwich Standard Time" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "Greenwich Daylight Time" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "Ulaanbaatar Standard Time" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "Ulaanbaatar Daylight Time" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "Israel Standard Time" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "Israel Daylight Time" @@ -10192,19 +10201,19 @@ msgid "Bangladesh Daylight Time" msgstr "Bangladesh Daylight Time" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "SA Pacific Standard Time" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "SA Pacific Daylight Time" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "West Asia Standard Time" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "West Asia Daylight Time" @@ -10216,27 +10225,27 @@ msgid "Alaskan Daylight Time" msgstr "Alaskan Daylight Time" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "Paraguay Standard Time" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "Paraguay Daylight Time" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "Dateline Standard Time" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "Dateline Daylight Time" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "Libya Standard Time" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "Libya Daylight Time" @@ -10248,35 +10257,43 @@ msgid "Bahia Daylight Time" msgstr "Bahia Daylight Time" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "Venezuela Standard Time" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "Venezuela Daylight Time" -#: tzres.rc:118 +#: tzres.rc:60 +msgid "Bougainville Standard Time" +msgstr "Bougainville Standard Time" + +#: tzres.rc:61 +msgid "Bougainville Daylight Time" +msgstr "Bougainville Daylight Time" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "Hawaiian Standard Time" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "Hawaiian Daylight Time" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "SE Asia Standard Time" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "SE Asia Daylight Time" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "New Zealand Standard Time" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "New Zealand Daylight Time" @@ -10288,11 +10305,11 @@ msgid "Aleutian Daylight Time" msgstr "Aleutian Daylight Time" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "Central Brazilian Standard Time" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "Central Brazilian Daylight Time" @@ -10304,131 +10321,139 @@ msgid "Belarus Daylight Time" msgstr "Belarus Daylight Time" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "SA Western Standard Time" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "SA Western Daylight Time" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "Greenland Standard Time" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "Greenland Daylight Time" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "Easter Island Standard Time" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "Easter Island Daylight Time" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "Egypt Standard Time" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "Egypt Daylight Time" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "Mauritius Standard Time" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "Mauritius Daylight Time" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "Vladivostok Standard Time" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "Vladivostok Daylight Time" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "Singapore Standard Time" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "Singapore Daylight Time" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "Korea Standard Time" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "Korea Daylight Time" -#: tzres.rc:88 +#: tzres.rc:86 +msgid "Chatham Islands Standard Time" +msgstr "Chatham Islands Standard Time" + +#: tzres.rc:87 +msgid "Chatham Islands Daylight Time" +msgstr "Chatham Islands Daylight Time" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "E. Africa Standard Time" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "E. Africa Daylight Time" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "FLE Standard Time" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "FLE Daylight Time" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "E. South America Standard Time" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "E. South America Daylight Time" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "Central Pacific Standard Time" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "Central Pacific Daylight Time" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "W. Central Africa Standard Time" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "W. Central Africa Daylight Time" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "Pacific SA Standard Time" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "Pacific SA Daylight Time" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "E. Australia Standard Time" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "E. Australia Daylight Time" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "W. Australia Standard Time" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "W. Australia Daylight Time" @@ -11592,7 +11617,7 @@ msgid "Digi&tal" msgstr "Digi&tal" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Font..." @@ -15386,7 +15411,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "The Wine configuration in %s is being updated, please wait..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15398,23 +15423,23 @@ "Free Software Foundation; either version 2.1 of the Licence, or (at your " "option) any later version." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Windows registration information" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Owner:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organi&sation:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Application settings" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15424,55 +15449,55 @@ "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "Add appli&cation..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Remove application" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Windows Version:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Window settings" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Automatically capture the &mouse in full-screen windows" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Allow the window manager to &decorate the windows" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Allow the &window manager to control the windows" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Emulate a virtual desktop" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Desktop &size:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Screen resolution" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "This is a sample text using 10 point Tahoma" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL overrides" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15482,55 +15507,55 @@ "(provided by Wine) or native (taken from Windows or provided by the " "application)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&New override for library:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "A&dd" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Existing &overrides:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Edit..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Edit Override" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Load order" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Builtin (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Native (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "Buil&tin then Native" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Nati&ve then Builtin" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Select Drive Letter" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Drive configuration" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." @@ -15538,207 +15563,207 @@ "Failed to connect to the mount manager; the drive configuration cannot be " "edited." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "A&dd..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "Aut&odetect" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Path:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "Show Advan&ced" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "De&vice:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "Bro&wse..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Label:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "S&erial:" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "&Show dot files" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Driver diagnostics" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Defaults" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Output device:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Voice output device:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Input device:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Voice input device:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Test Sound" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Speaker configuration" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Speakers:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Appearance" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Theme:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Install theme..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "It&em:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "C&olour:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "MIME types" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "Manage file &associations" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Folders" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "&Link to:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Libraries" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Drives" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Select the Unix target directory, please." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "Hide Advan&ced" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(No Theme)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Graphics" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Desktop Integration" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Audio" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "About" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Wine configuration" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Theme files (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Select a theme file" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Folder" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Links to" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Wine configuration for %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Selected driver: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(None)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Audio test failed!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(System default)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "5.1 Surround" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "Quadraphonic" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Stereo" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Mono" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15746,67 +15771,67 @@ "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Warning: system library" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "native" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "builtin" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "native, builtin" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "builtin, native" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "disabled" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Default Settings" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Wine Programs (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Use global settings" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Select an executable file" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Autodetect" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Local hard disk" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Network share" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Floppy disk" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -15816,11 +15841,11 @@ "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "System drive" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15832,16 +15857,16 @@ "Most Windows applications expect drive C to exist, and will die messily if " "it doesn't. If you proceed, remember to recreate it!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Letter" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Target folder" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -15851,127 +15876,127 @@ "\n" "Remember to click 'Add' in the Drives tab to create one!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Controls Background" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Controls Text" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Menu Background" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Menu Text" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Scrollbar" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Selection Background" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Selection Text" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Tooltip Background" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Tooltip Text" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Window Background" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Window Text" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Active Title Bar" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Active Title Text" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Inactive Title Bar" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Inactive Title Text" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Message Box Text" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Application Workspace" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Window Frame" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Active Border" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Inactive Border" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Controls Shadow" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Grey Text" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Controls Highlight" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Controls Dark Shadow" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Controls Light" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Controls Alternate Background" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Hot Tracked Item" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Active Title Bar Gradient" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Inactive Title Bar Gradient" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Menu Highlight" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Menu Bar" diff -Nru wine-development-5.5/po/en_US.po wine-development-5.6/po/en_US.po --- wine-development-5.5/po/en_US.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/en_US.po 2020-04-10 18:54:32.000000000 +0000 @@ -47,8 +47,8 @@ msgid "&Modify..." msgstr "&Modify..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Remove" @@ -67,7 +67,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -150,8 +150,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -191,7 +191,7 @@ "Allows you to install new software, or remove existing software from your " "computer." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Applications" @@ -585,7 +585,7 @@ msgid "Font St&yle:" msgstr "Font St&yle:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Size:" @@ -601,7 +601,7 @@ msgid "&Underline" msgstr "&Underline" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Color:" @@ -773,7 +773,7 @@ msgid "C&ollate" msgstr "C&ollate" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Si&ze:" @@ -2250,7 +2250,7 @@ msgid "&File name:" msgstr "&File name:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "B&rowse..." @@ -3013,7 +3013,7 @@ msgid "Player" msgstr "Player" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Device" @@ -3560,7 +3560,7 @@ msgid "Joysticks" msgstr "Joysticks" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Disable" @@ -3817,6 +3817,7 @@ msgstr "Wine kernel DLL" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7276,7 +7277,7 @@ msgid "Hyperlink Information" msgstr "Hyperlink Information" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Type:" @@ -8669,7 +8670,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9165,7 +9166,7 @@ msgid "&Open:" msgstr "&Open:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Browse..." @@ -9254,7 +9255,7 @@ msgid "Date deleted" msgstr "Date deleted" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Desktop" @@ -9597,7 +9598,7 @@ msgid "Trash" msgstr "Trash" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Error" @@ -9628,123 +9629,123 @@ msgid "Select Source" msgstr "Select Source" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "China Standard Time" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "China Daylight Time" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "North Asia Standard Time" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "North Asia Daylight Time" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "Georgian Standard Time" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "Georgian Daylight Time" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "Nepal Standard Time" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "Nepal Daylight Time" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "Cape Verde Standard Time" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "Cape Verde Daylight Time" -#: tzres.rc:116 +#: tzres.rc:120 msgid "Haiti Standard Time" msgstr "Haiti Standard Time" -#: tzres.rc:117 +#: tzres.rc:121 msgid "Haiti Daylight Time" msgstr "Haiti Daylight Time" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "Central European Standard Time" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "Central European Daylight Time" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "Morocco Standard Time" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "Morocco Daylight Time" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "Central Europe Standard Time" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "Central Europe Daylight Time" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "Iran Standard Time" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "Iran Daylight Time" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "Namibia Standard Time" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "Namibia Daylight Time" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "Tonga Standard Time" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "Tonga Daylight Time" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "Mountain Standard Time (Mexico)" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "Mountain Daylight Time (Mexico)" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "GMT Standard Time" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "GMT Daylight Time" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "Central Asia Standard Time" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "Central Asia Daylight Time" @@ -9756,35 +9757,35 @@ msgid "Arabic Daylight Time" msgstr "Arabic Daylight Time" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "Magadan Standard Time" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "Magadan Daylight Time" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "Newfoundland Standard Time" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "Newfoundland Daylight Time" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "West Pacific Standard Time" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "West Pacific Daylight Time" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "Pacific Standard Time" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "Pacific Daylight Time" @@ -9796,67 +9797,67 @@ msgid "Azerbaijan Daylight Time" msgstr "Azerbaijan Daylight Time" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "Samoa Standard Time" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "Samoa Daylight Time" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "Kaliningrad Standard Time" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "Kaliningrad Daylight Time" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "Pacific Standard Time (Mexico)" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "Pacific Daylight Time (Mexico)" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "Middle East Standard Time" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "Middle East Daylight Time" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "Tokyo Standard Time" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "Tokyo Daylight Time" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "Line Islands Standard Time" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "Line Islands Daylight Time" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "Jordan Standard Time" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "Jordan Daylight Time" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "Central Standard Time" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "Central Daylight Time" @@ -9868,11 +9869,11 @@ msgid "Azores Daylight Time" msgstr "Azores Daylight Time" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "North Asia East Standard Time" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "North Asia East Daylight Time" @@ -9884,95 +9885,103 @@ msgid "Argentina Daylight Time" msgstr "Argentina Daylight Time" -#: tzres.rc:150 +#: tzres.rc:142 +msgid "Marquesas Standard Time" +msgstr "Marquesas Standard Time" + +#: tzres.rc:143 +msgid "Marquesas Daylight Time" +msgstr "Marquesas Daylight Time" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "Myanmar Standard Time" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "Myanmar Daylight Time" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "Coordinated Universal Time" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "India Standard Time" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "India Daylight Time" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "GTB Standard Time" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "GTB Daylight Time" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "Turkey Standard Time" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "Turkey Daylight Time" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "Fiji Standard Time" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "Fiji Daylight Time" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "Canada Central Standard Time" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "Canada Central Daylight Time" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "Taipei Standard Time" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "Taipei Daylight Time" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "W. Europe Standard Time" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "W. Europe Daylight Time" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "Montevideo Standard Time" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "Montevideo Daylight Time" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "Pakistan Standard Time" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "Pakistan Daylight Time" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "Caucasus Standard Time" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "Caucasus Daylight Time" @@ -9984,27 +9993,27 @@ msgid "AUS Eastern Daylight Time" msgstr "AUS Eastern Daylight Time" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "N. Central Asia Standard Time" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "N. Central Asia Daylight Time" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "Eastern Standard Time" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "Eastern Daylight Time" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "Central Standard Time (Mexico)" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "Central Daylight Time (Mexico)" @@ -10016,67 +10025,67 @@ msgid "Atlantic Daylight Time" msgstr "Atlantic Daylight Time" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "Mountain Standard Time" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "Mountain Daylight Time" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "US Eastern Standard Time" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "US Eastern Daylight Time" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "Tasmania Standard Time" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "Tasmania Daylight Time" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "Central America Standard Time" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "Central America Daylight Time" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "US Mountain Standard Time" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "US Mountain Daylight Time" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "South Africa Standard Time" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "South Africa Daylight Time" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "Cen. Australia Standard Time" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "Cen. Australia Daylight Time" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "Sri Lanka Standard Time" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "Sri Lanka Daylight Time" @@ -10088,19 +10097,19 @@ msgid "Afghanistan Daylight Time" msgstr "Afghanistan Daylight Time" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "Yakutsk Standard Time" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "Yakutsk Daylight Time" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "SA Eastern Standard Time" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "SA Eastern Daylight Time" @@ -10120,35 +10129,35 @@ msgid "Arabian Daylight Time" msgstr "Arabian Daylight Time" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "Russian Standard Time" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "Russian Daylight Time" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "Romance Standard Time" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "Romance Daylight Time" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "Ekaterinburg Standard Time" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "Ekaterinburg Daylight Time" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "Syria Standard Time" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "Syria Daylight Time" @@ -10160,27 +10169,27 @@ msgid "AUS Central Daylight Time" msgstr "AUS Central Daylight Time" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "Greenwich Standard Time" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "Greenwich Daylight Time" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "Ulaanbaatar Standard Time" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "Ulaanbaatar Daylight Time" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "Israel Standard Time" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "Israel Daylight Time" @@ -10192,19 +10201,19 @@ msgid "Bangladesh Daylight Time" msgstr "Bangladesh Daylight Time" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "SA Pacific Standard Time" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "SA Pacific Daylight Time" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "West Asia Standard Time" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "West Asia Daylight Time" @@ -10216,27 +10225,27 @@ msgid "Alaskan Daylight Time" msgstr "Alaskan Daylight Time" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "Paraguay Standard Time" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "Paraguay Daylight Time" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "Dateline Standard Time" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "Dateline Daylight Time" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "Libya Standard Time" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "Libya Daylight Time" @@ -10248,35 +10257,43 @@ msgid "Bahia Daylight Time" msgstr "Bahia Daylight Time" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "Venezuela Standard Time" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "Venezuela Daylight Time" -#: tzres.rc:118 +#: tzres.rc:60 +msgid "Bougainville Standard Time" +msgstr "Bougainville Standard Time" + +#: tzres.rc:61 +msgid "Bougainville Daylight Time" +msgstr "Bougainville Daylight Time" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "Hawaiian Standard Time" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "Hawaiian Daylight Time" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "SE Asia Standard Time" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "SE Asia Daylight Time" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "New Zealand Standard Time" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "New Zealand Daylight Time" @@ -10288,11 +10305,11 @@ msgid "Aleutian Daylight Time" msgstr "Aleutian Daylight Time" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "Central Brazilian Standard Time" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "Central Brazilian Daylight Time" @@ -10304,131 +10321,139 @@ msgid "Belarus Daylight Time" msgstr "Belarus Daylight Time" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "SA Western Standard Time" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "SA Western Daylight Time" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "Greenland Standard Time" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "Greenland Daylight Time" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "Easter Island Standard Time" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "Easter Island Daylight Time" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "Egypt Standard Time" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "Egypt Daylight Time" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "Mauritius Standard Time" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "Mauritius Daylight Time" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "Vladivostok Standard Time" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "Vladivostok Daylight Time" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "Singapore Standard Time" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "Singapore Daylight Time" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "Korea Standard Time" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "Korea Daylight Time" -#: tzres.rc:88 +#: tzres.rc:86 +msgid "Chatham Islands Standard Time" +msgstr "Chatham Islands Standard Time" + +#: tzres.rc:87 +msgid "Chatham Islands Daylight Time" +msgstr "Chatham Islands Daylight Time" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "E. Africa Standard Time" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "E. Africa Daylight Time" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "FLE Standard Time" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "FLE Daylight Time" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "E. South America Standard Time" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "E. South America Daylight Time" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "Central Pacific Standard Time" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "Central Pacific Daylight Time" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "W. Central Africa Standard Time" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "W. Central Africa Daylight Time" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "Pacific SA Standard Time" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "Pacific SA Daylight Time" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "E. Australia Standard Time" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "E. Australia Daylight Time" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "W. Australia Standard Time" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "W. Australia Daylight Time" @@ -11592,7 +11617,7 @@ msgid "Digi&tal" msgstr "Digi&tal" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Font..." @@ -15386,7 +15411,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "The Wine configuration in %s is being updated, please wait..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15398,23 +15423,23 @@ "Free Software Foundation; either version 2.1 of the License, or (at your " "option) any later version." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Windows registration information" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Owner:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organi&zation:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Application settings" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15424,55 +15449,55 @@ "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "Add appli&cation..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Remove application" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Windows Version:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Window settings" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Automatically capture the &mouse in full-screen windows" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Allow the window manager to &decorate the windows" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Allow the &window manager to control the windows" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Emulate a virtual desktop" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Desktop &size:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Screen resolution" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "This is a sample text using 10 point Tahoma" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL overrides" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15482,55 +15507,55 @@ "(provided by Wine) or native (taken from Windows or provided by the " "application)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&New override for library:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "A&dd" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Existing &overrides:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Edit..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Edit Override" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Load order" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Builtin (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Native (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "Buil&tin then Native" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Nati&ve then Builtin" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Select Drive Letter" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Drive configuration" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." @@ -15538,207 +15563,207 @@ "Failed to connect to the mount manager; the drive configuration cannot be " "edited." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "A&dd..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "Aut&odetect" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Path:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "Show Advan&ced" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "De&vice:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "Bro&wse..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Label:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "S&erial:" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "&Show dot files" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Driver diagnostics" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Defaults" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Output device:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Voice output device:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Input device:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Voice input device:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Test Sound" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Speaker configuration" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Speakers:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Appearance" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Theme:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Install theme..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "It&em:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "C&olor:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "MIME types" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "Manage file &associations" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Folders" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "&Link to:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Libraries" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Drives" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Select the Unix target directory, please." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "Hide Advan&ced" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(No Theme)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Graphics" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Desktop Integration" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Audio" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "About" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Wine configuration" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Theme files (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Select a theme file" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Folder" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Links to" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Wine configuration for %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Selected driver: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(None)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Audio test failed!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(System default)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "5.1 Surround" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "Quadraphonic" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Stereo" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Mono" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15746,67 +15771,67 @@ "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Warning: system library" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "native" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "builtin" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "native, builtin" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "builtin, native" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "disabled" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Default Settings" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Wine Programs (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Use global settings" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Select an executable file" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Autodetect" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Local hard disk" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Network share" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Floppy disk" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -15816,11 +15841,11 @@ "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "System drive" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15832,16 +15857,16 @@ "Most Windows applications expect drive C to exist, and will die messily if " "it doesn't. If you proceed, remember to recreate it!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Letter" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Target folder" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -15851,127 +15876,127 @@ "\n" "Remember to click 'Add' in the Drives tab to create one!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Controls Background" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Controls Text" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Menu Background" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Menu Text" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Scrollbar" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Selection Background" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Selection Text" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Tooltip Background" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Tooltip Text" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Window Background" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Window Text" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Active Title Bar" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Active Title Text" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Inactive Title Bar" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Inactive Title Text" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Message Box Text" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Application Workspace" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Window Frame" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Active Border" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Inactive Border" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Controls Shadow" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Gray Text" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Controls Highlight" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Controls Dark Shadow" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Controls Light" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Controls Alternate Background" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Hot Tracked Item" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Active Title Bar Gradient" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Inactive Title Bar Gradient" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Menu Highlight" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Menu Bar" diff -Nru wine-development-5.5/po/eo.po wine-development-5.6/po/eo.po --- wine-development-5.5/po/eo.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/eo.po 2020-04-10 18:54:32.000000000 +0000 @@ -52,8 +52,8 @@ msgid "&Modify..." msgstr "&Modifi..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Forigi" @@ -72,7 +72,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -148,8 +148,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -183,7 +183,7 @@ msgstr "" "Lasas, ke vi instalu novan programon aŭ forigi jaman de via komputilon." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Programoj" @@ -581,7 +581,7 @@ msgid "Font St&yle:" msgstr "Tipara St&ilo:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Dimensio:" @@ -597,7 +597,7 @@ msgid "&Underline" msgstr "S&ubstreko" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Koloro:" @@ -771,7 +771,7 @@ msgid "C&ollate" msgstr "Laŭ&kajere" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "&Dimensio:" @@ -2237,7 +2237,7 @@ msgid "&File name:" msgstr "&Dosiernomo:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "&Foliumi..." @@ -2948,7 +2948,7 @@ msgid "Player" msgstr "" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "" @@ -3494,7 +3494,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Malaktivigi" @@ -3761,6 +3761,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7334,7 +7335,7 @@ msgid "Hyperlink Information" msgstr "Ligilaj informoj" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Tipo:" @@ -8788,7 +8789,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "" @@ -9282,7 +9283,7 @@ msgid "&Open:" msgstr "&Malfermi:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Foliumi..." @@ -9383,7 +9384,7 @@ msgid "Date deleted" msgstr "Dato forigita" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Labortablo" @@ -9703,7 +9704,7 @@ msgid "Trash" msgstr "Rubujo" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Eraro" @@ -9736,137 +9737,137 @@ msgid "Select Source" msgstr "Elektu ĉion" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "Dato kaj tempo" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "Dato kaj tempo" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "Centra Eŭropo" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "Centra Eŭropo" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "Centra Eŭropo" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "Centra Eŭropo" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "&Ordinara zono" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9878,35 +9879,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9918,67 +9919,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -9990,11 +9991,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10006,97 +10007,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "&Ordinara zono" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "Dato kaj tempo" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "&Ordinara zono" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10108,27 +10121,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10140,67 +10153,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10212,19 +10225,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10244,35 +10257,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10284,27 +10297,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10316,19 +10329,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10340,29 +10353,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "Dato kaj tempo" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10374,35 +10387,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "Dato kaj tempo" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "Dato kaj tempo" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10418,11 +10443,11 @@ msgid "Aleutian Daylight Time" msgstr "Dato kaj tempo" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10434,137 +10459,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "Dato kaj tempo" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "Dato kaj tempo" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "Dato kaj tempo" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "Dato kaj tempo" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "&Ordinara zono" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11620,7 +11657,7 @@ msgid "Digi&tal" msgstr "&Cifereca" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Tiparo..." @@ -15157,7 +15194,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "La Wine-agordo en %s aktualiĝas, bonvolu atendi..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15165,23 +15202,23 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Informoj pri vindoza registriĝo" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Estro:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organi&zaĵo:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Programa agordo" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15191,411 +15228,411 @@ "langeto estas kunligata al la langetoj Bibliotekoj kaj Grafikaĵoj por " "permesi, ke vi ŝanĝu agordaĵojn tutsisteme aŭ ĉiuprograme." -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy #| msgid "&Add application..." msgid "Add appli&cation..." msgstr "&Aldoni programon..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Forigi programon" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Vindoza eldono:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Fenestra agordo" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Aŭtomate kapti la &muson en tutekranaj fenestroj" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Permesi la fenestroadministrol &ornami la fenestrojn" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Permesi la &fenestroadministrilon regi la fenestrojn" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Simuli virtualan labortablon" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Labortabla &grando:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Ekrana distingivo" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Jen ekzempla teksto kun 10-punkta Tahoma" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL superregoj" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Redakti..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Ena (Wino)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Indiĝena (Vindozo)" -#: winecfg.rc:211 +#: winecfg.rc:210 #, fuzzy #| msgid "Bui<in then Native" msgid "Buil&tin then Native" msgstr "&Post ena indiĝena" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "&Antaŭ ena indiĝena" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Elekti aparatajn literojn" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy #| msgid "Wine configuration" msgid "Drive configuration" msgstr "Wine-agordo" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 #, fuzzy #| msgid "&Add..." msgid "A&dd..." msgstr "&Aldoni..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Vojo:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 #, fuzzy #| msgid "Show &Advanced" msgid "Show Advan&ced" msgstr "Montri &Altnivele" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "&Aparato:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "&Foliumi..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Etikedo:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "&Seria:" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy #| msgid "Show &dot files" msgid "&Show dot files" msgstr "Montri &punktajn dosierojn" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Defaŭltojn" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "&Eliga dosiernomo:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Ena aparato:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Provo sona" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy #| msgid "Wine configuration" msgid "Speaker configuration" msgstr "Wine-agordo" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Aspekto" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Etoso:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Instali etoson..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "&Koloro:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Dosierujoj" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Bibliotekoj" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Aparatoj" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Bonvolu elekti la celan dosierujon." -#: winecfg.rc:37 +#: winecfg.rc:36 #, fuzzy #| msgid "Advanced" msgid "Hide Advan&ced" msgstr "Altnivela" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Neniu etoso)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Grafikaĵoj" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Labortabla integriĝo" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Sono" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Pri" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Wine-agordo" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "&Elekti etosan dosieron" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Dosierujo" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Ligiĝas al" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Wine-agordo por %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Elektita pelilo: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Neniu)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Sona provo malsukcesis!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Sistema defaŭlta)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 #, fuzzy #| msgid "Graphics" msgid "Quadraphonic" msgstr "Grafikaĵoj" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" msgstr "" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Defaŭltaj Agordoj" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Uzi unuecan agordon" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15603,145 +15640,145 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Litero" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "Create New Folder" msgid "Target folder" msgstr "Krei Novan Dosierujon" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Fenestraĵa fono" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Fenestraĵa teksto" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Rulumilo" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Elektita teksto" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Fenestra teksto" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Aktiva titolzono" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Programa laborspaco" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Fenestra kadro" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Regas ombrojn" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Menuzono" diff -Nru wine-development-5.5/po/es.po wine-development-5.6/po/es.po --- wine-development-5.5/po/es.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/es.po 2020-04-10 18:54:32.000000000 +0000 @@ -47,8 +47,8 @@ msgid "&Modify..." msgstr "&Modificar..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "E&liminar" @@ -67,7 +67,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -151,8 +151,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -202,7 +202,7 @@ "Le permite instalar software nuevo, o desinstalar software existente de su " "equipo." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Aplicaciones" @@ -602,7 +602,7 @@ msgid "Font St&yle:" msgstr "Est&ilo:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "Ta&maño:" @@ -618,7 +618,7 @@ msgid "&Underline" msgstr "&Subrayado" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "C&olor:" @@ -792,7 +792,7 @@ msgid "C&ollate" msgstr "I&ntercalar" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Ta&maño:" @@ -2275,7 +2275,7 @@ msgid "&File name:" msgstr "Nombre de &fichero:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "Explo&rar..." @@ -3058,7 +3058,7 @@ msgid "Player" msgstr "Jugador" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Dispositivo" @@ -3617,7 +3617,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Deshabilitar" @@ -3892,6 +3892,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7520,7 +7521,7 @@ msgid "Hyperlink Information" msgstr "Información sobre el enlace" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Tipo:" @@ -9107,7 +9108,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "ppp" @@ -9606,7 +9607,7 @@ msgid "&Open:" msgstr "&Abrir:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Examinar..." @@ -9709,7 +9710,7 @@ msgid "Date deleted" msgstr "Fecha de borrado" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Escritorio" @@ -10057,7 +10058,7 @@ msgid "Trash" msgstr "Papelera de reciclaje" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Error" @@ -10090,137 +10091,137 @@ msgid "Select Source" msgstr "Nueva carpeta" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "Fecha y hora" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "Fecha y hora" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "Central Europeo" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "Central Europeo" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "Central Europeo" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "Central Europeo" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "Barra &estándar" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10232,35 +10233,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10272,67 +10273,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10344,11 +10345,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10360,97 +10361,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "Barra &estándar" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "Fecha y hora" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "Barra &estándar" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10462,27 +10475,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10494,67 +10507,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10566,19 +10579,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10598,35 +10611,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10638,27 +10651,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10670,19 +10683,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10694,29 +10707,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "Fecha y hora" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10728,35 +10741,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "Fecha y hora" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "Fecha y hora" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10772,11 +10797,11 @@ msgid "Aleutian Daylight Time" msgstr "Fecha y hora" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10788,137 +10813,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "Fecha y hora" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "Fecha y hora" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "Fecha y hora" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "Fecha y hora" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "Barra &estándar" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -12165,7 +12202,7 @@ msgid "Digi&tal" msgstr "&Digital" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Fuente..." @@ -16110,7 +16147,7 @@ msgstr "" "La configuración de Wine en %s está siendo actualizada, por favor espere..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -16122,23 +16159,23 @@ "Software Foundation; bajo la versión 2.1 de la licencia, o (a tu discreción) " "cualquier versión posterior." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Información de registro de Windows" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Propietario:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "&Organización:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Configuración de las aplicaciones" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -16148,57 +16185,57 @@ "pestaña está enlazada a las pestañas de Librerías y Gráficos para permitirte " "cambiar la configuración global o la configuración por aplicación." -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy #| msgid "&Add application..." msgid "Add appli&cation..." msgstr "&Añadir aplicación..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Eliminar aplicación" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Versión a imitar:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Configuración de las ventanas" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Capturar el &ratón automáticamente en pantalla completa" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Permitir que el gestor de ventanas &decore las ventanas" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Permitir que el gestor de ventanas &controle las ventanas" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Emular un escritorio virtual" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Di&mensiones:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Resolución" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Esto es un texto de ejemplo usando Tahoma de 10 puntos" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "Sustitución de DLLs" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -16208,59 +16245,59 @@ "interna (proporcionada por Wine) o bien nativa (obtenida de Windows o " "proporcionada por la aplicación)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Nueva sustitución de librería:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "&Sustituciones existentes:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Editar..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Modificar sustitución" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Orden de carga" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Interna (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Nativa (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 #, fuzzy #| msgid "Bui<in then Native" msgid "Buil&tin then Native" msgstr "I&nterna y luego nativa" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Nati&va y luego interna" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Seleccionar letra de la unidad" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy #| msgid "Wine configuration" msgid "Drive configuration" msgstr "Configuración de Wine" -#: winecfg.rc:233 +#: winecfg.rc:232 #, fuzzy #| msgid "" #| "Failed to connect to the mount manager, the drive configuration cannot be " @@ -16272,221 +16309,221 @@ "Falló en la conexión al gestor de montaje, la configuración de unidades no " "se ha podido editar." -#: winecfg.rc:236 +#: winecfg.rc:235 #, fuzzy #| msgid "&Add..." msgid "A&dd..." msgstr "&Añadir..." -#: winecfg.rc:238 +#: winecfg.rc:237 #, fuzzy #| msgid "Autodetect" msgid "Aut&odetect" msgstr "Autodetectar" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Ruta:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 #, fuzzy #| msgid "Show &Advanced" msgid "Show Advan&ced" msgstr "Mostrar &avanzado" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "Dispositi&vo:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "E&xaminar..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "Eti&queta:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "&Nº serie:" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy #| msgid "Show &dot files" msgid "&Show dot files" msgstr "Mostrar archivos &punto" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Diagnósticos del controlador" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Configuraciones por defecto" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Dispositivo de salida:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Dispositivo de salida de voz:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Dispositivo de entrada:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Dispositivo de entrada de voz:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "Probar &sonido" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy #| msgid "Wine configuration" msgid "Speaker configuration" msgstr "Configuración de Wine" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Apariencia" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Tema:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Instalar tema..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "&Elemento:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "C&olor:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Carpeta" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "E&nlace a:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Librerías" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Unidades" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Por favor, seleccione el directorio Unix de destino." -#: winecfg.rc:37 +#: winecfg.rc:36 #, fuzzy #| msgid "Hide &Advanced" msgid "Hide Advan&ced" msgstr "Ocultar &avanzado" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Ningún tema)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Gráficos" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Integración de escritorio" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Audio" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Acerca de" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Configuración de Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Ficheros de tema (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Seleccione un fichero de tema" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Carpeta del sistema" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Enlaza a" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Configuración de Wine para %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Controlador seleccionado: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Ninguno)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "¡La prueba de sonido ha fallado!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Predeterminado del sistema)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 #, fuzzy #| msgid "graphic" msgid "Quadraphonic" msgstr "gráfico" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -16494,67 +16531,67 @@ "No se recomienda cambiar el orden de carga de esta librería.\n" "¿Está seguro que desea hacer esto?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Advertencia: librería del sistema" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "nativa" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "interna" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "nativa, interna" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "interna, nativa" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "deshabilitada" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Configuración por defecto" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Programas de Wine (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Usar la configuración global" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Seleccione un fichero ejecutable" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Autodetectar" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Disco duro local" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Compartidos de red" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Disquete" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -16565,11 +16602,11 @@ "Cada unidad debe tener una letra, de la A a la Z, el número máximo de " "unidades es 26." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Unidad del sistema" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy #| msgid "" #| "Are you sure you want to delete drive C?\n" @@ -16587,18 +16624,18 @@ "La mayoría de las aplicaciones Windows esperan que la unidad C exista, y " "fallarán si esta no existe. ¡Si lo hace recuerde volver a crear la unidad!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Unidad" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "New Folder" msgid "Target folder" msgstr "Nueva carpeta" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16608,127 +16645,127 @@ "\n" "¡Recuerde pulsar 'Añadir' en la pestaña Unidades para crear una!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Fondo del control" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Texto del control" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Fondo del menú" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Texto del menú" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Barra de desplazamiento" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Fondo de la selección" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Texto de la selección" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Fondo del consejo" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Texto del consejo" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Fondo de la ventana" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Texto de la ventana" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Barra de título activa" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Texto de barra de título activa" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Barra de título inactiva" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Texto de barra de título inactiva" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Texto de cuadro de diálogo" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Entorno de trabajo de la aplicación" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Recuadro de la ventana" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Borde activo" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Borde inactivo" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Sombra del control" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Texto en gris" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Resaltado del control" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Sombra oscura del control" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Parte iluminada del control" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Fondo alternativo del control" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Elemento resaltado" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Gradiente barra título activa" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Gradiente barra título inactiva" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Resaltado del menú" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Barra de menú" diff -Nru wine-development-5.5/po/fa.po wine-development-5.6/po/fa.po --- wine-development-5.5/po/fa.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/fa.po 2020-04-10 18:54:32.000000000 +0000 @@ -43,8 +43,8 @@ msgid "&Modify..." msgstr "" -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "" @@ -64,7 +64,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -143,8 +143,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -175,7 +175,7 @@ "computer." msgstr "" -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "" @@ -585,7 +585,7 @@ msgid "Font St&yle:" msgstr "" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "" @@ -601,7 +601,7 @@ msgid "&Underline" msgstr "" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "" @@ -779,7 +779,7 @@ msgid "C&ollate" msgstr "" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "" @@ -2262,7 +2262,7 @@ msgid "&File name:" msgstr "&پرونده" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "" @@ -2986,7 +2986,7 @@ msgid "Player" msgstr "" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "" @@ -3541,7 +3541,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "" @@ -3796,6 +3796,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "" @@ -7316,7 +7317,7 @@ msgid "Hyperlink Information" msgstr "اطلاعات" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "" @@ -8689,7 +8690,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "" @@ -9199,7 +9200,7 @@ msgid "&Open:" msgstr "&باز‌کردن...\tCtrl+O" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "" @@ -9294,7 +9295,7 @@ msgid "Date deleted" msgstr "&حذف\tDel" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "" @@ -9625,7 +9626,7 @@ msgid "Trash" msgstr "" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "" @@ -9657,125 +9658,125 @@ msgid "Select Source" msgstr "انتخاب &همه\tCtrl+A" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy msgid "Haiti Standard Time" msgstr "&حذف\tDel" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy msgid "Haiti Daylight Time" msgstr "&حذف\tDel" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9787,35 +9788,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9827,67 +9828,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -9899,11 +9900,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -9915,95 +9916,105 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +msgid "Marquesas Standard Time" +msgstr "&حذف\tDel" + +#: tzres.rc:143 +#, fuzzy +msgid "Marquesas Daylight Time" +msgstr "&حذف\tDel" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10015,27 +10026,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10047,67 +10058,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10119,19 +10130,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10151,35 +10162,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10191,27 +10202,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10223,19 +10234,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10247,28 +10258,28 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy msgid "Dateline Standard Time" msgstr "&حذف\tDel" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10280,35 +10291,45 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +msgid "Bougainville Standard Time" +msgstr "&حذف\tDel" + +#: tzres.rc:61 +#, fuzzy +msgid "Bougainville Daylight Time" +msgstr "&حذف\tDel" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10322,11 +10343,11 @@ msgid "Aleutian Daylight Time" msgstr "&حذف\tDel" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10338,133 +10359,143 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy msgid "Easter Island Standard Time" msgstr "&حذف\tDel" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy msgid "Easter Island Daylight Time" msgstr "&حذف\tDel" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +msgid "Chatham Islands Standard Time" +msgstr "&حذف\tDel" + +#: tzres.rc:87 +#, fuzzy +msgid "Chatham Islands Daylight Time" +msgstr "&حذف\tDel" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11510,7 +11541,7 @@ msgid "Digi&tal" msgstr "" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&قلم‌ها..." @@ -15004,7 +15035,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "" -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15012,431 +15043,431 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 #, fuzzy msgid "Windows registration information" msgstr "اطلاعات" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "" -#: winecfg.rc:146 +#: winecfg.rc:145 #, fuzzy msgid "Organi&zation:" msgstr "اطلاعات" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." msgstr "" -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "" -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 #, fuzzy msgid "DLL overrides" msgstr "&ویرایش" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 #, fuzzy msgid "&Edit..." msgstr "&ویرایش" -#: winecfg.rc:205 +#: winecfg.rc:204 #, fuzzy msgid "Edit Override" msgstr "&ویرایش" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "" -#: winecfg.rc:209 +#: winecfg.rc:208 #, fuzzy msgid "&Builtin (Wine)" msgstr "&درباره نت‌پد" -#: winecfg.rc:210 +#: winecfg.rc:209 #, fuzzy msgid "&Native (Windows)" msgstr "ذخیره &به نام..." -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "" -#: winecfg.rc:220 +#: winecfg.rc:219 #, fuzzy msgid "Select Drive Letter" msgstr "انتخاب &همه\tCtrl+A" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy msgid "Drive configuration" msgstr "اطلاعات" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "" -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "" -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 #, fuzzy msgid "Defaults" msgstr "صفحه &p" -#: winecfg.rc:268 +#: winecfg.rc:267 #, fuzzy msgid "Output device:" msgstr "&پرونده" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy msgid "Speaker configuration" msgstr "اطلاعات" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "" -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "" -#: winecfg.rc:43 +#: winecfg.rc:42 #, fuzzy msgid "About" msgstr "&درباره نت‌پد" -#: winecfg.rc:44 +#: winecfg.rc:43 #, fuzzy msgid "Wine configuration" msgstr "اطلاعات" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "" -#: winecfg.rc:47 +#: winecfg.rc:46 #, fuzzy msgid "Select a theme file" msgstr "انتخاب &همه\tCtrl+A" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" msgstr "" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15444,150 +15475,150 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 #, fuzzy msgid "Controls Background" msgstr "ذخیره &به نام..." -#: winecfg.rc:100 +#: winecfg.rc:99 #, fuzzy msgid "Controls Text" msgstr "&محتویات" -#: winecfg.rc:102 +#: winecfg.rc:101 #, fuzzy msgid "Menu Background" msgstr "ذخیره &به نام..." -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "" -#: winecfg.rc:105 +#: winecfg.rc:104 #, fuzzy msgid "Selection Background" msgstr "ذخیره &به نام..." -#: winecfg.rc:106 +#: winecfg.rc:105 #, fuzzy msgid "Selection Text" msgstr "انتخاب &همه\tCtrl+A" -#: winecfg.rc:107 +#: winecfg.rc:106 #, fuzzy msgid "Tooltip Background" msgstr "ذخیره &به نام..." -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 #, fuzzy msgid "Window Background" msgstr "ذخیره &به نام..." -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "" diff -Nru wine-development-5.5/po/fi.po wine-development-5.6/po/fi.po --- wine-development-5.5/po/fi.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/fi.po 2020-04-10 18:54:32.000000000 +0000 @@ -46,8 +46,8 @@ msgid "&Modify..." msgstr "&Muokkaa..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Poista" @@ -66,7 +66,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -148,8 +148,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -186,7 +186,7 @@ "computer." msgstr "Voit asentaa uusia ohjelmia tai poistaa ohjelmia tietokoneeltasi." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Sovellukset" @@ -580,7 +580,7 @@ msgid "Font St&yle:" msgstr "Fontin t&yyli:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Koko:" @@ -596,7 +596,7 @@ msgid "&Underline" msgstr "A&lleviivaus" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Väri:" @@ -768,7 +768,7 @@ msgid "C&ollate" msgstr "&Kokoa" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "&Koko:" @@ -2244,7 +2244,7 @@ msgid "&File name:" msgstr "&Tiedostonimi:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "&Selaa..." @@ -3007,7 +3007,7 @@ msgid "Player" msgstr "Soitin" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Laite" @@ -3554,7 +3554,7 @@ msgid "Joysticks" msgstr "Joystickit" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Poista käytöstä" @@ -3810,6 +3810,7 @@ msgstr "Winen ydin-DLL" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7270,7 +7271,7 @@ msgid "Hyperlink Information" msgstr "Tietoja hyperlinkistä" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Tyyppi:" @@ -8427,7 +8428,7 @@ msgid "" "Provider is no longer available. Ensure that the provider is installed " "properly." -msgstr "" +msgstr "Tarjoajaa ei ole enää saatavilla. Varmista, että se on asennettu." #: version.rc:36 msgid "Data Link Properties" @@ -8660,7 +8661,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9154,7 +9155,7 @@ msgid "&Open:" msgstr "&Avaa:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Selaa..." @@ -9243,7 +9244,7 @@ msgid "Date deleted" msgstr "Poistoaika" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Työpöytä" @@ -9587,7 +9588,7 @@ msgid "Trash" msgstr "Roskakori" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Virhe" @@ -9618,123 +9619,123 @@ msgid "Select Source" msgstr "Valitse lähde" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "Kiinan normaaliaika" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "Kiinan kesäaika" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "Pohjois-Aasian normaaliaika" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "Pohjois-Aasian kesäaika" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "Georgian normaaliaika" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "Georgian kesäaika" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "Nepalin normaaliaika" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "Nepalin kesäaika" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "Kap Verden normaaliaika" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "Kap Verden kesäaika" -#: tzres.rc:116 +#: tzres.rc:120 msgid "Haiti Standard Time" msgstr "Haitin normaaliaika" -#: tzres.rc:117 +#: tzres.rc:121 msgid "Haiti Daylight Time" msgstr "Haitin kesäaika" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "Keski-Euroopan normaaliaika" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "Keski-Euroopan kesäaika" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "Marokon normaaliaika" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "Marokon kesäaika" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "Keski-Euroopan normaaliaika" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "Keski-Euroopan kesäaika" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "Iranin normaaliaika" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "Iranin kesäaika" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "Namibian normaaliaika" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "Namibian kesäaika" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "Tongan normaaliaika" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "Tongan kesäaika" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "Kalliovuorten normaaliaika (Meksiko)" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "Kalliovuorten kesäaika (Meksiko)" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "GMT-normaaliaika" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "GMT-kesäaika" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "Keski-Aasian normaaliaika" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "Keski-Aasian kesäaika" @@ -9746,35 +9747,35 @@ msgid "Arabic Daylight Time" msgstr "Arabian kesäaika" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "Magadanin normaaliaika" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "Magadanin kesäaika" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "Newfoundlandin normaaliaika" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "Newfoundlandin kesäaika" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "Länsi-Tyynenmeren normaaliaika" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "Länsi-Tyynenmeren kesäaika" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "Tyynenmeren normaaliaika" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "Tyynenmeren kesäaika" @@ -9786,67 +9787,67 @@ msgid "Azerbaijan Daylight Time" msgstr "Azerbaidžanin kesäaika" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "Samoan normaaliaika" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "Samoan kesäaika" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "Kaliningradin normaaliaika" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "Kaliningradin kesäaika" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "Tyynenmeren normaaliaika (Meksiko)" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "Tyynenmeren kesäaika (Meksiko)" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "Lähi-idän normaaliaika" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "Lähi-idän kesäaika" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "Tokion normaaliaika" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "Tokion kesäaika" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "Linesaarten normaaliaika" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "Linesaarten kesäaika" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "Jordanian normaaliaika" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "Jordanian kesäaika" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "Keskinen normaaliaika" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "Keskinen kesäaika" @@ -9858,11 +9859,11 @@ msgid "Azores Daylight Time" msgstr "Azorien kesäaika" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "Itäisen Pohjois-Aasian normaaliaika" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "Itäisen Pohjois-Aasian kesäaika" @@ -9874,95 +9875,103 @@ msgid "Argentina Daylight Time" msgstr "Argentiinan kesäaika" -#: tzres.rc:150 +#: tzres.rc:142 +msgid "Marquesas Standard Time" +msgstr "Marquesassaarten normaaliaika" + +#: tzres.rc:143 +msgid "Marquesas Daylight Time" +msgstr "Marquesassaarten kesäaika" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "Myanmarin normaaliaika" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "Myanmarin kesäaika" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "UTC-aika" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "Intian normaaliaika" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "Intian kesäaika" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "GT-normaaliaika" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "GT-kesäaika" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "Turkin normaaliaika" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "Turkin kesäaika" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "Fidžin normaaliaika" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "Fidžin kesäaika" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "Kanadan keskinen normaaliaika" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "Kanadan keskinen kesäaika" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "Taipein normaaliaika" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "Taipein kesäaika" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "Länsi-Euroopan normaaliaika" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "Länsi-Euroopan kesäaika" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "Montevideon normaaliaika" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "Montevideon kesäaika" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "Pakistanin normaaliaika" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "Pakistanin kesäaika" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "Kaukasuksen normaaliaika" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "Kaukasuksen kesäaika" @@ -9974,27 +9983,27 @@ msgid "AUS Eastern Daylight Time" msgstr "Australian itäinen kesäaika" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "Pohjoisen Keski-Aasian normaaliaika" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "Pohjoisen Keski-Aasian kesäaika" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "Itäinen normaaliaika" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "Itäinen kesäaika" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "Keskinen normaaliaika (Meksiko)" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "Keskinen kesäaika (Meksiko)" @@ -10006,67 +10015,67 @@ msgid "Atlantic Daylight Time" msgstr "Atlantin kesäaika" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "Kalliovuorten normaaliaika" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "Kalliovuorten kesäaika" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "Itäinen normaaliaika (USA)" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "Itäinen kesäaika (USA)" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "Tasmanian normaaliaika" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "Tasmanian kesäaika" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "Keski-Amerikan normaaliaika" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "Keski-Amerikan kesäaika" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "Kalliovuorten normaaliaika (USA)" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "Kalliovuorten kesäaika (USA)" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "Etelä-Afrikan normaaliaika" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "Etelä-Afrikan kesäaika" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "Keski-Australian normaaliaika" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "Keski-Australian kesäaika" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "Sri Lankan normaaliaika" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "Sri Lankan kesäaika" @@ -10078,19 +10087,19 @@ msgid "Afghanistan Daylight Time" msgstr "Afganistanin kesäaika" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "Jakutskin normaaliaika" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "Jakutskin kesäaika" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "Etelä-Amerikan itäinen normaaliaika" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "Etelä-Amerikan itäinen kesäaika" @@ -10110,35 +10119,35 @@ msgid "Arabian Daylight Time" msgstr "Arabian kesäaika" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "Venäjän normaaliaika" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "Venäjän kesäaika" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "Romaaninen normaaliaika" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "Romaaninen kesäaika" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "Jekaterinburgin normaaliaika" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "Jekaterinburgin kesäaika" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "Syyrian normaaliaika" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "Syyrian kesäaika" @@ -10150,27 +10159,27 @@ msgid "AUS Central Daylight Time" msgstr "Australian keskinen kesäaika" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "Greenwichin normaaliaika" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "Greenwichin kesäaika" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "Ulaanbaatarin normaaliaika" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "Ulaanbaatarin kesäaika" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "Israelin normaaliaika" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "Israelin kesäaika" @@ -10182,19 +10191,19 @@ msgid "Bangladesh Daylight Time" msgstr "Bangladeshin kesäaika" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "Etelä-Amerikan Tyynenmeren normaaliaika" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "Etelä-Amerikan Tyynenmeren kesäaika" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "Länsi-Aasian normaaliaika" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "Länsi-Aasian kesäaika" @@ -10206,27 +10215,27 @@ msgid "Alaskan Daylight Time" msgstr "Alaskan kesäaika" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "Paraguayn normaaliaika" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "Paraguayn kesäaika" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "Päivämäärärajan normaaliaika" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "Päivämäärärajan kesäaika" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "Libyan normaaliaika" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "Libyan kesäaika" @@ -10238,35 +10247,43 @@ msgid "Bahia Daylight Time" msgstr "Bahian kesäaika" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "Venezuelan normaaliaika" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "Venezuelan kesäaika" -#: tzres.rc:118 +#: tzres.rc:60 +msgid "Bougainville Standard Time" +msgstr "Bougainvillen normaaliaika" + +#: tzres.rc:61 +msgid "Bougainville Daylight Time" +msgstr "Bougainvillen kesäaika" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "Havaijin normaaliaika" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "Havaijin kesäaika" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "Kaakkois-Aasian normaaliaika" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "Kaakkois-Aasian kesäaika" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "Uuden-Seelannin normaaliaika" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "Uuden-Seelannin kesäaika" @@ -10278,11 +10295,11 @@ msgid "Aleutian Daylight Time" msgstr "Aleuttien kesäaika" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "Keski-Brasilian normaaliaika" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "Keski-Brasilian kesäaika" @@ -10294,131 +10311,139 @@ msgid "Belarus Daylight Time" msgstr "Valko-Venäjän kesäaika" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "Etelä-Amerikan läntinen normaaliaika" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "Etelä-Amerikan läntinen kesäaika" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "Grönlannin normaaliaika" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "Grönlannin kesäaika" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "Pääsiäissaarten normaaliaika" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "Pääsiäissaarten kesäaika" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "Egyptin normaaliaika" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "Egyptin kesäaika" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "Mauritiuksen normaaliaika" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "Mauritiuksen kesäaika" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "Vladivostokin normaaliaika" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "Vladivostokin kesäaika" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "Singaporen normaaliaika" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "Singaporen kesäaika" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "Korean normaaliaika" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "Korean kesäaika" -#: tzres.rc:88 +#: tzres.rc:86 +msgid "Chatham Islands Standard Time" +msgstr "Chathamsaarten normaaliaika" + +#: tzres.rc:87 +msgid "Chatham Islands Daylight Time" +msgstr "Chathamsaarten kesäaika" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "Itä-Afrikan normaaliaika" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "Itä-Afrikan kesäaika" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "Suomen normaaliaika" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "Suomen kesäaika" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "Itäisen Etelä-Amerikan normaaliaika" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "Itäisen Etelä-Amerikan kesäaika" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "Keski-Tyynenmeren normaaliaika" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "Keski-Tyynenmeren kesäaika" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "Läntisen Keski-Afrikan normaaliaika" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "Läntisen Keski-Afrikan kesäaika" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "Tyynenmeren Etelä-Amerikan normaaliaika" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "Tyynenmeren Etelä-Amerikan kesäaika" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "Itä-Australian normaaliaika" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "Itä-Australian kesäaika" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "Länsi-Australian normaaliaika" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "Länsi-Australian kesäaika" @@ -11568,7 +11593,7 @@ msgid "Digi&tal" msgstr "Di&gitaalinen" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Fontti..." @@ -15355,7 +15380,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Winen asetuksia kohteessa %s päivitetään, ole hyvä ja odota..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15366,23 +15391,23 @@ "Foundationin GNU Lesser General Public License (LGPL) määrää joko lisenssin " "versiossa 2.1 tai (halutessasi) missä tahansa uudemmassa versiossa." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Windowsin rekisteröintitiedot" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Omistaja:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Or&ganisaatio:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Sovellusten asetukset" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15392,55 +15417,55 @@ "välilehti toimii yhdessä Kirjastot- ja Grafiikka-välilehtien kanssa sallien " "järjestelmän laajuiset ja sovelluskohtaiset asetukset." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "&Lisää sovellus..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Poista sovellus" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Windowsin versio:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Ikkuna-asetukset" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Kaappaa hiiri kokoruututilassa automaattisesti" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Salli ikkunointiohjelman määrätä ikkunoiden &tyyli" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Salli ikkunointiohjelman &hallita ikkunoita" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Emuloi virtuaalista työpöytää" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Työpöydän &koko:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Näytön resoluutio" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Tämä on näyteteksti 10 pisteen Tahoma-fontilla" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL-tiedostojen ohitukset" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15450,261 +15475,261 @@ "sisäänrakennettua (Winen tarjoamaa) tai natiivia (Windows-asennuksesta " "otettua tai sovelluksen tarjoamaa) versiota." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Uusi ohitus kirjastolle:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "&Lisää" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "&Olemassaolevat ohitukset:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Muokkaa..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Muokkaa ohitusta" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "&Latausjärjestys" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Sisäinen (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Natiivi (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "S&isäinen, sitten natiivi" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Na&tiivi, sitten sisäinen" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Valitse aseman kirjain" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Asemien asetukset" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "Levyasemien hallintaan ei saatu yhteyttä. Asemia ei voi muokata." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "&Lisää..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "&Hae automaattisesti" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "P&olku:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "Näytä lisä&asetukset" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "La&ite:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "S&elaa..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Nimi:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "Sarjanumer&o:" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "N&äytä pistetiedostot" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Ajurin diagnostiikka" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Oletukset" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Ulostulolaite:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Äänen ulostulolaite:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Sisääntulolaite:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Äänen sisääntulolaite:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Testiääni" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Kaiutinasetukset" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Kaiuttimet:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Ulkonäkö" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Teema:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Asenna teema..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "Ko&hta:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "&Väri:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "MIME-tyypit" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "&Muokkaa tiedostosidoksia" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Kansiot" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "&Linkitä kohteeseen:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Kirjastot" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Asemat" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Valitse unix-kohdekansio." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "Piilota lisä&asetukset" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Ei teemaa)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Grafiikka" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Työpöytäintegraatio" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Ääni" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Tietoja" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Winen asetukset" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Teematiedostot (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Valitse teematiedosto" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Kansio" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Linkittää kohteeseen" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Winen asetukset %s:lle" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Valittu ajuri: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Tyhjä)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Äänitesti epäonnistui!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Järjestelmän oletus)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "5.1 Surround" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "Neliääninen" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Stereo" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Mono" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15712,67 +15737,67 @@ "Tämän kirjaston lataamisjärjestyksen muuttamista ei suositella.\n" "Haluatko silti jatkaa?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Varoitus: järjestelmäkirjasto" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "natiivi" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "sisäinen" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "natiivi, sisäinen" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "sisäinen, natiivi" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "ei käytössä" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Oletusasetukset" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Wine-ohjelmat (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Käytä globaaleja asetuksia" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Valitse suoritettava tiedosto" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Hae automaattisesti" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Paikallinen kovalevy" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Verkkojako" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Levyke" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -15782,11 +15807,11 @@ "\n" "Joka asemalla on oltava tunnus A:sta Z:aan, joten niitä voi olla enintään 26." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Järjestelmäasema" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15798,16 +15823,16 @@ "Monet Windows-ohjelmat olettavat, että C-asema on olemassa, ja saattavat " "kaatua oudosti, jos sitä ei ole. Jos jatkat, muista luoda uusi C-asema!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Kirjain" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Kohdekansio" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -15817,127 +15842,127 @@ "\n" "Muista painaa Asemat-välilehdellä 'Lisää' ja luoda se!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Kontrollien tausta" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Kontrollien teksti" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Valikon tausta" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Valikon teksti" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Vierityspalkki" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Valintojen tausta" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Valintojen teksti" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Työkaluvihjeen tausta" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Työkaluvihjeen teksti" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Ikkunan tausta" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Ikkunan teksti" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Aktiivinen otsikkopalkki" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Aktiivinen otsikkoteksti" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Epäaktiivinen otsikkopalkki" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Epäaktiivinen otsikkoteksti" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Viestilaatikon teksti" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Ohjelmien työtila" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Ikkunanreuna" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Aktiivinen reunus" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Epäaktiivinen reunus" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Kontrollien varjo" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Harmaa teksti" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Kontrollien korostus" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Kontrollien syvä varjo" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Kontrollien valo" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Kontrollien vaihtoehtotausta" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Aktiivinen elementti" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Aktiivisen otsikkopalkin liukuväri" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Epäaktiivisen otsikkopalkin liukuväri" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Valikon korostus" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Valikkopalkki" diff -Nru wine-development-5.5/po/fr.po wine-development-5.6/po/fr.po --- wine-development-5.5/po/fr.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/fr.po 2020-04-10 18:54:32.000000000 +0000 @@ -47,8 +47,8 @@ msgid "&Modify..." msgstr "&Modifier..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Supprimer" @@ -67,7 +67,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -152,8 +152,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -193,7 +193,7 @@ "Vous permet d'installer un nouveau logiciel, ou supprimer un logiciel " "existant de votre ordinateur." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Applications" @@ -594,7 +594,7 @@ msgid "Font St&yle:" msgstr "St&yle :" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "T&aille :" @@ -610,7 +610,7 @@ msgid "&Underline" msgstr "&Souligné" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Couleur :" @@ -784,7 +784,7 @@ msgid "C&ollate" msgstr "Copies assemblées" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Tai&lle :" @@ -2266,7 +2266,7 @@ msgid "&File name:" msgstr "&Nom du fichier :" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "Parcou&rir..." @@ -3050,7 +3050,7 @@ msgid "Player" msgstr "Lecteur" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Périphérique" @@ -3609,7 +3609,7 @@ msgid "Joysticks" msgstr "Joysticks" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Désactiver" @@ -3867,6 +3867,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7494,7 +7495,7 @@ msgid "Hyperlink Information" msgstr "Informations sur l'hyperlien" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Type :" @@ -9016,7 +9017,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "ppp" @@ -9515,7 +9516,7 @@ msgid "&Open:" msgstr "&Ouvrir :" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Parcourir..." @@ -9618,7 +9619,7 @@ msgid "Date deleted" msgstr "Date de suppression" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Bureau" @@ -9967,7 +9968,7 @@ msgid "Trash" msgstr "Corbeille" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Erreur" @@ -10000,137 +10001,137 @@ msgid "Select Source" msgstr "Sélectionnez un dossier" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "Date et heure" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "Date et heure" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "Européen central" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "Européen central" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "Européen central" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "Européen central" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "Barre &standard" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10142,35 +10143,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10182,67 +10183,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10254,11 +10255,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10270,97 +10271,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "Barre &standard" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "Date et heure" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "Barre &standard" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10372,27 +10385,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10404,67 +10417,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10476,19 +10489,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10508,35 +10521,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10548,27 +10561,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10580,19 +10593,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10604,29 +10617,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "Date et heure" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10638,35 +10651,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "Date et heure" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "Date et heure" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10682,11 +10707,11 @@ msgid "Aleutian Daylight Time" msgstr "Date et heure" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10698,137 +10723,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "Date et heure" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "Date et heure" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "Date et heure" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "Date et heure" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "Barre &standard" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -12049,7 +12086,7 @@ msgid "Digi&tal" msgstr "&Numérique" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Police..." @@ -16070,7 +16107,7 @@ "La configuration de Wine est en cours de mise à jour dans %s ; veuillez " "patienter..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -16082,23 +16119,23 @@ "que publiée par la Free Software Foundation ; soit la version 2.1 de la " "Licence, soit (à votre gré) toute version ultérieure." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Informations d'enregistrement de Windows" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Propriétaire :" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "&Organisation :" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Paramètres des applications" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -16109,55 +16146,55 @@ "permettre de changer des paramètres globaux ou par application dans ces " "onglets." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "Ajouter une appli&cation..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Supprimer une application" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "Version de &Windows :" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Paramètres des fenêtres" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Capturer automatiquement la &souris dans les fenêtres plein écran" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Permettre au gestionnaire de fenêtres de &décorer les fenêtres" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Permettre au gestionnaire de fenêtres de &contrôler les fenêtres" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "É&muler un bureau virtuel" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "&Taille du bureau :" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Résolution de l'écran" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Ceci est un exemple utilisant du Tahoma 10 points" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "Remplacement de DLL" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -16168,55 +16205,55 @@ "intégrée (distribuée avec Wine) de chaque bibliothèque partagée (DLL) " "utilisée par un programme." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Nouveau remplacement pour :" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "Ajou&ter" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Remplacements existants :" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Modifier..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Éditer le remplacement" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Ordre de chargement" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&intégrée (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&native (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "i&ntégrée puis native" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "n&ative puis intégrée" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Sélectionnez la lettre du lecteur" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Configuration des lecteurs" -#: winecfg.rc:233 +#: winecfg.rc:232 #, fuzzy #| msgid "" #| "Failed to connect to the mount manager, the drive configuration cannot be " @@ -16228,207 +16265,207 @@ "N'a pu se connecter au gestionnaire de montage : la configuration du lecteur " "n'a pu être éditée." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "Ajo&uter..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "Aut&o-détection" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Chemin :" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "Afficher les &détails" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "Périp&hérique :" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "&Parcourir..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "Ét&iquette :" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "N° de sé&rie :" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "&Montrer les fichiers cachés" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Diagnostic de pilotes" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Valeurs par défaut" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Périphérique de sortie :" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Périphérique de sortie voix :" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Périphérique d'entrée :" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Périphérique d'entrée voix :" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Tester le son" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Configuration des haut-parleurs" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Haut-parleurs :" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Apparence" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Thème :" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Installer un thème..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "Élé&ment :" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "Couleu&r :" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Dossiers" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "&Lier à :" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Bibliothèques" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Lecteurs" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Veuillez sélectionner le répertoire Unix cible." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "Cacher les &détails" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Aucun thème)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Affichage" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Intégration avec le bureau" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Audio" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "À propos" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Configuration de Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Fichiers de thèmes (*.msstyles ; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Sélectionnez un fichier de thème" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Dossier" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Pointe vers" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Configuration de Wine pour %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Pilote sélectionné : %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Aucun)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Échec du test audio !" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Valeur par défaut du système)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "Multicanal 5.1" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "Quadraphonique" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Stéréo" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Mono" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -16436,67 +16473,67 @@ "Modifier l'ordre de chargement de cette bibliothèque n'est pas recommandé.\n" "Êtes-vous sûr de vouloir le faire ?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Attention : bibliothèque système" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "native" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "intégrée" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "native, intégrée" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "intégrée, native" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "désactivée" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Paramètres par défaut" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Programmes de Wine (*.exe ; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Utiliser les paramètres globaux" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Sélectionnez un fichier exécutable" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Auto-détection" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Disque dur local" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Partage réseau" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Lecteur de disquette" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -16507,11 +16544,11 @@ "Chaque lecteur se voit assigner une lettre de A à Z ; vous ne pouvez donc " "pas en avoir plus de 26." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Lecteur système" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy #| msgid "" #| "Are you sure you want to delete drive C?\n" @@ -16530,16 +16567,16 @@ "ne fonctionneront pas s'il n'existe pas. Si vous continuez, n'oubliez pas de " "le recréer !" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Lettre" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Dossier cible" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16550,127 +16587,127 @@ "N'oubliez pas d'en recréer un en cliquant sur le bouton « Ajouter » dans " "l'onglet « Lecteurs » !\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Contrôle l'arrière-plan" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Contrôle le texte" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Arrière-plan du menu" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Texte du menu" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Barre de défilement" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Arrière-plan de la sélection" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Texte de la sélection" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Arrière-plan de l'infobulle" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Texte de l'infobulle" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Arrière-plan de la fenêtre" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Texte de la fenêtre" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Barre de titre active" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Texte de la barre de titre active" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Barre de titre inactive" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Texte de la barre de titre inactive" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Texte des boîtes à messages" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Espace de travail de l'application" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Cadre de la fenêtre" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Bordure active" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Bordure inactive" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Ombre des contrôles" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Texte gris" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Surbrillance des contrôles" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Ombre sombre des contrôles" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Lumière des contrôles" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Arrière-plan alternatif des contrôles" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Élément actif" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Dégradé de la barre de titre active" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Dégradé de la barre de titre inactive" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Surbrillance du menu" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Barre de menu" diff -Nru wine-development-5.5/po/he.po wine-development-5.6/po/he.po --- wine-development-5.5/po/he.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/he.po 2020-04-10 18:54:32.000000000 +0000 @@ -54,8 +54,8 @@ msgid "&Modify..." msgstr "&שינוי..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "ה&סרה" @@ -74,7 +74,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -156,8 +156,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -197,7 +197,7 @@ msgstr "" "תכנית זו מאפשרת לך להתקין תכניות חדשות או להסיר תכניות קיימות מהמחשב שלך." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "יישומים" @@ -595,7 +595,7 @@ msgid "Font St&yle:" msgstr "&סגנון הגופן:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&גודל:" @@ -611,7 +611,7 @@ msgid "&Underline" msgstr "קו &תחתי" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&צבע:" @@ -787,7 +787,7 @@ msgid "C&ollate" msgstr "&איסוף" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "&גודל:" @@ -2279,7 +2279,7 @@ msgid "&File name:" msgstr "&שם הקובץ:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 #, fuzzy msgid "B&rowse..." msgstr "&עיון" @@ -3019,7 +3019,7 @@ msgid "Player" msgstr "נגינה" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "" @@ -3575,7 +3575,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 #, fuzzy msgid "&Disable" msgstr "Table" @@ -3847,6 +3847,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7633,7 +7634,7 @@ msgid "Hyperlink Information" msgstr "פרטי הקישור" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&סוג:" @@ -9114,7 +9115,7 @@ msgid "b" msgstr "בתים" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "נק׳ לאינטש" @@ -9614,7 +9615,7 @@ msgid "&Open:" msgstr "&פתיחה:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&עיון..." @@ -9715,7 +9716,7 @@ msgid "Date deleted" msgstr "תאריך המחיקה" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "שולחן העבודה" @@ -10066,7 +10067,7 @@ msgid "Trash" msgstr "אשפה" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "שגיאה" @@ -10103,129 +10104,129 @@ msgid "Select Source" msgstr "תיקייה חדשה" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "תאריך ושעה" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "תאריך ושעה" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "סרגל הכלים ה&רגיל" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10237,35 +10238,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10277,67 +10278,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10349,11 +10350,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10365,97 +10366,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "סרגל הכלים ה&רגיל" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "תאריך ושעה" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "סרגל הכלים ה&רגיל" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10467,27 +10480,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10499,67 +10512,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10571,19 +10584,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10603,35 +10616,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10643,27 +10656,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10675,19 +10688,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10699,29 +10712,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "תאריך ושעה" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10733,35 +10746,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "תאריך ושעה" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "תאריך ושעה" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10777,11 +10802,11 @@ msgid "Aleutian Daylight Time" msgstr "תאריך ושעה" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10793,137 +10818,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "תאריך ושעה" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "תאריך ושעה" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "תאריך ושעה" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "תאריך ושעה" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "סרגל הכלים ה&רגיל" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -12011,7 +12048,7 @@ msgid "Digi&tal" msgstr "&דיגיטלי" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&גופן..." @@ -15626,7 +15663,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "התצורה של wine שב־%s מתעדכנת, נא להמתין..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15634,389 +15671,389 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 #, fuzzy msgid "Windows registration information" msgstr "&פרטי הגרסה" -#: winecfg.rc:144 +#: winecfg.rc:143 #, fuzzy msgid "&Owner:" msgstr "בעלים" -#: winecfg.rc:146 +#: winecfg.rc:145 #, fuzzy msgid "Organi&zation:" msgstr "הנפשה" -#: winecfg.rc:154 +#: winecfg.rc:153 #, fuzzy msgid "Application settings" msgstr "יישומים" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." msgstr "" -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy msgid "Add appli&cation..." msgstr "יישום" -#: winecfg.rc:160 +#: winecfg.rc:159 #, fuzzy msgid "&Remove application" msgstr "יישום" -#: winecfg.rc:161 +#: winecfg.rc:160 #, fuzzy msgid "&Windows Version:" msgstr "גודל החלון" -#: winecfg.rc:169 +#: winecfg.rc:168 #, fuzzy msgid "Window settings" msgstr "טקסט בחלון" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "" -#: winecfg.rc:175 +#: winecfg.rc:174 #, fuzzy msgid "Desktop &size:" msgstr "שולחן העבודה" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 #, fuzzy msgid "DLL overrides" msgstr "תצוגת ע&ריכה" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 #, fuzzy msgid "&Edit..." msgstr "&עריכה" -#: winecfg.rc:205 +#: winecfg.rc:204 #, fuzzy msgid "Edit Override" msgstr "תצוגת ע&ריכה" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "" -#: winecfg.rc:209 +#: winecfg.rc:208 #, fuzzy msgid "&Builtin (Wine)" msgstr "על &אודות Wine" -#: winecfg.rc:210 +#: winecfg.rc:209 #, fuzzy msgid "&Native (Windows)" msgstr "י&ציאה מ־Windows" -#: winecfg.rc:211 +#: winecfg.rc:210 #, fuzzy msgid "Buil&tin then Native" msgstr "מובנה, טבעי" -#: winecfg.rc:212 +#: winecfg.rc:211 #, fuzzy msgid "Nati&ve then Builtin" msgstr "טבעי, מובנה" -#: winecfg.rc:220 +#: winecfg.rc:219 #, fuzzy msgid "Select Drive Letter" msgstr "טקסט הבחירה" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy msgid "Drive configuration" msgstr "תצורת Wine" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 #, fuzzy msgid "A&dd..." msgstr "הו&ספה" -#: winecfg.rc:238 +#: winecfg.rc:237 #, fuzzy msgid "Aut&odetect" msgstr "זיהוי אוטומטי" -#: winecfg.rc:241 +#: winecfg.rc:240 #, fuzzy msgid "&Path:" msgstr "ה&נתיב המלא:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 #, fuzzy msgid "Show Advan&ced" msgstr "הצגת אפשרויות מ&תקדמות" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "" -#: winecfg.rc:251 +#: winecfg.rc:250 #, fuzzy msgid "Bro&wse..." msgstr "&עיון" -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy msgid "&Show dot files" msgstr "אין עוד קבצים\n" -#: winecfg.rc:265 +#: winecfg.rc:264 #, fuzzy msgid "Driver diagnostics" msgstr "כלי ניתוח ה־DirectX" -#: winecfg.rc:267 +#: winecfg.rc:266 #, fuzzy msgid "Defaults" msgstr "הגדרת &בררות מחדל" -#: winecfg.rc:268 +#: winecfg.rc:267 #, fuzzy msgid "Output device:" msgstr "שם קובץ ה&פלט:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy msgid "Speaker configuration" msgstr "תצורת Wine" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "" -#: winecfg.rc:291 +#: winecfg.rc:290 #, fuzzy msgid "&Install theme..." msgstr "התקנה..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 #, fuzzy msgid "C&olor:" msgstr "&צבע" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 #, fuzzy msgid "Folders" msgstr "תיקייה" -#: winecfg.rc:311 +#: winecfg.rc:310 #, fuzzy msgid "&Link to:" msgstr "קישורים אל" -#: winecfg.rc:34 +#: winecfg.rc:33 #, fuzzy msgid "Libraries" msgstr "ספריות" -#: winecfg.rc:35 +#: winecfg.rc:34 #, fuzzy msgid "Drives" msgstr "כוננים" -#: winecfg.rc:36 +#: winecfg.rc:35 #, fuzzy msgid "Select the Unix target directory, please." msgstr "נא לבחור את תיקיית היעד בלינוקס בבקשה." -#: winecfg.rc:37 +#: winecfg.rc:36 #, fuzzy msgid "Hide Advan&ced" msgstr "ה&סתרת האפשרויות המתקדמות" -#: winecfg.rc:39 +#: winecfg.rc:38 #, fuzzy msgid "(No Theme)" msgstr "(אין ערכת נושא)" -#: winecfg.rc:40 +#: winecfg.rc:39 #, fuzzy msgid "Graphics" msgstr "גרפיקה" -#: winecfg.rc:41 +#: winecfg.rc:40 #, fuzzy msgid "Desktop Integration" msgstr "שילוב בשולחן העבודה" -#: winecfg.rc:42 +#: winecfg.rc:41 #, fuzzy msgid "Audio" msgstr "שמע" -#: winecfg.rc:43 +#: winecfg.rc:42 #, fuzzy msgid "About" msgstr "על אודות" -#: winecfg.rc:44 +#: winecfg.rc:43 #, fuzzy msgid "Wine configuration" msgstr "תצורת Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 #, fuzzy msgid "Theme files (*.msstyles; *.theme)" msgstr "קובצי ערכות נושא (‎*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 #, fuzzy msgid "Select a theme file" msgstr "נא לבחור בקובץ ערכת נושא" -#: winecfg.rc:48 +#: winecfg.rc:47 #, fuzzy msgid "Folder" msgstr "תיקייה" -#: winecfg.rc:49 +#: winecfg.rc:48 #, fuzzy msgid "Links to" msgstr "קישורים אל" -#: winecfg.rc:45 +#: winecfg.rc:44 #, fuzzy msgid "Wine configuration for %s" msgstr "שגיאת תצוגה" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 #, fuzzy msgid "(None)" msgstr "ללא" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 #, fuzzy msgid "(System default)" msgstr "נתיב המערכת" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 #, fuzzy msgid "Quadraphonic" msgstr "גרפיקה" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 #, fuzzy msgid "" "Changing the load order of this library is not recommended.\n" @@ -16025,82 +16062,82 @@ "שינוי תהליך הטעינה של ספרייה זו אינו מומלץ.\n" "האם אכן ברצונך לעשות זאת?" -#: winecfg.rc:55 +#: winecfg.rc:54 #, fuzzy msgid "Warning: system library" msgstr "אזהרה: ספריית מערכת" -#: winecfg.rc:56 +#: winecfg.rc:55 #, fuzzy msgid "native" msgstr "טבעי" -#: winecfg.rc:57 +#: winecfg.rc:56 #, fuzzy msgid "builtin" msgstr "מובנה" -#: winecfg.rc:58 +#: winecfg.rc:57 #, fuzzy msgid "native, builtin" msgstr "טבעי, מובנה" -#: winecfg.rc:59 +#: winecfg.rc:58 #, fuzzy msgid "builtin, native" msgstr "מובנה, טבעי" -#: winecfg.rc:60 +#: winecfg.rc:59 #, fuzzy msgid "disabled" msgstr "Table" -#: winecfg.rc:61 +#: winecfg.rc:60 #, fuzzy msgid "Default Settings" msgstr "תצורה - הגדרות בררת המחדל" -#: winecfg.rc:62 +#: winecfg.rc:61 #, fuzzy msgid "Wine Programs (*.exe; *.exe.so)" msgstr "תכניות Wine‏ (‎*.exe,*.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 #, fuzzy msgid "Use global settings" msgstr "שימוש בהגדרות גלובליות" -#: winecfg.rc:64 +#: winecfg.rc:63 #, fuzzy msgid "Select an executable file" msgstr "נא לבחור בקובץ הפעלה" -#: winecfg.rc:69 +#: winecfg.rc:68 #, fuzzy msgid "Autodetect" msgstr "זיהוי אוטומטי" -#: winecfg.rc:70 +#: winecfg.rc:69 #, fuzzy msgid "Local hard disk" msgstr "כונן קשיח מקומי" -#: winecfg.rc:71 +#: winecfg.rc:70 #, fuzzy msgid "Network share" msgstr "שיתוף רשת" -#: winecfg.rc:72 +#: winecfg.rc:71 #, fuzzy msgid "Floppy disk" msgstr "כונן תקליטונים" -#: winecfg.rc:73 +#: winecfg.rc:72 #, fuzzy msgid "CD-ROM" msgstr "כונן תקליטורים" -#: winecfg.rc:74 +#: winecfg.rc:73 #, fuzzy msgid "" "You cannot add any more drives.\n" @@ -16111,12 +16148,12 @@ "\n" "לכל כונן חייבת להיות אות בין A ל־Z, לכן לא יתכנו יותר מ־26" -#: winecfg.rc:75 +#: winecfg.rc:74 #, fuzzy msgid "System drive" msgstr "כונן מערכת" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy msgid "" "Are you sure you want to delete drive C?\n" @@ -16129,19 +16166,19 @@ "רוב היישומים מצפים שכונן C יהיה קיים והם עלולים לקרוס אם הוא לא קיים. אם " "בחירתך תהיה להמשיך רצוי לזכור ליצור אותו שוב!" -#: winecfg.rc:77 +#: winecfg.rc:76 #, fuzzy msgctxt "Drive letter" msgid "Letter" msgstr "אות" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "New Folder" msgid "Target folder" msgstr "תיקייה חדשה" -#: winecfg.rc:79 +#: winecfg.rc:78 #, fuzzy msgid "" "You don't have a drive C. This is not so great.\n" @@ -16152,157 +16189,157 @@ "\n" "מומלץ שלא לשכוח ללחוץ על 'הוספה' בלשונית הכוננים כדי ליצור אחד כזה!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 #, fuzzy msgid "Controls Background" msgstr "רקע הפקדים" -#: winecfg.rc:100 +#: winecfg.rc:99 #, fuzzy msgid "Controls Text" msgstr "טקסט הפקדים" -#: winecfg.rc:102 +#: winecfg.rc:101 #, fuzzy msgid "Menu Background" msgstr "רקע התפריט" -#: winecfg.rc:103 +#: winecfg.rc:102 #, fuzzy msgid "Menu Text" msgstr "טקסט בתפריט" -#: winecfg.rc:104 +#: winecfg.rc:103 #, fuzzy msgid "Scrollbar" msgstr "סרגל גלילה" -#: winecfg.rc:105 +#: winecfg.rc:104 #, fuzzy msgid "Selection Background" msgstr "רקע הבחירה" -#: winecfg.rc:106 +#: winecfg.rc:105 #, fuzzy msgid "Selection Text" msgstr "טקסט הבחירה" -#: winecfg.rc:107 +#: winecfg.rc:106 #, fuzzy msgid "Tooltip Background" msgstr "רקע חלונית העצה" -#: winecfg.rc:108 +#: winecfg.rc:107 #, fuzzy msgid "Tooltip Text" msgstr "טקסט חלונית עצה" -#: winecfg.rc:109 +#: winecfg.rc:108 #, fuzzy msgid "Window Background" msgstr "רקע החלון" -#: winecfg.rc:110 +#: winecfg.rc:109 #, fuzzy msgid "Window Text" msgstr "טקסט בחלון" -#: winecfg.rc:111 +#: winecfg.rc:110 #, fuzzy msgid "Active Title Bar" msgstr "כותרת החלון הפעיל" -#: winecfg.rc:112 +#: winecfg.rc:111 #, fuzzy msgid "Active Title Text" msgstr "טקסט בכותרת של פעיל" -#: winecfg.rc:113 +#: winecfg.rc:112 #, fuzzy msgid "Inactive Title Bar" msgstr "סרגל כותרת של בלתי פעיל" -#: winecfg.rc:114 +#: winecfg.rc:113 #, fuzzy msgid "Inactive Title Text" msgstr "טקסט כותרת של בלתי פעיל" -#: winecfg.rc:115 +#: winecfg.rc:114 #, fuzzy msgid "Message Box Text" msgstr "טקסט בתיבת הודעות" -#: winecfg.rc:116 +#: winecfg.rc:115 #, fuzzy msgid "Application Workspace" msgstr "מרחב היישומים" -#: winecfg.rc:117 +#: winecfg.rc:116 #, fuzzy msgid "Window Frame" msgstr "מסגרת החלון" -#: winecfg.rc:118 +#: winecfg.rc:117 #, fuzzy msgid "Active Border" msgstr "מסגרת של פעיל" -#: winecfg.rc:119 +#: winecfg.rc:118 #, fuzzy msgid "Inactive Border" msgstr "מסגרת של בלתי פעיל" -#: winecfg.rc:120 +#: winecfg.rc:119 #, fuzzy msgid "Controls Shadow" msgstr "הצללת הפקדים" -#: winecfg.rc:121 +#: winecfg.rc:120 #, fuzzy msgid "Gray Text" msgstr "טקסט אפור" -#: winecfg.rc:122 +#: winecfg.rc:121 #, fuzzy msgid "Controls Highlight" msgstr "הדגשת פקדים" -#: winecfg.rc:123 +#: winecfg.rc:122 #, fuzzy msgid "Controls Dark Shadow" msgstr "הפקדים בהצללה כהה" -#: winecfg.rc:124 +#: winecfg.rc:123 #, fuzzy msgid "Controls Light" msgstr "פקדים בהירים" -#: winecfg.rc:125 +#: winecfg.rc:124 #, fuzzy msgid "Controls Alternate Background" msgstr "צבע רקע הפקדים משתנה" -#: winecfg.rc:126 +#: winecfg.rc:125 #, fuzzy msgid "Hot Tracked Item" msgstr "פריט במעקב חם" -#: winecfg.rc:127 +#: winecfg.rc:126 #, fuzzy msgid "Active Title Bar Gradient" msgstr "מדרג שורת כותרת של חלון פעיל" -#: winecfg.rc:128 +#: winecfg.rc:127 #, fuzzy msgid "Inactive Title Bar Gradient" msgstr "מדרג שורת כותרת של חלון בלתי פעיל" -#: winecfg.rc:129 +#: winecfg.rc:128 #, fuzzy msgid "Menu Highlight" msgstr "הדגשה בתפריט" -#: winecfg.rc:130 +#: winecfg.rc:129 #, fuzzy msgid "Menu Bar" msgstr "סרגל תפריטים" diff -Nru wine-development-5.5/po/hi.po wine-development-5.6/po/hi.po --- wine-development-5.5/po/hi.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/hi.po 2020-04-10 18:54:32.000000000 +0000 @@ -43,8 +43,8 @@ msgid "&Modify..." msgstr "" -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "" @@ -63,7 +63,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -140,8 +140,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -172,7 +172,7 @@ "computer." msgstr "" -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "" @@ -571,7 +571,7 @@ msgid "Font St&yle:" msgstr "" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "" @@ -587,7 +587,7 @@ msgid "&Underline" msgstr "" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "" @@ -759,7 +759,7 @@ msgid "C&ollate" msgstr "" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "" @@ -2215,7 +2215,7 @@ msgid "&File name:" msgstr "" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "" @@ -2931,7 +2931,7 @@ msgid "Player" msgstr "" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "" @@ -3476,7 +3476,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "" @@ -3728,6 +3728,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "" @@ -7194,7 +7195,7 @@ msgid "Hyperlink Information" msgstr "" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "" @@ -8548,7 +8549,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "" @@ -9048,7 +9049,7 @@ msgid "&Open:" msgstr "" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "" @@ -9138,7 +9139,7 @@ msgid "Date deleted" msgstr "" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "" @@ -9452,7 +9453,7 @@ msgid "Trash" msgstr "" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "" @@ -9483,123 +9484,123 @@ msgid "Select Source" msgstr "" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 msgid "Haiti Standard Time" msgstr "" -#: tzres.rc:117 +#: tzres.rc:121 msgid "Haiti Daylight Time" msgstr "" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9611,35 +9612,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9651,67 +9652,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -9723,11 +9724,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -9739,95 +9740,103 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +msgid "Marquesas Standard Time" +msgstr "" + +#: tzres.rc:143 +msgid "Marquesas Daylight Time" +msgstr "" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -9839,27 +9848,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -9871,67 +9880,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -9943,19 +9952,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -9975,35 +9984,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10015,27 +10024,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10047,19 +10056,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10071,27 +10080,27 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10103,35 +10112,43 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +msgid "Bougainville Standard Time" +msgstr "" + +#: tzres.rc:61 +msgid "Bougainville Daylight Time" +msgstr "" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10143,11 +10160,11 @@ msgid "Aleutian Daylight Time" msgstr "" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10159,131 +10176,139 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +msgid "Chatham Islands Standard Time" +msgstr "" + +#: tzres.rc:87 +msgid "Chatham Islands Daylight Time" +msgstr "" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11315,7 +11340,7 @@ msgid "Digi&tal" msgstr "डिज़िटल (&t)" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "फ़ॉन्ट (&F)..." @@ -14740,7 +14765,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "" -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -14748,418 +14773,418 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 #, fuzzy msgid "Windows registration information" msgstr "फ़ॉन्ट (&F)..." -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." msgstr "" -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "" -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 #, fuzzy msgid "&Edit..." msgstr "फ़ॉन्ट (&F)..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "" -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "" -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "" -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" msgstr "" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15167,144 +15192,144 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "" -#: winecfg.rc:111 +#: winecfg.rc:110 #, fuzzy msgid "Active Title Bar" msgstr "बिना शीर्षकपट्टी के (&W)" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "" diff -Nru wine-development-5.5/po/hr.po wine-development-5.6/po/hr.po --- wine-development-5.5/po/hr.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/hr.po 2020-04-10 18:54:32.000000000 +0000 @@ -47,8 +47,8 @@ msgid "&Modify..." msgstr "I&zmjeni..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Ukloni" @@ -67,7 +67,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -150,8 +150,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -189,7 +189,7 @@ "computer." msgstr "Instaliranje novog programa ili brisanje postojećeg s vašeg računala." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Aplikacije" @@ -589,7 +589,7 @@ msgid "Font St&yle:" msgstr "Sti&l Fonta:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Veličina:" @@ -605,7 +605,7 @@ msgid "&Underline" msgstr "Po&dcrtano" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Boja:" @@ -779,7 +779,7 @@ msgid "C&ollate" msgstr "Sra&vniti" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Veli&čina:" @@ -2258,7 +2258,7 @@ msgid "&File name:" msgstr "Naziv &datoteke:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "N&ađi..." @@ -3023,7 +3023,7 @@ msgid "Player" msgstr "Reproduciratelj" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Uređaj" @@ -3582,7 +3582,7 @@ msgid "Joysticks" msgstr "Joystici" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Isključi" @@ -3847,6 +3847,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7472,7 +7473,7 @@ msgid "Hyperlink Information" msgstr "Podaci o hipervezi" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Tip:" @@ -9017,7 +9018,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9516,7 +9517,7 @@ msgid "&Open:" msgstr "&Otvori:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Nađi..." @@ -9619,7 +9620,7 @@ msgid "Date deleted" msgstr "Datum brisanja" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Radna površina" @@ -9962,7 +9963,7 @@ msgid "Trash" msgstr "Smeće" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Greška" @@ -9995,137 +9996,137 @@ msgid "Select Source" msgstr "Nova mapa" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "Datum i vrijeme" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "Datum i vrijeme" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "srednjoeuropsko" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "srednjoeuropsko" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "srednjoeuropsko" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "srednjoeuropsko" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "&Standardna traka" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10137,35 +10138,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10177,67 +10178,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10249,11 +10250,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10265,97 +10266,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "&Standardna traka" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "Datum i vrijeme" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "&Standardna traka" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10367,27 +10380,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10399,67 +10412,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10471,19 +10484,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10503,35 +10516,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10543,27 +10556,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10575,19 +10588,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10599,29 +10612,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "Datum i vrijeme" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10633,35 +10646,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "Datum i vrijeme" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "Datum i vrijeme" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10677,11 +10702,11 @@ msgid "Aleutian Daylight Time" msgstr "Datum i vrijeme" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10693,137 +10718,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "Datum i vrijeme" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "Datum i vrijeme" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "Datum i vrijeme" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "Datum i vrijeme" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "&Standardna traka" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11903,7 +11940,7 @@ msgid "Digi&tal" msgstr "&Digitalni" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Font..." @@ -15476,7 +15513,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Wine postavke u %s se ažuriraju. Molimo, pričekajte..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15487,23 +15524,23 @@ "uvjetima GNU Lesser General Public License koja je izdana pod Free Software " "Foundation; verzija 2.1 licence ili (po svom izboru) neka kasnija verzija." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Informacija o Windows registraciji" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Vlasnik:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organi&zacija:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Postavke aplikacije" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15513,57 +15550,57 @@ "je povezan sa tabovima Biblioteke i Grafika kako bi dozvolio sistemske " "promjene ili za podešavanje aplikacija u tim istim tabovima." -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy #| msgid "&Add application..." msgid "Add appli&cation..." msgstr "&Dodaj aplikaciju..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Ukloni aplikaciju" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Verzija Windowsa:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Postavke prozora" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Automatski uhvati miš u ful&l-screen prozorima" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Dozvoli upravitelju prozora &ukrašavanje prozora" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Dozvoli upravitelju &prozora upravljanje prozorom" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Emulacija virutalnoe radne površine" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "&Veličina radne površine:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Rezolucija ekrana" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Ovo je primjer teksta koristeći 10 Tahoma" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL nadjačavanja" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15572,59 +15609,59 @@ "Biblioteke mogu biti podešene zasebno da budu ili ugrađene (omogućene od " "Wine-a) ili nativne (uzete od Windowsa ili od aplikacije)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Novo nadjačavanje biblioteke:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Postojeća nad&jačavanja:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Izmjeni..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Izmjeni podešavanje" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Redoslijed učitavanja" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Ugrađeno (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Nativno (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 #, fuzzy #| msgid "Bui<in then Native" msgid "Buil&tin then Native" msgstr "Ugrađe&no pa nativno" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Nativno &pa ugrađeno" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Izaberi slovo pogona" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy #| msgid "Wine configuration" msgid "Drive configuration" msgstr "Wine konfiguracija" -#: winecfg.rc:233 +#: winecfg.rc:232 #, fuzzy #| msgid "" #| "Failed to connect to the mount manager, the drive configuration cannot be " @@ -15636,221 +15673,221 @@ "Nije uspjelo povezivanje sa mount upraviteljem, konfiguracija pogona se ne " "može izmijeniti." -#: winecfg.rc:236 +#: winecfg.rc:235 #, fuzzy #| msgid "&Add..." msgid "A&dd..." msgstr "&Dodaj..." -#: winecfg.rc:238 +#: winecfg.rc:237 #, fuzzy #| msgid "Autodetect" msgid "Aut&odetect" msgstr "Autodetektiraj" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Putanja:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 #, fuzzy #| msgid "Show &Advanced" msgid "Show Advan&ced" msgstr "Pokaži &napredno" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "U&ređaj:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "Na&đi..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Oznaka:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "S&erijski:" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy #| msgid "Show &dot files" msgid "&Show dot files" msgstr "Prikaži &dot datoteke" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Driver dijagnostika" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Podrazumijevano" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Izlazni uređaj:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Izlazni uređaj za glas:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Ulazni uređaj:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Ulazni uređdaj za glas:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "Is&probaj zvuk" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy #| msgid "Wine configuration" msgid "Speaker configuration" msgstr "Wine konfiguracija" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Izgled" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Tema:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Instaliraj temu..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "Stavka:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "B&oja:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Mape" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "&Veza do:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Biblioteke" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Pogoni" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Molimo izaberite Unix glavni direktorij." -#: winecfg.rc:37 +#: winecfg.rc:36 #, fuzzy #| msgid "Hide &Advanced" msgid "Hide Advan&ced" msgstr "Sakrij &napredno" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Bez teme)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Grafika" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Desktop integracija" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Zvuk" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "O Wine" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Wine konfiguracija" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Datoteke teme (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Izaberite temu" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Mapa" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Poveznice do" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Wine konfiguracija za %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Odabrani pogon: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Ništa)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Testiranje zvuka neuspjelo!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Sistemska putanja)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 #, fuzzy #| msgid "graphic" msgid "Quadraphonic" msgstr "grafika" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15858,67 +15895,67 @@ "Promjena redoslijeda biblioteka nije preporučljiva.\n" "Da li ste sigurni kako želite ovo učiniti?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Upozorenje: sistemska biblioteka" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "nativna" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "ugrađena" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "nativna, ugrađena" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "ugrađena, nativna" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "onemogućen" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Osnovne postavke" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Wine programi (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Koristi globalne postavke" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Izaberi izvršnu datoteku" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Autodetektiraj" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Lokalni tvrdi disk" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Mrežno dijeljenje" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Floppy pogon" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -15929,11 +15966,11 @@ "Svaki disk mora imati slovo, od A do Z, što znači kako ih ne možete imati " "više od 26." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Sistemski pogon" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy #| msgid "" #| "Are you sure you want to delete drive C?\n" @@ -15951,18 +15988,18 @@ "Većina Windows aplikacija očekuje postojanje pogona C, i doći će do problema " "ako ne postoji. Ako nastavite sjetite se rekreirati pogon C!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Slovo" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "New Folder" msgid "Target folder" msgstr "Nova mapa" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -15972,127 +16009,127 @@ "\n" "Kliknite 'Dodaj' u Pogoni tabu kako bi ga napravili!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Kontrole pozadine" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Kontrole teksta" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Pozadina menija" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Tekst menija" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Scrollbar" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Odabir pozadine" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Odabir teksta" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Tooltip pozadine" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Tooltip teksta" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Pozadina prozora" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Text prozora" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Aktivni nazivni Bar" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Aktivni nazivni Text" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Neaktivni nazivni Bar" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Neaktivni nazivni Text" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Poruka Box Text" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Radni prostor aplikacije" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Okvir prozora" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Aktivni rub" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Neaktivni rub" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Kontrola sjene" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Sivi Text" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Kontrola odabranog" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Kontrola tamne sjene" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Kontrola svijetla" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Kontrola alternativne pozadine" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Gradijent aktivne naslovne trake" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Gradijent neaktivne naslovne trake" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Isticanje izbornika" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Traka izbornika" diff -Nru wine-development-5.5/po/hu.po wine-development-5.6/po/hu.po --- wine-development-5.5/po/hu.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/hu.po 2020-04-10 18:54:32.000000000 +0000 @@ -47,8 +47,8 @@ msgid "&Modify..." msgstr "&Módosítás..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "E<ávolítás" @@ -67,7 +67,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -152,8 +152,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -204,7 +204,7 @@ "Lehetõvé teszi új programok telepítését illetve eltávolítását az Ön " "számítógépérõl." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Alkalmazások" @@ -603,7 +603,7 @@ msgid "Font St&yle:" msgstr "Betû&stílus:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Méret:" @@ -619,7 +619,7 @@ msgid "&Underline" msgstr "&Aláhúzott" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "Szín:" @@ -793,7 +793,7 @@ msgid "C&ollate" msgstr "Le&válogatás" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "&Méret:" @@ -2272,7 +2272,7 @@ msgid "&File name:" msgstr "&Fájlnév:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "Tallózás..." @@ -3063,7 +3063,7 @@ msgid "Player" msgstr "Lejátszás" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Eszköz" @@ -3624,7 +3624,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "Tiltá&s" @@ -3901,6 +3901,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine súgó" @@ -7528,7 +7529,7 @@ msgid "Hyperlink Information" msgstr "Hiperhivatkozás információ" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Típus:" @@ -9055,7 +9056,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9554,7 +9555,7 @@ msgid "&Open:" msgstr "&Megnyitás:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Tallózás..." @@ -9657,7 +9658,7 @@ msgid "Date deleted" msgstr "Törlési dátum" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Asztal" @@ -10002,7 +10003,7 @@ msgid "Trash" msgstr "Lomtár" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Hiba" @@ -10035,137 +10036,137 @@ msgid "Select Source" msgstr "Új mappa" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "Dátum és idő" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "Dátum és idő" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "Közép-Európai" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "Közép-Európai" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "Közép-Európai" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "Közép-Európai" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "&Státusz sor" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10177,35 +10178,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10217,67 +10218,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10289,11 +10290,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10305,97 +10306,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "&Státusz sor" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "Dátum és idő" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "&Státusz sor" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10407,27 +10420,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10439,67 +10452,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10511,19 +10524,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10543,35 +10556,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10583,27 +10596,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10615,19 +10628,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10639,29 +10652,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "Dátum és idő" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10673,35 +10686,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "Dátum és idő" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "Dátum és idő" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10717,11 +10742,11 @@ msgid "Aleutian Daylight Time" msgstr "Dátum és idő" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10733,137 +10758,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "Dátum és idő" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "Dátum és idő" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "Dátum és idő" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "Dátum és idő" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "&Státusz sor" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -12096,7 +12133,7 @@ msgid "Digi&tal" msgstr "Digi&tális" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Betűtípus..." @@ -16015,7 +16052,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Wine konfiguráció frissítődik %s, kérem várjon..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -16027,23 +16064,23 @@ "Free Software Foundation készített; mind a 2.1 verziójú licensz, vagy " "(választása szerint) bármely későbbi verzió használható." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Windows Regisztráció Információ" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Tulajdonos:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "&Szervezet:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Alkalmazás beállítások" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -16054,57 +16091,57 @@ "tegye a rendszerszintű vagy alkalmazásonkénti beállításokat ezeken a füleken " "is." -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy #| msgid "&Add application..." msgid "Add appli&cation..." msgstr "&Alkalmazás hozzáadás..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "Alkalmazás &eltávolítás" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Windows verzió:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Ablak beállítások" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Automatikusan érzékeli az &egeret teljes képernyős ablak esetén" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Megengedi az ablak kezelőnek, hogy &díszítse az ablakot" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Az ablak kezelő kezelheti az ablakokat" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "Virtuális asztal emulálása" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Asztal &méret:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Képernyő felbontás" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Ez egy minta szöveg, amely 10 pontos Tahoma betűtípust használ" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL felülbírálások" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -16114,59 +16151,59 @@ "hogy beépítettek (a Wine biztosítja), vagy natívak (a windowsból nyert, vagy " "az alkalmazás biztosítja)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "Új felülbírálás könyvtárhoz:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Létező felülbírálások:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "Sz&erkesztés..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Felülbírálás szerkesztése" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Betöltési sorrend" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Beépített (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Natív (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 #, fuzzy #| msgid "Bui<in then Native" msgid "Buil&tin then Native" msgstr "Beépítet&t, natív" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Natí&v, beépített" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Válassza ki a meghajtó betűjelét" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy #| msgid "Wine configuration" msgid "Drive configuration" msgstr "Wine konfiguráció" -#: winecfg.rc:233 +#: winecfg.rc:232 #, fuzzy #| msgid "" #| "Failed to connect to the mount manager, the drive configuration cannot be " @@ -16178,220 +16215,220 @@ "Nem lehet kapcsolódni az eszközmenedzserhez, a meghajtó beállítást nem lehet " "szerkeszteni." -#: winecfg.rc:236 +#: winecfg.rc:235 #, fuzzy #| msgid "&Add..." msgid "A&dd..." msgstr "Hozzá&ad..." -#: winecfg.rc:238 +#: winecfg.rc:237 #, fuzzy msgid "Aut&odetect" msgstr "Automata &felismerés" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Útvonal:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 #, fuzzy #| msgid "Show &Advanced" msgid "Show Advan&ced" msgstr "Haladó >>" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "Eszkö&z:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "Tall&ózás..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Címke:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "S&orozatszám:" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy #| msgid "Show &dot files" msgid "&Show dot files" msgstr "Rejtett fájlok megjelenítése" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Driver diagnosztika" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Alapértékek" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Kimeneti eszköz:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Hang kimeneti eszköz:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Bemeneti eszköz:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Hang bemeneti eszköz:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Teszt hang" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy #| msgid "Wine configuration" msgid "Speaker configuration" msgstr "Wine konfiguráció" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Megjelenés" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "Téma:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "Téma telepítése..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "&Elem:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "Szín:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Rendszermappák" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "Mappa &útvonal:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Függvénykönyvtárak" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Meghajtók" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Kérem válasszon unix célkönyvtárat." -#: winecfg.rc:37 +#: winecfg.rc:36 #, fuzzy #| msgid "Hide &Advanced" msgid "Hide Advan&ced" msgstr "Haladó <<" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Nincs téma)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Grafika" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Asztalba beépülés" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Hang" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Névjegy" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Wine konfiguráció" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Témafájlok (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Témafájl választása" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Rendszermappa" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Mappa útvonal" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Wine konfiguráció %s számára" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Kiválasztott driver: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Nincs)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Hangteszt nem sikerült!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Rendszer alapértelmezett)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 #, fuzzy #| msgid "graphic" msgid "Quadraphonic" msgstr "grafika" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -16399,68 +16436,68 @@ "A könyvtárak betöltési sorrendjének megváltoztatása nem ajánlott.\n" "Biztos hogy ezt akarja tenni?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Figyelem: rendszerfüggvénykönyvtár" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "natív" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "beépített" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "natív, beépített" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "beépített, natív" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "letiltva" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Alapértelmezett beállítások" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Programok (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Globális beállítások használata" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Válasszon ki egy futtatható fájlt" -#: winecfg.rc:69 +#: winecfg.rc:68 #, fuzzy msgid "Autodetect" msgstr "Automata &felismerés" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Helyi merevlemez" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Hálózat megosztás" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Floppy lemez" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -16470,11 +16507,11 @@ "\n" "Minden meghajtót el kell látni A..Z betűvel, így nem lehet több 26-nál." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Rendszer meghajtó" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy #| msgid "" #| "Are you sure you want to delete drive C?\n" @@ -16492,18 +16529,18 @@ "Legtöbb Windows alkalmazás elvárja a C meghajtó létezését, és szabálytalanul " "kilép ha nem létezik. Továbblépés előtt hozza létre!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Betűjel" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "New Folder" msgid "Target folder" msgstr "Új mappa" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16514,127 +16551,127 @@ "Emlékeztetőül, klikkeljen a 'Hozzáad'-ra a meghajtók fülön, hogy létrehozzon " "egyet!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Vezérlők háttere" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Vezérlők szövege" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Menü háttér" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Menü szöveg" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Görgetősáv" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Beállítás há&ttérként" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Kijelölt szöveg" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Tooltip háttér" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Tooptip szöveg" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Ablak háttér" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Ablak szöveg" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Aktív címsor" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Aktív címsor szöveg" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Inaktív címsor" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Inaktív címsor szöveg" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Üzenetablak szöveg" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Alkalmazás munkaterület" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Ablak keret" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Aktív keret" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Inaktív keret" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Vezérlők árnyékolása" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Szürke szöveg" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Vezérlők kiemelése" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Vezérlők sötét árnyékolása" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Vezérlők fénybeállítása" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Vezérlőnként változó hátter" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Kiemeltsáv elem" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Aktív ablakcímsor áttetszóség" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Inaktív ablakcímsor áttetszóség" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Menü kiemelés" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Menüsor" diff -Nru wine-development-5.5/po/it.po wine-development-5.6/po/it.po --- wine-development-5.5/po/it.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/it.po 2020-04-10 18:54:32.000000000 +0000 @@ -52,8 +52,8 @@ msgid "&Modify..." msgstr "&Modifica..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Rimuovi" @@ -72,7 +72,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -157,8 +157,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -209,7 +209,7 @@ "Ti permette di installare nuovi software o di rimuovere quelli presenti dal " "tuo computer." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Applicazioni" @@ -609,7 +609,7 @@ msgid "Font St&yle:" msgstr "&Stile:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "Dimen&sione:" @@ -625,7 +625,7 @@ msgid "&Underline" msgstr "S&ottolineato" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Colore:" @@ -799,7 +799,7 @@ msgid "C&ollate" msgstr "&Fascicola" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "&Dimensione:" @@ -2282,7 +2282,7 @@ msgid "&File name:" msgstr "Nome del &file:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "&Naviga..." @@ -3073,7 +3073,7 @@ msgid "Player" msgstr "Riproduttore" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Unità" @@ -3632,7 +3632,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Disabilita" @@ -3909,6 +3909,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7537,7 +7538,7 @@ msgid "Hyperlink Information" msgstr "Informazioni sull'iperlink" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Tipo:" @@ -9124,7 +9125,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9622,7 +9623,7 @@ msgid "&Open:" msgstr "&Apri:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Naviga..." @@ -9725,7 +9726,7 @@ msgid "Date deleted" msgstr "Data di eliminazione" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Scrivania" @@ -10072,7 +10073,7 @@ msgid "Trash" msgstr "Cestino" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Errore" @@ -10105,137 +10106,137 @@ msgid "Select Source" msgstr "Nuova cartella" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "Data e ora" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "Data e ora" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "Europeo centrale" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "Europeo centrale" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "Europeo centrale" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "Europeo centrale" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "Barra &predefinita" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10247,35 +10248,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10287,67 +10288,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10359,11 +10360,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10375,97 +10376,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "Barra &predefinita" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "Data e ora" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "Barra &predefinita" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10477,27 +10490,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10509,67 +10522,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10581,19 +10594,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10613,35 +10626,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10653,27 +10666,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10685,19 +10698,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10709,29 +10722,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "Data e ora" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10743,35 +10756,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "Data e ora" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "Data e ora" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10787,11 +10812,11 @@ msgid "Aleutian Daylight Time" msgstr "Data e ora" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10803,137 +10828,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "Data e ora" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "Data e ora" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "Data e ora" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "Data e ora" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "Barra &predefinita" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -12175,7 +12212,7 @@ msgid "Digi&tal" msgstr "Digi&tale" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Carattere..." @@ -16112,7 +16149,7 @@ msgstr "" "La configurazione di Wine in %s è in aggiornamento, aspetta un momento..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -16124,23 +16161,23 @@ "dalla Free Software Foundation; sia la versione 2.1 della licenza, o (a tua " "scelta) qualunque altra versione più recente." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Informazioni di registrazione di Windows" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Proprietario:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "&Organizzazione:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Impostazioni delle applicazioni" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -16151,57 +16188,57 @@ "cambiare le impostazioni a livello di sistema o per applicazione pure in " "quelle schede." -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy #| msgid "&Add application..." msgid "Add appli&cation..." msgstr "&Aggiungi applicazione..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Rimuovi applicazione" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "Versione di Windows:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Impostazioni delle finestre" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Cattura automaticamente il &mouse nelle finestre a schermo pieno" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Permetti al gestore delle finestre di &decorare le finestre" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Permetti al &gestore delle finestre di controllare le finestre" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Emula un desktop virtuale" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Dimensione del desktop:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Risoluzione dello schermo" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Questo è un testo di esempio che usa il carattere Tahoma a 10 punti" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "Sostituzioni di DLL" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -16211,59 +16248,59 @@ "essere integrate (fornite da Wine) o native (prese da Windows o fornite " "dall'applicazione)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Nuova sostituzione per la libreria:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "&Sostituzioni esistenti:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Modifica..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Modifica sostituzione" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Ordine di caricamento" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Integrata (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Nativa (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 #, fuzzy #| msgid "Bui<in then Native" msgid "Buil&tin then Native" msgstr "In&tegrata poi nativa" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "N&ativa poi integrata" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Seleziona la lettera dell'unità" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy #| msgid "Wine configuration" msgid "Drive configuration" msgstr "Configurazione di Wine" -#: winecfg.rc:233 +#: winecfg.rc:232 #, fuzzy #| msgid "" #| "Failed to connect to the mount manager, the drive configuration cannot be " @@ -16275,220 +16312,220 @@ "Impossibile connettersi al gestore delle unità, la configurazione dell'unità " "non può essere modificata." -#: winecfg.rc:236 +#: winecfg.rc:235 #, fuzzy #| msgid "&Add..." msgid "A&dd..." msgstr "Aggiungi..." -#: winecfg.rc:238 +#: winecfg.rc:237 #, fuzzy msgid "Aut&odetect" msgstr "&Rileva automaticamente" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Percorso:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 #, fuzzy #| msgid "Show &Advanced" msgid "Show Advan&ced" msgstr "Mostra controlli &avanzati" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "&Unità:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "Na&viga..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Etichetta:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "Numero &seriale:" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy #| msgid "Show &dot files" msgid "&Show dot files" msgstr "Mostra file &dot" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Diagnostica del driver" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Valori predefiniti" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Unità output:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Unità output voce:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Unità input:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Unità input voce:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Test dell'audio" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy #| msgid "Wine configuration" msgid "Speaker configuration" msgstr "Configurazione di Wine" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Aspetto" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Tema:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Installa un tema..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "Ogg&etto:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "C&olore:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Cartelle" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "&Collega a:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Librerie" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Unità" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Seleziona la cartella Unix desiderata, prego." -#: winecfg.rc:37 +#: winecfg.rc:36 #, fuzzy #| msgid "Hide &Advanced" msgid "Hide Advan&ced" msgstr "Nascondi controlli &avanzati" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Nessun tema)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Grafica" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Integrazione della Scrivania" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Audio" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Informazioni" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Configurazione di Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "File del tema (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Seleziona un file di tema" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Cartella" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Collega a" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Configurazione di Wine per %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Driver selezionato: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Nessuno)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Test dell'audio fallito!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(valore predefinito di sistema)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 #, fuzzy #| msgid "graphic" msgid "Quadraphonic" msgstr "immagine" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -16496,68 +16533,68 @@ "Cambiare l'ordine di caricamento di questa libreria non è raccomandato.\n" "Sei sicuro di volerlo fare?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Attenzione: libreria di sistema" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "nativa" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "integrata" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "nativa, integrata" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "integrata, nativa" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "disabilitato" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Impostazioni predefinite" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Programmi di Wine (*.exe,*.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Usa impostazioni globali" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Seleziona un file eseguibile" -#: winecfg.rc:69 +#: winecfg.rc:68 #, fuzzy msgid "Autodetect" msgstr "&Rileva automaticamente" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Hard disk locale" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Condivisione rete" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Disco floppy" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -16568,11 +16605,11 @@ "Ciascuno deve avere una lettera, dalla A alla Z, perciò non puoi averne più " "di 26." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Unità di sistema" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy #| msgid "" #| "Are you sure you want to delete drive C?\n" @@ -16590,18 +16627,18 @@ "La maggior parte delle applicazioni Windows si aspettano che l'unità C " "esista e si chiuderanno male se non c'è. Se procedi, ricordati di ricrearla!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Lettera" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "New Folder" msgid "Target folder" msgstr "Nuova cartella" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16611,127 +16648,127 @@ "\n" "Ricordati di cliccare 'Aggiungi' nella sezione Unità per crearne uno!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Controlli - Sfondo" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Controlli - Testo" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Menù - Sfondo" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Menù - Testo" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Barra di scorrimento" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Selezione - Sfondo" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Selezione - Testo" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Tooltip - Sfondo" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Tooltip - Testo" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Finestra - Sfondo" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Finestra - Testo" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Titolo attivo - Barra" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Titolo attivo - Testo" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Titolo inattivo - Barra" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Titolo inattivo - Testo" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Testo della casella di Messaggio" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Spazio di lavoro dell'applicazione" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Frame della finestra" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Bordo attivo" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Bordo inattivo" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Controlli - Ombre" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Testo disabilitato" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Controlli - Selezione" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Controlli - Ombre scure" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Controlli - Luce" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Controlli - Sfondo alternativo" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Oggetto Hot Tracked" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Titolo attivo - Gradiente della barra" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Titolo inattivo - Gradiente della barra" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Menù - Selezione" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Menù - Barra" diff -Nru wine-development-5.5/po/ja.po wine-development-5.6/po/ja.po --- wine-development-5.5/po/ja.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/ja.po 2020-04-10 18:54:32.000000000 +0000 @@ -48,8 +48,8 @@ msgid "&Modify..." msgstr "変更(&M)..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "削除(&R)" @@ -68,7 +68,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -151,8 +151,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -192,7 +192,7 @@ "新しいソフトウェアをインストールすることや、既存のソフトウェアを削除すること" "ができます。" -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "アプリケーション" @@ -586,7 +586,7 @@ msgid "Font St&yle:" msgstr "スタイル(&Y):" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "サイズ(&S):" @@ -602,7 +602,7 @@ msgid "&Underline" msgstr "下線(&U)" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "配色(&C):" @@ -774,7 +774,7 @@ msgid "C&ollate" msgstr "部単位で印刷(&O)" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "サイズ(&Z):" @@ -2251,7 +2251,7 @@ msgid "&File name:" msgstr "ファイル名(&F):" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "参照(&R)..." @@ -3007,7 +3007,7 @@ msgid "Player" msgstr "プレイヤー" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "デバイス" @@ -3552,7 +3552,7 @@ msgid "Joysticks" msgstr "ジョイスティック" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "無効化(&D)" @@ -3811,6 +3811,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7277,7 +7278,7 @@ msgid "Hyperlink Information" msgstr "ハイパーリンクの情報" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "タイプ(&T):" @@ -8711,7 +8712,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9207,7 +9208,7 @@ msgid "&Open:" msgstr "名前(&O):" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "参照(&B)..." @@ -9296,7 +9297,7 @@ msgid "Date deleted" msgstr "削除日" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "デスクトップ" @@ -9637,7 +9638,7 @@ msgid "Trash" msgstr "ごみ箱" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "エラー" @@ -9668,127 +9669,127 @@ msgid "Select Source" msgstr "ソースの選択" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "中国標準時間" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "中国夏時間" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "北アジア標準時" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "北アジア夏時間" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "ジョージア標準時" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "ジョージア夏時間" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "ネパール標準時" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "ネパール夏時間" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "カーボベルデ標準時" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "カーボベルデ夏時間" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Hawaiian Standard Time" msgid "Haiti Standard Time" msgstr "ハワイ標準時" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Hawaiian Daylight Time" msgid "Haiti Daylight Time" msgstr "ハワイ夏時間" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "中央ヨーロピアン標準時" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "中央ヨーロピアン夏時間" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "モロッコ標準時" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "モロッコ夏時間" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "中央ヨーロッパ標準時" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "中央ヨーロッパ夏時間" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "イラン標準時" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "イラン夏時間" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "ナミビア標準時" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "ナミビア夏時間" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "トンガ標準時" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "トンガ夏時間" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "山地標準時 (メキシコ)" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "山地夏時間 (メキシコ)" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "GMT 標準時" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "GMT 夏時間" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "中央アジア標準時" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "中央アジア夏時間" @@ -9800,35 +9801,35 @@ msgid "Arabic Daylight Time" msgstr "アラビック夏時間" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "マガダン標準時" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "マガダン夏時間" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "ニューファンドランド標準時" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "ニューファンドランド夏時間" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "西太平洋標準時" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "西太平洋夏時間" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "太平洋標準時" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "太平洋夏時間" @@ -9840,67 +9841,67 @@ msgid "Azerbaijan Daylight Time" msgstr "アゼルバイジャン夏時間" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "サモア標準時" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "サモア夏時間" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "カリーニングラード標準時" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "カリーニングラード夏時間" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "太平洋標準時 (メキシコ)" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "太平洋夏時間 (メキシコ)" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "中東標準時" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "中東夏時間" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "東京 (標準時)" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "東京 (夏時間)" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "ライン諸島標準時" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "ライン諸島夏時間" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "ヨルダン標準時" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "ヨルダン夏時間" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "中部標準時" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "中部夏時間" @@ -9912,11 +9913,11 @@ msgid "Azores Daylight Time" msgstr "アゾレス諸島夏時間" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "北アジア東部標準時" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "北アジア東部夏時間" @@ -9928,95 +9929,107 @@ msgid "Argentina Daylight Time" msgstr "アルゼンチン夏時間" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "Mauritius Standard Time" +msgid "Marquesas Standard Time" +msgstr "モーリシャス標準時" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Mauritius Daylight Time" +msgid "Marquesas Daylight Time" +msgstr "モーリシャス夏時間" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "ミャンマー標準時" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "ミャンマー夏時間" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "協定世界時" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "インド標準時" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "インド夏時間" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "GTB 標準時" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "GTB 夏時間" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "トルコ標準時" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "トルコ夏時間" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "フィジー標準時" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "フィジー夏時間" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "カナダ中部標準時" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "カナダ中部夏時間" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "台北 (標準時)" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "台北 (夏時間)" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "西ヨーロッパ標準時" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "西ヨーロッパ夏時間" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "モンテビデオ標準時" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "モンテビデオ夏時間" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "パキスタン標準時" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "パキスタン夏時間" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "コーカサス標準時" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "コーカサス夏時間" @@ -10028,27 +10041,27 @@ msgid "AUS Eastern Daylight Time" msgstr "オーストラリア東部夏時間" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "北中央アジア標準時" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "北中央アジア夏時間" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "東部標準時" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "東部夏時間" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "中部標準時 (メキシコ)" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "中部夏時間 (メキシコ)" @@ -10060,67 +10073,67 @@ msgid "Atlantic Daylight Time" msgstr "大西洋夏時間" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "山地標準時" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "山地夏時間" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "米国東部標準時" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "米国東部夏時間" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "タスマニア標準時" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "タスマニア夏時間" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "中央アメリカ標準時" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "中央アメリカ夏時間" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "米国山地標準時" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "米国山地夏時間" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "南アフリカ標準時" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "南アフリカ夏時間" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "中央オーストラリア標準時" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "中央オーストラリア夏時間" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "スリランカ標準時" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "スリランカ夏時間" @@ -10132,19 +10145,19 @@ msgid "Afghanistan Daylight Time" msgstr "アフガニスタン夏時間" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "ヤクーツク標準時" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "ヤクーツク夏時間" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "南アメリカ東部標準時" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "南アメリカ東部標準時" @@ -10164,35 +10177,35 @@ msgid "Arabian Daylight Time" msgstr "アラビアン夏時間" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "ロシア標準時" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "ロシア夏時間" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "ロマンス標準時" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "ロマンス夏時間" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "エカテリンブルク標準時" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "エカテリンブルク夏時間" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "シリア標準時" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "シリア夏時間" @@ -10204,27 +10217,27 @@ msgid "AUS Central Daylight Time" msgstr "オーストラリア中部夏時間" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "グリニッジ標準時" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "グリニッジ夏時間" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "ウランバートル標準時" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "ウランバートル夏時間" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "イスラエル標準時" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "イスラエル夏時間" @@ -10236,19 +10249,19 @@ msgid "Bangladesh Daylight Time" msgstr "バングラデシュ夏時間" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "南アメリカ太平洋標準時" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "南アメリカ太平洋夏時間" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "西アジア標準時" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "西アジア夏時間" @@ -10260,27 +10273,27 @@ msgid "Alaskan Daylight Time" msgstr "アラスカ夏時間" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "パラグアイ標準時" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "パラグアイ夏時間" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "日付変更線 (標準時)" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "日付変更線 (夏時間)" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "リビア標準時" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "リビア夏時間" @@ -10292,35 +10305,47 @@ msgid "Bahia Daylight Time" msgstr "バイア夏時間" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "ベネズエラ標準時" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "ベネズエラ夏時間" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Mountain Standard Time" +msgid "Bougainville Standard Time" +msgstr "山地標準時" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Mountain Daylight Time" +msgid "Bougainville Daylight Time" +msgstr "山地夏時間" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "ハワイ標準時" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "ハワイ夏時間" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "東南アジア標準時" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "東南アジア夏時間" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "ニュージーランド標準時" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "ニュージーランド夏時間" @@ -10336,11 +10361,11 @@ msgid "Aleutian Daylight Time" msgstr "アルゼンチン夏時間" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "ブラジル中部標準時" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "ブラジル中部夏時間" @@ -10352,131 +10377,143 @@ msgid "Belarus Daylight Time" msgstr "ベラルーシ夏時間" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "南アメリカ西部標準時" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "南アメリカ西部標準時" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "グリーンランド標準時" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "グリーンラインド夏時間" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "イースター島標準時" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "イースター島夏時間" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "エジプト標準時" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "エジプト夏時間" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "モーリシャス標準時" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "モーリシャス夏時間" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "ウラジオストク標準時" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "ウラジオストク夏時間" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "シンガポール標準時" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "シンガポール夏時間" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "韓国 (標準時)" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "韓国 (夏時間)" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Easter Island Standard Time" +msgid "Chatham Islands Standard Time" +msgstr "イースター島標準時" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Easter Island Daylight Time" +msgid "Chatham Islands Daylight Time" +msgstr "イースター島夏時間" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "アフリカ東部標準時" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "アフリカ東部夏時間" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "FLE 標準時" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "FLE 夏時間" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "南アメリカ東部標準時" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "南アメリカ東部夏時間" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "中央太平洋標準時" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "中央太平洋夏時間" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "中央アフリカ西部標準時" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "中央アフリカ西部夏時間" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "南アメリカ太平洋標準時" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "南アメリカ太平洋夏時間" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "オーストラリア東部標準時" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "オーストラリア東部夏時間" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "オーストラリア西部標準時" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "オーストラリア西部夏時間" @@ -11637,7 +11674,7 @@ msgid "Digi&tal" msgstr "デジタル(&T)" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "フォント(&F)..." @@ -15434,7 +15471,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "%s にある Wine 設定を更新しています。しばらくお待ちください..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15446,23 +15483,23 @@ "望によってはそれ以降の バージョン のうちどれか) の定める条件の下で 再頒布 ま" "たは 改変 することができます。" -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Windows 登録情報" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "所有者(&O):" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "組織(&Z):" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "アプリケーション設定" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15472,55 +15509,55 @@ "ます。 このタブはライブラリ及びグラフィック各タブと連動しますので、システム全" "体の設定や 個別アプリケーションの設定の変更が行えます。" -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "アプリケーションを追加(&C)..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "アプリケーションを削除(&R)" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Windows バージョン:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "ウィンドウ設定" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "フルスクリーン ウィンドウでマウスを自動的に捕捉する(&M)" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "ウィンドウ マネージャがウィンドウを装飾するのを許可する(&D)" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "ウィンドウ マネージャがウィンドウを制御するのを許可する(&W)" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "仮想デスクトップをエミュレートする(&E)" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "デスクトップの大きさ(&S):" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "画面の解像度" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "10 ポイントの Tahoma による見本です" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL オーバーライド" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15529,262 +15566,262 @@ "ダイナミック リンク ライブラリ(DLL)は個別に 内蔵版(Wine提供) または ネイティ" "ブ版(Windows もしくはアプリケーション提供のもの)を選ぶことができます。" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "ライブラリの新規オーバーライド(&N):" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "追加(&D)" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "既存のオーバーライド(&O):" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "編集(&E)..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "オーバーライドの編集" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "読込順序" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "内蔵版(Wine)(&B)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "ネイティブ版(Windows)(&N)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "内蔵版後にネイティブ版(&T)" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "ネイティブ版後に内蔵版(&V)" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "ドライブ レターを選択" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "ドライブの設定" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" "マウント マネージャへの接続に失敗したため、ドライブ設定は変更できません。" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "追加(&D)..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "自動検出(&O)" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "パス(&P):" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "詳細を表示(&C)" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "デバイス(&V):" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "参照(&W)..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "ラベル(&L):" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "シリアル番号(&E):" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "ドット ファイルを表示する(&S)" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "ドライバ診断" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "デフォルト" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "出力デバイス:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "音声出力デバイス:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "入力デバイス:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "音声入力デバイス:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "音をテスト(&T)" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "スピーカー 設定" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "スピーカー:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "外観" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "テーマ(&T):" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "テーマのインストール(&I)..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "項目(&E):" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "色(&O):" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "MIME タイプ" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "ファイル関連付けの管理(&A)" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "フォルダ" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "リンク先(&L):" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "ライブラリ" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "ドライブ" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Unix の対象ディレクトリを選択してください。" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "詳細を隠す(&C)" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(テーマ無し)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "画面" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "デスクトップ統合" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "オーディオ" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Wine について" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Wine 設定" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "テーマ ファイル (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "テーマ ファイルの選択" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "シェルフォルダ" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "リンク先" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Wine設定 %s用" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "選択されたドライバ: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(なし)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "オーディオ テストに失敗!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(システム デフォルト)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "5.1 サラウンド" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "4 チャンネル ステレオ" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "ステレオ" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "モノラル" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15792,67 +15829,67 @@ "このライブラリの読み込み順序を変更することは推奨されません。\n" "本当に変更しますか?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "警告: システム ライブラリ" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "ネイティブ版" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "内蔵版" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "ネイティブ版、内蔵版" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "内蔵版、ネイティブ版" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "無効" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "既定の設定" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Wine プログラム (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "全体設定を使う" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "実行可能ファイルを選択" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "自動検出" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "ローカル ハード ディスク" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "ネットワーク共有" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "フロッピー ディスク" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -15863,11 +15900,11 @@ "各ドライブは A から Z までの 1 字を使う必要があるので、26 を超えることはでき" "ません。" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "システム ドライブ" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15880,16 +15917,16 @@ "ので、存在しない場合めちゃくちゃな死に方をするでしょう。続行するならば、再作" "成するのを忘れないでください!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "文字" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "対象のフォルダ" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -15900,127 +15937,127 @@ "C ドライブを作成するためにドライブ タブ内の [追加] を忘れずにクリックしてくだ" "さい!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "コントロールの背景" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "コントロールのテキスト" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "メニューの背景" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "メニューのテキスト" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "スクロール バー" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "選択項目の背景" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "選択項目のテキスト" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "ヒントの背景" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "ヒントのテキスト" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "ウィンドウの背景" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "ウィンドウのテキスト" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "アクティブ タイトル バー" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "アクティブ タイトルのテキスト" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "非アクティブ タイトル バー" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "非アクティブ タイトルのテキスト" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "メッセージ ボックスのテキスト" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "アプリケーション作業域" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "ウィンドウの境界" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "アクティブ境界" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "非アクティブ境界" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "コントロールの影" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "灰色テキスト" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "コントロールの明るい部分" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "コントロールの暗い影" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "コントロールの明かり" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "コントロールの別の背景" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "選択中のアイテム" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "アクティブ タイトル バーの階調" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "非アクティブ タイトル バーの階調" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "メニューの明るい部分" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "メニュー バー" diff -Nru wine-development-5.5/po/ko.po wine-development-5.6/po/ko.po --- wine-development-5.5/po/ko.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/ko.po 2020-04-10 18:54:32.000000000 +0000 @@ -46,8 +46,8 @@ msgid "&Modify..." msgstr "수정(&M)..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "제거(&R)" @@ -66,7 +66,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -149,8 +149,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -189,7 +189,7 @@ msgstr "" "새 소프트웨어를 설치하거나 설치된 소프트웨어를 컴퓨터에서 제거할 수 있습니다." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "프로그램" @@ -583,7 +583,7 @@ msgid "Font St&yle:" msgstr "글꼴 스타일(&Y):" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "크기(&S):" @@ -599,7 +599,7 @@ msgid "&Underline" msgstr "밑줄(&U)" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "색상(&C):" @@ -773,7 +773,7 @@ msgid "C&ollate" msgstr "정렬(&O)" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "크기(&Z):" @@ -2248,7 +2248,7 @@ msgid "&File name:" msgstr "파일 이름(&F):" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "찾기(&R)..." @@ -2999,7 +2999,7 @@ msgid "Player" msgstr "플레이어" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "장치" @@ -3544,7 +3544,7 @@ msgid "Joysticks" msgstr "조이스틱" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "사용하지 않음(&D)" @@ -3802,6 +3802,7 @@ msgstr "Wine 커널 DLL" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7265,7 +7266,7 @@ msgid "Hyperlink Information" msgstr "하이퍼링크 정보" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "형식(&T):" @@ -8698,7 +8699,7 @@ msgid "b" msgstr "bit" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9193,7 +9194,7 @@ msgid "&Open:" msgstr "열기(&O):" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "찾아보기(&B)..." @@ -9282,7 +9283,7 @@ msgid "Date deleted" msgstr "지워진 날짜" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "바탕 화면" @@ -9623,7 +9624,7 @@ msgid "Trash" msgstr "휴지통" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "오류" @@ -9654,127 +9655,127 @@ msgid "Select Source" msgstr "원본 선택" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "중국 표준 시간" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "중국 일광 절약 시간" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "북아시아 표준 시간" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "북아시아 일광 절약 시간" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "그루지아 표준 시간" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "그루지아 일광 절약 시간" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "네팔 표준 시간" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "네팔 일광 절약 시간" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "카보베르데 표준 시간" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "카보베르데 일광 절약 시간" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Hawaiian Standard Time" msgid "Haiti Standard Time" msgstr "하와이 표준 시간" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Hawaiian Daylight Time" msgid "Haiti Daylight Time" msgstr "하와이 일광 절약 시간" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "중앙 유럽 표준 시간" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "중앙 유럽 일관 절약 시간" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "모로코 표준 시간" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "모로코 일광 절약 시간" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "중앙 유럽 표준 시간" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "중앙 유럽 일광 절약 시간" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "이란 표준 시간" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "이란 일광 절약 시간" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "나미비아 표준 시간" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "나미비아 일광 절약 시간" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "통가 표준 시간" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "통가 일괄 절약 시간" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "산지 표준 시간 (멕시코)" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "산지 일광 절약 시간 (멕시코)" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "GMT 표준 시간" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "GMT 일광 절약 시간" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "중앙 아시아 표준 시간" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "중앙 아시아 일광 절약 시간" @@ -9786,35 +9787,35 @@ msgid "Arabic Daylight Time" msgstr "아랍 일광 절약 시간" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "마가단 표준 시간" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "마가단 일광 절약 시간" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "뉴펀들랜드 표준 시간" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "뉴펀들랜드 일광 절약 시간" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "서태평양 표준 시간" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "서태평양 일광 절약 시간" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "태평양 표준 시간" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "태평양 일광 절약 시간" @@ -9826,67 +9827,67 @@ msgid "Azerbaijan Daylight Time" msgstr "아제르바이잔 일광 절약 시간" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "사모아 표준 시간" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "사모아 일광 절약 시간" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "칼리닌그라드 표준 시간" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "칼리닌그라드 일광 절약 시간" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "태평양 표준 시간 (멕시코)" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "태평양 일광 절약 시간 (멕시코)" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "중동 표준 시간" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "중동 일광 절약 시간" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "도쿄 표준 시간" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "도쿄 일광 절약 시간" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "라인 제도 표준 시간" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "라인 제도 일광 절약 시간" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "요르단 표준 시간" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "요르단 일광 절약 시간" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "중부 표준 시간" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "중부 일광 절약 시간" @@ -9898,11 +9899,11 @@ msgid "Azores Daylight Time" msgstr "아조레스 일광 절약 시간" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "북아시아 동부 표준 시간" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "북아시아 동부 일광 절약 시간" @@ -9914,95 +9915,107 @@ msgid "Argentina Daylight Time" msgstr "아르헨티나 일광 절약 시간" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "Mauritius Standard Time" +msgid "Marquesas Standard Time" +msgstr "모리셔스 표준 시간" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Mauritius Daylight Time" +msgid "Marquesas Daylight Time" +msgstr "모리셔스 일광 절약 시간" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "미얀마 표준 시간" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "미얀마 일광 절약 시간" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "협정 세계시" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "인도 표준 시간" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "인도 일광 절약 시간" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "GTB 표준 시간" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "GTB 일광 절약 시간" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "터키 표준 시간" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "터키 일광 절약 시간" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "피지 표준 시간" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "피지 일광 절약 시간" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "캐나다 중부 표준 시간" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "캐나다 중부 일광 절약 시간" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "타이베이 표준 시간" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "타이베이 일광 절약 시간" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "서유럽 표준 시간" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "서유럽 일광 절약 시간" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "몬데비데오 표준 시간" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "몬데비데오 일광 절약 시간" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "파키스탄 표준 시간" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "파키스탄 일광 절약 시간" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "코코서스 표준 시간" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "코코서스 일광 절약 시간" @@ -10014,27 +10027,27 @@ msgid "AUS Eastern Daylight Time" msgstr "오스트레일리아 동부 일광 절약 시간" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "중앙 아시아 북부 표준 시간" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "중앙 아시아 북부 일광 절약 시간" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "동부 표준 시간" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "동부 일광 절약 시간" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "중부 표준 시간 (멕시코)" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "중부 일광 절약 시간 (멕시코)" @@ -10046,67 +10059,67 @@ msgid "Atlantic Daylight Time" msgstr "대서양 일광 절약 시간" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "산지 표준 시간" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "산지 일광 절약 시간" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "미국 동부 표준 시간" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "미국 동부 일광 절약 시간" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "태즈매이니아 표준 시간" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "태즈매이니아 일광 절약 시간" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "중앙 아메리카 표준 시간" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "중앙 아메리카 일광 절약 시간" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "미국 산지 표준 시간" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "미국 산지 일광 절약 시간" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "남아프리카 표준 시간" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "남아프리카 일광 절약 시간" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "중부 오스트레일리아 표준 시간" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "중부 오스트레일리아 일광 절약 시간" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "스리랑카 표준 시간" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "스리랑카 일광 절약 시간" @@ -10118,19 +10131,19 @@ msgid "Afghanistan Daylight Time" msgstr "아프가니스탄 일광 절약 시간" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "야쿠츠크 표준 시간" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "야쿠츠크 일광 절약 시간" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "SA 동부 표준 시간" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "SA 동부 일광 절약 시간" @@ -10150,35 +10163,35 @@ msgid "Arabian Daylight Time" msgstr "아라비아 일광 절약 시간" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "러시아 표준 시간" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "러시아 일광 절약 시간" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "로망스 표준 시간" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "로망스 일광 절약 시간" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "예카테린부르크 표준 시간" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "예카테린부르크 일광 절약 시간" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "시리아 표준 시간" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "시리아 일광 절약 시간" @@ -10190,27 +10203,27 @@ msgid "AUS Central Daylight Time" msgstr "오스트레일리아 중부 일광 절약 시간" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "그리니치 표준 시간" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "그리니치 일광 절약 시간" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "울란바토르 표준 시간" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "울란바토르 일광 절약 시간" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "이스라엘 표준 시간" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "이스라엘 일광 절약 시간" @@ -10222,19 +10235,19 @@ msgid "Bangladesh Daylight Time" msgstr "방글라데시 일광 절약 시간" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "SA 태평양 표준 시간" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "SA 태평양 일광 절약 시간" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "서아시아 표준 시간" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "서아시아 일광 절약 시간" @@ -10246,27 +10259,27 @@ msgid "Alaskan Daylight Time" msgstr "알래스카 일광 절약 시간" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "파라과이 표준 시간" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "파라과이 일광 절약 시간" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "날짜 변경선 표준 시간" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "날짜 변경선 일광 절약 시간" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "리비아 표준 시간" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "리비아 일광 절약 시간" @@ -10278,35 +10291,47 @@ msgid "Bahia Daylight Time" msgstr "바이아 일광 절약 시간" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "베네수엘라 표준 시간" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "베네수엘라 일광 절약 시간" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Mountain Standard Time" +msgid "Bougainville Standard Time" +msgstr "산지 표준 시간" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Mountain Daylight Time" +msgid "Bougainville Daylight Time" +msgstr "산지 일광 절약 시간" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "하와이 표준 시간" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "하와이 일광 절약 시간" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "동남 아시아 표준 시간" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "동남 아시아 일광 절약 시간" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "뉴질랜드 표준 시간" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "뉴질랜드 일광 절약 시간" @@ -10322,11 +10347,11 @@ msgid "Aleutian Daylight Time" msgstr "아르헨티나 일광 절약 시간" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "브라질 중부 표준 시간" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "브라질 중부 일광 절약 시간" @@ -10338,131 +10363,143 @@ msgid "Belarus Daylight Time" msgstr "벨로루시 표준 시간" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "SA 서부 표준 시간" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "SA 서부 일광 절약 시간" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "그린란드 표준 시간" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "그린란드 일광 절약 시간" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "이스터 섬 표준 시간" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "이스터 섬 일광 절약 시간" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "이집트 표준 시간" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "이집트 일광 절약 시간" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "모리셔스 표준 시간" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "모리셔스 일광 절약 시간" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "블라디보스토크 표준 시간" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "블라디보스토크 일광 절약 시간" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "싱가포르 표준 시간" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "싱가포르 일광 절약 시간" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "대한민국 표준 시간" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "대한민국 일광 절약 시간" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Easter Island Standard Time" +msgid "Chatham Islands Standard Time" +msgstr "이스터 섬 표준 시간" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Easter Island Daylight Time" +msgid "Chatham Islands Daylight Time" +msgstr "이스터 섬 일광 절약 시간" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "동아프리카 표준 시간" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "동아프리카 일광 절약 시간" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "FLE 표준 시간" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "FLE 일광 절약 시간" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "남아메리카 동부 표준 시간" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "남아메리카 동부 일광 절약 시간" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "중앙 태평양 표준 시간" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "중앙 태평양 일광 절약 시간" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "중앙아프리카 서부 표준 시간" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "중앙아프리카 서부 일광 절약 시간" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "태평양 SA 표준 시간" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "태평양 SA 일광 절약 시간" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "오스트레일리아 동부 표준 시간" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "오스트레일리아 동부 일광 절약 시간" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "오스트레일리아 서부 표준 시간" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "오스트레일리아 서부 일광 절약 시간" @@ -11609,7 +11646,7 @@ msgid "Digi&tal" msgstr "디지털(&T)" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "글꼴(&F)..." @@ -15391,7 +15428,7 @@ msgstr "Wine 설정(%s)을 업데이트하고 있습니다. 잠시만 기다려주십시오..." # 라이선스 문구는 번역하지 않습니다. -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15403,23 +15440,23 @@ "Free Software Foundation; either version 2.1 of the License, or (at your " "option) any later version." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Windows 등록 정보" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "소유자(&O):" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "조직(&Z):" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "프로그램 설정" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15429,55 +15466,55 @@ "은 라이브러리 및 그래픽 탭과 연결되어 시스템 전체 또는 프로그램별 설정을 바" "꿀 수 있습니다." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "프로그램 추가(&C)..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "프로그램 제거(&R)" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "Windows 버전(&W):" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "창 설정" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "전체 화면 창에서 자동으로 마우스 잡기(&M)" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "창관리자가 Wine 창을 꾸미도록 합니다(&D)" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "창관리자가 Wine 창을 관리하도록 합니다(&W)" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "하나의 창 안에서 가상 데스트톱 흉내내기(&E)" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "데스크톱 크기(&S):" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "화면 해상도" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "10pt 크기의 Tahoma 및 연결된 글꼴을 사용하는 텍스트 예제입니다" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL 재정의" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15486,262 +15523,262 @@ "각각의 동적 링크 라이브러리는 내장(Wine이 제공) 또는 네이티브(Windows나 프로" "그램이 제공)로 지정할 수 있습니다." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "새로 재정의할 라이브러리(&N):" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "추가(&D)" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "현재 재정의 DLL 목록(&O):" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "편집(&E)..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "재정의 편집" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "로드 순서" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "내장(&B) (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "네이티브(&N) (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "내장, 네이티브 (&T)" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "네이티브, 내장 (&V)" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "드라이브 문자 선택" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "드라이브 구성" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" "마운트 관리자에 연결할 수 없습니다. 드라이브 구성을 편집할 수 없습니다." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "추가(&D)..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "자동으로 구성(&O)" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "경로(&P):" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "추가 옵션(&C) 보이기" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "장치(&V):" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "찾아보기(&W)..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "레이블(&L):" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "시리얼(&E):" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "숨김 파일(dot 파일) 보기(&S)" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "드라이버 진단" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "기본" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "출력 장치:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "음성 출력 장치:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "입력 장치:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "음성 입력 장치:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "소리 테스트(&T)" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "스피커 설정" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "스피커:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "모양새" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "테마(&T):" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "테마 설치(&I)..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "목록(&E):" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "색상(&O):" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "MIME 형식" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "Wine이 호스트 시스템의 파일 연결을 수정합니다(&A)" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "폴더" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "연결 대상(&L):" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "라이브러리" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "드라이브" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "유닉스 목적 폴더를 선택하십시오." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "추가 옵션 숨기기(&C)" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(테마 선택하지 않음)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "그래픽" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "데스크톱" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "오디오" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "정보" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Wine 설정" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "테마 파일 (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "테마 파일 선택" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "폴더" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "연결 위치" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "%s에 대한 Wine 설정" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "선택된 드라이버: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(없음)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "오디오 테스트 실패!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(시스템 기본)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "5.1 써라운드" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "4 채널" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "스테레오" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "모노" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15749,67 +15786,67 @@ "이 라이브러리의 로드 순서를 변경하는 것을 권장하지 않습니다.\n" "계속하시겠습니까?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "경고: 시스템 라이브러리" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "네이티브" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "내장" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "네이티브, 내장" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "내장, 네이티브" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "사용하지 않음" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "기본 설정" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Wine 프로그램 (*.exe,*.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "전역 설정 사용" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "실행 파일 선택" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "자동으로 찾기" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "로컬 하드 디스크" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "네트워크 공유" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "플로피 디스크" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -15820,11 +15857,11 @@ "각각의 드라이브는 A에서 Z까지의 문자를 가지기 때문에, 26개보다 더 많은 드라이" "브를 추가할 수 없습니다." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "시스템 드라이브" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15837,16 +15874,16 @@ "면 비정상적인 방법으로 종료합니다. 계속 진행려면, C 드라이브를 다시 만드십시" "오!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "문자" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "목표 폴더" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -15856,127 +15893,127 @@ "\n" "드라이브 탭에서 [추가]를 클릭해서 만드는 것을 잊지 마십시오!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "컨트롤 배경" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "컨트롤 문자" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "메뉴 배경" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "메뉴 문자" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "스크롤바" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "선택 영역 배경" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "선택 영역 문자" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "도구팁 배경" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "도구팁 문자" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "창 배경" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "창 문자" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "활성 제목 표시줄" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "활성 제목 표시줄 문자" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "비활성 제목 표시줄" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "비활성 제목 표시줄 문자" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "메시지 상자 문자" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "프로그램 작업공간" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "창 프레임" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "활성 테두리" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "비활성 테두리" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "컨트롤 그림자" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "회색 문자" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "컨트롤 하이라이트" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "컨트롤 그림자 2" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "컨트롤 밝은 부분" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "컨트롤 배경 2" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "집중 추적 항목" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "활성 제목 표시줄 그라데이션" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "비활성 제목 표시줄 그라데이션" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "메뉴 하이라이트" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "메뉴바" diff -Nru wine-development-5.5/po/lt.po wine-development-5.6/po/lt.po --- wine-development-5.5/po/lt.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/lt.po 2020-04-10 18:54:32.000000000 +0000 @@ -5,7 +5,7 @@ "Project-Id-Version: Wine\n" "Report-Msgid-Bugs-To: https://bugs.winehq.org\n" "POT-Creation-Date: N/A\n" -"PO-Revision-Date: 2020-03-04 09:19+0200\n" +"PO-Revision-Date: 2020-03-31 23:40+0300\n" "Last-Translator: Aurimas Fišeras \n" "Language-Team: Lithuanian \n" "Language: lt\n" @@ -49,8 +49,8 @@ msgid "&Modify..." msgstr "&Modifikuoti..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "Pa&šalinti" @@ -69,7 +69,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -152,8 +152,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -191,7 +191,7 @@ "Leidžia įdiegti naują programinę įrangą, ar pašalinti kompiuteryje jau " "įdiegtą." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Programos" @@ -585,7 +585,7 @@ msgid "Font St&yle:" msgstr "Šrifto &stilius:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Dydis:" @@ -601,7 +601,7 @@ msgid "&Underline" msgstr "&Pabraukimas" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Spalva:" @@ -773,7 +773,7 @@ msgid "C&ollate" msgstr "Su&dėst." -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "D&ydis:" @@ -2254,7 +2254,7 @@ msgid "&File name:" msgstr "&Failas:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "Pari&nkti..." @@ -3016,7 +3016,7 @@ msgid "Player" msgstr "Žaidėjas" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Įtaisas" @@ -3563,7 +3563,7 @@ msgid "Joysticks" msgstr "Vairasvirtės" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Išjungti" @@ -3820,6 +3820,7 @@ msgstr "Wine branduolio DLL" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7281,7 +7282,7 @@ msgid "Hyperlink Information" msgstr "Saito informacija" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Tipas:" @@ -8669,7 +8670,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "tašk./col." @@ -9165,7 +9166,7 @@ msgid "&Open:" msgstr "&Atverti:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Parinkti..." @@ -9254,7 +9255,7 @@ msgid "Date deleted" msgstr "Pašalinimo data" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Darbalaukis" @@ -9597,7 +9598,7 @@ msgid "Trash" msgstr "Šiukšlinė" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Klaida" @@ -9628,123 +9629,123 @@ msgid "Select Source" msgstr "Parinkite šaltinį" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "Kinijos juostinis laikas" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "Kinijos vasaros laikas" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "Šiaurės Azijos juostinis laikas" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "Šiaurės Azijos vasaros laikas" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "Gruzijos juostinis laikas" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "Gruzijos vasaros laikas" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "Nepalo juostinis laikas" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "Nepalo vasaros laikas" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "Žaliojo Kyšulio juostinis laikas" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "Žaliojo Kyšulio vasaros laikas" -#: tzres.rc:116 +#: tzres.rc:120 msgid "Haiti Standard Time" msgstr "Haičio juostinis laikas" -#: tzres.rc:117 +#: tzres.rc:121 msgid "Haiti Daylight Time" msgstr "Haičio vasaros laikas" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "Vidurio Europos juostinis laikas" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "Vidurio Europos vasaros laikas" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "Maroko juostinis laikas" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "Maroko vasaros laikas" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "Vidurio Europos juostinis laikas" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "Vidurio Europos vasaros laikas" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "Irano juostinis laikas" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "Irano vasaros laikas" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "Namibijos juostinis laikas" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "Namibijos vasaros laikas" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "Tongos juostinis laikas" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "Tongos vasaros laikas" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "Kalnų juostinis laikas (Meksika)" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "Kalnų vasaros laikas (Meksika)" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "Grinvičo laikas" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "Grinvičo vasaros laikas" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "Vidurio Azijos juostinis laikas" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "Vidurio Azijos vasaros laikas" @@ -9756,35 +9757,35 @@ msgid "Arabic Daylight Time" msgstr "Arabų vasaros laikas" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "Magadano juostinis laikas" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "Magadano vasaros laikas" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "Niufaundlando juostinis laikas" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "Niufaundlando vasaros laikas" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "Vakarų Ramiojo vandenyno juostinis laikas" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "Vakarų Ramiojo vandenyno vasaros laikas" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "Ramiojo vandenyno juostinis laikas" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "Ramiojo vandenyno vasaros laikas" @@ -9796,67 +9797,67 @@ msgid "Azerbaijan Daylight Time" msgstr "Azerbaidžano vasaros laikas" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "Samoa juostinis laikas" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "Samoa vasaros laikas" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "Karaliaučiaus juostinis laikas" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "Karaliaučiaus vasaros laikas" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "Ramiojo vandenyno juostinis laikas (Meksika)" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "Ramiojo vandenyno vasaros laikas (Meksika)" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "Vidurinių Rytų juostinis laikas" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "Vidurinių Rytų vasaros laikas" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "Tokijo juostinis laikas" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "Tokijo vasaros laikas" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "Linijinių salų juostinis laikas" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "Linijinių salų vasaros laikas" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "Jordanijos juostinis laikas" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "Jordanijos vasaros laikas" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "Centrinis juostinis laikas" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "Centrinis vasaros laikas" @@ -9868,11 +9869,11 @@ msgid "Azores Daylight Time" msgstr "Azorų vasaros laikas" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "Šiaurės Azijos rytų juostinis laikas" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "Šiaurės Azijos rytų vasaros laikas" @@ -9884,95 +9885,103 @@ msgid "Argentina Daylight Time" msgstr "Argentinos vasaros laikas" -#: tzres.rc:150 +#: tzres.rc:142 +msgid "Marquesas Standard Time" +msgstr "Markizo juostinis laikas" + +#: tzres.rc:143 +msgid "Marquesas Daylight Time" +msgstr "Markizo vasaros laikas" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "Mianmaro juostinis laikas" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "Mianmaro vasaros laikas" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "Pasaulinis koordinuotasis laikas" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "Indijos juostinis laikas" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "Indijos vasaros laikas" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "GTB juostinis laikas" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "GTB vasaros laikas" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "Turkijos juostinis laikas" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "Turkijos vasaros laikas" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "Fidžio juostinis laikas" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "Fidžio vasaros laikas" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "Kanados centrinis juostinis laikas" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "Kanados centrinis vasaros laikas" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "Taipėjaus juostinis laikas" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "Taipėjaus vasaros laikas" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "Vakarinės Europos juostinis laikas" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "Vakarinės Europos vasaros laikas" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "Montevidėjo juostinis laikas" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "Montevidėjo vasaros laikas" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "Pakistano juostinis laikas" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "Pakistano vasaros laikas" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "Kaukazo juostinis laikas" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "Kaukazo vasaros laikas" @@ -9984,27 +9993,27 @@ msgid "AUS Eastern Daylight Time" msgstr "AUS Rytinis vasaros laikas" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "Š. Vidurio Azijos juostinis laikas" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "Š. Vidurio Azijos vasaros laikas" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "Rytinis juostinis laikas" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "Rytinis vasaros laikas" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "Centrinis juostinis laikas (Meksika)" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "Centrinis vasaros laikas (Meksika)" @@ -10016,67 +10025,67 @@ msgid "Atlantic Daylight Time" msgstr "Atlanto vandenyno vasaros laikas" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "Kalnų juostinis laikas" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "Kalnų vasaros laikas" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "JAV Rytinis juostinis laikas" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "JAV Rytinis vasaros laikas" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "Tasmanijos juostinis laikas" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "Tasmanijos vasaros laikas" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "Centrinės Amerikos juostinis laikas" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "Centrinės Amerikos vasaros laikas" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "JAV Kalnų juostinis laikas" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "JAV Kalnų vasaros laikas" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "Pietų Afrikos juostinis laikas" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "Pietų Afrikos vasaros laikas" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "Vid. Australijos juostinis laikas" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "Vid. Australijos vasaros laikas" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "Šri Lankos juostinis laikas" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "Šri Lankos vasaros laikas" @@ -10088,19 +10097,19 @@ msgid "Afghanistan Daylight Time" msgstr "Afganistano vasaros laikas" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "Jakutsko juostinis laikas" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "Jakutsko vasaros laikas" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "PA Rytinis juostinis laikas" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "PA Rytinis vasaros laikas" @@ -10120,35 +10129,35 @@ msgid "Arabian Daylight Time" msgstr "Arabų vasaros laikas" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "Rusijos juostinis laikas" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "Rusijos vasaros laikas" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "Romanų juostinis laikas" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "Romanų vasaros laikas" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "Jekaterinburgo juostinis laikas" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "Jekaterinburgo vasaros laikas" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "Sirijos juostinis laikas" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "Sirijos vasaros laikas" @@ -10160,27 +10169,27 @@ msgid "AUS Central Daylight Time" msgstr "AUS Centrinis vasaros laikas" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "Grinvičo juostinis laikas" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "Grinvičo vasaros laikas" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "Ulan Batoro juostinis laikas" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "Ulan Batoro vasaros laikas" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "Izraelio juostinis laikas" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "Izraelio vasaros laikas" @@ -10192,19 +10201,19 @@ msgid "Bangladesh Daylight Time" msgstr "Bangladešo vasaros laikas" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "PA Ramiojo vandenyno juostinis laikas" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "PA Ramiojo vandenyno vasaros laikas" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "Vakarų Azijos juostinis laikas" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "Vakarų Azijos vasaros laikas" @@ -10216,27 +10225,27 @@ msgid "Alaskan Daylight Time" msgstr "Aliaskos vasaros laikas" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "Paragvajaus juostinis laikas" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "Paragvajaus vasaros laikas" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "Datos keitimosi linijos juostinis laikas" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "Datos keitimosi linijos vasaros laikas" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "Libijos juostinis laikas" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "Libijos vasaros laikas" @@ -10248,35 +10257,43 @@ msgid "Bahia Daylight Time" msgstr "Bahijos vasaros laikas" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "Venesuelos juostinis laikas" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "Venesuelos vasaros laikas" -#: tzres.rc:118 +#: tzres.rc:60 +msgid "Bougainville Standard Time" +msgstr "Bugenvilio juostinis laikas" + +#: tzres.rc:61 +msgid "Bougainville Daylight Time" +msgstr "Bugenvilio vasaros laikas" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "Havajų juostinis laikas" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "Havajų vasaros laikas" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "Pietryčių Azijos juostinis laikas" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "Pietryčių Azijos vasaros laikas" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "Naujosios Zelandijos juostinis laikas" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "Naujosios Zelandijos vasaros laikas" @@ -10288,11 +10305,11 @@ msgid "Aleutian Daylight Time" msgstr "Aleutų vasaros laikas" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "Centrinės Brazilijos juostinis laikas" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "Centrinės Brazilijos vasaros laikas" @@ -10304,131 +10321,139 @@ msgid "Belarus Daylight Time" msgstr "Baltarusijos vasaros laikas" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "PA Vakarinis juostinis laikas" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "PA Vakarinis vasaros laikas" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "Grenlandijos juostinis laikas" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "Grenlandijos vasaros laikas" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "Velykų salos juostinis laikas" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "Velykų salos vasaros laikas" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "Egipto juostinis laikas" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "Egipto vasaros laikas" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "Mauricijaus juostinis laikas" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "Mauricijaus vasaros laikas" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "Vladivostoko juostinis laikas" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "Vladivostoko vasaros laikas" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "Singapūro juostinis laikas" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "Singapūro vasaros laikas" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "Korėjos juostinis laikas" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "Korėjos vasaros laikas" -#: tzres.rc:88 +#: tzres.rc:86 +msgid "Chatham Islands Standard Time" +msgstr "Čatamo salų juostinis laikas" + +#: tzres.rc:87 +msgid "Chatham Islands Daylight Time" +msgstr "Čatamo salų vasaros laikas" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "R. Afrikos juostinis laikas" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "R. Afrikos vasaros laikas" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "SLE juostinis laikas" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "SLE vasaros laikas" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "R. Pietų Amerikos juostinis laikas" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "R. Pietų Amerikos vasaros laikas" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "Vidurio Ramiojo vandenyno juostinis laikas" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "Vidurio Ramiojo vandenyno vasaros laikas" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "V. Vidurio Afrikos juostinis laikas" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "V. Vidurio Afrikos vasaros laikas" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "Ramiojo vandenyno PA juostinis laikas" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "Ramiojo vandenyno PA vasaros laikas" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "R. Australijos juostinis laikas" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "R. Australijos vasaros laikas" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "V. Australijos juostinis laikas" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "V. Australijos vasaros laikas" @@ -11592,7 +11617,7 @@ msgid "Digi&tal" msgstr "Skai&tmeninis" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "Š&riftas..." @@ -15392,7 +15417,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "„Wine“ konfigūracija (%s) atnaujinama, palaukite..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15404,23 +15429,23 @@ "kurios paskelbtos Laisvosios programinės įrangos fondo (FSF); 2.1-osios arba " "(Jūsų pasirinkimu) bet kurios vėlesnės licencijos versijos sąlygomis." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "„Windows“ registracijos informacija" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "Savininkas:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organizacija:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Programų nuostatos" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15431,55 +15456,55 @@ "galima keisti sistemines nuostatas ar kiekvienos programos nuostatas " "atskirai." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "&Pridėti programą..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "Pa&šalinti programą" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "„Windows“ &versija:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Langų nuostatos" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Automatiškai &užvaldyti pelę viso ekrano languose" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Leisti langų tvarkytuvei &dekoruoti langus" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Leisti langų tvarkytuvei &kontroliuoti langus" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Emuliuoti virtualų darbalaukį" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Darbalaukio d&ydis:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Ekrano skiriamoji geba" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Tai yra pavyzdinis tekstas naudojantis 10 taškų Tahoma" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL nustelbimai" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15488,55 +15513,55 @@ "Kiekviena dinaminė biblioteka gali būti įtaisyta (pateikta su „Wine“) ar " "sava (paimta iš „Windows“ ar pateikta programos)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Naujas nustelbimas bibliotekai:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "&Pridėti" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Egzistuojantys n&ustelbimai:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Redaguoti..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Redaguoti nustelbimą" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Įkėlimo tvarka" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Įtaisyta („Wine“)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Sava („Windows“)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "Į&taisyta, po to sava" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "S&ava, po to įtaisyta" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Parinkite disko raidę" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Diskų konfigūravimas" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." @@ -15544,207 +15569,207 @@ "Nepavyko prisijungti prie diskų tvarkytuvės, diskų konfigūracija negali būti " "redaguojama." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "Pri&dėti..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "&Automatiškai aptikti" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Kelias:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "Rodyti papild&omas" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "Įtai&sas:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "Parinkti..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "Va&rdas:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "N&umeris:" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "Rodyti &failus su tašku" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Tvarkyklės diagnostika" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Numatytosios reikšmės" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Išvedimo įtaisas:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Balso išvedimo įtaisas:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Įvedimo įtaisas:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Balso įvedimo įtaisas:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Testuoti garsą" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Garsiakalbių konfigūravimas" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Garsiakalbiai:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Išvaizda" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Apipavidalinimas:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Įdiegti apipavidalinimą..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "&Elementas:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "S&palva:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "MIME tipai" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "Valdyti failų susie&jimus" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Aplankai" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "S&usieti su:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Bibliotekos" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Diskai" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Išrinkite Unix paskirties aplanką." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "Slėpti papild&omas" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(nėra apipavidalinimo)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Grafika" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Darbalaukio integravimas" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Garsas" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Apie" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "„Wine“ konfigūravimas" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Apipavidalinimo failai (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Pasirinkite apipavidalinimo failą" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Aplankas" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Susietas su" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "„Wine“ konfigūravimas: %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Parinkta tvarkyklė: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(jokia)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Garso testas nepavyko!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Sistemos numatytasis)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "Erdviniai 5.1" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "Kvadrofoniniai" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Stereofoniniai" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Monofoninis" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15752,67 +15777,67 @@ "Keisti šios bibliotekos įkėlimo tvarką nerekomenduojama.\n" "Ar tikrai norite tai padaryti?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Įspėjimas: sisteminė biblioteka" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "sava" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "įtaisyta" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "sava, įtaisyta" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "įtaisyta, sava" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "išjungta" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Numatytosios nuostatos" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "„Wine“ programos (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Naudoti globalias nuostatas" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Pasirinkite vykdomąjį failą" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Automatiškai aptikti" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Vietinis standusis diskas" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Tinklo diskas" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Diskelis" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -15823,11 +15848,11 @@ "Kiekvienas diskas turi turėti raidę, nuo A iki Z, todėl negalite turėti " "daugiau nei 26." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Sisteminis diskas" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15839,16 +15864,16 @@ "Daugelis „Windows“ programų tikisi, kad „C“ diskas egzistuoja, ir neveikia, " "kai jis neegzistuoja. Jei tęsite, nepamirškite jo sukurti iš naujo!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Raidė" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Paskirties aplankas" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -15858,127 +15883,127 @@ "\n" "Nepamirškite paspausti „Pridėti“ diskų kortelėje, kad jį sukurtumėte!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Valdiklių fonas" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Valdiklių tekstas" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Meniu fonas" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Meniu tekstas" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Slankjuostė" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Žymėjimo fonas" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Žymėjimo tekstas" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Patarimo fonas" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Patarimo tekstas" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Lango fonas" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Lango tekstas" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Aktyvi lango antraštės juosta" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Aktyvios lango antraštės tekstas" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Neaktyvi lango antraštės juosta" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Neaktyvios lango antraštės tekstas" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Pranešimo lango tekstas" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Programos erdvė" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Lango rėmelis" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Aktyvi kraštinė" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Neaktyvi kraštinė" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Valdiklių šešėlis" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Pilkas tekstas" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Valdiklių paryškinimas" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Valdiklių tamsus šešėlis" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Valdiklių šviesumas" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Valdiklių alternatyvus fonas" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Sekamas elementas" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Aktyvios lango antraštės gradientas" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Neaktyvios lango antraštės gradientas" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Meniu paryškinimas" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Meniu juosta" diff -Nru wine-development-5.5/po/ml.po wine-development-5.6/po/ml.po --- wine-development-5.5/po/ml.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/ml.po 2020-04-10 18:54:32.000000000 +0000 @@ -47,8 +47,8 @@ msgid "&Modify..." msgstr "പരിഷ്ക്കരിക്കുക... (&M)" -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "നീക്കംചെയ്യുക (&R)" @@ -67,7 +67,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -143,8 +143,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -177,7 +177,7 @@ "പുതിയ സോഫ്റ്റ്വെയർ ഇൻസ്റ്റാൾ ചെയ്യാൻ അല്ലെങ്കിൽ, നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ നിന്നും നിലവിലുള്ള " "സോഫ്റ്റ്വെയർ നീക്കംചെയ്യാൻ നിങ്ങളെ അനുവദിക്കുന്നു." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "അപ്ലിക്കേഷനുകൾ" @@ -573,7 +573,7 @@ msgid "Font St&yle:" msgstr "" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "" @@ -589,7 +589,7 @@ msgid "&Underline" msgstr "" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "" @@ -761,7 +761,7 @@ msgid "C&ollate" msgstr "" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "" @@ -2217,7 +2217,7 @@ msgid "&File name:" msgstr "" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "" @@ -2933,7 +2933,7 @@ msgid "Player" msgstr "" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "" @@ -3478,7 +3478,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "" @@ -3730,6 +3730,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "" @@ -7202,7 +7203,7 @@ msgid "Hyperlink Information" msgstr "" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "" @@ -8562,7 +8563,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "" @@ -9062,7 +9063,7 @@ msgid "&Open:" msgstr "" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "" @@ -9152,7 +9153,7 @@ msgid "Date deleted" msgstr "" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "" @@ -9466,7 +9467,7 @@ msgid "Trash" msgstr "" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "" @@ -9497,123 +9498,123 @@ msgid "Select Source" msgstr "" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 msgid "Haiti Standard Time" msgstr "" -#: tzres.rc:117 +#: tzres.rc:121 msgid "Haiti Daylight Time" msgstr "" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9625,35 +9626,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9665,67 +9666,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -9737,11 +9738,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -9753,95 +9754,103 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +msgid "Marquesas Standard Time" +msgstr "" + +#: tzres.rc:143 +msgid "Marquesas Daylight Time" +msgstr "" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -9853,27 +9862,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -9885,67 +9894,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -9957,19 +9966,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -9989,35 +9998,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10029,27 +10038,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10061,19 +10070,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10085,27 +10094,27 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10117,35 +10126,43 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +msgid "Bougainville Standard Time" +msgstr "" + +#: tzres.rc:61 +msgid "Bougainville Daylight Time" +msgstr "" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10157,11 +10174,11 @@ msgid "Aleutian Daylight Time" msgstr "" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10173,131 +10190,139 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +msgid "Chatham Islands Standard Time" +msgstr "" + +#: tzres.rc:87 +msgid "Chatham Islands Daylight Time" +msgstr "" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11329,7 +11354,7 @@ msgid "Digi&tal" msgstr "_ഡിജിറ്റല്‍" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "_അക്ഷരസഞ്ചയം..." @@ -14754,7 +14779,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "" -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -14762,418 +14787,418 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 #, fuzzy msgid "Windows registration information" msgstr "_അക്ഷരസഞ്ചയം..." -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." msgstr "" -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "" -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 #, fuzzy msgid "&Edit..." msgstr "_അക്ഷരസഞ്ചയം..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "" -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "" -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "" -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" msgstr "" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15181,144 +15206,144 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "" -#: winecfg.rc:111 +#: winecfg.rc:110 #, fuzzy msgid "Active Title Bar" msgstr "റ്റൈറ്റില്‍ബാര്‍ _ഇല്ലാതെ" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "" diff -Nru wine-development-5.5/po/nb_NO.po wine-development-5.6/po/nb_NO.po --- wine-development-5.5/po/nb_NO.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/nb_NO.po 2020-04-10 18:54:32.000000000 +0000 @@ -48,8 +48,8 @@ msgid "&Modify..." msgstr "&Endre..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Fjern" @@ -68,7 +68,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -151,8 +151,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -190,7 +190,7 @@ "computer." msgstr "Lar deg installere ny programvare eller fjerne installerte programmer." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Programmer" @@ -584,7 +584,7 @@ msgid "Font St&yle:" msgstr "Skriftst&il:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Størrelse:" @@ -600,7 +600,7 @@ msgid "&Underline" msgstr "&Understreket" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Farge:" @@ -772,7 +772,7 @@ msgid "C&ollate" msgstr "S&orter" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "St&ørrelse:" @@ -2249,7 +2249,7 @@ msgid "&File name:" msgstr "&Filnavn:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "&Bla..." @@ -3018,7 +3018,7 @@ msgid "Player" msgstr "Avspiller" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Enhet" @@ -3566,7 +3566,7 @@ msgid "Joysticks" msgstr "Styrespaker" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Deaktiver" @@ -3823,6 +3823,7 @@ msgstr "Wine kjerne-DLL" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7372,7 +7373,7 @@ msgid "Hyperlink Information" msgstr "Informasjon om koblingen" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Type:" @@ -8807,7 +8808,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9303,7 +9304,7 @@ msgid "&Open:" msgstr "&Åpne:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Bla..." @@ -9392,7 +9393,7 @@ msgid "Date deleted" msgstr "Dato slettet" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Skrivebord" @@ -9734,7 +9735,7 @@ msgid "Trash" msgstr "Papirkurv" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Feil" @@ -9765,137 +9766,137 @@ msgid "Select Source" msgstr "Velg kilde" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "Dato og klokkeslett" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "Dato og klokkeslett" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "Sentral-europeisk" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "Sentral-europeisk" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "Sentral-europeisk" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "Sentral-europeisk" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "&Standardlinje" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9907,35 +9908,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9947,67 +9948,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10019,11 +10020,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10035,97 +10036,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "&Standardlinje" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "Dato og klokkeslett" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "&Standardlinje" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10137,27 +10150,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10169,67 +10182,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10241,19 +10254,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10273,35 +10286,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10313,27 +10326,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10345,19 +10358,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10369,29 +10382,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "Dato og klokkeslett" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10403,35 +10416,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "Dato og klokkeslett" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "Dato og klokkeslett" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10447,11 +10472,11 @@ msgid "Aleutian Daylight Time" msgstr "Dato og klokkeslett" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10463,137 +10488,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "Dato og klokkeslett" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "Dato og klokkeslett" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "Dato og klokkeslett" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "Dato og klokkeslett" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "&Standardlinje" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11748,7 +11785,7 @@ msgid "Digi&tal" msgstr "Digi&tal" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "Skri&ft..." @@ -15549,7 +15586,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Vent mens Wine-oppsettet i %s blir oppdatert..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15561,23 +15598,23 @@ "Foundation, enten versjon 2.1 av denne Lisensen, eller (hvis du ønsker det) " "en nyere versjon." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Brukerinformasjon for Windows" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Eier:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organi&sasjon:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Programminnstillinger" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15587,55 +15624,55 @@ "fanen er koblet med bibliotek- og grafikkfanene, sånn at du kan endre " "innstillinger for hele systemet eller enkelte programmer der også." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "Legg til progr&am..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "Fje&rn program" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Windows-versjon:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Vinduinnstillinger" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Fang &musen automatisk i fullskjermvinduer" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Tillat vindusbehandleren å &dekorere vinduer" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Tillat &vindusbehandleren å kontrollere vinduene" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "Vis &et virtuelt skrivebord" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "&Størrelse:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Skjermoppløsning" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Forhåndsvisning av tekst med 10 punkters Tahoma" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL-overstyring" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15645,55 +15682,55 @@ "innebygget (fra Wine) eller innfødt (tatt fra Windows eller gitt av et " "program)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Ny overstyring for bibliotek:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "&Legg til" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Gjeldende &overstyringer:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "R&ediger..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Rediger overstyring" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Lastingsrekkefølge" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "Inne&bygget (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "I&nnfødt (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "Innebygge&t så innfødt" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Innfød&dt så innebygget" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Velg stasjonsbokstav" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Oppsett av stasjoner" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." @@ -15701,207 +15738,207 @@ "Klarte ikke koble til monteringsbehandleren; stasjonsoppsettet kan derfor " "ikke redigeres." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "&Legg til..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "Finn aut&omatisk" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Sti:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "Avansert &visning" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "En&het:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "&Bla..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "Vo&lumnavn:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "S&erienummer:" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "Vi&s .-filer" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Driverdiagnostikk" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Standardverdier" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Ut-enhet:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Ut-enhet for tale:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Inn-enhet:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Inn-enhet for tale:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Test" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Høytaleroppsett" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Høytalere:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Utseende" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Tema:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Installer tema..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "&Element:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "&Farge:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "MIME typer" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "Behandle fil &assosiasjoner" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Mappe" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "Pek ti&l:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Biblioteker" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Stasjoner" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Velg Unix-målkatalogen." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "Enkel &visning" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Intet tema)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Grafikk" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Skrivebordsintegrering" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Lyd" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Om" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Oppsett av Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Temafiler (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Velg en temafil" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Mappe" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Peker til" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Oppsett av Wine for %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Valgt driver: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Ingen)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Lydtesten feilet!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Standard)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "5.1 Surround" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "Quadraphonic" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Stereo" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Mono" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15909,67 +15946,67 @@ "Endring av lastingsrekkefølgen for dette biblioteket anbefales ikke.\n" "Er du sikker på at du vil gjøre det?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Advarsel: systembibliotek" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "innfødt" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "innebygget" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "innfødt, innebygget" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "innebygget, innfødt" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "slått av" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Globale innstillinger" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Wine-programmer (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Bruk globale innstillinger" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Velg en programfil" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Finn automatisk" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Lokal harddisk" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Nettverksressurs" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Diskett" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -15979,11 +16016,11 @@ "\n" "Hver stasjon må ha en bokstav fra A til Z, så 26 stasjoner er det meste." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Systemstasjon" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15995,16 +16032,16 @@ "De fleste Windows-programmer forventer at C finnes, og lager bråk hvis den " "ikke er der. Husk å lage den på nytt hvis du fortsetter!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Bokstav" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Målmappe" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16014,127 +16051,127 @@ "\n" "Husk å trykke Legg til i stasjonsfanen for å lage en!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Kontrollerbakgrunn" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Kontrollertekst" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Menybakgrunn" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Menytekst" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Rullefelt" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Bakgrunn for merking" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Merket tekst" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Bakgrunn for verktøytips" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Tekst i verktøytips" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Vindusbakgrunn" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Vindusteksts" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Aktiv tittellinje" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Aktiv titteltekst" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Inaktiv tittellinje" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Inaktiv titteltekst" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Meldingsvindutekst" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Arbeidsområde i program" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Vindusramme" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Aktiv kant" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Inaktiv kant" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Kontrollerskygge" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Grå tekst" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Merket kontroller" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Mørk skygge i kontroller" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Kontrollerlys" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Bakgrunn for skiftende kontroller" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Merket element" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Gradient for aktiv tittellinje" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Gradient for inaktiv tittellinje" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Menymerking" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Menylinje" diff -Nru wine-development-5.5/po/nl.po wine-development-5.6/po/nl.po --- wine-development-5.5/po/nl.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/nl.po 2020-04-10 18:54:32.000000000 +0000 @@ -47,8 +47,8 @@ msgid "&Modify..." msgstr "&Wijzigen..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Verwijderen" @@ -67,7 +67,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -152,8 +152,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -193,7 +193,7 @@ "Hiermee installeert u nieuwe software, of verwijdert u bestaande software " "van uw computer." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Toepassingen" @@ -593,7 +593,7 @@ msgid "Font St&yle:" msgstr "Teken&stijl:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "Tekstgrootte:" @@ -609,7 +609,7 @@ msgid "&Underline" msgstr "&Onderstrepen" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "Kleuren:" @@ -785,7 +785,7 @@ msgid "C&ollate" msgstr "&Sorteren" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Grootte:" @@ -2267,7 +2267,7 @@ msgid "&File name:" msgstr "Bestands&naam:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "Bladeren..." @@ -3057,7 +3057,7 @@ msgid "Player" msgstr "Speler" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Apparaat" @@ -3617,7 +3617,7 @@ msgid "Joysticks" msgstr "Joysticks" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Uitzetten" @@ -3882,6 +3882,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7511,7 +7512,7 @@ msgid "Hyperlink Information" msgstr "Webverwijzing Informatie" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Soort:" @@ -9100,7 +9101,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9598,7 +9599,7 @@ msgid "&Open:" msgstr "&Openen:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Bladeren..." @@ -9701,7 +9702,7 @@ msgid "Date deleted" msgstr "Datum verwijderd" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Bureaublad" @@ -10043,7 +10044,7 @@ msgid "Trash" msgstr "Prullenbak" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Fout" @@ -10076,137 +10077,137 @@ msgid "Select Source" msgstr "Nieuwe Map" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "Datum en tijd" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "Datum en tijd" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "Centraal europees" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "Centraal europees" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "Centraal europees" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "Centraal europees" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "&Standaardbalk" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10218,35 +10219,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10258,67 +10259,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10330,11 +10331,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10346,97 +10347,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "&Standaardbalk" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "Datum en tijd" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "&Standaardbalk" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10448,27 +10461,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10480,67 +10493,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10552,19 +10565,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10584,35 +10597,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10624,27 +10637,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10656,19 +10669,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10680,29 +10693,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "Datum en tijd" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10714,35 +10727,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "Datum en tijd" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "Datum en tijd" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10758,11 +10783,11 @@ msgid "Aleutian Daylight Time" msgstr "Datum en tijd" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10774,137 +10799,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "Datum en tijd" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "Datum en tijd" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "Datum en tijd" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "Datum en tijd" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "&Standaardbalk" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -12133,7 +12170,7 @@ msgid "Digi&tal" msgstr "&Digitaal" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Lettertype..." @@ -16035,7 +16072,7 @@ msgstr "" "De Wine configuratie in %s wordt bijgewerkt, even geduld alstublieft..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -16047,23 +16084,23 @@ "gepubliceerd door de Free Software Foundation; versie 2.1 van de licentie, " "of (naar keuze) een latere versie." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Windows registratie-informatie" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "Eigenaar:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organisatie:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Toepassingsinstellingen" -#: winecfg.rc:155 +#: winecfg.rc:154 #, fuzzy msgid "" "Wine can mimic different Windows versions for each application. This tab is " @@ -16075,58 +16112,58 @@ "systeemwijde als applicatiespecifieke instellingen in deze tabs mogelijk te " "maken." -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy #| msgid "&Add application..." msgid "Add appli&cation..." msgstr "Toepassing toevoegen..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "Toepassing verwijderen" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "Windowsversie:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Vensterinstellingen" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Indien volledig scherm, vang de &muis automatisch af" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Laat de window manager de vensters &decoreren" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Laat de window manager de vensters beheren" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "Emuleer een virtueel bureaublad" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Afmetingen:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Schermresolutie" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Dit is een tekstvoorbeeld in Tahoma met puntgrootte 10" -#: winecfg.rc:191 +#: winecfg.rc:190 #, fuzzy msgid "DLL overrides" msgstr "DLL Overrides " -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -16136,59 +16173,59 @@ "dan wel \"native\" moet zijn. De instelling voor \"*\" geldt voor alle niet " "expliciet genoemde bestanden." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "Nieuwe override voor dll:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Bestaande overrides:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Bewerken..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Override bewerken" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Laadvolgorde" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "Inge&bouwd (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "Wi&ndows (MSWindows)" -#: winecfg.rc:211 +#: winecfg.rc:210 #, fuzzy #| msgid "Bui<in then Native" msgid "Buil&tin then Native" msgstr "Bui<in dan Native" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Nati&ve dan Builtin" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Selecteer Stationsletter" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy #| msgid "Wine configuration" msgid "Drive configuration" msgstr "Wine configuratie" -#: winecfg.rc:233 +#: winecfg.rc:232 #, fuzzy #| msgid "" #| "Failed to connect to the mount manager, the drive configuration cannot be " @@ -16200,221 +16237,221 @@ "Kon niet verbinden met de mount manager, de schijfconfiguratie kan niet " "worden bewerkt." -#: winecfg.rc:236 +#: winecfg.rc:235 #, fuzzy #| msgid "&Add..." msgid "A&dd..." msgstr "&Toevoegen..." -#: winecfg.rc:238 +#: winecfg.rc:237 #, fuzzy #| msgid "Autodetect" msgid "Aut&odetect" msgstr "&Automatisch detecteren" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Pad:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 #, fuzzy #| msgid "Show &Advanced" msgid "Show Advan&ced" msgstr "Toon uitgebreid" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "A&pparaat:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "B&laderen..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Naam:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "S&erienummer:" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy #| msgid "Show &dot files" msgid "&Show dot files" msgstr "Toon \".\" bestanden" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Aansturingsdiagnostiek" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Standaardinstellingen" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Uitvoer apparaat:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Stemuitvoer:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Invoer apparaat:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Steminvoer:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "Geluidstest" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy #| msgid "Wine configuration" msgid "Speaker configuration" msgstr "Wine configuratie" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Uiterlijk" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "Thema:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "Thema installeren..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "Onderdeel:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "Kleur:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Mappen" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "Verwijs naar:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Bibliotheken" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Stations" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Selecteer de Unix doelmap a.u.b." -#: winecfg.rc:37 +#: winecfg.rc:36 #, fuzzy #| msgid "Hide &Advanced" msgid "Hide Advan&ced" msgstr "Verberg uitgebreid" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Geen Thema)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Grafisch" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Desktop Integratie" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Geluid" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Over Wine" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Wine configuratie" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Thema-bestanden (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Thema-bestanden kiezen" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Persoonlijke map" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Verwijst naar" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Wine configuratie voor %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Geselecteerd stuurprogramma: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Geen)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Audiotest is mislukt!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Standaardinstelling van het systeem)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 #, fuzzy #| msgid "graphic" msgid "Quadraphonic" msgstr "grafisch" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -16422,67 +16459,67 @@ "Veranderen van de laadvolgorde van deze bibliotheek wordt niet aanbevolen\n" ". Weet u zeker dat u dit wilt doen?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Waarschuwing: systeembibliotheek" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "native" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "ingebouwd" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "windows, ingebouwd" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "ingebouwd, windows" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "uitgeschakeld" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Standaardinstellingen" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Wine toepassingen (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Gebruik globale instellingen" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Selecteer een uitvoerbaar bestand" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "&Automatisch detecteren" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Lokaal station" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Netwerkverbinding" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Diskettestation" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "Cd-rom" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -16493,11 +16530,11 @@ "Elk station moet een letter van A tot Z hebben dus er kunnen niet meer dan " "26 zijn." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Systeem station" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy #| msgid "" #| "Are you sure you want to delete drive C?\n" @@ -16516,18 +16553,18 @@ "met onverwachte resultaten, afbreken. Als u doorgaat vergeet dan niet om " "station C opnieuw aan te maken!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Letter" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "New Folder" msgid "Target folder" msgstr "Nieuwe Map" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16538,127 +16575,127 @@ "Vergeet niet om m.b.v. de knop 'Toevoegen' in de Stations tab een C station " "aan te maken!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Instellingen Achtergrond" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Instellingen Tekst" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Menu Achtergrond" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Menu Tekst" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Scrollbalk" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Selectie Achtergrond" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Selectie Tekst" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Tooltip Achtergrond" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Tooltip Tekst" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Venster Achtergrond" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Venster Tekst" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Actieve Titelbalk" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Actieve Titeltekst" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Inactieve Titelbalk" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Inactieve Titeltekst" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Meldingsvenster Tekst" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Applicatie Werkruimte" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Vensterraamwerk" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Actieve Rand" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Inactieve Rand" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Knopschaduw" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Grijze Tekst" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Knoppen Gemarkeerd" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Knoppen Donkere Schaduw" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Knoppen Licht" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Knoppen Alternatieve Achtergrond" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Hot-Tracked Onderdeel" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Actieve Titelbalk Verloop" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Inactieve Titelbalk Verloop" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Menu Gemarkeerd" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Menubalk" diff -Nru wine-development-5.5/po/or.po wine-development-5.6/po/or.po --- wine-development-5.5/po/or.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/or.po 2020-04-10 18:54:32.000000000 +0000 @@ -43,8 +43,8 @@ msgid "&Modify..." msgstr "" -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "" @@ -63,7 +63,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -140,8 +140,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -172,7 +172,7 @@ "computer." msgstr "" -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "" @@ -571,7 +571,7 @@ msgid "Font St&yle:" msgstr "" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "" @@ -587,7 +587,7 @@ msgid "&Underline" msgstr "" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "" @@ -759,7 +759,7 @@ msgid "C&ollate" msgstr "" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "" @@ -2215,7 +2215,7 @@ msgid "&File name:" msgstr "" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "" @@ -2931,7 +2931,7 @@ msgid "Player" msgstr "" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "" @@ -3476,7 +3476,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "" @@ -3728,6 +3728,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "" @@ -7194,7 +7195,7 @@ msgid "Hyperlink Information" msgstr "" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "" @@ -8548,7 +8549,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "" @@ -9048,7 +9049,7 @@ msgid "&Open:" msgstr "" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "" @@ -9138,7 +9139,7 @@ msgid "Date deleted" msgstr "" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "" @@ -9452,7 +9453,7 @@ msgid "Trash" msgstr "" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "" @@ -9483,123 +9484,123 @@ msgid "Select Source" msgstr "" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 msgid "Haiti Standard Time" msgstr "" -#: tzres.rc:117 +#: tzres.rc:121 msgid "Haiti Daylight Time" msgstr "" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9611,35 +9612,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9651,67 +9652,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -9723,11 +9724,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -9739,95 +9740,103 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +msgid "Marquesas Standard Time" +msgstr "" + +#: tzres.rc:143 +msgid "Marquesas Daylight Time" +msgstr "" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -9839,27 +9848,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -9871,67 +9880,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -9943,19 +9952,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -9975,35 +9984,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10015,27 +10024,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10047,19 +10056,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10071,27 +10080,27 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10103,35 +10112,43 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +msgid "Bougainville Standard Time" +msgstr "" + +#: tzres.rc:61 +msgid "Bougainville Daylight Time" +msgstr "" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10143,11 +10160,11 @@ msgid "Aleutian Daylight Time" msgstr "" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10159,131 +10176,139 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +msgid "Chatham Islands Standard Time" +msgstr "" + +#: tzres.rc:87 +msgid "Chatham Islands Daylight Time" +msgstr "" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11315,7 +11340,7 @@ msgid "Digi&tal" msgstr "ଡିଜିଟାଲ (&)" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "ଅକ୍ଷରରୂପ (&F)..." @@ -14740,7 +14765,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "" -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -14748,418 +14773,418 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 #, fuzzy msgid "Windows registration information" msgstr "ଅକ୍ଷରରୂପ (&F)..." -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." msgstr "" -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "" -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 #, fuzzy msgid "&Edit..." msgstr "ଅକ୍ଷରରୂପ (&F)..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "" -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "" -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "" -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" msgstr "" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15167,144 +15192,144 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "" -#: winecfg.rc:111 +#: winecfg.rc:110 #, fuzzy msgid "Active Title Bar" msgstr "ଶୀର୍ଷକ ପଟି ବିନା (&W)" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "" diff -Nru wine-development-5.5/po/pa.po wine-development-5.6/po/pa.po --- wine-development-5.5/po/pa.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/pa.po 2020-04-10 18:54:32.000000000 +0000 @@ -43,8 +43,8 @@ msgid "&Modify..." msgstr "" -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "" @@ -63,7 +63,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -140,8 +140,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -172,7 +172,7 @@ "computer." msgstr "" -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "" @@ -571,7 +571,7 @@ msgid "Font St&yle:" msgstr "" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "" @@ -587,7 +587,7 @@ msgid "&Underline" msgstr "" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "" @@ -759,7 +759,7 @@ msgid "C&ollate" msgstr "" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "" @@ -2215,7 +2215,7 @@ msgid "&File name:" msgstr "" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "" @@ -2931,7 +2931,7 @@ msgid "Player" msgstr "" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "" @@ -3476,7 +3476,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "" @@ -3728,6 +3728,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "" @@ -7194,7 +7195,7 @@ msgid "Hyperlink Information" msgstr "" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "" @@ -8548,7 +8549,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "" @@ -9048,7 +9049,7 @@ msgid "&Open:" msgstr "" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "" @@ -9138,7 +9139,7 @@ msgid "Date deleted" msgstr "" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "" @@ -9452,7 +9453,7 @@ msgid "Trash" msgstr "" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "" @@ -9483,123 +9484,123 @@ msgid "Select Source" msgstr "" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 msgid "Haiti Standard Time" msgstr "" -#: tzres.rc:117 +#: tzres.rc:121 msgid "Haiti Daylight Time" msgstr "" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9611,35 +9612,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9651,67 +9652,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -9723,11 +9724,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -9739,95 +9740,103 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +msgid "Marquesas Standard Time" +msgstr "" + +#: tzres.rc:143 +msgid "Marquesas Daylight Time" +msgstr "" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -9839,27 +9848,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -9871,67 +9880,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -9943,19 +9952,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -9975,35 +9984,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10015,27 +10024,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10047,19 +10056,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10071,27 +10080,27 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10103,35 +10112,43 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +msgid "Bougainville Standard Time" +msgstr "" + +#: tzres.rc:61 +msgid "Bougainville Daylight Time" +msgstr "" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10143,11 +10160,11 @@ msgid "Aleutian Daylight Time" msgstr "" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10159,131 +10176,139 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +msgid "Chatham Islands Standard Time" +msgstr "" + +#: tzres.rc:87 +msgid "Chatham Islands Daylight Time" +msgstr "" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11315,7 +11340,7 @@ msgid "Digi&tal" msgstr "ਡਿਜ਼ੀਟਲ(&t)" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "ਫੌਂਟ(&F)..." @@ -14740,7 +14765,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "" -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -14748,418 +14773,418 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 #, fuzzy msgid "Windows registration information" msgstr "ਫੌਂਟ(&F)..." -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." msgstr "" -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "" -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 #, fuzzy msgid "&Edit..." msgstr "ਫੌਂਟ(&F)..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "" -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "" -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "" -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" msgstr "" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15167,144 +15192,144 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "" -#: winecfg.rc:111 +#: winecfg.rc:110 #, fuzzy msgid "Active Title Bar" msgstr "ਟਾਈਟਲਬਾਰ ਤੋਂ ਬਿਨਾਂ(&W)" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "" diff -Nru wine-development-5.5/po/pl.po wine-development-5.6/po/pl.po --- wine-development-5.5/po/pl.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/pl.po 2020-04-10 18:54:32.000000000 +0000 @@ -53,8 +53,8 @@ msgid "&Modify..." msgstr "Z&mień..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Usuń" @@ -73,7 +73,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -157,8 +157,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -197,7 +197,7 @@ "Pozwala na instalację nowego lub usunięcie już istniejącego oprogramowania z " "twojego komputera." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Aplikacje" @@ -597,7 +597,7 @@ msgid "Font St&yle:" msgstr "K&rój czcionki:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Rozmiar:" @@ -613,7 +613,7 @@ msgid "&Underline" msgstr "P&odkreślona" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Kolor:" @@ -787,7 +787,7 @@ msgid "C&ollate" msgstr "&Sortuj" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Wielkość:" @@ -2266,7 +2266,7 @@ msgid "&File name:" msgstr "&Nazwa pliku:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "P&rzeglądaj..." @@ -3046,7 +3046,7 @@ msgid "Player" msgstr "Odtwarzacz" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Urządzenie" @@ -3604,7 +3604,7 @@ msgid "Joysticks" msgstr "Joysticki" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "Wyłą&cz" @@ -3861,6 +3861,7 @@ msgstr "DLL jądra WINE" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7482,7 +7483,7 @@ msgid "Hyperlink Information" msgstr "Własności hiperłącza" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Typ:" @@ -8921,7 +8922,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9416,7 +9417,7 @@ msgid "&Open:" msgstr "&Otwórz:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Przeglądaj..." @@ -9519,7 +9520,7 @@ msgid "Date deleted" msgstr "Data usunięcia" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Pulpit" @@ -9866,7 +9867,7 @@ msgid "Trash" msgstr "Kosz" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Błąd" @@ -9897,137 +9898,137 @@ msgid "Select Source" msgstr "Zaznacz źródło" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "Data i godzina" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "Data i godzina" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "Środkowoeuropejski" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "Środkowoeuropejski" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "Środkowoeuropejski" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "Środkowoeuropejski" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "Pasek &standardowy" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10039,35 +10040,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10079,67 +10080,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10151,11 +10152,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10167,97 +10168,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "Pasek &standardowy" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "Data i godzina" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "Pasek &standardowy" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10269,27 +10282,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10301,67 +10314,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10373,19 +10386,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10405,35 +10418,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10445,27 +10458,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10477,19 +10490,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10501,29 +10514,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "Data i godzina" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10535,35 +10548,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "Data i godzina" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "Data i godzina" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10579,11 +10604,11 @@ msgid "Aleutian Daylight Time" msgstr "Data i godzina" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10595,137 +10620,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "Data i godzina" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "Data i godzina" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "Data i godzina" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "Data i godzina" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "Pasek &standardowy" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11921,7 +11958,7 @@ msgid "Digi&tal" msgstr "C&yfrowy" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Czcionka..." @@ -15726,7 +15763,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Ustawienia Wine w %s są właśnie uaktualniane, proszę czekać..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15738,23 +15775,23 @@ "opublikowanej przez Free Software Foundation; licencji w wersji 2.1, lub " "(według własnego uznania) dowolnej późniejszej." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Informacje do rejestracji w Windows" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "Właściciel:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organizacja:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Ustawienia aplikacji" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15764,55 +15801,55 @@ "zakładce jest powiązany z zakładkami Biblioteki i Grafika - ustawienia tam " "również dotyczą wszystkich aplikacji lub tylko wybranej." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "Dodaj aplika&cję..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Usuń aplikację" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Wersja Windows:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Ustawienia okien" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Automatycznie przechwyć &mysz w oknach pełnoekranowych" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Pozwól menedżerowi okien &dekorować okna" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Pozwól menedżerowi okien &zarządzać oknami Wine" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "Emuluj wirtualny &pulpit" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "&Rozmiar pulpitu:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Rozdzielczość ekranu" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Oto przykład zastosowania 10-punktowej czcionki Tahoma" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "Zastąpione biblioteki DLL" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15822,55 +15859,55 @@ "(dostarczonej z Wine) czy natywnej (wziętej z Windows lub dostarczonej wraz " "z aplikacją)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Nowa reguła dla biblioteki:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "&Dodaj" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Istniejące reguły:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Edycja..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Edycja reguły" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Kolejność wczytywania" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "Tylko &wbudowana (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "Tylko &natywna (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "Preferuj wbudowaną nad na&tywną" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Preferuj n&atywną" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Wybierz literę napędu" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Ustawienia dysków" -#: winecfg.rc:233 +#: winecfg.rc:232 #, fuzzy #| msgid "" #| "Failed to connect to the mount manager, the drive configuration cannot be " @@ -15882,207 +15919,207 @@ "Nieudane połączenie z programem do zarządzania montowaniem, nie można " "zmienić ustawień napędu." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "&Dodaj..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "Wykryj &automatycznie" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Ścieżka:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "Pokaż &zaawansowane" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "U&rządzenie:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "Prze&glądaj..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Etykieta:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "Numer s&eryjny:" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "Pokazuj pliki zaczynające &się od kropki" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Diagnostyka sterownika" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Domyślne" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Urządzenie wyjściowe:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Urządzenie wyjściowe głosu:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Urządzenie wejściowe:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Urządzenie wejściowe głosu:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "Próba dźwięku" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Konfiguracja głośników" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Głośniki:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Wygląd" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "Wys&trój:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "Za&instaluj wystrój..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "El&ement:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "K&olor:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Katalogi" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "Dowiązany do:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Biblioteki" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Dyski" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Proszę wybrać docelowy katalog Uniksowy." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "Ukryj z&aawansowane" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(brak wystroju)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Grafika" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Integracja z pulpitem" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Dźwięk" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Informacje" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Ustawienia Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Pliki wystrojów (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Wybierz plik wystroju" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Katalog" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Dowiązany do" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Ustawienia Wine dla %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Wybrany sterownik: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Brak)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Nieudana próba dźwięku!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Domyślne systemowe)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "Dźwięk przestrzenny w układzie 5.1" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "Kwadrofonia" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Stereo" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Mono" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -16090,67 +16127,67 @@ "Zmiana reguły dla tej biblioteki nie jest zalecana.\n" "Czy na pewno chcesz to zrobić?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Uwaga: biblioteka systemowa" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "natywna" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "wbudowana" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "natywna, wbudowana" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "wbudowana, natywna" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "wyłączona" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Ustawienia domyślne" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Programy Wine (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Użyj ustawień globalnych" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Wybierz plik wykonywalny" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Wykryj samoczynnie" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Lokalny dysk twardy" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Zasób sieciowy" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Stacja dyskietek" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -16160,11 +16197,11 @@ "\n" "Każdy dysk musi mieć literę od A do Z, co ogranicza ich liczbę do 26." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Dysk systemowy" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy #| msgid "" #| "Are you sure you want to delete drive C?\n" @@ -16183,16 +16220,16 @@ "przestać działać gdy go zabraknie. Jeżeli go skasujesz, nie zapomnij o " "ponownym jego utworzeniu!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Litera" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Katalog docelowy" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16202,127 +16239,127 @@ "\n" "Nie zapomnij użyć 'Dodaj' w zakładce 'Dyski', aby go utworzyć!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Kontrolki - tło" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Kontrolki - tekst" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Tło menu" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Tekst menu" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Pasek przewijania" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Tło zaznaczonego obszaru" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Zaznaczony tekst" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Tło podpowiedzi" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Tekst podpowiedzi" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Tło okna" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Tekst okna" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Tło nagłówka aktywnego okna" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Tytuł aktywnego okna" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Tło nagłówka nieaktywnego okna" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Tytuł nieaktywnego okna" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Tekst okien komunikatów" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Wnętrze okna aplikacji" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Ramka okna" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Obramowanie aktywnego okna" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Obramowanie nieaktywnego okna" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Kontrolki - cień" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Szary tekst" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Kontrolki - podświetlenie" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Kontrolki - głębszy cień" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Kontrolki - jaśniejszy cień" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Kontrolki - alternatywne tło" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Śledzony element" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Gradient nagłówka aktywnego okna" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Gradient nagłówka nieaktywnego okna" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Podświetlone menu" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Pasek menu" diff -Nru wine-development-5.5/po/pt_BR.po wine-development-5.6/po/pt_BR.po --- wine-development-5.5/po/pt_BR.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/pt_BR.po 2020-04-10 18:54:32.000000000 +0000 @@ -48,8 +48,8 @@ msgid "&Modify..." msgstr "&Modificar..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Remover" @@ -68,7 +68,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -152,8 +152,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -193,7 +193,7 @@ "Permite a instalação de novo software ou a remoção de software existente no " "seu computador." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Aplicativos" @@ -587,7 +587,7 @@ msgid "Font St&yle:" msgstr "&Estilo da Fonte:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "Taman&ho:" @@ -603,7 +603,7 @@ msgid "&Underline" msgstr "&Sublinhado" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Cor:" @@ -777,7 +777,7 @@ msgid "C&ollate" msgstr "&Agrupar" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Ta&manho:" @@ -2257,7 +2257,7 @@ msgid "&File name:" msgstr "Nome do &arquivo:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "&Navegar..." @@ -3027,7 +3027,7 @@ msgid "Player" msgstr "Jogador" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Dispositivo" @@ -3575,7 +3575,7 @@ msgid "Joysticks" msgstr "Controles" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Desativar" @@ -3834,6 +3834,7 @@ msgstr "Biblioteca de kernel Wine" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7301,7 +7302,7 @@ msgid "Hyperlink Information" msgstr "Informação do Hiperlink" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Tipo:" @@ -8740,7 +8741,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "ppp" @@ -9236,7 +9237,7 @@ msgid "&Open:" msgstr "&Abrir:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Procurar..." @@ -9325,7 +9326,7 @@ msgid "Date deleted" msgstr "Data de exclusão" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Área de Trabalho" @@ -9669,7 +9670,7 @@ msgid "Trash" msgstr "Lixeira" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Erro" @@ -9700,127 +9701,127 @@ msgid "Select Source" msgstr "Selecionar Pasta" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "Hora padrão da China" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "Horário de verão da China" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "Hora padrão do Norte da Asia" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "Horário de verão Norte da Asia" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "Hora padrão da Georgia" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "Horário de verão da Georgia" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "Hora padrão do Nepal" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "Horário de verão do Nepal" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "Hora padrão de Cabo Verde" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "Horário de verão de Cabo Verde" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Hawaiian Standard Time" msgid "Haiti Standard Time" msgstr "Hora padrão do Avaí" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Hawaiian Daylight Time" msgid "Haiti Daylight Time" msgstr "Horário de verão do Avaí" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "Hora padrão da Europa Central" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "Horário de verão da Europa Central" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "Hora padrão do Marrocos" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "Horário de verão do Marrocos" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "Hora padrão da Europa Central" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "Horário de verão da Europa Central" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "Hora padrão do Irã" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "Horário de verão do Irã" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "Hora padrão da Namíbia" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "Horário de verão da Namíbia" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "Hora padrão de Tonga" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "Horário de verão de Tonga" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "Hora padrão de Montanha" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "Horário de verão de Montanha" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "Hora padrão GMT" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "Horário de verão GMT" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "Hora padrão da Asia Central" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "Horário de verão da Asia Central" @@ -9832,35 +9833,35 @@ msgid "Arabic Daylight Time" msgstr "Horário de verão da Arábia" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "Hora padrão de Magadan" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "Horário de verão Magadan" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "Hora padrão de Terra Nova" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "Horário de verão Nova Zelândia" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "Hora padrão do Pacífico Ocidental" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "Horário de verão Pacífico Oeste" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "Hora padrão do Pacífico" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "Horário de verão Pacífico" @@ -9872,67 +9873,67 @@ msgid "Azerbaijan Daylight Time" msgstr "Horário de verão do Azerbaijão" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "Hora padrão de Samoa" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "Horário de verão de Samoa" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "Hora padrão de Kaliningrado" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "Horário de verão de Kaliningrado" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "Hora padrão do Pacífico(México)" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "Horário de verão do Pacífico(México)" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "Hora padrão do Oriente Médio" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "Horário de verão do Oriente Médio" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "Hora padrão de Tóquio" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "Horário de verão Tóquio" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "Hora padrão das Ilhas Equatoriais" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "Horário de verão das Ilhas Equatoriais" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "Hora padrão da Jordânia" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "Horário de verão da Jordânia" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "Hora padrão Central" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "Horário de verão Central" @@ -9944,11 +9945,11 @@ msgid "Azores Daylight Time" msgstr "Horário de verão de Açores" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "Hora padrão do Norte da Ásia" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "Horário de verão Norte da Asia" @@ -9960,95 +9961,107 @@ msgid "Argentina Daylight Time" msgstr "Horário de verão da Argentina" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "Mauritius Standard Time" +msgid "Marquesas Standard Time" +msgstr "Hora padrão da Mauritânia" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Mauritius Daylight Time" +msgid "Marquesas Daylight Time" +msgstr "Horário de verão da Mauritânia" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "Hora padrão de Myanmar" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "Horário de verão de Myanmar" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "Tempo Universal Coordenado" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "Hora padrão da Índia" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "Horário de verão da Índia" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "Hora padrão GTB" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "Horário de verão GTB" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "Hora padrão da Turquia" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "Horário de verão da Turquia" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "Hora padrão de Fiji" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "Horário de verão de Fiji" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "Hora padrão do Canadá Central" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "Horário de verão Canada Central" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "Hora padrão de Taipei" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "Horário de verão de Taipei" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "Hora padrão da Europa Ocidental" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "Horário de verão Oeste da Europa" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "Hora padrão de Montevidéu" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "Horário de verão de Montevidéu" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "Hora padrão do Paquistão" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "Horário de verão do Paquistão" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "Hora padrão do Cáucaso" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "Horário de verão do Cáucaso" @@ -10060,27 +10073,27 @@ msgid "AUS Eastern Daylight Time" msgstr "Horário de verão da Austrália Oriental" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "Hora padrão do Norte da Ásia" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "Horário de verão da Asia Central" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "Hora padrão do Leste" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "Horário de verão do Leste" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "Hora padrão Central(México)" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "Horário de verão Central(México)" @@ -10092,67 +10105,67 @@ msgid "Atlantic Daylight Time" msgstr "Horário de verão do Atlântico" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "Hora padrão de Montanha" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "Horário de verão de Montanha" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "Hora padrão do Leste dos EUA" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "Horário de verão do Leste EUA" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "Hora padrão da Tasmânia" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "Horário de verão da Tasmânia" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "Hora padrão da América Central" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "Horário de verão da América Central" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "Hora padrão de Montanha(EUA)" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "Horário de verão de Montanha(EUA)" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "Hora padrão da África do Sul" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "Horário de verão da África do Sul" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "Hora padrão da Austrália" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "Horário de verão da Austrália Central" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "Hora padrão do Sri Lanka" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "Horário de verão do Sri Lanka" @@ -10164,19 +10177,19 @@ msgid "Afghanistan Daylight Time" msgstr "Horário de verão do Afeganistão" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "Hora padrão de Iacutusque" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "Horário de verão de Iacutusque" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "Hora padrão do Leste da América do Sul" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "Horário de verão do Leste da América do Sul" @@ -10196,35 +10209,35 @@ msgid "Arabian Daylight Time" msgstr "Horário de verão da Arábia Saudita" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "Hora padrão da Rússia" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "Horário de verão da Rússia" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "Hora padrão Românica" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "Horário de verão da România" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "Hora padrão de Ecaterimburgo" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "Horário de verão de Ecaterimburgo" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "Hora padrão da Síria" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "Horário de verão da Síria" @@ -10236,27 +10249,27 @@ msgid "AUS Central Daylight Time" msgstr "Horário de verão da Austrália Central" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "Hora padrão de Greenwich" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "Horário de verão de Greenwich" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "Hora padrão do Norte da Ásia" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "Horário de verão de Ulaanbaatar" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "Hora padrão de Israel" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "Horário de verão de Israel" @@ -10268,19 +10281,19 @@ msgid "Bangladesh Daylight Time" msgstr "Horário de verão de Bangladesh" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "Hora padrão do Pacífico da América do Sul" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "Horário de verão do Pacífico América do Sul" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "Hora padrão do Oeste da Ásia" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "Horário de verão do Oeste da Ásia" @@ -10292,27 +10305,27 @@ msgid "Alaskan Daylight Time" msgstr "Horário de verão do Alasca" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "Hora padrão do Paraguai" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "Horário de verão do Paraguai" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "Hora padrão do Meridiano" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "Horário de verão do Meridiano" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "Hora padrão da Líbia" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "Horário de verão da Líbia" @@ -10324,35 +10337,47 @@ msgid "Bahia Daylight Time" msgstr "Horário de verão da Bahia" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "Hora padrão da Venezuela" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "Horário de verão da Venezuela" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Mountain Standard Time" +msgid "Bougainville Standard Time" +msgstr "Hora padrão de Montanha" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Mountain Daylight Time" +msgid "Bougainville Daylight Time" +msgstr "Horário de verão de Montanha" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "Hora padrão do Avaí" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "Horário de verão do Avaí" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "Hora padrão do Sudeste da Ásia" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "Horário de verão do Sudeste da Ásia" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "Hora padrão da Nova Zelândia" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "Horário de verão da Nova Zelândia" @@ -10368,11 +10393,11 @@ msgid "Aleutian Daylight Time" msgstr "Horário de verão da Argentina" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "Hora padrão Central do Brasil" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "Horário de verão Brasil Central" @@ -10384,131 +10409,143 @@ msgid "Belarus Daylight Time" msgstr "Horário de verão de Belarus" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "Hora padrão do Oeste da América do Sul" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "Horário de verão do Oeste da América do Sul" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "Hora padrão da Groenlândia" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "Horário de verão da Groenlândia" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "Hora padrão da Ilha da Páscoa" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "Horário de verão da Ilha da Páscoa" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "Hora padrão do Egito" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "Horário de verão do Egito" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "Hora padrão da Mauritânia" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "Horário de verão da Mauritânia" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "Hora padrão de Vladivostoque" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "Horário de verão de Vladivostoque" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "Hora padrão de Singapura" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "Horário de verão de Singapura" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "Hora padrão da Coreia" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "Horário de verão da Coreia" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Easter Island Standard Time" +msgid "Chatham Islands Standard Time" +msgstr "Hora padrão da Ilha da Páscoa" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Easter Island Daylight Time" +msgid "Chatham Islands Daylight Time" +msgstr "Horário de verão da Ilha da Páscoa" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "Hora padrão da África Oriental" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "Horário de verão da África Oriental" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "Hora padrão FLE" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "Horário de verão FLE" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "Hora padrão de Brasília" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "Horário de verão do Leste da América do Sul" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "Hora padrão do Pacífico Central" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "Horário de verão do Pacífico Central" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "Hora padrão do Oeste da África Central" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "Horário de verão do Oeste da África Central" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "Hora padrão do Pacífico América do Sul" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "Horário de verão do Pacífico da América do Sul" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "Hora padrão da Austrália Oriental" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "Horário de verão da Austrália Oriental" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "Hora padrão do Oeste da Austrália" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "Horário de verão da Austrália Ocidental" @@ -11698,7 +11735,7 @@ msgid "Digi&tal" msgstr "Digi&tal" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Fonte..." @@ -15527,7 +15564,7 @@ msgstr "" "A configuração do Wine em %s está sendo atualizada, por favor, aguarde..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15539,23 +15576,23 @@ "Software Foundation; tanto na versão 2.1 desta licença ou (à sua escolha) " "qualquer versão posterior." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Informações de registro do Windows" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Proprietário:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "&Organização:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Configurações de Aplicativo" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15565,55 +15602,55 @@ "aba é ligada às abas Bibliotecas e Gráficos para permitir alterar " "configurações globais ou por aplicativo também nessas abas." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "Adicionar apli&cativo..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Remover aplicativo" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "Versão do &Windows:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Configurações de Janela" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Capturar o &mouse automaticamente em janelas em tela cheia" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Permitir que o gerenciador de janelas &decore as janelas" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Permitir que o gerenciador de janelas &controle as janelas" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Emular uma área de trabalho virtual" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Tamanho da Tela:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Resolução da Tela" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Este é um texto exemplo usando Tahoma 10 pontos" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "Substituições de DLL" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15623,55 +15660,55 @@ "embutidas (fornecidas pelo Wine) ou nativas (tiradas do Windows ou " "fornecidas pelo aplicativo)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Nova substituição para a biblioteca:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "&Adicionar" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Substituições e&xistentes:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Editar..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Editar Substituição" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Ordem de Carregamento" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Embutida (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Nativa (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "E&mbutida depois Nativa" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Nati&va depois Embutida" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Selecione a Letra" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Configuração de unidades" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." @@ -15679,207 +15716,207 @@ "Falha de conexão com o gerenciador de montagem; a configuração da unidade " "não pôde ser alterada." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "&Adicionar..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "Auto &detectar" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Caminho:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "M&ostrar Avançado" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "Dispositi&vo:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "Nave&gar..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Rótulo:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "&Serial:" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "Mostrar arquivos com &ponto" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Diagnósticos de driver" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Dispositivos Padrões" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Saída:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Saída de voz:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Entrada:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Entrada de voz:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Testar Som" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Configuração dos alto-falantes" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Alto-falantes:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Aparência" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Tema:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Instalar tema..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "It&em:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "C&or:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "Tipos MIME" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "Gerenciar &associação de arquivos" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Pastas" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "&Atalho para:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Bibliotecas" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Unidades" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Por favor, selecione o diretório Unix alvo." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "&Ocultar Avançado" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Sem Tema)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Gráficos" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Integração com Área de Trabalho" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Áudio" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Sobre" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Configuração do Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Arquivos de tema (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Selecione um arquivo de tema" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Pasta" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Atalho para" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Configuração do Wine para %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Driver selecionado: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Nenhum)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Falha no teste de áudio!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Padrão do sistema)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "Surround 5.1" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "Quadrafônico" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Estéreo" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Mono" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15887,67 +15924,67 @@ "Não é recomendado alterar a ordem de carregamento desta biblioteca.\n" "Tem certeza que quer fazer isto?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Aviso: biblioteca do sistema" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "nativa" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "embutida" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "nativa, embutida" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "embutida, nativa" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "desativada" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Configurações Padrão" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Programas Wine (*.exe,*.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Usar configurações globais" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Selecione um arquivo executável" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Auto detectar" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Disco rígido local" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Compartilhamento de rede" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Disquete" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -15958,11 +15995,11 @@ "Cada unidade deve ter uma letra, de A a Z, então não é possível ter mais que " "26." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Unidade do sistema" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15974,16 +16011,16 @@ "A maior parte dos aplicativos Windows esperam que a unidade C exista e não " "funcionarão caso contrário. Se continuar, lembre-se de recriá-la!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Letra" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Diretório alvo" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -15993,127 +16030,127 @@ "\n" "Lembre-se de clicar em 'Adicionar' na aba Unidades para criar uma!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Fundo do Botão" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Texto do Botão" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Fundo do Menu" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Texto do Menu" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Barra de Rolagem" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Fundo de Seleção" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Texto de Seleção" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Fundo da Dica" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Texto da Dica" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Fundo da Janela" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Texto da Janela" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Barra de Título Ativa" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Texto de Título Ativo" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Barra de Título Inativa" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Texto de Título Inativo" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Texto da Caixa de Mensagens" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Área do Aplicativo" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Corpo da Janela" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Borda Ativa" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Borda Inativa" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Sombra dos Botões" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Texto Inativo" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Realce do Botão" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Sombra Escura do Botão" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Luz do Botão" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Fundo Alternativo do Botão" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Elemento Ativo" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Gradiente da Barra Ativa" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Gradiente da Barra Inativa" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Realce de Menu" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Barra de Menu" diff -Nru wine-development-5.5/po/pt_PT.po wine-development-5.6/po/pt_PT.po --- wine-development-5.5/po/pt_PT.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/pt_PT.po 2020-04-10 18:54:32.000000000 +0000 @@ -58,8 +58,8 @@ msgid "&Modify..." msgstr "&Modificar..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Remover" @@ -78,7 +78,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -162,8 +162,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -203,7 +203,7 @@ "Permite a instalação de novo software, ou a remoção de software existente no " "seu computador." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Aplicações" @@ -603,7 +603,7 @@ msgid "Font St&yle:" msgstr "&Estilo do Tipo de Letra:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Tamanho:" @@ -619,7 +619,7 @@ msgid "&Underline" msgstr "&Sublinhado" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Cor:" @@ -793,7 +793,7 @@ msgid "C&ollate" msgstr "&Agrupar" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Tama&nho:" @@ -2274,7 +2274,7 @@ msgid "&File name:" msgstr "&Nome do ficheiro:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "P&rocurar..." @@ -3051,7 +3051,7 @@ msgid "Player" msgstr "Leitor" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Dispositivo" @@ -3608,7 +3608,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Desactivar" @@ -3865,6 +3865,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7486,7 +7487,7 @@ msgid "Hyperlink Information" msgstr "Informação da Hiperligação" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Tipo:" @@ -8896,7 +8897,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9393,7 +9394,7 @@ msgid "&Open:" msgstr "&Abrir:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Procurar..." @@ -9496,7 +9497,7 @@ msgid "Date deleted" msgstr "Data de exclusão" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Área de trabalho" @@ -9841,7 +9842,7 @@ msgid "Trash" msgstr "Reciclagem" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Erro" @@ -9872,137 +9873,137 @@ msgid "Select Source" msgstr "Selecione a origem" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "Data e hora" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "Data e hora" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "Europeu Central" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "Europeu Central" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "Europeu Central" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "Europeu Central" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "&Barra padrão" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10014,35 +10015,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10054,67 +10055,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10126,11 +10127,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10142,97 +10143,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "&Barra padrão" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "Data e hora" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "&Barra padrão" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10244,27 +10257,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10276,67 +10289,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10348,19 +10361,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10380,35 +10393,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10420,27 +10433,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10452,19 +10465,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10476,29 +10489,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "Data e hora" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10510,35 +10523,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "Data e hora" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "Data e hora" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10554,11 +10579,11 @@ msgid "Aleutian Daylight Time" msgstr "Data e hora" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10570,137 +10595,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "Data e hora" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "Data e hora" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "Data e hora" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "Data e hora" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "&Barra padrão" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11901,7 +11938,7 @@ msgid "Digi&tal" msgstr "Digi&tal" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "Tipo de &Letra..." @@ -15690,7 +15727,7 @@ msgstr "" "A configuração do Wine em %s está a ser actualizada, por favor aguarde..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15702,23 +15739,23 @@ "Programas Livres; também a versão 2.1 da Licença, ou (na sua opinião) " "qualquer versão posterior." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Informações de registro do Windows" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Proprietário:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "&Organização:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Definições da aplicação" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15728,55 +15765,55 @@ "Esta aba está ligada às abas de Bibliotecas e Gráficos para permitir alterar " "definições por aplicação ou no sistema também nessas abas." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "&Adicionar aplicação..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Remover aplicação" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "Versão do &Windows:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Definições da Janela" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Captura automaticamente o &rato em janelas de ecrã-completo" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Permite ao gestor de janelas &decorar as janelas" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Permite ao &gestor de janelas controlar as janelas" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "Emular um ecrã &virtual" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Tamanho do &ecrã:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Resolução do Ecrã" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Este é um texto exemplo que usa o tipo de letra Tahoma 10 pontos" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "Substituição de DLL" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15786,55 +15823,55 @@ "para serem embutidas (fornecido pelo Wine) ou nativas (tiradas do Windows ou " "fornecidas pela aplicação)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Nova substituição para:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Substituições E&xistentes:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Editar..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Editar Substituição" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Ordem de Carregamento" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "Em&butida (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Nativa (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "E&mbutida depois Nativa" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Nati&va depois Embutida" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Seleccione a letra da unidade" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Configuração de unidades" -#: winecfg.rc:233 +#: winecfg.rc:232 #, fuzzy #| msgid "" #| "Failed to connect to the mount manager, the drive configuration cannot be " @@ -15846,207 +15883,207 @@ "Falhou a ligação ao gestor de unidades, a configuração da unidade não pode " "ser editada." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "&Adicionar..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "&Detectar automáticamente" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Localização:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "Mostrar &Avançado" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "Dispositi&vo:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "P&rocurar..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Nome:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "Nº S&erie:" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "Mostrar &ficheiros com pontos" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Diagnósticos do controlador" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Valores pré-definidos" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Dispositivo de saída:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Dispositivo de saída de voz:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Dispositivo de entrada:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Dispositivo de entrada de voz:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Testar Som" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Configuração de Altifalantes" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Altifalantes:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Aparência" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Tema:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Instalar tema..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "It&em:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "C&or:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Pastas" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "&Ligar a:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Bibliotecas" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Unidades" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Por favor, seleccione a pasta Unix de destino." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "&Ocultar Avançado" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Sem Tema)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Gráficos" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Integração do Ecrã" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Áudio" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Acerca" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Configuração Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Ficheiros de temas (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Seleccione um ficheiro de tema" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Pasta" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Ligações para" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Configuração Wine para %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Controlador seleccionado: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Nenhum)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "O teste de som falhou!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Padrão do sistema)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -16054,67 +16091,67 @@ "Não é recomendado que mude a ordem de carregamento desta biblioteca.\n" "Tem certeza que quer fazer isto?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Aviso: biblioteca do sistema" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "nativa" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "embutida" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "nativa, embutida" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "embutida, nativa" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "desactivada" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Definições Predefinidas" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Programas Wine (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Usar definições globais" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Seleccionar um ficheiro executável" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Auto detectar" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Disco rígido local" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Partilha de rede" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Disquete" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -16125,11 +16162,11 @@ "Cada unidade tem que ter uma letra, de A a Z, como tal não pode adicionar " "mais de 26." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Unidade do sistema" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy #| msgid "" #| "Are you sure you want to delete drive C?\n" @@ -16147,16 +16184,16 @@ "A maior parte das aplicações Windows esperam que a unidade C exista, e irá " "danificar-se se não existir. Se continuar lembre-se de recriar a unidade!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Letra" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Pasta alvo" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16167,127 +16204,127 @@ "Certifique-se que clica em 'Adicionar' no separador Unidades para criar " "uma!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Fundo dos Controlos" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Texto dos Controlos" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Fundo do Menu" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Texto do Menu" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Barra de Rolagem" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Fundo de Selecção" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Texto de Selecção" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Fundo das Dicas" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Texto das Dicas" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Fundo das Janelas" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Texto das Janelas" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Barra de Título Activa" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Texto de Título Activo" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Barra de Título Inactiva" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Texto de Título Inactivo" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Texto da Caixa de Mensagem" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Espaço de trabalho de aplicações" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Quandro de janela" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Margem ativa" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Margem inativa" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Controla sombra" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Texto cinzento" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Controla realce" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Controla sombra escura" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Controla luz" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Controla fundo alternativo" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Gradiente da barra de título ativa" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Gradiente da barra de título inativa" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Realce de menu" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Barra de menu" diff -Nru wine-development-5.5/po/rm.po wine-development-5.6/po/rm.po --- wine-development-5.5/po/rm.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/rm.po 2020-04-10 18:54:32.000000000 +0000 @@ -45,8 +45,8 @@ msgid "&Modify..." msgstr "Capchar" -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 #, fuzzy msgid "&Remove" msgstr "&Annotaziun..." @@ -67,7 +67,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -145,8 +145,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -177,7 +177,7 @@ "computer." msgstr "" -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "" @@ -582,7 +582,7 @@ msgid "Font St&yle:" msgstr "" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "" @@ -598,7 +598,7 @@ msgid "&Underline" msgstr "" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "" @@ -771,7 +771,7 @@ msgid "C&ollate" msgstr "" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "" @@ -2239,7 +2239,7 @@ msgid "&File name:" msgstr "&Datoteca" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "" @@ -2955,7 +2955,7 @@ msgid "Player" msgstr "" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "" @@ -3505,7 +3505,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "" @@ -3757,6 +3757,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 #, fuzzy msgid "Wine" msgstr "Wine ag�d" @@ -7249,7 +7250,7 @@ msgid "Hyperlink Information" msgstr "INFUORMAZIUN" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "" @@ -8613,7 +8614,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "" @@ -9116,7 +9117,7 @@ msgid "&Open:" msgstr "&Rivir" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "" @@ -9209,7 +9210,7 @@ msgid "Date deleted" msgstr "" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "" @@ -9526,7 +9527,7 @@ msgid "Trash" msgstr "" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "" @@ -9557,123 +9558,123 @@ msgid "Select Source" msgstr "" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 msgid "Haiti Standard Time" msgstr "" -#: tzres.rc:117 +#: tzres.rc:121 msgid "Haiti Daylight Time" msgstr "" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9685,35 +9686,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9725,67 +9726,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -9797,11 +9798,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -9813,95 +9814,103 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +msgid "Marquesas Standard Time" +msgstr "" + +#: tzres.rc:143 +msgid "Marquesas Daylight Time" +msgstr "" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -9913,27 +9922,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -9945,67 +9954,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10017,19 +10026,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10049,35 +10058,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10089,27 +10098,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10121,19 +10130,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10145,27 +10154,27 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10177,35 +10186,43 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +msgid "Bougainville Standard Time" +msgstr "" + +#: tzres.rc:61 +msgid "Bougainville Daylight Time" +msgstr "" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10217,11 +10234,11 @@ msgid "Aleutian Daylight Time" msgstr "" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10233,131 +10250,139 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +msgid "Chatham Islands Standard Time" +msgstr "" + +#: tzres.rc:87 +msgid "Chatham Islands Daylight Time" +msgstr "" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11395,7 +11420,7 @@ msgid "Digi&tal" msgstr "" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "" @@ -14854,7 +14879,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "" -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -14862,430 +14887,430 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 #, fuzzy msgid "Windows registration information" msgstr "INFUORMAZIUN" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "" -#: winecfg.rc:146 +#: winecfg.rc:145 #, fuzzy msgid "Organi&zation:" msgstr "INFUORMAZIUN" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." msgstr "" -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy msgid "Add appli&cation..." msgstr "&Annotaziun..." -#: winecfg.rc:160 +#: winecfg.rc:159 #, fuzzy msgid "&Remove application" msgstr "&Annotaziun..." -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 #, fuzzy msgid "DLL overrides" msgstr "&Lavurar" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 #, fuzzy msgid "&Edit..." msgstr "&Lavurar" -#: winecfg.rc:205 +#: winecfg.rc:204 #, fuzzy msgid "Edit Override" msgstr "&Lavurar" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "" -#: winecfg.rc:209 +#: winecfg.rc:208 #, fuzzy msgid "&Builtin (Wine)" msgstr "I&nfuormaziuns" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy msgid "Drive configuration" msgstr "INFUORMAZIUN" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "" -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "" -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "" -#: winecfg.rc:268 +#: winecfg.rc:267 #, fuzzy msgid "Output device:" msgstr "&Datoteca" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy msgid "Speaker configuration" msgstr "INFUORMAZIUN" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "" -#: winecfg.rc:291 +#: winecfg.rc:290 #, fuzzy msgid "&Install theme..." msgstr "&Annotaziun..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "" -#: winecfg.rc:43 +#: winecfg.rc:42 #, fuzzy msgid "About" msgstr "I&nfuormaziuns" -#: winecfg.rc:44 +#: winecfg.rc:43 #, fuzzy msgid "Wine configuration" msgstr "INFUORMAZIUN" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" msgstr "" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15293,143 +15318,143 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "" diff -Nru wine-development-5.5/po/ro.po wine-development-5.6/po/ro.po --- wine-development-5.5/po/ro.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/ro.po 2020-04-10 18:54:32.000000000 +0000 @@ -47,8 +47,8 @@ msgid "&Modify..." msgstr "&Modifică..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Elimină" @@ -67,7 +67,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -145,8 +145,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -178,7 +178,7 @@ msgstr "" "Permite instalarea sau dezinstalarea de aplicații pe calculatorul d-voastră." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Aplicații" @@ -578,7 +578,7 @@ msgid "Font St&yle:" msgstr "&Stil font:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "Mărime:" @@ -594,7 +594,7 @@ msgid "&Underline" msgstr "&Subliniat" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "Culoare:" @@ -768,7 +768,7 @@ msgid "C&ollate" msgstr "C&olaționate" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Mărime:" @@ -2243,7 +2243,7 @@ msgid "&File name:" msgstr "Nume &fișier:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "&Navighează..." @@ -3020,7 +3020,7 @@ msgid "Player" msgstr "Program de redare" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Dispozitiv" @@ -3565,7 +3565,7 @@ msgid "Joysticks" msgstr "Joystick-uri" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Dezactivează" @@ -3822,6 +3822,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7503,7 +7504,7 @@ msgid "Hyperlink Information" msgstr "Informații de hiperlegătură" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Tipul:" @@ -8981,7 +8982,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9477,7 +9478,7 @@ msgid "&Open:" msgstr "&Deschide:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "Navi&gare..." @@ -9580,7 +9581,7 @@ msgid "Date deleted" msgstr "Data ștergerii" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Birou" @@ -9935,7 +9936,7 @@ msgid "Trash" msgstr "Gunoi" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Eroare" @@ -9968,137 +9969,137 @@ msgid "Select Source" msgstr "Alegeți dosarul" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "Data și ora" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "Data și ora" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "European central" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "European central" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "European central" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "European central" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "Bară &standard" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10110,35 +10111,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10150,67 +10151,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10222,11 +10223,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10238,97 +10239,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "Bară &standard" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "Data și ora" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "Bară &standard" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10340,27 +10353,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10372,67 +10385,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10444,19 +10457,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10476,35 +10489,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10516,27 +10529,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10548,19 +10561,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10572,29 +10585,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "Data și ora" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10606,35 +10619,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "Data și ora" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "Data și ora" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10650,11 +10675,11 @@ msgid "Aleutian Daylight Time" msgstr "Data și ora" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10666,137 +10691,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "Data și ora" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "Data și ora" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "Data și ora" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "Data și ora" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "Bară &standard" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11987,7 +12024,7 @@ msgid "Digi&tal" msgstr "Digi&tal" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Font..." @@ -15784,7 +15821,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Actualizez configurația Wine în %s, așteptați..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15796,23 +15833,23 @@ "către Free Software Foundation; fie versiunea 2.1 a Licenței, fie (la " "alegere) orice versiune mai recentă." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Informații de înregistrare Windows" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Deținătorul:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organi&zația:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Setări pentru aplicații" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15823,55 +15860,55 @@ "„Setări de fereastră” și permite schimbarea setărilor globale sau pe " "aplicație în această subfereastră." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "Adaugă o apli&cație..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Șterge aplicația" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "Versiunea &Windows:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Setări de fereastră" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Captează automat &mausul în regim de afișare pe tot ecranul" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Permite administratorului de ferestre să &decoreze ferestrele" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Permite administratorului de ferestre să &administreze ferestrele" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Emulează un ecran virtual" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Mărime ecran:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Rezoluție ecran" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Acesta este un text exemplificativ folosind Tahoma 10 puncte" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "Suprascrieri DLL" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15880,55 +15917,55 @@ "DLL-urile (Dynamic Link Libraries) pot fi setate individual ca integrate " "(furnizate de Wine) sau native (din Windows sau furnizate de aplicație)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "Suprascriere nouă pentru librăria:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "A&daugă" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Suprascrieri existente:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Editează..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Editează suprascrierea" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Ordinea de încărcare" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Integrat (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Nativ (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "In&tegrat apoi Nativ" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Nati&v apoi Integrat" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Selecția literei de disc" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Configurare unități" -#: winecfg.rc:233 +#: winecfg.rc:232 #, fuzzy #| msgid "" #| "Failed to connect to the mount manager, the drive configuration cannot be " @@ -15940,209 +15977,209 @@ "A eșuat conectarea la managerul de montare, configurația discurilor nu poate " "fi schimbată." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "A&daugă..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "Detectează aut&omat" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Calea:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "Arată a&vansate" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "Dispoziti&v:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "Navighează..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Etichetă:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "N&umăr de serie:" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy #| msgid "Show &dot files" msgid "&Show dot files" msgstr "Afișează &fișierele ascunse" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Diagnostic driver" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Implicite" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Dispozitiv de ieșire:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Dispozitiv de ieșire voce:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Dispozitiv de intrare:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Dispozitiv de intrare voce:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Testează sunetul" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Configurare difuzor" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Difuzoare:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Aspect" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "Tematică:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "Instalează o tematică..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "Element:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "Culoare:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Dosare" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "Leagă la:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Librării" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Dispozitive" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Selectați dosarul destinație unix." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "Ascunde a&vansate" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Fără tematică)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Grafică" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Integrare ecran" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Audio" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Despre" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Setări Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Fișiere de tematică (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Selectează un fișier de tematică" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Dosarul de sistem" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Legat la" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Setări Wine pentru %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Driver selectat: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Niciunul)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Testul audio a eșuat!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Setare implicită)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "5.1 surround" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "Cuadrofonic" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Stereo" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Mono" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -16150,67 +16187,67 @@ "Nu se recomandă schimbarea ordini de încărcare pentru această librărie.\n" "Doriți într-adevăr să schimbați ordinea de încărcare?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Avertizare: librărie de sistem" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "nativ" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "integrat" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "nativ, integrat" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "integrat, nativ" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "dezactivat" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Setări implicite" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Programe Wine (*.exe;*.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Folosește setările globale" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Selectează un fișier executabil" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Detectează automat" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Hard disk local" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Resursă din rețea" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Dischetă" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -16221,11 +16258,11 @@ "Fiecare unitate trebuie să aibă o literă de la A la Z asociată cu ea. Acest " "fapt limitează numărul de unități la 26." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Unitate de sistem" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy #| msgid "" #| "Are you sure you want to delete drive C?\n" @@ -16244,16 +16281,16 @@ "termina în mod neașteptat! Dacă executați ștergerea nu uitați să recreați " "unitatea C!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Litera" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Dosarul destinație" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16263,127 +16300,127 @@ "\n" "Nu uitați să o adăugați în subfereastra „Mapare de discuri”!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Fundal controale" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Text controale" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Fundal meniu" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Text meniu" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Bare de defilare" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Fundal selecție" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Text selecție" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Fundal baloane de ajutor" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Text baloane de ajutor" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Fundal fereastră" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Text fereastră" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Bară de titlu activă" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Text bară de titlu activă" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Bară de titlu inactivă" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Text bară de titlu inactivă" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Text casetă de mesaje" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Spațiul de lucru al aplicației" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Cadru de fereastră" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Margini active" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Margini inactive" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Umbră pentru controale" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Text gri" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Evidențiere controale" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Umbră întunecată pentru controale" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Lumină pentru controale" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Fundal alternativ pentru controale" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Element cu urmărire fierbinte" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Gradient bară de titlu activă" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Gradient bară de titlu inactivă" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Evidențiere meniu" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Bară de meniu" diff -Nru wine-development-5.5/po/ru.po wine-development-5.6/po/ru.po --- wine-development-5.5/po/ru.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/ru.po 2020-04-10 18:54:32.000000000 +0000 @@ -48,8 +48,8 @@ msgid "&Modify..." msgstr "&Изменить..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Удалить" @@ -68,7 +68,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -153,8 +153,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -193,7 +193,7 @@ msgstr "" "Установка нового программного обеспечения и удаление установленного ранее." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Приложения" @@ -587,7 +587,7 @@ msgid "Font St&yle:" msgstr "&Начертание:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Размер:" @@ -603,7 +603,7 @@ msgid "&Underline" msgstr "Под&чёркнутый" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "Цвет:" @@ -777,7 +777,7 @@ msgid "C&ollate" msgstr "&Разбить" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Размер:" @@ -2254,7 +2254,7 @@ msgid "&File name:" msgstr "Имя &файла:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "&Обзор..." @@ -3021,7 +3021,7 @@ msgid "Player" msgstr "Адаптер" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Устройство" @@ -3570,7 +3570,7 @@ msgid "Joysticks" msgstr "Джойстики" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Отключить" @@ -3827,6 +3827,7 @@ msgstr "Библиотека ядра Wine" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7291,7 +7292,7 @@ msgid "Hyperlink Information" msgstr "Информация о ссылке" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Тип:" @@ -8721,7 +8722,7 @@ msgid "b" msgstr "бит" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "т/дюйм" @@ -9217,7 +9218,7 @@ msgid "&Open:" msgstr "&Открыть:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Обзор..." @@ -9306,7 +9307,7 @@ msgid "Date deleted" msgstr "Время удаления" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Рабочий стол" @@ -9646,7 +9647,7 @@ msgid "Trash" msgstr "Корзина" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Ошибка" @@ -9677,123 +9678,123 @@ msgid "Select Source" msgstr "Выберите источник" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 msgid "Haiti Standard Time" msgstr "" -#: tzres.rc:117 +#: tzres.rc:121 msgid "Haiti Daylight Time" msgstr "" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9805,35 +9806,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9845,67 +9846,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -9917,11 +9918,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -9933,95 +9934,103 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +msgid "Marquesas Standard Time" +msgstr "" + +#: tzres.rc:143 +msgid "Marquesas Daylight Time" +msgstr "" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10033,27 +10042,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10065,67 +10074,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10137,19 +10146,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10169,35 +10178,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10209,27 +10218,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10241,19 +10250,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10265,27 +10274,27 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10297,35 +10306,43 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +msgid "Bougainville Standard Time" +msgstr "" + +#: tzres.rc:61 +msgid "Bougainville Daylight Time" +msgstr "" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10337,11 +10354,11 @@ msgid "Aleutian Daylight Time" msgstr "" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10353,131 +10370,139 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +msgid "Chatham Islands Standard Time" +msgstr "" + +#: tzres.rc:87 +msgid "Chatham Islands Daylight Time" +msgstr "" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11640,7 +11665,7 @@ msgid "Digi&tal" msgstr "&Цифровые" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Шрифт..." @@ -15430,7 +15455,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Выполняется обновление конфигурации Wine %s. Пожалуйста, подождите..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15442,23 +15467,23 @@ "General Public License версии 2.1 или более поздней по вашему выбору. " "Лицензия опубликована Free Software Foundation." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Регистрационная информация Windows" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "Имя:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Организация:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Настройка приложений" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15469,55 +15494,55 @@ "позволяет изменять настройки в этих вкладках как для определённого " "приложения, так и глобально." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "&Добавить приложение..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Удалить приложение" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Версия Windows:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Настройки окон" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Автоматически &удерживать мышь в полноэкранных окнах" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Разрешить менеджеру окон &декорировать окна" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Разрешить менеджеру окон управлять &окнами Wine" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Эмулировать виртуальный рабочий стол" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "&Рабочий стол:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Разрешение экрана" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Пример текста, шрифт Tahoma 10 пунктов" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "Замещения DLL" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15526,55 +15551,55 @@ "Здесь указывается, какую динамически подключаемую библиотеку (DLL) " "использовать: встроенную в Wine или стороннюю (из Windows)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "Новое замещение для библиотеки:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "&Добавить" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Существующие замещения:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Изменить..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Изменить замещение" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Порядок загрузки" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Встроенная (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Сторонняя (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "Вс&троенная, затем сторонняя" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Сто&ронняя, затем встроенная" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Выберите букву диска" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Настройка дисков" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." @@ -15582,207 +15607,207 @@ "Не удалось подключиться к mount manager, редактирование конфигурации дисков " "недоступно." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "&Добавить..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "&Автоопределение" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Путь:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "До&полнительно" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "У&стройство:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "Об&зор..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Метка:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "Сер. &номер:" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "Показывать файлы, начинающиеся с &точки" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Диагностика драйвера" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "По умолчанию" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Устройство вывода:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Уст-во речевого вывода:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Устройство ввода:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Уст-во речевого ввода:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Проверить звук" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Конфигурация каналов" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Каналы:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Внешний вид" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Тема:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "Установить тему..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "Элемент:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "Цвет:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "Типы MIME" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "Управлять &ассоциациями файлов" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Папки" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "Привязать к:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Библиотеки" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Диски" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Выберите целевой каталог в системе." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "&Скрыть доп. настройки" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(без темы)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Графика" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Вид и интеграция" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Аудио" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "О программе" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Настройка Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Файлы тем (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Выберите файл с темой" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Папка" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Связано с" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Настройка Wine для %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Выбранный драйвер: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(нет)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Сбой при тесте звуковой системы!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(по умолчанию)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "Объёмное звучание 5.1" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "Квадрофония" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Стерео" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Моно" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15790,67 +15815,67 @@ "Изменение порядка загрузки этой библиотеки не рекомендуется.\n" "Вы действительно хотите изменить порядок?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Внимание: системная библиотека" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "сторонняя" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "встроенная" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "сторонняя, встроенная" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "встроенная, сторонняя" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "отключена" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Установки по умолчанию" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Программы Wine (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Использовать по умолчанию" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Выберите исполняемый файл" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Автоопределение" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Жёсткий диск" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Сетевой диск" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Дисковод" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -15861,11 +15886,11 @@ "Каждый диск имеет букву - от A до Z, поэтому общее количество дисков " "ограничено 26-ю." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Системный диск" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15877,16 +15902,16 @@ "Большинство Windows-программ перестанут работать без диска C. Если вы всё же " "решили удалить диск, не забудьте создать новый!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Диск" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Путь" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -15896,127 +15921,127 @@ "\n" "Не забудьте его создать!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Элементы управления - фон" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Элементы управления - текст" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Меню - фон" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Меню - текст" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Полоса прокрутки" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Выделение - фон" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Выделение - текст" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Подсказка - фон" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Подсказка - текст" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Содержимое окна - фон" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Содержимое окна - текст" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Активное окно" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Активное окно - текст" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Пассивное окно" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Пассивное окно - текст" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Окно сообщения - текст" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Содержимое окна MDI - фон" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Окно - рамка" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Активное окно - рамка" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Пассивное окно - рамка" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Элементы управления - тень" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Недоступный элемент" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Элементы управления - светлая рамка" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Элементы управления - тёмная тень" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Элементы управления - свет" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Элементы управления - фон 2" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Ссылка, Подсветка" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Градиент активного окна" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Градиент пассивного окна" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Плоское меню - подсветка" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Плоское меню - фон" diff -Nru wine-development-5.5/po/si.po wine-development-5.6/po/si.po --- wine-development-5.5/po/si.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/si.po 2020-04-10 18:54:32.000000000 +0000 @@ -49,8 +49,8 @@ msgid "&Modify..." msgstr "වෙනස් කරන්න... (&M)" -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "ඉවත් කරන්න (&R)" @@ -69,7 +69,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -151,8 +151,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -191,7 +191,7 @@ "ඔබට ඉඩ දෙනවා අලුත් මෘදුකාංග ස්ථාපනය කරන්නට, හෝ තියෙන මෘදුකාංග ඔබගේ පරිගණකෙන් ඉවත් " "කරන්නට." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "යෙදුම්" @@ -585,7 +585,7 @@ msgid "Font St&yle:" msgstr "ෆොන්ට විලාසය (&Y):" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "තරම (&S):" @@ -601,7 +601,7 @@ msgid "&Underline" msgstr "යටිඉරි (&U)" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "පාට (&C)" @@ -775,7 +775,7 @@ msgid "C&ollate" msgstr "සංසන්දනය කරන්න (&O)" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "තරම (&Z):" @@ -2246,7 +2246,7 @@ msgid "&File name:" msgstr "ගොනුව නම (&F):" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "පිරික්සන්න... (&R)" @@ -2956,7 +2956,7 @@ msgid "Player" msgstr "ක්‍රීඩකයා" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "ආම්පන්නය" @@ -3497,7 +3497,7 @@ msgid "Joysticks" msgstr "නියාමක යටි" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "ඕෆ් කරන්න (&D)" @@ -3752,6 +3752,7 @@ msgstr "Wine කර්නලයේ DLL" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7239,7 +7240,7 @@ msgid "Hyperlink Information" msgstr "අධිබැඳියේ තොරතුරු" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "වර්ගය (&T):" @@ -8658,7 +8659,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9150,7 +9151,7 @@ msgid "&Open:" msgstr "විවෘත කරන්න (&O):" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "පිරික්සන්න... (&B)" @@ -9239,7 +9240,7 @@ msgid "Date deleted" msgstr "මකපු දිනය" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "වැඩතලය" @@ -9572,7 +9573,7 @@ msgid "Trash" msgstr "කුණු" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "දෝෂයක්" @@ -9603,127 +9604,127 @@ msgid "Select Source" msgstr "මූලය තෝරන්න" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "චීනයේ සම්මත වෙලාව" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "චීනයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "උතුරු ආසියාවේ සම්මත වෙලාව" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "උතුරු ආසියාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "ජෝර්ජියාවේ සම්මත වෙලාව" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "ජෝර්ජියාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "නේපාලයේ සම්මත වෙලාව" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "නේපාලයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "කේප් වර්ඩෙ සම්මත වෙලාව" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "කේප් වර්ඩෙ දිවා ආලෝකය වෙලාව" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Hawaiian Standard Time" msgid "Haiti Standard Time" msgstr "හවායි සම්මත වෙලාව" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Hawaiian Daylight Time" msgid "Haiti Daylight Time" msgstr "හවායි දිවා ආලෝකය වෙලාව" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "මධ්‍යම යුරෝපයේ සම්මත වෙලාව" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "මධ්‍යම යුරෝපයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "මොරොක්කෝවේ සම්මත වෙලාව" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "මොරොක්කෝවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "මධ්‍යම යුරෝපයේ සම්මත වෙලාව" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "මධ්‍යම යුරෝපයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "ඉරානයේ සම්මත වෙලාව" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "ඉරානයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "නැමීබියාවේ සම්මත වෙලාව" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "නැමීබියාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "ටොන්ගාවේ සම්මත වෙලාව" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "ටොන්ගාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "කන්දේ සම්මත වෙලාව (මෙක්සිකෝව)" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "කන්දේ දිවා ආලෝකය වෙලාව (මෙක්සිකෝව)" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "GMT සම්මත වෙලාව" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "GMT දිවා ආලෝකය වෙලාව" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "මධ්‍යම ආසියාවේ සම්මත වෙලාව" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "මධ්‍යම ආසියාවේ දිවා ආලෝකය වෙලාව" @@ -9735,35 +9736,35 @@ msgid "Arabic Daylight Time" msgstr "අරාබි දිවා ආලෝකය වෙලාව" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "මාගඩාන් සම්මත වෙලාව" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "මාගඩාන් දිවා ආලෝකය වෙලාව" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "නිව්ෆවුන්ඩ්ලන්තයේ සම්මත වෙලාව" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "නිව්ෆවුන්ඩ්ලන්තයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "බටහිර පැසිෆිකයේ සම්මත වෙලාව" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "බටහිර පැසිෆිකයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "පැසිෆිකයේ සම්මත වෙලාව" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "පැසිෆිකයේ දිවා ආලෝකය වෙලාව" @@ -9775,67 +9776,67 @@ msgid "Azerbaijan Daylight Time" msgstr "අසර්බයිජානයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "සැමෝවා සම්මත වෙලාව" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "සැමෝවා දිවා ආලෝකය වෙලාව" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "කලිනින්ග්රාඩ් සම්මත වෙලාව" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "කලිනින්ග්රාඩ් දිවා ආලෝකය වෙලාව" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "පැසිෆිකයේ සම්මත වෙලාව (මෙක්සිකෝව)" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "පැසිෆිකයේ දිවා ආලෝකය වෙලාව (මෙක්සිකෝව)" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "මැද පෙරදිගයේ සම්මත වෙලාව" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "මැද පෙරදිගයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "ටෝකියෝවේ සම්මත වෙලාව" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "ටෝකියෝවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "රේඛිය දූපත් සම්මත වෙලාව" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "රේඛිය දූපත් දිවා ආලෝකය වෙලාව" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "පෝර්දානයේ සම්මත වෙලාව" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "පෝර්දානයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "මධ්‍යම සම්මත වෙලාව" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "මධ්‍යම දිවා ආලෝකය වෙලාව" @@ -9847,11 +9848,11 @@ msgid "Azores Daylight Time" msgstr "ඇසෝරස් දිවා ආලෝකය වෙලාව" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "උතුරු ආසියාවේ නැගෙනහිර සම්මත වෙලාව" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "උතුරු ආසියාවේ නැගෙනහිර දිවා ආලෝකය වෙලාව" @@ -9863,95 +9864,107 @@ msgid "Argentina Daylight Time" msgstr "ආර්ජන්ටිනාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "Mauritius Standard Time" +msgid "Marquesas Standard Time" +msgstr "මෞරිටුයුස් සම්මත වෙලාව" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Mauritius Daylight Time" +msgid "Marquesas Daylight Time" +msgstr "මෞරිටුයුස් දිවා ආලෝකය වෙලාව" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "මියන්මාරයේ සම්මත වෙලාව" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "මියන්මාරයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "සම්බන්ධිත විශ්ව වෙලාව" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "ඉන්දියාවේ සම්මත වෙලාව" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "ඉන්දියාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "GTB සම්මත වෙලාව" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "GTB දිවා ආලෝකය වෙලාව" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "තුර්කියේ සම්මත වෙලාව" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "තුර්කියේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "ෆිජියේ සම්මත වෙලාව" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "ෆිජියේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "මධ්‍යම කැනඩාවේ සම්මත වෙලාව" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "මධ්‍යම කැනඩාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "තායිපේයේ සම්මත වෙලාව" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "තායිපේයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "බටහිර යුරෝපයේ සම්මත වෙලාව" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "බටහිර යුරෝපයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "මොන්ටෙවිඩෝ සම්මත වෙලාව" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "මොන්ටෙවිඩෝ දිවා ආලෝකය වෙලාව" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "පකිස්ථානයේ සම්මත වෙලාව" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "පකිස්ථානයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "කොකේසස් සම්මත වෙලාව" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "කොකේසස් දිවා ආලෝකය වෙලාව" @@ -9963,27 +9976,27 @@ msgid "AUS Eastern Daylight Time" msgstr "නැගෙනහිර ඕස්ට්රේලියාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "උතුරු මධ්‍යම ආසියාවේ සම්මත වෙලාව" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "උතුරු මධ්‍යම ආසියාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "නැගෙනහිර සම්මත වේලාව" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "නැගෙනහිර දිවා ආලෝකය වේලාව" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "මධ්‍යම සම්මත වෙලාව (මෙක්සිකෝව)" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "මධ්‍යම දිවා ආලෝකය වෙලාව (මෙක්සිකෝව)" @@ -9995,67 +10008,67 @@ msgid "Atlantic Daylight Time" msgstr "අත්ලාන්තිකයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "කන්දේ සම්මත වෙලාව" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "කන්දේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "එක්සත් ජනපදයේ නැගෙනහිරේ සම්මත වෙලාව" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "එක්සත් ජනපදයේ නැගෙනහිරේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "ටැස්මේනියාවේ සම්මත වෙලාව" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "ටැස්මේනියාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "මධ්‍යම ඇමරිකාවේ සම්මත වෙලාව" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "මධ්‍යම ඇමරිකාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "එක්සත් ජනපදයේ කන්දේ සම්මත වෙලාව" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "එක්සත් ජනපදයේ කන්දේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "දකුණු අප්රිකාවේ සම්මත වෙලාව" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "දකුණු අප්රිකාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "මධ්යම ඕස්ට්රේලියාවේ සම්මත වෙලාව" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "මධ්යම ඕස්ට්රේලියාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "ශ්‍රී ලංකාවේ සම්මත වෙලාව" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "ශ්‍රී ලංකාවේ දිවා ආලෝකය වෙලාව" @@ -10067,19 +10080,19 @@ msgid "Afghanistan Daylight Time" msgstr "ඇෆ්ඝනිස්ථානයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "යකුට්ස්ක් සම්මත වෙලාව" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "යකුට්ස්ක් දිවා ආලෝකය වෙලාව" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "SA නැගෙනහිර සම්මත වෙලාව" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "SA නැගෙනහිර දිවා ආලෝකය වෙලාව" @@ -10099,35 +10112,35 @@ msgid "Arabian Daylight Time" msgstr "අරාබි ජාතිකයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "රුසියාවේ සම්මත වෙලාව" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "රුසියාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "Romance සම්මත වෙලාව" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "Romance දිවා ආලෝකය වෙලාව" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "ඊකේටර්බින්බර්ග් සම්මත වෙලාව" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "ඊකේටර්බින්බර්ග් දිවා ආලෝකය වෙලාව" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "සිරියාවේ සම්මත වෙලාව" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "සිරියාවේ දිවා ආලෝකය වෙලාව" @@ -10139,27 +10152,27 @@ msgid "AUS Central Daylight Time" msgstr "මධ්‍යම ඕස්ට්රේලියාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "ග්රිනිච් සම්මත වෙලාව" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "ග්රිනිච් දිවා ආලෝකය වෙලාව" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "උලාන්බාටර් සම්මත වෙලාව" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "උලාන්බාටර් දිවා ආලෝකය වෙලාව" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "ඊශ්රායෙලයේ සම්මත වෙලාව" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "ඊශ්රායෙලයේ දිවා ආලෝකය වෙලාව" @@ -10171,19 +10184,19 @@ msgid "Bangladesh Daylight Time" msgstr "බංගලාදේශයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "SA පැසිෆිකයේ සම්මත වෙලාව" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "SA පැසිෆිකයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "බටහිර ආසියාවේ සම්මත වෙලාව" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "බටහිර ආසියාවේ දිවා ආලෝකය වෙලාව" @@ -10195,27 +10208,27 @@ msgid "Alaskan Daylight Time" msgstr "ඇලස්කාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "පැරගුවේ සම්මත වෙලාව" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "පැරගුවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "Dateline සම්මත වෙලාව" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "Dateline දිවා ආලෝකය වෙලාව" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "ලිබියාවේ සම්මත වෙලාව" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "ලිබියාවේ දිවා ආලෝකය වෙලාව" @@ -10227,35 +10240,47 @@ msgid "Bahia Daylight Time" msgstr "බහියාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "වෙනිසියුලාවේ සම්මත වෙලාව" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "වෙනිසියුලාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Mountain Standard Time" +msgid "Bougainville Standard Time" +msgstr "කන්දේ සම්මත වෙලාව" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Mountain Daylight Time" +msgid "Bougainville Daylight Time" +msgstr "කන්දේ දිවා ආලෝකය වෙලාව" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "හවායි සම්මත වෙලාව" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "හවායි දිවා ආලෝකය වෙලාව" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "SE ආසියාවේ සම්මත වෙලාව" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "SE ආසියාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "නවසීලන්තයේ සම්මත වෙලාව" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "නවසීලන්තයේ දිවා ආලෝකය වෙලාව" @@ -10271,11 +10296,11 @@ msgid "Aleutian Daylight Time" msgstr "ආර්ජන්ටිනාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "මධ්‍යම බ්‍රසීලයේ සම්මත වෙලාව" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "මධ්‍යම බ්‍රසීලයේ දිවා ආලෝකය වෙලාව" @@ -10287,131 +10312,143 @@ msgid "Belarus Daylight Time" msgstr "බෙලාරස් දිවා ආලෝකය වෙලාව" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "SA බටහිර සම්මත වෙලාව" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "SA බටහිර දිවා ආලෝකය වෙලාව" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "ග්රීන්ලන්තයේ සම්මත වෙලාව" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "ග්රීන්ලන්තයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "ඊස්ටර් දූපතේ සම්මත වෙලාව" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "ඊස්ටර් දූපතේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "ඊජිප්තුවේ සම්මත වෙලාව" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "ඊජිප්තුවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "මෞරිටුයුස් සම්මත වෙලාව" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "මෞරිටුයුස් දිවා ආලෝකය වෙලාව" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "ලාඩිවොස්ටොක් සම්මත වෙලාව" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "ලාඩිවොස්ටොක් දිවා ආලෝකය වෙලාව" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "සිංගප්පූරුවේ සම්මත වෙලාව" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "සිංගප්පූරුවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "කොරියාවේ සම්මත වෙලාව" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "කොරියාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Easter Island Standard Time" +msgid "Chatham Islands Standard Time" +msgstr "ඊස්ටර් දූපතේ සම්මත වෙලාව" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Easter Island Daylight Time" +msgid "Chatham Islands Daylight Time" +msgstr "ඊස්ටර් දූපතේ දිවා ආලෝකය වෙලාව" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "නැගෙනහිර අප්රිකාවේ සම්මත වෙලාව" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "නැගෙනහිර අප්රිකාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "FLE සම්මත වෙලාව" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "FLE දිවා ආලෝකය වෙලාව" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "නැගෙනහිර දකුණු ඇමරිකාවේ සම්මත වෙලාව" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "නැගෙනහිර දකුණු ඇමරිකාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "මධ්‍යම පැසිෆිකයේ සම්මත වෙලාව" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "මධ්‍යම පැසිෆිකයේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "බටහිර මධ්‍යම අප්රිකාවේ සම්මත වෙලාව" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "බටහිර මධ්‍යම අප්රිකාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "පැසිෆිකය SA සම්මත වෙලාව" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "පැසිෆිකය SA දිවා ආලෝකය වෙලාව" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "නැගෙනහිර ඔස්ට්රාලියාවේ සම්මත වෙලාව" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "නැගෙනහිර ඔස්ට්රාලියාවේ දිවා ආලෝකය වෙලාව" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "බටහිර ඕස්ට්රේලියාවේ සම්මත වෙලාව" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "බටහිර ඕස්ට්රේලියාවේ දිවා ආලෝකය වෙලාව" @@ -11461,7 +11498,7 @@ msgid "Digi&tal" msgstr "ඩිජිටල් (&T)" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "ෆොන්ටය... (&F)" @@ -15077,7 +15114,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Wine වින්‍යාසය %s ඇතුලේ යාවත්කාලීන වේ, කරුණාකරලා බලාගෙන ඉන්න..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15089,416 +15126,416 @@ "Free Software Foundation; either version 2.1 of the License, or (at your " "option) any later version." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Windows ලියාපදිංචිය තොරතුරු" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "හිමිකරු (&O):" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "සංවිධානය (&Z):" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "යෙදුම් සැකසීම්" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." msgstr "" -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "යෙදුම එක් කරන්න... (&C)" -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "යෙදුම ඉවත් කරන්න (&R)" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "Windows අනුවාදය (&W):" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "කවුළු සැකසුම්" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "අතථ්‍ය වැඩතලයක් අනුකරණය කරන්න (&E)" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "තිරයේ විභේදනය" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "එක් කරන්න (&D)" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "වෙනස් කරන්න... (&E)" -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Override එක වෙනස් කරන්න" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Builtin (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Native (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "Buil&tin then Native" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Nati&ve then Builtin" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "ධාවකය අකුර තෝරන්න" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "ධාවක වින්‍යාසය" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "එක් කරන්න (&D)" -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "ස්වයං අනාවරිත කරන්න (&O)" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "පෙත:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "'උසස්' පෙන්නන්න (&C)" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "ආම්පන්නය (&V):" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "පිරික්සන්න... (&W)" -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "ලේබලය (&L):" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "අනුක්‍රම (&E):" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "dot ගොනු පෙන්නන්න (&S)" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "ධාවක දෝෂ නිර්ණය" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "පෙරනිමි" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "ප්‍රතිදාන ආම්පන්නය:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "හඬ ප්‍රතිදාන ආම්පන්නය:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "ආදාන ආම්පන්නය:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "හඬ ආදාන ආම්පන්නය:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "ශ්‍රව්‍ය පරික්‍ෂණ කරන්න (&T)" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "ස්පීකර වින්‍යාසය" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "ස්පීකර" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "පෙනුම" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "තේමාව (&T):" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "තේමාව ස්ථාපනය කරන්න... (&I)" -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "අයිතමය (&E):" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "පාට (&O):" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "MIME වර්ග" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "ෆෝල්ඩර" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "පුස්තකාල" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "ධාවක" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "යුනික්ස් ඉලක්ක ඩිරෙක්ටරිය තෝරන්න, කරුණාකරලා." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "'උසස්' හංගන්න (&C)" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(තේමාවක් නැහැ)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "චිත්‍රණ" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "වැඩතලය අනුකලනය" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "ශ්‍රව්‍ය" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "ගැන" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Wine වින්‍යාසය" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "තේමා ගොනු (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "තේමා ගොනුවක් තෝරන්න" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "ෆෝල්ඩරය" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "%s එකට Wine වින්‍යාසය" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "තෝරපු ධාවකය: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(කිසිවක් නැත)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "ශ්‍රව්‍ය පරික්‍ෂණය අසාර්ථක උනා!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(පද්ධතියේ පෙරනිමිය)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "5.1 වටාපිටාව" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "ක්වොඩ්රොෆොනික" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "ස්ටීරියෝ" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "ඒකල" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" msgstr "" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "අවවාදය: පද්ධතියෙ පුස්තකාලයක්" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "native" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "builtin" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "native, builtin" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "builtin, native" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "අබලිත" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "පෙරනිමි සැකසුම්" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Wine ක්‍රමලේඛයන් (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "පොදු සිටුවම් පාවිච්චි කරන්න" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "ක්‍රියාත්මක කළ හැකි ගොනුවක් තෝරන්න" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "ස්වයං අනාවරිත" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "පෙදෙසි දෘඩ තැටිය" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "ජාල හවුල" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "නම්‍ය ඩිස්කය" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "පද්ධති තැටිය" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15506,16 +15543,16 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "අකුර" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "ඉලක්ක ෆෝල්ඩරය" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -15525,127 +15562,127 @@ "\n" "මතක් කරලා 'එක් කරන්න' ඔබන්න 'ධාවක' ටැබ් එක ඇතුලේ එකක් හදන්නට!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "පාලක පසුබිම" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "පාලක පෙළ" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "මෙනුවේ පසුබිම" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "මෙනුවේ පෙළ" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "අනුචලන තීරුව" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "තේරීම පසුබිම" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "තේරීම පෙළ" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "මෙවලම් ඉඟියේ පසුබිම" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "මෙවලම් ඉඟියේ පෙළ" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "කවුළුවේ පසුබිම" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "කවුළුවේ පෙළ" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "සක්රිය නාම තීරුව" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "සක්රිය නාම පෙළ" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "අක්රිය නාම තීරුව" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "අක්රිය නාම පෙළ" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "පණිවිඩ කොටුවේ පෙළ" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "යෙදුමේ වැඩබිම" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "කවුළුව රාමුව" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "සක්රිය දාරය" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "අක්රිය දාරය" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "පාලක හෙවනැල්ල" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "අළු පෙළ" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "පාලක උද්දීපනය" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "පාලක තද හෙවනැල්ල" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "පාලක ලා" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "පාලක වෙන පසුබිම" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "සක්රිය නාම තීරුවේ අනුක්රමණය" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "අක්රිය නාම තීරුවේ අනුක්රමණය" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "මෙනු උද්දීපනය" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "මෙනු තීරුව" diff -Nru wine-development-5.5/po/sk.po wine-development-5.6/po/sk.po --- wine-development-5.5/po/sk.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/sk.po 2020-04-10 18:54:32.000000000 +0000 @@ -52,8 +52,8 @@ msgid "&Modify..." msgstr "&Zmeniť..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Odstrániť" @@ -72,7 +72,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -157,8 +157,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -209,7 +209,7 @@ "Umožňuje Vám inštaláciu nových programov alebo odstránenie starých z Vášho " "počítača." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Aplikácie" @@ -609,7 +609,7 @@ msgid "Font St&yle:" msgstr "Š&týl písma:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Veľkosť:" @@ -625,7 +625,7 @@ msgid "&Underline" msgstr "&Podčiarknuté" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Farba:" @@ -799,7 +799,7 @@ msgid "C&ollate" msgstr "Z&oradiť" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "&Veľkosť:" @@ -2262,7 +2262,7 @@ msgid "&File name:" msgstr "&Súbor:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "P&rechádzaj..." @@ -2974,7 +2974,7 @@ msgid "Player" msgstr "Prehrávač" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Zariadenie" @@ -3534,7 +3534,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Zakázať" @@ -3798,6 +3798,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7421,7 +7422,7 @@ msgid "Hyperlink Information" msgstr "Informácie" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 #, fuzzy msgid "&Type:" msgstr "Typ" @@ -8889,7 +8890,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "" @@ -9407,7 +9408,7 @@ msgid "&Open:" msgstr "" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "" @@ -9508,7 +9509,7 @@ msgid "Date deleted" msgstr "" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 #, fuzzy msgctxt "display name" msgid "Desktop" @@ -9830,7 +9831,7 @@ msgid "Trash" msgstr "" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "" @@ -9867,135 +9868,135 @@ msgid "Select Source" msgstr "&Označiť všetko" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "Dátum a čas" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "Dátum a čas" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "Stredná Európa" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "Stredná Európa" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "Stredná Európa" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "Stredná Európa" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10007,35 +10008,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10047,67 +10048,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10119,11 +10120,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10135,95 +10136,107 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Standard Time" +msgstr "Dátum a čas" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "Dátum a čas" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10235,27 +10248,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10267,67 +10280,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10339,19 +10352,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10371,35 +10384,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10411,27 +10424,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10443,19 +10456,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10467,29 +10480,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "Dátum a čas" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10501,35 +10514,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "Dátum a čas" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "Dátum a čas" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10545,11 +10570,11 @@ msgid "Aleutian Daylight Time" msgstr "Dátum a čas" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10561,135 +10586,147 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "Dátum a čas" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "Dátum a čas" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "Dátum a čas" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "Dátum a čas" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11749,7 +11786,7 @@ msgid "Digi&tal" msgstr "Digi&tálne" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "" @@ -15332,7 +15369,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Wine konfigurácia sa v %s aktualizuje, prosím počkajte..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15340,23 +15377,23 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Informácie o registrácii Windows" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Vlastník:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organi&zácia:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Nastavenia aplikácie" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15366,57 +15403,57 @@ "prepojená s Knižnice a Grafika kartami aby Vám dovolila zmeniť systémovo " "alebo pre konkrétnu aplikáciu nastavenia v týchto kartách." -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy #| msgid "&Add application..." msgid "Add appli&cation..." msgstr "&Pridať aplikáciu..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Odstrániť aplikáciu" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Verzia Windows:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Nastavenia okna" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Vytvoriť virtuálnu plochu" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Veľkosť &plochy:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Rozlíšenie obrazovky" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL prepísania" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15426,357 +15463,357 @@ "(poskytnuté z Wine) alebo natívne (prevziate z Windows alebo poskytnuté " "aplikáciou)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Nové prepísanie pre knižnicu:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Existujúce &prepísania:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Upraviť..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Upraviť prepísanie" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Poradie načítavania" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Vstavané (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Natívne (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 #, fuzzy #| msgid "Bui<in then Native" msgid "Buil&tin then Native" msgstr "Vst&avané potom natívne" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Natí&vne potom vstavané" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy msgid "Drive configuration" msgstr "Informácie" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 #, fuzzy #| msgid "&Add..." msgid "A&dd..." msgstr "&Pridať..." -#: winecfg.rc:238 +#: winecfg.rc:237 #, fuzzy msgid "Aut&odetect" msgstr "Automatická &detekcia" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Cesta:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 #, fuzzy #| msgid "Show &Advanced" msgid "Show Advan&ced" msgstr "Ukáž &pokročilé" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "Za&riadenie:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "Pre&chádzať..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Označenie:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy msgid "&Show dot files" msgstr "&Detaily" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Diagnostika ovládača" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Predvolené" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Výstupné zariadenie:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Hlasové výstupné zariadenie:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Vstupné zariadenie:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Hlasové vstupné zariadenie:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Skúška zvuku" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy msgid "Speaker configuration" msgstr "Informácie" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Vzhľad" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "" -#: winecfg.rc:291 +#: winecfg.rc:290 #, fuzzy msgid "&Install theme..." msgstr "&Skomentovať..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 #, fuzzy msgid "Folders" msgstr "Systémové adresáre" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "" -#: winecfg.rc:37 +#: winecfg.rc:36 #, fuzzy #| msgid "Advanced" msgid "Hide Advan&ced" msgstr "Pokročilý" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "" -#: winecfg.rc:44 +#: winecfg.rc:43 #, fuzzy msgid "Wine configuration" msgstr "Informácie" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "" -#: winecfg.rc:47 +#: winecfg.rc:46 #, fuzzy msgid "Select a theme file" msgstr "Nemôžem vytvoriť alebo použiť okno." -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 #, fuzzy msgid "(None)" msgstr "Žiadne" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 #, fuzzy msgid "(System default)" msgstr "Systémová cesta" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" msgstr "" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 #, fuzzy msgid "Autodetect" msgstr "Automatická &detekcia" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Systémová jednotka" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15784,146 +15821,146 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Písmeno" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "Create New Folder" msgid "Target folder" msgstr "Vytvoriť nový adresár" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Pozadie okna" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "" -#: winecfg.rc:111 +#: winecfg.rc:110 #, fuzzy msgid "Active Title Bar" msgstr "&Bez titulkového pruhu" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "" diff -Nru wine-development-5.5/po/sl.po wine-development-5.6/po/sl.po --- wine-development-5.5/po/sl.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/sl.po 2020-04-10 18:54:32.000000000 +0000 @@ -52,8 +52,8 @@ msgid "&Modify..." msgstr "&Spremeni ..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Odstrani" @@ -72,7 +72,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -156,8 +156,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -208,7 +208,7 @@ "Omogoča namestitev novih programov oziroma odstranitev programov iz vašega " "računalnika." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Programi" @@ -608,7 +608,7 @@ msgid "Font St&yle:" msgstr "Slog pi&save:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Velikost:" @@ -624,7 +624,7 @@ msgid "&Underline" msgstr "P&odčrtano" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Barva:" @@ -798,7 +798,7 @@ msgid "C&ollate" msgstr "Z&biranje" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "V&elikost:" @@ -2277,7 +2277,7 @@ msgid "&File name:" msgstr "&Ime datoteke:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "B&rskaj ..." @@ -3067,7 +3067,7 @@ msgid "Player" msgstr "Igralec" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Naprava" @@ -3626,7 +3626,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Onemogoči" @@ -3903,6 +3903,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7529,7 +7530,7 @@ msgid "Hyperlink Information" msgstr "Lastnosti hiperpovezave" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Vrsta:" @@ -9112,7 +9113,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9610,7 +9611,7 @@ msgid "&Open:" msgstr "&Odpri:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Brskaj ..." @@ -9713,7 +9714,7 @@ msgid "Date deleted" msgstr "Datum je bil izbrisan" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Namizje" @@ -10057,7 +10058,7 @@ msgid "Trash" msgstr "Smeti" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Napaka" @@ -10090,137 +10091,137 @@ msgid "Select Source" msgstr "Nova mapa" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "Datum in čas" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "Datum in čas" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "srednjeevropsko" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "srednjeevropsko" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "srednjeevropsko" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "srednjeevropsko" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "Vrstica &stanja" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10232,35 +10233,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10272,67 +10273,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10344,11 +10345,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10360,97 +10361,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "Vrstica &stanja" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "Datum in čas" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "Vrstica &stanja" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10462,27 +10475,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10494,67 +10507,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10566,19 +10579,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10598,35 +10611,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10638,27 +10651,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10670,19 +10683,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10694,29 +10707,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "Datum in čas" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10728,35 +10741,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "Datum in čas" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "Datum in čas" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10772,11 +10797,11 @@ msgid "Aleutian Daylight Time" msgstr "Datum in čas" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10788,137 +10813,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "Datum in čas" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "Datum in čas" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "Datum in čas" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "Datum in čas" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "Vrstica &stanja" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -12130,7 +12167,7 @@ msgid "Digi&tal" msgstr "Digi&talna ura" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Pisava ..." @@ -16041,7 +16078,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Nastavitve programa Wine v %s se posodabljajo, prosimo počakajte ..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -16053,23 +16090,23 @@ "Software Foundation Ali pod različico licence 2.1 ali (po vaši želji) pod " "katerokoli novejšo različico." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Podatki o registraciji Windows" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Lastnik:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organi&zacija:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Nastavitve programov" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -16080,57 +16117,57 @@ "spreminjanje nastavitev v teh dveh zavihkih tako za ves sistem kot za " "posamezne programe." -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy #| msgid "&Add application..." msgid "Add appli&cation..." msgstr "&Dodaj program ..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Odstrani program" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Različica Windows:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Nastavitve okna" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Samodejno zajemi &miško v celozaslonskih oknih" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Dovoli upravljalniku oken, da okra&si okna" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Dovoli upravljalniku &oken, da upravlja z Wine-ovimi okni" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "Posnemaj navidezno &namizje" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "&Velikost namizja:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Ločljivost zaslona" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Vzorčno besedilo, napisano s pisavo Tahoma velikosti 10 točk" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "Prepisi DLL" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -16140,59 +16177,59 @@ "izviona ('native'; vzeta iz Windows ali nameščena skupaj s programom za " "Windows)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Nov prepis za knjižnico:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Obstoječi &prepisi:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Uredi ..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Uredi prepis" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Red nalaganja" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Vgrajena (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Izvorna (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 #, fuzzy #| msgid "Bui<in then Native" msgid "Buil&tin then Native" msgstr "Vgra&jena, izvorna" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "I&zvorna, vgrajena" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Izberite črko pogona" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy #| msgid "Wine configuration" msgid "Drive configuration" msgstr "Nastavitve Wine" -#: winecfg.rc:233 +#: winecfg.rc:232 #, fuzzy #| msgid "" #| "Failed to connect to the mount manager, the drive configuration cannot be " @@ -16204,220 +16241,220 @@ "Napaka med povezovanjem z upravljalnikom priklopov (mount manager); " "nastavitev pogonov ne bo mogoče urejati." -#: winecfg.rc:236 +#: winecfg.rc:235 #, fuzzy #| msgid "&Add..." msgid "A&dd..." msgstr "&Dodaj ..." -#: winecfg.rc:238 +#: winecfg.rc:237 #, fuzzy msgid "Aut&odetect" msgstr "&Samodejno zaznaj" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Pot:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 #, fuzzy #| msgid "Show &Advanced" msgid "Show Advan&ced" msgstr "Pokaži &napredno" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "Na&prava:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "&Brskaj ..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Oznaka:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "Zapor&edna št.:" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy #| msgid "Show &dot files" msgid "&Show dot files" msgstr "Pokaži &datoteke s piko" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Diagnostika gonilnikov" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Privzeto" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Izhodna naprava:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Naprava zvočnega izhoda:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Vhodna naprava:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Naprava zvočnega vhoda:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Preizkusi zvok" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy #| msgid "Wine configuration" msgid "Speaker configuration" msgstr "Nastavitve Wine" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Videz" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Tema:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Namesti temo ..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "P&redmet:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "B&arva:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Mape" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "&Poveži z:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Knjižnice" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Pogoni" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Izberite ciljno mapo Unix." -#: winecfg.rc:37 +#: winecfg.rc:36 #, fuzzy #| msgid "Hide &Advanced" msgid "Hide Advan&ced" msgstr "Skrij &napredno" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Brez teme)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Grafika" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Vključitev v namizje" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Zvok" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "O programu" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Nastavitve Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Datoteke s temami (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Izberite datoteko teme" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Mapa" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Povezano z" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Nastavitve Wine za %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Izbrani gonilnik: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Brez)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Preizkus zvoka je spodletel!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Sistemsko privzeto)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 #, fuzzy #| msgid "graphic" msgid "Quadraphonic" msgstr "grafika" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -16425,68 +16462,68 @@ "Spreminjanje vrstnega reda nalaganja za to knjižnico ni priporočljivo.\n" "Ali ste prepričani, da ga želite spremeniti?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Opozorilo: sistemska knjižnica" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "izvorno" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "vgrajeno" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "izvorno, vgrajeno" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "vgrajeno, izvorno" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "onemogočeno" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Privzete nastavitve" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Programi Wine (*.exe;*.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Uporabi splošne nastavitve" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Izberite izvedljivo datoteko" -#: winecfg.rc:69 +#: winecfg.rc:68 #, fuzzy msgid "Autodetect" msgstr "&Samodejno zaznaj" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Krajevni trdi disk" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Omrežna souporaba" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Disketa" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -16497,11 +16534,11 @@ "Za oznake pogonov so na voljo črke od A do Z, torej ne morete imeti več kot " "26 pogonov." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Sistemski pogon" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy #| msgid "" #| "Are you sure you want to delete drive C?\n" @@ -16519,18 +16556,18 @@ "Večina programov Windows za pravilno delovanje pričakuje obstoj pogona C. Če " "boste pogon odstranili, ga pozneje ne pozabite ponovno dodati!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Pismo" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "New Folder" msgid "Target folder" msgstr "Nova mapa" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16540,127 +16577,127 @@ "\n" "Če ga želite dodati, uporabite gumb 'Dodaj' v zavihku Pogoni!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Ozadje nadzornikov" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Besedilo nadzornikov" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Ozadje menija" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Besedilo menija" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Drsnik" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Ozadje izbire" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Besedilo izbire" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Ozadje orodnega namiga" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Besedilo orodnega namiga" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Ozadje okna" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Besedilo okna" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Dejavna nazivna vrstica" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Besedilo dejavnega naziva" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Nedejavna nazivna vrstica" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Besedilno nedejavnega naziva" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Sporočilo polja z besedilom" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Delovni prostor programa" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Okvir okna" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Dejaven rob" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Nedejaven rob" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Senca nadzornikov" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Sivo besedilo" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Poudarjanje nadzornikov" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Temna senca nadzornikov" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Svetlost nadzornikov" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Nadomestno ozadje nadzornikov" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Predmet s hitrim sledenjem" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Preliv dejavne nazivne vrstice" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Preliv nedejavne nazivne vrstice" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Poudarjanje menija" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Menijska vrstica" diff -Nru wine-development-5.5/po/sr_RS@cyrillic.po wine-development-5.6/po/sr_RS@cyrillic.po --- wine-development-5.5/po/sr_RS@cyrillic.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/sr_RS@cyrillic.po 2020-04-10 18:54:32.000000000 +0000 @@ -47,8 +47,8 @@ msgid "&Modify..." msgstr "&Измени..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Уклони" @@ -67,7 +67,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -150,8 +150,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -191,7 +191,7 @@ "computer." msgstr "Инсталирање новог програма или брисање постојећег." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Програми" @@ -596,7 +596,7 @@ msgid "Font St&yle:" msgstr "&Стил фонта:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Величина:" @@ -612,7 +612,7 @@ msgid "&Underline" msgstr "&Подвуци" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Боја:" @@ -788,7 +788,7 @@ msgid "C&ollate" msgstr "&Сложи" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "&Величина:" @@ -2283,7 +2283,7 @@ msgid "&File name:" msgstr "&Датотека" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 #, fuzzy msgid "B&rowse..." msgstr "" @@ -3020,7 +3020,7 @@ msgid "Player" msgstr "Репродукуј" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "" @@ -3608,7 +3608,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 #, fuzzy msgid "&Disable" msgstr "табела" @@ -3882,6 +3882,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7652,7 +7653,7 @@ msgid "Hyperlink Information" msgstr "Подаци о хипервези" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Врста:" @@ -9149,7 +9150,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "тпи" @@ -9660,7 +9661,7 @@ msgid "&Open:" msgstr "&Отвори:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Разгледај..." @@ -9761,7 +9762,7 @@ msgid "Date deleted" msgstr "Датум брисања" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 #, fuzzy msgctxt "display name" msgid "Desktop" @@ -10108,7 +10109,7 @@ msgid "Trash" msgstr "Смеће" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Грешка" @@ -10145,127 +10146,127 @@ msgid "Select Source" msgstr "Нова фасцикла" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy msgid "Haiti Standard Time" msgstr "Датум брисања" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy msgid "Haiti Daylight Time" msgstr "Датум брисања" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "&Стандардна трака" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10277,35 +10278,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10317,67 +10318,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10389,11 +10390,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10405,97 +10406,108 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "&Стандардна трака" + +#: tzres.rc:143 +#, fuzzy +msgid "Marquesas Daylight Time" +msgstr "Датум брисања" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "&Стандардна трака" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10507,27 +10519,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10539,67 +10551,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10611,19 +10623,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10643,35 +10655,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10683,27 +10695,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10715,19 +10727,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10739,28 +10751,28 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy msgid "Dateline Standard Time" msgstr "Датум брисања" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10772,35 +10784,45 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +msgid "Bougainville Standard Time" +msgstr "Датум брисања" + +#: tzres.rc:61 +#, fuzzy +msgid "Bougainville Daylight Time" +msgstr "Датум брисања" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10814,11 +10836,11 @@ msgid "Aleutian Daylight Time" msgstr "Датум брисања" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10830,135 +10852,145 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy msgid "Easter Island Standard Time" msgstr "Датум брисања" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy msgid "Easter Island Daylight Time" msgstr "Датум брисања" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +msgid "Chatham Islands Standard Time" +msgstr "Датум брисања" + +#: tzres.rc:87 +#, fuzzy +msgid "Chatham Islands Daylight Time" +msgstr "Датум брисања" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "&Стандардна трака" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -12026,7 +12058,7 @@ msgid "Digi&tal" msgstr "&Дигитални" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Фонт..." @@ -15681,7 +15713,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Wine поставке у %s се ажурирају. Молимо, сачекајте..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15689,176 +15721,176 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 #, fuzzy msgid "Windows registration information" msgstr "Подаци" -#: winecfg.rc:144 +#: winecfg.rc:143 #, fuzzy msgid "&Owner:" msgstr "Власник" -#: winecfg.rc:146 +#: winecfg.rc:145 #, fuzzy msgid "Organi&zation:" msgstr "анимација" -#: winecfg.rc:154 +#: winecfg.rc:153 #, fuzzy msgid "Application settings" msgstr "Програми" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." msgstr "" -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy msgid "Add appli&cation..." msgstr "програм" -#: winecfg.rc:160 +#: winecfg.rc:159 #, fuzzy msgid "&Remove application" msgstr "програм" -#: winecfg.rc:161 +#: winecfg.rc:160 #, fuzzy msgid "&Windows Version:" msgstr "&Прозор" -#: winecfg.rc:169 +#: winecfg.rc:168 #, fuzzy msgid "Window settings" msgstr "&Прозор" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "" -#: winecfg.rc:175 +#: winecfg.rc:174 #, fuzzy msgid "Desktop &size:" msgstr "Радна површина" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 #, fuzzy msgid "DLL overrides" msgstr "&Уређивање" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 #, fuzzy msgid "&Edit..." msgstr "&Уређивање" -#: winecfg.rc:205 +#: winecfg.rc:204 #, fuzzy msgid "Edit Override" msgstr "&Уређивање" -#: winecfg.rc:208 +#: winecfg.rc:207 #, fuzzy msgid "Load order" msgstr "граница" -#: winecfg.rc:209 +#: winecfg.rc:208 #, fuzzy msgid "&Builtin (Wine)" msgstr "&О Бележници" -#: winecfg.rc:210 +#: winecfg.rc:209 #, fuzzy msgid "&Native (Windows)" msgstr "&Прозор" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "" -#: winecfg.rc:220 +#: winecfg.rc:219 #, fuzzy msgid "Select Drive Letter" msgstr "Изабери &све" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy msgid "Drive configuration" msgstr "Подаци" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "" -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "" -#: winecfg.rc:251 +#: winecfg.rc:250 #, fuzzy msgid "Bro&wse..." msgstr "" @@ -15867,284 +15899,284 @@ "#-#-#-#-# sr_RS@cyrillic.po (Wine) #-#-#-#-#\n" "Разгледај" -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy msgid "&Show dot files" msgstr "&Детаљи" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 #, fuzzy msgid "Defaults" msgstr "Подразумевано" -#: winecfg.rc:268 +#: winecfg.rc:267 #, fuzzy msgid "Output device:" msgstr "&Назив одредишне датотеке:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 #, fuzzy msgid "&Test Sound" msgstr "звук" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy msgid "Speaker configuration" msgstr "Подаци" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "" -#: winecfg.rc:291 +#: winecfg.rc:290 #, fuzzy msgid "&Install theme..." msgstr "Инсталирање..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 #, fuzzy msgid "C&olor:" msgstr "&Колона" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 #, fuzzy msgid "Folders" msgstr "Нова фасцикла" -#: winecfg.rc:311 +#: winecfg.rc:310 #, fuzzy msgid "&Link to:" msgstr "Везе" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "" -#: winecfg.rc:40 +#: winecfg.rc:39 #, fuzzy msgid "Graphics" msgstr "графика" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "" -#: winecfg.rc:42 +#: winecfg.rc:41 #, fuzzy msgid "Audio" msgstr "аудио запис" -#: winecfg.rc:43 +#: winecfg.rc:42 #, fuzzy msgid "About" msgstr "&О Бележници" -#: winecfg.rc:44 +#: winecfg.rc:43 #, fuzzy msgid "Wine configuration" msgstr "Подаци" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "" -#: winecfg.rc:47 +#: winecfg.rc:46 #, fuzzy msgid "Select a theme file" msgstr "Изабери &све" -#: winecfg.rc:48 +#: winecfg.rc:47 #, fuzzy msgid "Folder" msgstr "Нова фасцикла" -#: winecfg.rc:49 +#: winecfg.rc:48 #, fuzzy msgid "Links to" msgstr "Везе" -#: winecfg.rc:45 +#: winecfg.rc:44 #, fuzzy msgid "Wine configuration for %s" msgstr "Грешка у радњама" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 #, fuzzy msgid "(None)" msgstr "Ништа" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 #, fuzzy msgid "(System default)" msgstr "Системска путања" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 #, fuzzy #| msgid "graphic" msgid "Quadraphonic" msgstr "графика" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" msgstr "" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "" -#: winecfg.rc:60 +#: winecfg.rc:59 #, fuzzy msgid "disabled" msgstr "табела" -#: winecfg.rc:61 +#: winecfg.rc:60 #, fuzzy msgid "Default Settings" msgstr "Поставке интернета" -#: winecfg.rc:62 +#: winecfg.rc:61 #, fuzzy msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Извршне датотеке (*.exe)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -16152,159 +16184,159 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "New Folder" msgid "Target folder" msgstr "Нова фасцикла" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 #, fuzzy msgid "Controls Background" msgstr "&Умножи позадину" -#: winecfg.rc:100 +#: winecfg.rc:99 #, fuzzy msgid "Controls Text" msgstr "Контрола" -#: winecfg.rc:102 +#: winecfg.rc:101 #, fuzzy msgid "Menu Background" msgstr "&Умножи позадину" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 #, fuzzy msgid "Scrollbar" msgstr "трака за померање" -#: winecfg.rc:105 +#: winecfg.rc:104 #, fuzzy msgid "Selection Background" msgstr "Постави као позадину" -#: winecfg.rc:106 +#: winecfg.rc:105 #, fuzzy msgid "Selection Text" msgstr "Изабери &све" -#: winecfg.rc:107 +#: winecfg.rc:106 #, fuzzy msgid "Tooltip Background" msgstr "&Умножи позадину" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 #, fuzzy msgid "Window Background" msgstr "&Умножи позадину" -#: winecfg.rc:110 +#: winecfg.rc:109 #, fuzzy msgid "Window Text" msgstr "&Прозор" -#: winecfg.rc:111 +#: winecfg.rc:110 #, fuzzy msgid "Active Title Bar" msgstr "насловна линија" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 #, fuzzy msgid "Application Workspace" msgstr "Програми" -#: winecfg.rc:117 +#: winecfg.rc:116 #, fuzzy msgid "Window Frame" msgstr "&Прозор" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 #, fuzzy msgid "Controls Shadow" msgstr "Управљачки панел" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 #, fuzzy msgid "Controls Light" msgstr "Контрола" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 #, fuzzy msgid "Menu Bar" msgstr "линија менија" diff -Nru wine-development-5.5/po/sr_RS@latin.po wine-development-5.6/po/sr_RS@latin.po --- wine-development-5.5/po/sr_RS@latin.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/sr_RS@latin.po 2020-04-10 18:54:32.000000000 +0000 @@ -47,8 +47,8 @@ msgid "&Modify..." msgstr "&Izmeni..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Ukloni" @@ -67,7 +67,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -150,8 +150,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -191,7 +191,7 @@ "computer." msgstr "Instaliranje novog programa ili brisanje postojećeg." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Aplikacije" @@ -639,7 +639,7 @@ msgid "Font St&yle:" msgstr "" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Veličina:" @@ -655,7 +655,7 @@ msgid "&Underline" msgstr "" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Boja:" @@ -846,7 +846,7 @@ msgid "C&ollate" msgstr "" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Veli&čina:" @@ -2358,7 +2358,7 @@ msgid "&File name:" msgstr "&Datoteka" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "N&ađi..." @@ -3100,7 +3100,7 @@ msgid "Player" msgstr "Reprodukuj" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 #, fuzzy msgid "Device" msgstr "Na&prava:" @@ -3688,7 +3688,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Isključi" @@ -3962,6 +3962,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7748,7 +7749,7 @@ msgid "Hyperlink Information" msgstr "Podaci o hipervezi" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Ukucaj:" @@ -9267,7 +9268,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "tpi" @@ -9783,7 +9784,7 @@ msgid "&Open:" msgstr "&Otvori:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Nađi..." @@ -9888,7 +9889,7 @@ msgid "Date deleted" msgstr "Datum brisanja" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 #, fuzzy msgctxt "display name" msgid "Desktop" @@ -10236,7 +10237,7 @@ msgid "Trash" msgstr "Smeće" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Greška" @@ -10273,127 +10274,127 @@ msgid "Select Source" msgstr "Nova fascikla" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy msgid "Haiti Standard Time" msgstr "Datum brisanja" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy msgid "Haiti Daylight Time" msgstr "Datum brisanja" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "&Standardna traka" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10405,35 +10406,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10445,67 +10446,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10517,11 +10518,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10533,97 +10534,108 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "&Standardna traka" + +#: tzres.rc:143 +#, fuzzy +msgid "Marquesas Daylight Time" +msgstr "Datum brisanja" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "&Standardna traka" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10635,27 +10647,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10667,67 +10679,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10739,19 +10751,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10771,35 +10783,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10811,27 +10823,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10843,19 +10855,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10867,28 +10879,28 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy msgid "Dateline Standard Time" msgstr "Datum brisanja" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10900,35 +10912,45 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +msgid "Bougainville Standard Time" +msgstr "Datum brisanja" + +#: tzres.rc:61 +#, fuzzy +msgid "Bougainville Daylight Time" +msgstr "Datum brisanja" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10942,11 +10964,11 @@ msgid "Aleutian Daylight Time" msgstr "Datum brisanja" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10958,135 +10980,145 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy msgid "Easter Island Standard Time" msgstr "Datum brisanja" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy msgid "Easter Island Daylight Time" msgstr "Datum brisanja" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +msgid "Chatham Islands Standard Time" +msgstr "Datum brisanja" + +#: tzres.rc:87 +#, fuzzy +msgid "Chatham Islands Daylight Time" +msgstr "Datum brisanja" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "&Standardna traka" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -12153,7 +12185,7 @@ msgid "Digi&tal" msgstr "&Digitalni" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "" @@ -15858,7 +15890,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Wine postavke u %s se ažuriraju. Molimo, sačekajte..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15866,25 +15898,25 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 #, fuzzy msgid "Windows registration information" msgstr " Informacija o registraciji Windowsa " -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Vlasnik:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organi&zacija:" -#: winecfg.rc:154 +#: winecfg.rc:153 #, fuzzy msgid "Application settings" msgstr " Podešavanje aplikacije " -#: winecfg.rc:155 +#: winecfg.rc:154 #, fuzzy msgid "" "Wine can mimic different Windows versions for each application. This tab is " @@ -15895,60 +15927,60 @@ "za Biblioteke i Grafika tabove da dozvoli sistemske promene ili za " "podešavanje aplikacija u istim tabovima." -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy #| msgid "&Add application..." msgid "Add appli&cation..." msgstr "&Dodaj aplikaciju..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Ukloni aplikaciju" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Verzija Windowsa:" -#: winecfg.rc:169 +#: winecfg.rc:168 #, fuzzy msgid "Window settings" msgstr " Podešavanje prozora " -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Dozvoli temi da &ukrasi prozor" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Dozvoli &menadžeru prozora da upravlja prozorom" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Emulacija veštačkog desktopa" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Desktop &veličina:" -#: winecfg.rc:180 +#: winecfg.rc:179 #, fuzzy msgid "Screen resolution" msgstr " Rezolucija &Ekrana " -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Ovo je osnovni tekst 10 Tahoma" -#: winecfg.rc:191 +#: winecfg.rc:190 #, fuzzy msgid "DLL overrides" msgstr " DLL Podešavanja " -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15957,60 +15989,60 @@ "Biblioteke mogu biti podešene zasebno da budu ili builtin (omogućene od Wine-" "a) ili native (uzete od Windowsa ili od aplikacije)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Novo podešavanje biblioteke:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Postojeća &podešavanja:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Izmeni..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Izmeni podešavanje" -#: winecfg.rc:208 +#: winecfg.rc:207 #, fuzzy msgid "Load order" msgstr " Redosled učitavanja " -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Builtin (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Native (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 #, fuzzy #| msgid "Bui<in then Native" msgid "Buil&tin then Native" msgstr "Bui<in pa Native" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Nati&ve pa Builtin" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Izaberi slovo diska" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy #| msgid "Wine configuration" msgid "Drive configuration" msgstr "Wine konfiguracija" -#: winecfg.rc:233 +#: winecfg.rc:232 #, fuzzy #| msgid "" #| "Failed to connect to the mount manager, the drive configuration cannot be " @@ -16022,193 +16054,193 @@ "Uspelo povezivanje sa mount menadžerom, disk konfiguracija se ne može " "izmeniti." -#: winecfg.rc:236 +#: winecfg.rc:235 #, fuzzy #| msgid "&Add..." msgid "A&dd..." msgstr "&Dodaj..." -#: winecfg.rc:238 +#: winecfg.rc:237 #, fuzzy msgid "Aut&odetect" msgstr "Auto&matski" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Putanja:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 #, fuzzy #| msgid "Show &Advanced" msgid "Show Advan&ced" msgstr "Pokaži &Napredno" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "Na&prava:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "Na&đi..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Naziv:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "S&erijski:" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy #| msgid "Show &dot files" msgid "&Show dot files" msgstr "Prikaži &dot fajlove" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Probaj zvuk" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy #| msgid "Wine configuration" msgid "Speaker configuration" msgstr "Wine konfiguracija" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 #, fuzzy msgid "Appearance" msgstr " Izgled " -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Tema:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Instaliraj teme..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "B&oja:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 #, fuzzy msgid "Folders" msgstr "Fascikla:" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "&Veza do:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Bibliteka" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Drajvovi" -#: winecfg.rc:36 +#: winecfg.rc:35 #, fuzzy msgid "Select the Unix target directory, please." msgstr "Izaberite unix glavni direktorijum, molim." -#: winecfg.rc:37 +#: winecfg.rc:36 #, fuzzy #| msgid "Hide &Advanced" msgid "Hide Advan&ced" msgstr "Sakrij &Napredno" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Bez teme)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Grafika" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Desktop integracija" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Zvuk" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "O Wine" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Wine konfiguracija" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Tema fajlovi (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Izaberite temu" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Linkovi do" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Wine konfiguracija za %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 #, fuzzy msgid "(None)" msgstr "" @@ -16217,34 +16249,34 @@ "#-#-#-#-# sr_RS@latin.po (Wine) #-#-#-#-#\n" "Nista" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 #, fuzzy msgid "(System default)" msgstr "Sistemska putanja" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 #, fuzzy #| msgid "graphic" msgid "Quadraphonic" msgstr "grafika" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -16252,69 +16284,69 @@ "Promena redosleda biblioteka nije preporučljiva.\n" "Da li ste sigurni da želite da uradite ovo?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Upozorenje: sistemska biblioteka" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "native" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "builtin" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "native, builtin" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "builtin, native" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "isključen" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Osnovno podešavanje" -#: winecfg.rc:62 +#: winecfg.rc:61 #, fuzzy msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Wine programi (*.exe,*.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Koristi globalna podešavanja" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Izaberi izvršni fajl" -#: winecfg.rc:69 +#: winecfg.rc:68 #, fuzzy msgid "Autodetect" msgstr "Auto&matski" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Lokalni Hard Disk" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Mrežno deljenje" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Floppy disketa" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 #, fuzzy msgid "" "You cannot add any more drives.\n" @@ -16325,11 +16357,11 @@ "\n" "Svaki disk mora imati slovo, od A to Z, tako da ne možete imati više od 26" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Sistemski drajv" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy #| msgid "" #| "Are you sure you want to delete drive C?\n" @@ -16347,19 +16379,19 @@ "Većina Windows aplikacija očekuje da postoji disk C, i biće problema ako ne " "postoji. Ako nastavite setite se da kreirate drajv C!" -#: winecfg.rc:77 +#: winecfg.rc:76 #, fuzzy msgctxt "Drive letter" msgid "Letter" msgstr "Slovo" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "New Folder" msgid "Target folder" msgstr "Nova fascikla" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16369,127 +16401,127 @@ "\n" "Kliknite 'Dodaj' u diskovi tabu da napravite!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Kontrole pozadine" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Kontrole teksta" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Pozadina menija" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Tekst menija" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Odabir pozadine" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Odabir teksta" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Tooltip pozadina" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Pozadina prozora" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Text Prozora" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Aktivni nazivni Bar" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Aktivni nazivni Text" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Neaktivni nazivni Bar" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Neaktivni nazivni Text" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Poruka Box Text" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Radni prostor aplikacije" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Ram prozora" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Aktivna ivica" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Neaktivna ivica" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Kontrola senke" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Sivi Text" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Kontrola odabranog" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Kontrola mracne senke" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Kontrola svetla" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Kontrola alternativne pozadine" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Aktivni nazivni bar Gradient" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Neaktivni nazivni bar Gradient" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Meni osvetljenog" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Meni Bar" diff -Nru wine-development-5.5/po/sv.po wine-development-5.6/po/sv.po --- wine-development-5.5/po/sv.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/sv.po 2020-04-10 18:54:32.000000000 +0000 @@ -48,8 +48,8 @@ msgid "&Modify..." msgstr "&Ändra..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "Ta &bort" @@ -68,7 +68,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -151,8 +151,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -191,7 +191,7 @@ "Låter dig installera ny programvara, eller ta bort befintlig programvara " "från din dator." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Program" @@ -590,7 +590,7 @@ msgid "Font St&yle:" msgstr "Typsnittss&til:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Storlek:" @@ -606,7 +606,7 @@ msgid "&Underline" msgstr "&Understruken" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Färg:" @@ -780,7 +780,7 @@ msgid "C&ollate" msgstr "&Sortera" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "St&orlek:" @@ -2258,7 +2258,7 @@ msgid "&File name:" msgstr "&Filnamn:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "B&läddra..." @@ -3030,7 +3030,7 @@ msgid "Player" msgstr "Spelare" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Enhet" @@ -3587,7 +3587,7 @@ msgid "Joysticks" msgstr "Joysticks" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Inaktivera" @@ -3844,6 +3844,7 @@ msgstr "Wine-kärn-DLL" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7465,7 +7466,7 @@ msgid "Hyperlink Information" msgstr "Länkinformation" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Typ:" @@ -8900,7 +8901,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9396,7 +9397,7 @@ msgid "&Open:" msgstr "&Öppna:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Bläddra..." @@ -9499,7 +9500,7 @@ msgid "Date deleted" msgstr "Borttagningsdatum" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Skrivbord" @@ -9842,7 +9843,7 @@ msgid "Trash" msgstr "Papperskorg" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Fel" @@ -9873,137 +9874,137 @@ msgid "Select Source" msgstr "Välj källa" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "Datum och tid" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "Datum och tid" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "Centraleuropeisk" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "Centraleuropeisk" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "Centraleuropeisk" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "Centraleuropeisk" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "&Standardfält" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10015,35 +10016,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10055,67 +10056,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10127,11 +10128,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10143,97 +10144,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "&Standardfält" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "Datum och tid" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "&Standardfält" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10245,27 +10258,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10277,67 +10290,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10349,19 +10362,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10381,35 +10394,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10421,27 +10434,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10453,19 +10466,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10477,29 +10490,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "Datum och tid" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10511,35 +10524,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "Datum och tid" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "Datum och tid" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10555,11 +10580,11 @@ msgid "Aleutian Daylight Time" msgstr "Datum och tid" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10571,137 +10596,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "Datum och tid" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "Datum och tid" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "Datum och tid" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "Datum och tid" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "&Standardfält" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11876,7 +11913,7 @@ msgid "Digi&tal" msgstr "Digi&tal" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "T&ypsnitt..." @@ -15680,7 +15717,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Wine-inställningarna i %s uppdateras, var god vänta..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15692,23 +15729,23 @@ "publicerad av Free Software Foundation, antingen version 2.1 eller (om du så " "vill) någon senare version." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Registreringsinformation för Windows" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "Ä&gare:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Organi&sation:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Programinställningar" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15719,55 +15756,55 @@ "inställningar i de flikarna också, antingen systemövergripande eller per " "program." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "&Lägg till program..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Ta bort program" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Windows-version:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Fönsterinställningar" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Fånga &musen automatiskt i helskärmsfönster" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Tillåt fönsterhanteraren att &dekorera fönstren" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Tillåt &fönsterhanteraren att styra fönstren" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "Emulera ett virtuellt skriv&bord" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Storlek på &skrivbord:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Skärmupplösning" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Denna exempeltext använder 10-punkters Tahoma" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL-åsidosättningar" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15777,55 +15814,55 @@ "(tillhandahålls av Wine) eller ursprungliga (tagna från Windows eller " "tillhandahålls av programmet)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Ny åsidosättning för bibliotek:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "&Lägg till" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Befintliga &åsidosättningar:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "R&edigera..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Redigera åsidosättning" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Inläsningsordning" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Inbyggd (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Ursprunglig (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "Inb&yggd sedan Ursprunglig" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Urs&prunglig sedan Inbyggd" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Välj enhetsbokstav" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Enhetskonfiguration" -#: winecfg.rc:233 +#: winecfg.rc:232 #, fuzzy #| msgid "" #| "Failed to connect to the mount manager, the drive configuration cannot be " @@ -15837,207 +15874,207 @@ "Misslyckades med att ansluta till monteringshanteraren. " "Enhetskonfigurationen kan inte redigeras." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "&Lägg till..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "&Upptäck automatiskt" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Sökväg:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "Visa &avancerat" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "&Enhet:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "B&läddra..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "Et&ikett:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "Se&rienr:" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "Visa &punktfiler" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Diagnostisera drivrutin" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Standardvärden" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Utgångsenhet:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Utgångsenhet för röster:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Ingångsenhet:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Ingångsenhet för röster:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Testa ljud" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Högtalarkonfiguration" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Högtalare:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Utseende" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Tema:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Installera tema..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "Ob&jekt:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "Fä&rg:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Mappar" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "&Länka till:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Bibliotek" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Enheter" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Välj unix-målkatalog, tack." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "Dölj &avancerat" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Inget tema)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Grafik" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Skrivbordsintegration" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Ljud" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Om" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Konfiguration av Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Temafiler (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Välj en temafil" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Shell-mapp" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Länkar till" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Wine-konfiguration för %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Vald drivrutin: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Ingen)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Ljudtest misslyckades!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Systemstandard)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "5.1 surround" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "4-kanalsstereo" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Stereo" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Mono" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -16045,67 +16082,67 @@ "Ändring av inläsningsordningen för detta bibliotek rekommenderas inte.\n" "Är du säker på att du vill göra detta?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Varning: systembibliotek" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "ursprunglig" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "inbyggd" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "ursprunglig, inbyggd" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "inbyggd, ursprunglig" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "inaktiverad" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Standardinställningar" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Wine-program (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Använd globala inställningar" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Välj en körbar fil" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Upptäck automatiskt" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Lokal hårddisk" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Nätverksutdelning" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Diskett" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "Cd-rom" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -16115,11 +16152,11 @@ "\n" "Varje enhet måste ha en bokstav från A till Z, så du kan inte ha fler än 26." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Systemenhet" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy #| msgid "" #| "Are you sure you want to delete drive C?\n" @@ -16137,16 +16174,16 @@ "De flesta Windows-program förväntar att enhet C finns, och kommer att dö om " "den inte finns. Om du fortsätter bör du komma ihåg att återskapa den!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Bokstav" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Målmapp" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16156,127 +16193,127 @@ "\n" "Kom ihåg att klicka på ‘Lägg till’ i fliken Enheter för att skapa en!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Bakgrund i kontroller" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Text i kontroller" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Menybakgrund" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Menytext" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Rullningslist" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Bakgrund för markering" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Text för markering" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Bakgrund för verktygstips" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Text för verktygstips" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Fönsterbakgrund" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Fönstertext" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Aktiv namnlist" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Aktiv titeltext" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Inaktiv namnlist" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Inaktiv titeltext" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Text i meddelandefönster" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Arbetsyta i program" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Fönsterram" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Aktiv kant" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Inaktiv kant" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Skugga i kontroller" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Grå text" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Markering i kontroller" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Mörk skugga i kontroller" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Ljus i kontroller" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Alternativ bakgrund i kontroller" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Hovrat föremål" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Gradient för aktiv namnlist" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Gradient för inaktiv namnlist" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Menymarkering" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Menyrad" diff -Nru wine-development-5.5/po/ta.po wine-development-5.6/po/ta.po --- wine-development-5.5/po/ta.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/ta.po 2020-04-10 18:54:32.000000000 +0000 @@ -44,8 +44,8 @@ msgid "&Modify..." msgstr "திருத்து... (&M)" -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "அகற்று (&R)" @@ -64,7 +64,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -140,8 +140,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -172,7 +172,7 @@ "computer." msgstr "" -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "பயன்பாடுகள்" @@ -562,7 +562,7 @@ msgid "Font St&yle:" msgstr "" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "" @@ -578,7 +578,7 @@ msgid "&Underline" msgstr "" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "நிறம் (&C):" @@ -752,7 +752,7 @@ msgid "C&ollate" msgstr "" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "" @@ -2199,7 +2199,7 @@ msgid "&File name:" msgstr "" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "" @@ -2906,7 +2906,7 @@ msgid "Player" msgstr "" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "" @@ -3440,7 +3440,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "" @@ -3691,6 +3691,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "" @@ -7150,7 +7151,7 @@ msgid "Hyperlink Information" msgstr "" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "" @@ -8494,7 +8495,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "" @@ -8986,7 +8987,7 @@ msgid "&Open:" msgstr "" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "" @@ -9075,7 +9076,7 @@ msgid "Date deleted" msgstr "" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "" @@ -9389,7 +9390,7 @@ msgid "Trash" msgstr "" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "" @@ -9420,123 +9421,123 @@ msgid "Select Source" msgstr "" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 msgid "Haiti Standard Time" msgstr "" -#: tzres.rc:117 +#: tzres.rc:121 msgid "Haiti Daylight Time" msgstr "" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9548,35 +9549,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9588,67 +9589,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -9660,11 +9661,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -9676,95 +9677,103 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +msgid "Marquesas Standard Time" +msgstr "" + +#: tzres.rc:143 +msgid "Marquesas Daylight Time" +msgstr "" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -9776,27 +9785,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -9808,67 +9817,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -9880,19 +9889,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -9912,35 +9921,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -9952,27 +9961,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -9984,19 +9993,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10008,27 +10017,27 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10040,35 +10049,43 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +msgid "Bougainville Standard Time" +msgstr "" + +#: tzres.rc:61 +msgid "Bougainville Daylight Time" +msgstr "" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10080,11 +10097,11 @@ msgid "Aleutian Daylight Time" msgstr "" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10096,131 +10113,139 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +msgid "Chatham Islands Standard Time" +msgstr "" + +#: tzres.rc:87 +msgid "Chatham Islands Daylight Time" +msgstr "" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11250,7 +11275,7 @@ msgid "Digi&tal" msgstr "" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "எழுத்துரு... (&F)" @@ -14666,7 +14691,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "" -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -14674,416 +14699,416 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." msgstr "" -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "" -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Windows பதிப்பு:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "" -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "" -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "" -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "" -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" msgstr "" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15091,143 +15116,143 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "" diff -Nru wine-development-5.5/po/te.po wine-development-5.6/po/te.po --- wine-development-5.5/po/te.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/te.po 2020-04-10 18:54:32.000000000 +0000 @@ -43,8 +43,8 @@ msgid "&Modify..." msgstr "" -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "" @@ -63,7 +63,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -140,8 +140,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -172,7 +172,7 @@ "computer." msgstr "" -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "" @@ -571,7 +571,7 @@ msgid "Font St&yle:" msgstr "" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "" @@ -587,7 +587,7 @@ msgid "&Underline" msgstr "" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "" @@ -759,7 +759,7 @@ msgid "C&ollate" msgstr "" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "" @@ -2215,7 +2215,7 @@ msgid "&File name:" msgstr "" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "" @@ -2931,7 +2931,7 @@ msgid "Player" msgstr "" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "" @@ -3476,7 +3476,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "" @@ -3728,6 +3728,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "" @@ -7194,7 +7195,7 @@ msgid "Hyperlink Information" msgstr "" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "" @@ -8548,7 +8549,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "" @@ -9048,7 +9049,7 @@ msgid "&Open:" msgstr "" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "" @@ -9138,7 +9139,7 @@ msgid "Date deleted" msgstr "" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "" @@ -9452,7 +9453,7 @@ msgid "Trash" msgstr "" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "" @@ -9483,123 +9484,123 @@ msgid "Select Source" msgstr "" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 msgid "Haiti Standard Time" msgstr "" -#: tzres.rc:117 +#: tzres.rc:121 msgid "Haiti Daylight Time" msgstr "" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9611,35 +9612,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9651,67 +9652,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -9723,11 +9724,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -9739,95 +9740,103 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +msgid "Marquesas Standard Time" +msgstr "" + +#: tzres.rc:143 +msgid "Marquesas Daylight Time" +msgstr "" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -9839,27 +9848,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -9871,67 +9880,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -9943,19 +9952,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -9975,35 +9984,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10015,27 +10024,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10047,19 +10056,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10071,27 +10080,27 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10103,35 +10112,43 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +msgid "Bougainville Standard Time" +msgstr "" + +#: tzres.rc:61 +msgid "Bougainville Daylight Time" +msgstr "" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10143,11 +10160,11 @@ msgid "Aleutian Daylight Time" msgstr "" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10159,131 +10176,139 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +msgid "Chatham Islands Standard Time" +msgstr "" + +#: tzres.rc:87 +msgid "Chatham Islands Daylight Time" +msgstr "" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11315,7 +11340,7 @@ msgid "Digi&tal" msgstr "డిజిటల్ (&t)" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "ఫాంట్ (&F)..." @@ -14740,7 +14765,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "" -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -14748,418 +14773,418 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 #, fuzzy msgid "Windows registration information" msgstr "ఫాంట్... (&F)" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." msgstr "" -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "" -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 #, fuzzy msgid "&Edit..." msgstr "ఫాంట్... (&F)" -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "" -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "" -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "" -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" msgstr "" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15167,144 +15192,144 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "" -#: winecfg.rc:111 +#: winecfg.rc:110 #, fuzzy msgid "Active Title Bar" msgstr "శీర్షికపట్టీ లేకుండా (&W)" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "" diff -Nru wine-development-5.5/po/th.po wine-development-5.6/po/th.po --- wine-development-5.5/po/th.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/th.po 2020-04-10 18:54:32.000000000 +0000 @@ -43,8 +43,8 @@ msgid "&Modify..." msgstr "" -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "" @@ -64,7 +64,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -144,8 +144,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -176,7 +176,7 @@ "computer." msgstr "" -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "" @@ -575,7 +575,7 @@ msgid "Font St&yle:" msgstr "รูปแบบต้วอักษร:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "ขนาด:" @@ -591,7 +591,7 @@ msgid "&Underline" msgstr "ขีดเส้นใต้" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "สี:" @@ -766,7 +766,7 @@ msgid "C&ollate" msgstr "จัดเรียงตามลําดับ" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "ขนาด:" @@ -2237,7 +2237,7 @@ msgid "&File name:" msgstr "แฟ้ม" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "" @@ -2968,7 +2968,7 @@ msgid "Player" msgstr "" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "" @@ -3526,7 +3526,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "" @@ -3787,6 +3787,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "" @@ -7371,7 +7372,7 @@ msgid "Hyperlink Information" msgstr "รายละเอียด" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "" @@ -8774,7 +8775,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "" @@ -9278,7 +9279,7 @@ msgid "&Open:" msgstr "เปิด...\tCtrl+O" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "" @@ -9373,7 +9374,7 @@ msgid "Date deleted" msgstr "ลบ\tDel" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 #, fuzzy msgctxt "display name" msgid "Desktop" @@ -9699,7 +9700,7 @@ msgid "Trash" msgstr "" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "" @@ -9731,125 +9732,125 @@ msgid "Select Source" msgstr "เลือกทั้งหมด\tCtrl+A" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy msgid "Haiti Standard Time" msgstr "ลบ\tDel" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy msgid "Haiti Daylight Time" msgstr "ลบ\tDel" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9861,35 +9862,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9901,67 +9902,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -9973,11 +9974,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -9989,95 +9990,105 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +msgid "Marquesas Standard Time" +msgstr "ลบ\tDel" + +#: tzres.rc:143 +#, fuzzy +msgid "Marquesas Daylight Time" +msgstr "ลบ\tDel" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10089,27 +10100,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10121,67 +10132,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10193,19 +10204,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10225,35 +10236,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10265,27 +10276,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10297,19 +10308,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10321,28 +10332,28 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy msgid "Dateline Standard Time" msgstr "ลบ\tDel" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10354,35 +10365,45 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +msgid "Bougainville Standard Time" +msgstr "ลบ\tDel" + +#: tzres.rc:61 +#, fuzzy +msgid "Bougainville Daylight Time" +msgstr "ลบ\tDel" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10396,11 +10417,11 @@ msgid "Aleutian Daylight Time" msgstr "ลบ\tDel" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10412,133 +10433,143 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy msgid "Easter Island Standard Time" msgstr "ลบ\tDel" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy msgid "Easter Island Daylight Time" msgstr "ลบ\tDel" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +msgid "Chatham Islands Standard Time" +msgstr "ลบ\tDel" + +#: tzres.rc:87 +#, fuzzy +msgid "Chatham Islands Daylight Time" +msgstr "ลบ\tDel" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11582,7 +11613,7 @@ msgid "Digi&tal" msgstr "ดิจิตัล" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 #, fuzzy msgid "&Font..." msgstr "" @@ -15093,7 +15124,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "" -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15101,430 +15132,430 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 #, fuzzy msgid "Windows registration information" msgstr "รายละเอียด" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "" -#: winecfg.rc:146 +#: winecfg.rc:145 #, fuzzy msgid "Organi&zation:" msgstr "รายละเอียด" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." msgstr "" -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "" -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "" -#: winecfg.rc:175 +#: winecfg.rc:174 #, fuzzy msgid "Desktop &size:" msgstr "พื้นที่ทำงาน" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 #, fuzzy msgid "&Edit..." msgstr "แก้ไข" -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "" -#: winecfg.rc:220 +#: winecfg.rc:219 #, fuzzy msgid "Select Drive Letter" msgstr "เลือกทั้งหมด\tCtrl+A" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy msgid "Drive configuration" msgstr "รายละเอียด" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "" -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "" -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "" -#: winecfg.rc:258 +#: winecfg.rc:257 #, fuzzy msgid "&Show dot files" msgstr "รายละเอียด" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 #, fuzzy msgid "Defaults" msgstr "เครื่องพิมพ์ปกติ; " -#: winecfg.rc:268 +#: winecfg.rc:267 #, fuzzy msgid "Output device:" msgstr "แฟ้ม" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy msgid "Speaker configuration" msgstr "รายละเอียด" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "" -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 #, fuzzy msgid "Folders" msgstr "ขอบกระดาษ" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "" -#: winecfg.rc:44 +#: winecfg.rc:43 #, fuzzy msgid "Wine configuration" msgstr "รายละเอียด" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "" -#: winecfg.rc:47 +#: winecfg.rc:46 #, fuzzy msgid "Select a theme file" msgstr "เลือกทั้งหมด\tCtrl+A" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 #, fuzzy msgid "(None)" msgstr "ไม่มีเลย" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" msgstr "" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15532,148 +15563,148 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "Create New Folder" msgid "Target folder" msgstr "สร้างไดเรกทอรีใหม่" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "" -#: winecfg.rc:100 +#: winecfg.rc:99 #, fuzzy msgid "Controls Text" msgstr "เนื้อหา" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "" -#: winecfg.rc:106 +#: winecfg.rc:105 #, fuzzy msgid "Selection Text" msgstr "เลือกทั้งหมด\tCtrl+A" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "" -#: winecfg.rc:111 +#: winecfg.rc:110 #, fuzzy msgid "Active Title Bar" msgstr "แสดงแทบเมนู" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "" diff -Nru wine-development-5.5/po/tr.po wine-development-5.6/po/tr.po --- wine-development-5.5/po/tr.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/tr.po 2020-04-10 18:54:32.000000000 +0000 @@ -49,8 +49,8 @@ msgid "&Modify..." msgstr "&Değiştir..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Kaldır" @@ -69,7 +69,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -152,8 +152,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -192,7 +192,7 @@ "Bilgisayarınıza yeni yazılım yüklemenizi veya bilgisayarınızdan yazılım " "kaldırmanızı sağlar." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Uygulamalar" @@ -586,7 +586,7 @@ msgid "Font St&yle:" msgstr "Yazı Tipi St&ili:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Boyut:" @@ -602,7 +602,7 @@ msgid "&Underline" msgstr "&Altı Çizili" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Renk:" @@ -774,7 +774,7 @@ msgid "C&ollate" msgstr "&Harmanla" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "&Size:" @@ -2250,7 +2250,7 @@ msgid "&File name:" msgstr "&Dosya adı:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "&Gözat..." @@ -3014,7 +3014,7 @@ msgid "Player" msgstr "Oyuncu" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Aygıt" @@ -3561,7 +3561,7 @@ msgid "Joysticks" msgstr "Oyun Kolları" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "&Devre Dışı Bırak" @@ -3820,6 +3820,7 @@ msgstr "Wine çekirdek DLL'si" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7286,7 +7287,7 @@ msgid "Hyperlink Information" msgstr "Bağlantı Bilgisi" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Tür:" @@ -8716,7 +8717,7 @@ msgid "b" msgstr "bayt" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9212,7 +9213,7 @@ msgid "&Open:" msgstr "&Aç:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Gözat..." @@ -9301,7 +9302,7 @@ msgid "Date deleted" msgstr "Silinme tarihi" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Masaüstü" @@ -9644,7 +9645,7 @@ msgid "Trash" msgstr "Çöp" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Hata" @@ -9675,127 +9676,127 @@ msgid "Select Source" msgstr "Kaynak Seç" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "Çin Standart Saati" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "Çin Yaz Saati" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "Kuzey Asya Standart Saati" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "Kuzey Asya Yaz Saati" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "Gürcistan Standart Saati" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "Gürcistan Yaz Saati" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "Nepal Standart Saati" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "Nepal Yaz Saati" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "Yeşil Burun Adaları Standart Saati" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "Yeşil Burun Adaları Yaz Saati" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Hawaiian Standard Time" msgid "Haiti Standard Time" msgstr "Hawaii Standart Saati" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Hawaiian Daylight Time" msgid "Haiti Daylight Time" msgstr "Hawaii Yaz Saati" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "Orta Avrupa Standart Saati" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "Orta Avrupa Yaz Saati" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "Fas Standart Saati" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "Fas Yaz Saati" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "Orta Avrupa Standart Saati" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "Orta Avrupa Yaz Saati" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "İran Standart Saati" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "İran Yaz Saati" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "Namibya Standart Saati" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "Namibya Yaz Saati" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "Tonga Standart Saati" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "Tonga Yaz Saati" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "Dağ Standart Saati (Meksika)" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "Dağ Yaz Saati (Meksika)" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "GMT Standart Saati" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "GMT Yaz Saati" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "Orta Asya Standart Saati" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "Orta Asya Yaz Saati" @@ -9807,35 +9808,35 @@ msgid "Arabic Daylight Time" msgstr "Arabistan Yaz Saati" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "Magadan Standart Saati" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "Magadan Yaz Saati" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "Newfoundland Standart Saati" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "Newfoundland Yaz Saati" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "Batı Pasifik Standart Saati" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "Batı Pasifik Yaz Saati" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "Pasifik Standart Saati" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "Pasifik Yaz Saati" @@ -9847,67 +9848,67 @@ msgid "Azerbaijan Daylight Time" msgstr "Azerbaycan Yaz Saati" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "Samoa Standart Saati" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "Samoa Yaz Saati" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "Kaliningrad Standart Saati" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "Kaliningrad Yaz Saati" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "Pasifik Standart Saati (Meksika)" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "Pasifik Yaz Saati (Meksika)" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "Ortadoğu Standart Saati" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "Ortadoğu Yaz Saati" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "Tokyo Standart Saati" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "Tokyo Yaz Saati" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "Line Adaları Standart Saati" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "Line Adaları Yaz Saati" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "Ürdün Standart Saati" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "Ürdün Yaz Saati" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "Orta Amerika Standart Time" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "Orta Amerika Yaz Saati" @@ -9919,11 +9920,11 @@ msgid "Azores Daylight Time" msgstr "Azor Adaları Yaz Saati" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "Kuzey Asya Doğu Standart Saati" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "Kuzey Asya Doğu Yaz Saati" @@ -9935,95 +9936,107 @@ msgid "Argentina Daylight Time" msgstr "Arjantin Yaz Saati" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "Mauritius Standard Time" +msgid "Marquesas Standard Time" +msgstr "Mauritius Standart Saati" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Mauritius Daylight Time" +msgid "Marquesas Daylight Time" +msgstr "Mauritius Yaz Saati" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "Myanmar Standart Saati" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "Myanmar Yaz Saati" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "Eşgüdümlü Evrensel Saat" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "Hindistan Standart Saati" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "Hindistan Yaz Saati" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "GTB Standart Saati" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "GTB Yaz Saati" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "Türkiye Standart Saati" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "Türkiye Yaz Saati" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "Fiji Standart Saati" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "Fiji Yaz Saati" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "Orta Kanada Standart Saati" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "Orta Kanada Yaz Saati" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "Taipei Standart Saati" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "Taipei Yaz Saati" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "Batı Avrupa Standart Saati" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "Batı Avrupa Yaz Saati" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "Montevideo Standart Saati" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "Montevideo Yaz Saati" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "Pakistan Standart Saati" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "Pakistan Yaz Saati" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "Kafkasya Standart Saati" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "Kanarya Yaz Saati" @@ -10035,27 +10048,27 @@ msgid "AUS Eastern Daylight Time" msgstr "Doğu Avustralya Yaz Saati" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "Kuzey Orta Asya Standart Saati" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "Kuzey Orta Asya Yaz Saati" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "Doğu Amerika Standart Saati" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "Doğu Amerika Yaz Saati" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "Orta Amerika Standart Saati (Meksika)" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "Orta Amerika Yaz Saati (Meksika)" @@ -10067,67 +10080,67 @@ msgid "Atlantic Daylight Time" msgstr "Atlas Okyanusu Yaz Saati" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "Dağlık Amerika Standart Saati" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "Dağlık Amerika Yaz Saati" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "Doğu Amerika Standart Saati" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "Doğu Amerika Yaz Saati" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "Tazmanya Standart Saati" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "Tazmanya Yaz Saati" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "Orta Amerika Standart Saati" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "Orta Amerika Yaz Saati" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "Dağlık Amerika Standart Saati" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "Dağlık Amerika Yaz Saati" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "Güney Afrika Standart Saati" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "Güney Afrika Yaz Saati" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "Orta Avustralya Standart Saati" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "Orta Avustralya Yaz Saati" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "Sri Lanka Standart Saati" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "Sri Lanka Yaz Saati" @@ -10139,19 +10152,19 @@ msgid "Afghanistan Daylight Time" msgstr "Afganistan Yaz Saati" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "Yakutsk Standart Saati" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "Yakutsk Yaz Saati" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "Güney Amerika Doğu Standart Saati" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "Güney Amerika Doğu Yaz Saati" @@ -10171,35 +10184,35 @@ msgid "Arabian Daylight Time" msgstr "Arabistan Yaz Saati" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "Rusya Standart Saati" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "Rusya Yaz Saati" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "Romanya Standart Saati" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "Romanya Yaz Saati" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "Ekaterinburg Standart Saati" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "Ekaterinburg Yaz Saati" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "Suriye Standart Saati" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "Suriye Yaz Saati" @@ -10211,27 +10224,27 @@ msgid "AUS Central Daylight Time" msgstr "Orta Avustralya Yaz Saati" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "Greenwich Standart Saati" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "Greenwich Yaz Saati" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "Ulan Bator Standart Saati" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "Ulan Bator Yaz Saati" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "İsrail Standart Saati" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "İsrail Yaz Saati" @@ -10243,19 +10256,19 @@ msgid "Bangladesh Daylight Time" msgstr "Bangladeş Yaz Saati" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "Güney Amerika Pasifik Standart Saati" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "Güney Amerika Pasifik Yaz Saati" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "Batı Asya Standart Saati" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "Batı Asya Yaz Saati" @@ -10267,27 +10280,27 @@ msgid "Alaskan Daylight Time" msgstr "Alaska Yaz Saati" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "Paraguay Standart Saati" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "Paraguay Yaz Saati" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "Tarih Değiştirme Çizgisi Standart Saati" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "Tarih Değiştirme Çizgisi Yaz Saati" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "Libya Standart Saati" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "Libya Yaz Saati" @@ -10299,35 +10312,47 @@ msgid "Bahia Daylight Time" msgstr "Bahia Yaz Saati" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "Venezuela Standart Saati" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "Venezuela Yaz Saati" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Mountain Standard Time" +msgid "Bougainville Standard Time" +msgstr "Dağlık Amerika Standart Saati" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Mountain Daylight Time" +msgid "Bougainville Daylight Time" +msgstr "Dağlık Amerika Yaz Saati" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "Hawaii Standart Saati" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "Hawaii Yaz Saati" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "Güneydoğu Asya Standart Saati" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "Güneydoğu Asya Yaz Saati" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "Yeni Zelanda Standart Saati" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "Yeni Zelanda Yaz Saati" @@ -10343,11 +10368,11 @@ msgid "Aleutian Daylight Time" msgstr "Arjantin Yaz Saati" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "Orta Brezilya Standart Saati" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "Orta Brezilya Yaz Saati" @@ -10359,131 +10384,143 @@ msgid "Belarus Daylight Time" msgstr "Belarus Yaz Saati" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "Güney Amerika Batı Standart Saati" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "Güney Amerika Batı Yaz Saati" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "Grönland Standart Saati" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "Grönland Yaz Saati" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "Paskalya Adası Standart Saati" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "Paskalya Adası Yaz Saati" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "Mısır Standart Saati" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "Mısır Yaz Saati" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "Mauritius Standart Saati" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "Mauritius Yaz Saati" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "Vladivostok Standart Saati" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "Vladivostok Yaz Saati" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "Singapur Standart Saati" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "Singapur Yaz Saati" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "Kore Standart Saati" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "Kore Yaz Saati" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Easter Island Standard Time" +msgid "Chatham Islands Standard Time" +msgstr "Paskalya Adası Standart Saati" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Easter Island Daylight Time" +msgid "Chatham Islands Daylight Time" +msgstr "Paskalya Adası Yaz Saati" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "Doğu Afrika Standart Saati" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "Doğu Afrika Yaz Saati" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "Finladiya-Litvanya-Estonya Standart Saati" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "Finlandiya-Litvanya-Estonya Yaz Saati" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "Güney Amerika Doğu Standart Saati" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "Güney Amerika Doğu Yaz Saati" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "Orta Pasifik Standart Saati" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "Orta Pasifik Yaz Saati" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "Orta Afrika Batı Standart Saati" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "Orta Afrika Batı Yaz Saati" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "Güney Amerika Pasifik Standart Saati" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "Güney Amerika Batı Yaz Saati" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "Doğu Avustralya Standart Saati" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "Doğu Avustralya Yaz Saati" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "Batı Avustralya Standart Saati" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "Batı Avustralya Yaz Saati" @@ -11645,7 +11682,7 @@ msgid "Digi&tal" msgstr "Sa&yısal" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Yazıtipi..." @@ -15458,7 +15495,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "%s içerisindeki Wine yapılandırması güncelleniyor, lütfen bekleyin..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15470,23 +15507,23 @@ "herhangi sonraki sürümü altında şartlara bağlı kalarak tekrar dağıtılabilir " "ve/veya düzenlenebilir." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Windows kayıt bilgisi" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "Kullanıcı:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Kuruluş:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Uygulama ayarları" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15496,55 +15533,55 @@ "Kitaplıklar ve Grafik sekmeleri ile bağlantılı olup bu sekmelerde de sistem " "çapındaki veya uygulamaya özel ayarları yapmanıza izin verir." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "Uygulama &Ekle..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "Uygulama &Kaldır" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Windows Sürümü:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Pencere ayarları" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Fareyi ta&m ekran pencerelerde otomatik olarak yakala" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Pencere yöneticisinin pencereleri &düzenlemesine izin ver" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Pencere yöneticisinin pencereleri yönetmesine izin ver" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "Sanal masaüstü kullan" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Masaüstü büyüklüğü:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Ekran çözünürlüğü" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Bu, 10 nokta Tahoma kullanan örnek bir metindir" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL öncelikleri" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15554,262 +15591,262 @@ "(Windows'tan alınmış ya da uygulama tarafından sağlanmış) olarak " "belirtilebilir." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "Kitaplık için yeni öncelik:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "Ek&le" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Var olan öncelikler:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Düzenle..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Öncelik Düzenle" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Yükleme sırası" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Yerleşik (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Doğal (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "Önce Yerl&eşik sonra Doğal" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "Önce D&oğal sonra Yerleşik" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Sürücü Harfini Seçin" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Sürücü yapılandırması" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" "Bağlama yöneticisine bağlanılamadı, sürücü yapılandırması düzenlenemiyor." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "&Ekle..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "Otomatik &Algıla" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Yol:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "Gelişmiş A&yarlar" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "Ay&gıt:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "Gö&zat..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Etiket:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "S&eri No:" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "&Noktayla başlayan dosyaları göster" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Sürücü tanıları" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Varsayılanlar" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Çıktı aygıtı:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Ses çıkış aygıtı:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Girdi aygıtı:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Ses girdi aygıtı:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Ses Testi" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Hoparlör yapılandırması" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Hoparlörler:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Görünüm" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "Tema:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "Tema yükle..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "&Öğe:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "Re&nk:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "MIME türleri" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "&Dosya ilişkilendirmelerini düzenle" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Klasörler" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "Hedef d&izin:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Kitaplıklar" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Sürücüler" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Lütfen Unix hedef dizinini seçin." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "Te&mel Ayarlar" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Tema Yok)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Grafik" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Masaüstü Bütünleştirmesi" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Ses" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Hakkında" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Wine yapılandırması" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Tema dosyaları (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Tema dosyası seçin" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Klasör" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Hedef Dizin" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "%s için Wine yapılandırması" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Seçili sürücü: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Hiçbiri)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Ses sınaması başarısız!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Sistem varsayılan)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "5.1 Çevresel" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "Kadrafonik" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Stereo" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Mono" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15817,67 +15854,67 @@ "Bu kitaplığın yükleme sırasının değiştirilmesi önerilmez.\n" "Bunu yapmak istediğinizden emin misiniz?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Uyarı: sistem kitaplığı" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "doğal" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "yerleşik" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "doğal, yerleşik" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "yerleşik, doğal" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "devre dışı" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Varsayılan Ayarlar" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Wine Programları (*.exe,*.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Genel ayarları kullan" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Çalıştırılabilir bir dosya seçin" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Otomatik &Algıla" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Yerel sabit disk" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Ağ paylaşımı" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Disket sürücü" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -15888,11 +15925,11 @@ "Her sürücünün A-Z aralığında bir harfi olmalıdır. Dolayısıyla 26'dan fazla " "sürücü tanımlayamazsınız." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Sistem sürücüsü" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15905,16 +15942,16 @@ "istenmeyen bir şekilde sonlanır. Eğer devam ederseniz, daha sonra yeniden " "oluşturmayı unutmayın!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Sürücü Harfi" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Hedef Klasör" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -15925,127 +15962,127 @@ "Bir tane oluşturmak için Sürücüler sekmesinden Ekle'yi tıklatmayı " "unutmayın!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Arkaplan Denetimi" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Metin Denetimi" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Menü Arkaplanı" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Menü Metni" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Kaydırma Çubuğu" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Seçim Arkaplanı" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Metin Seçimi" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "İpucu Arkaplanı" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "İpucu Metni" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Pencere Arkaplanı" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Pencere Metni" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Etkin Başlık Çubuğu" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Etkin Başlık Metni" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Etkin Olmayan Başlık Çubuğu" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Etkin Olmayan Başlık Metni" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "İleti Kutusu Metni" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Uygulama Çalışma Alanı" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Pencere Çerçevesi" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Etkin Çerçeve" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Etkin Olmayan Çerçeve" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Gölge Denetimi" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Gri Metin" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Belirtme Denetimi" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Koyu Gölge Denetimi" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Işık Denetimi" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Arkaplan Sıra Denetimi" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Aktif İzlenen Nesne" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Etkin Başlık Çubuğu Gradyanı" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Etkin Olmayan Başlık Çubuğu Gradyanı" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Menü Belirtmesi" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Menü çubuğu" diff -Nru wine-development-5.5/po/uk.po wine-development-5.6/po/uk.po --- wine-development-5.5/po/uk.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/uk.po 2020-04-10 18:54:32.000000000 +0000 @@ -46,8 +46,8 @@ msgid "&Modify..." msgstr "&Змінити..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "&Видалити" @@ -66,7 +66,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -149,8 +149,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -187,7 +187,7 @@ "computer." msgstr "Дозволяє встановити нове та видалити наявне ПЗ з вашого комп'ютера." -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "Додатки" @@ -581,7 +581,7 @@ msgid "Font St&yle:" msgstr "&Стиль:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Розмір:" @@ -597,7 +597,7 @@ msgid "&Underline" msgstr "&Підкреслений" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Колір:" @@ -771,7 +771,7 @@ msgid "C&ollate" msgstr "&Розбити" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "Ро&змір:" @@ -2252,7 +2252,7 @@ msgid "&File name:" msgstr "&Ім'я файлу:" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "&Огляд..." @@ -3017,7 +3017,7 @@ msgid "Player" msgstr "Програвач" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "Пристрій" @@ -3564,7 +3564,7 @@ msgid "Joysticks" msgstr "Джойстик" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "Вим&кнути" @@ -3830,6 +3830,7 @@ msgstr "Бібліотека ядра Wine" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7295,7 +7296,7 @@ msgid "Hyperlink Information" msgstr "Дані про Гіперпосилання" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "&Тип:" @@ -8803,7 +8804,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "точок на дюйм" @@ -9299,7 +9300,7 @@ msgid "&Open:" msgstr "&Відкрити:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "&Огляд..." @@ -9388,7 +9389,7 @@ msgid "Date deleted" msgstr "Дата видалення" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "Стільниця" @@ -9729,7 +9730,7 @@ msgid "Trash" msgstr "Кошик" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "Помилка" @@ -9760,123 +9761,123 @@ msgid "Select Source" msgstr "Виберіть джерело" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 msgid "Haiti Standard Time" msgstr "" -#: tzres.rc:117 +#: tzres.rc:121 msgid "Haiti Daylight Time" msgstr "" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9888,35 +9889,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9928,67 +9929,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10000,11 +10001,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10016,95 +10017,103 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +msgid "Marquesas Standard Time" +msgstr "" + +#: tzres.rc:143 +msgid "Marquesas Daylight Time" +msgstr "" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10116,27 +10125,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10148,67 +10157,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10220,19 +10229,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10252,35 +10261,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10292,27 +10301,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10324,19 +10333,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10348,27 +10357,27 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10380,35 +10389,43 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +msgid "Bougainville Standard Time" +msgstr "" + +#: tzres.rc:61 +msgid "Bougainville Daylight Time" +msgstr "" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10420,11 +10437,11 @@ msgid "Aleutian Daylight Time" msgstr "" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10436,131 +10453,139 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +msgid "Chatham Islands Standard Time" +msgstr "" + +#: tzres.rc:87 +msgid "Chatham Islands Daylight Time" +msgstr "" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11723,7 +11748,7 @@ msgid "Digi&tal" msgstr "&Ци&фровий" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "&Шрифт..." @@ -15524,7 +15549,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "Оновлення конфігурації Wine в %s, будь ласка, зачекайте..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15535,23 +15560,23 @@ "умов GNU Lesser General Public License, яка опублікована Free Software " "Foundation; версії 2.1 Ліцензії, чи (на ваш розсуд) новішої версії." -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Реєстраційна інформація Windows" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "&Власник:" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "Органі&зація:" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "Налаштування програми" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15561,55 +15586,55 @@ "пов'язана з вкладками Бібліотеки та Графіка, що дозволяє зміну налаштувань в " "цих вкладках як для окремої програми, так і глобально." -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "&Додати програму..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "&Видалити програму" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Версія Windows:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "Параметри вікна" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "Автоматично захоплювати &мишу у повноекранних вікнах" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "Дозволити менеджеру вікон &декорувати вікна" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "Дозволити менеджеру вікон &керувати вікнами" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "&Емулювати віртуальний робочий стіл" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "Розмір робочого &столу:" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "Розширення екрану" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "Приклад тексту. Шрифт Tahoma 10 пунктів" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "Заміщення DLL" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15618,55 +15643,55 @@ "Тут вказується, яку динамічно під'єднувану бібліотеку (DLL) використовувати: " "вбудовану в Wine або сторонню (з Windows, чи надану разом з програмою)." -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "&Нове заміщення для бібліотеки:" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "&Додати" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "Існуючі &заміщення:" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "&Змінити..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "Змінити заміщення" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "Порядок завантаження" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "&Вбудована (Wine)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "&Стороння (Windows)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "В&будована, потім стороння" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "С&тороння, потім вбудована" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "Виберіть букву диску" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "Налаштування привода" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." @@ -15674,207 +15699,207 @@ "Неможливо з'єднатися з менеджером монтування, конфігурацію дисків не можна " "редагувати." -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "&Додати..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "Автовизначення" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "&Шлях:" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "Показати &додат. налашт." -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "&Привід:" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "О&гляд..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "&Мітка:" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "&Сер.ном:" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "Показувати &файли, що починаються з крапки" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "Діагностика драйвера" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "Типове" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "Пристрій виводу:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "Пристрій виводу голосу:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "Пристрій вводу:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "Пристрій вводу голосу:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "&Тест звуку" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "Налаштування динаміків" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "Канали:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "Вигляд" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "&Тема:" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "&Встановити тему..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "Е&лемент:" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "Ко&лір:" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "Типи MIME" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "Керування &асоціаціями файлів" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "Теки" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "&Направити:" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "Бібліотеки" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "Диски" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "Будь ласка, виберіть цільову теку Unix." -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "Сховати &додат. налашт." -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(Без теми)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "Графіка" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "Інтеграція в інтерфейс" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "Аудіо" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "Про програму" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Параметри Wine" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "Файли тем (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "Виберіть файл теми" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "Тека" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "Посилання на" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Параметри Wine для %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "Вибраний драйвер: %s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(Немає)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "Аудіо тест провалився!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(Типовий системний)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "Багатоканальний 5.1" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "Квадрофонічний" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "Стерео" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "Моно" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15882,67 +15907,67 @@ "Зміна порядку завантаження цієї бібліотеки не рекомендується.\n" "Дійсно змінити порядок?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "Увага: системна бібліотека" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "стороння" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "вбудована" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "стороння, вбудована" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "вбудована, стороння" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "вимкнено" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "Стандартні налаштування" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Програми Wine (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "Використати глобальні параметри" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "Виберіть виконуваний файл" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "Автовизначення" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "Жорсткий диск" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "Мережний диск" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "Дисковод" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "CD-ROM" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -15953,11 +15978,11 @@ "Кожен диск має мати букву від A до Z, тому не можна мати більше ніж 26 " "дисків." -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "Системний диск" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15969,16 +15994,16 @@ "Більшість Windows-програм перестануть працювати без диску C. Якщо ви все ж " "вирішили видалити диск, не забудьте створити новий!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "Буква" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "Цільова тека" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -15988,127 +16013,127 @@ "\n" "Натисніть 'Додати' в закладці Диски щоб створити його!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "Елементи керування - фон" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "Елементи керування - текст" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "Меню - фон" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "Меню - текст" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "Смуга прокручування" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "Виділення - фон" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "Виділення - текст" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "Підказка - фон" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "Підказка - текст" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "Вікно - фон" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "Вікно - текст" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "Заголовок акт. вікна" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "Заголовок акт. - текст" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "Заголовок неак. вікна" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "Заголовок неак. вікна - текст" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "Вікно повідомлення - текст" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "Робоче поле програми" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "Вікно - рамка" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "Активна рамка" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "Неактивна рамка" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "Елементи керування - тінь" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "Недоступний елемент - текст" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "Ел-ти керув. - світла рамка" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "Ел-ти керув. - темна тінь" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "Елементи керування - світло" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "Ел-ти керув. - інший фон" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "Посилання, Підсвічування" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "Градієнт заголовка акт. вікна" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "Град. заголовка неакт. вікна" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "Меню - підсвічування" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "Рядок меню" diff -Nru wine-development-5.5/po/wa.po wine-development-5.6/po/wa.po --- wine-development-5.5/po/wa.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/wa.po 2020-04-10 18:54:32.000000000 +0000 @@ -45,8 +45,8 @@ msgid "&Modify..." msgstr "&Copyî..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 #, fuzzy msgid "&Remove" msgstr "&Sicrîre..." @@ -67,7 +67,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -147,8 +147,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -179,7 +179,7 @@ "computer." msgstr "" -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "" @@ -578,7 +578,7 @@ msgid "Font St&yle:" msgstr "S&tîle del fonte:" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "&Grandeu:" @@ -594,7 +594,7 @@ msgid "&Underline" msgstr "&Sorligné" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "&Coleur:" @@ -774,7 +774,7 @@ msgid "C&ollate" msgstr "" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "" @@ -2248,7 +2248,7 @@ msgid "&File name:" msgstr "&Fitchî" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "" @@ -2979,7 +2979,7 @@ msgid "Player" msgstr "" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "" @@ -3537,7 +3537,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "" @@ -3791,6 +3791,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 #, fuzzy msgid "Wine" msgstr "Wine" @@ -7295,7 +7296,7 @@ msgid "Hyperlink Information" msgstr "Informåcion" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "" @@ -8681,7 +8682,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "" @@ -9185,7 +9186,7 @@ msgid "&Open:" msgstr "&Drovî:" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "" @@ -9281,7 +9282,7 @@ msgid "Date deleted" msgstr "&Rafacer\tDel" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "" @@ -9603,7 +9604,7 @@ msgid "Trash" msgstr "" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "" @@ -9636,125 +9637,125 @@ msgid "Select Source" msgstr "&Tchewzi totåfwait" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy msgid "Haiti Standard Time" msgstr "&Rafacer\tDel" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy msgid "Haiti Daylight Time" msgstr "&Rafacer\tDel" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9766,35 +9767,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9806,67 +9807,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -9878,11 +9879,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -9894,95 +9895,105 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +msgid "Marquesas Standard Time" +msgstr "&Rafacer\tDel" + +#: tzres.rc:143 +#, fuzzy +msgid "Marquesas Daylight Time" +msgstr "&Rafacer\tDel" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -9994,27 +10005,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10026,67 +10037,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10098,19 +10109,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10130,35 +10141,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10170,27 +10181,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10202,19 +10213,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10226,28 +10237,28 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy msgid "Dateline Standard Time" msgstr "&Rafacer\tDel" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10259,35 +10270,45 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +msgid "Bougainville Standard Time" +msgstr "&Rafacer\tDel" + +#: tzres.rc:61 +#, fuzzy +msgid "Bougainville Daylight Time" +msgstr "&Rafacer\tDel" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10301,11 +10322,11 @@ msgid "Aleutian Daylight Time" msgstr "&Rafacer\tDel" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10317,133 +10338,143 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy msgid "Easter Island Standard Time" msgstr "&Rafacer\tDel" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy msgid "Easter Island Daylight Time" msgstr "&Rafacer\tDel" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +msgid "Chatham Islands Standard Time" +msgstr "&Rafacer\tDel" + +#: tzres.rc:87 +#, fuzzy +msgid "Chatham Islands Daylight Time" +msgstr "&Rafacer\tDel" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11489,7 +11520,7 @@ msgid "Digi&tal" msgstr "&Limerike" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 #, fuzzy msgid "&Font..." msgstr "" @@ -14964,7 +14995,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "" -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -14972,427 +15003,427 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 #, fuzzy msgid "Windows registration information" msgstr "Informåcion" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." msgstr "" -#: winecfg.rc:159 +#: winecfg.rc:158 #, fuzzy msgid "Add appli&cation..." msgstr "&Options" -#: winecfg.rc:160 +#: winecfg.rc:159 #, fuzzy msgid "&Remove application" msgstr "&Sicrîre..." -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 #, fuzzy msgid "&Edit..." msgstr "&Candjî" -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "" -#: winecfg.rc:210 +#: winecfg.rc:209 #, fuzzy msgid "&Native (Windows)" msgstr "Å dfait di &Wine..." -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy msgid "Drive configuration" msgstr "Informåcion" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "" -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "" -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 #, fuzzy msgid "Defaults" msgstr "Pådje &p" -#: winecfg.rc:268 +#: winecfg.rc:267 #, fuzzy msgid "Output device:" msgstr "&Fitchî" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy msgid "Speaker configuration" msgstr "Informåcion" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "" -#: winecfg.rc:291 +#: winecfg.rc:290 #, fuzzy msgid "&Install theme..." msgstr "&Sicrîre..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "" -#: winecfg.rc:47 +#: winecfg.rc:46 #, fuzzy msgid "Select a theme file" msgstr "&Tchwezi totafwait" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" msgstr "" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15400,144 +15431,144 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "" -#: winecfg.rc:111 +#: winecfg.rc:110 #, fuzzy msgid "Active Title Bar" msgstr "Sin bår di &Tite" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "" diff -Nru wine-development-5.5/po/wine.pot wine-development-5.6/po/wine.pot --- wine-development-5.5/po/wine.pot 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/wine.pot 2020-04-10 18:54:32.000000000 +0000 @@ -39,8 +39,8 @@ msgid "&Modify..." msgstr "" -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "" @@ -59,7 +59,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -135,8 +135,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -167,7 +167,7 @@ "computer." msgstr "" -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "" @@ -557,7 +557,7 @@ msgid "Font St&yle:" msgstr "" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "" @@ -573,7 +573,7 @@ msgid "&Underline" msgstr "" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "" @@ -745,7 +745,7 @@ msgid "C&ollate" msgstr "" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "" @@ -2192,7 +2192,7 @@ msgid "&File name:" msgstr "" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "" @@ -2899,7 +2899,7 @@ msgid "Player" msgstr "" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "" @@ -3433,7 +3433,7 @@ msgid "Joysticks" msgstr "" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "" @@ -3684,6 +3684,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "" @@ -7143,7 +7144,7 @@ msgid "Hyperlink Information" msgstr "" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "" @@ -8477,7 +8478,7 @@ msgid "b" msgstr "" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "" @@ -8969,7 +8970,7 @@ msgid "&Open:" msgstr "" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "" @@ -9058,7 +9059,7 @@ msgid "Date deleted" msgstr "" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "" @@ -9372,7 +9373,7 @@ msgid "Trash" msgstr "" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "" @@ -9403,123 +9404,123 @@ msgid "Select Source" msgstr "" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 msgid "Haiti Standard Time" msgstr "" -#: tzres.rc:117 +#: tzres.rc:121 msgid "Haiti Daylight Time" msgstr "" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -9531,35 +9532,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -9571,67 +9572,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -9643,11 +9644,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -9659,95 +9660,103 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +msgid "Marquesas Standard Time" +msgstr "" + +#: tzres.rc:143 +msgid "Marquesas Daylight Time" +msgstr "" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -9759,27 +9768,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -9791,67 +9800,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -9863,19 +9872,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -9895,35 +9904,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -9935,27 +9944,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -9967,19 +9976,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -9991,27 +10000,27 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10023,35 +10032,43 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +msgid "Bougainville Standard Time" +msgstr "" + +#: tzres.rc:61 +msgid "Bougainville Daylight Time" +msgstr "" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10063,11 +10080,11 @@ msgid "Aleutian Daylight Time" msgstr "" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10079,131 +10096,139 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +msgid "Chatham Islands Standard Time" +msgstr "" + +#: tzres.rc:87 +msgid "Chatham Islands Daylight Time" +msgstr "" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11233,7 +11258,7 @@ msgid "Digi&tal" msgstr "" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "" @@ -14649,7 +14674,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "" -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -14657,416 +14682,416 @@ "option) any later version." msgstr "" -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " "or per-application settings in those tabs as well." msgstr "" -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "" -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " "application)." msgstr "" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "" -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "" -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "" -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "" -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" msgstr "" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" "Each drive must have a letter, from A to Z, so you cannot have more than 26." msgstr "" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15074,143 +15099,143 @@ "it doesn't. If you proceed, remember to recreate it!" msgstr "" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" "Remember to click 'Add' in the Drives tab to create one!\n" msgstr "" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "" diff -Nru wine-development-5.5/po/zh_CN.po wine-development-5.6/po/zh_CN.po --- wine-development-5.5/po/zh_CN.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/zh_CN.po 2020-04-10 18:54:32.000000000 +0000 @@ -44,8 +44,8 @@ msgid "&Modify..." msgstr "修改(&M)..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "删除(&R)" @@ -64,7 +64,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -145,8 +145,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -182,7 +182,7 @@ "computer." msgstr "允许你安装新软件或删除现有程序。" -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "应用程序" @@ -572,7 +572,7 @@ msgid "Font St&yle:" msgstr "字体样式(&Y):" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "大小(&S):" @@ -588,7 +588,7 @@ msgid "&Underline" msgstr "下划线(&U)" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "配色(&C):" @@ -762,7 +762,7 @@ msgid "C&ollate" msgstr "逐份打印(&O)" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "大小(&Z):" @@ -2232,7 +2232,7 @@ msgid "&File name:" msgstr "文件名(&F):" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "浏览(&R)..." @@ -2967,7 +2967,7 @@ msgid "Player" msgstr "播放器" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "设备" @@ -3511,7 +3511,7 @@ msgid "Joysticks" msgstr "操纵杆" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "停用(&D)" @@ -3766,6 +3766,7 @@ msgstr "Wine kernel DLL" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7229,7 +7230,7 @@ msgid "Hyperlink Information" msgstr "超链接信息" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "类型(&T):" @@ -8654,7 +8655,7 @@ msgid "b" msgstr "b" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "dpi" @@ -9146,7 +9147,7 @@ msgid "&Open:" msgstr "打开(&O):" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "浏览(&B)..." @@ -9235,7 +9236,7 @@ msgid "Date deleted" msgstr "删除日期" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "桌面" @@ -9571,7 +9572,7 @@ msgid "Trash" msgstr "回收站" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "错误" @@ -9602,127 +9603,127 @@ msgid "Select Source" msgstr "选择来源" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "中国标准时间" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "中国夏令时" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "北亚标准时间" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "北亚夏令时" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "格鲁吉亚标准时间" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "格鲁吉亚夏令时" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "尼泊尔标准时间" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "尼泊尔夏令时" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "佛得角标准时间" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "佛得角夏令时" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Hawaiian Standard Time" msgid "Haiti Standard Time" msgstr "夏威夷标准时间" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Hawaiian Daylight Time" msgid "Haiti Daylight Time" msgstr "夏威夷夏令时" -#: tzres.rc:76 +#: tzres.rc:78 msgid "Central European Standard Time" msgstr "中欧标准时间" -#: tzres.rc:77 +#: tzres.rc:79 msgid "Central European Daylight Time" msgstr "中欧夏令时" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "摩洛哥标准时间" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "摩洛哥夏令时" -#: tzres.rc:74 +#: tzres.rc:76 msgid "Central Europe Standard Time" msgstr "中欧标准时间" -#: tzres.rc:75 +#: tzres.rc:77 msgid "Central Europe Daylight Time" msgstr "中欧夏令时" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "伊朗标准时间" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "伊朗夏令时" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "纳米比亚标准时间" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "纳米比亚夏令时" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "汤加标准时间" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "汤加夏令时" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "山地标准时间(墨西哥)" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "山地夏令时(墨西哥)" -#: tzres.rc:108 +#: tzres.rc:112 msgid "GMT Standard Time" msgstr "格林尼治标准时间" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "格林尼治夏令时" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "中亚标准时间" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "中亚夏令时" @@ -9734,35 +9735,35 @@ msgid "Arabic Daylight Time" msgstr "阿拉伯夏令时" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "马加丹标准时间" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "马加丹夏令时" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "纽芬兰标准时间" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "纽芬兰夏令时" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "西太平洋标准时间" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "西太平洋夏令时" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "太平洋标准时间" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "太平洋夏令时" @@ -9774,67 +9775,67 @@ msgid "Azerbaijan Daylight Time" msgstr "阿塞拜疆夏令时" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "萨摩亚标准时间" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "萨摩亚夏令时" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "加里宁格勒标准时间" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "加里宁格勒夏令时" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "太平洋标准时间(墨西哥)" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "太平洋夏令时(墨西哥)" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "中东标准时间" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "中东夏令时" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "东京标准时间" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "东京夏令时" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "莱恩群岛标准时间" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "莱恩群岛夏令时" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "约旦标准时间" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "约旦夏令时" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "中部标准时间" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "中部夏令时" @@ -9846,11 +9847,11 @@ msgid "Azores Daylight Time" msgstr "亚速尔群岛夏令时" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "北亚东部标准时间" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "北亚东部夏令时" @@ -9862,95 +9863,107 @@ msgid "Argentina Daylight Time" msgstr "阿根廷夏令时" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "Mauritius Standard Time" +msgid "Marquesas Standard Time" +msgstr "毛里求斯标准时间" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Mauritius Daylight Time" +msgid "Marquesas Daylight Time" +msgstr "毛里求斯夏令时" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "缅甸标准时间" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "缅甸夏令时" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "协调世界时" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "印度标准时间" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "印度夏令时" -#: tzres.rc:114 +#: tzres.rc:118 msgid "GTB Standard Time" msgstr "GTB 标准时间" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "GTB 夏令时" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "土耳其标准时间" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "土耳其夏令时" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "斐济标准时间" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "斐济夏令时" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "加拿大中部标准时间" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "加拿大中部夏令时" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "台北标准时间" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "台北夏令时" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "西欧标准时间" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "西欧夏令时" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "蒙得维的亚标准时间" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "蒙得维的亚夏令时" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "巴基斯坦标准时间" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "巴基斯坦夏令时" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "高加索标准时间" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "高加索夏令时" @@ -9962,27 +9975,27 @@ msgid "AUS Eastern Daylight Time" msgstr "澳大利亚东部夏令时" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "中北亚标准时间" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "中北亚夏令时" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "东部标准时间" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "东部夏令时" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "中部标准时间(墨西哥)" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "中部夏令时(墨西哥)" @@ -9994,67 +10007,67 @@ msgid "Atlantic Daylight Time" msgstr "大西洋夏令时" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "山地标准时间" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "山地夏令时" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "美国东部标准时间" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "美国东部夏令时" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "塔斯马尼亚标准时间" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "塔斯马尼亚夏令时" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "中美洲标准时间" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "中美洲夏令时" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "美国山地标准时间" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "美国山地夏令时" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "南非标准时间" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "南非夏令时" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "澳大利亚中部标准时间" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "澳大利亚中部夏令时" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "斯里兰卡标准时间" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "斯里兰卡夏令时" @@ -10066,19 +10079,19 @@ msgid "Afghanistan Daylight Time" msgstr "阿富汗夏令时" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "雅库次克标准时间" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "雅库次克夏令时" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "南美东部标准时间" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "南美东部夏令时" @@ -10098,35 +10111,35 @@ msgid "Arabian Daylight Time" msgstr "阿拉伯夏令时" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "俄罗斯标准时间" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "俄罗斯夏令时" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "罗曼标准时间" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "罗曼夏令时" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "叶卡捷琳堡标准时间" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "叶卡捷琳堡夏令时" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "叙利亚标准时间" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "叙利亚夏令时" @@ -10138,27 +10151,27 @@ msgid "AUS Central Daylight Time" msgstr "澳大利亚中部夏令时" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "格林威治标准时间" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "格林威治夏令时" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "乌兰巴托标准时间" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "乌兰巴托夏令时" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "以色列标准时间" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "以色列夏令时" @@ -10170,19 +10183,19 @@ msgid "Bangladesh Daylight Time" msgstr "孟加拉夏令时" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "南美太平洋标准时间" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "南美太平洋夏令时" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "西亚标准时间" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "西亚夏令时" @@ -10194,27 +10207,27 @@ msgid "Alaskan Daylight Time" msgstr "阿拉斯加夏令时" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "巴拉圭标准时间" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "巴拉圭夏令时" -#: tzres.rc:86 +#: tzres.rc:90 msgid "Dateline Standard Time" msgstr "日期变更线标准时间" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "日期变更线夏令时" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "利比亚标准时间" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "利比亚夏令时" @@ -10226,35 +10239,47 @@ msgid "Bahia Daylight Time" msgstr "巴伊亚夏令时" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "委内瑞拉标准时间" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "委内瑞拉夏令时" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Mountain Standard Time" +msgid "Bougainville Standard Time" +msgstr "山地标准时间" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Mountain Daylight Time" +msgid "Bougainville Daylight Time" +msgstr "山地夏令时" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "夏威夷标准时间" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "夏威夷夏令时" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "东南亚标准时间" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "东南亚夏令时" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "新西兰标准时间" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "新西兰夏令时" @@ -10270,11 +10295,11 @@ msgid "Aleutian Daylight Time" msgstr "阿根廷夏令时" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "巴西中部标准时间" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "巴西中部夏令时" @@ -10286,131 +10311,143 @@ msgid "Belarus Daylight Time" msgstr "白罗斯夏令时" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "南美西部标准时间" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "南美西部夏令时" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "格陵兰标准时间" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "格陵兰夏令时" -#: tzres.rc:94 +#: tzres.rc:98 msgid "Easter Island Standard Time" msgstr "复活节岛标准时间" -#: tzres.rc:95 +#: tzres.rc:99 msgid "Easter Island Daylight Time" msgstr "复活节岛夏令时" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "埃及标准时间" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "埃及夏令时" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "毛里求斯标准时间" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "毛里求斯夏令时" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "符拉迪沃斯托克标准时间" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "符拉迪沃斯托克夏令时" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "新加坡标准时间" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "新加坡夏令时" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "韩国标准时间" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "韩国夏令时" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Easter Island Standard Time" +msgid "Chatham Islands Standard Time" +msgstr "复活节岛标准时间" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Easter Island Daylight Time" +msgid "Chatham Islands Daylight Time" +msgstr "复活节岛夏令时" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "东非标准时间" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "东非夏令时" -#: tzres.rc:104 +#: tzres.rc:108 msgid "FLE Standard Time" msgstr "FLE 标准时间" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "FLE 夏令时" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "东南美洲标准时间" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "东南美洲夏令时" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "中太平洋标准时间" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "中太平洋夏令时" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "西中非标准时间" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "西中非夏令时" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "太平洋南美标准时间" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "太平洋南美夏令时" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "澳大利亚东部标准时间" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "澳大利亚东部夏令时" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "澳大利亚西部标准时间" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "澳大利亚西部夏令时" @@ -11477,7 +11514,7 @@ msgid "Digi&tal" msgstr "数字时钟(&T)" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "字体(&F)..." @@ -15204,7 +15241,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "正在更新位于 %s 的 Wine 配置,请稍候..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15215,23 +15252,23 @@ "(LGPL)来对其进行添加、修改和重新发布。许可协议版本为2.1,您也可以选择采用更" "新的版本。" -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Windows 注册信息" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "姓名(&O):" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "组织(&Z):" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "应用程序设置" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15240,55 +15277,55 @@ "对不同的程序,可以让 Wine 假装成不同版本的 Windows,也可以在“函数库”与“显" "示”标签页中作不同的设置。" -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "增加程序设置(&C)..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "删除程序设置(&R)" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Windows 版本:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "窗口设置" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "全屏模式下自动捕获光标(&M)" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "允许窗口管理器装饰窗口(&D)" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "允许窗口管理器控制窗口(&W)" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "虚拟桌面(&D)" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "桌面大小(&S):" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "屏幕分辨率" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "这是使用 10 号 Tahoma 字体的示例文本" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL 顶替" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -15297,261 +15334,261 @@ "对各个动态链接库,可以选择使用 Wine 提供的内建版本,还是使用取自 Windows 或程" "序所提供的原装版本。" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "新增函数库顶替(&N):" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "添加(&D)" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "已有的函数库顶替(&O):" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "编辑(&E)..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "编辑顶替" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "载入顺序" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "内建(Wine)(&B)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "原装(Windows)(&N)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "内建先于原装(&T)" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "原装先于内建(&V)" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "选择驱动器盘符" -#: winecfg.rc:232 +#: winecfg.rc:231 msgid "Drive configuration" msgstr "驱动器设置" -#: winecfg.rc:233 +#: winecfg.rc:232 msgid "" "Failed to connect to the mount manager; the drive configuration cannot be " "edited." msgstr "无法连接到挂载管理器;不能修改驱动器配置。" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "添加(&D)..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "自动侦测(&O)" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "路径(&P):" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "显示高级选项(&C)" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "设备(&V):" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "浏览(&W)..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "卷标(&L):" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "序列号(&E):" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "显示隐藏文件(&S)" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "驱动程序诊断" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "默认值" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "输出设备:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "语音输出设备:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "输入设备:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "语音输入设备:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "测试音频(&T)" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 msgid "Speaker configuration" msgstr "扬声器设置" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "扬声器:" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "外观" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "主题(&T):" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "安装主题(&I)..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "物件(&E):" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "颜色(&O):" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "MIME 类型" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "管理文件关联(&A)" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "文件夹" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "映射至(&L):" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "函数库" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "驱动器" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "请选择目标 Unix 文件夹。" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "隐藏高级选项(&C)" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(无主题)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "显示" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "桌面整合" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "音效" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "关于" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Wine 设置" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "主题文件 (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "选择主题文件" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "特殊文件夹" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "映射至" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Wine 设置:针对 %s" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "选中的驱动:%s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(无)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "音频测试失败!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(系统默认)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "5.1 环绕声" -#: winecfg.rc:92 +#: winecfg.rc:91 msgid "Quadraphonic" msgstr "四声道录放音设备" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "双声道" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "单声道" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -15559,67 +15596,67 @@ "不建议对这个函数库更改载入顺序。\n" "你确定要如此吗?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "警告:系统函数库" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "原装" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "内建" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "原装先于内建" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "内建先于原装" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "停用" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "默认设置" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Wine 程序 (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "使用全局设置" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "选择可执行文件" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "自动侦测" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "本地硬盘" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "网络共享文件夹" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "软盘" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "光驱" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -15629,11 +15666,11 @@ "\n" "驱动器的盘符必须是英文字母 A-Z, 因此最多只允许 26 个。" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "系统驱动器" -#: winecfg.rc:76 +#: winecfg.rc:75 msgid "" "Are you sure you want to delete drive C?\n" "\n" @@ -15645,16 +15682,16 @@ "大部分 Windows 程序都假定 C 盘存在,如找不到 C 盘可能会导致严重错误。如果要继" "续,请重新建立此盘!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "盘符" -#: winecfg.rc:78 +#: winecfg.rc:77 msgid "Target folder" msgstr "目标文件夹" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -15664,127 +15701,127 @@ "\n" "请记得点选“驱动器”标签的“添加”来建立它!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "控件背景" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "控件文字" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "菜单背景" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "菜单文字" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "滚动条" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "选中的文字背景" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "选中的文字" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "工具提示背景" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "工具提示文字" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "窗口背景" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "窗口文字" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "活动窗口标题栏" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "活动窗口标题栏文字" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "非活动窗口标题栏" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "非活动窗口标题栏" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "消息框文字" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "应用程序工作区" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "焦点控件框架" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "活动窗口边界" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "非活动窗口边界" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "控件阴影" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "灰色文字" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "控件高亮" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "控件灰暗" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "控件光亮" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "控件切换背景" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "鼠标拖选框" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "活动窗口标题栏渐进目标色" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "非活动窗口标题栏渐进目标色" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "菜单高亮" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "菜单栏" diff -Nru wine-development-5.5/po/zh_TW.po wine-development-5.6/po/zh_TW.po --- wine-development-5.5/po/zh_TW.po 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/po/zh_TW.po 2020-04-10 18:54:32.000000000 +0000 @@ -45,8 +45,8 @@ msgid "&Modify..." msgstr "修改(&M)..." -#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:200 -#: winecfg.rc:237 wordpad.rc:256 +#: appwiz.rc:69 appwiz.rc:45 cryptui.rc:351 msacm32.rc:40 winecfg.rc:199 +#: winecfg.rc:236 wordpad.rc:256 msgid "&Remove" msgstr "移除(&R)" @@ -65,7 +65,7 @@ #: notepad.rc:117 oleview.rc:161 oleview.rc:174 progman.rc:106 progman.rc:124 #: progman.rc:142 progman.rc:158 progman.rc:180 progman.rc:199 progman.rc:216 #: regedit.rc:296 regedit.rc:307 regedit.rc:320 regedit.rc:336 regedit.rc:349 -#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:214 winecfg.rc:224 +#: regedit.rc:362 taskmgr.rc:442 taskmgr.rc:517 winecfg.rc:213 winecfg.rc:223 #: wineconsole.rc:135 winefile.rc:127 winefile.rc:150 winefile.rc:180 #: winemine.rc:73 winemine.rc:84 winemine.rc:98 wordpad.rc:215 wordpad.rc:226 #: wordpad.rc:244 wordpad.rc:257 @@ -146,8 +146,8 @@ #: notepad.rc:118 oleview.rc:162 oleview.rc:175 progman.rc:107 progman.rc:125 #: progman.rc:143 progman.rc:159 progman.rc:181 progman.rc:200 progman.rc:217 #: regedit.rc:297 regedit.rc:308 regedit.rc:321 regedit.rc:337 regedit.rc:350 -#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:215 -#: winecfg.rc:225 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 +#: regedit.rc:363 taskmgr.rc:443 taskmgr.rc:518 wineboot.rc:34 winecfg.rc:214 +#: winecfg.rc:224 wineconsole.rc:136 winefile.rc:128 winefile.rc:151 #: winefile.rc:181 winemine.rc:99 wordpad.rc:216 wordpad.rc:227 wordpad.rc:245 #: wordpad.rc:258 msgid "Cancel" @@ -183,7 +183,7 @@ "computer." msgstr "允許您安裝新軟體, 或從您的電腦裡移除現有的軟體。" -#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:33 +#: appwiz.rc:33 taskmgr.rc:262 winecfg.rc:32 msgid "Applications" msgstr "應用程式" @@ -579,7 +579,7 @@ msgid "Font St&yle:" msgstr "字型樣式(&Y):" -#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:294 +#: comdlg32.rc:260 comdlg32.rc:439 winecfg.rc:293 msgid "&Size:" msgstr "大小(&S):" @@ -595,7 +595,7 @@ msgid "&Underline" msgstr "底線(&U)" -#: comdlg32.rc:270 winecfg.rc:292 +#: comdlg32.rc:270 winecfg.rc:291 msgid "&Color:" msgstr "配色(&C):" @@ -769,7 +769,7 @@ msgid "C&ollate" msgstr "自動分頁(&O)" -#: comdlg32.rc:414 winecfg.rc:300 +#: comdlg32.rc:414 winecfg.rc:299 msgid "Si&ze:" msgstr "大小(&Z):" @@ -2244,7 +2244,7 @@ msgid "&File name:" msgstr "檔案名稱(&F):" -#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:313 +#: cryptui.rc:301 cryptui.rc:323 cryptui.rc:437 winecfg.rc:312 msgid "B&rowse..." msgstr "瀏覽(&R)..." @@ -2993,7 +2993,7 @@ msgid "Player" msgstr "玩家" -#: dinput.rc:43 winecfg.rc:89 +#: dinput.rc:43 winecfg.rc:88 msgid "Device" msgstr "裝置" @@ -3549,7 +3549,7 @@ msgid "Joysticks" msgstr "搖桿" -#: joy.rc:39 winecfg.rc:213 +#: joy.rc:39 winecfg.rc:212 msgid "&Disable" msgstr "停用(&D)" @@ -3812,6 +3812,7 @@ msgstr "" #: ../../include/wine/wine_common_ver.rc:134 winemac.rc:32 wineboot.rc:42 +#: winecfg.rc:137 msgid "Wine" msgstr "Wine" @@ -7437,7 +7438,7 @@ msgid "Hyperlink Information" msgstr "超連結資訊" -#: mshtml.rc:43 winecfg.rc:245 +#: mshtml.rc:43 winecfg.rc:244 msgid "&Type:" msgstr "類型(&T):" @@ -8980,7 +8981,7 @@ msgid "b" msgstr "位元" -#: sane.rc:34 wineps.rc:49 winecfg.rc:183 +#: sane.rc:34 wineps.rc:49 winecfg.rc:182 msgctxt "unit: dots/inch" msgid "dpi" msgstr "點/英吋" @@ -9476,7 +9477,7 @@ msgid "&Open:" msgstr "開啟(&O):" -#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:243 +#: shell32.rc:343 progman.rc:182 progman.rc:201 progman.rc:218 winecfg.rc:242 #: winefile.rc:129 msgid "&Browse..." msgstr "瀏覽(&B)..." @@ -9579,7 +9580,7 @@ msgid "Date deleted" msgstr "日期已刪除" -#: shell32.rc:156 winecfg.rc:101 winefile.rc:99 +#: shell32.rc:156 winecfg.rc:100 winefile.rc:99 msgctxt "display name" msgid "Desktop" msgstr "桌面" @@ -9919,7 +9920,7 @@ msgid "Trash" msgstr "回收筒" -#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:87 winefile.rc:97 +#: shlwapi.rc:38 user32.rc:71 regedit.rc:204 winecfg.rc:86 winefile.rc:97 msgid "Error" msgstr "錯誤" @@ -9952,137 +9953,137 @@ msgid "Select Source" msgstr "新資料夾" -#: tzres.rc:84 +#: tzres.rc:88 msgid "China Standard Time" msgstr "" -#: tzres.rc:85 +#: tzres.rc:89 msgid "China Daylight Time" msgstr "" -#: tzres.rc:164 +#: tzres.rc:170 msgid "North Asia Standard Time" msgstr "" -#: tzres.rc:165 +#: tzres.rc:171 msgid "North Asia Daylight Time" msgstr "" -#: tzres.rc:106 +#: tzres.rc:110 msgid "Georgian Standard Time" msgstr "" -#: tzres.rc:107 +#: tzres.rc:111 msgid "Georgian Daylight Time" msgstr "" -#: tzres.rc:156 +#: tzres.rc:162 msgid "Nepal Standard Time" msgstr "" -#: tzres.rc:157 +#: tzres.rc:163 msgid "Nepal Daylight Time" msgstr "" -#: tzres.rc:62 +#: tzres.rc:64 msgid "Cape Verde Standard Time" msgstr "" -#: tzres.rc:63 +#: tzres.rc:65 msgid "Cape Verde Daylight Time" msgstr "" -#: tzres.rc:116 +#: tzres.rc:120 #, fuzzy #| msgid "Date and time" msgid "Haiti Standard Time" msgstr "日期和時間" -#: tzres.rc:117 +#: tzres.rc:121 #, fuzzy #| msgid "Date and time" msgid "Haiti Daylight Time" msgstr "日期和時間" -#: tzres.rc:76 +#: tzres.rc:78 #, fuzzy #| msgid "Central European" msgid "Central European Standard Time" msgstr "中歐語言" -#: tzres.rc:77 +#: tzres.rc:79 #, fuzzy #| msgid "Central European" msgid "Central European Daylight Time" msgstr "中歐語言" -#: tzres.rc:144 +#: tzres.rc:150 msgid "Morocco Standard Time" msgstr "" -#: tzres.rc:145 +#: tzres.rc:151 msgid "Morocco Daylight Time" msgstr "" -#: tzres.rc:74 +#: tzres.rc:76 #, fuzzy #| msgid "Central European" msgid "Central Europe Standard Time" msgstr "中歐語言" -#: tzres.rc:75 +#: tzres.rc:77 #, fuzzy #| msgid "Central European" msgid "Central Europe Daylight Time" msgstr "中歐語言" -#: tzres.rc:122 +#: tzres.rc:126 msgid "Iran Standard Time" msgstr "" -#: tzres.rc:123 +#: tzres.rc:127 msgid "Iran Daylight Time" msgstr "" -#: tzres.rc:154 +#: tzres.rc:160 msgid "Namibia Standard Time" msgstr "" -#: tzres.rc:155 +#: tzres.rc:161 msgid "Namibia Daylight Time" msgstr "" -#: tzres.rc:204 +#: tzres.rc:210 msgid "Tonga Standard Time" msgstr "" -#: tzres.rc:205 +#: tzres.rc:211 msgid "Tonga Daylight Time" msgstr "" -#: tzres.rc:148 +#: tzres.rc:154 msgid "Mountain Standard Time (Mexico)" msgstr "" -#: tzres.rc:149 +#: tzres.rc:155 msgid "Mountain Daylight Time (Mexico)" msgstr "" -#: tzres.rc:108 +#: tzres.rc:112 #, fuzzy #| msgid "&Standard bar" msgid "GMT Standard Time" msgstr "標準列(&S)" -#: tzres.rc:109 +#: tzres.rc:113 msgid "GMT Daylight Time" msgstr "" -#: tzres.rc:70 +#: tzres.rc:72 msgid "Central Asia Standard Time" msgstr "" -#: tzres.rc:71 +#: tzres.rc:73 msgid "Central Asia Daylight Time" msgstr "" @@ -10094,35 +10095,35 @@ msgid "Arabic Daylight Time" msgstr "" -#: tzres.rc:136 +#: tzres.rc:140 msgid "Magadan Standard Time" msgstr "" -#: tzres.rc:137 +#: tzres.rc:141 msgid "Magadan Daylight Time" msgstr "" -#: tzres.rc:160 +#: tzres.rc:166 msgid "Newfoundland Standard Time" msgstr "" -#: tzres.rc:161 +#: tzres.rc:167 msgid "Newfoundland Daylight Time" msgstr "" -#: tzres.rc:228 +#: tzres.rc:234 msgid "West Pacific Standard Time" msgstr "" -#: tzres.rc:229 +#: tzres.rc:235 msgid "West Pacific Daylight Time" msgstr "" -#: tzres.rc:168 +#: tzres.rc:174 msgid "Pacific Standard Time" msgstr "" -#: tzres.rc:169 +#: tzres.rc:175 msgid "Pacific Daylight Time" msgstr "" @@ -10134,67 +10135,67 @@ msgid "Azerbaijan Daylight Time" msgstr "" -#: tzres.rc:186 +#: tzres.rc:192 msgid "Samoa Standard Time" msgstr "" -#: tzres.rc:187 +#: tzres.rc:193 msgid "Samoa Daylight Time" msgstr "" -#: tzres.rc:128 +#: tzres.rc:132 msgid "Kaliningrad Standard Time" msgstr "" -#: tzres.rc:129 +#: tzres.rc:133 msgid "Kaliningrad Daylight Time" msgstr "" -#: tzres.rc:170 +#: tzres.rc:176 msgid "Pacific Standard Time (Mexico)" msgstr "" -#: tzres.rc:171 +#: tzres.rc:177 msgid "Pacific Daylight Time (Mexico)" msgstr "" -#: tzres.rc:140 +#: tzres.rc:146 msgid "Middle East Standard Time" msgstr "" -#: tzres.rc:141 +#: tzres.rc:147 msgid "Middle East Daylight Time" msgstr "" -#: tzres.rc:202 +#: tzres.rc:208 msgid "Tokyo Standard Time" msgstr "" -#: tzres.rc:203 +#: tzres.rc:209 msgid "Tokyo Daylight Time" msgstr "" -#: tzres.rc:134 +#: tzres.rc:138 msgid "Line Islands Standard Time" msgstr "" -#: tzres.rc:135 +#: tzres.rc:139 msgid "Line Islands Daylight Time" msgstr "" -#: tzres.rc:126 +#: tzres.rc:130 msgid "Jordan Standard Time" msgstr "" -#: tzres.rc:127 +#: tzres.rc:131 msgid "Jordan Daylight Time" msgstr "" -#: tzres.rc:80 +#: tzres.rc:82 msgid "Central Standard Time" msgstr "" -#: tzres.rc:81 +#: tzres.rc:83 msgid "Central Daylight Time" msgstr "" @@ -10206,11 +10207,11 @@ msgid "Azores Daylight Time" msgstr "" -#: tzres.rc:162 +#: tzres.rc:168 msgid "North Asia East Standard Time" msgstr "" -#: tzres.rc:163 +#: tzres.rc:169 msgid "North Asia East Daylight Time" msgstr "" @@ -10222,97 +10223,109 @@ msgid "Argentina Daylight Time" msgstr "" -#: tzres.rc:150 +#: tzres.rc:142 +#, fuzzy +#| msgid "&Standard bar" +msgid "Marquesas Standard Time" +msgstr "標準列(&S)" + +#: tzres.rc:143 +#, fuzzy +#| msgid "Date and time" +msgid "Marquesas Daylight Time" +msgstr "日期和時間" + +#: tzres.rc:156 msgid "Myanmar Standard Time" msgstr "" -#: tzres.rc:151 +#: tzres.rc:157 msgid "Myanmar Daylight Time" msgstr "" -#: tzres.rc:214 tzres.rc:215 +#: tzres.rc:220 tzres.rc:221 msgid "Coordinated Universal Time" msgstr "" -#: tzres.rc:120 +#: tzres.rc:124 msgid "India Standard Time" msgstr "" -#: tzres.rc:121 +#: tzres.rc:125 msgid "India Daylight Time" msgstr "" -#: tzres.rc:114 +#: tzres.rc:118 #, fuzzy #| msgid "&Standard bar" msgid "GTB Standard Time" msgstr "標準列(&S)" -#: tzres.rc:115 +#: tzres.rc:119 msgid "GTB Daylight Time" msgstr "" -#: tzres.rc:206 +#: tzres.rc:212 msgid "Turkey Standard Time" msgstr "" -#: tzres.rc:207 +#: tzres.rc:213 msgid "Turkey Daylight Time" msgstr "" -#: tzres.rc:102 +#: tzres.rc:106 msgid "Fiji Standard Time" msgstr "" -#: tzres.rc:103 +#: tzres.rc:107 msgid "Fiji Daylight Time" msgstr "" -#: tzres.rc:60 +#: tzres.rc:62 msgid "Canada Central Standard Time" msgstr "" -#: tzres.rc:61 +#: tzres.rc:63 msgid "Canada Central Daylight Time" msgstr "" -#: tzres.rc:198 +#: tzres.rc:204 msgid "Taipei Standard Time" msgstr "" -#: tzres.rc:199 +#: tzres.rc:205 msgid "Taipei Daylight Time" msgstr "" -#: tzres.rc:224 +#: tzres.rc:230 msgid "W. Europe Standard Time" msgstr "" -#: tzres.rc:225 +#: tzres.rc:231 msgid "W. Europe Daylight Time" msgstr "" -#: tzres.rc:142 +#: tzres.rc:148 msgid "Montevideo Standard Time" msgstr "" -#: tzres.rc:143 +#: tzres.rc:149 msgid "Montevideo Daylight Time" msgstr "" -#: tzres.rc:172 +#: tzres.rc:178 msgid "Pakistan Standard Time" msgstr "" -#: tzres.rc:173 +#: tzres.rc:179 msgid "Pakistan Daylight Time" msgstr "" -#: tzres.rc:64 +#: tzres.rc:66 msgid "Caucasus Standard Time" msgstr "" -#: tzres.rc:65 +#: tzres.rc:67 msgid "Caucasus Daylight Time" msgstr "" @@ -10324,27 +10337,27 @@ msgid "AUS Eastern Daylight Time" msgstr "" -#: tzres.rc:152 +#: tzres.rc:158 msgid "N. Central Asia Standard Time" msgstr "" -#: tzres.rc:153 +#: tzres.rc:159 msgid "N. Central Asia Daylight Time" msgstr "" -#: tzres.rc:96 +#: tzres.rc:100 msgid "Eastern Standard Time" msgstr "" -#: tzres.rc:97 +#: tzres.rc:101 msgid "Eastern Daylight Time" msgstr "" -#: tzres.rc:82 +#: tzres.rc:84 msgid "Central Standard Time (Mexico)" msgstr "" -#: tzres.rc:83 +#: tzres.rc:85 msgid "Central Daylight Time (Mexico)" msgstr "" @@ -10356,67 +10369,67 @@ msgid "Atlantic Daylight Time" msgstr "" -#: tzres.rc:146 +#: tzres.rc:152 msgid "Mountain Standard Time" msgstr "" -#: tzres.rc:147 +#: tzres.rc:153 msgid "Mountain Daylight Time" msgstr "" -#: tzres.rc:210 +#: tzres.rc:216 msgid "US Eastern Standard Time" msgstr "" -#: tzres.rc:211 +#: tzres.rc:217 msgid "US Eastern Daylight Time" msgstr "" -#: tzres.rc:200 +#: tzres.rc:206 msgid "Tasmania Standard Time" msgstr "" -#: tzres.rc:201 +#: tzres.rc:207 msgid "Tasmania Daylight Time" msgstr "" -#: tzres.rc:68 +#: tzres.rc:70 msgid "Central America Standard Time" msgstr "" -#: tzres.rc:69 +#: tzres.rc:71 msgid "Central America Daylight Time" msgstr "" -#: tzres.rc:212 +#: tzres.rc:218 msgid "US Mountain Standard Time" msgstr "" -#: tzres.rc:213 +#: tzres.rc:219 msgid "US Mountain Daylight Time" msgstr "" -#: tzres.rc:192 +#: tzres.rc:198 msgid "South Africa Standard Time" msgstr "" -#: tzres.rc:193 +#: tzres.rc:199 msgid "South Africa Daylight Time" msgstr "" -#: tzres.rc:66 +#: tzres.rc:68 msgid "Cen. Australia Standard Time" msgstr "" -#: tzres.rc:67 +#: tzres.rc:69 msgid "Cen. Australia Daylight Time" msgstr "" -#: tzres.rc:194 +#: tzres.rc:200 msgid "Sri Lanka Standard Time" msgstr "" -#: tzres.rc:195 +#: tzres.rc:201 msgid "Sri Lanka Daylight Time" msgstr "" @@ -10428,19 +10441,19 @@ msgid "Afghanistan Daylight Time" msgstr "" -#: tzres.rc:230 +#: tzres.rc:236 msgid "Yakutsk Standard Time" msgstr "" -#: tzres.rc:231 +#: tzres.rc:237 msgid "Yakutsk Daylight Time" msgstr "" -#: tzres.rc:180 +#: tzres.rc:186 msgid "SA Eastern Standard Time" msgstr "" -#: tzres.rc:181 +#: tzres.rc:187 msgid "SA Eastern Daylight Time" msgstr "" @@ -10460,35 +10473,35 @@ msgid "Arabian Daylight Time" msgstr "" -#: tzres.rc:178 +#: tzres.rc:184 msgid "Russian Standard Time" msgstr "" -#: tzres.rc:179 +#: tzres.rc:185 msgid "Russian Daylight Time" msgstr "" -#: tzres.rc:176 +#: tzres.rc:182 msgid "Romance Standard Time" msgstr "" -#: tzres.rc:177 +#: tzres.rc:183 msgid "Romance Daylight Time" msgstr "" -#: tzres.rc:100 +#: tzres.rc:104 msgid "Ekaterinburg Standard Time" msgstr "" -#: tzres.rc:101 +#: tzres.rc:105 msgid "Ekaterinburg Daylight Time" msgstr "" -#: tzres.rc:196 +#: tzres.rc:202 msgid "Syria Standard Time" msgstr "" -#: tzres.rc:197 +#: tzres.rc:203 msgid "Syria Daylight Time" msgstr "" @@ -10500,27 +10513,27 @@ msgid "AUS Central Daylight Time" msgstr "" -#: tzres.rc:112 +#: tzres.rc:116 msgid "Greenwich Standard Time" msgstr "" -#: tzres.rc:113 +#: tzres.rc:117 msgid "Greenwich Daylight Time" msgstr "" -#: tzres.rc:208 +#: tzres.rc:214 msgid "Ulaanbaatar Standard Time" msgstr "" -#: tzres.rc:209 +#: tzres.rc:215 msgid "Ulaanbaatar Daylight Time" msgstr "" -#: tzres.rc:124 +#: tzres.rc:128 msgid "Israel Standard Time" msgstr "" -#: tzres.rc:125 +#: tzres.rc:129 msgid "Israel Daylight Time" msgstr "" @@ -10532,19 +10545,19 @@ msgid "Bangladesh Daylight Time" msgstr "" -#: tzres.rc:182 +#: tzres.rc:188 msgid "SA Pacific Standard Time" msgstr "" -#: tzres.rc:183 +#: tzres.rc:189 msgid "SA Pacific Daylight Time" msgstr "" -#: tzres.rc:226 +#: tzres.rc:232 msgid "West Asia Standard Time" msgstr "" -#: tzres.rc:227 +#: tzres.rc:233 msgid "West Asia Daylight Time" msgstr "" @@ -10556,29 +10569,29 @@ msgid "Alaskan Daylight Time" msgstr "" -#: tzres.rc:174 +#: tzres.rc:180 msgid "Paraguay Standard Time" msgstr "" -#: tzres.rc:175 +#: tzres.rc:181 msgid "Paraguay Daylight Time" msgstr "" -#: tzres.rc:86 +#: tzres.rc:90 #, fuzzy #| msgid "Date and time" msgid "Dateline Standard Time" msgstr "日期和時間" -#: tzres.rc:87 +#: tzres.rc:91 msgid "Dateline Daylight Time" msgstr "" -#: tzres.rc:132 +#: tzres.rc:136 msgid "Libya Standard Time" msgstr "" -#: tzres.rc:133 +#: tzres.rc:137 msgid "Libya Daylight Time" msgstr "" @@ -10590,35 +10603,47 @@ msgid "Bahia Daylight Time" msgstr "" -#: tzres.rc:216 +#: tzres.rc:222 msgid "Venezuela Standard Time" msgstr "" -#: tzres.rc:217 +#: tzres.rc:223 msgid "Venezuela Daylight Time" msgstr "" -#: tzres.rc:118 +#: tzres.rc:60 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Standard Time" +msgstr "日期和時間" + +#: tzres.rc:61 +#, fuzzy +#| msgid "Date and time" +msgid "Bougainville Daylight Time" +msgstr "日期和時間" + +#: tzres.rc:122 msgid "Hawaiian Standard Time" msgstr "" -#: tzres.rc:119 +#: tzres.rc:123 msgid "Hawaiian Daylight Time" msgstr "" -#: tzres.rc:188 +#: tzres.rc:194 msgid "SE Asia Standard Time" msgstr "" -#: tzres.rc:189 +#: tzres.rc:195 msgid "SE Asia Daylight Time" msgstr "" -#: tzres.rc:158 +#: tzres.rc:164 msgid "New Zealand Standard Time" msgstr "" -#: tzres.rc:159 +#: tzres.rc:165 msgid "New Zealand Daylight Time" msgstr "" @@ -10634,11 +10659,11 @@ msgid "Aleutian Daylight Time" msgstr "日期和時間" -#: tzres.rc:72 +#: tzres.rc:74 msgid "Central Brazilian Standard Time" msgstr "" -#: tzres.rc:73 +#: tzres.rc:75 msgid "Central Brazilian Daylight Time" msgstr "" @@ -10650,137 +10675,149 @@ msgid "Belarus Daylight Time" msgstr "" -#: tzres.rc:184 +#: tzres.rc:190 msgid "SA Western Standard Time" msgstr "" -#: tzres.rc:185 +#: tzres.rc:191 msgid "SA Western Daylight Time" msgstr "" -#: tzres.rc:110 +#: tzres.rc:114 msgid "Greenland Standard Time" msgstr "" -#: tzres.rc:111 +#: tzres.rc:115 msgid "Greenland Daylight Time" msgstr "" -#: tzres.rc:94 +#: tzres.rc:98 #, fuzzy #| msgid "Date and time" msgid "Easter Island Standard Time" msgstr "日期和時間" -#: tzres.rc:95 +#: tzres.rc:99 #, fuzzy #| msgid "Date and time" msgid "Easter Island Daylight Time" msgstr "日期和時間" -#: tzres.rc:98 +#: tzres.rc:102 msgid "Egypt Standard Time" msgstr "" -#: tzres.rc:99 +#: tzres.rc:103 msgid "Egypt Daylight Time" msgstr "" -#: tzres.rc:138 +#: tzres.rc:144 msgid "Mauritius Standard Time" msgstr "" -#: tzres.rc:139 +#: tzres.rc:145 msgid "Mauritius Daylight Time" msgstr "" -#: tzres.rc:218 +#: tzres.rc:224 msgid "Vladivostok Standard Time" msgstr "" -#: tzres.rc:219 +#: tzres.rc:225 msgid "Vladivostok Daylight Time" msgstr "" -#: tzres.rc:190 +#: tzres.rc:196 msgid "Singapore Standard Time" msgstr "" -#: tzres.rc:191 +#: tzres.rc:197 msgid "Singapore Daylight Time" msgstr "" -#: tzres.rc:130 +#: tzres.rc:134 msgid "Korea Standard Time" msgstr "" -#: tzres.rc:131 +#: tzres.rc:135 msgid "Korea Daylight Time" msgstr "" -#: tzres.rc:88 +#: tzres.rc:86 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Standard Time" +msgstr "日期和時間" + +#: tzres.rc:87 +#, fuzzy +#| msgid "Date and time" +msgid "Chatham Islands Daylight Time" +msgstr "日期和時間" + +#: tzres.rc:92 msgid "E. Africa Standard Time" msgstr "" -#: tzres.rc:89 +#: tzres.rc:93 msgid "E. Africa Daylight Time" msgstr "" -#: tzres.rc:104 +#: tzres.rc:108 #, fuzzy #| msgid "&Standard bar" msgid "FLE Standard Time" msgstr "標準列(&S)" -#: tzres.rc:105 +#: tzres.rc:109 msgid "FLE Daylight Time" msgstr "" -#: tzres.rc:92 +#: tzres.rc:96 msgid "E. South America Standard Time" msgstr "" -#: tzres.rc:93 +#: tzres.rc:97 msgid "E. South America Daylight Time" msgstr "" -#: tzres.rc:78 +#: tzres.rc:80 msgid "Central Pacific Standard Time" msgstr "" -#: tzres.rc:79 +#: tzres.rc:81 msgid "Central Pacific Daylight Time" msgstr "" -#: tzres.rc:222 +#: tzres.rc:228 msgid "W. Central Africa Standard Time" msgstr "" -#: tzres.rc:223 +#: tzres.rc:229 msgid "W. Central Africa Daylight Time" msgstr "" -#: tzres.rc:166 +#: tzres.rc:172 msgid "Pacific SA Standard Time" msgstr "" -#: tzres.rc:167 +#: tzres.rc:173 msgid "Pacific SA Daylight Time" msgstr "" -#: tzres.rc:90 +#: tzres.rc:94 msgid "E. Australia Standard Time" msgstr "" -#: tzres.rc:91 +#: tzres.rc:95 msgid "E. Australia Daylight Time" msgstr "" -#: tzres.rc:220 +#: tzres.rc:226 msgid "W. Australia Standard Time" msgstr "" -#: tzres.rc:221 +#: tzres.rc:227 msgid "W. Australia Daylight Time" msgstr "" @@ -11917,7 +11954,7 @@ msgid "Digi&tal" msgstr "數位時鐘(&T)" -#: clock.rc:35 notepad.rc:53 winecfg.rc:307 winefile.rc:63 wordpad.rc:84 +#: clock.rc:35 notepad.rc:53 winecfg.rc:306 winefile.rc:63 wordpad.rc:84 msgid "&Font..." msgstr "字型(&F)..." @@ -15958,7 +15995,7 @@ msgid "The Wine configuration in %s is being updated, please wait..." msgstr "正在更新 %s 的 Wine 設定,請稍候..." -#: winecfg.rc:141 +#: winecfg.rc:140 msgid "" "This program 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 " @@ -15968,23 +16005,23 @@ "這個程式是自由軟體; 您可以遵照自由軟體基金會所制定的 GNU LGPL 2.1 版或者更新" "版本的許可條款, 來修改和重新散布這個程式。" -#: winecfg.rc:143 +#: winecfg.rc:142 msgid "Windows registration information" msgstr "Windows 註冊資訊" -#: winecfg.rc:144 +#: winecfg.rc:143 msgid "&Owner:" msgstr "姓名(&O):" -#: winecfg.rc:146 +#: winecfg.rc:145 msgid "Organi&zation:" msgstr "組織(&Z):" -#: winecfg.rc:154 +#: winecfg.rc:153 msgid "Application settings" msgstr "應用程式設定" -#: winecfg.rc:155 +#: winecfg.rc:154 msgid "" "Wine can mimic different Windows versions for each application. This tab is " "linked to the Libraries and Graphics tabs to allow you to change system-wide " @@ -15993,55 +16030,55 @@ "Wine 可以對不同程式偽裝成不同版本的 Windows。 「函式庫」與「顯示」分頁將連結" "到這個分頁, 除了調整預設設定, 也能調整個別程式的設定。" -#: winecfg.rc:159 +#: winecfg.rc:158 msgid "Add appli&cation..." msgstr "新增程式設定(&C)..." -#: winecfg.rc:160 +#: winecfg.rc:159 msgid "&Remove application" msgstr "移除程式設定(&R)" -#: winecfg.rc:161 +#: winecfg.rc:160 msgid "&Windows Version:" msgstr "&Windows 版本:" -#: winecfg.rc:169 +#: winecfg.rc:168 msgid "Window settings" msgstr "視窗設定" -#: winecfg.rc:170 +#: winecfg.rc:169 msgid "Automatically capture the &mouse in full-screen windows" msgstr "自動在全螢幕視窗中捕捉滑鼠(&M)" -#: winecfg.rc:171 +#: winecfg.rc:170 msgid "Allow the window manager to &decorate the windows" msgstr "允許視窗管理器裝飾視窗(&D)" -#: winecfg.rc:172 +#: winecfg.rc:171 msgid "Allow the &window manager to control the windows" msgstr "允許視窗管理器控制視窗(&W)" -#: winecfg.rc:173 +#: winecfg.rc:172 msgid "&Emulate a virtual desktop" msgstr "模擬一個虛擬桌面(&E)" -#: winecfg.rc:175 +#: winecfg.rc:174 msgid "Desktop &size:" msgstr "桌面大小(&S):" -#: winecfg.rc:180 +#: winecfg.rc:179 msgid "Screen resolution" msgstr "螢幕解析度" -#: winecfg.rc:184 +#: winecfg.rc:183 msgid "This is a sample text using 10 point Tahoma" msgstr "這是使用 10 點 Tahoma 字型的範例文字" -#: winecfg.rc:191 +#: winecfg.rc:190 msgid "DLL overrides" msgstr "DLL 覆載" -#: winecfg.rc:192 +#: winecfg.rc:191 msgid "" "Dynamic Link Libraries can be specified individually to be either builtin " "(provided by Wine) or native (taken from Windows or provided by the " @@ -16050,57 +16087,57 @@ "動態連結函式庫可以個別設定,來指定要使用 Wine 提供的內建版本,還是使用取自 " "Windows 或程式所提供的原生版本。" -#: winecfg.rc:194 +#: winecfg.rc:193 msgid "&New override for library:" msgstr "新增函式庫覆載(&N):" -#: winecfg.rc:196 +#: winecfg.rc:195 msgid "A&dd" msgstr "新增(&D)" -#: winecfg.rc:197 +#: winecfg.rc:196 msgid "Existing &overrides:" msgstr "已有的函式庫覆載(&O):" -#: winecfg.rc:199 +#: winecfg.rc:198 msgid "&Edit..." msgstr "編輯(&E)..." -#: winecfg.rc:205 +#: winecfg.rc:204 msgid "Edit Override" msgstr "編輯覆載設定" -#: winecfg.rc:208 +#: winecfg.rc:207 msgid "Load order" msgstr "載入順序" -#: winecfg.rc:209 +#: winecfg.rc:208 msgid "&Builtin (Wine)" msgstr "內建(Wine)(&B)" -#: winecfg.rc:210 +#: winecfg.rc:209 msgid "&Native (Windows)" msgstr "原生(Windows)(&N)" -#: winecfg.rc:211 +#: winecfg.rc:210 msgid "Buil&tin then Native" msgstr "內建先於原生(&T)" -#: winecfg.rc:212 +#: winecfg.rc:211 msgid "Nati&ve then Builtin" msgstr "原生先於內建(&V)" -#: winecfg.rc:220 +#: winecfg.rc:219 msgid "Select Drive Letter" msgstr "選擇儲存裝置代號" -#: winecfg.rc:232 +#: winecfg.rc:231 #, fuzzy #| msgid "Wine configuration" msgid "Drive configuration" msgstr "Wine 設定" -#: winecfg.rc:233 +#: winecfg.rc:232 #, fuzzy #| msgid "" #| "Failed to connect to the mount manager, the drive configuration cannot be " @@ -16110,211 +16147,211 @@ "edited." msgstr "連線到掛載管理員時失敗,無法編輯磁碟組態。" -#: winecfg.rc:236 +#: winecfg.rc:235 msgid "A&dd..." msgstr "加入(&D)..." -#: winecfg.rc:238 +#: winecfg.rc:237 msgid "Aut&odetect" msgstr "自動偵測(&O)" -#: winecfg.rc:241 +#: winecfg.rc:240 msgid "&Path:" msgstr "路徑(&P):" -#: winecfg.rc:248 winecfg.rc:38 +#: winecfg.rc:247 winecfg.rc:37 msgid "Show Advan&ced" msgstr "顯示進階選項(&C)" -#: winecfg.rc:249 +#: winecfg.rc:248 msgid "De&vice:" msgstr "裝置(&V):" -#: winecfg.rc:251 +#: winecfg.rc:250 msgid "Bro&wse..." msgstr "瀏覽(&W)..." -#: winecfg.rc:253 +#: winecfg.rc:252 msgid "&Label:" msgstr "標貼(&L):" -#: winecfg.rc:255 +#: winecfg.rc:254 msgid "S&erial:" msgstr "序號(&E):" -#: winecfg.rc:258 +#: winecfg.rc:257 msgid "&Show dot files" msgstr "顯示隱藏檔案(&S)" -#: winecfg.rc:265 +#: winecfg.rc:264 msgid "Driver diagnostics" msgstr "驅動程式資訊" -#: winecfg.rc:267 +#: winecfg.rc:266 msgid "Defaults" msgstr "預設" -#: winecfg.rc:268 +#: winecfg.rc:267 msgid "Output device:" msgstr "輸出裝置:" -#: winecfg.rc:269 +#: winecfg.rc:268 msgid "Voice output device:" msgstr "語音輸出裝置:" -#: winecfg.rc:270 +#: winecfg.rc:269 msgid "Input device:" msgstr "輸入裝置:" -#: winecfg.rc:271 +#: winecfg.rc:270 msgid "Voice input device:" msgstr "語音輸入裝置:" -#: winecfg.rc:276 +#: winecfg.rc:275 msgid "&Test Sound" msgstr "測試音效(&T)" -#: winecfg.rc:277 winecfg.rc:90 +#: winecfg.rc:276 winecfg.rc:89 #, fuzzy #| msgid "Wine configuration" msgid "Speaker configuration" msgstr "Wine 設定" -#: winecfg.rc:280 +#: winecfg.rc:279 msgid "Speakers:" msgstr "" -#: winecfg.rc:288 +#: winecfg.rc:287 msgid "Appearance" msgstr "外觀" -#: winecfg.rc:289 +#: winecfg.rc:288 msgid "&Theme:" msgstr "布景主題(&T):" -#: winecfg.rc:291 +#: winecfg.rc:290 msgid "&Install theme..." msgstr "安裝布景主題(&I)..." -#: winecfg.rc:296 +#: winecfg.rc:295 msgid "It&em:" msgstr "項目(&E):" -#: winecfg.rc:298 +#: winecfg.rc:297 msgid "C&olor:" msgstr "顏色(&O):" -#: winecfg.rc:304 +#: winecfg.rc:303 msgid "MIME types" msgstr "" -#: winecfg.rc:305 +#: winecfg.rc:304 msgid "Manage file &associations" msgstr "" -#: winecfg.rc:308 +#: winecfg.rc:307 msgid "Folders" msgstr "資料夾" -#: winecfg.rc:311 +#: winecfg.rc:310 msgid "&Link to:" msgstr "連結至(&L):" -#: winecfg.rc:34 +#: winecfg.rc:33 msgid "Libraries" msgstr "函式庫" -#: winecfg.rc:35 +#: winecfg.rc:34 msgid "Drives" msgstr "儲存裝置" -#: winecfg.rc:36 +#: winecfg.rc:35 msgid "Select the Unix target directory, please." msgstr "請選擇 Unix 資料夾。" -#: winecfg.rc:37 +#: winecfg.rc:36 msgid "Hide Advan&ced" msgstr "隱藏進階選項(&C)" -#: winecfg.rc:39 +#: winecfg.rc:38 msgid "(No Theme)" msgstr "(無布景主題)" -#: winecfg.rc:40 +#: winecfg.rc:39 msgid "Graphics" msgstr "顯示" -#: winecfg.rc:41 +#: winecfg.rc:40 msgid "Desktop Integration" msgstr "桌面整合" -#: winecfg.rc:42 +#: winecfg.rc:41 msgid "Audio" msgstr "音效" -#: winecfg.rc:43 +#: winecfg.rc:42 msgid "About" msgstr "關於" -#: winecfg.rc:44 +#: winecfg.rc:43 msgid "Wine configuration" msgstr "Wine 設定" -#: winecfg.rc:46 +#: winecfg.rc:45 msgid "Theme files (*.msstyles; *.theme)" msgstr "布景主題檔案 (*.msstyles; *.theme)" -#: winecfg.rc:47 +#: winecfg.rc:46 msgid "Select a theme file" msgstr "選擇一個布景主題檔案" -#: winecfg.rc:48 +#: winecfg.rc:47 msgid "Folder" msgstr "特殊資料夾" -#: winecfg.rc:49 +#: winecfg.rc:48 msgid "Links to" msgstr "連結至" -#: winecfg.rc:45 +#: winecfg.rc:44 msgid "Wine configuration for %s" msgstr "Wine 於 %s 的設定" -#: winecfg.rc:84 +#: winecfg.rc:83 msgid "Selected driver: %s" msgstr "選擇的驅動程式:%s" -#: winecfg.rc:85 +#: winecfg.rc:84 msgid "(None)" msgstr "(無)" -#: winecfg.rc:86 +#: winecfg.rc:85 msgid "Audio test failed!" msgstr "音效測試失敗!" -#: winecfg.rc:88 +#: winecfg.rc:87 msgid "(System default)" msgstr "(系統預設值)" -#: winecfg.rc:91 +#: winecfg.rc:90 msgid "5.1 Surround" msgstr "" -#: winecfg.rc:92 +#: winecfg.rc:91 #, fuzzy #| msgid "graphic" msgid "Quadraphonic" msgstr "圖形" -#: winecfg.rc:93 +#: winecfg.rc:92 msgid "Stereo" msgstr "" -#: winecfg.rc:94 +#: winecfg.rc:93 msgid "Mono" msgstr "" -#: winecfg.rc:54 +#: winecfg.rc:53 msgid "" "Changing the load order of this library is not recommended.\n" "Are you sure you want to do this?" @@ -16322,67 +16359,67 @@ "不建議對這個函式庫更改載入順序。\n" "您確定要如此嗎?" -#: winecfg.rc:55 +#: winecfg.rc:54 msgid "Warning: system library" msgstr "警告:系統函式庫" -#: winecfg.rc:56 +#: winecfg.rc:55 msgid "native" msgstr "原生" -#: winecfg.rc:57 +#: winecfg.rc:56 msgid "builtin" msgstr "內建" -#: winecfg.rc:58 +#: winecfg.rc:57 msgid "native, builtin" msgstr "原生,內建" -#: winecfg.rc:59 +#: winecfg.rc:58 msgid "builtin, native" msgstr "內建、原生" -#: winecfg.rc:60 +#: winecfg.rc:59 msgid "disabled" msgstr "停用" -#: winecfg.rc:61 +#: winecfg.rc:60 msgid "Default Settings" msgstr "預設組態" -#: winecfg.rc:62 +#: winecfg.rc:61 msgid "Wine Programs (*.exe; *.exe.so)" msgstr "Wine 程式 (*.exe; *.exe.so)" -#: winecfg.rc:63 +#: winecfg.rc:62 msgid "Use global settings" msgstr "使用全域設定" -#: winecfg.rc:64 +#: winecfg.rc:63 msgid "Select an executable file" msgstr "選擇一個可執行檔" -#: winecfg.rc:69 +#: winecfg.rc:68 msgid "Autodetect" msgstr "自動偵測" -#: winecfg.rc:70 +#: winecfg.rc:69 msgid "Local hard disk" msgstr "本機硬碟" -#: winecfg.rc:71 +#: winecfg.rc:70 msgid "Network share" msgstr "網路分享" -#: winecfg.rc:72 +#: winecfg.rc:71 msgid "Floppy disk" msgstr "軟碟機" -#: winecfg.rc:73 +#: winecfg.rc:72 msgid "CD-ROM" msgstr "光碟" -#: winecfg.rc:74 +#: winecfg.rc:73 msgid "" "You cannot add any more drives.\n" "\n" @@ -16393,11 +16430,11 @@ "每個儲存裝置必須要有一個從 A 到 Z 之間的英文字母,所以您無法擁有超過 26 個裝" "置。" -#: winecfg.rc:75 +#: winecfg.rc:74 msgid "System drive" msgstr "系統儲存裝置" -#: winecfg.rc:76 +#: winecfg.rc:75 #, fuzzy #| msgid "" #| "Are you sure you want to delete drive C?\n" @@ -16415,18 +16452,18 @@ "大部分的 Windows 程式都假定 C 槽存在,而沒有 C 槽時就會死得很嚴重。如果您刪除" "了它,請記得重新建立一個!" -#: winecfg.rc:77 +#: winecfg.rc:76 msgctxt "Drive letter" msgid "Letter" msgstr "代號" -#: winecfg.rc:78 +#: winecfg.rc:77 #, fuzzy #| msgid "New Folder" msgid "Target folder" msgstr "新資料夾" -#: winecfg.rc:79 +#: winecfg.rc:78 msgid "" "You don't have a drive C. This is not so great.\n" "\n" @@ -16436,127 +16473,127 @@ "\n" "請記得點選「儲存裝置」分頁的「加入」來建立一個新磁碟!\n" -#: winecfg.rc:99 +#: winecfg.rc:98 msgid "Controls Background" msgstr "按鈕背景" -#: winecfg.rc:100 +#: winecfg.rc:99 msgid "Controls Text" msgstr "按鈕文字" -#: winecfg.rc:102 +#: winecfg.rc:101 msgid "Menu Background" msgstr "功能表背景" -#: winecfg.rc:103 +#: winecfg.rc:102 msgid "Menu Text" msgstr "功能表文字" -#: winecfg.rc:104 +#: winecfg.rc:103 msgid "Scrollbar" msgstr "捲軸" -#: winecfg.rc:105 +#: winecfg.rc:104 msgid "Selection Background" msgstr "選擇區背景" -#: winecfg.rc:106 +#: winecfg.rc:105 msgid "Selection Text" msgstr "選擇區文字" -#: winecfg.rc:107 +#: winecfg.rc:106 msgid "Tooltip Background" msgstr "工具提示背景" -#: winecfg.rc:108 +#: winecfg.rc:107 msgid "Tooltip Text" msgstr "工具提示文字" -#: winecfg.rc:109 +#: winecfg.rc:108 msgid "Window Background" msgstr "視窗背景" -#: winecfg.rc:110 +#: winecfg.rc:109 msgid "Window Text" msgstr "視窗文字" -#: winecfg.rc:111 +#: winecfg.rc:110 msgid "Active Title Bar" msgstr "使用中標題列" -#: winecfg.rc:112 +#: winecfg.rc:111 msgid "Active Title Text" msgstr "使用中標題列文字" -#: winecfg.rc:113 +#: winecfg.rc:112 msgid "Inactive Title Bar" msgstr "非使用中標題列" -#: winecfg.rc:114 +#: winecfg.rc:113 msgid "Inactive Title Text" msgstr "非使用中標題列文字" -#: winecfg.rc:115 +#: winecfg.rc:114 msgid "Message Box Text" msgstr "訊息方塊文字" -#: winecfg.rc:116 +#: winecfg.rc:115 msgid "Application Workspace" msgstr "應用程式工作區" -#: winecfg.rc:117 +#: winecfg.rc:116 msgid "Window Frame" msgstr "視窗邊框" -#: winecfg.rc:118 +#: winecfg.rc:117 msgid "Active Border" msgstr "使用中邊框" -#: winecfg.rc:119 +#: winecfg.rc:118 msgid "Inactive Border" msgstr "非使用中邊框" -#: winecfg.rc:120 +#: winecfg.rc:119 msgid "Controls Shadow" msgstr "按鈕背景" -#: winecfg.rc:121 +#: winecfg.rc:120 msgid "Gray Text" msgstr "灰色文字" -#: winecfg.rc:122 +#: winecfg.rc:121 msgid "Controls Highlight" msgstr "按鈕高亮度" -#: winecfg.rc:123 +#: winecfg.rc:122 msgid "Controls Dark Shadow" msgstr "按鈕陰影" -#: winecfg.rc:124 +#: winecfg.rc:123 msgid "Controls Light" msgstr "按鈕亮度" -#: winecfg.rc:125 +#: winecfg.rc:124 msgid "Controls Alternate Background" msgstr "按鈕替換背景" -#: winecfg.rc:126 +#: winecfg.rc:125 msgid "Hot Tracked Item" msgstr "熱門軌段的項目" -#: winecfg.rc:127 +#: winecfg.rc:126 msgid "Active Title Bar Gradient" msgstr "使用中標題列梯度" -#: winecfg.rc:128 +#: winecfg.rc:127 msgid "Inactive Title Bar Gradient" msgstr "非使用中標題列梯度" -#: winecfg.rc:129 +#: winecfg.rc:128 msgid "Menu Highlight" msgstr "選單高亮度" -#: winecfg.rc:130 +#: winecfg.rc:129 msgid "Menu Bar" msgstr "選單列" diff -Nru wine-development-5.5/programs/explorer/explorer.c wine-development-5.6/programs/explorer/explorer.c --- wine-development-5.5/programs/explorer/explorer.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/explorer/explorer.c 2020-04-10 18:54:32.000000000 +0000 @@ -718,6 +718,7 @@ * Command Line parameters are: * [/n] Opens in single-paned view for each selected items. This is default * [/e,] Uses Windows Explorer View + * [/cd,object] Specifies the root level of the view * [/root,object] Specifies the root level of the view * [/select,object] parent folder is opened and specified object is selected */ @@ -725,6 +726,7 @@ { static const WCHAR arg_n[] = {'/','n'}; static const WCHAR arg_e[] = {'/','e',','}; + static const WCHAR arg_cd[] = {'/','c','d',','}; static const WCHAR arg_root[] = {'/','r','o','o','t',','}; static const WCHAR arg_select[] = {'/','s','e','l','e','c','t',','}; static const WCHAR arg_desktop[] = {'/','d','e','s','k','t','o','p'}; @@ -745,6 +747,11 @@ parameters->explorer_mode = TRUE; p += ARRAY_SIZE( arg_e ); } + else if (wcsncmp(p, arg_cd, ARRAY_SIZE( arg_cd ))==0) + { + p += ARRAY_SIZE( arg_cd ); + p = copy_path_string(parameters->root,p); + } else if (wcsncmp(p, arg_root, ARRAY_SIZE( arg_root ))==0) { p += ARRAY_SIZE( arg_root ); diff -Nru wine-development-5.5/programs/rundll.exe16/Makefile.in wine-development-5.6/programs/rundll.exe16/Makefile.in --- wine-development-5.5/programs/rundll.exe16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/rundll.exe16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = rundll.exe16 -EXTRADLLFLAGS = -mconsole -m16 -mno-cygwin +EXTRADLLFLAGS = -mconsole -m16 C_SRCS = rundll.c diff -Nru wine-development-5.5/programs/winecfg/about.c wine-development-5.6/programs/winecfg/about.c --- wine-development-5.5/programs/winecfg/about.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winecfg/about.c 2020-04-10 18:54:32.000000000 +0000 @@ -24,8 +24,6 @@ #define COBJMACROS -#include "config.h" - #include #include #include @@ -40,6 +38,9 @@ INT_PTR CALLBACK AboutDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { + static const WCHAR openW[] = {'o','p','e','n',0}; + static const WCHAR tahomaW[] = {'T','a','h','o','m','a',0}; + const char * (CDECL *wine_get_version)(void); HWND hWnd; HDC hDC; RECT rcClient, rcRect; @@ -72,13 +73,12 @@ case NM_CLICK: case NM_RETURN: if(wParam == IDC_ABT_WEB_LINK) - ShellExecuteA(NULL, "open", PACKAGE_URL, NULL, NULL, SW_SHOW); + ShellExecuteW(NULL, openW, ((NMLINK *)lParam)->item.szUrl, NULL, NULL, SW_SHOW); break; } break; case WM_INITDIALOG: - hDC = GetDC(hDlg); /* read owner and organization info from registry, load it into text box */ @@ -108,20 +108,12 @@ } /* prepare the title text */ - hWnd = GetDlgItem(hDlg, IDC_ABT_TITLE_TEXT); - if(hWnd) - { - static const WCHAR tahomaW[] = {'T','a','h','o','m','a',0}; - titleFont = CreateFontW( - -MulDiv(24, GetDeviceCaps(hDC, LOGPIXELSY), 72), - 0, 0, 0, 0, FALSE, 0, 0, 0, 0, 0, 0, 0, tahomaW); - SendMessageW(hWnd, WM_SETFONT, (WPARAM)titleFont, TRUE); - SetWindowTextA(hWnd, PACKAGE_NAME); - } - SetDlgItemTextA(hDlg, IDC_ABT_PANEL_TEXT, PACKAGE_VERSION); + titleFont = CreateFontW( -MulDiv(24, GetDeviceCaps(hDC, LOGPIXELSY), 72), + 0, 0, 0, 0, FALSE, 0, 0, 0, 0, 0, 0, 0, tahomaW ); + SendDlgItemMessageW(hDlg, IDC_ABT_TITLE_TEXT, WM_SETFONT, (WPARAM)titleFont, TRUE); - /* prepare the web link */ - SetDlgItemTextA(hDlg, IDC_ABT_WEB_LINK, "" PACKAGE_URL ""); + wine_get_version = (void *)GetProcAddress( GetModuleHandleA("ntdll.dll"), "wine_get_version" ); + if (wine_get_version) SetDlgItemTextA(hDlg, IDC_ABT_PANEL_TEXT, wine_get_version()); ReleaseDC(hDlg, hDC); diff -Nru wine-development-5.5/programs/winecfg/winecfg.rc wine-development-5.6/programs/winecfg/winecfg.rc --- wine-development-5.5/programs/winecfg/winecfg.rc 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winecfg/winecfg.rc 2020-04-10 18:54:32.000000000 +0000 @@ -20,7 +20,6 @@ * */ -#include "config.h" /* Needed for the PACKAGE_STRING definition */ #include "resource.h" #pragma makedep po @@ -134,9 +133,9 @@ FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_ABT_PANEL, "STATIC", SS_OWNERDRAW, 0, 0, 260, 140 - LTEXT "",IDC_ABT_TITLE_TEXT,105,30,55,30 + LTEXT "Wine",IDC_ABT_TITLE_TEXT,105,30,55,30 LTEXT "",IDC_ABT_PANEL_TEXT,160,43,140,8 - CONTROL "",IDC_ABT_WEB_LINK,"SysLink", LWS_TRANSPARENT, 105,53,106,8 + CONTROL "#msgctxt#do not translate#https://www.winehq.org",IDC_ABT_WEB_LINK,"SysLink", LWS_TRANSPARENT, 105,53,106,8 LTEXT "This program 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.", IDC_ABT_LICENSE_TEXT,105,64,145,66 GROUPBOX "Windows registration information", IDC_STATIC, 15, 155, 230, 55 diff -Nru wine-development-5.5/programs/wineconsole/curses.c wine-development-5.6/programs/wineconsole/curses.c --- wine-development-5.5/programs/wineconsole/curses.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/wineconsole/curses.c 2020-04-10 18:54:32.000000000 +0000 @@ -53,7 +53,6 @@ #include #include "winecon_private.h" -#include "wine/library.h" #include "wine/debug.h" #undef ERR #define ERR (-1) @@ -139,7 +138,7 @@ static const char ncname[] = SONAME_LIBCURSES; #endif - nc_handle = wine_dlopen(ncname, RTLD_NOW, NULL, 0); + nc_handle = dlopen(ncname, RTLD_NOW); if(!nc_handle) { WINE_MESSAGE("Wine cannot find the " CURSES_NAME " library (%s).\n", @@ -147,11 +146,11 @@ return FALSE; } -#define LOAD_FUNCPTR(f) \ - if((p_##f = wine_dlsym(nc_handle, #f, NULL, 0)) == NULL) \ - { \ - WINE_WARN("Can't find symbol %s\n", #f); \ - goto sym_not_found; \ +#define LOAD_FUNCPTR(f) \ + if((p_##f = dlsym(nc_handle, #f)) == NULL) \ + { \ + WINE_WARN("Can't find symbol %s\n", #f); \ + goto sym_not_found; \ } LOAD_FUNCPTR(curs_set) @@ -200,7 +199,7 @@ "Wine cannot find certain functions that it needs inside the " CURSES_NAME "\nlibrary. To enable Wine to use " CURSES_NAME " please upgrade your " CURSES_NAME "\nlibraries\n"); - wine_dlclose(nc_handle, NULL, 0); + dlclose(nc_handle); nc_handle = NULL; return FALSE; } diff -Nru wine-development-5.5/programs/winedbg/be_arm64.c wine-development-5.6/programs/winedbg/be_arm64.c --- wine-development-5.5/programs/winedbg/be_arm64.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winedbg/be_arm64.c 2020-04-10 18:54:32.000000000 +0000 @@ -289,43 +289,43 @@ return SetThreadContext(thread, &ctx->ctx); } -#define REG(r,gs) {FIELD_OFFSET(CONTEXT, r), sizeof(((CONTEXT*)NULL)->r), gs} +#define REG(f,n,t,r) {f, n, t, FIELD_OFFSET(CONTEXT, r), sizeof(((CONTEXT*)NULL)->r)} static struct gdb_register be_arm64_gdb_register_map[] = { - REG(Cpsr, 4), - REG(u.s.X0, 8), - REG(u.s.X1, 8), - REG(u.s.X2, 8), - REG(u.s.X3, 8), - REG(u.s.X4, 8), - REG(u.s.X5, 8), - REG(u.s.X6, 8), - REG(u.s.X7, 8), - REG(u.s.X8, 8), - REG(u.s.X9, 8), - REG(u.s.X10, 8), - REG(u.s.X11, 8), - REG(u.s.X12, 8), - REG(u.s.X13, 8), - REG(u.s.X14, 8), - REG(u.s.X15, 8), - REG(u.s.X16, 8), - REG(u.s.X17, 8), - REG(u.s.X18, 8), - REG(u.s.X19, 8), - REG(u.s.X20, 8), - REG(u.s.X21, 8), - REG(u.s.X22, 8), - REG(u.s.X23, 8), - REG(u.s.X24, 8), - REG(u.s.X25, 8), - REG(u.s.X26, 8), - REG(u.s.X27, 8), - REG(u.s.X28, 8), - REG(u.s.Fp, 8), - REG(u.s.Lr, 8), - REG(Sp, 8), - REG(Pc, 8), + REG("core", "x0", NULL, u.s.X0), + REG(NULL, "x1", NULL, u.s.X1), + REG(NULL, "x2", NULL, u.s.X2), + REG(NULL, "x3", NULL, u.s.X3), + REG(NULL, "x4", NULL, u.s.X4), + REG(NULL, "x5", NULL, u.s.X5), + REG(NULL, "x6", NULL, u.s.X6), + REG(NULL, "x7", NULL, u.s.X7), + REG(NULL, "x8", NULL, u.s.X8), + REG(NULL, "x9", NULL, u.s.X9), + REG(NULL, "x10", NULL, u.s.X10), + REG(NULL, "x11", NULL, u.s.X11), + REG(NULL, "x12", NULL, u.s.X12), + REG(NULL, "x13", NULL, u.s.X13), + REG(NULL, "x14", NULL, u.s.X14), + REG(NULL, "x15", NULL, u.s.X15), + REG(NULL, "x16", NULL, u.s.X16), + REG(NULL, "x17", NULL, u.s.X17), + REG(NULL, "x18", NULL, u.s.X18), + REG(NULL, "x19", NULL, u.s.X19), + REG(NULL, "x20", NULL, u.s.X20), + REG(NULL, "x21", NULL, u.s.X21), + REG(NULL, "x22", NULL, u.s.X22), + REG(NULL, "x23", NULL, u.s.X23), + REG(NULL, "x24", NULL, u.s.X24), + REG(NULL, "x25", NULL, u.s.X25), + REG(NULL, "x26", NULL, u.s.X26), + REG(NULL, "x27", NULL, u.s.X27), + REG(NULL, "x28", NULL, u.s.X28), + REG(NULL, "x29", NULL, u.s.Fp), + REG(NULL, "x30", NULL, u.s.Lr), + REG(NULL, "sp", "data_ptr", Sp), + REG(NULL, "pc", "code_ptr", Pc), + REG(NULL, "cpsr", "cpsr_flags", Cpsr), }; struct backend_cpu be_arm64 = diff -Nru wine-development-5.5/programs/winedbg/be_arm.c wine-development-5.6/programs/winedbg/be_arm.c --- wine-development-5.5/programs/winedbg/be_arm.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winedbg/be_arm.c 2020-04-10 18:54:32.000000000 +0000 @@ -1900,26 +1900,26 @@ return SetThreadContext(thread, &ctx->ctx); } -#define REG(r,gs) {FIELD_OFFSET(CONTEXT, r), sizeof(((CONTEXT*)NULL)->r), gs} +#define REG(f,n,t,r) {f, n, t, FIELD_OFFSET(CONTEXT, r), sizeof(((CONTEXT*)NULL)->r)} static struct gdb_register be_arm_gdb_register_map[] = { - REG(R0, 4), - REG(R1, 4), - REG(R2, 4), - REG(R3, 4), - REG(R4, 4), - REG(R5, 4), - REG(R6, 4), - REG(R7, 4), - REG(R8, 4), - REG(R9, 4), - REG(R10, 4), - REG(R11, 4), - REG(R12, 4), - REG(Sp, 4), - REG(Lr, 4), - REG(Pc, 4), - REG(Cpsr, 4), + REG("core", "r0", NULL, R0), + REG(NULL, "r1", NULL, R1), + REG(NULL, "r2", NULL, R2), + REG(NULL, "r3", NULL, R3), + REG(NULL, "r4", NULL, R4), + REG(NULL, "r5", NULL, R5), + REG(NULL, "r6", NULL, R6), + REG(NULL, "r7", NULL, R7), + REG(NULL, "r8", NULL, R8), + REG(NULL, "r9", NULL, R9), + REG(NULL, "r10", NULL, R10), + REG(NULL, "r11", NULL, R11), + REG(NULL, "r12", NULL, R12), + REG(NULL, "sp", "data_ptr", Sp), + REG(NULL, "lr", "code_ptr", Lr), + REG(NULL, "pc", "code_ptr", Pc), + REG(NULL, "cpsr", NULL, Cpsr), }; struct backend_cpu be_arm = diff -Nru wine-development-5.5/programs/winedbg/be_cpu.h wine-development-5.6/programs/winedbg/be_cpu.h --- wine-development-5.5/programs/winedbg/be_cpu.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winedbg/be_cpu.h 2020-04-10 18:54:32.000000000 +0000 @@ -24,9 +24,11 @@ struct gdb_register { - size_t ctx_offset; - size_t ctx_length; - size_t gdb_length; + const char *feature; + const char *name; + const char *type; + size_t offset; + size_t length; }; struct backend_cpu diff -Nru wine-development-5.5/programs/winedbg/be_i386.c wine-development-5.6/programs/winedbg/be_i386.c --- wine-development-5.5/programs/winedbg/be_i386.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winedbg/be_i386.c 2020-04-10 18:54:32.000000000 +0000 @@ -865,50 +865,51 @@ return Wow64SetThreadContext(thread, &ctx->x86); } -#define REG(r,gs) {FIELD_OFFSET(WOW64_CONTEXT, r), sizeof(((WOW64_CONTEXT*)NULL)->r), gs} +#define REG(f,n,t,r) {f, n, t, FIELD_OFFSET(WOW64_CONTEXT, r), sizeof(((WOW64_CONTEXT*)NULL)->r)} static struct gdb_register be_i386_gdb_register_map[] = { - REG(Eax, 4), - REG(Ecx, 4), - REG(Edx, 4), - REG(Ebx, 4), - REG(Esp, 4), - REG(Ebp, 4), - REG(Esi, 4), - REG(Edi, 4), - REG(Eip, 4), - REG(EFlags, 4), - REG(SegCs, 4), - REG(SegSs, 4), - REG(SegDs, 4), - REG(SegEs, 4), - REG(SegFs, 4), - REG(SegGs, 4), - { FIELD_OFFSET(WOW64_CONTEXT, FloatSave.RegisterArea[ 0]), 10, 10 }, - { FIELD_OFFSET(WOW64_CONTEXT, FloatSave.RegisterArea[10]), 10, 10 }, - { FIELD_OFFSET(WOW64_CONTEXT, FloatSave.RegisterArea[20]), 10, 10 }, - { FIELD_OFFSET(WOW64_CONTEXT, FloatSave.RegisterArea[30]), 10, 10 }, - { FIELD_OFFSET(WOW64_CONTEXT, FloatSave.RegisterArea[40]), 10, 10 }, - { FIELD_OFFSET(WOW64_CONTEXT, FloatSave.RegisterArea[50]), 10, 10 }, - { FIELD_OFFSET(WOW64_CONTEXT, FloatSave.RegisterArea[60]), 10, 10 }, - { FIELD_OFFSET(WOW64_CONTEXT, FloatSave.RegisterArea[70]), 10, 10 }, - { FIELD_OFFSET(WOW64_CONTEXT, FloatSave.ControlWord), 2, 4 }, - { FIELD_OFFSET(WOW64_CONTEXT, FloatSave.StatusWord), 2, 4 }, - { FIELD_OFFSET(WOW64_CONTEXT, FloatSave.TagWord), 2, 4 }, - { FIELD_OFFSET(WOW64_CONTEXT, FloatSave.ErrorSelector), 2, 4 }, - REG(FloatSave.ErrorOffset, 4 ), - { FIELD_OFFSET(WOW64_CONTEXT, FloatSave.DataSelector), 2, 4 }, - REG(FloatSave.DataOffset, 4 ), - { FIELD_OFFSET(WOW64_CONTEXT, FloatSave.ErrorSelector)+2, 2, 4 }, - { FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, XmmRegisters[0]), 16, 16 }, - { FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, XmmRegisters[1]), 16, 16 }, - { FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, XmmRegisters[2]), 16, 16 }, - { FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, XmmRegisters[3]), 16, 16 }, - { FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, XmmRegisters[4]), 16, 16 }, - { FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, XmmRegisters[5]), 16, 16 }, - { FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, XmmRegisters[6]), 16, 16 }, - { FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, XmmRegisters[7]), 16, 16 }, - { FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, MxCsr), 4, 4 }, + REG("core", "eax", NULL, Eax), + REG(NULL, "ecx", NULL, Ecx), + REG(NULL, "edx", NULL, Edx), + REG(NULL, "ebx", NULL, Ebx), + REG(NULL, "esp", "data_ptr", Esp), + REG(NULL, "ebp", "data_ptr", Ebp), + REG(NULL, "esi", NULL, Esi), + REG(NULL, "edi", NULL, Edi), + REG(NULL, "eip", "code_ptr", Eip), + REG(NULL, "eflags", "i386_eflags", EFlags), + REG(NULL, "cs", NULL, SegCs), + REG(NULL, "ss", NULL, SegSs), + REG(NULL, "ds", NULL, SegDs), + REG(NULL, "es", NULL, SegEs), + REG(NULL, "fs", NULL, SegFs), + REG(NULL, "gs", NULL, SegGs), + { NULL, "st0", "i387_ext", FIELD_OFFSET(WOW64_CONTEXT, FloatSave.RegisterArea[ 0]), 10}, + { NULL, "st1", "i387_ext", FIELD_OFFSET(WOW64_CONTEXT, FloatSave.RegisterArea[10]), 10}, + { NULL, "st2", "i387_ext", FIELD_OFFSET(WOW64_CONTEXT, FloatSave.RegisterArea[20]), 10}, + { NULL, "st3", "i387_ext", FIELD_OFFSET(WOW64_CONTEXT, FloatSave.RegisterArea[30]), 10}, + { NULL, "st4", "i387_ext", FIELD_OFFSET(WOW64_CONTEXT, FloatSave.RegisterArea[40]), 10}, + { NULL, "st5", "i387_ext", FIELD_OFFSET(WOW64_CONTEXT, FloatSave.RegisterArea[50]), 10}, + { NULL, "st6", "i387_ext", FIELD_OFFSET(WOW64_CONTEXT, FloatSave.RegisterArea[60]), 10}, + { NULL, "st7", "i387_ext", FIELD_OFFSET(WOW64_CONTEXT, FloatSave.RegisterArea[70]), 10}, + { NULL, "fctrl", NULL, FIELD_OFFSET(WOW64_CONTEXT, FloatSave.ControlWord), 2}, + { NULL, "fstat", NULL, FIELD_OFFSET(WOW64_CONTEXT, FloatSave.StatusWord), 2}, + { NULL, "ftag", NULL, FIELD_OFFSET(WOW64_CONTEXT, FloatSave.TagWord), 2}, + { NULL, "fiseg", NULL, FIELD_OFFSET(WOW64_CONTEXT, FloatSave.ErrorSelector), 2}, + REG(NULL, "fioff", NULL, FloatSave.ErrorOffset), + { NULL, "foseg", NULL, FIELD_OFFSET(WOW64_CONTEXT, FloatSave.DataSelector), 2}, + REG(NULL, "fooff", NULL, FloatSave.DataOffset), + { NULL, "fop", NULL, FIELD_OFFSET(WOW64_CONTEXT, FloatSave.ErrorSelector)+2, 2}, + + { "sse", "xmm0", "vec128", FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, XmmRegisters[0]), 16}, + { NULL, "xmm1", "vec128", FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, XmmRegisters[1]), 16}, + { NULL, "xmm2", "vec128", FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, XmmRegisters[2]), 16}, + { NULL, "xmm3", "vec128", FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, XmmRegisters[3]), 16}, + { NULL, "xmm4", "vec128", FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, XmmRegisters[4]), 16}, + { NULL, "xmm5", "vec128", FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, XmmRegisters[5]), 16}, + { NULL, "xmm6", "vec128", FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, XmmRegisters[6]), 16}, + { NULL, "xmm7", "vec128", FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, XmmRegisters[7]), 16}, + { NULL, "mxcsr", "i386_mxcsr", FIELD_OFFSET(WOW64_CONTEXT, ExtendedRegisters) + FIELD_OFFSET(XMM_SAVE_AREA32, MxCsr), 4}, }; struct backend_cpu be_i386 = diff -Nru wine-development-5.5/programs/winedbg/be_ppc.c wine-development-5.6/programs/winedbg/be_ppc.c --- wine-development-5.5/programs/winedbg/be_ppc.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winedbg/be_ppc.c 2020-04-10 18:54:32.000000000 +0000 @@ -191,80 +191,82 @@ return SetThreadContext(thread, &ctx->ctx); } -#define REG(r,gs,m) {FIELD_OFFSET(CONTEXT, r), sizeof(((CONTEXT*)NULL)->r), gs, m} +#define REG(f,n,t,r) {f, n, t, FIELD_OFFSET(CONTEXT, r), sizeof(((CONTEXT*)NULL)->r)} static struct gdb_register be_ppc_gdb_register_map[] = { - REG(Gpr0, 4), - REG(Gpr1, 4), - REG(Gpr2, 4), - REG(Gpr3, 4), - REG(Gpr4, 4), - REG(Gpr5, 4), - REG(Gpr6, 4), - REG(Gpr7, 4), - REG(Gpr8, 4), - REG(Gpr9, 4), - REG(Gpr10, 4), - REG(Gpr11, 4), - REG(Gpr12, 4), - REG(Gpr13, 4), - REG(Gpr14, 4), - REG(Gpr15, 4), - REG(Gpr16, 4), - REG(Gpr17, 4), - REG(Gpr18, 4), - REG(Gpr19, 4), - REG(Gpr20, 4), - REG(Gpr21, 4), - REG(Gpr22, 4), - REG(Gpr23, 4), - REG(Gpr24, 4), - REG(Gpr25, 4), - REG(Gpr26, 4), - REG(Gpr27, 4), - REG(Gpr28, 4), - REG(Gpr29, 4), - REG(Gpr30, 4), - REG(Gpr31, 4), - REG(Fpr0, 4), - REG(Fpr1, 4), - REG(Fpr2, 4), - REG(Fpr3, 4), - REG(Fpr4, 4), - REG(Fpr5, 4), - REG(Fpr6, 4), - REG(Fpr7, 4), - REG(Fpr8, 4), - REG(Fpr9, 4), - REG(Fpr10, 4), - REG(Fpr11, 4), - REG(Fpr12, 4), - REG(Fpr13, 4), - REG(Fpr14, 4), - REG(Fpr15, 4), - REG(Fpr16, 4), - REG(Fpr17, 4), - REG(Fpr18, 4), - REG(Fpr19, 4), - REG(Fpr20, 4), - REG(Fpr21, 4), - REG(Fpr22, 4), - REG(Fpr23, 4), - REG(Fpr24, 4), - REG(Fpr25, 4), - REG(Fpr26, 4), - REG(Fpr27, 4), - REG(Fpr28, 4), - REG(Fpr29, 4), - REG(Fpr30, 4), - REG(Fpr31, 4), + REG("core", "r0", NULL, Gpr0), + REG(NULL, "r1", NULL, Gpr1), + REG(NULL, "r2", NULL, Gpr2), + REG(NULL, "r3", NULL, Gpr3), + REG(NULL, "r4", NULL, Gpr4), + REG(NULL, "r5", NULL, Gpr5), + REG(NULL, "r6", NULL, Gpr6), + REG(NULL, "r7", NULL, Gpr7), + REG(NULL, "r8", NULL, Gpr8), + REG(NULL, "r9", NULL, Gpr9), + REG(NULL, "r10", NULL, Gpr10), + REG(NULL, "r11", NULL, Gpr11), + REG(NULL, "r12", NULL, Gpr12), + REG(NULL, "r13", NULL, Gpr13), + REG(NULL, "r14", NULL, Gpr14), + REG(NULL, "r15", NULL, Gpr15), + REG(NULL, "r16", NULL, Gpr16), + REG(NULL, "r17", NULL, Gpr17), + REG(NULL, "r18", NULL, Gpr18), + REG(NULL, "r19", NULL, Gpr19), + REG(NULL, "r20", NULL, Gpr20), + REG(NULL, "r21", NULL, Gpr21), + REG(NULL, "r22", NULL, Gpr22), + REG(NULL, "r23", NULL, Gpr23), + REG(NULL, "r24", NULL, Gpr24), + REG(NULL, "r25", NULL, Gpr25), + REG(NULL, "r26", NULL, Gpr26), + REG(NULL, "r27", NULL, Gpr27), + REG(NULL, "r28", NULL, Gpr28), + REG(NULL, "r29", NULL, Gpr29), + REG(NULL, "r30", NULL, Gpr30), + REG(NULL, "r31", NULL, Gpr31), + REG(NULL, "pc", "code_ptr", Iar), + REG(NULL, "msr", NULL, Msr), + REG(NULL, "cr", NULL, Cr), + REG(NULL, "lr", "code_ptr", Lr), + REG(NULL, "ctr", NULL, Ctr), + REG(NULL, "xer", NULL, Xer), + + REG("fpu", "f0", "ieee_single", Fpr0, 4), + REG(NULL, "f1", "ieee_single", Fpr1, 4), + REG(NULL, "f2", "ieee_single", Fpr2, 4), + REG(NULL, "f3", "ieee_single", Fpr3, 4), + REG(NULL, "f4", "ieee_single", Fpr4, 4), + REG(NULL, "f5", "ieee_single", Fpr5, 4), + REG(NULL, "f6", "ieee_single", Fpr6, 4), + REG(NULL, "f7", "ieee_single", Fpr7, 4), + REG(NULL, "f8", "ieee_single", Fpr8, 4), + REG(NULL, "f9", "ieee_single", Fpr9, 4), + REG(NULL, "f10", "ieee_single", Fpr10, 4), + REG(NULL, "f11", "ieee_single", Fpr11, 4), + REG(NULL, "f12", "ieee_single", Fpr12, 4), + REG(NULL, "f13", "ieee_single", Fpr13, 4), + REG(NULL, "f14", "ieee_single", Fpr14, 4), + REG(NULL, "f15", "ieee_single", Fpr15, 4), + REG(NULL, "f16", "ieee_single", Fpr16, 4), + REG(NULL, "f17", "ieee_single", Fpr17, 4), + REG(NULL, "f18", "ieee_single", Fpr18, 4), + REG(NULL, "f19", "ieee_single", Fpr19, 4), + REG(NULL, "f20", "ieee_single", Fpr20, 4), + REG(NULL, "f21", "ieee_single", Fpr21, 4), + REG(NULL, "f22", "ieee_single", Fpr22, 4), + REG(NULL, "f23", "ieee_single", Fpr23, 4), + REG(NULL, "f24", "ieee_single", Fpr24, 4), + REG(NULL, "f25", "ieee_single", Fpr25, 4), + REG(NULL, "f26", "ieee_single", Fpr26, 4), + REG(NULL, "f27", "ieee_single", Fpr27, 4), + REG(NULL, "f28", "ieee_single", Fpr28, 4), + REG(NULL, "f29", "ieee_single", Fpr29, 4), + REG(NULL, "f30", "ieee_single", Fpr30, 4), + REG(NULL, "f31", "ieee_single", Fpr31, 4), + REG(NULL, "fpscr", NULL, Fpscr, 4), - REG(Iar, 4), - REG(Msr, 4), - REG(Cr, 4), - REG(Lr, 4), - REG(Ctr, 4), - REG(Xer, 4), /* FIXME: MQ is missing? FIELD_OFFSET(CONTEXT, Mq), */ /* see gdb/nlm/ppc.c */ }; diff -Nru wine-development-5.5/programs/winedbg/be_x86_64.c wine-development-5.6/programs/winedbg/be_x86_64.c --- wine-development-5.5/programs/winedbg/be_x86_64.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winedbg/be_x86_64.c 2020-04-10 18:54:32.000000000 +0000 @@ -768,66 +768,67 @@ return SetThreadContext(thread, &ctx->ctx); } -#define REG(r,gs) {FIELD_OFFSET(CONTEXT, r), sizeof(((CONTEXT*)NULL)->r), gs} +#define REG(f,n,t,r) {f, n, t, FIELD_OFFSET(CONTEXT, r), sizeof(((CONTEXT*)NULL)->r)} static struct gdb_register be_x86_64_gdb_register_map[] = { - REG(Rax, 8), - REG(Rbx, 8), - REG(Rcx, 8), - REG(Rdx, 8), - REG(Rsi, 8), - REG(Rdi, 8), - REG(Rbp, 8), - REG(Rsp, 8), - REG(R8, 8), - REG(R9, 8), - REG(R10, 8), - REG(R11, 8), - REG(R12, 8), - REG(R13, 8), - REG(R14, 8), - REG(R15, 8), - REG(Rip, 8), - REG(EFlags, 4), - REG(SegCs, 4), - REG(SegSs, 4), - REG(SegDs, 4), - REG(SegEs, 4), - REG(SegFs, 4), - REG(SegGs, 4), - { FIELD_OFFSET(CONTEXT, u.FltSave.FloatRegisters[ 0]), 10, 10 }, - { FIELD_OFFSET(CONTEXT, u.FltSave.FloatRegisters[ 1]), 10, 10 }, - { FIELD_OFFSET(CONTEXT, u.FltSave.FloatRegisters[ 2]), 10, 10 }, - { FIELD_OFFSET(CONTEXT, u.FltSave.FloatRegisters[ 3]), 10, 10 }, - { FIELD_OFFSET(CONTEXT, u.FltSave.FloatRegisters[ 4]), 10, 10 }, - { FIELD_OFFSET(CONTEXT, u.FltSave.FloatRegisters[ 5]), 10, 10 }, - { FIELD_OFFSET(CONTEXT, u.FltSave.FloatRegisters[ 6]), 10, 10 }, - { FIELD_OFFSET(CONTEXT, u.FltSave.FloatRegisters[ 7]), 10, 10 }, - REG(u.FltSave.ControlWord, 4), - REG(u.FltSave.StatusWord, 4), - REG(u.FltSave.TagWord, 4), - REG(u.FltSave.ErrorSelector, 4), - REG(u.FltSave.ErrorOffset, 4), - REG(u.FltSave.DataSelector, 4), - REG(u.FltSave.DataOffset, 4), - REG(u.FltSave.ErrorOpcode, 4), - REG(u.s.Xmm0, 16), - REG(u.s.Xmm1, 16), - REG(u.s.Xmm2, 16), - REG(u.s.Xmm3, 16), - REG(u.s.Xmm4, 16), - REG(u.s.Xmm5, 16), - REG(u.s.Xmm6, 16), - REG(u.s.Xmm7, 16), - REG(u.s.Xmm8, 16), - REG(u.s.Xmm9, 16), - REG(u.s.Xmm10, 16), - REG(u.s.Xmm11, 16), - REG(u.s.Xmm12, 16), - REG(u.s.Xmm13, 16), - REG(u.s.Xmm14, 16), - REG(u.s.Xmm15, 16), - REG(u.FltSave.MxCsr, 4), + REG("core", "rax", NULL, Rax), + REG(NULL, "rbx", NULL, Rbx), + REG(NULL, "rcx", NULL, Rcx), + REG(NULL, "rdx", NULL, Rdx), + REG(NULL, "rsi", NULL, Rsi), + REG(NULL, "rdi", NULL, Rdi), + REG(NULL, "rbp", "data_ptr", Rbp), + REG(NULL, "rsp", "data_ptr", Rsp), + REG(NULL, "r8", NULL, R8), + REG(NULL, "r9", NULL, R9), + REG(NULL, "r10", NULL, R10), + REG(NULL, "r11", NULL, R11), + REG(NULL, "r12", NULL, R12), + REG(NULL, "r13", NULL, R13), + REG(NULL, "r14", NULL, R14), + REG(NULL, "r15", NULL, R15), + REG(NULL, "rip", "code_ptr", Rip), + REG(NULL, "eflags", "i386_eflags", EFlags), + REG(NULL, "cs", NULL, SegCs), + REG(NULL, "ss", NULL, SegSs), + REG(NULL, "ds", NULL, SegDs), + REG(NULL, "es", NULL, SegEs), + REG(NULL, "fs", NULL, SegFs), + REG(NULL, "gs", NULL, SegGs), + { NULL, "st0", "i387_ext", FIELD_OFFSET(CONTEXT, u.FltSave.FloatRegisters[ 0]), 10}, + { NULL, "st1", "i387_ext", FIELD_OFFSET(CONTEXT, u.FltSave.FloatRegisters[ 1]), 10}, + { NULL, "st2", "i387_ext", FIELD_OFFSET(CONTEXT, u.FltSave.FloatRegisters[ 2]), 10}, + { NULL, "st3", "i387_ext", FIELD_OFFSET(CONTEXT, u.FltSave.FloatRegisters[ 3]), 10}, + { NULL, "st4", "i387_ext", FIELD_OFFSET(CONTEXT, u.FltSave.FloatRegisters[ 4]), 10}, + { NULL, "st5", "i387_ext", FIELD_OFFSET(CONTEXT, u.FltSave.FloatRegisters[ 5]), 10}, + { NULL, "st6", "i387_ext", FIELD_OFFSET(CONTEXT, u.FltSave.FloatRegisters[ 6]), 10}, + { NULL, "st7", "i387_ext", FIELD_OFFSET(CONTEXT, u.FltSave.FloatRegisters[ 7]), 10}, + REG(NULL, "fctrl", NULL, u.FltSave.ControlWord), + REG(NULL, "fstat", NULL, u.FltSave.StatusWord), + REG(NULL, "ftag", NULL, u.FltSave.TagWord), + REG(NULL, "fiseg", NULL, u.FltSave.ErrorSelector), + REG(NULL, "fioff", NULL, u.FltSave.ErrorOffset), + REG(NULL, "foseg", NULL, u.FltSave.DataSelector), + REG(NULL, "fooff", NULL, u.FltSave.DataOffset), + REG(NULL, "fop", NULL, u.FltSave.ErrorOpcode), + + REG("sse", "xmm0", "vec128", u.s.Xmm0), + REG(NULL, "xmm1", "vec128", u.s.Xmm1), + REG(NULL, "xmm2", "vec128", u.s.Xmm2), + REG(NULL, "xmm3", "vec128", u.s.Xmm3), + REG(NULL, "xmm4", "vec128", u.s.Xmm4), + REG(NULL, "xmm5", "vec128", u.s.Xmm5), + REG(NULL, "xmm6", "vec128", u.s.Xmm6), + REG(NULL, "xmm7", "vec128", u.s.Xmm7), + REG(NULL, "xmm8", "vec128", u.s.Xmm8), + REG(NULL, "xmm9", "vec128", u.s.Xmm9), + REG(NULL, "xmm10", "vec128", u.s.Xmm10), + REG(NULL, "xmm11", "vec128", u.s.Xmm11), + REG(NULL, "xmm12", "vec128", u.s.Xmm12), + REG(NULL, "xmm13", "vec128", u.s.Xmm13), + REG(NULL, "xmm14", "vec128", u.s.Xmm14), + REG(NULL, "xmm15", "vec128", u.s.Xmm15), + REG(NULL, "mxcsr", "i386_mxcsr", u.FltSave.MxCsr), }; struct backend_cpu be_x86_64 = diff -Nru wine-development-5.5/programs/winedbg/debugger.h wine-development-5.6/programs/winedbg/debugger.h --- wine-development-5.5/programs/winedbg/debugger.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winedbg/debugger.h 2020-04-10 18:54:32.000000000 +0000 @@ -207,6 +207,7 @@ }* frames; int num_frames; int curr_frame; + BOOL suspended; }; struct dbg_delayed_bp diff -Nru wine-development-5.5/programs/winedbg/gdbproxy.c wine-development-5.6/programs/winedbg/gdbproxy.c --- wine-development-5.5/programs/winedbg/gdbproxy.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winedbg/gdbproxy.c 2020-04-10 18:54:32.000000000 +0000 @@ -67,6 +67,17 @@ WINE_DEFAULT_DEBUG_CHANNEL(winedbg); +struct gdb_xpoint +{ + struct list entry; + int pid; + int tid; + enum be_xpoint_type type; + void *addr; + int size; + unsigned long value; +}; + struct gdb_context { /* gdb information */ @@ -84,18 +95,77 @@ int out_len; int out_curr_packet; /* generic GDB thread information */ - struct dbg_thread* exec_thread; /* thread used in step & continue */ - struct dbg_thread* other_thread; /* thread to be used in any other operation */ + int exec_tid; /* tid used in step & continue */ + int other_tid; /* tid to be used in any other operation */ + struct list xpoint_list; /* current Win32 trap env */ - unsigned last_sig; - BOOL in_trap; - dbg_ctx_t context; + DEBUG_EVENT de; + DWORD de_reply; /* Win32 information */ struct dbg_process* process; /* Unix environment */ unsigned long wine_segs[3]; /* load addresses of the ELF wine exec segments (text, bss and data) */ + BOOL no_ack_mode; }; +static void gdbctx_delete_xpoint(struct gdb_context *gdbctx, struct dbg_thread *thread, + dbg_ctx_t *ctx, struct gdb_xpoint *x) +{ + struct dbg_process *process = thread->process; + struct backend_cpu *cpu = process->be_cpu; + + if (!cpu->remove_Xpoint(process->handle, process->process_io, ctx, x->type, x->addr, x->value, x->size)) + ERR("%04x:%04x: Couldn't remove breakpoint at:%p/%x type:%d\n", process->pid, thread->tid, x->addr, x->size, x->type); + + list_remove(&x->entry); + HeapFree(GetProcessHeap(), 0, x); +} + +static void gdbctx_insert_xpoint(struct gdb_context *gdbctx, struct dbg_thread *thread, + dbg_ctx_t *ctx, enum be_xpoint_type type, void *addr, int size) +{ + struct dbg_process *process = thread->process; + struct backend_cpu *cpu = process->be_cpu; + struct gdb_xpoint *x; + unsigned long value; + + if (!cpu->insert_Xpoint(process->handle, process->process_io, ctx, type, addr, &value, size)) + { + ERR("%04x:%04x: Couldn't insert breakpoint at:%p/%x type:%d\n", process->pid, thread->tid, addr, size, type); + return; + } + + if (!(x = HeapAlloc(GetProcessHeap(), 0, sizeof(struct gdb_xpoint)))) + { + ERR("%04x:%04x: Couldn't allocate memory for breakpoint at:%p/%x type:%d\n", process->pid, thread->tid, addr, size, type); + return; + } + + x->pid = process->pid; + x->tid = thread->tid; + x->type = type; + x->addr = addr; + x->size = size; + x->value = value; + list_add_head(&gdbctx->xpoint_list, &x->entry); +} + +static struct gdb_xpoint *gdb_find_xpoint(struct gdb_context *gdbctx, struct dbg_thread *thread, + enum be_xpoint_type type, void *addr, int size) +{ + struct gdb_xpoint *x; + + LIST_FOR_EACH_ENTRY(x, &gdbctx->xpoint_list, struct gdb_xpoint, entry) + { + if (thread && (x->pid != thread->process->pid || x->tid != thread->tid)) + continue; + if (x->type == type && x->addr == addr && x->size == size) + return x; + } + + return NULL; +} + static BOOL tgt_process_gdbproxy_read(HANDLE hProcess, const void* addr, void* buffer, SIZE_T len, SIZE_T* rlen) { @@ -136,17 +206,6 @@ return "0123456789abcdef"[x]; } -static int hex_to_int(const char* src, size_t len) -{ - unsigned int returnval = 0; - while (len--) - { - returnval <<= 4; - returnval |= hex_from0(*src++); - } - return returnval; -} - static void hex_from(void* dst, const char* src, size_t len) { unsigned char *p = dst; @@ -177,51 +236,17 @@ return cksum; } -#ifdef __i386__ -static const char target_xml[] = ""; -#elif defined(__powerpc__) -static const char target_xml[] = ""; -#elif defined(__x86_64__) -static const char target_xml[] = ""; -#elif defined(__arm__) -static const char target_xml[] = - "l arm\n" - "\n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - "\n"; -#elif defined(__aarch64__) -static const char target_xml[] = ""; -#else -# error Define the registers map for your CPU -#endif - static inline void* cpu_register_ptr(struct gdb_context *gdbctx, dbg_ctx_t *ctx, unsigned idx) { assert(idx < gdbctx->process->be_cpu->gdb_num_regs); - return (char*)ctx + gdbctx->process->be_cpu->gdb_register_map[idx].ctx_offset; + return (char*)ctx + gdbctx->process->be_cpu->gdb_register_map[idx].offset; } static inline DWORD64 cpu_register(struct gdb_context *gdbctx, dbg_ctx_t *ctx, unsigned idx) { - switch (gdbctx->process->be_cpu->gdb_register_map[idx].ctx_length) + switch (gdbctx->process->be_cpu->gdb_register_map[idx].length) { case 1: return *(BYTE*)cpu_register_ptr(gdbctx, ctx, idx); case 2: return *(WORD*)cpu_register_ptr(gdbctx, ctx, idx); @@ -229,7 +254,7 @@ case 8: return *(DWORD64*)cpu_register_ptr(gdbctx, ctx, idx); default: ERR("got unexpected size: %u\n", - (unsigned)gdbctx->process->be_cpu->gdb_register_map[idx].ctx_length); + (unsigned)gdbctx->process->be_cpu->gdb_register_map[idx].length); assert(0); return 0; } @@ -239,30 +264,7 @@ dbg_ctx_t* ctx, unsigned idx, const char **phex) { const struct gdb_register *cpu_register_map = gdbctx->process->be_cpu->gdb_register_map; - - if (cpu_register_map[idx].gdb_length == cpu_register_map[idx].ctx_length) - hex_from(cpu_register_ptr(gdbctx, ctx, idx), *phex, cpu_register_map[idx].gdb_length); - else - { - DWORD64 val = 0; - unsigned i; - BYTE b; - - for (i = 0; i < cpu_register_map[idx].gdb_length; i++) - { - hex_from(&b, *phex, 1); - *phex += 2; - val += (DWORD64)b << (8 * i); - } - switch (cpu_register_map[idx].ctx_length) - { - case 1: *(BYTE*)cpu_register_ptr(gdbctx, ctx, idx) = (BYTE)val; break; - case 2: *(WORD*)cpu_register_ptr(gdbctx, ctx, idx) = (WORD)val; break; - case 4: *(DWORD*)cpu_register_ptr(gdbctx, ctx, idx) = (DWORD)val; break; - case 8: *(DWORD64*)cpu_register_ptr(gdbctx, ctx, idx) = val; break; - default: assert(0); - } - } + hex_from(cpu_register_ptr(gdbctx, ctx, idx), *phex, cpu_register_map[idx].length); } /* =============================================== * @@ -270,40 +272,64 @@ * =============================================== * */ -static BOOL fetch_context(struct gdb_context *gdbctx, HANDLE h, dbg_ctx_t *ctx) +static struct dbg_thread* dbg_thread_from_tid(struct gdb_context* gdbctx, int tid) { - if (!gdbctx->process->be_cpu->get_context(h, ctx)) + struct dbg_process *process = gdbctx->process; + struct dbg_thread *thread; + + if (!process) return NULL; + + if (tid == 0) tid = gdbctx->de.dwThreadId; + LIST_FOR_EACH_ENTRY(thread, &process->threads, struct dbg_thread, entry) { - ERR("Failed to get context, error %u\n", GetLastError()); - return FALSE; + if (tid > 0 && thread->tid != tid) continue; + return thread; } - return TRUE; + + return NULL; } -static BOOL handle_exception(struct gdb_context* gdbctx, EXCEPTION_DEBUG_INFO* exc) +static void dbg_thread_set_single_step(struct dbg_thread *thread, BOOL enable) { - EXCEPTION_RECORD* rec = &exc->ExceptionRecord; - BOOL ret = FALSE; + struct backend_cpu *backend; + dbg_ctx_t ctx; - switch (rec->ExceptionCode) + if (!thread) return; + if (!thread->process) return; + if (!(backend = thread->process->be_cpu)) return; + + if (!backend->get_context(thread->handle, &ctx)) + { + ERR("get_context failed for thread %04x:%04x\n", thread->process->pid, thread->tid); + return; + } + backend->single_step(&ctx, enable); + if (!backend->set_context(thread->handle, &ctx)) + ERR("set_context failed for thread %04x:%04x\n", thread->process->pid, thread->tid); +} + +static unsigned char signal_from_debug_event(DEBUG_EVENT* de) +{ + DWORD ec; + + if (de->dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT) + return SIGTERM; + if (de->dwDebugEventCode != EXCEPTION_DEBUG_EVENT) + return SIGTRAP; + + ec = de->u.Exception.ExceptionRecord.ExceptionCode; + switch (ec) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: - gdbctx->last_sig = SIGSEGV; - ret = TRUE; - break; + return SIGSEGV; case EXCEPTION_DATATYPE_MISALIGNMENT: - gdbctx->last_sig = SIGBUS; - ret = TRUE; - break; + return SIGBUS; case EXCEPTION_SINGLE_STEP: - /* fall through */ case EXCEPTION_BREAKPOINT: - gdbctx->last_sig = SIGTRAP; - ret = TRUE; - break; + return SIGTRAP; case EXCEPTION_FLT_DENORMAL_OPERAND: case EXCEPTION_FLT_DIVIDE_BY_ZERO: case EXCEPTION_FLT_INEXACT_RESULT: @@ -311,27 +337,32 @@ case EXCEPTION_FLT_OVERFLOW: case EXCEPTION_FLT_STACK_CHECK: case EXCEPTION_FLT_UNDERFLOW: - gdbctx->last_sig = SIGFPE; - ret = TRUE; - break; + return SIGFPE; case EXCEPTION_INT_DIVIDE_BY_ZERO: case EXCEPTION_INT_OVERFLOW: - gdbctx->last_sig = SIGFPE; - ret = TRUE; - break; + return SIGFPE; case EXCEPTION_ILLEGAL_INSTRUCTION: - gdbctx->last_sig = SIGILL; - ret = TRUE; - break; + return SIGILL; case CONTROL_C_EXIT: - gdbctx->last_sig = SIGINT; - ret = TRUE; - break; + return SIGINT; case STATUS_POSSIBLE_DEADLOCK: - gdbctx->last_sig = SIGALRM; - ret = TRUE; - /* FIXME: we could also add here a O packet with additional information */ - break; + return SIGALRM; + /* should not be here */ + case EXCEPTION_INVALID_HANDLE: + case EXCEPTION_NAME_THREAD: + return SIGTRAP; + default: + ERR("Unknown exception code 0x%08x\n", ec); + return SIGABRT; + } +} + +static BOOL handle_exception(struct gdb_context* gdbctx, EXCEPTION_DEBUG_INFO* exc) +{ + EXCEPTION_RECORD* rec = &exc->ExceptionRecord; + + switch (rec->ExceptionCode) + { case EXCEPTION_NAME_THREAD: { const THREADNAME_INFO *threadname = (const THREADNAME_INFO *)rec->ExceptionInformation; @@ -340,7 +371,7 @@ SIZE_T read; if (threadname->dwThreadID == -1) - thread = dbg_curr_thread; + thread = dbg_get_thread(gdbctx->process, gdbctx->de.dwThreadId); else thread = dbg_get_thread(gdbctx->process, threadname->dwThreadID); if (thread) @@ -354,34 +385,37 @@ } else ERR("Cannot set name of thread %04x\n", threadname->dwThreadID); - return DBG_CONTINUE; + return TRUE; } case EXCEPTION_INVALID_HANDLE: - return DBG_CONTINUE; + return TRUE; default: - fprintf(stderr, "Unhandled exception code 0x%08x\n", rec->ExceptionCode); - gdbctx->last_sig = SIGABRT; - ret = TRUE; - break; + return FALSE; } - return ret; } -static void handle_debug_event(struct gdb_context* gdbctx, DEBUG_EVENT* de) +static BOOL handle_debug_event(struct gdb_context* gdbctx) { + DEBUG_EVENT *de = &gdbctx->de; + struct dbg_thread *thread; + union { char bufferA[256]; WCHAR buffer[256]; } u; - dbg_curr_thread = dbg_get_thread(gdbctx->process, de->dwThreadId); + gdbctx->exec_tid = de->dwThreadId; + gdbctx->other_tid = de->dwThreadId; + gdbctx->de_reply = DBG_REPLY_LATER; switch (de->dwDebugEventCode) { case CREATE_PROCESS_DEBUG_EVENT: gdbctx->process = dbg_add_process(&be_process_gdbproxy_io, de->dwProcessId, de->u.CreateProcessInfo.hProcess); - if (!gdbctx->process) break; + if (!gdbctx->process) + return TRUE; + memory_get_string_indirect(gdbctx->process, de->u.CreateProcessInfo.lpImageName, de->u.CreateProcessInfo.fUnicode, @@ -403,14 +437,12 @@ fprintf(stderr, "%04x:%04x: create thread I @%p\n", de->dwProcessId, de->dwThreadId, de->u.CreateProcessInfo.lpStartAddress); - assert(dbg_curr_thread == NULL); /* shouldn't be there */ dbg_add_thread(gdbctx->process, de->dwThreadId, de->u.CreateProcessInfo.hThread, de->u.CreateProcessInfo.lpThreadLocalBase); - break; + return TRUE; case LOAD_DLL_DEBUG_EVENT: - assert(dbg_curr_thread); memory_get_string_indirect(gdbctx->process, de->u.LoadDll.lpImageName, de->u.LoadDll.fUnicode, @@ -423,24 +455,21 @@ de->u.LoadDll.nDebugInfoSize); dbg_load_module(gdbctx->process->handle, de->u.LoadDll.hFile, u.buffer, (DWORD_PTR)de->u.LoadDll.lpBaseOfDll, 0); - break; + return TRUE; case UNLOAD_DLL_DEBUG_EVENT: fprintf(stderr, "%08x:%08x: unload DLL @%p\n", de->dwProcessId, de->dwThreadId, de->u.UnloadDll.lpBaseOfDll); SymUnloadModule(gdbctx->process->handle, (DWORD_PTR)de->u.UnloadDll.lpBaseOfDll); - break; + return TRUE; case EXCEPTION_DEBUG_EVENT: - assert(dbg_curr_thread); TRACE("%08x:%08x: exception code=0x%08x\n", de->dwProcessId, de->dwThreadId, de->u.Exception.ExceptionRecord.ExceptionCode); - if (fetch_context(gdbctx, dbg_curr_thread->handle, &gdbctx->context)) - { - gdbctx->in_trap = handle_exception(gdbctx, &de->u.Exception); - } + if (handle_exception(gdbctx, &de->u.Exception)) + return TRUE; break; case CREATE_THREAD_DEBUG_EVENT: @@ -451,17 +480,14 @@ de->dwThreadId, de->u.CreateThread.hThread, de->u.CreateThread.lpThreadLocalBase); - break; + return TRUE; case EXIT_THREAD_DEBUG_EVENT: fprintf(stderr, "%08x:%08x: exit thread (%u)\n", de->dwProcessId, de->dwThreadId, de->u.ExitThread.dwExitCode); - - assert(dbg_curr_thread); - if (dbg_curr_thread == gdbctx->exec_thread) gdbctx->exec_thread = NULL; - if (dbg_curr_thread == gdbctx->other_thread) gdbctx->other_thread = NULL; - dbg_del_thread(dbg_curr_thread); - break; + if ((thread = dbg_get_thread(gdbctx->process, de->dwThreadId))) + dbg_del_thread(thread); + return TRUE; case EXIT_PROCESS_DEBUG_EVENT: fprintf(stderr, "%08x:%08x: exit process (%u)\n", @@ -469,64 +495,53 @@ dbg_del_process(gdbctx->process); gdbctx->process = NULL; - /* now signal gdb that we're done */ - gdbctx->last_sig = SIGTERM; - gdbctx->in_trap = TRUE; - break; + return FALSE; case OUTPUT_DEBUG_STRING_EVENT: - assert(dbg_curr_thread); memory_get_string(gdbctx->process, de->u.DebugString.lpDebugStringData, TRUE, de->u.DebugString.fUnicode, u.bufferA, sizeof(u.bufferA)); fprintf(stderr, "%08x:%08x: output debug string (%s)\n", de->dwProcessId, de->dwThreadId, debugstr_a(u.bufferA)); - break; + return TRUE; case RIP_EVENT: fprintf(stderr, "%08x:%08x: rip error=%u type=%u\n", de->dwProcessId, de->dwThreadId, de->u.RipInfo.dwError, de->u.RipInfo.dwType); - break; + return TRUE; default: FIXME("%08x:%08x: unknown event (%u)\n", de->dwProcessId, de->dwThreadId, de->dwDebugEventCode); } -} -static void resume_debuggee(struct gdb_context* gdbctx, DWORD cont) -{ - if (dbg_curr_thread) + LIST_FOR_EACH_ENTRY(thread, &gdbctx->process->threads, struct dbg_thread, entry) { - if (!gdbctx->process->be_cpu->set_context(dbg_curr_thread->handle, &gdbctx->context)) - ERR("Failed to set context for thread %04x, error %u\n", - dbg_curr_thread->tid, GetLastError()); - if (!ContinueDebugEvent(gdbctx->process->pid, dbg_curr_thread->tid, cont)) - ERR("Failed to continue thread %04x, error %u\n", - dbg_curr_thread->tid, GetLastError()); + if (!thread->suspended) SuspendThread(thread->handle); + thread->suspended = TRUE; } - else - ERR("Cannot find last thread\n"); -} + return FALSE; +} -static void resume_debuggee_thread(struct gdb_context* gdbctx, DWORD cont, unsigned int threadid) +static void handle_step_or_continue(struct gdb_context* gdbctx, int tid, BOOL step, int sig) { + struct dbg_process *process = gdbctx->process; + struct dbg_thread *thread; - if (dbg_curr_thread) + if (tid == 0) tid = gdbctx->de.dwThreadId; + LIST_FOR_EACH_ENTRY(thread, &process->threads, struct dbg_thread, entry) { - if(dbg_curr_thread->tid == threadid){ - /* Windows debug and GDB don't seem to work well here, windows only likes ContinueDebugEvent being used on the reporter of the event */ - if (!gdbctx->process->be_cpu->set_context(dbg_curr_thread->handle, &gdbctx->context)) - ERR("Failed to set context for thread %04x, error %u\n", - dbg_curr_thread->tid, GetLastError()); - if (!ContinueDebugEvent(gdbctx->process->pid, dbg_curr_thread->tid, cont)) - ERR("Failed to continue thread %04x, error %u\n", - dbg_curr_thread->tid, GetLastError()); - } + if (tid != -1 && thread->tid != tid) continue; + if (!thread->suspended) continue; + thread->suspended = FALSE; + + if (process->pid == gdbctx->de.dwProcessId && thread->tid == gdbctx->de.dwThreadId) + gdbctx->de_reply = (sig == -1 ? DBG_CONTINUE : DBG_EXCEPTION_NOT_HANDLED); + + dbg_thread_set_single_step(thread, step); + ResumeThread(thread->handle); } - else - ERR("Cannot find last thread\n"); } static BOOL check_for_interrupt(struct gdb_context* gdbctx) @@ -558,12 +573,12 @@ static void wait_for_debuggee(struct gdb_context* gdbctx) { - DEBUG_EVENT de; + if (gdbctx->de.dwDebugEventCode) + ContinueDebugEvent(gdbctx->de.dwProcessId, gdbctx->de.dwThreadId, gdbctx->de_reply); - gdbctx->in_trap = FALSE; for (;;) { - if (!WaitForDebugEvent(&de, 10)) + if (!WaitForDebugEvent(&gdbctx->de, 10)) { if (GetLastError() == ERROR_SEM_TIMEOUT) { @@ -572,7 +587,7 @@ ERR("Failed to break into debuggee\n"); break; } - WaitForDebugEvent(&de, INFINITE); + WaitForDebugEvent(&gdbctx->de, INFINITE); } else { continue; } @@ -580,21 +595,19 @@ break; } } - handle_debug_event(gdbctx, &de); - assert(!gdbctx->process || - gdbctx->process->pid == 0 || - de.dwProcessId == gdbctx->process->pid); - assert(!dbg_curr_thread || de.dwThreadId == dbg_curr_thread->tid); - if (gdbctx->in_trap) break; - ContinueDebugEvent(de.dwProcessId, de.dwThreadId, DBG_CONTINUE); + if (!handle_debug_event(gdbctx)) + break; + ContinueDebugEvent(gdbctx->de.dwProcessId, gdbctx->de.dwThreadId, DBG_CONTINUE); } } static void detach_debuggee(struct gdb_context* gdbctx, BOOL kill) { - assert(gdbctx->process->be_cpu); - gdbctx->process->be_cpu->single_step(&gdbctx->context, FALSE); - resume_debuggee(gdbctx, DBG_CONTINUE); + handle_step_or_continue(gdbctx, -1, FALSE, -1); + + if (gdbctx->de.dwDebugEventCode) + ContinueDebugEvent(gdbctx->de.dwProcessId, gdbctx->de.dwThreadId, DBG_CONTINUE); + if (!kill) DebugActiveProcessStop(gdbctx->process->pid); dbg_del_process(gdbctx->process); @@ -760,6 +773,35 @@ gdbctx->out_curr_packet = -1; } +static void packet_reply_open_xfer(struct gdb_context* gdbctx) +{ + packet_reply_open(gdbctx); + packet_reply_add(gdbctx, "m"); +} + +static void packet_reply_close_xfer(struct gdb_context* gdbctx, int off, int len) +{ + int begin = gdbctx->out_curr_packet + 1; + int plen; + + if (begin + off < gdbctx->out_len) + { + gdbctx->out_len -= off; + memmove(gdbctx->out_buf + begin, gdbctx->out_buf + begin + off, gdbctx->out_len); + } + else + { + gdbctx->out_buf[gdbctx->out_curr_packet] = 'l'; + gdbctx->out_len = gdbctx->out_curr_packet + 1; + } + + plen = gdbctx->out_len - begin; + if (len >= 0 && plen > len) gdbctx->out_len -= (plen - len); + else gdbctx->out_buf[gdbctx->out_curr_packet] = 'l'; + + packet_reply_close(gdbctx); +} + static enum packet_return packet_reply(struct gdb_context* gdbctx, const char* packet) { packet_reply_open(gdbctx); @@ -785,25 +827,10 @@ return packet_done; } -static inline void packet_reply_register_hex_to(struct gdb_context* gdbctx, unsigned idx) +static inline void packet_reply_register_hex_to(struct gdb_context* gdbctx, dbg_ctx_t* ctx, unsigned idx) { const struct gdb_register *cpu_register_map = gdbctx->process->be_cpu->gdb_register_map; - - if (cpu_register_map[idx].gdb_length == cpu_register_map[idx].ctx_length) - packet_reply_hex_to(gdbctx, cpu_register_ptr(gdbctx, &gdbctx->context, idx), - cpu_register_map[idx].gdb_length); - else - { - DWORD64 val = cpu_register(gdbctx, &gdbctx->context, idx); - unsigned i; - - for (i = 0; i < cpu_register_map[idx].gdb_length; i++) - { - BYTE b = val; - packet_reply_hex_to(gdbctx, &b, 1); - val >>= 8; - } - } + packet_reply_hex_to(gdbctx, cpu_register_ptr(gdbctx, ctx, idx), cpu_register_map[idx].length); } /* =============================================== * @@ -811,56 +838,78 @@ * =============================================== * */ -static enum packet_return packet_reply_status(struct gdb_context* gdbctx) +static void packet_reply_status_xpoints(struct gdb_context* gdbctx, struct dbg_thread *thread, + dbg_ctx_t *ctx) { - enum packet_return ret = packet_done; + struct dbg_process *process = thread->process; + struct backend_cpu *cpu = process->be_cpu; + struct gdb_xpoint *x; + + LIST_FOR_EACH_ENTRY(x, &gdbctx->xpoint_list, struct gdb_xpoint, entry) + { + if (x->pid != process->pid || x->tid != thread->tid) + continue; + if (!cpu->is_watchpoint_set(ctx, x->value)) + continue; + if (x->type == be_xpoint_watch_write) + { + packet_reply_add(gdbctx, "watch:"); + packet_reply_val(gdbctx, (unsigned long)x->addr, sizeof(x->addr)); + packet_reply_add(gdbctx, ";"); + } + if (x->type == be_xpoint_watch_read) + { + packet_reply_add(gdbctx, "rwatch:"); + packet_reply_val(gdbctx, (unsigned long)x->addr, sizeof(x->addr)); + packet_reply_add(gdbctx, ";"); + } + } +} - packet_reply_open(gdbctx); +static enum packet_return packet_reply_status(struct gdb_context* gdbctx) +{ + struct dbg_process *process = gdbctx->process; + struct dbg_thread *thread; + struct backend_cpu *backend; + dbg_ctx_t ctx; + size_t i; - if (gdbctx->process != NULL) + switch (gdbctx->de.dwDebugEventCode) { - unsigned char sig; - unsigned i; + default: + if (!process) return packet_error; + if (!(backend = process->be_cpu)) return packet_error; + if (!(thread = dbg_get_thread(process, gdbctx->de.dwThreadId)) || + !backend->get_context(thread->handle, &ctx)) + return packet_error; + packet_reply_open(gdbctx); packet_reply_add(gdbctx, "T"); - sig = gdbctx->last_sig; - packet_reply_val(gdbctx, sig, 1); + packet_reply_val(gdbctx, signal_from_debug_event(&gdbctx->de), 1); packet_reply_add(gdbctx, "thread:"); - packet_reply_val(gdbctx, dbg_curr_thread->tid, 4); + packet_reply_val(gdbctx, gdbctx->de.dwThreadId, 4); packet_reply_add(gdbctx, ";"); + packet_reply_status_xpoints(gdbctx, thread, &ctx); - for (i = 0; i < gdbctx->process->be_cpu->gdb_num_regs; i++) + for (i = 0; i < backend->gdb_num_regs; i++) { - /* FIXME: this call will also grow the buffer... - * unneeded, but not harmful - */ packet_reply_val(gdbctx, i, 1); packet_reply_add(gdbctx, ":"); - packet_reply_register_hex_to(gdbctx, i); + packet_reply_register_hex_to(gdbctx, &ctx, i); packet_reply_add(gdbctx, ";"); } - } - else - { - /* Try to put an exit code - * Cannot use GetExitCodeProcess, wouldn't fit in a 8 bit value, so - * just indicate the end of process and exit */ - packet_reply_add(gdbctx, "W00"); - /*if (!gdbctx->extended)*/ ret |= packet_last_f; - } - - packet_reply_close(gdbctx); - return ret; -} + packet_reply_close(gdbctx); + return packet_done; -#if 0 -static enum packet_return packet_extended(struct gdb_context* gdbctx) -{ - gdbctx->extended = 1; - return packet_ok; + case EXIT_PROCESS_DEBUG_EVENT: + packet_reply_open(gdbctx); + packet_reply_add(gdbctx, "W"); + packet_reply_val(gdbctx, gdbctx->de.u.ExitProcess.dwExitCode, 4); + packet_reply_close(gdbctx); + return packet_done | packet_last_f; + } } -#endif static enum packet_return packet_last_signal(struct gdb_context* gdbctx) { @@ -870,51 +919,25 @@ static enum packet_return packet_continue(struct gdb_context* gdbctx) { - /* FIXME: add support for address in packet */ - assert(gdbctx->in_packet_len == 0); - if (dbg_curr_thread != gdbctx->exec_thread && gdbctx->exec_thread) - FIXME("Can't continue thread %04x while on thread %04x\n", - gdbctx->exec_thread->tid, dbg_curr_thread->tid); - resume_debuggee(gdbctx, DBG_CONTINUE); + void *addr; + + if (sscanf(gdbctx->in_packet, "%p", &addr) == 1) + FIXME("Continue at address %p not supported\n", addr); + + handle_step_or_continue(gdbctx, gdbctx->exec_tid, FALSE, -1); + wait_for_debuggee(gdbctx); return packet_reply_status(gdbctx); } static enum packet_return packet_verbose_cont(struct gdb_context* gdbctx) { - int i; - int defaultAction = -1; /* magic non action */ - unsigned char sig; - int actions =0; - int actionIndex[20]; /* allow for up to 20 actions */ - int threadIndex[20]; - int threadCount = 0; - unsigned int threadIDs[100]; /* TODO: Should make this dynamic */ - unsigned int threadID = 0; - struct dbg_thread* thd; + char *buf = gdbctx->in_packet, *end = gdbctx->in_packet + gdbctx->in_packet_len; - /* OK we have vCont followed by.. - * ? for query - * c for packet_continue - * Csig for packet_continue_signal - * s for step - * Ssig for step signal - * and then an optional thread ID at the end.. - * *******************************************/ - - /* Query */ if (gdbctx->in_packet[4] == '?') { - /* - Reply: - `vCont[;action]...' - The vCont packet is supported. Each action is a supported command in the vCont packet. - `' - The vCont packet is not supported. (this didn't seem to be obeyed!) - */ packet_reply_open(gdbctx); packet_reply_add(gdbctx, "vCont"); - /* add all the supported actions to the reply (all of them for now) */ packet_reply_add(gdbctx, ";c"); packet_reply_add(gdbctx, ";C"); packet_reply_add(gdbctx, ";s"); @@ -923,142 +946,37 @@ return packet_done; } - /* go through the packet and identify where all the actions start at */ - for (i = 4; i < gdbctx->in_packet_len - 1; i++) + while (buf < end && (buf = memchr(buf + 1, ';', end - buf - 1))) { - if (gdbctx->in_packet[i] == ';') - { - threadIndex[actions] = 0; - actionIndex[actions++] = i; - } - else if (gdbctx->in_packet[i] == ':') - { - threadIndex[actions - 1] = i; - } - } + int tid = -1, sig = -1; + int action, n; - /* now look up the default action */ - for (i = 0 ; i < actions; i++) - { - if (threadIndex[i] == 0) + switch ((action = buf[1])) { - if (defaultAction != -1) - { - fprintf(stderr,"Too many default actions specified\n"); + default: + return packet_error; + case 'c': + case 's': + buf += 2; + break; + case 'C': + case 'S': + if (sscanf(buf, ";%*c%2x", &sig) <= 0 || + sig != signal_from_debug_event(&gdbctx->de)) return packet_error; - } - defaultAction = i; - } - } - - /* Now, I have this default action thing that needs to be applied to all non counted threads */ - - /* go through all the threads and stick their ids in the to be done list. */ - LIST_FOR_EACH_ENTRY(thd, &gdbctx->process->threads, struct dbg_thread, entry) - { - threadIDs[threadCount++] = thd->tid; - /* check to see if we have more threads than I counted on, and tell the user what to do - * (they're running winedbg, so I'm sure they can fix the problem from the error message!) */ - if (threadCount == 100) - { - fprintf(stderr, "Wow, that's a lot of threads, change threadIDs in wine/programs/winedbg/gdbproxy.c to be higher\n"); + buf += 4; break; } - } - - /* Ok, now we have... actionIndex full of actions and we know what threads there are, so all - * that remains is to apply the actions to the threads and the default action to any threads - * left */ - if (dbg_curr_thread != gdbctx->exec_thread && gdbctx->exec_thread) - FIXME("Can't continue thread %04x while on thread %04x\n", - gdbctx->exec_thread->tid, dbg_curr_thread->tid); - /* deal with the threaded stuff first */ - for (i = 0; i < actions ; i++) - { - if (threadIndex[i] != 0) - { - int j, idLength = 0; - if (i < actions - 1) - { - idLength = (actionIndex[i+1] - threadIndex[i]) - 1; - } - else - { - idLength = (gdbctx->in_packet_len - threadIndex[i]) - 1; - } - - threadID = hex_to_int(gdbctx->in_packet + threadIndex[i] + 1 , idLength); - /* process the action */ - switch (gdbctx->in_packet[actionIndex[i] + 1]) - { - case 's': /* step */ - gdbctx->process->be_cpu->single_step(&gdbctx->context, TRUE); - /* fall through*/ - case 'c': /* continue */ - resume_debuggee_thread(gdbctx, DBG_CONTINUE, threadID); - break; - case 'S': /* step Sig, */ - gdbctx->process->be_cpu->single_step(&gdbctx->context, TRUE); - /* fall through */ - case 'C': /* continue sig */ - hex_from(&sig, gdbctx->in_packet + actionIndex[i] + 2, 1); - /* cannot change signals on the fly */ - TRACE("sigs: %u %u\n", sig, gdbctx->last_sig); - if (sig != gdbctx->last_sig) - return packet_error; - resume_debuggee_thread(gdbctx, DBG_EXCEPTION_NOT_HANDLED, threadID); - break; - } - for (j = 0 ; j < threadCount; j++) - { - if (threadIDs[j] == threadID) - { - threadIDs[j] = 0; - break; - } - } - } - } /* for i=0 ; i< actions */ + if (buf > end) + return packet_error; + if (buf < end && *buf == ':' && (n = sscanf(buf, ":%x", &tid)) <= 0) + return packet_error; - /* now we have manage the default action */ - if (defaultAction >= 0) - { - for (i = 0 ; i< threadCount; i++) - { - /* check to see if we've already done something to the thread*/ - if (threadIDs[i] != 0) - { - /* if not apply the default action*/ - threadID = threadIDs[i]; - /* process the action (yes this is almost identical to the one above!) */ - switch (gdbctx->in_packet[actionIndex[defaultAction] + 1]) - { - case 's': /* step */ - gdbctx->process->be_cpu->single_step(&gdbctx->context, TRUE); - /* fall through */ - case 'c': /* continue */ - resume_debuggee_thread(gdbctx, DBG_CONTINUE, threadID); - break; - case 'S': - gdbctx->process->be_cpu->single_step(&gdbctx->context, TRUE); - /* fall through */ - case 'C': /* continue sig */ - hex_from(&sig, gdbctx->in_packet + actionIndex[defaultAction] + 2, 1); - /* cannot change signals on the fly */ - TRACE("sigs: %u %u\n", sig, gdbctx->last_sig); - if (sig != gdbctx->last_sig) - return packet_error; - resume_debuggee_thread(gdbctx, DBG_EXCEPTION_NOT_HANDLED, threadID); - break; - } - } - } - } /* if(defaultAction >=0) */ + handle_step_or_continue(gdbctx, tid, action == 's' || action == 'S', sig); + } wait_for_debuggee(gdbctx); - if (gdbctx->process) - gdbctx->process->be_cpu->single_step(&gdbctx->context, FALSE); return packet_reply_status(gdbctx); } @@ -1069,30 +987,117 @@ return packet_verbose_cont(gdbctx); } - WARN("Unhandled verbose packet %s\n", - debugstr_an(gdbctx->in_packet, gdbctx->in_packet_len)); + if (gdbctx->in_packet_len == 14 && !memcmp(gdbctx->in_packet, "MustReplyEmpty", 14)) + return packet_reply(gdbctx, ""); + return packet_error; } static enum packet_return packet_continue_signal(struct gdb_context* gdbctx) { - unsigned char sig; + void *addr; + int sig, n; + + if ((n = sscanf(gdbctx->in_packet, "%x;%p", &sig, &addr)) == 2) + FIXME("Continue at address %p not supported\n", addr); + if (n < 1) return packet_error; - /* FIXME: add support for address in packet */ - assert(gdbctx->in_packet_len == 2); - if (dbg_curr_thread != gdbctx->exec_thread && gdbctx->exec_thread) - FIXME("Can't continue thread %04x while on thread %04x\n", - gdbctx->exec_thread->tid, dbg_curr_thread->tid); - hex_from(&sig, gdbctx->in_packet, 1); - /* cannot change signals on the fly */ - TRACE("sigs: %u %u\n", sig, gdbctx->last_sig); - if (sig != gdbctx->last_sig) + if (sig != signal_from_debug_event(&gdbctx->de)) + { + ERR("Changing signals is not supported.\n"); return packet_error; - resume_debuggee(gdbctx, DBG_EXCEPTION_NOT_HANDLED); + } + + handle_step_or_continue(gdbctx, gdbctx->exec_tid, FALSE, sig); + wait_for_debuggee(gdbctx); return packet_reply_status(gdbctx); } +static enum packet_return packet_delete_breakpoint(struct gdb_context* gdbctx) +{ + struct dbg_process *process = gdbctx->process; + struct dbg_thread *thread; + struct backend_cpu *cpu; + struct gdb_xpoint *x; + dbg_ctx_t ctx; + char type; + void *addr; + int size; + + if (!process) return packet_error; + if (!(cpu = process->be_cpu)) return packet_error; + + if (sscanf(gdbctx->in_packet, "%c,%p,%x", &type, &addr, &size) < 3) + return packet_error; + + if (type == '0') + return packet_error; + + LIST_FOR_EACH_ENTRY(thread, &process->threads, struct dbg_thread, entry) + { + if (!cpu->get_context(thread->handle, &ctx)) + continue; + if ((type == '1') && (x = gdb_find_xpoint(gdbctx, thread, be_xpoint_watch_exec, addr, size))) + gdbctx_delete_xpoint(gdbctx, thread, &ctx, x); + if ((type == '2' || type == '4') && (x = gdb_find_xpoint(gdbctx, thread, be_xpoint_watch_read, addr, size))) + gdbctx_delete_xpoint(gdbctx, thread, &ctx, x); + if ((type == '3' || type == '4') && (x = gdb_find_xpoint(gdbctx, thread, be_xpoint_watch_write, addr, size))) + gdbctx_delete_xpoint(gdbctx, thread, &ctx, x); + cpu->set_context(thread->handle, &ctx); + } + + while ((type == '1') && (x = gdb_find_xpoint(gdbctx, NULL, be_xpoint_watch_exec, addr, size))) + gdbctx_delete_xpoint(gdbctx, NULL, NULL, x); + while ((type == '2' || type == '4') && (x = gdb_find_xpoint(gdbctx, NULL, be_xpoint_watch_read, addr, size))) + gdbctx_delete_xpoint(gdbctx, NULL, NULL, x); + while ((type == '3' || type == '4') && (x = gdb_find_xpoint(gdbctx, NULL, be_xpoint_watch_write, addr, size))) + gdbctx_delete_xpoint(gdbctx, NULL, NULL, x); + + return packet_ok; +} + +static enum packet_return packet_insert_breakpoint(struct gdb_context* gdbctx) +{ + struct dbg_process *process = gdbctx->process; + struct dbg_thread *thread; + struct backend_cpu *cpu; + dbg_ctx_t ctx; + char type; + void *addr; + int size; + + if (!process) return packet_error; + if (!(cpu = process->be_cpu)) return packet_error; + + if (memchr(gdbctx->in_packet, ';', gdbctx->in_packet_len)) + { + FIXME("breakpoint commands not supported\n"); + return packet_error; + } + + if (sscanf(gdbctx->in_packet, "%c,%p,%x", &type, &addr, &size) < 3) + return packet_error; + + if (type == '0') + return packet_error; + + LIST_FOR_EACH_ENTRY(thread, &process->threads, struct dbg_thread, entry) + { + if (!cpu->get_context(thread->handle, &ctx)) + continue; + if (type == '1') + gdbctx_insert_xpoint(gdbctx, thread, &ctx, be_xpoint_watch_exec, addr, size); + if (type == '2' || type == '4') + gdbctx_insert_xpoint(gdbctx, thread, &ctx, be_xpoint_watch_read, addr, size); + if (type == '3' || type == '4') + gdbctx_insert_xpoint(gdbctx, thread, &ctx, be_xpoint_watch_write, addr, size); + cpu->set_context(thread->handle, &ctx); + } + + return packet_ok; +} + static enum packet_return packet_detach(struct gdb_context* gdbctx) { detach_debuggee(gdbctx, FALSE); @@ -1101,20 +1106,21 @@ static enum packet_return packet_read_registers(struct gdb_context* gdbctx) { - int i; + struct dbg_thread *thread = dbg_thread_from_tid(gdbctx, gdbctx->other_tid); + struct backend_cpu *backend; dbg_ctx_t ctx; + size_t i; - assert(gdbctx->in_trap); + if (!thread) return packet_error; + if (!thread->process) return packet_error; + if (!(backend = thread->process->be_cpu)) return packet_error; - if (dbg_curr_thread != gdbctx->other_thread && gdbctx->other_thread) - { - if (!fetch_context(gdbctx, gdbctx->other_thread->handle, &ctx)) - return packet_error; - } + if (!backend->get_context(thread->handle, &ctx)) + return packet_error; packet_reply_open(gdbctx); - for (i = 0; i < gdbctx->process->be_cpu->gdb_num_regs; i++) - packet_reply_register_hex_to(gdbctx, i); + for (i = 0; i < backend->gdb_num_regs; i++) + packet_reply_register_hex_to(gdbctx, &ctx, i); packet_reply_close(gdbctx); return packet_done; @@ -1122,71 +1128,53 @@ static enum packet_return packet_write_registers(struct gdb_context* gdbctx) { - const size_t cpu_num_regs = gdbctx->process->be_cpu->gdb_num_regs; - unsigned i; + struct dbg_thread *thread = dbg_thread_from_tid(gdbctx, gdbctx->other_tid); + struct backend_cpu *backend; dbg_ctx_t ctx; - dbg_ctx_t *pctx = &gdbctx->context; - const char* ptr; + const char *ptr; + size_t i; - assert(gdbctx->in_trap); - if (dbg_curr_thread != gdbctx->other_thread && gdbctx->other_thread) - { - if (!fetch_context(gdbctx, gdbctx->other_thread->handle, pctx = &ctx)) - return packet_error; - } - if (gdbctx->in_packet_len < cpu_num_regs * 2) return packet_error; + if (!thread) return packet_error; + if (!thread->process) return packet_error; + if (!(backend = thread->process->be_cpu)) return packet_error; + + if (!backend->get_context(thread->handle, &ctx)) + return packet_error; + + if (gdbctx->in_packet_len < backend->gdb_num_regs * 2) + return packet_error; ptr = gdbctx->in_packet; - for (i = 0; i < cpu_num_regs; i++) - cpu_register_hex_from(gdbctx, pctx, i, &ptr); + for (i = 0; i < backend->gdb_num_regs; i++) + cpu_register_hex_from(gdbctx, &ctx, i, &ptr); - if (pctx != &gdbctx->context && - !gdbctx->process->be_cpu->set_context(gdbctx->other_thread->handle, pctx)) + if (!backend->set_context(thread->handle, &ctx)) { - ERR("Failed to set context for tid %04x, error %u\n", - gdbctx->other_thread->tid, GetLastError()); + ERR("Failed to set context for tid %04x, error %u\n", thread->tid, GetLastError()); return packet_error; } + return packet_ok; } static enum packet_return packet_kill(struct gdb_context* gdbctx) { detach_debuggee(gdbctx, TRUE); -#if 0 - if (!gdbctx->extended) - /* dunno whether GDB cares or not */ -#endif - wait(NULL); - exit(0); - /* assume we can't really answer something here */ - /* return packet_done; */ + return packet_ok | packet_last_f; } static enum packet_return packet_thread(struct gdb_context* gdbctx) { - char* end; - unsigned thread; - switch (gdbctx->in_packet[0]) { case 'c': + if (sscanf(gdbctx->in_packet, "c%x", &gdbctx->exec_tid) == 1) + return packet_ok; + return packet_error; case 'g': - if (gdbctx->in_packet[1] == '-') - thread = -strtol(gdbctx->in_packet + 2, &end, 16); - else - thread = strtol(gdbctx->in_packet + 1, &end, 16); - if (end == NULL || end > gdbctx->in_packet + gdbctx->in_packet_len) - { - ERR("Failed to parse %s\n", - debugstr_an(gdbctx->in_packet, gdbctx->in_packet_len)); - return packet_error; - } - if (gdbctx->in_packet[0] == 'c') - gdbctx->exec_thread = dbg_get_thread(gdbctx->process, thread); - else - gdbctx->other_thread = dbg_get_thread(gdbctx->process, thread); - return packet_ok; + if (sscanf(gdbctx->in_packet, "g%x", &gdbctx->other_tid) == 1) + return packet_ok; + return packet_error; default: FIXME("Unknown thread sub-command %c\n", gdbctx->in_packet[0]); return packet_error; @@ -1200,8 +1188,6 @@ char buffer[32]; SIZE_T r = 0; - assert(gdbctx->in_trap); - /* FIXME:check in_packet_len for reading %p,%x */ if (sscanf(gdbctx->in_packet, "%p,%x", &addr, &len) != 2) return packet_error; if (len <= 0) return packet_error; TRACE("Read %u bytes at %p\n", len, addr); @@ -1231,7 +1217,6 @@ char buffer[32]; SIZE_T w; - assert(gdbctx->in_trap); ptr = memchr(gdbctx->in_packet, ':', gdbctx->in_packet_len); if (ptr == NULL) { @@ -1268,66 +1253,70 @@ static enum packet_return packet_read_register(struct gdb_context* gdbctx) { - unsigned reg; + struct dbg_thread *thread = dbg_thread_from_tid(gdbctx, gdbctx->other_tid); + struct backend_cpu *backend; dbg_ctx_t ctx; - dbg_ctx_t *pctx = &gdbctx->context; + size_t reg; - assert(gdbctx->in_trap); - reg = hex_to_int(gdbctx->in_packet, gdbctx->in_packet_len); - if (reg >= gdbctx->process->be_cpu->gdb_num_regs) - { - WARN("Unhandled register %u\n", reg); + if (!thread) return packet_error; + if (!thread->process) return packet_error; + if (!(backend = thread->process->be_cpu)) return packet_error; + + if (!backend->get_context(thread->handle, &ctx)) return packet_error; - } - if (dbg_curr_thread != gdbctx->other_thread && gdbctx->other_thread) + + if (sscanf(gdbctx->in_packet, "%zx", ®) != 1) + return packet_error; + if (reg >= backend->gdb_num_regs) { - if (!fetch_context(gdbctx, gdbctx->other_thread->handle, pctx = &ctx)) - return packet_error; + WARN("Unhandled register %zu\n", reg); + return packet_error; } - TRACE("%u => %s\n", reg, wine_dbgstr_longlong(cpu_register(gdbctx, pctx, reg))); + TRACE("%zu => %s\n", reg, wine_dbgstr_longlong(cpu_register(gdbctx, &ctx, reg))); packet_reply_open(gdbctx); - packet_reply_register_hex_to(gdbctx, reg); + packet_reply_register_hex_to(gdbctx, &ctx, reg); packet_reply_close(gdbctx); return packet_done; } static enum packet_return packet_write_register(struct gdb_context* gdbctx) { - unsigned reg; - char* ptr; + struct dbg_thread *thread = dbg_thread_from_tid(gdbctx, gdbctx->other_tid); + struct backend_cpu *backend; dbg_ctx_t ctx; - dbg_ctx_t *pctx = &gdbctx->context; + size_t reg; + char *ptr; - assert(gdbctx->in_trap); + if (!thread) return packet_error; + if (!thread->process) return packet_error; + if (!(backend = thread->process->be_cpu)) return packet_error; - reg = strtoul(gdbctx->in_packet, &ptr, 16); - if (ptr == NULL || reg >= gdbctx->process->be_cpu->gdb_num_regs || *ptr++ != '=') + if (!backend->get_context(thread->handle, &ctx)) + return packet_error; + + if (!(ptr = strchr(gdbctx->in_packet, '='))) + return packet_error; + *ptr++ = '\0'; + + if (sscanf(gdbctx->in_packet, "%zx", ®) != 1) + return packet_error; + if (reg >= backend->gdb_num_regs) { - WARN("Unhandled register %s\n", - debugstr_an(gdbctx->in_packet, gdbctx->in_packet_len)); /* FIXME: if just the reg is above cpu_num_regs, don't tell gdb * it wouldn't matter too much, and it fakes our support for all regs */ - return (ptr == NULL) ? packet_error : packet_ok; + WARN("Unhandled register %zu\n", reg); + return packet_ok; } - TRACE("%u <= %s\n", reg, - debugstr_an(ptr, (int)(gdbctx->in_packet_len - (ptr - gdbctx->in_packet)))); + TRACE("%zu <= %s\n", reg, debugstr_an(ptr, (int)(gdbctx->in_packet_len - (ptr - gdbctx->in_packet)))); - if (dbg_curr_thread != gdbctx->other_thread && gdbctx->other_thread) + cpu_register_hex_from(gdbctx, &ctx, reg, (const char**)&ptr); + if (!backend->set_context(thread->handle, &ctx)) { - if (!fetch_context(gdbctx, gdbctx->other_thread->handle, pctx = &ctx)) - return packet_error; - } - - cpu_register_hex_from(gdbctx, pctx, reg, (const char**)&ptr); - if (pctx != &gdbctx->context && - !gdbctx->process->be_cpu->set_context(gdbctx->other_thread->handle, pctx)) - { - ERR("Failed to set context for tid %04x, error %u\n", - gdbctx->other_thread->tid, GetLastError()); + ERR("Failed to set context for tid %04x, error %u\n", thread->tid, GetLastError()); return packet_error; } @@ -1528,8 +1517,245 @@ return packet_reply_error(gdbctx, EINVAL); } +static BOOL CALLBACK packet_query_libraries_cb(PCSTR mod_name, DWORD64 base, PVOID ctx) +{ + struct gdb_context* gdbctx = ctx; + MEMORY_BASIC_INFORMATION mbi; + IMAGE_SECTION_HEADER *sec; + IMAGE_DOS_HEADER *dos = NULL; + IMAGE_NT_HEADERS *nth = NULL; + IMAGEHLP_MODULE64 mod; + SIZE_T size, i; + BOOL is_wow64; + char buffer[0x400]; + + mod.SizeOfStruct = sizeof(mod); + SymGetModuleInfo64(gdbctx->process->handle, base, &mod); + + packet_reply_add(gdbctx, "process->handle, &is_wow64) && + is_wow64 && (tmp = strstr(unix_path, "system32"))) + memcpy(tmp, "syswow64", 8); + packet_reply_add(gdbctx, unix_path); + } + else + packet_reply_add(gdbctx, mod.LoadedImageName); + + HeapFree(GetProcessHeap(), 0, unix_path); + RtlFreeUnicodeString(&nt_name); + } + packet_reply_add(gdbctx, "\">"); + + size = sizeof(buffer); + if (VirtualQueryEx(gdbctx->process->handle, (void *)(UINT_PTR)mod.BaseOfImage, &mbi, sizeof(mbi)) >= sizeof(mbi) && + mbi.Type == MEM_IMAGE && mbi.State != MEM_FREE) + { + if (ReadProcessMemory(gdbctx->process->handle, (void *)(UINT_PTR)mod.BaseOfImage, buffer, size, &size) && + size >= sizeof(IMAGE_DOS_HEADER)) + dos = (IMAGE_DOS_HEADER *)buffer; + + if (dos && dos->e_magic == IMAGE_DOS_SIGNATURE && dos->e_lfanew < size) + nth = (IMAGE_NT_HEADERS *)(buffer + dos->e_lfanew); + + if (nth && memcmp(&nth->Signature, "PE\0\0", 4)) + nth = NULL; + } + + if (!nth) memset(buffer, 0, sizeof(buffer)); + + /* if the module is not PE we have cleared buffer with 0, this makes + * the following computation valid in all cases. */ + dos = (IMAGE_DOS_HEADER *)buffer; + nth = (IMAGE_NT_HEADERS *)(buffer + dos->e_lfanew); + if (IsWow64Process(gdbctx->process->handle, &is_wow64) && is_wow64) + sec = IMAGE_FIRST_SECTION((IMAGE_NT_HEADERS32 *)nth); + else + sec = IMAGE_FIRST_SECTION((IMAGE_NT_HEADERS64 *)nth); + + for (i = 0; i < max(nth->FileHeader.NumberOfSections, 1); ++i) + { + if ((char *)(sec + i) >= buffer + size) break; + packet_reply_add(gdbctx, ""); + } + + packet_reply_add(gdbctx, ""); + + return TRUE; +} + +static void packet_query_libraries(struct gdb_context* gdbctx) +{ + BOOL opt; + + /* this will resynchronize builtin dbghelp's internal ELF module list */ + SymLoadModule(gdbctx->process->handle, 0, 0, 0, 0, 0); + + packet_reply_add(gdbctx, ""); + opt = SymSetExtendedOption(SYMOPT_EX_WINE_NATIVE_MODULES, TRUE); + SymEnumerateModules64(gdbctx->process->handle, packet_query_libraries_cb, gdbctx); + SymSetExtendedOption(SYMOPT_EX_WINE_NATIVE_MODULES, opt); + packet_reply_add(gdbctx, ""); +} + +static void packet_query_threads(struct gdb_context* gdbctx) +{ + struct dbg_process* process = gdbctx->process; + struct dbg_thread* thread; + + packet_reply_add(gdbctx, ""); + LIST_FOR_EACH_ENTRY(thread, &process->threads, struct dbg_thread, entry) + { + packet_reply_add(gdbctx, "tid, 4); + packet_reply_add(gdbctx, "\" name=\""); + packet_reply_add(gdbctx, thread->name); + packet_reply_add(gdbctx, "\"/>"); + } + packet_reply_add(gdbctx, ""); +} + +static void packet_query_target_xml(struct gdb_context* gdbctx, struct backend_cpu* cpu) +{ + const char* feature_prefix = NULL; + const char* feature = NULL; + char buffer[256]; + int i; + + packet_reply_add(gdbctx, ""); + switch (cpu->machine) + { + case IMAGE_FILE_MACHINE_AMD64: + packet_reply_add(gdbctx, "i386:x86-64"); + feature_prefix = "org.gnu.gdb.i386."; + break; + case IMAGE_FILE_MACHINE_I386: + packet_reply_add(gdbctx, "i386"); + feature_prefix = "org.gnu.gdb.i386."; + break; + case IMAGE_FILE_MACHINE_POWERPC: + packet_reply_add(gdbctx, "powerpc:common"); + feature_prefix = "org.gnu.gdb.power."; + break; + case IMAGE_FILE_MACHINE_ARMNT: + packet_reply_add(gdbctx, "arm"); + feature_prefix = "org.gnu.gdb.arm."; + break; + case IMAGE_FILE_MACHINE_ARM64: + packet_reply_add(gdbctx, "aarch64"); + feature_prefix = "org.gnu.gdb.aarch64."; + break; + } + + for (i = 0; i < cpu->gdb_num_regs; ++i) + { + if (cpu->gdb_register_map[i].feature) + { + if (feature) packet_reply_add(gdbctx, ""); + feature = cpu->gdb_register_map[i].feature; + + packet_reply_add(gdbctx, ""); + + if (strcmp(feature_prefix, "org.gnu.gdb.i386.") == 0 && + strcmp(feature, "core") == 0) + packet_reply_add(gdbctx, "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + ""); + + if (strcmp(feature_prefix, "org.gnu.gdb.i386.") == 0 && + strcmp(feature, "sse") == 0) + packet_reply_add(gdbctx, "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + ""); + } + + snprintf(buffer, ARRAY_SIZE(buffer), "gdb_register_map[i].name, 8 * cpu->gdb_register_map[i].length); + packet_reply_add(gdbctx, buffer); + + if (cpu->gdb_register_map[i].type) + { + packet_reply_add(gdbctx, " type=\""); + packet_reply_add(gdbctx, cpu->gdb_register_map[i].type); + packet_reply_add(gdbctx, "\""); + } + + packet_reply_add(gdbctx, "/>"); + } + + if (feature) packet_reply_add(gdbctx, ""); + packet_reply_add(gdbctx, ""); +} + static enum packet_return packet_query(struct gdb_context* gdbctx) { + int off, len; + struct backend_cpu *cpu; + switch (gdbctx->in_packet[0]) { case 'f': @@ -1615,15 +1841,13 @@ return packet_ok; if (strncmp(gdbctx->in_packet, "Supported", 9) == 0) { - if (*target_xml) - return packet_reply(gdbctx, "PacketSize=400;qXfer:features:read+"); - else - { - /* no features supported */ - packet_reply_open(gdbctx); - packet_reply_close(gdbctx); - return packet_done; - } + packet_reply_open(gdbctx); + packet_reply_add(gdbctx, "QStartNoAckMode+;"); + packet_reply_add(gdbctx, "qXfer:libraries:read+;"); + packet_reply_add(gdbctx, "qXfer:threads:read+;"); + packet_reply_add(gdbctx, "qXfer:features:read+;"); + packet_reply_close(gdbctx); + return packet_done; } break; case 'T': @@ -1652,50 +1876,65 @@ } break; case 'X': - if (*target_xml && strncmp(gdbctx->in_packet, "Xfer:features:read:target.xml", 29) == 0) - return packet_reply(gdbctx, target_xml); + if (sscanf(gdbctx->in_packet, "Xfer:libraries:read::%x,%x", &off, &len) == 2) + { + if (!gdbctx->process) return packet_error; + + packet_reply_open_xfer(gdbctx); + packet_query_libraries(gdbctx); + packet_reply_close_xfer(gdbctx, off, len); + return packet_done; + } + + if (sscanf(gdbctx->in_packet, "Xfer:threads:read::%x,%x", &off, &len) == 2) + { + if (!gdbctx->process) return packet_error; + + packet_reply_open_xfer(gdbctx); + packet_query_threads(gdbctx); + packet_reply_close_xfer(gdbctx, off, len); + return packet_done; + } + + if (sscanf(gdbctx->in_packet, "Xfer:features:read:target.xml:%x,%x", &off, &len) == 2) + { + if (!gdbctx->process) return packet_error; + if (!(cpu = gdbctx->process->be_cpu)) return packet_error; + + packet_reply_open_xfer(gdbctx); + packet_query_target_xml(gdbctx, cpu); + packet_reply_close_xfer(gdbctx, off, len); + return packet_done; + } break; } ERR("Unhandled query %s\n", debugstr_an(gdbctx->in_packet, gdbctx->in_packet_len)); return packet_error; } -static enum packet_return packet_step(struct gdb_context* gdbctx) +static enum packet_return packet_set(struct gdb_context* gdbctx) { - /* FIXME: add support for address in packet */ - assert(gdbctx->in_packet_len == 0); - if (dbg_curr_thread != gdbctx->exec_thread && gdbctx->exec_thread) - FIXME("Can't single-step thread %04x while on thread %04x\n", - gdbctx->exec_thread->tid, dbg_curr_thread->tid); - gdbctx->process->be_cpu->single_step(&gdbctx->context, TRUE); - resume_debuggee(gdbctx, DBG_CONTINUE); - wait_for_debuggee(gdbctx); - gdbctx->process->be_cpu->single_step(&gdbctx->context, FALSE); - return packet_reply_status(gdbctx); + if (strncmp(gdbctx->in_packet, "StartNoAckMode", 14) == 0) + { + gdbctx->no_ack_mode = TRUE; + return packet_ok; + } + + return packet_error; } -#if 0 -static enum packet_return packet_step_signal(struct gdb_context* gdbctx) +static enum packet_return packet_step(struct gdb_context* gdbctx) { - unsigned char sig; + void *addr; + + if (sscanf(gdbctx->in_packet, "%p", &addr) == 1) + FIXME("Continue at address %p not supported\n", addr); + + handle_step_or_continue(gdbctx, gdbctx->exec_tid, TRUE, -1); - /* FIXME: add support for address in packet */ - assert(gdbctx->in_packet_len == 2); - if (dbg_curr_thread->tid != gdbctx->exec_thread && gdbctx->exec_thread) - if (gdbctx->trace & GDBPXY_TRC_COMMAND_ERROR) - fprintf(stderr, "NIY: step/sig on %u, while last thread is %u\n", - gdbctx->exec_thread, DEBUG_CurrThread->tid); - hex_from(&sig, gdbctx->in_packet, 1); - /* cannot change signals on the fly */ - if (gdbctx->trace & GDBPXY_TRC_COMMAND) - fprintf(stderr, "sigs: %u %u\n", sig, gdbctx->last_sig); - if (sig != gdbctx->last_sig) - return packet_error; - resume_debuggee(gdbctx, DBG_EXCEPTION_NOT_HANDLED); wait_for_debuggee(gdbctx); return packet_reply_status(gdbctx); } -#endif static enum packet_return packet_thread_alive(struct gdb_context* gdbctx) { @@ -1723,7 +1962,6 @@ static struct packet_entry packet_entries[] = { - /*{'!', packet_extended}, */ {'?', packet_last_signal}, {'c', packet_continue}, {'C', packet_continue_signal}, @@ -1737,104 +1975,99 @@ {'p', packet_read_register}, {'P', packet_write_register}, {'q', packet_query}, - /* {'Q', packet_set}, */ - /* {'R', packet,restart}, only in extended mode ! */ + {'Q', packet_set}, {'s', packet_step}, - /*{'S', packet_step_signal}, hard(er) to implement */ {'T', packet_thread_alive}, {'v', packet_verbose}, + {'z', packet_delete_breakpoint}, + {'Z', packet_insert_breakpoint}, }; static BOOL extract_packets(struct gdb_context* gdbctx) { - char* end; - int plen; - unsigned char in_cksum, loc_cksum; - char* ptr; - enum packet_return ret = packet_error; - int num_packet = 0; + char *ptr, *sum = gdbctx->in_buf, *end = gdbctx->in_buf + gdbctx->in_len; + enum packet_return ret = packet_error; + unsigned int cksum; + int i, len; + + /* ptr points to the beginning ('$') of the current packet + * sum points to the beginning ('#') of the current packet checksum ("#xx") + * len is the length of the current packet data (sum - ptr - 1) + * end points to the end of the received data buffer + */ - while ((ret & packet_last_f) == 0) + while (!gdbctx->no_ack_mode && + (ptr = memchr(sum, '$', end - sum)) && + (sum = memchr(ptr, '#', end - ptr)) && + (end - sum >= 3) && sscanf(sum, "#%02x", &cksum) == 1) + { + len = sum - ptr - 1; + sum += 3; + + if (cksum == checksum(ptr + 1, len)) + { + TRACE("Acking: %s\n", debugstr_an(ptr, sum - ptr)); + write(gdbctx->sock, "+", 1); + } + else + { + ERR("Nacking: %s (checksum: %d != %d)\n", debugstr_an(ptr, sum - ptr), + cksum, checksum(ptr + 1, len)); + write(gdbctx->sock, "-", 1); + } + } + + while ((ret & packet_last_f) == 0 && + (ptr = memchr(gdbctx->in_buf, '$', gdbctx->in_len)) && + (sum = memchr(ptr, '#', end - ptr)) && + (end - sum >= 3) && sscanf(sum, "#%02x", &cksum) == 1) { - TRACE("Packet: %s\n", debugstr_an(gdbctx->in_buf, gdbctx->in_len)); - ptr = memchr(gdbctx->in_buf, '$', gdbctx->in_len); - if (ptr == NULL) return FALSE; if (ptr != gdbctx->in_buf) + WARN("Ignoring: %s\n", debugstr_an(gdbctx->in_buf, ptr - gdbctx->in_buf)); + + len = sum - ptr - 1; + sum += 3; + + if (cksum == checksum(ptr + 1, len)) { - int glen = ptr - gdbctx->in_buf; /* garbage len */ - WARN("Removing garbage: %s\n", debugstr_an(gdbctx->in_buf, glen)); - gdbctx->in_len -= glen; - memmove(gdbctx->in_buf, ptr, gdbctx->in_len); - } - end = memchr(gdbctx->in_buf + 1, '#', gdbctx->in_len); - if (end == NULL) return FALSE; - /* no checksum yet */ - if (end + 3 > gdbctx->in_buf + gdbctx->in_len) return FALSE; - plen = end - gdbctx->in_buf - 1; - hex_from(&in_cksum, end + 1, 1); - loc_cksum = checksum(gdbctx->in_buf + 1, plen); - if (loc_cksum == in_cksum) - { - if (num_packet == 0) { - int i; - - ret = packet_error; - - write(gdbctx->sock, "+", 1); - assert(plen); - - /* FIXME: should use bsearch if packet_entries was sorted */ - for (i = 0; i < ARRAY_SIZE(packet_entries); i++) - { - if (packet_entries[i].key == gdbctx->in_buf[1]) break; - } - if (i == ARRAY_SIZE(packet_entries)) - WARN("Unhandled packet %s\n", debugstr_an(&gdbctx->in_buf[1], plen)); - else - { - gdbctx->in_packet = gdbctx->in_buf + 2; - gdbctx->in_packet_len = plen - 1; - ret = (packet_entries[i].handler)(gdbctx); - } - switch (ret & ~packet_last_f) - { - case packet_error: packet_reply(gdbctx, ""); break; - case packet_ok: packet_reply(gdbctx, "OK"); break; - case packet_done: break; - } - TRACE("Reply: %s\n", debugstr_an(gdbctx->out_buf, gdbctx->out_len)); - i = write(gdbctx->sock, gdbctx->out_buf, gdbctx->out_len); - assert(i == gdbctx->out_len); - /* if this fails, we'll have to use POLLOUT... - */ - gdbctx->out_len = 0; - num_packet++; - } - else + TRACE("Handling: %s\n", debugstr_an(ptr, sum - ptr)); + + ret = packet_error; + gdbctx->in_packet = ptr + 2; + gdbctx->in_packet_len = len - 1; + gdbctx->in_packet[gdbctx->in_packet_len] = '\0'; + + for (i = 0; i < ARRAY_SIZE(packet_entries); i++) + if (packet_entries[i].key == ptr[1]) + break; + + if (i == ARRAY_SIZE(packet_entries)) + WARN("Unhandled: %s\n", debugstr_an(ptr + 1, len)); + else if (((ret = (packet_entries[i].handler)(gdbctx)) & ~packet_last_f) == packet_error) + WARN("Failed: %s\n", debugstr_an(ptr + 1, len)); + + switch (ret & ~packet_last_f) { - /* FIXME: If we have more than one packet in our input buffer, - * it's very likely that we took too long to answer to a given packet - * and gdb is sending us the same packet again. - * So we simply drop the second packet. This will lower the risk of error, - * but there are still some race conditions here. - * A better fix (yet not perfect) would be to have two threads: - * - one managing the packets for gdb - * - the second one managing the commands... - * This would allow us to send the reply with the '+' character (Ack of - * the command) way sooner than we do now. - */ - ERR("Dropping packet; I was too slow to respond\n"); + case packet_error: packet_reply(gdbctx, ""); break; + case packet_ok: packet_reply(gdbctx, "OK"); break; + case packet_done: break; } + + TRACE("Reply: %s\n", debugstr_an(gdbctx->out_buf, gdbctx->out_len)); + i = write(gdbctx->sock, gdbctx->out_buf, gdbctx->out_len); + assert(i == gdbctx->out_len); + gdbctx->out_len = 0; } else - { - write(gdbctx->sock, "+", 1); - ERR("Dropping packet; invalid checksum %d <> %d\n", in_cksum, loc_cksum); - } - gdbctx->in_len -= plen + 4; - memmove(gdbctx->in_buf, end + 3, gdbctx->in_len); + WARN("Ignoring: %s (checksum: %d != %d)\n", debugstr_an(ptr, sum - ptr), + cksum, checksum(ptr + 1, len)); + + gdbctx->in_len = end - sum; + memmove(gdbctx->in_buf, sum, end - sum); + end = gdbctx->in_buf + gdbctx->in_len; } - return TRUE; + + return (ret & packet_last_f); } static int fetch_data(struct gdb_context* gdbctx) @@ -1848,19 +2081,21 @@ if (gdbctx->in_len + STEP > gdbctx->in_buf_alloc) gdbctx->in_buf = packet_realloc(gdbctx->in_buf, gdbctx->in_buf_alloc += STEP); #undef STEP - len = read(gdbctx->sock, gdbctx->in_buf + gdbctx->in_len, gdbctx->in_buf_alloc - gdbctx->in_len); + len = read(gdbctx->sock, gdbctx->in_buf + gdbctx->in_len, gdbctx->in_buf_alloc - gdbctx->in_len - 1); if (len <= 0) break; gdbctx->in_len += len; assert(gdbctx->in_len <= gdbctx->in_buf_alloc); if (len < gdbctx->in_buf_alloc - gdbctx->in_len) break; } + + gdbctx->in_buf[gdbctx->in_len] = '\0'; return gdbctx->in_len - in_len; } #define FLAG_NO_START 1 #define FLAG_WITH_XTERM 2 -static BOOL gdb_exec(const char* wine_path, unsigned port, unsigned flags) +static BOOL gdb_exec(unsigned port, unsigned flags) { char buf[MAX_PATH]; int fd; @@ -1874,7 +2109,6 @@ fd = mkstemps(buf, 0); if (fd == -1) return FALSE; if ((f = fdopen(fd, "w+")) == NULL) return FALSE; - fprintf(f, "file \"%s\"\n", wine_path); fprintf(f, "target remote localhost:%d\n", ntohs(port)); fprintf(f, "set prompt Wine-gdb>\\ \n"); /* gdb 5.1 seems to require it, won't hurt anyway */ @@ -1898,13 +2132,12 @@ return TRUE; } -static BOOL gdb_startup(struct gdb_context* gdbctx, DEBUG_EVENT* de, unsigned flags, unsigned port) +static BOOL gdb_startup(struct gdb_context* gdbctx, unsigned flags, unsigned port) { int sock; struct sockaddr_in s_addrs = {0}; socklen_t s_len = sizeof(s_addrs); struct pollfd pollfd; - IMAGEHLP_MODULE64 imh_mod; BOOL ret = FALSE; /* step 1: create socket for gdb connection request */ @@ -1924,13 +2157,9 @@ goto cleanup; /* step 2: do the process internal creation */ - handle_debug_event(gdbctx, de); + handle_debug_event(gdbctx); - /* step3: get the wine loader name */ - if (!dbg_get_debuggee_info(gdbctx->process->handle, &imh_mod)) - goto cleanup; - - /* step 4: fire up gdb (if requested) */ + /* step 3: fire up gdb (if requested) */ if (flags & FLAG_NO_START) fprintf(stderr, "target remote localhost:%d\n", ntohs(s_addrs.sin_port)); else @@ -1943,12 +2172,12 @@ signal(SIGINT, SIG_IGN); break; case 0: /* in child... and alive */ - gdb_exec(imh_mod.LoadedImageName, s_addrs.sin_port, flags); + gdb_exec(s_addrs.sin_port, flags); /* if we're here, exec failed, so report failure */ goto cleanup; } - /* step 5: wait for gdb to connect actually */ + /* step 4: wait for gdb to connect actually */ pollfd.fd = sock; pollfd.events = POLLIN; pollfd.revents = 0; @@ -1987,7 +2216,6 @@ static BOOL gdb_init_context(struct gdb_context* gdbctx, unsigned flags, unsigned port) { - DEBUG_EVENT de; int i; gdbctx->sock = -1; @@ -1999,31 +2227,28 @@ gdbctx->out_len = 0; gdbctx->out_curr_packet = -1; - gdbctx->exec_thread = gdbctx->other_thread = NULL; - gdbctx->last_sig = 0; - gdbctx->in_trap = FALSE; + gdbctx->exec_tid = -1; + gdbctx->other_tid = -1; + list_init(&gdbctx->xpoint_list); gdbctx->process = NULL; + gdbctx->no_ack_mode = FALSE; for (i = 0; i < ARRAY_SIZE(gdbctx->wine_segs); i++) gdbctx->wine_segs[i] = 0; /* wait for first trap */ - while (WaitForDebugEvent(&de, INFINITE)) + while (WaitForDebugEvent(&gdbctx->de, INFINITE)) { - if (de.dwDebugEventCode == CREATE_PROCESS_DEBUG_EVENT) + if (gdbctx->de.dwDebugEventCode == CREATE_PROCESS_DEBUG_EVENT) { /* this should be the first event we get, * and the only one of this type */ - assert(gdbctx->process == NULL && de.dwProcessId == dbg_curr_pid); + assert(gdbctx->process == NULL && gdbctx->de.dwProcessId == dbg_curr_pid); /* gdbctx->dwProcessId = pid; */ - if (!gdb_startup(gdbctx, &de, flags, port)) return FALSE; - assert(!gdbctx->in_trap); - } - else - { - handle_debug_event(gdbctx, &de); - if (gdbctx->in_trap) break; + if (!gdb_startup(gdbctx, flags, port)) return FALSE; } - ContinueDebugEvent(de.dwProcessId, de.dwThreadId, DBG_CONTINUE); + else if (!handle_debug_event(gdbctx)) + break; + ContinueDebugEvent(gdbctx->de.dwProcessId, gdbctx->de.dwThreadId, DBG_CONTINUE); } return TRUE; } diff -Nru wine-development-5.5/programs/winedbg/memory.c wine-development-5.6/programs/winedbg/memory.c --- wine-development-5.5/programs/winedbg/memory.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winedbg/memory.c 2020-04-10 18:54:32.000000000 +0000 @@ -268,12 +268,12 @@ BOOL memory_get_string_indirect(struct dbg_process* pcs, void* addr, BOOL unicode, WCHAR* buffer, int size) { - void* ad; + void* ad = 0; SIZE_T sz; buffer[0] = 0; if (addr && - pcs->process_io->read(pcs->handle, addr, &ad, sizeof(ad), &sz) && sz == sizeof(ad) && ad) + pcs->process_io->read(pcs->handle, addr, &ad, pcs->be_cpu->pointer_size, &sz) && sz == pcs->be_cpu->pointer_size && ad) { LPSTR buff; BOOL ret; diff -Nru wine-development-5.5/programs/winedbg/winedbg.c wine-development-5.6/programs/winedbg/winedbg.c --- wine-development-5.5/programs/winedbg/winedbg.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winedbg/winedbg.c 2020-04-10 18:54:32.000000000 +0000 @@ -500,6 +500,7 @@ t->num_frames = 0; t->curr_frame = -1; t->addr_mode = AddrModeFlat; + t->suspended = FALSE; snprintf(t->name, sizeof(t->name), "%04x", tid); diff -Nru wine-development-5.5/programs/winepath/Makefile.in wine-development-5.6/programs/winepath/Makefile.in --- wine-development-5.5/programs/winepath/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winepath/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,6 @@ MODULE = winepath.exe -APPMODE = -mconsole -municode + +EXTRADLLFLAGS = -mconsole -municode -mno-cygwin C_SRCS = winepath.c diff -Nru wine-development-5.5/programs/winepath/winepath.c wine-development-5.6/programs/winepath/winepath.c --- wine-development-5.5/programs/winepath/winepath.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winepath/winepath.c 2020-04-10 18:54:32.000000000 +0000 @@ -21,9 +21,6 @@ */ #define WIN32_LEAN_AND_MEAN - -#include "config.h" - #include #include #include @@ -56,7 +53,6 @@ " directory to the short format\n" " -0 separate output with \\0 character, instead of a newline\n" " -h, --help output this help message and exit\n" - " -v, --version output version information and exit\n" "\n" "If more than one option is given then the input paths are output in\n" "all formats specified, in the order long, short, Unix, Windows.\n" @@ -67,9 +63,6 @@ printf("Usage: %s [OPTION] [PATH]...\n", progname); printf(helpmsg); exit(0); - case 'v': - printf("%s version " PACKAGE_VERSION "\n", progname); - exit(0); case 'l': return LONGFORMAT; case 's': @@ -96,14 +89,7 @@ */ static int parse_options(WCHAR *argv[]) { - static const WCHAR longW[] = { 'l','o','n','g',0 }; - static const WCHAR shortW[] = { 's','h','o','r','t',0 }; - static const WCHAR unixW[] = { 'u','n','i','x',0 }; - static const WCHAR windowsW[] = { 'w','i','n','d','o','w','s',0 }; - static const WCHAR helpW[] = { 'h','e','l','p',0 }; - static const WCHAR versionW[] = { 'v','e','r','s','i','o','n',0 }; - static const WCHAR nullW[] = { 0 }; - static const WCHAR *longopts[] = { longW, shortW, unixW, windowsW, helpW, versionW, nullW }; + static const WCHAR *longopts[] = { L"long", L"short", L"unix", L"windows", L"help", NULL }; int outputformats = 0; BOOL done = FALSE; int i, j; @@ -122,10 +108,10 @@ done = TRUE; } else { /* long option */ - for (j = 0; longopts[j][0]; j++) + for (j = 0; longopts[j]; j++) if (!lstrcmpiW(argv[i]+2, longopts[j])) break; - outputformats |= option(longopts[j][0], argv[i]); + if (longopts[j]) outputformats |= option(longopts[j][0], argv[i]); } } else { /* short options */ diff -Nru wine-development-5.5/programs/winepath/winepath.man.in wine-development-5.6/programs/winepath/winepath.man.in --- wine-development-5.5/programs/winepath/winepath.man.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winepath/winepath.man.in 2020-04-10 18:54:32.000000000 +0000 @@ -27,8 +27,6 @@ separate output with \\0 character, instead of a newline. .IP \fB\-h\fR,\fB\ \-\-help shows winepath help message and exit. -.IP \fB\-v\fR,\fB\ \-\-version -shows version information and exit. .SH BUGS Bugs can be reported on the .UR https://bugs.winehq.org diff -Nru wine-development-5.5/programs/winhelp.exe16/Makefile.in wine-development-5.6/programs/winhelp.exe16/Makefile.in --- wine-development-5.5/programs/winhelp.exe16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winhelp.exe16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = winhelp.exe16 -EXTRADLLFLAGS = -mconsole -m16 -mno-cygwin +EXTRADLLFLAGS = -mconsole -m16 C_SRCS = winhelp.c diff -Nru wine-development-5.5/programs/winoldap.mod16/Makefile.in wine-development-5.6/programs/winoldap.mod16/Makefile.in --- wine-development-5.5/programs/winoldap.mod16/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winoldap.mod16/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,5 +1,5 @@ MODULE = winoldap.mod16 -EXTRADLLFLAGS = -mconsole -m16 -mno-cygwin +EXTRADLLFLAGS = -mconsole -m16 C_SRCS = winoldap.c diff -Nru wine-development-5.5/programs/winver/Makefile.in wine-development-5.6/programs/winver/Makefile.in --- wine-development-5.5/programs/winver/Makefile.in 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winver/Makefile.in 2020-04-10 18:54:32.000000000 +0000 @@ -1,7 +1,8 @@ MODULE = winver.exe -APPMODE = -mwindows IMPORTS = shell32 +EXTRADLLFLAGS = -mwindows -mno-cygwin + C_SRCS = winver.c RC_SRCS = version.rc diff -Nru wine-development-5.5/programs/winver/winver.c wine-development-5.6/programs/winver/winver.c --- wine-development-5.5/programs/winver/winver.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/programs/winver/winver.c 2020-04-10 18:54:32.000000000 +0000 @@ -18,11 +18,15 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" #include "windows.h" #include "shellapi.h" int PASCAL WinMain (HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) { - return !ShellAboutA(NULL, PACKAGE_NAME, PACKAGE_STRING, 0); + char name[128] = "Wine "; + const char * (CDECL *wine_get_version)(void); + + wine_get_version = (void *)GetProcAddress( GetModuleHandleA("ntdll.dll"), "wine_get_version" ); + if (wine_get_version) strcat( name, wine_get_version() ); + return !ShellAboutA( NULL, name, NULL, 0 ); } diff -Nru wine-development-5.5/server/fd.c wine-development-5.6/server/fd.c --- wine-development-5.5/server/fd.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/server/fd.c 2020-04-10 18:54:32.000000000 +0000 @@ -364,20 +364,23 @@ struct timeout_user { struct list entry; /* entry in sorted timeout list */ - timeout_t when; /* timeout expiry (absolute time) */ + abstime_t when; /* timeout expiry */ timeout_callback callback; /* callback function */ void *private; /* callback private data */ }; -static struct list timeout_list = LIST_INIT(timeout_list); /* sorted timeouts list */ +static struct list abs_timeout_list = LIST_INIT(abs_timeout_list); /* sorted absolute timeouts list */ +static struct list rel_timeout_list = LIST_INIT(rel_timeout_list); /* sorted relative timeouts list */ timeout_t current_time; +timeout_t monotonic_time; -static inline void set_current_time(void) +void set_current_time(void) { static const timeout_t ticks_1601_to_1970 = (timeout_t)86400 * (369 * 365 + 89) * TICKS_PER_SEC; struct timeval now; gettimeofday( &now, NULL ); current_time = (timeout_t)now.tv_sec * TICKS_PER_SEC + now.tv_usec * 10 + ticks_1601_to_1970; + monotonic_time = monotonic_counter(); } /* add a timeout user */ @@ -387,16 +390,27 @@ struct list *ptr; if (!(user = mem_alloc( sizeof(*user) ))) return NULL; - user->when = (when > 0) ? when : current_time - when; + user->when = timeout_to_abstime( when ); user->callback = func; user->private = private; /* Now insert it in the linked list */ - LIST_FOR_EACH( ptr, &timeout_list ) + if (user->when > 0) { - struct timeout_user *timeout = LIST_ENTRY( ptr, struct timeout_user, entry ); - if (timeout->when >= user->when) break; + LIST_FOR_EACH( ptr, &abs_timeout_list ) + { + struct timeout_user *timeout = LIST_ENTRY( ptr, struct timeout_user, entry ); + if (timeout->when >= user->when) break; + } + } + else + { + LIST_FOR_EACH( ptr, &rel_timeout_list ) + { + struct timeout_user *timeout = LIST_ENTRY( ptr, struct timeout_user, entry ); + if (timeout->when <= user->when) break; + } } list_add_before( ptr, &user->entry ); return user; @@ -851,14 +865,15 @@ /* process pending timeouts and return the time until the next timeout, in milliseconds */ static int get_next_timeout(void) { - if (!list_empty( &timeout_list )) + if (!list_empty( &abs_timeout_list ) || !list_empty( &rel_timeout_list )) { struct list expired_list, *ptr; + int ret = -1; /* first remove all expired timers from the list */ list_init( &expired_list ); - while ((ptr = list_head( &timeout_list )) != NULL) + while ((ptr = list_head( &abs_timeout_list )) != NULL) { struct timeout_user *timeout = LIST_ENTRY( ptr, struct timeout_user, entry ); @@ -869,6 +884,17 @@ } else break; } + while ((ptr = list_head( &rel_timeout_list )) != NULL) + { + struct timeout_user *timeout = LIST_ENTRY( ptr, struct timeout_user, entry ); + + if (-timeout->when <= monotonic_time) + { + list_remove( &timeout->entry ); + list_add_tail( &expired_list, &timeout->entry ); + } + else break; + } /* now call the callback for all the removed timers */ @@ -880,13 +906,22 @@ free( timeout ); } - if ((ptr = list_head( &timeout_list )) != NULL) + if ((ptr = list_head( &abs_timeout_list )) != NULL) { struct timeout_user *timeout = LIST_ENTRY( ptr, struct timeout_user, entry ); int diff = (timeout->when - current_time + 9999) / 10000; if (diff < 0) diff = 0; - return diff; + ret = diff; + } + + if ((ptr = list_head( &rel_timeout_list )) != NULL) + { + struct timeout_user *timeout = LIST_ENTRY( ptr, struct timeout_user, entry ); + int diff = (-timeout->when - monotonic_time + 9999) / 10000; + if (diff < 0) diff = 0; + if (ret == -1 || diff < ret) ret = diff; } + return ret; } return -1; /* no pending timeouts */ } @@ -2438,7 +2473,7 @@ if (is_file_executable( fd->unix_name ) != is_file_executable( name ) && !fstat( fd->unix_fd, &st )) { - if (is_file_executable( fd->unix_name )) + if (is_file_executable( name )) /* set executable bit where read bit is set */ st.st_mode |= (st.st_mode & 0444) >> 2; else diff -Nru wine-development-5.5/server/file.h wine-development-5.6/server/file.h --- wine-development-5.5/server/file.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/server/file.h 2020-04-10 18:54:32.000000000 +0000 @@ -129,11 +129,24 @@ struct timeout_user; extern timeout_t current_time; +extern timeout_t monotonic_time; #define TICKS_PER_SEC 10000000 typedef void (*timeout_callback)( void *private ); +static inline abstime_t timeout_to_abstime( timeout_t timeout ) +{ + return timeout > 0 ? timeout : timeout - monotonic_time; +} + +static inline timeout_t abstime_to_timeout( abstime_t abstime ) +{ + if (abstime > 0) return abstime; + return -abstime < monotonic_time ? 0 : abstime + monotonic_time; +} + +extern void set_current_time( void ); extern struct timeout_user *add_timeout_user( timeout_t when, timeout_callback func, void *private ); extern void remove_timeout_user( struct timeout_user *user ); extern const char *get_timeout_str( timeout_t timeout ); diff -Nru wine-development-5.5/server/main.c wine-development-5.6/server/main.c --- wine-development-5.5/server/main.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/server/main.c 2020-04-10 18:54:32.000000000 +0000 @@ -141,6 +141,7 @@ open_master_socket(); if (debug_level) fprintf( stderr, "wineserver: starting (pid=%ld)\n", (long) getpid() ); + set_current_time(); init_signals(); init_directories(); init_registry(); diff -Nru wine-development-5.5/server/protocol.def wine-development-5.6/server/protocol.def --- wine-development-5.5/server/protocol.def 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/server/protocol.def 2020-04-10 18:54:32.000000000 +0000 @@ -214,6 +214,9 @@ typedef __int64 timeout_t; #define TIMEOUT_INFINITE (((timeout_t)0x7fffffff) << 32 | 0xffffffff) +/* absolute timeout, negative means that monotonic clock is used */ +typedef __int64 abstime_t; + /* structure for process startup info */ typedef struct { @@ -484,7 +487,7 @@ enum apc_type type; /* APC_TIMER */ int __pad; client_ptr_t func; /* void (__stdcall *func)(void*, unsigned int, unsigned int); */ - timeout_t time; /* absolute time of expiration */ + abstime_t time; /* time of expiration */ client_ptr_t arg; /* user argument */ } timer; struct @@ -1096,12 +1099,11 @@ @REQ(select) int flags; /* wait flags (see below) */ client_ptr_t cookie; /* magic cookie to return to client */ - timeout_t timeout; /* timeout */ + abstime_t timeout; /* timeout */ obj_handle_t prev_apc; /* handle to previous APC */ VARARG(result,apc_result); /* result of previous APC */ VARARG(data,select_op); /* operation-specific data */ @REPLY - timeout_t timeout; /* timeout converted to absolute */ apc_call_t call; /* APC call arguments */ obj_handle_t apc_handle; /* handle to next APC */ @END diff -Nru wine-development-5.5/server/queue.c wine-development-5.6/server/queue.c --- wine-development-5.5/server/queue.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/server/queue.c 2020-04-10 18:54:32.000000000 +0000 @@ -89,7 +89,7 @@ struct timer { struct list entry; /* entry in timer list */ - timeout_t when; /* next expiration */ + abstime_t when; /* next expiration */ unsigned int rate; /* timer rate in ms */ user_handle_t win; /* window handle */ unsigned int msg; /* message to post */ @@ -1154,7 +1154,7 @@ if ((ptr = list_head( &queue->pending_timers ))) { struct timer *timer = LIST_ENTRY( ptr, struct timer, entry ); - queue->timeout = add_timeout_user( timer->when, timer_callback, queue ); + queue->timeout = add_timeout_user( abstime_to_timeout(timer->when), timer_callback, queue ); } /* set/clear QS_TIMER bit */ if (list_empty( &queue->expired_timers )) @@ -1206,7 +1206,7 @@ for (ptr = queue->pending_timers.next; ptr != &queue->pending_timers; ptr = ptr->next) { struct timer *t = LIST_ENTRY( ptr, struct timer, entry ); - if (t->when >= timer->when) break; + if (t->when <= timer->when) break; } list_add_before( ptr, &timer->entry ); } @@ -1223,7 +1223,7 @@ static void restart_timer( struct msg_queue *queue, struct timer *timer ) { list_remove( &timer->entry ); - while (timer->when <= current_time) timer->when += (timeout_t)timer->rate * 10000; + while (-timer->when <= monotonic_time) timer->when -= (timeout_t)timer->rate * 10000; link_timer( queue, timer ); set_next_timer( queue ); } @@ -1255,7 +1255,7 @@ if (timer) { timer->rate = max( rate, 1 ); - timer->when = current_time + (timeout_t)timer->rate * 10000; + timer->when = -monotonic_time - (timeout_t)timer->rate * 10000; link_timer( queue, timer ); /* check if we replaced the next timer */ if (list_head( &queue->pending_timers ) == &timer->entry) set_next_timer( queue ); diff -Nru wine-development-5.5/server/request.c wine-development-5.6/server/request.c --- wine-development-5.5/server/request.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/server/request.c 2020-04-10 18:54:32.000000000 +0000 @@ -522,8 +522,8 @@ return -1; } -/* get current tick count to return to client */ -unsigned int get_tick_count(void) +/* return a monotonic time counter */ +timeout_t monotonic_counter(void) { #ifdef __APPLE__ static mach_timebase_info_data_t timebase; @@ -531,19 +531,19 @@ if (!timebase.denom) mach_timebase_info( &timebase ); #ifdef HAVE_MACH_CONTINUOUS_TIME if (&mach_continuous_time != NULL) - return mach_continuous_time() * timebase.numer / timebase.denom / 1000000; + return mach_continuous_time() * timebase.numer / timebase.denom / 100; #endif - return mach_absolute_time() * timebase.numer / timebase.denom / 1000000; + return mach_absolute_time() * timebase.numer / timebase.denom / 100; #elif defined(HAVE_CLOCK_GETTIME) struct timespec ts; #ifdef CLOCK_MONOTONIC_RAW if (!clock_gettime( CLOCK_MONOTONIC_RAW, &ts )) - return ts.tv_sec * 1000 + ts.tv_nsec / 1000000; + return (timeout_t)ts.tv_sec * TICKS_PER_SEC + ts.tv_nsec / 100; #endif if (!clock_gettime( CLOCK_MONOTONIC, &ts )) - return ts.tv_sec * 1000 + ts.tv_nsec / 1000000; + return (timeout_t)ts.tv_sec * TICKS_PER_SEC + ts.tv_nsec / 100; #endif - return (current_time - server_start_time) / 10000; + return current_time - server_start_time; } static void master_socket_dump( struct object *obj, int verbose ) diff -Nru wine-development-5.5/server/request.h wine-development-5.6/server/request.h --- wine-development-5.5/server/request.h 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/server/request.h 2020-04-10 18:54:32.000000000 +0000 @@ -54,7 +54,7 @@ extern int send_client_fd( struct process *process, int fd, obj_handle_t handle ); extern void read_request( struct thread *thread ); extern void write_reply( struct thread *thread ); -extern unsigned int get_tick_count(void); +extern timeout_t monotonic_counter(void); extern void open_master_socket(void); extern void close_master_socket( timeout_t timeout ); extern void shutdown_master_socket(void); @@ -66,6 +66,12 @@ extern void trace_request(void); extern void trace_reply( enum request req, const union generic_reply *reply ); +/* get current tick count to return to client */ +static inline unsigned int get_tick_count(void) +{ + return monotonic_counter() / 10000; +} + /* get the request vararg data */ static inline const void *get_req_data(void) { @@ -715,6 +721,7 @@ (req_handler)req_resume_process, }; +C_ASSERT( sizeof(abstime_t) == 8 ); C_ASSERT( sizeof(affinity_t) == 8 ); C_ASSERT( sizeof(apc_call_t) == 40 ); C_ASSERT( sizeof(apc_param_t) == 8 ); @@ -933,10 +940,9 @@ C_ASSERT( FIELD_OFFSET(struct select_request, timeout) == 24 ); C_ASSERT( FIELD_OFFSET(struct select_request, prev_apc) == 32 ); C_ASSERT( sizeof(struct select_request) == 40 ); -C_ASSERT( FIELD_OFFSET(struct select_reply, timeout) == 8 ); -C_ASSERT( FIELD_OFFSET(struct select_reply, call) == 16 ); -C_ASSERT( FIELD_OFFSET(struct select_reply, apc_handle) == 56 ); -C_ASSERT( sizeof(struct select_reply) == 64 ); +C_ASSERT( FIELD_OFFSET(struct select_reply, call) == 8 ); +C_ASSERT( FIELD_OFFSET(struct select_reply, apc_handle) == 48 ); +C_ASSERT( sizeof(struct select_reply) == 56 ); C_ASSERT( FIELD_OFFSET(struct create_event_request, access) == 12 ); C_ASSERT( FIELD_OFFSET(struct create_event_request, manual_reset) == 16 ); C_ASSERT( FIELD_OFFSET(struct create_event_request, initial_state) == 20 ); diff -Nru wine-development-5.5/server/thread.c wine-development-5.6/server/thread.c --- wine-development-5.5/server/thread.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/server/thread.c 2020-04-10 18:54:32.000000000 +0000 @@ -79,7 +79,7 @@ enum select_op select; client_ptr_t key; /* wait key for keyed events */ client_ptr_t cookie; /* magic cookie to return to client */ - timeout_t timeout; + abstime_t when; struct timeout_user *user; struct wait_queue_entry queues[1]; }; @@ -687,7 +687,7 @@ /* build the thread wait structure */ static int wait_on( const select_op_t *select_op, unsigned int count, struct object *objects[], - int flags, timeout_t timeout ) + int flags, abstime_t when ) { struct thread_wait *wait; struct wait_queue_entry *entry; @@ -701,7 +701,7 @@ wait->select = select_op->op; wait->cookie = 0; wait->user = NULL; - wait->timeout = timeout; + wait->when = when; wait->abandoned = 0; current->wait = wait; @@ -720,7 +720,7 @@ } static int wait_on_handles( const select_op_t *select_op, unsigned int count, const obj_handle_t *handles, - int flags, timeout_t timeout ) + int flags, abstime_t when ) { struct object *objects[MAXIMUM_WAIT_OBJECTS]; unsigned int i; @@ -732,7 +732,7 @@ if (!(objects[i] = get_handle_obj( current->process, handles[i], SYNCHRONIZE, NULL ))) break; - if (i == count) ret = wait_on( select_op, count, objects, flags, timeout ); + if (i == count) ret = wait_on( select_op, count, objects, flags, when ); while (i > 0) release_object( objects[--i] ); return ret; @@ -769,7 +769,8 @@ } if ((wait->flags & SELECT_ALERTABLE) && !list_empty(&thread->user_apc)) return STATUS_USER_APC; - if (wait->timeout <= current_time) return STATUS_TIMEOUT; + if (wait->when >= 0 && wait->when <= current_time) return STATUS_TIMEOUT; + if (wait->when < 0 && -wait->when <= monotonic_time) return STATUS_TIMEOUT; return -1; } @@ -875,19 +876,17 @@ } /* select on a list of handles */ -static timeout_t select_on( const select_op_t *select_op, data_size_t op_size, client_ptr_t cookie, - int flags, timeout_t timeout ) +static void select_on( const select_op_t *select_op, data_size_t op_size, client_ptr_t cookie, + int flags, abstime_t when ) { int ret; unsigned int count; struct object *object; - if (timeout <= 0) timeout = current_time - timeout; - switch (select_op->op) { case SELECT_NONE: - if (!wait_on( select_op, 0, NULL, flags, timeout )) return timeout; + if (!wait_on( select_op, 0, NULL, flags, when )) return; break; case SELECT_WAIT: @@ -896,24 +895,24 @@ if (op_size < offsetof( select_op_t, wait.handles ) || count > MAXIMUM_WAIT_OBJECTS) { set_error( STATUS_INVALID_PARAMETER ); - return 0; + return; } - if (!wait_on_handles( select_op, count, select_op->wait.handles, flags, timeout )) - return timeout; + if (!wait_on_handles( select_op, count, select_op->wait.handles, flags, when )) + return; break; case SELECT_SIGNAL_AND_WAIT: - if (!wait_on_handles( select_op, 1, &select_op->signal_and_wait.wait, flags, timeout )) - return timeout; + if (!wait_on_handles( select_op, 1, &select_op->signal_and_wait.wait, flags, when )) + return; if (select_op->signal_and_wait.signal) { if (!signal_object( select_op->signal_and_wait.signal )) { end_wait( current, get_error() ); - return timeout; + return; } /* check if we woke ourselves up */ - if (!current->wait) return timeout; + if (!current->wait) return; } break; @@ -921,38 +920,38 @@ case SELECT_KEYED_EVENT_RELEASE: object = (struct object *)get_keyed_event_obj( current->process, select_op->keyed_event.handle, select_op->op == SELECT_KEYED_EVENT_WAIT ? KEYEDEVENT_WAIT : KEYEDEVENT_WAKE ); - if (!object) return timeout; - ret = wait_on( select_op, 1, &object, flags, timeout ); + if (!object) return; + ret = wait_on( select_op, 1, &object, flags, when ); release_object( object ); - if (!ret) return timeout; + if (!ret) return; current->wait->key = select_op->keyed_event.key; break; default: set_error( STATUS_INVALID_PARAMETER ); - return 0; + return; } if ((ret = check_wait( current )) != -1) { /* condition is already satisfied */ set_error( end_wait( current, ret )); - return timeout; + return; } /* now we need to wait */ - if (current->wait->timeout != TIMEOUT_INFINITE) + if (current->wait->when != TIMEOUT_INFINITE) { - if (!(current->wait->user = add_timeout_user( current->wait->timeout, + if (!(current->wait->user = add_timeout_user( abstime_to_timeout(current->wait->when), thread_timeout, current->wait ))) { end_wait( current, get_error() ); - return timeout; + return; } } current->wait->cookie = cookie; set_error( STATUS_PENDING ); - return timeout; + return; } /* attempt to wake threads sleeping on the object wait queue */ @@ -1577,7 +1576,7 @@ release_object( apc ); } - reply->timeout = select_on( &select_op, op_size, req->cookie, req->flags, req->timeout ); + select_on( &select_op, op_size, req->cookie, req->flags, req->timeout ); while (get_error() == STATUS_USER_APC) { diff -Nru wine-development-5.5/server/timer.c wine-development-5.6/server/timer.c --- wine-development-5.5/server/timer.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/server/timer.c 2020-04-10 18:54:32.000000000 +0000 @@ -43,7 +43,7 @@ int manual; /* manual reset */ int signaled; /* current signaled state */ unsigned int period; /* timer period in ms */ - timeout_t when; /* next expiration */ + abstime_t when; /* next expiration */ struct timeout_user *timeout; /* timeout user */ struct thread *thread; /* thread that set the APC function */ client_ptr_t callback; /* callback APC function */ @@ -132,8 +132,9 @@ if (timer->period) /* schedule the next expiration */ { - timer->when += (timeout_t)timer->period * 10000; - timer->timeout = add_timeout_user( timer->when, timer_callback, timer ); + if (timer->when > 0) timer->when = -monotonic_time; + timer->when -= (abstime_t)timer->period * 10000; + timer->timeout = add_timeout_user( abstime_to_timeout(timer->when), timer_callback, timer ); } else timer->timeout = NULL; @@ -171,21 +172,22 @@ period = 0; /* period doesn't make any sense for a manual timer */ timer->signaled = 0; } - timer->when = (expire <= 0) ? current_time - expire : max( expire, current_time ); + timer->when = (expire <= 0) ? expire - monotonic_time : max( expire, current_time ); timer->period = period; timer->callback = callback; timer->arg = arg; if (callback) timer->thread = (struct thread *)grab_object( current ); - timer->timeout = add_timeout_user( timer->when, timer_callback, timer ); + timer->timeout = add_timeout_user( expire, timer_callback, timer ); return signaled; } static void timer_dump( struct object *obj, int verbose ) { struct timer *timer = (struct timer *)obj; + timeout_t timeout = abstime_to_timeout( timer->when ); assert( obj->ops == &timer_ops ); fprintf( stderr, "Timer manual=%d when=%s period=%u\n", - timer->manual, get_timeout_str(timer->when), timer->period ); + timer->manual, get_timeout_str(timeout), timer->period ); } static struct object_type *timer_get_type( struct object *obj ) diff -Nru wine-development-5.5/server/trace.c wine-development-5.6/server/trace.c --- wine-development-5.5/server/trace.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/server/trace.c 2020-04-10 18:54:32.000000000 +0000 @@ -88,6 +88,12 @@ fprintf( stderr, "%s%s", prefix, get_timeout_str(*time) ); } +static void dump_abstime( const char *prefix, const abstime_t *when ) +{ + timeout_t timeout = abstime_to_timeout( *when ); + dump_timeout( prefix, &timeout ); +} + static void dump_uint64( const char *prefix, const unsigned __int64 *val ) { if ((unsigned int)*val != *val) @@ -1581,7 +1587,7 @@ { fprintf( stderr, " flags=%d", req->flags ); dump_uint64( ", cookie=", &req->cookie ); - dump_timeout( ", timeout=", &req->timeout ); + dump_abstime( ", timeout=", &req->timeout ); fprintf( stderr, ", prev_apc=%04x", req->prev_apc ); dump_varargs_apc_result( ", result=", cur_size ); dump_varargs_select_op( ", data=", cur_size ); @@ -1589,8 +1595,7 @@ static void dump_select_reply( const struct select_reply *req ) { - dump_timeout( " timeout=", &req->timeout ); - dump_apc_call( ", call=", &req->call ); + dump_apc_call( " call=", &req->call ); fprintf( stderr, ", apc_handle=%04x", req->apc_handle ); } diff -Nru wine-development-5.5/tools/makedep.c wine-development-5.6/tools/makedep.c --- wine-development-5.5/tools/makedep.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/tools/makedep.c 2020-04-10 18:54:32.000000000 +0000 @@ -2148,9 +2148,12 @@ struct strarray all_libs = empty_strarray; unsigned int i, j; - if (!make->use_msvcrt) strarray_add( &all_libs, "-lwine_port" ); - strarray_addall( &all_libs, get_expanded_make_var_array( make, "EXTRALIBS" )); - strarray_addall( &all_libs, libs ); + if (!make->use_msvcrt) + { + strarray_add( &all_libs, "-lwine_port" ); + strarray_addall( &all_libs, get_expanded_make_var_array( make, "EXTRALIBS" )); + strarray_addall( &all_libs, libs ); + } for (i = 0; i < all_libs.count; i++) { @@ -2236,7 +2239,6 @@ struct strarray ret = empty_strarray; if (strarray_exists( &make->extradllflags, "-nodefaultlibs" )) return ret; - if (make->use_msvcrt) strarray_add( &ret, "msvcrt" ); strarray_add( &ret, "winecrt0" ); if (make->is_win16) strarray_add( &ret, "kernel" ); strarray_add( &ret, "kernel32" ); @@ -3000,7 +3002,6 @@ if (!dll_flags.count) dll_flags = make->extradllflags; all_libs = add_import_libs( make, &dep_libs, imports, 0 ); add_import_libs( make, &dep_libs, get_default_imports( make ), 0 ); /* dependencies only */ - strarray_addall( &all_libs, libs ); dll_name = strmake( "%s.dll%s", obj, make->is_cross ? "" : dll_ext ); obj_name = strmake( "%s%s", obj_dir_path( make, obj ), make->is_cross ? ".cross.o" : ".o" ); @@ -3447,7 +3448,6 @@ const char *parent_ext = parent && parent->is_cross ? "" : dll_ext; add_import_libs( make, &dep_libs, get_default_imports( make ), 0 ); /* dependencies only */ - strarray_addall( &all_libs, libs ); strarray_add( &make->all_targets, strmake( "%s%s", testmodule, ext )); strarray_add( &make->clean_files, strmake( "%s%s", stripped, ext )); output( "%s%s:\n", obj_dir_path( make, testmodule ), ext ); @@ -3518,7 +3518,8 @@ struct strarray symlinks = get_expanded_file_local_var( make, make->programs.str[i], "SYMLINKS" ); if (!objs.count) objs = make->object_files; - strarray_addall( &all_libs, add_default_libraries( make, &deps )); + if (!strarray_exists( &all_libs, "-nodefaultlibs" )) + strarray_addall( &all_libs, add_default_libraries( make, &deps )); output( "%s:", obj_dir_path( make, program ) ); output_filenames_obj_dir( make, objs ); @@ -4204,12 +4205,12 @@ if (make->module && strendswith( make->module, ".a" )) make->staticlib = make->module; - if ((make->module && make->staticlib) || make->testdll) - strarray_add( &make->extradllflags, "-mno-cygwin" ); + make->is_win16 = strarray_exists( &make->extradllflags, "-m16" ); + if ((make->module && make->staticlib) || make->testdll || make->is_win16) + strarray_add_uniq( &make->extradllflags, "-mno-cygwin" ); strarray_addall( &make->extradllflags, get_expanded_make_var_array( make, "APPMODE" )); make->disabled = make->base_dir && strarray_exists( &disabled_dirs, make->base_dir ); - make->is_win16 = strarray_exists( &make->extradllflags, "-m16" ); make->use_msvcrt = strarray_exists( &make->extradllflags, "-mno-cygwin" ); make->is_exe = strarray_exists( &make->extradllflags, "-mconsole" ) || strarray_exists( &make->extradllflags, "-mwindows" ); @@ -4270,12 +4271,8 @@ } if (!crt_dll && !strarray_exists( &make->extradllflags, "-nodefaultlibs" )) { - if (make->use_msvcrt && !make->testdll && !make->staticlib) - { - strarray_add( &make->imports, "ucrtbase" ); - crt_dll = "ucrtbase"; - } - else crt_dll = "msvcrt"; + crt_dll = !make->testdll && !make->staticlib ? "ucrtbase" : "msvcrt"; + strarray_add( &make->imports, crt_dll ); } if (crt_dll && !strncmp( crt_dll, "ucrt", 4 )) strarray_add( &make->define_args, "-D_UCRT" ); } @@ -4289,7 +4286,6 @@ { for (i = 0; i < make->imports.count; i++) strarray_add_uniq( &cross_import_libs, make->imports.str[i] ); - if (crt_dll) strarray_add_uniq( &cross_import_libs, crt_dll ); if (make->is_win16) strarray_add_uniq( &cross_import_libs, "kernel" ); strarray_add_uniq( &cross_import_libs, "winecrt0" ); strarray_add_uniq( &cross_import_libs, "kernel32" ); diff -Nru wine-development-5.5/tools/make_requests wine-development-5.6/tools/make_requests --- wine-development-5.5/tools/make_requests 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/tools/make_requests 2020-04-10 18:54:32.000000000 +0000 @@ -43,6 +43,7 @@ "mem_size_t" => [ 8, 8, "&dump_uint64" ], "affinity_t" => [ 8, 8, "&dump_uint64" ], "timeout_t" => [ 8, 8, "&dump_timeout" ], + "abstime_t" => [ 8, 8, "&dump_abstime" ], "rectangle_t" => [ 16, 4, "&dump_rectangle" ], "char_info_t" => [ 4, 2, "&dump_char_info" ], "apc_call_t" => [ 40, 8, "&dump_apc_call" ], diff -Nru wine-development-5.5/tools/widl/server.c wine-development-5.6/tools/widl/server.c --- wine-development-5.5/tools/widl/server.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/tools/widl/server.c 2020-04-10 18:54:32.000000000 +0000 @@ -307,7 +307,7 @@ { var_t *func = stmt->u.var; if (is_local( func->attrs )) continue; - print_server( "(SERVER_ROUTINE)%s%s,\n", prefix_server, get_name(func)); + print_server( "(void *)%s%s,\n", prefix_server, get_name(func)); } indent--; print_server( "};\n\n" ); diff -Nru wine-development-5.5/tools/winebuild/relay.c wine-development-5.6/tools/winebuild/relay.c --- wine-development-5.5/tools/winebuild/relay.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/tools/winebuild/relay.c 2020-04-10 18:54:32.000000000 +0000 @@ -379,9 +379,10 @@ static void BuildCallTo16Core( int reg_func ) { const char *name = reg_func ? "wine_call_to_16_regs" : "wine_call_to_16"; + const char *func_name = (target_platform == PLATFORM_WINDOWS ? strmake( "%s@12", name ) : name); /* Function header */ - function_header( name ); + function_header( func_name ); /* Function entry sequence */ output_cfi( ".cfi_startproc" ); @@ -523,7 +524,7 @@ output( "\tlret\n" ); /* Function footer */ - output_function_size( name ); + output_function_size( func_name ); } diff -Nru wine-development-5.5/tools/winebuild/spec16.c wine-development-5.6/tools/winebuild/spec16.c --- wine-development-5.5/tools/winebuild/spec16.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/tools/winebuild/spec16.c 2020-04-10 18:54:32.000000000 +0000 @@ -825,7 +825,7 @@ output_stubs( spec16 ); output_exports( spec32 ); output_imports( spec16 ); - if (is_undefined( "__wine_call_from_16" )) output_asm_relays16(); + if (!strcmp( spec16->dll_name, "kernel" )) output_asm_relays16(); if (needs_get_pc_thunk) output_get_pc_thunk(); if (spec16->main_module) { diff -Nru wine-development-5.5/tools/winedump/search.c wine-development-5.6/tools/winedump/search.c --- wine-development-5.5/tools/winedump/search.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/tools/winedump/search.c 2020-04-10 18:54:32.000000000 +0000 @@ -337,18 +337,3 @@ } return proto_str; } - - -#ifdef __GNUC__ -/******************************************************************* - * search_cleanup - * - * Free memory used while searching (a niceity) - */ -void search_cleanup (void) __attribute__ ((destructor)); -void search_cleanup (void) -{ - free (grep_buff); - free (fgrep_buff); -} -#endif diff -Nru wine-development-5.5/tools/winegcc/utils.c wine-development-5.6/tools/winegcc/utils.c --- wine-development-5.5/tools/winegcc/utils.c 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/tools/winegcc/utils.c 2020-04-10 18:54:32.000000000 +0000 @@ -365,7 +365,11 @@ if (verbose) { - for(i = 0; argv[i]; i++) printf("%s ", argv[i]); + for(i = 0; argv[i]; i++) + { + if (strpbrk(argv[i], " \t\n\r")) printf("\"%s\" ", argv[i]); + else printf("%s ", argv[i]); + } printf("\n"); } diff -Nru wine-development-5.5/VERSION wine-development-5.6/VERSION --- wine-development-5.5/VERSION 2020-03-27 21:12:54.000000000 +0000 +++ wine-development-5.6/VERSION 2020-04-10 18:54:32.000000000 +0000 @@ -1 +1 @@ -Wine version 5.5 +Wine version 5.6