----------------------------------------------------------------
Sun Oct 25 10:32:23 1998  Alexandre Julliard  <julliard@winehq.com>

	* ole/ole2nls.c, include/winnls.h: Andreas Mohr <100.30936@germany.net>
	Fixes for LANG_NEUTRAL.

	* include/task.h:
	Added some padding to the PDB for ill-behaving apps (problem reported
	by Andreas Mohr).

	* documentation/ioport-trace-hints, include/debug.h, include/debugdefs.h, miscemu/instr.c:
	Jonathan Buzzard <jab@hex.prestel.co.uk>
	Added a new debugging channel io to allow read/writes on a port to be
	logged to a file.

	* windows/keyboard.c: David Faure <David.Faure@insa-lyon.fr>
	Replaced 0x00 with 0x01 in the vkey->sancode array, so that no key is
	ignored. 0x00 is used for generated key events only.

	* windows/message.c, windows/queue.c:
	Douglas Ridgway <ridgway@winehq.com>
	API Documentation for SendMessage, GetTickCount, PostQuitMessage,
	GetMessagePos, GetMessageTime.

	* memory/virtual.c: Marcus Meissner <marcus@jet.franken.de>
	Delete the filename for the mapping instantly.

	* dlls/shell32/shellord.c, relay32/shell32.spec:
	Michael Poole <poole@graviton.res.cmu.edu>
	Stub for SHSimpleIDListFromPath.

	* loader/task.c: Fixed bug in SwitchStackTo.

Sat Oct 24 13:06:16 1998  Alexandre Julliard  <julliard@winehq.com>

	* controls/scroll.c: Patrik Stridvall <ps@leissner.se>
	Check if scrollbar and parent are visible before redraw.

	* if1632/shell.spec, include/shell.h, misc/shell.c, programs/notepad/main.c, relay32/shell32.spec:
	Kai Morich <kai.morich@darmstadt.netsurf.de>
	Added Drag*32 functions.

	* windows/event.c: Kai Morich <kai.morich@darmstadt.netsurf.de>
	Added Drag&Drop from KDE app to 16/32 bit Windoze app.

	* windows/message.c: Kai Morich <kai.morich@darmstadt.netsurf.de>
	Added FIXME message in PostMessage32x if parameters are truncated
	when calling PostMessage16.

	* include/process.h, scheduler/event.c, scheduler/handle.c, scheduler/process.c, scheduler/thread.c:
	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
	Added support for global handles, implemented ConvertToGlobalHandle.
	Allocate startup data and 16-bit stack for initial process.

	* documentation/wine.texinfo: Leigh Wedding <lwedding@corplink.com.au>
	Small fix.

	* programs/progman/.cvsignore, programs/progman/Es.rc, programs/progman/Makefile.in, programs/winhelp/.cvsignore, programs/winhelp/Es.rc, programs/winhelp/Makefile.in, programs/clock/.cvsignore, programs/clock/Es.rc, programs/clock/Makefile.in, programs/notepad/.cvsignore, programs/notepad/Es.rc, programs/notepad/Makefile.in:
	Pablo Saratxaga <srtxg@chanae.alphanet.ch>
	Added Spanish resources.

	* ole/nls/euq.nls, resources/sysres_Es.rc:
	Pablo Saratxaga <srtxg@chanae.alphanet.ch>
	Small corrections.

	* relay32/kernel32.spec, scheduler/process.c:
	Marcus Meissner <marcus@jet.franken.de>
	LoadLibraryExW spec added (function was there).
	SetProcessPriorityBoost stub added.

	* msdos/dpmi.c: Patrik Stridvall <ps@leissner.se>
	Compile fix for Solaris.

	* if1632/.cvsignore, if1632/Makefile.in, if1632/builtin.c, if1632/dispdib.spec, include/dispdib.h, graphics/Makefile.in, graphics/dispdib.c:
	Ove Kaaven <ovek@arcticnet.no>
	Implemented DisplayDib.

	* controls/static.c: Marcus Meissner <marcus@jet.franken.de>
	Hack to support integer ids in all static controls.

	* include/dinput.h, windows/dinput.c:
	Lionel Ulmer <ulmer@directprovider.net>
	Beginning of mouse support in DirectInput (only "standard" mouse
	configuration supported for now).

	* include/*.h, dlls/comctl32/*.c:
	Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Added xxx_Unregister() functions to all common controls.

	* dlls/comctl32/comctl32undoc.c, dlls/comctl32/pager.c, dlls/comctl32/toolbar.c, documentation/common_controls, relay32/comctl32.spec:
	Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Some minor improvements and fixes.

	* dlls/comctl32/rebar.c, include/rebar.h:
	Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Improved the rebar control.

	* dlls/comctl32/tooltips.c: Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Added support for transparent and tracking tooltips.

	* controls/menu.c: Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Fixed a popup menu selection bug.

	* windows/nonclient.c: Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Fixed DrawCaption16() and DrawCaptionTemp16().

	* windows/keyboard.c: David Faure <David.Faure@insa-lyon.fr>
	Fixed warning.

	* graphics/psdrv/Makefile.in, graphics/psdrv/bitmap.c, graphics/psdrv/brush.c, graphics/psdrv/font.c, graphics/psdrv/graphics.c, graphics/psdrv/init.c, graphics/psdrv/ps.c, include/gdi.h, include/psdrv.h, objects/dib.c:
	Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
	Adds Arc, Chord, GetCharWidth, Pie, PolyPolygon, PolyPolyline, RoundRect,
	SetPixel, hatched brushes and a stub for StretchDIBits to the PostScript
	driver.

	* include/debug.h, include/debugdefs.h, include/miscemu.h, msdos/Makefile.in, msdos/interrupts.c:
	Joseph Pranevich <knight@baltimore.wwaves.com>
	Added support for int17 and int19.

	* msdos/int19.c: Carl van Schaik <carl@dreamcoat.che.uct.ac.za>
	Stubs for dos mode reboot interrupt.

	* msdos/int17.c: Carl van Schaik <carl@dreamcoat.che.uct.ac.za>
	Some printer stubs for DOS added.

	* msdos/int13.c: Joseph Pranevich <knight@baltimore.wwaves.com>
	More stubs added. These changes are only partially mine, I just made
	them compile.

	* msdos/int10.c: Joseph Pranevich <knight@baltimore.wwaves.com>
	Added some traces and cleaned up a couple of things.

	* dlls/shell32/shell32_main.h, dlls/shell32/shellord.c, dlls/shell32/shlfolder.c, dlls/shell32/shlview.c, include/shell.h, include/shlobj.h, memory/string.c, ole/ole2nls.c, relay32/shell32.spec, dlls/shell32/dataobject.c, dlls/shell32/enumidlist.c, dlls/shell32/pidl.c, dlls/shell32/shell32_main.c:
	Juergen Schmied <juergen.schmied@metronet.de>
	Changed some string-shell32 functions to 32AW, parameter are
	os depending 32A or 32W (-winver nt351 or nt40), some new functions.
	Some fixes in ole2nls.
	New OLE2NLS_CheckLocale() to handle Locale_User_Default and
	Locale_System_Default.
	Shell32 now dynamicly links to DPA_*(), comdlg32 works again
	(comctl32 heap alloc patch broke it).

	* include/winversion.h, misc/version.c:
	Juergen Schmied <juergen.schmied@metronet.de>
	Added VERSION_IsOsUnicode().

	* scheduler/handle.c:
	Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
	More off-by-one errors fixed.

	* include/file.h, misc/crtdll.c, msdos/vxd.c, win32/file.c, files/file.c:
	Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
	File sharing fixes.

Fri Oct 23 17:26:44 1998  Alexandre Julliard  <julliard@winehq.com>

	* misc/commdlg.c: Nick Holloway <alfie@alfie.demon.co.uk>
	Bug fix.

	* loader/dos/module.c: Ove Kaaven <ovek@arcticnet.no>
	Fixed DOS environment passing.

	* misc/main.c: Juergen Schmied <juergen.schmied@metronet.de>
	Sysmetrics32W for SPI_GETICONTITLELOGFONT returns correct fontname.

	* include/font.h, objects/font.c, objects/gdiobj.c:
	Juergen Schmied <juergen.schmied@metronet.de>
	New FONT_GetObject32W(), GetObject32W().

	* relay32/user32.spec, win32/ordinals.c, windows/user.c:
	Juergen Schmied <juergen.schmied@metronet.de>
	New stub RegisterTaskList.
	New function EnumDisplaySettings32W().

	* misc/ntdll.c: Juergen Schmied <juergen.schmied@metronet.de>
	More parameter checking in RltCopySid.

	* windows/winproc.c: Juergen Schmied <juergen.schmied@metronet.de>
	More message mapping 32A<-->32W for EM_, CB_, LB_ for Unicode.

	* relay32/.cvsignore, relay32/Makefile.in, relay32/avifil32.spec, relay32/builtin32.c:
	Ove Kaaven <ovek@arcticnet.no>
	Added new dll avifil32.dll.

	* loader/dos/dosvm.c, loader/dos/module.c, msdos/dpmi.c, include/dosexe.h:
	Ove Kaaven <ovek@arcticnet.no>
	First shot at DPMI realmode calls.

	* loader/module.c:
	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
	Fixed several bugs with DLL initialization.

Thu Oct 22 17:02:25 1998  Alexandre Julliard  <julliard@winehq.com>

	* scheduler/syslevel.c: Marcus Meissner <marcus@jet.franken.de>
	Added ordinal for two syslevel functions.

	* multimedia/midi.c: Marcus Meissner <marcus@jet.franken.de>
	Another missing WINAPI.

	* include/mmsystem.h: Marcus Meissner <marcus@jet.franken.de>
	Small corrections in mmio declarations.

	* loader/pe_image.c: Marcus Meissner <marcus@jet.franken.de>
	Take virtual sizes in account for the total vma size.

	* ole/nls/rom.nls: Dimitrie O. Paun <dimi@cs.toronto.edu>
	Add some more NLS definitions for the Romanian language.

	* multimedia/dsound.c: Marcus Meissner <marcus@jet.franken.de>
	Some programs (quake2 et al) do check for DSCAPS_EMULDRIVER and stop
	to work. 'Adjust' caps flags accordingly.

	* ole/compobj.c, relay32/ole32.spec:
	Pete Ratzlaff <pratzlaff@cfa.harvard.edu>
	Stub for CoCreateGuid().

	* dlls/comctl32/treeview.c, multimedia/mcicda.c:
	Brian Litzinger <brian@litzinger.com>
	Fixes for FreeBSD.

	* libtest/.cvsignore, libtest/Makefile.in:
	Petter Reinholdtsen <pere@minerva.cc.uit.no>
	Make sure hello3res.h is generated even if 'make depend' never has
	been run.

	* windows/nonclient.c: NF Stevens <norman@arcady.u-net.com>
	Fixed moving and sizing of child windows.

	* include/ts_xlib.h, tools/make_X11wrappers, tsx11/X11_calls, tsx11/ts_xlib.c, windows/keyboard.c:
	Marcus Meissner <marcus@jet.franken.de>
	XQueryKeymap -> TSXQueryKeymap (fixes the XIO errors reported).

Wed Oct 21 17:20:48 1998  Alexandre Julliard  <julliard@winehq.com>

	* include/dosexe.h, loader/dos/dosvm.c, miscemu/main.c:
	Ove Kaaven <ovek@arcticnet.no>
	Added indirection for ctx_debug to the DOS loader, so Winelib works
	again.

	* memory/virtual.c: Marcus Meissner <marcus@jet.franken.de>
	Support anon shared mappings using temporary files (wont be deleted
	yet).

	* misc/main.c: Marcus Meissner <marcus@jet.franken.de>
	Was freeing the incorrect pointers -> crash in mallocs/frees.

	* files/dos_fs.c, relay32/kernel32.spec:
	Marcus Meissner <marcus@jet.franken.de>
	DefineDosDevice stub added.

	* miscemu/main.c, wine.ini: Chad Powell (pxpx@usa.net)
	Added a default program option in wine.conf in section [programs] key
	Default.

	* include/wintypes.h: David Cuthbert <dacut@ece.cmu.edu>
	Better fix for this_is_a_syntax_error.

	* ole/nls/*.nls:
	Pablo Saratxaga <srtxg@chanae.alphanet.ch>
	Added the entries for LOCALE_SISO639LANGNAME and
	LOCALE_SISO3166CTRYNAME.

	* documentation/wine.man: James Juran <jrj120@psu.edu>
	Updated manpage.

	* relay32/msacm32.spec: Patrik Stridvall <ps@leissner.se>
	Fixed wrong ordinals.

	* objects/region.c: NF Stevens <norman@arcady.u-net.com>
	Fixed a bug in RectInRegion.

Tue Oct 20 15:26:26 1998  Alexandre Julliard  <julliard@winehq.com>

	* msdos/interrupts.c: NF Stevens <norman@arcady.u-net.com>
	Removed an incorrect error message.

	* files/drive.c: Petter Reinholdtsen <pere@minerva.cc.uit.no>
	Make sure the access functions are always used to get label and serial
	number.

Mon Oct 19 08:48:24 1998  Alexandre Julliard  <julliard@winehq.com>

	* ole/ole2nls.c: Eric Pouech <eric.pouech@hol.fr>
	Fixed bug on platforms were buffers returned by getenv() shall not be
	free()'ed. Added French (default) in locale handling.

	* include/wintypes.h: Dave Cuthbert <dacut@ece.cmu.edu>
	Changed "this is a syntax error" to "this_is_a_syntax_error" to make a
	compile-time error message make more sense.

	* scheduler/handle.c:
	Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
	Fixed off by one error in HANDLE_GetObjPtr.

----------------------------------------------------------------
Sun Oct 18 14:48:31 1998  Alexandre Julliard  <julliard@winehq.com>

	* files/file.c: Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
	Try to implement the OF_SHARE_XXX options.
	Move the mode translations to functions.

	* include/main.h, ole/compobj.c, ole/ifs.c, ole/ole2disp.c, ole/ole2nls.c, ole/olesvr.c, ole/storage.c:
	Matthew Becker <mbecker@glasscity.net>
	Documentation updates.

	* ole/compobj.c, relay32/ole32.spec:
	Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
	Added stub for CoSetState32.

	* miscemu/main.c: Chad Powell <pxpx@usa.net>
	Added ability to read a startup program from wine.ini file.
	Put it in section [programs] key Startup.

	* include/trackbar.h, include/treeview.h, dlls/comctl32/trackbar.c, dlls/comctl32/treeview.c:
	Alex Priem <alexp@sci.kun.nl>
	Further improvements.

	* include/cursoricon.h, objects/cursoricon.c:
	Turchanov Sergey <turchanov@usa.net>
	Implemented LoadCursorFromFile, fixed DrawIconEx to support offscreen
	drawing, fixed CURSORICON_CreateFromResource to support LR_ semantics.

	* include/bitmap.h, objects/bitmap.c:
	Turchanov Sergey <turchanov@usa.net>
	Fixed LoadImage to support almost all LR_ flags.

	* objects/dib.c: Turchanov Sergey <turchanov@usa.net>
	Fixed bug in DIB_SetImageBits_RLE8 (because 'color' var was WORD, all
	COLOREFs had red part zeroed) that made plenty of cyan colors, minor
	bug fixes, changes to support LR_ flags.

	* include/global.h, memory/virtual.c:
	Turchanov Sergey <turchanov@usa.net>
	Added VIRTUAL_MapFileW to map file to memory in one function call.

	* include/ddraw.h, include/windows.h, include/wintypes.h, windows/multimon.c:
	Turchanov Sergey <turchanov@usa.net>
	Moved Multimonitor API declarations to windows.h.

	* if1632/user.spec, include/driver.h, multimedia/audio.c, multimedia/mcianim.c, multimedia/mcicda.c, multimedia/midi.c, multimedia/mmsystem.c, relay32/winmm.spec, windows/driver.c:
	Turchanov Sergey <turchanov@usa.net>
	Implemented DefDriverProc32 from winmm.dll.

	* controls/scroll.c, include/scroll.h, windows/mdi.c, windows/nonclient.c:
	Alex Korobka <korobka@ams.sunysb.edu>
	Got rid of flickering scrollbar arrows. MDI scrolling speeded up a
	bit.

	* include/winnls.h, ole/nls/deu.nls, ole/ole2nls.c:
	Juergen Schmied <juergen.schmied@metronet.de>
	GetLocaleInfo32A can handle len=0 now, sets LastError and touches
	buffer only when necessary.
	Updated deu.nls and some LCTYPES in winnls.h.

	* if1632/relay.c: Rein Klazes <rklazes@casema.net>
	CallProc[Ex]32W called with lpProcAddress==NULL should return zero and
	not crash.

Sat Oct 17 13:07:48 1998  Alexandre Julliard  <julliard@winehq.com>

	* dlls/comctl32/commctrl.c: Ove Kaaven <ovek@arcticnet.no>
	Reduced huge (1GB) heap creation that caused Starcraft to fail.

	* include/dosexe.h, include/module.h, loader/dos/dosvm.c, multimedia/dplay.c, windows/dialog.c:
	Patrik Stridvall <ps@leissner.se>
	Compile fix for Solaris.

	* multimedia/midi.c: Patrik Stridvall <ps@leissner.se>
	Compile fix for non OSS systems.

	* graphics/ddraw.c: Patrik Stridvall <ps@leissner.se>
	Compile fix for non XF86-DGA systems.

	* libtest/Makefile.in, libtest/volinfo.c:
	Petter Reinholdtsen <pere@td.org.uit.no>
	New file to test DRIVE_GetLabel.

	* multimedia/mcicda.c: Peter Hunnisett <hunnise@nortel.ca>
	Small, suboptimal, fix for 32 bit cdaudio open routines. Needs proper
	32bit cdaudio bit support before it can be removed...

	* graphics/ddraw.c: Peter Hunnisett <hunnise@nortel.ca>
	Added a bunch of stubs for ddraw suface routines. All stubs for
	surface present now.
	Commented out message pump calls. I don't see a reason for them being
	there. Everything works fine with -desktop and -managed still has
	problems. Disagreements?

	* ole/ole2nls.c: Juergen Schmied <juergen.schmied@metronet.de>
	Fixed GetLocaleInfo32A for other languages than en_uk.
	Made it recognise LOCALE_SYSTEM_DEFAULT, LOCALE_SYSTEM_DEFAULT and
	last but not least the first argument lcid where is all about...

	* include/syslevel.h, misc/registry.c, multimedia/dplay.c, multimedia/dsound.c, multimedia/mmsystem.c, multimedia/time.c, windows/caret.c, dlls/msacm32/builtin.c:
	Marcus Meissner <marcus@jet.franken.de>
	Fixed some more missing WINAPIs (hopefully correct).

	* ole/ole2nls.c: Marcus Meissner <marcus@jet.franken.de>
	Fixed the = -> == bug.

	* msdos/int2f.c: Joseph Pranevich <knight@baltimore.wwaves.com>
	Shell parameters (config.sys) and ANSI support stubs.

	* msdos/Makefile.in: Joseph Pranevich <knight@baltimore.wwaves.com>
	Added int16.c and int29.c.

	* include/miscemu.h, msdos/interrupts.c:
	Joseph Pranevich <knight@baltimore.wwaves.com>
	More interrupts that can be done from DOS mode.

	* msdos/int29.c: Joseph Pranevich <knight@baltimore.wwaves.com>
	Added int29 (Fast Write to Screen) support.

	* msdos/int16.c, include/debug.h, include/debugdefs.h:
	Joseph Pranevich <knight@baltimore.wwaves.com>
	Added int16 (Keyboard) support, mostly stubs.

Fri Oct 16 15:40:21 1998  Alexandre Julliard  <julliard@winehq.com>

	* relay32/shell32.spec, dlls/shell32/pidl.c, dlls/shell32/shell32_main.c, dlls/shell32/shellord.c, dlls/shell32/shlfolder.c, dlls/shell32/shlview.c, include/shlobj.h:
	Juergen Schmied <juergen.schmied@metronet.de>
	Many bugfixes, new stubs SHGetRealIDL, SHRegQueryValue32W,
	SHRegQueryValueEx32W, StrRetToStrN, StrChrW, SHAllocShared,
	SHLockShared, SHUnlockShared, SHFreeShared, SetAppStartingCursor32,
	SHLoadOLE32, Shell_MergeMenus32, PathGetDriveNumber32, DriveType32,
	SHAbortInvokeCommand, SHOutOfMemoryMessageBox, SHFlushClipboard.

	* misc/ntdll.c, relay32/ntdll.spec:
	Dietmar Kling <dietmar.kling@usa.net>
	Added undocumented function RtlOpenCurrentUser.

	* objects/cursoricon.c, misc/shell.c, misc/ver.c, misc/version.c, loader/elf.c, loader/module.c, loader/pe_image.c, loader/pe_resource.c, include/neexe.h, include/pe_image.h, include/peexe.h, debugger/dbgmain.c, debugger/msc.c:
	Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
	Renamed all LPIMAGE_* types to PIMAGE_*.

Thu Oct 15 13:03:10 1998  Alexandre Julliard  <julliard@winehq.com>

	* windows/winpos.c: Rein Klazes <rklazes@casema.net>
	Fixed an error when an owned window activates its owner during
	creation.

	* windows/defdlg.c: Rein Klazes <rklazes@casema.net>
	Closing a dialog using the menu bar ("x" or "-" button or windows
	menu) must generate a WM_COMMAND+IDCANCEL message, unlike closing
	normal windows when DestroyWindow() is called.

	* dlls/shell32/pidl.c:
	Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
	Added missing WINAPIs.

	* windows/winpos.c, win32/ordinals.c, relay32/user32.spec:
	Juergen Schmied <juergen.schmied@metronet.de>
	New stubs PrivateExtractIconEx[AW], PrivateExtractIconsW,
	RegisterShellHookWindow, DeregisterShellHookWindow, GetProgmanWindow,
	GetTaskmanWindow, SetProgmanWindow, SetShellWindowEx,
	SetTaskmanWindow.

	* relay32/ntdll.spec, misc/ntdll.c:
	Juergen Schmied <juergen.schmied@metronet.de>
	New stubs NtQueryInformationThread, NtQueryInformationToken,
	RtlAllocateAndInitializeSid, RtlEqualSid, RtlFreeSid.

	* multimedia/mmsystem.c: Turchanov Sergey <turchanov@usa.net>
	Fixed PlaySound to start its thread the right way.

Wed Oct 14 18:40:35 1998  Alexandre Julliard  <julliard@winehq.com>

	* controls/combo.c, controls/listbox.c:
	Alex Korobka <korobka@ams.sunysb.edu>
	CB_SETCURSEL and some other fixes.

	* windows/queue.c: Alex Korobka <korobka@ams.sunysb.edu>
	Better QUEUE_FlushMessages().

	* relay32/gdi32.spec, objects/font.c, include/windows.h, if1632/gdi.spec:
	Moshe Vainer <moshev@easybase.com>
	Partial implementation of GetOutlineTextMetrics32A.
	Added structures for OUTLINETEXTMETRICS.

	* objects/dc.c, include/gdi.h, graphics/x11drv/bitblt.c, graphics/x11drv/bitmap.c, graphics/x11drv/init.c:
	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
	Do not clip source rectangle even by visible region for bitblts.
	Added field 'totalExtent' to WIN_DC_INFO.

	* msdos/vxd.c: Ulrich Weigand <weigand@informatik.uni-erlangen.de>
	Added stub for VMM PM API AH=026[de] (never say 'safe mode').

	* memory/heap.c: Ulrich Weigand <weigand@informatik.uni-erlangen.de>
	Bugfix: Local32Free caused free handles list corruption.

	* include/debugtools.h: Marcus Meissner <marcus@jet.franken.de>
	Fixed --disable-debug config option.

Tue Oct 13 12:50:04 1998  Alexandre Julliard  <julliard@winehq.com>

	* relay32/shell32.spec, dlls/shell32/shellord.c:
	Petter Reinholdtsen <pere@td.org.uit.no>
	Added stubs SHRegCloseKey(), SHRegOpenKey[AW](), SHRegQueryValueExA()
	and FileIconInit() needed by Win95 explorer.

Mon Oct 12 07:25:54 1998  Alexandre Julliard  <julliard@winehq.com>

	* windows/dialog.c, controls/button.c, controls/menu.c:
	Norman Stevens <norman@arcady.u-net.com>
	Improving keyboard handling, including accelerator keys in dialog
	boxes. Also fixes enter key in Agent32 edit box.

Sun Oct 11 19:37:23 1998  Alexandre Julliard  <julliard@winehq.com>

	* misc/commdlg.c: Eric Pouech  <eric.pouech@lemel.fr>
	Added support in file dialog boxes handling for filters like
	"*.txt;*.bat".

	* win32/kernel32.c, scheduler/thread.c, loader/module.c, loader/pe_image.c, loader/task.c, include/module.h, include/pe_image.h:
	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
	Implemented new PE DLL initalization code, trying to call the
	DllEntryPoint routines always in correct order :-)
	Bypass snooping when getting data buffer addresses (thunk buffers,
	__GP handlers) and for 32-bit routines directly called from 16-bit
	(due to stack address size problems).

	* win32/ordinals.c, relay32/kernel32.spec, loader/ne/module.c:
	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
	Implemented CommonUnimpStub, MapHInst(LS|SL)_PN, W32S_BackTo32.
	Stub for HouseCleanLogicallyDeadHandles, fixed k32wvsprintfA.

	* tools/build.c, if1632/kernel.spec, if1632/relay.c, if1632/thunk.c:
	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
	Implemented (partially) the KERNEL Thunklet API and Callback Client
	API (KERNEL.560-568,604-612,619-622).
	Added stubs for K228, K237, KERNEL.365, KERNEL.447.

	* objects/bitmap.c, if1632/gdi.spec:
	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
	Stubs for CreateUser(Discardable)Bitmap16.

	* memory/heap.c, include/winnt.h:
	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
	Implemented HEAP_WINE_CODE16SEG SEGPTR heaps with 16-bit code segments.

	* memory/global.c, include/windows.h:
	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
	GlobalFix16 is supposed to return selector to the memory area.

	* msdos/vxd.c, if1632/Makefile.in, if1632/builtin.c, if1632/comm.spec, if1632/wprocs.spec:
	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
	Stubs for COMM.DRV, REBOOT.VXD, VDD.VXD.

	* scheduler/process.c, scheduler/syslevel.c, include/sig_context.h, include/syslevel.h:
	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
	Use emergency TEB selector to avoid debugger crashes when stepping
	through relay stubs (or when FS is invalid otherwise).

	* windows/event.c, windows/keyboard.c:
	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
	MOUSE.DRV routines moved to event.c. Call mouse event procedure.

	* windows/dce.c, windows/painting.c, windows/scroll.c, objects/clipping.c, objects/dc.c, objects/dcvalues.c, include/dc.h, include/windows.h, if1632/gdi.spec, graphics/x11drv/bitblt.c, graphics/x11drv/clipping.c, graphics/x11drv/graphics.c, graphics/x11drv/text.c, graphics/path.c:
	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
	Changed DC members w.hVisRgn, w.hClipRgn, amd w.hGCClipRgn to
	coordinates relative to the device, not the DC origin. This is
	necessary to correctly implement GetClipRgn16 and InquireVisRgn.
	SelectVisRgn also expects region in device-relative coordinates.
	Adapted the rest of Wine to this coordinate change.
	Implemented ExtSelectClipRgn.

	* tools/winapi-check, scheduler/syslevel.c, files/dos_fs.c:
	Andreas Mohr <100.30936@germany.net>
	Small fix.

	* loader/ne/segment.c, include/module.h, include/neexe.h, if1632/kernel.spec:
	Andreas Mohr <100.30936@germany.net>
	Yet another small self-loader fix.

	* files/drive.c: Andreas Mohr <100.30936@germany.net>
	Fixed severe bug: SetCurrentDirectory32A didn't set pTask->curdir
	correctly due to current drive being set too late.

	* Make.rules.in: Patrik Stridvall <ps@leissner.se>
	Use $(AS) instead of $(CC) to compile .s files.

	* relay32/.cvsignore, relay32/Makefile.in, relay32/builtin32.c, include/debug.h, include/debugdefs.h, include/mmreg.h, if1632/.cvsignore, if1632/Makefile.in, if1632/builtin.c, dlls/Makefile.in, Makefile.in, configure, configure.in:
	Patrik Stridvall <ps@leissner.se>
	Started the implementation of MSACM.DLL, MSACM32.DLL and IMAGEHLP.DLL.

	* include/imagehlp.h, relay32/imagehlp.spec, dlls/imagehlp/.cvsignore, dlls/imagehlp/Makefile.in, dlls/imagehlp/access.c, dlls/imagehlp/debug.c, dlls/imagehlp/imagehlp_main.c, dlls/imagehlp/integrity.c, dlls/imagehlp/internal.c, dlls/imagehlp/modify.c, dlls/imagehlp/symbol.c:
	Patrik Stridvall <ps@leissner.se>
	Started the implementation of IMAGEHLP.DLL.

	* include/msacm.h, include/msacmdrv.h, relay32/msacm32.spec, if1632/msacm.spec, dlls/msacm32/.cvsignore, dlls/msacm32/Makefile.in, dlls/msacm32/builtin.c, dlls/msacm32/driver.c, dlls/msacm32/filter.c, dlls/msacm32/format.c, dlls/msacm32/internal.c, dlls/msacm32/msacm32_main.c, dlls/msacm32/stream.c, dlls/msacm/.cvsignore, dlls/msacm/Makefile.in, dlls/msacm/msacm_main.c:
	Patrik Stridvall <ps@leissner.se>
	Started the implementation of MSACM.DLL and MSACM32.DLL.

	* win32/device.c: Patrik Stridvall <ps@leissner.se>
	Removed things that were earlier added by mistake.

	* relay32/winmm.spec: Patrik Stridvall <ps@leissner.se>
	The implementation of mmioWrite is now called instead of the stub.

	* include/shell.h, dlls/shell32/shellole.c, dlls/shell32/shellord.c, dlls/shell32/shlfolder.c, dlls/shell32/shlview.c:
	Juergen Schmied <juergen.schmied@metronet.de>
	Bugfixes, shellview uses DPA's now, IShellView_GetItemObject implemented.

	* relay32/shell32.spec, dlls/shell32/shell32_main.c:
	Juergen Schmied <juergen.schmied@metronet.de>
	New stubs: SHGetFileInfo32W, ReadCabinetState, WriteCabinetState, IsUserAdmin.
	Implemented: SHGetPathFromIDList32W.
	Changed PathCombine.

	* include/shlobj.h: Juergen Schmied <juergen.schmied@metronet.de>
	New structures DVASPECT, TYMED, IDLList.
	Shell specific clipboard formats.

	* relay32/winspool.spec, misc/printdrv.c:
	Juergen Schmied <juergen.schmied@metronet.de>
	Stub EnumPrintersW.

	* dlls/shell32/dataobject.c:
	Juergen Schmied <juergen.schmied@metronet.de>
	Implemented first functions.

	* dlls/shell32/pidl.c, dlls/shell32/pidl.h:
	Juergen Schmied <juergen.schmied@metronet.de>
	New class IDLList "Item ID List List" (internal).

	* misc/ver.c: Juergen Schmied <juergen.schmied@metronet.de>
	Small changes (uses HIWORD/LOWORD).

	* windows/dialog.c, relay32/user32.spec:
	Sat Oct 10 12:00:00 1998  Juergen Schmied <juergen.schmied@metronet.de>
	Stub CreateDialogIndirectParamAorW.

	* Makefile.in, configure, configure.in:
	Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt>
	Don't install object files when --disable-lib is selected.

	* debugger/hash.c, debugger/msc.c:
	Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt>
	Don't print name for 32 bit lib multiple times.
	Clean up printing in DEBUG_ProcessDeferredDebug.

	* memory/heap.c, dlls/comctl32/tab.c, controls/combo.c:
	David Luyer <luyer@ucs.uwa.edu.au>
	Small fixes.

	* files/drive.c: Petter Reinholdtsen <pere@td.org.uit.no>
	Bugfix: Changed GetDriveType32A(NULL) to use cwd's root.

	* ole/typelib.c, ole/compobj.c, ole/ifs.c, ole/moniker.c, ole/ole2.c, ole/ole2disp.c, ole/ole2nls.c, ole/olecli.c, ole/olesvr.c, ole/storage.c, misc/ntdll.c, misc/registry.c:
	Matthew Becker <mbecker@glasscity.net>
	Documentation corrections/standardizations.

	* multimedia/audio.c, multimedia/init.c, multimedia/mcianim.c, multimedia/mcicda.c, multimedia/mcistring.c, multimedia/midi.c, multimedia/mmsystem.c, include/mmsystem.h, include/multimedia.h:
	Eric Pouech  <eric.pouech@lemel.fr>
	Started coding 32 bit MCI handling.
	Added Open/Close to low-level MCI drivers (audio, midi, anim, cda).
	Wrote MCI MIDI support.

	* graphics/x11drv/graphics.c: Rein Klazes <rklazes@casema.net>
	Yet another improvement to the bezier code.

	* windows/message.c: Rein Klazes <rklazes@casema.net>
	GetTickCounts() has a granularity in windows of 25 msec's.
	Girotel's serial communication appears to depend on it, so I guess
	it's a feature...

	* misc/comm.c: Rein Klazes <rklazes@casema.net>
	Update the modemn status bit that indicates whether the RLSD line is
	active in every call to GetCommError(). This is not the proper place,
	but since wine doesn't do any event-stuff...
	Fixed some TRACE call's faced with non zero terminated strings.
	Restore the terminal state at CloseCommt to the state it was at
	OpenComm(), so the modem will go off-hook.

	* loader/module.c: Alexander Larsson  <alla@lysator.liu.se>
	GetModuleFileName32A() returns long filename if app sets osversion >=
	4.0. Also moved the long filename hackery to GetLongPathName32A() so
	it can be used by win32 programs.

	* files/dos_fs.c: Alexander Larsson <alla@lysator.liu.se>
	GetLongPathName32A() returns dos format long filename instead of unix
	format.

	* dlls/comctl32/listview.c: Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Small fixes.

	* relay32/shell32.spec, dlls/shell32/shellord.c:
	Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Added SHFlushClipboard.

	* relay32/comctl32.spec, include/commctrl.h, dlls/comctl32/comctl32undoc.c:
	Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Fixed some undocumented functions.
	Changed algorithm in DPA_QuickSort().
	Fixed heap creation/destruction and control [un]registration in
	ComCtl32LibMain().

	* dlls/comctl32/header.c: Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Fixed a bug.

	* include/tooltips.h, dlls/comctl32/tooltips.c:
	Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Added tracking support and fixed loading of resource strings.
	Added unregister code.

	* include/debug.h, include/debugdefs.h, include/ipaddress.h, include/nativefont.h, dlls/comctl32/Makefile.in, dlls/comctl32/commctrl.c, dlls/comctl32/ipaddress.c, dlls/comctl32/nativefont.c:
	Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Added IPAddress and NativeFont controls.

	* include/imagelist.h, dlls/comctl32/imagelist.c:
	Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Some minor improvements.

	* include/toolbar.h, dlls/comctl32/toolbar.c:
	Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Improved drawing and placement code. Explorer style common dialogs are
	looking good now.

	* objects/cursoricon.c: Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Fixed bug in DrawIconEx32().

	* misc/main.c: Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Improved GetSystemInformation32[A/W].

	* windows/nonclient.c, relay32/user32.spec, include/windows.h, if1632/user.spec:
	Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Added DrawCaption[16/32] and DrawCaptionTemp[16/32A/32W].
	Fixed handling of WS_EX_TOOLWINDOW.

	* documentation/common_controls: Eric Kohl <ekohl@abo.rhein-zeitung.de>
	Updated.

	* windows/event.c, windows/keyboard.c, include/keyboard.h:
	David Faure <faure@kde.org>
	Added KEYBOARD_UpdateState, to read the modifiers when the wine app is
	activated. Uses the new KEYBOARD_UpdateOneState.
	Fixed a problem with menu accelerators (Alt-letter generates a down
	arrow event which beeps if not filtered).
	Speeded up ToAscii16/32() a little bit.

	* debugger/break.c, debugger/db_disasm.c, debugger/dbg.y, debugger/expr.c, debugger/source.c, debugger/types.c:
	Ove Kaaven <ovek@arcticnet.no>
	Made Wine's debugger work satisfactorily with DOS apps.
	Perhaps dereferencing work better for Win16 apps too now, but
	it appears the debugger core wasn't designed for segmentation.

	* msdos/dpmi.c: Ove Kaaven <ovek@arcticnet.no>
	Simulates DPMI memory map by converting lower-MB segment base
	addresses as necessary. Implemented allocating/freeing DOS memory
	blocks. Added XMS hook. (DPMI remains disabled by default until
	someone implements the raw mode switch entry points pkunzip needs.)

	* msdos/int21.c: Ove Kaaven <ovek@arcticnet.no>
	I think it's time to rethink the HFILE16_TO_HFILE32 strategy,
	can't keep working around flaws in it like this (now stdio
	was getting closed when programs close handles >=5)

	* msdos/xms.c, msdos/Makefile.in, msdos/int2f.c:
	Ove Kaaven <ovek@arcticnet.no>
	Implemented basic XMS functions. wcb.exe (Win16 disassembler) now
	seems to work fine under Wine.

	* loader/dos/dosvm.c, loader/dos/module.c, include/dosexe.h, include/miscemu.h:
	Ove Kaaven <ovek@arcticnet.no>
	Moved some system dependencies to loader/dos/dosvm.c. Implemented
	environmental argv[0] passing to DOS apps. Added XMS hooks.

	* debugger/stabs.c: Ove Kaaven <ovek@arcticnet.no>
	Added a memset() to prevent a debugger segfault caused by
	uninitialized pointers in the stabs lookup tables.

	* graphics/ddraw.c: Marcus Meissner <marcus@jet.franken.de>
	A few fixes.

	* relay32/ntdll.spec: Marcus Meissner <marcus@jet.franken.de>
	Added RtlAllocateAndInitializeSid entry.

	* loader/Makefile.in, loader/elf.c, loader/module.c, loader/pe_image.c, include/config.h.in, include/module.h, include/pe_image.h, include/peexe.h, configure, configure.in:
	Marcus Meissner <marcus@jet.franken.de>
	Generic dynamic dll loader using dl*() API.
	Includes: stdcall->cdecl mapping ability, snooping.
	(Tested only with glide2x.dll -> libglide2x.so)

	* multimedia/init.c, multimedia/time.c, include/mmsystem.h, include/multimedia.h:
	Marcus Meissner <marcus@jet.franken.de>
	Added win32 enhanced functionality to timer callbacks.

	* win32/console.c: Marcus Meissner <marcus@jet.franken.de>
	Added bad hacks so WriteConsoleOutput works on vt100 and PeekMessage
	does at least a bit of keyboard input.

	* relay32/snoop.c: Marcus Meissner <marcus@jet.franken.de>
	Should display again.

Sat Oct 10 15:52:46 1998  Alexandre Julliard  <julliard@winehq.com>

	* windows/dialog.c: Dave Pickles <davep@nugate.demon.co.uk>
	Implemented DS_CENTER dialog style.

	* misc/main.c: Pablo Saratxaga <srtxg@chanae.alphanet.ch>
	Added function to build the Windows numeric language ID from language,
	code, charset and dialect strings, like used by Unix LANG variable.

	* ole/ole2nls.c, ole/nls/README, include/winnls.h, ole/nls/*.nls:
	Pablo Saratxaga <srtxg@chanae.alphanet.ch>
	More NLS data.

	* graphics/ddraw.c: Peter Schlaile <udbz@rz.uni-karlsruhe.de>
	Fixed a lot of bugs in ddraw.c to make xlib support work.
	Runs successfully TR2Demo and Jazz Jackrabbit II Demo!

	* objects/gdiobj.c: Cliff Wright <cliff@snipe444.org>
	Added DC object type to the list of valid objects that can be deleted
	by DeleteObject32.

Sun Oct  4 18:20:29 1998  Alexandre Julliard  <julliard@winehq.com>

	* ChangeLog:
	Starting new format changelog (older changes moved to
	documentation/ChangeLog.OLD).
