Release 961102

Sat Nov  2 12:50:40 1996  Alexandre Julliard  <julliard@lrc.epfl.ch>

	* [files/dos_fs.c]
	Added long file name mask in DOSFS_FindNext().

	* [loader/pe_image.c] [loader/task.c]
	Moved Win32 task startup into TASK_CallToStart().

	* [objects/dc.c]
	Fixed SetDCState() for memory DC (thanks to Constantine
	Sapuntzakis for spotting this one).

	* [windows/winpos.c]
	Fixed WINPOS_ForceXWindowRaise() to preserve correct Z-order.

	* [*/*]
	Added Win32 version for many graphics functions.

Thu Oct 31 10:00:18 1996  Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>

	* [controls/button.c]
	BUTTON_CheckAutoRadioButton() unchecks only auto radio buttons.

	* [controls/edit.c]
	EM_GETSEL result should have HIWORD(result) >= LOWORD(result); old
	EDIT_EM_GetSel() renamed to EDIT_GetSel(). 

	* [windows/dialog.c]
	DS_LOCALEDIT is a dialog style not an edit style.

	* [windows/winproc.c]
	Stop stack trashing when wndPtr->text == NULL.

Tue Oct 29 23:35:04 1996   Constantine P Sapuntzakis <csapuntz@mit.edu>

	* [windows/dce.c]
	GetDCEx32 - The determination of whether to use the DC cache or
 	not should be independent of DCX_USESTYLE.

Sat Oct 26 17:31:00 1996  Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>

	* [files/directory.c]
	Added errno.h to #includes

	* [tools/makedep.c]
	Close files once they have been processed.
diff --git a/objects/dc.c b/objects/dc.c
index 215bc50..834e0f8 100644
--- a/objects/dc.c
+++ b/objects/dc.c
@@ -185,9 +185,9 @@
     RealizeDefaultPalette( dc->hSelf );
     SetTextColor( dc->hSelf, dc->w.textColor );
     SetBkColor( dc->hSelf, dc->w.backgroundColor );
-    SelectObject( dc->hSelf, dc->w.hPen );
-    SelectObject( dc->hSelf, dc->w.hBrush );
-    SelectObject( dc->hSelf, dc->w.hFont );
+    SelectObject32( dc->hSelf, dc->w.hPen );
+    SelectObject32( dc->hSelf, dc->w.hBrush );
+    SelectObject32( dc->hSelf, dc->w.hFont );
     CLIPPING_UpdateGCRegion( dc );
 }
 
@@ -379,19 +379,18 @@
 
     memset( &newdc->u.x, 0, sizeof(newdc->u.x) );
     memcpy( &newdc->w, &dc->w, sizeof(dc->w) );
-    memcpy( &newdc->u.x.pen, &dc->u.x.pen, sizeof(dc->u.x.pen) );
 
     newdc->hSelf = (HDC32)handle;
     newdc->saveLevel = 0;
     newdc->w.flags |= DC_SAVED;
 
     newdc->w.hGCClipRgn = 0;
-    newdc->w.hVisRgn = CreateRectRgn( 0, 0, 0, 0 );
-    CombineRgn( newdc->w.hVisRgn, dc->w.hVisRgn, 0, RGN_COPY );	
+    newdc->w.hVisRgn = CreateRectRgn32( 0, 0, 0, 0 );
+    CombineRgn32( newdc->w.hVisRgn, dc->w.hVisRgn, 0, RGN_COPY );	
     if (dc->w.hClipRgn)
     {
-	newdc->w.hClipRgn = CreateRectRgn( 0, 0, 0, 0 );
-	CombineRgn( newdc->w.hClipRgn, dc->w.hClipRgn, 0, RGN_COPY );
+	newdc->w.hClipRgn = CreateRectRgn32( 0, 0, 0, 0 );
+	CombineRgn32( newdc->w.hClipRgn, dc->w.hClipRgn, 0, RGN_COPY );
     }
     return handle;
 }
@@ -402,37 +401,56 @@
  */
 void SetDCState( HDC16 hdc, HDC16 hdcs )
 {
-    DC * dc, * dcs;
-    HRGN32 hVisRgn, hClipRgn, hGCClipRgn;
-    HFONT16 hfont;
-    HBRUSH16 hbrush;
+    DC *dc, *dcs;
     
     if (!(dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ))) return;
     if (!(dcs = (DC *) GDI_GetObjPtr( hdcs, DC_MAGIC ))) return;
     if (!dcs->w.flags & DC_SAVED) return;
     dprintf_dc(stddeb, "SetDCState: %04x %04x\n", hdc, hdcs );
 
-      /* Save the regions, font & brush before overwriting everything */
-    hVisRgn    = dc->w.hVisRgn;
-    hClipRgn   = dc->w.hClipRgn;
-    hGCClipRgn = dc->w.hGCClipRgn;
-    hfont      = dc->w.hFont;
-    hbrush     = dc->w.hBrush;
-    memcpy( &dc->w, &dcs->w, sizeof(dc->w) );
-    memcpy( &dc->u.x.pen, &dcs->u.x.pen, sizeof(dc->u.x.pen) );
-    dc->w.flags &= ~DC_SAVED;
+    dc->w.flags           = dcs->w.flags & ~DC_SAVED;
+    dc->w.devCaps         = dcs->w.devCaps;
+    dc->w.hFirstBitmap    = dcs->w.hFirstBitmap;
+    dc->w.hDevice         = dcs->w.hDevice;
+    dc->w.ROPmode         = dcs->w.ROPmode;
+    dc->w.polyFillMode    = dcs->w.polyFillMode;
+    dc->w.stretchBltMode  = dcs->w.stretchBltMode;
+    dc->w.relAbsMode      = dcs->w.relAbsMode;
+    dc->w.backgroundMode  = dcs->w.backgroundMode;
+    dc->w.backgroundColor = dcs->w.backgroundColor;
+    dc->w.textColor       = dcs->w.textColor;
+    dc->w.backgroundPixel = dcs->w.backgroundPixel;
+    dc->w.textPixel       = dcs->w.textPixel;
+    dc->w.brushOrgX       = dcs->w.brushOrgX;
+    dc->w.brushOrgY       = dcs->w.brushOrgY;
+    dc->w.textAlign       = dcs->w.textAlign;
+    dc->w.charExtra       = dcs->w.charExtra;
+    dc->w.breakTotalExtra = dcs->w.breakTotalExtra;
+    dc->w.breakCount      = dcs->w.breakCount;
+    dc->w.breakExtra      = dcs->w.breakExtra;
+    dc->w.breakRem        = dcs->w.breakRem;
+    dc->w.MapMode         = dcs->w.MapMode;
+    dc->w.DCOrgX          = dcs->w.DCOrgX;
+    dc->w.DCOrgY          = dcs->w.DCOrgY;
+    dc->w.CursPosX        = dcs->w.CursPosX;
+    dc->w.CursPosY        = dcs->w.CursPosY;
+    dc->w.WndOrgX         = dcs->w.WndOrgX;
+    dc->w.WndOrgY         = dcs->w.WndOrgY;
+    dc->w.WndExtX         = dcs->w.WndExtX;
+    dc->w.WndExtY         = dcs->w.WndExtY;
+    dc->w.VportOrgX       = dcs->w.VportOrgX;
+    dc->w.VportOrgY       = dcs->w.VportOrgY;
+    dc->w.VportExtX       = dcs->w.VportExtX;
+    dc->w.VportExtY       = dcs->w.VportExtY;
 
-      /* Restore the regions */
-    dc->w.hVisRgn    = hVisRgn;
-    dc->w.hClipRgn   = hClipRgn;
-    dc->w.hGCClipRgn = hGCClipRgn;
-    dc->w.hFont      = hfont;
-    dc->w.hBrush     = hbrush;
-    CombineRgn( dc->w.hVisRgn, dcs->w.hVisRgn, 0, RGN_COPY );
-    SelectClipRgn( hdc, dcs->w.hClipRgn );
-
-    SelectObject( hdc, dcs->w.hBrush );
-    SelectObject( hdc, dcs->w.hFont );
+    if (!(dc->w.flags & DC_MEMORY)) dc->w.bitsPerPixel = dcs->w.bitsPerPixel;
+    CombineRgn32( dc->w.hVisRgn, dcs->w.hVisRgn, 0, RGN_COPY );
+    SelectClipRgn32( hdc, dcs->w.hClipRgn );
+    SelectObject32( hdc, dcs->w.hBitmap );
+    SelectObject32( hdc, dcs->w.hBrush );
+    SelectObject32( hdc, dcs->w.hFont );
+    SelectObject32( hdc, dcs->w.hPen );
+    GDISelectPalette( hdc, dcs->w.hPalette, FALSE );
 }
 
 
@@ -564,7 +582,7 @@
         !dc->funcs->pCreateDC( dc, NULL, NULL, NULL, NULL ))
     {
         dprintf_dc( stddeb, "CreateDC: creation aborted by device\n" );
-        DeleteObject( hbitmap );
+        DeleteObject32( hbitmap );
         GDI_HEAP_FREE( dc->hSelf );
         return 0;
     }
@@ -596,16 +614,16 @@
     
     if (!(dc->w.flags & DC_SAVED))
     {
-	SelectObject( hdc, STOCK_BLACK_PEN );
-	SelectObject( hdc, STOCK_WHITE_BRUSH );
-	SelectObject( hdc, STOCK_SYSTEM_FONT );
-        if (dc->w.flags & DC_MEMORY) DeleteObject( dc->w.hFirstBitmap );
+	SelectObject32( hdc, STOCK_BLACK_PEN );
+	SelectObject32( hdc, STOCK_WHITE_BRUSH );
+	SelectObject32( hdc, STOCK_SYSTEM_FONT );
+        if (dc->w.flags & DC_MEMORY) DeleteObject32( dc->w.hFirstBitmap );
         if (dc->funcs->pDeleteDC) dc->funcs->pDeleteDC(dc);
     }
 
-    if (dc->w.hClipRgn) DeleteObject( dc->w.hClipRgn );
-    if (dc->w.hVisRgn) DeleteObject( dc->w.hVisRgn );
-    if (dc->w.hGCClipRgn) DeleteObject( dc->w.hGCClipRgn );
+    if (dc->w.hClipRgn) DeleteObject32( dc->w.hClipRgn );
+    if (dc->w.hVisRgn) DeleteObject32( dc->w.hVisRgn );
+    if (dc->w.hGCClipRgn) DeleteObject32( dc->w.hGCClipRgn );
     
     return GDI_FreeObject( hdc );
 }