This is release 1.0-rc1 of Wine, a free implementation of Windows on Unix.

This is the first release candidate for Wine 1.0. Please give it a
good testing to help us make 1.0 as good as possible. In particular
please help us look for apps that used to work, but don't now. See
http://wiki.winehq.org/PlatinumRegressionHunt for details.

What's new in this release (see below for details):
  - Bug fixes only, we are in code freeze.

Because of lags created by using mirrors, this message may reach you
before the release is available at the public sites. The sources will
be available from the following locations:

  http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.0-rc1.tar.bz2
  http://prdownloads.sourceforge.net/wine/wine-1.0-rc1.tar.bz2

Binary packages for various distributions will be available from:

  http://www.winehq.org/site/download

You will find documentation on

  http://www.winehq.org/site/documentation

You can also get the current source directly from the git or CVS
repositories. Check respectively http://www.winehq.org/site/git or
http://www.winehq.org/site/cvs for details.

If you fix something, please submit a patch; instructions on how to do
this can be found at http://www.winehq.org/site/sending_patches

Wine is available thanks to the work of many people. See the file
AUTHORS in the distribution for the complete list.

----------------------------------------------------------------

Bugs fixed in 1.0-rc1:

   3164  Missing XP Theme toolbars in app toolbar for Metatrader4
   3362  Picasa Movie feature does nothing
   3426  WinGizmo does not download magic number code
   3792  PrinterPorts does not exist in win.ini
   4644  Intuit Quicken 2006 will not run after installation
   4969  IDA Pro Trial 5.0 doesn't run; VkKeyScan failure?
   6538  Adobe After Effects 7 installer crashes upon startup
   6911  MetaTrader 4.0 icons missing
   6947  CSpy/Tab: Tabs are in the wrong order
   7024  VB program using Tabstrip control produces invalid property under wine
   7179  Enhanced metafile: record EMR_EXTSELECTCLIPRGN not handled
   7800  Grand Theft Auto Series with a gamepad plugged in the protagonistwill start running ahead immedeately
   8069  FAR manager 1.70(build 2087): keeps printing "fixme:curses:WCCURSES_GetEvents Ooch. somebody beat us", and doesn't work.
   8115  MyScribe loads but doesn't go past the login screen (Centos 4.4)
   8125  Marratech 6.1 crashes on start
   8615  Medieval 2: Total War crashes when loading game scenario.
   8783  USB serial ports do not work
   8919  CSS Tab Designer 2 lets wine crash
   9178  "hello world" dos program hangs
   9356  Serial communication not working since wine-0.9.33
   9419  Autocad 2002 crashes after 2 mins of running
   9588  Dragon Naturally Speaking 7 dragonpad corrupted left few chars
   9729  gdi/x11 related changes cause lockups in various win32 gui apps
   9770  Graphical glitches in Children of the Nile demo
  10046  GPSMapedit crashes when editing label on a map
  10056  False error on serial port read
  10431  GPSMapEdit: Unimplemented function gdiplus.dll.GdipGetImageDimension
  10573  dlls/kernel32/tests/comm.c test fails on systems with serial ports
  10627  child window position is not updated
  10756  Dragon Naturally Speaking 9 training feedback lags behind until you pause
  10757  Dragon Naturally Speaking 9 can't control mic volume
  10794  LEGO Racers (and the demo) crashes when launced outside virtual desktop
  10847  Dragon NaturallySpeaking 9.0 Preferred sound level unstable
  11072  Gun Metal thinks POV2 Up is permanently set
  11306  software built with Visual C++ software library crashes
  11339  serial.c:wait_on() sanity checks seem to be too strict
  11420  service control manager API problem: name of named objects might differ (client vs. service process)
  11559  Blood 2: The Chosen (version 1.0) - D3D crash
  11644  Crashes in the dinput device.c and joystick.c tests...
  12052  Flatout 2, dinput_test: crashes if joystick axis mapping is enabled, different joystick sensitivity
  12064  SkySorter halts while starting
  12165  Wrong height on 1st list item, on eMule Plus preferences.
  12166  Richedit "word wrap" refresh
  12373  Nothing is rendered in Crimsonland - blank black screen
  12395  NeverWinterNights 2 DM Toolkit crashes on 0.9.59
  12429  Gamepad buttons not working in PES 6 (ProEvolutionSoccer)
  12431  programs window moves down when clicking in a menu
  12597  3d studio MAX 9 trial installer crash
  12613  Adobe Acrobat Pro 7 trial version does not install
  12680  jack driver produces buffer underruns (regression)
  12831  wineserver use ~34% cpu permanently.
  12833  no hide button in FlashFxp
  12857  Guitar Pro 5 window jumps by the size of the window decoration
  12866  wineserver assertion failure when TMG7 installer completes
  12885  application sees IPv6 enabled, even if whole system has it disabled / blacklisted
  12892  Winedbg crashes on a simple mingw binary
  12895  Winedbg can't return the value of a double
  12907  Text not totally visible in the Display tab (winecfg)
  12913  Regression with D3DTBLEND_MODULATE
  12922  Black screen in all direct'x 3d Apps
  12924  Children of the nile demo crashes
  12928  Microsoft Office 2003 won't install in Wine 0.9.61
  12972  Neverwinter Nights upgrade crashes
  13016  Steel Panthers crashes between missions in campaign
  13074  Large filesize in winefile shown as negative size

----------------------------------------------------------------

Changes since 0.9.61:

Aleksey Bragin (1):
      atl: Remove freeing of an invalid pointer.

Alexander Dorofeyev (10):
      ddraw/tests: Add test for deprecated render states in d3d7.
      ddraw: Move handling of D3DRENDERSTATE_TEXTUREHANDLE from d3ddevice7 to d3ddevice3.
      ddraw: Move handling of D3DRENDERSTATE_TEXTUREMAPBLEND from d3ddevice2 to d3ddevice3.
      ddraw: Fix some texture blending modes.
      ddraw: Add full implementation of IDirect3DDevice7_Load.
      ddraw: Return DDERR_NOCOLORKEY when there is no colorkey.
      ddraw/tests: Add tests for IDirect3DDevice7_Load.
      wined3d: Use source colorkey when passed KEYSRC or KEYSRCOVERRIDE.
      ddraw/tests: Add KEYSRCOVERRIDE test in p8_primary_test.
      wined3d: Set alpha to index even when there is no palette.

Alexandre Julliard (22):
      spoolsv: Improve the service stub so that it can be started and stopped.
      services: Use the correct invalid handle value for the control pipe.
      services: Fixed the result check for the control mutex wait.
      winevdm: Move the DOS memory range check to not trigger for Win16 apps.
      winex11: The XIM callback is called with the X11 lock held.
      preloader: Silence the warning for the low 64k.
      Revert "quartz: Clean up pullpin code."
      server: Don't touch the users count when a system process switches desktops.
      shell32: Set the correct default for shell folders relative to the windows directory.
      kernel32: Set the USERPROFILE and ALLUSERSPROFILE environment variables based on the ProfileList registry keys.
      ntdll: Serial with ReadIntervalTimeout set to MAXDWORD should return immediately even if nothing was read.
      wineconsole: Don't use a Win32 wait on a Unix file descriptor.
      winedos: Only read input from the stdin handle if it is a console.
      winedos: Make sure that the main message queue exists before the DOS thread starts.
      winedos: Print better diagnostics when a DOS app fails to start.
      ntdll: Always set VTIME to 0 to avoid blocking, don't try to set it from the comm timeouts.
      ntdll: Don't consider a 0-byte read from a serial port as a broken pipe.
      ntdll: Ignore failures to retrieve serial status for events we are not interested in.
      user32: The client rectangle is in screen coordinates for the initial WM_NCCALCSIZE.
      services: Send the service name in the control requests.
      winefile: Fix the printf formats for file sizes.
      gdi32: Add missing braces in EMFDRV_SelectPalette.

Andrew Talbot (9):
      dbghelp: Include port.h for possible alternative to strtoull().
      wininet: Remove unused variables.
      inetcomm: Remove unused variables.
      wnaspi32: Remove unused variables.
      cabinet: Indentation fix.
      advapi32: Avoid giving variables same name as library functions.
      hlink: Remove unneeded address-of operators from function names.
      d3d8: Dangling pointers fix.
      ddraw: Indentation fix.

Aric Stewart (1):
      shdocvw: Do not do our iexplore.exe registration if native Internet Explorer is detected to be present.

Detlef Riekenberg (1):
      winspool: Set PrinterPorts for win3.x/win9.x compatibility.

Dmitry Timoshkov (8):
      winex11.drv: Set the size of returned DEVMODE to least common one as XP does.
      user32: Set the size of returned DEVMODE to least common one as XP does.
      winecfg: Fix coordinates and sizes of controls in French Graphics dialog.
      winoldap.mod: Wait until the 32-bit process starts up.
      kernel32: Print in the trace pid and tid of the created process.
      gdi32: Set offPalEntries member of EMREOF to what XP sets it to.
      gdi32: More carefully compare EMF records in tests.
      gdi32: Implement EMFDRV_SelectPalette.

Dylan Smith (3):
      richedit: Removed useless code.
      richedit: The wrong bits were cleared from wBorders in PARAFORMAT2.
      wordpad: Empty the richedit undo buffer on creation.

Francois Gouget (11):
      ole32: Fix spelling of pCapabilities.
      fusion: Fix compilation on systems that don't support nameless unions.
      gdi32/tests: Add a trailing '\n' to a couple of ok() calls.
      msxml3/tests: Add a trailing '\n' to an ok() call.
      d3d9/tests: Fix compilation on systems that don't support nameless unions.
      cryptdlg: Fix the GetFriendlyNameOfCert[AW] call convention.
      mshtml: gcc 2.95 does not allow an array of undefined dimension in a struct. So fix dispex_static_data_t accordingly.
      Assorted spelling fixes.
      Add a comment warning when a table must be kept sorted for later use with bsearch().
      winex11: Standardize a stub trace and add a trailing '\n'.
      Assorted spelling fixes.

Frans Kool (1):
      winhelp: Added missing Dutch translations.

Gerald Pfeifer (2):
      winhelp: Remove extraneous positiveness check for unsigned variable in WINHELP_HandleTextMouse().
      winecfg: Add variable initialization in get_registry_version().

Guy Albertelli (1):
      listview: Return correct value from WM_NOTIFYFORMAT with test.

Hans Leidekker (2):
      wininet: Don't add the user agent header until HttpSendRequest is called.
      wininet: Deal with bogus accept types array passed into HttpOpenRequestA.

Hwang YunSong(황윤성 (2):
      winhelp: Updated Korean resource.
      winecfg: Updated Korean resource.

Jacek Caban (3):
      mshtml: Added DispHTMLSelectElement declaration.
      mshtml: Added more script tests.
      mshtml: Added IMG element tests.

James Hawkins (5):
      msi: Fix a typo.
      fusion: Fix the type of an assembly struct member.
      fusion: Add the missing assembly table structs.
      fusion: The Strings stream can be without a #.
      msi: Use the handle to the treeview item if the item text is not returned.

Jens Albretsen (40):
      xcopy: Added Danish translation.
      winecfg: Added Danish translation.
      cmd: Added Danish translation.
      net: Added Danish translation.
      avifil32: Added Danish translation.
      credui: Added Danish translation.
      wineps.drv: Added Danish translation.
      comdlg: Added missing Danish translations.
      shlwapi: Added Danish translation.
      wordpad: Added Danish translation.
      shell32: Added missing Danish translations.
      oleaut32: Renamed oleaut32_Dk.rc to oleaut32_Da.rc.
      iccvid: Danish translation.
      localui: Danish translation.
      gphoto2: Danish translation.
      mpr: Danish translation.
      mshtml: Danish translation.
      msrle: Danish translation.
      msi: Danish translation.
      msacm: Danish translation.
      hhctrl.ocx: Danish translation.
      localspl: Danish translation.
      msvidc32: Danish translation.
      sane.ds: Danish translation.
      oledlg: Danish translation.
      regedit: Danish translation.
      cmdlgtst: Danish translation.
      progman: Danish translation.
      winspool.drv: Danish translation.
      clock: Danish spelling fixes.
      notepad: Danish spelling fixes.
      wldap32: Danish translation.
      winmm: Danish translation.
      shdoclc: Danish translation.
      wininet: Danish translation.
      oleview: Danish translation.
      reg: Danish translation.
      msvfw32: Danish translation.
      setupapi: Danish translation.
      serialui: Danish translation.

John Klehm (2):
      winex11.drv: Wintab packet serial numbers are passed via WPARAM.
      winex11.drv: Move hardware tablet proximity into x11 layer.

Kai Blin (3):
      secur32: Remove test for sft->Reserved8 field.
      ws2_32: On Win98, SO_MAX_MSG_SIZE is 65527, not 65507.
      secur32: Fix ntlm tests on Vista.

Kirill K. Smirnov (2):
      winhelp: Updated Russian translation.
      winhelp: Pointer coordinates are relative to richedit text window, not the main window.

Kusanagi Kouichi (1):
      imm32: Avoid false FIXMEs.

Lei Zhang (1):
      wininet: Handle NULL input for FindCloseUrlCache.

Maarten Lankhorst (14):
      winex11.drv: Fix a compiler warning.
      netapi32: Make the tests pass under XP that enforces a strict password policy.
      gdi32: Make mapping test slightly less strict so it passes on windows XP.
      winmm: Make mixer test less strict so it passes with SoundMAX drivers on XP.
      netapi32: Fix test crash occuring when NetWkstaUserGetInfo fails.
      winetest: Fix CreateProcess so that debugger tests run without timing out.
      winetest: Fix CreateProcess so that debugger tests run without timing out.
      wininet: Ignore INTERNET_STATUS_DETECTING_PROXY messages in the http test.
      rpcrt4: Fix ndr_marshall test failures.
      ntdll: Fix some exception tests to pass on Windows.
      ntdll: Fix file test to not free memory allocated on the stack.
      kernel32: Fix process tests to pass in Windows.
      kernel32: Fix temporary path test.
      winealsa: Remove calls to deprecated functions.

Marcus Meissner (1):
      widl: Mark non-returning functions as noreturn.

Michael Stefaniuc (1):
      ws2_32: Fix test output string to match the test.

Nikolay Sivov (1):
      gdiplus: Let GdipDrawArcI use float args version.

Paul Vriens (6):
      setupapi/tests: Skip some tests on win9x.
      setupapi/tests: Clean up properly on win9x.
      services.exe: Move a trace to a more appropriate place.
      advapi32/tests: Add another test.
      services.exe: Spelling fixes.
      crypt32/tests: Cleanup registry after tests.

Rob Shearman (3):
      winetest: Detect if an unhandled exception occurred in a child process and print an appropriate message.
      rpcrt4: Add better traces for the server test.
      crypt32: Add stub for CertVerifyCTLUsage.

Roderick Colenbrander (2):
      wined3d: At the start of RemoveContextFromArray numContexts is decreased by 1, the loop which loops through the whole array doesn't take this into account.
      wined3d: Allow stencil support when it wasn't requested on broken drivers.

Vitaliy Margolen (6):
      mshtml: Don't overwrite file types that could be changed by user.
      comctl32: tab: Fix drawing of the icons.
      dinput: Remove redundant variable.
      dinput: Limit number of axes in a different way - map all extra axes to -1.
      dinput: Ignore events from extra joystick buttons.
      dinput: Default value for unassigned POVs should be -1.

Vitaly Lipatov (1):
      wineboot: Add missed short option -u.

--
Alexandre Julliard
julliard@winehq.org
