Release 950817

Thu Aug 17 19:30:14 1995  Alexandre Julliard  <julliard@sunsite.unc.edu>

	* [*/Makefile.in]
	Removed winelibclean target, as it doesn't work anyway.

	* [controls/button.c]
	Avoid drawing the focus rectangle outside of the button.

	* [controls/widgets.c]
	Fixed bug with the size of the reserved bytes for the Edit
	control (caused Eudora to crash).

	* [debugger/*] [include/debugger.h]
	Unified debugger address handling. Segmented and linear addresses
	are no grouped in a single type DBG_ADDR.
	All commands now accept seg:off addresses.
	Module entry points are now loaded upon first entry to the
	debugger, so that entry points of the loaded executable also
	appear in the symbol table.

	* [include/registers.h] [miscemu/*.c]
	Register macros are now of the form 'AX_reg(context)' instead of 'AX'.
	This makes code less readable, but will prevent a lot of name
	clashes with other definitions. It also avoids a hidden reference
	to the 'context' variable.

	* [ipc/dde_atom.c] [misc/atom.c]
	All *AddAtom and *FindAtom functions now take a SEGPTR parameter,
	to allow supporting integer atoms.
	Moved atom.c to memory/ directory.

	* [loader/task.c]
	Fixed environment allocation to compute the size dynamically.
	Added 'windir' environment variable.
	Fixed GetDOSEnvironment() to return the current task environment.

	* [windows/message.c]
	Fixed bug in MSG_GetWindowForEvent().

Wed Aug  9 11:40:43 1995  Marcus Meissner  <msmeissn@faui01.informatik.uni-erlangen.de>

	* [include/ole.h]
	Added a lot of structures  from my Borland Manual. Neither complete,
	nor 100% right (check please)
	
	* [misc/shell.c]
	Fixed some of the Reg* functions.
	Enhanced ShellExecute.
	Please test: wine "regedit.exe /v" mplayer.exe soundrec.exe
	Do YOU know the format of \WINDOWS\REG.DAT? Mail me please :)

	* [misc/dos_fs.c]
	Make umsdos mounted windows dirs work again.

	* [miscemu/emulate.c]
	Added some comments, preimplementation of subfunction 7.

	* [multimedia/mmsystem.c]
	Implemented mciSendString. not complete, not clean, not
	necessarily working (only checked with a program which uses
 	'cdaudio' (one working program is cool.exe, a shareware waveditor
 	with cdaudio play facilities.)

	* [multimedia/mcicda.c]
	Segptr fixes in DriverProc
	Default cdrom drive in Linux is /dev/cdrom ... usually a symbolic
 	link to your real cdrom device.

Tue Aug  8 19:41:50 CDT 1995 Daniel Schepler <dks2@cec.wustl.edu>

	* [loader/resource.c]
	Don't crash in a LoadString to NULL

	* [loader/resource.c]
	Fixed accelerators to work with modifiers.  (ALT-x modifiers still
 	won't work unless the ALT keypress exited the menu.)

	* [misc/file.c]
	Expand a file to the current offset with an _lwrite of size zero.

	* [misc/file.c]
	Set a newly created file to read-write instead of write-only.
	
Sun Aug  6 20:28:35 1995  Anand Kumria <akumria@ozemail.com.au>

	* [misc/main.c] [include/msdos.h]
	Fixed to return DOS version 6.22, and the correct byte order
	for Windows programs.

Wed Aug  2 12:36:33 1995   Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>

	* [include/options.h] [memory/global.c] [misc/main.c]
	Make the new IPC run-time selectible, disabling it by default.
	(I think it's only useful for libwine, anyway.)

	* [loader/task.c] [memory/selector.c]
	In FreeSelector(), walk up the stack and fix the frames.

	* [objects/dib.c]
	Missing break statement in DIB_SetImageBits_RLE8().
	In GetDIBits(), set the compression flag in the bitmap info to zero.

	* [windows/dialog.c]
	GetNextDlgGroupItem() needs to treat the first child as if it had
	an implicit WS_GROUP bit set.

Mon Jul 31 15:44:47 EDT 1995 Louis-D. Dubeau <ldd@step.polymtl.ca>

	* [misc/dos_fs.c]
	Quick'n dirty fix for the initialisation of the Z: information
	structure.
diff --git a/windows/win.c b/windows/win.c
index de84af9..054df8c 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -224,7 +224,7 @@
     CLASS *classPtr;
     HDC hdc;
 
-    if (!(hclass = CLASS_FindClassByName( DESKTOP_CLASS_NAME, 0, &classPtr )))
+    if (!(hclass = CLASS_FindClassByName( DESKTOP_CLASS_ATOM, 0, &classPtr )))
 	return FALSE;
 
     hwndDesktop = USER_HEAP_ALLOC( sizeof(WND)+classPtr->wc.cbWndExtra );
@@ -302,17 +302,23 @@
     int wmcreate;
     XSetWindowAttributes win_attr;
 
-    if (windowName != NULL && HIWORD(windowName) == 0) {
-	dprintf_win(stddeb,"CreateWindowEx: %04x ", LOWORD(windowName));
-    } else {
-	dprintf_win(stddeb,"CreateWindowEx: '%s' ", windowName);
-    }
-    dprintf_win(stddeb, "%08lX '%s' %08lX %d,%d %dx%d %04X %04X %04X %08lx\n",
-		exStyle, className, style, x, y, width, height,
+    /* FIXME: windowName and className should be SEGPTRs */
+
+    if (HIWORD(windowName))
+	dprintf_win( stddeb, "CreateWindowEx: '%s' ", windowName );
+    else
+	dprintf_win( stddeb, "CreateWindowEx: %04x ", LOWORD(windowName) );
+    if (HIWORD(className))
+        dprintf_win( stddeb, "'%s' ", className );
+    else
+        dprintf_win( stddeb, "%04x ", LOWORD(className) );
+
+    dprintf_win(stddeb, "%08lx %08lx %d,%d %dx%d %04x %04x %04x %08lx\n",
+		exStyle, style, x, y, width, height,
 		parent, menu, instance, data);
     /* 'soundrec.exe' has negative position ! 
        Why ? For now, here a patch : */
-    if (!strcmp(className, "SoundRec"))
+    if (HIWORD(className) && !strcmp(className, "SoundRec"))
     {
 	if (x < 0) x = 0;
 	if (y < 0) y = 0;
@@ -330,7 +336,7 @@
     {
 	/* Make sure parent is valid */
         if (!IsWindow( parent )) {
-	    dprintf_win(stddeb,"CreateWindowEx: Parent %x is not a windows\n", parent);
+	    dprintf_win(stddeb,"CreateWindowEx: Parent %x is not a window\n", parent);
 	    return 0;
 	}
     }
@@ -342,9 +348,15 @@
 	}
     }
 
-    if (!(class = CLASS_FindClassByName( className, GetExePtr( instance ), &classPtr ))) {
-	fprintf(stderr,"CreateWindow BAD CLASSNAME '%s' !\n", className);
-	return 0;
+    {
+        /* FIXME!! */
+        char buff[256];
+        if (HIWORD(className)) strcpy( buff, className );
+        if (!(class = CLASS_FindClassByName( HIWORD(className) ? MAKE_SEGPTR(buff) : (SEGPTR)className,
+                                         GetExePtr( instance ), &classPtr ))) {
+            fprintf(stderr,"CreateWindow BAD CLASSNAME '%s' !\n", className);
+            return 0;
+        }
     }
 
       /* Correct the window style */
@@ -457,14 +469,12 @@
     {
         if (menu) SetMenu(hwnd, menu);
         else if (classPtr->wc.lpszMenuName)
-            SetMenu(hwnd,LoadMenu(instance,(SEGPTR)classPtr->wc.lpszMenuName));
+            SetMenu( hwnd, LoadMenu( instance, classPtr->wc.lpszMenuName ) );
     }
     else wndPtr->wIDmenu = menu;
 
       /* Send the WM_CREATE message */
 
-    hclassName = USER_HEAP_ALLOC( strlen(className)+1 );
-    strcpy( USER_HEAP_LIN_ADDR(hclassName), className );
     createStruct.lpCreateParams = (LPSTR)data;
     createStruct.hInstance      = instance;
     createStruct.hMenu          = menu;
@@ -474,24 +484,29 @@
     createStruct.x              = x;
     createStruct.y              = y;
     createStruct.style          = style;
-    createStruct.lpszClass      = (LPSTR)USER_HEAP_SEG_ADDR(hclassName);
     createStruct.dwExStyle      = 0;
-    if (windowName)
+    if (HIWORD(className))
     {
-	if (HIWORD(windowName) == 0) {
-	    /* Hack for SS_ICON controls */
-	    createStruct.lpszName = windowName;
-	    hwinName = 0;
-	} else  {
-	    hwinName = USER_HEAP_ALLOC( strlen(windowName)+1 );
-	    strcpy( USER_HEAP_LIN_ADDR(hwinName), windowName );
-	    createStruct.lpszName = (LPSTR)USER_HEAP_SEG_ADDR(hwinName);
-	}
+        hclassName = USER_HEAP_ALLOC( strlen(className)+1 );
+        strcpy( USER_HEAP_LIN_ADDR(hclassName), className );
+        createStruct.lpszClass = (LPSTR)USER_HEAP_SEG_ADDR(hclassName);
+    }
+    else
+    {
+        hclassName = 0;
+        createStruct.lpszClass = className;
+    }
+
+    if (HIWORD(windowName))
+    {
+        hwinName = USER_HEAP_ALLOC( strlen(windowName)+1 );
+        strcpy( USER_HEAP_LIN_ADDR(hwinName), windowName );
+        createStruct.lpszName = (LPSTR)USER_HEAP_SEG_ADDR(hwinName);
     }
     else
     {
         hwinName = 0;
-        createStruct.lpszName = NULL;
+        createStruct.lpszName = windowName;
     }
 
     wmcreate = SendMessage( hwnd, WM_NCCREATE, 0, MAKE_SEGPTR(&createStruct) );
@@ -506,7 +521,7 @@
 	wmcreate = SendMessage(hwnd, WM_CREATE, 0, MAKE_SEGPTR(&createStruct));
     }
 
-    USER_HEAP_FREE( hclassName );
+    if (hclassName) USER_HEAP_FREE( hclassName );
     if (hwinName) USER_HEAP_FREE( hwinName );
 
     if (wmcreate == -1)
@@ -609,7 +624,7 @@
 /***********************************************************************
  *           FindWindow   (USER.50)
  */
-HWND FindWindow(LPSTR ClassMatch, LPSTR TitleMatch)
+HWND FindWindow( SEGPTR ClassMatch, LPSTR TitleMatch )
 {
     HCLASS hclass;
     CLASS *classPtr;