Release 960324

Sun Mar 24 13:13:11 1996  Alexandre Julliard  <julliard@lrc.epfl.ch>

	* [include/win.h] [windows/*.c]
	Replaced next, parent, child and owner handles by pointers in WND
	structure. This should improve performance, and should be
	reasonably safe since Microsoft did the same in Win95.

	* [include/wintypes.h] [*/*]
	Redefined HANDLE to be UINT instead of a pointer for Winelib. This
	allows removing a lot of unnecessary casts and NPFMTs.

	* [windows/caret.c]
	Create the caret brush upon CreateCaret(); use the bitmap
	dimensions for the caret.
	Fixed CARET_DisplayCaret() to use PatBlt().

Fri Mar 22 16:00:00 1996  Anand Kumria <akumria@ozemail.com.au>

	* [misc/winsocket.c]
	More sanity checks, fixup some erroneous return codes.

	* [documentation/winsock]
	Description of how compatible the winsock is currently.

Fri Mar 22 13:05:34 1996  Ulrich Schmid  <uschmid@mail.hh.provi.de>

	* [library/winmain.c]
	Set `lpszCmdParam' by concatenating arguments.

	* [loader/module.c]
	WinExec: accept Unix commands, use Wine emulator.

Mon Mar 18 12:16:27 1996  Martin von Loewis <loewis@informatik.hu-berlin.de>

	* [if1632/kernel32.spec][win32/thread.c][include/kernel32.h]
	DeleteCriticalSection, EnterCriticalSection,
 	InitializeCriticalSection, LeaveCriticalSection, TlsAlloc,
 	TlsFree, TlsGetValue, TlsSetValue: new functions.
	CRITICAL_SECTION: new structure.

	* [if1632/kernel32.spec][win32/code_page.c]
	WideCharToMultiByte: new function.

	* [if1632/kernel32.spec][win32/file.c]
	GetFileAttributesA: new function.

	* [if1632/kernel32.spec][misc/main.c]
	GetEnvironmentStringsW, FreeEnvironmentStringsA,
 	FreeEnvironmentStringsW: new functions.
	
	* [if1632/user.spec][win32/cursoricon32.c][win32/Makefile.in]
	cursoricon32.c: new file.
	LoadCursorA, LoadCursorW: modified implementation from LoadCursor
 	to WIN32_*.
	LoadIconA, LoadIconW: modified implementation from LoadIconA32
	to WIN32_*.

	* [include/struct32.h]
	pragma pack inserted.
	CURSORICON32 structures added.

	* [include/winnls.h]
	Constants CP_* and WC_* added.

	* [loader/pe_image.c]
	PE_LoadModule: call PE_InitDLL with hModule rather than wpnt.

Sun Mar 17 16:59:12 1996  Albrecht Kleine  <kleine@ak.sax.de>

	* [misc/commdlg.c]
	Introduced hook function handling in file dialog.
	Removed an unnecessary ShowWindow call in FILEDLG_WMCommand().

Thu Mar 14 10:50:00 1996  Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>

	* [if1632/gdi32.spec]
	Added GetNearestColor.

	* [if1632/kernel32.spec]
	Added GlobalAddAtomA.

	* [win32/param32.c]
	Added stackframe.h to includes.
	WIN32_GlobalAddAtomA() - new function.
diff --git a/objects/gdiobj.c b/objects/gdiobj.c
index d840c1e..ad3ef50 100644
--- a/objects/gdiobj.c
+++ b/objects/gdiobj.c
@@ -174,7 +174,7 @@
       /* Create default palette */
 
     if (!(hpalette = COLOR_Init())) return FALSE;
-    StockObjects[DEFAULT_PALETTE] = (GDIOBJHDR *) GDI_HEAP_LIN_ADDR( hpalette );
+    StockObjects[DEFAULT_PALETTE] = (GDIOBJHDR *)GDI_HEAP_LIN_ADDR( hpalette );
 
       /* Create default bitmap */
 
@@ -217,8 +217,8 @@
     GDIOBJHDR * object;
 
       /* Can't free stock objects */
-    if ((DWORD)handle >= FIRST_STOCK_HANDLE &&
-	(DWORD)handle <= LAST_STOCK_HANDLE   ) return TRUE;
+    if ((handle >= FIRST_STOCK_HANDLE) && (handle <= LAST_STOCK_HANDLE))
+        return TRUE;
     
     object = (GDIOBJHDR *) GDI_HEAP_LIN_ADDR( handle );
     if (!object) return FALSE;
@@ -240,9 +240,8 @@
 {
     GDIOBJHDR * ptr = NULL;
 
-    if ((DWORD)handle >= FIRST_STOCK_HANDLE &&
-	(DWORD)handle <= LAST_STOCK_HANDLE   )
-      ptr = StockObjects[(DWORD)handle - FIRST_STOCK_HANDLE];
+    if ((handle >= FIRST_STOCK_HANDLE) && (handle <= LAST_STOCK_HANDLE))
+      ptr = StockObjects[handle - FIRST_STOCK_HANDLE];
     else 
       ptr = (GDIOBJHDR *) GDI_HEAP_LIN_ADDR( handle );
     if (!ptr) return NULL;
@@ -261,7 +260,7 @@
     GDIOBJHDR * header = (GDIOBJHDR *) GDI_HEAP_LIN_ADDR( obj );
     if (!header) return FALSE;
 
-    dprintf_gdi(stddeb, "DeleteObject: "NPFMT"\n", obj );
+    dprintf_gdi(stddeb, "DeleteObject: %04x\n", obj );
 
       /* Delete object */
 
@@ -285,9 +284,9 @@
 {
     if ((obj < 0) || (obj >= NB_STOCK_OBJECTS)) return 0;
     if (!StockObjects[obj]) return 0;
-    dprintf_gdi(stddeb, "GetStockObject: returning %ld\n",
-		(DWORD)FIRST_STOCK_HANDLE + obj );
-    return (HANDLE)((DWORD)FIRST_STOCK_HANDLE + obj);
+    dprintf_gdi(stddeb, "GetStockObject: returning %d\n",
+                FIRST_STOCK_HANDLE + obj );
+    return (HANDLE)(FIRST_STOCK_HANDLE + obj);
 }
 
 
@@ -297,12 +296,11 @@
 int GetObject( HANDLE handle, int count, LPSTR buffer )
 {
     GDIOBJHDR * ptr = NULL;
-    dprintf_gdi(stddeb, "GetObject: "NPFMT" %d %p\n", handle, count, buffer );
+    dprintf_gdi(stddeb, "GetObject: %04x %d %p\n", handle, count, buffer );
     if (!count) return 0;
 
-    if ((DWORD)handle >= FIRST_STOCK_HANDLE &&
-	(DWORD)handle <= LAST_STOCK_HANDLE   )
-      ptr = StockObjects[(DWORD)handle - FIRST_STOCK_HANDLE];
+    if ((handle >= FIRST_STOCK_HANDLE) && (handle <= LAST_STOCK_HANDLE))
+      ptr = StockObjects[handle - FIRST_STOCK_HANDLE];
     else
       ptr = (GDIOBJHDR *) GDI_HEAP_LIN_ADDR( handle );
     if (!ptr) return 0;
@@ -332,10 +330,9 @@
     GDIOBJHDR * ptr = NULL;
     DC * dc;
     
-    dprintf_gdi(stddeb, "SelectObject: "NPFMT" "NPFMT"\n", hdc, handle );
-    if ((DWORD)handle >= FIRST_STOCK_HANDLE &&
-	(DWORD)handle <= LAST_STOCK_HANDLE   )
-      ptr = StockObjects[(DWORD)handle - FIRST_STOCK_HANDLE];
+    dprintf_gdi(stddeb, "SelectObject: %04x %04x\n", hdc, handle );
+    if ((handle >= FIRST_STOCK_HANDLE) && (handle <= LAST_STOCK_HANDLE))
+      ptr = StockObjects[handle - FIRST_STOCK_HANDLE];
     else 
       ptr = (GDIOBJHDR *) GDI_HEAP_LIN_ADDR( handle );
     if (!ptr) return 0;
@@ -369,7 +366,7 @@
  */
 BOOL UnrealizeObject( HANDLE handle )
 {
-    dprintf_gdi(stdnimp, "UnrealizeObject: "NPFMT"\n", handle );
+    dprintf_gdi(stdnimp, "UnrealizeObject: %04x\n", handle );
     return TRUE;
 }
 
@@ -393,7 +390,7 @@
     
     int i, retval = 0;
 
-    dprintf_gdi( stddeb, "EnumObjects: "NPFMT" %d %08lx %08lx\n",
+    dprintf_gdi( stddeb, "EnumObjects: %04x %d %08lx %08lx\n",
                  hdc, nObjType, (DWORD)lpEnumFunc, lParam );
     switch(nObjType)
     {
@@ -440,122 +437,17 @@
         break;
     }
     return retval;
-#if 0
-
-  /*    HANDLE 		handle;
-   DC 			*dc;*/
-  HANDLE       	*lphObj;
-  GDIOBJHDR 	*header;
-  WORD         	wMagic;
-  LPSTR		lpLog;  	/* Point to a LOGBRUSH or LOGPEN struct */
-  HANDLE       	hLog;
-  int	       	nRet = 0;
-  
-  if (lpEnumFunc == 0) {
-    fprintf(stderr,"EnumObjects // Bad EnumProc callback address !\n");
-    return 0;
-  }
-  switch (nObjType) {
-   case OBJ_PEN:
-    wMagic = PEN_MAGIC;
-    dprintf_gdi(stddeb,"EnumObjects("NPFMT", OBJ_PEN, %08lx, %p);\n",
-		hDC, (LONG)lpEnumFunc, lpData);
-    hLog = GDI_HEAP_ALLOC( sizeof(LOGPEN) );
-    lpLog = (LPSTR) GDI_HEAP_LIN_ADDR(hLog);
-    if (lpLog == NULL) {
-      fprintf(stderr,"EnumObjects // Unable to alloc LOGPEN struct !\n");
-      return 0;
-    }
-    break;
-   case OBJ_BRUSH:
-    wMagic = BRUSH_MAGIC;
-    dprintf_gdi(stddeb,"EnumObjects("NPFMT", OBJ_BRUSH, %08lx, %p);\n",
-		hDC, (LONG)lpEnumFunc, lpData);
-    hLog = GDI_HEAP_ALLOC( sizeof(LOGBRUSH) );
-    lpLog = (LPSTR) GDI_HEAP_LIN_ADDR(hLog);
-    if (lpLog == NULL) {
-      fprintf(stderr,"EnumObjects // Unable to alloc LOGBRUSH struct !\n");
-      return 0;
-    }
-    break;
-   default:
-    fprintf(stderr,"EnumObjects("NPFMT", %04X, %08lx, %p); // Unknown OBJ type !\n", 
-	    hDC, nObjType, (LONG)lpEnumFunc, lpData);
-    return 0;
-  }
-#ifdef notdef  /* FIXME: stock object ptr won't work in callback */
-  dprintf_gdi(stddeb,"EnumObjects // Stock Objects first !\n");
-  for (i = 0; i < NB_STOCK_OBJECTS; i++) {
-    header = StockObjects[i];
-    if (header->wMagic == wMagic) {
-      PEN_GetObject( (PENOBJ *)header, sizeof(LOGPEN), lpLog);
-      BRUSH_GetObject( (BRUSHOBJ *)header, sizeof(LOGBRUSH),lpLog);
-      dprintf_gdi(stddeb,"EnumObjects // StockObj lpLog=%p lpData=%p\n", lpLog, lpData);
-      if (header->wMagic == BRUSH_MAGIC) {
-	dprintf_gdi(stddeb,"EnumObjects // StockBrush lbStyle=%04X\n", ((LPLOGBRUSH)lpLog)->lbStyle);
-	dprintf_gdi(stddeb,"EnumObjects // StockBrush lbColor=%08lX\n", ((LPLOGBRUSH)lpLog)->lbColor);
-	dprintf_gdi(stddeb,"EnumObjects // StockBrush lbHatch=%04X\n", ((LPLOGBRUSH)lpLog)->lbHatch);
-      }
-      if (header->wMagic == PEN_MAGIC) {
-	dprintf_gdi(stddeb,"EnumObjects // StockPen lopnStyle=%04X\n", ((LPLOGPEN)lpLog)->lopnStyle);
-	dprintf_gdi(stddeb,"EnumObjects // StockPen lopnWidth=%d\n", ((LPLOGPEN)lpLog)->lopnWidth.x);
-	dprintf_gdi(stddeb,"EnumObjects // StockPen lopnColor=%08lX\n", ((LPLOGPEN)lpLog)->lopnColor);
-      }
-      nRet = CallEnumObjectsProc( lpEnumFunc,
-				 GDI_HEAP_SEG_ADDR(hLog),
-				 (int)lpData );
-      dprintf_gdi(stddeb,"EnumObjects // after Callback!\n");
-      if (nRet == 0) {
-	GDI_HEAP_FREE(hLog);
-	dprintf_gdi(stddeb,"EnumObjects // EnumEnd requested by application !\n");
-	return 0;
-      }
-    }
-  }
-  dprintf_gdi(stddeb,"EnumObjects // Now DC owned objects %p !\n", header);
-#endif  /* notdef */
-  
-  if (lpPenBrushList == NULL) return 0;
-  for (lphObj = lpPenBrushList; *lphObj != 0; ) {
-    dprintf_gdi(stddeb,"EnumObjects // *lphObj="NPFMT"\n", *lphObj);
-    header = (GDIOBJHDR *) GDI_HEAP_LIN_ADDR(*lphObj++);
-    if (header->wMagic == wMagic) {
-      dprintf_gdi(stddeb,"EnumObjects // DC_Obj lpLog=%p lpData=%p\n", lpLog, lpData);
-      if (header->wMagic == BRUSH_MAGIC) {
-	BRUSH_GetObject( (BRUSHOBJ *)header, sizeof(LOGBRUSH), lpLog);
-	dprintf_gdi(stddeb,"EnumObjects // DC_Brush lbStyle=%04X\n", ((LPLOGBRUSH)lpLog)->lbStyle);
-	dprintf_gdi(stddeb,"EnumObjects // DC_Brush lbColor=%08lX\n", ((LPLOGBRUSH)lpLog)->lbColor);
-	dprintf_gdi(stddeb,"EnumObjects // DC_Brush lbHatch=%04lX\n", (LONG)((LPLOGBRUSH)lpLog)->lbHatch);
-      }
-      if (header->wMagic == PEN_MAGIC) {
-	PEN_GetObject( (PENOBJ *)header, sizeof(LOGPEN), lpLog);
-	dprintf_gdi(stddeb,"EnumObjects // DC_Pen lopnStyle=%04X\n", ((LPLOGPEN)lpLog)->lopnStyle);
-	dprintf_gdi(stddeb,"EnumObjects // DC_Pen lopnWidth=%ld\n", (LONG)((LPLOGPEN)lpLog)->lopnWidth.x);
-	dprintf_gdi(stddeb,"EnumObjects // DC_Pen lopnColor=%08lX\n", ((LPLOGPEN)lpLog)->lopnColor);
-      }
-      nRet = CallEnumObjectsProc(lpEnumFunc, GDI_HEAP_SEG_ADDR(hLog),
-				 (LONG)lpData);
-      if (nRet == 0)
-        break;
-    }
-  }
-  GDI_HEAP_FREE(hLog);
-  dprintf_gdi(stddeb,"EnumObjects // End of enumeration !\n");
-  return nRet;
-#endif
 }
 
 
 /***********************************************************************
- *		IsGDIObject(GDI.462)
+ *           IsGDIObject    (GDI.462)
  */
 BOOL IsGDIObject(HANDLE handle)
 {
-	GDIOBJHDR *object;
+    GDIOBJHDR *object;
 
-	object = (GDIOBJHDR *) GDI_HEAP_LIN_ADDR( handle );
-	if (object)
-		return TRUE;
-	else
-		return FALSE;
+    object = (GDIOBJHDR *) GDI_HEAP_LIN_ADDR( handle );
+    /* FIXME: should check magic here */
+    return (object != NULL);
 }