For information on how to post a useful bug report, please
read documentation/bugreports.

This is intended to be a place where you should look first if
you want to contribute to Wine development. Add your e-mail
address to the corresponding entry if you are working on/have 
done something for one of the problems. You are encouraged to 
add new entries and, more importantly, remove those for the 
bugs you fixed ;-)
------------------------------------------------------------
As of Jun 1998 -

General:

 * TrueType, .FON rasterizer.

 * Incomplete thread/process scheduling support in Win32 code.

 * Threading for non Linux systems completely missing. (might use
   LWPs in Solaris, FreeBSD? NetBSD? SCO?)

 * Very alpha printing code using win16 drivers.

 * Very alpha internal PostScript driver. [h.davies1@physics.ox.ac.uk]

 * Extremely alpha Win95 interface code.		
 * No OLE2 and OLE32 support (including OLE2 interfaces etc.).
	 (started work on pidl-handling, IShellFolders IEnumIdLists 
	 and SH* functions juergen.schmied@metronet.de)	

 * No MS Video support. [just started, marcus@jet.franken.de]

 * COMDLG32 support not complete yet [bertho@akhphd.au.dk]

 * COMMCTRL/COMCTL32 support in progress [ekohl@abo.rhein-zeitung.de].

 * No manual pages describing the various Windows calls.
	- You can find information about most of the Win32 API calls
          on the www.microsoft.com (go to 'search').

 * A lot of the extensions to the GDI that were introduced with Win32 are
   not supported at all or only in a very rudimentary way. (World transforms,
   arc direction, GM_ADVANCED to name but a few)

Miscellaneous:

 * 16-bit Eudora 1.5.2 goes into recursion trying to display
   a horizontal scrollbar (SetScrollPos() artifact).
   Windows95 telnet.exe and NT 3.51 telnet.exe exhibit the same behaviour.

 * mIRC 'commands' menu stays on top and will not refresh.

 * mIRC is unable to show 'Options' dialog.

 * Tab switching in mIRC 'Setup' dialog stops erasing background
   after a random number of repetitions.

 * nBytesWidth in CURSORICONINFO is bogus for some bpp
   (doesn't reflect the fact that bits are packed and 16-bit aligned).

 * Progman and AOL complain about being unable to convert bitmaps
   (probably because of bytes width stuff).

 * Netscape displays partially downloaded inline graphics with
   wrong offsets.

 * Text alignment problems in Word and Write (variable pitch fonts).

 * Font mapper weights are rather crude.

 * "Cursor XXXX has more than 1 bpp!"

 * SGI window manager treats Wine windows as topmost.

 * Write shows blank space instead of Paintbrush OLE1 object ( GetDIBits()? ).

 * AllocCSToDSAlias() shouldn't alloc alias for the same segment multiple
   times.
 
 * Some programs expect that menu window handles stay the same all the time.
   (chemdraw). This implies that the menu popupwindows are just hidden, not
   destroyed in real Windows.

Where to look in source files:

 * grep for FIXME in the source files.
